892 lines
21 KiB
C++
892 lines
21 KiB
C++
// PaneIcons.cpp : implementation file
|
|
//
|
|
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
|
|
// (c)1998-2008 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "commandbarsdesigner.h"
|
|
#include "PaneIcons.h"
|
|
#include "MainFrm.h"
|
|
#include "DialogNewIcon.h"
|
|
#include "DialogBitmapExport.h"
|
|
#include "DialogBitmapImport.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
#define ID_PANEICONS_COMBO 1011
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CControlIconsView, CWnd)
|
|
//{{AFX_MSG_MAP(CControlIconsView)
|
|
ON_WM_ERASEBKGND()
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_PAINT()
|
|
ON_WM_LBUTTONDBLCLK()
|
|
ON_WM_VSCROLL()
|
|
ON_WM_HSCROLL()
|
|
ON_WM_SIZE()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
LRESULT CControlIconsView::WindowProc(UINT message,WPARAM wParam,LPARAM lParam)
|
|
{
|
|
switch (message)
|
|
{
|
|
case WM_NCPAINT:
|
|
{
|
|
CWnd::WindowProc(message, wParam, lParam);
|
|
|
|
CRect rc;
|
|
GetWindowRect(&rc);
|
|
CWindowDC dc(this);
|
|
rc.OffsetRect(-rc.TopLeft());
|
|
COLORREF clr = GetStaticFrameColor();
|
|
dc.Draw3dRect(rc, clr, clr);
|
|
return TRUE;
|
|
}
|
|
}
|
|
return CWnd::WindowProc(message, wParam, lParam);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CControlIconsView construction/destruction
|
|
|
|
CControlIconsView::CControlIconsView()
|
|
{
|
|
m_pSelected = NULL;
|
|
m_pIconSet = NULL;
|
|
|
|
m_bScrollVisible[SB_VERT] = FALSE;
|
|
m_bScrollVisible[SB_HORZ] = FALSE;
|
|
|
|
}
|
|
|
|
CControlIconsView::~CControlIconsView()
|
|
{
|
|
}
|
|
|
|
|
|
#define THUMB_WIDTH (90 - 20)
|
|
#define THUMB_HEIGHT (100 - 20)
|
|
#define INFO_HEIGHT 15
|
|
|
|
|
|
void CControlIconsViewItem::Draw(CDC* pDC, BOOL bSelected, int x, int y, CSize sz)
|
|
{
|
|
CRect rcPicture(x, y, x + sz.cx, y + sz.cy - INFO_HEIGHT);
|
|
CRect rcInfo(CPoint(x, y + sz.cy - INFO_HEIGHT), CSize(sz.cx, INFO_HEIGHT));
|
|
|
|
COLORREF clrText = GetXtremeColor(COLOR_BTNTEXT);
|
|
|
|
if (!bSelected)
|
|
{
|
|
pDC->FillSolidRect(rcPicture, GetXtremeColor(COLOR_3DFACE));
|
|
pDC->Draw3dRect(rcPicture, GetXtremeColor(COLOR_APPWORKSPACE), GetXtremeColor(COLOR_3DDKSHADOW));
|
|
|
|
pDC->FillSolidRect(rcInfo, /*RGB(237, 237, 202)*/GetXtremeColor(XPCOLOR_TAB_INACTIVE_BACK));
|
|
pDC->Draw3dRect(rcInfo, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_BTNHIGHLIGHT));
|
|
} else
|
|
{
|
|
pDC->FillSolidRect(rcPicture, GetXtremeColor(COLOR_HIGHLIGHT));
|
|
pDC->Draw3dRect(rcPicture, GetXtremeColor(COLOR_3DHIGHLIGHT), GetXtremeColor(COLOR_3DDKSHADOW));
|
|
|
|
pDC->FillSolidRect(rcInfo, GetXtremeColor(COLOR_HIGHLIGHT));
|
|
pDC->Draw3dRect(rcInfo, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_BTNHIGHLIGHT));
|
|
pDC->DrawFocusRect(rcInfo);
|
|
|
|
clrText = GetXtremeColor(COLOR_HIGHLIGHTTEXT);
|
|
}
|
|
|
|
CString str = imageState == xtpImageNormal? _T("Normal"): imageState == xtpImageChecked? _T("Checked"):
|
|
imageState == xtpImageHot? _T("Hot") : imageState == xtpImagePressed? _T("Pressed") : _T("Disabled");
|
|
|
|
pDC->SetTextColor(clrText);
|
|
pDC->DrawText(str, rcInfo, DT_SINGLELINE|DT_END_ELLIPSIS|DT_VCENTER|DT_CENTER);
|
|
|
|
CSize szDevice = pDC->GetTextExtent(_T("xxx"));
|
|
|
|
CRect rcDevice(rcPicture);
|
|
rcDevice.top = rcPicture.bottom - szDevice.cy - 4;
|
|
|
|
str.Format(_T("%ix%i"), pIcon->GetWidth(), pIcon->GetHeight());
|
|
pDC->DrawText(str, rcDevice, DT_SINGLELINE|DT_END_ELLIPSIS|DT_VCENTER|DT_CENTER);
|
|
|
|
CRect rcImage (rcPicture);
|
|
rcImage.DeflateRect(4, 4, 4, rcDevice.Height());
|
|
|
|
CXTPImageManagerIconHandle& hIcon = GetIcon();
|
|
ASSERT(!hIcon.IsEmpty());
|
|
{
|
|
CSize sz(min(pIcon->GetWidth(), rcImage.Width()), min(pIcon->GetHeight(), rcImage.Height()));
|
|
CRect rcImageRect (CPoint(rcImage.CenterPoint().x - sz.cx /2, rcImage.CenterPoint().y - sz.cy /2), sz);
|
|
|
|
pIcon->Draw(pDC, rcImageRect.TopLeft(), hIcon);
|
|
|
|
rcImageRect.InflateRect(1, 1);
|
|
pDC->Draw3dRect(rcImageRect, GetXtremeColor(COLOR_3DSHADOW), GetXtremeColor(COLOR_BTNHIGHLIGHT));
|
|
}
|
|
|
|
}
|
|
|
|
CControlIconsViewItem* CControlIconsView::HitTest(CPoint pt)
|
|
{
|
|
POSITION pos = m_lstItems.GetHeadPosition();
|
|
while (pos)
|
|
{
|
|
CControlIconsViewItem& item = m_lstItems.GetNext(pos);
|
|
|
|
CRect rc(CPoint(- GetScrollOffset(SB_HORZ) + 3 + item.ptPosition.x * THUMB_WIDTH, - GetScrollOffset(SB_VERT) + 3 + item.ptPosition.y * THUMB_HEIGHT), CSize(THUMB_WIDTH - 5, THUMB_HEIGHT - 5));
|
|
|
|
if (rc.PtInRect(pt))
|
|
return &item;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CControlIconsView drawing
|
|
|
|
void CControlIconsView::OnPaint()
|
|
{
|
|
CPaintDC dcPaint(this);
|
|
|
|
CXTPClientRect rc(this);
|
|
|
|
CXTPBufferDC dc(dcPaint, rc);
|
|
dc.FillSolidRect(CXTPClientRect(this), GetXtremeColor(COLOR_APPWORKSPACE));
|
|
|
|
CXTPFontDC fnt(&dc, XTPPaintManager()->GetRegularFont());
|
|
dc.SetBkMode(TRANSPARENT);
|
|
|
|
|
|
POSITION pos = m_lstItems.GetHeadPosition();
|
|
while (pos)
|
|
{
|
|
CControlIconsViewItem& item = m_lstItems.GetNext(pos);
|
|
|
|
item.Draw(&dc, m_pSelected == &item, - GetScrollOffset(SB_HORZ) + 3 + item.ptPosition.x * THUMB_WIDTH, - GetScrollOffset(SB_VERT) + 3 + item.ptPosition.y * THUMB_HEIGHT, CSize(THUMB_WIDTH - 5, THUMB_HEIGHT - 5));
|
|
|
|
}
|
|
}
|
|
|
|
void CControlIconsView::RefreshIcons(CXTPImageManagerIconSet* pIconSet)
|
|
{
|
|
DeleteAllItems();
|
|
|
|
CXTPImageManagerIconSet::CIconSetMap* pMapIcons = pIconSet->GetIcons();
|
|
m_pIconSet = pIconSet;
|
|
m_pSelected = NULL;
|
|
|
|
POSITION pos = pMapIcons->GetStartPosition();
|
|
UINT nWidth;
|
|
CXTPImageManagerIcon* pIcon;
|
|
|
|
int nCount = 0;
|
|
|
|
while (pos)
|
|
{
|
|
pMapIcons->GetNextAssoc(pos, nWidth, pIcon);
|
|
|
|
if (!pIcon->IsScaled())
|
|
{
|
|
|
|
CControlIconsViewItem itemNormal(nCount, 0, xtpImageNormal, pIcon);
|
|
CControlIconsViewItem itemHot(nCount, 1, xtpImageHot, pIcon);
|
|
CControlIconsViewItem itemDisabled(nCount, 2, xtpImageDisabled, pIcon);
|
|
CControlIconsViewItem itemChecked(nCount, 3, xtpImageChecked, pIcon);
|
|
CControlIconsViewItem itemPressed(nCount, 4, xtpImagePressed, pIcon);
|
|
|
|
m_lstItems.AddTail(itemNormal);
|
|
m_lstItems.AddTail(itemHot);
|
|
m_lstItems.AddTail(itemDisabled);
|
|
m_lstItems.AddTail(itemChecked);
|
|
m_lstItems.AddTail(itemPressed);
|
|
|
|
nCount++;
|
|
}
|
|
}
|
|
UpdateScrollBars();
|
|
|
|
|
|
Invalidate(FALSE);
|
|
}
|
|
|
|
void CControlIconsView::UpdateScrollBars()
|
|
{
|
|
int nStateCount = 5;
|
|
|
|
int nCount = (int)m_lstItems.GetCount() / nStateCount;
|
|
|
|
int nHeight = 3 + nCount * THUMB_HEIGHT;
|
|
CXTPClientRect rc(this);
|
|
|
|
m_bScrollVisible[SB_VERT] = rc.Height() < nHeight;
|
|
|
|
ShowScrollBar(SB_VERT, m_bScrollVisible[SB_VERT]);
|
|
|
|
if (m_bScrollVisible[SB_VERT])
|
|
{
|
|
SCROLLINFO si ;
|
|
|
|
si.cbSize = sizeof(SCROLLINFO) ;
|
|
si.fMask = SIF_PAGE | SIF_RANGE ;
|
|
|
|
|
|
si.nPage = rc.Height() ;
|
|
si.nMax = nHeight - 1;
|
|
si.nMin = 0 ;
|
|
SetScrollInfo(SB_VERT, &si) ;
|
|
|
|
EnableScrollBarCtrl(SB_VERT, TRUE);
|
|
}
|
|
|
|
|
|
int nWidth = m_lstItems.GetCount() > 0? 3 + nStateCount * THUMB_WIDTH: 0;
|
|
|
|
m_bScrollVisible[SB_HORZ] = rc.Width() < nWidth;
|
|
|
|
ShowScrollBar(SB_HORZ, m_bScrollVisible[SB_HORZ]);
|
|
|
|
if (m_bScrollVisible[SB_HORZ])
|
|
{
|
|
SCROLLINFO si ;
|
|
|
|
si.cbSize = sizeof(SCROLLINFO);
|
|
si.fMask = SIF_PAGE | SIF_RANGE ;
|
|
|
|
|
|
si.nPage = rc.Width();
|
|
si.nMax = nWidth - 1;
|
|
si.nMin = 0 ;
|
|
SetScrollInfo(SB_HORZ, &si) ;
|
|
|
|
EnableScrollBarCtrl(SB_HORZ, TRUE);
|
|
}
|
|
|
|
}
|
|
|
|
void CControlIconsView::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CWnd::OnSize(nType, cx, cy);
|
|
UpdateScrollBars();
|
|
}
|
|
|
|
void CControlIconsView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
// its horizontal scroll bar
|
|
int nCurPos = GetScrollPos(SB_VERT);
|
|
|
|
// decide what to do for each diffrent scroll event
|
|
switch(nSBCode)
|
|
{
|
|
case SB_LEFT: nCurPos = 0; break;
|
|
case SB_RIGHT: nCurPos = GetScrollLimit(SB_VERT); break;
|
|
case SB_LINELEFT: nCurPos = max(nCurPos - 6, 0); break;
|
|
case SB_LINERIGHT: nCurPos = min(nCurPos + 6, GetScrollLimit(SB_VERT)); break;
|
|
case SB_PAGELEFT: nCurPos = max(nCurPos - CXTPClientRect(this).Height(), 0); break;
|
|
case SB_PAGERIGHT: nCurPos = min(nCurPos + CXTPClientRect(this).Height(), GetScrollLimit(SB_VERT)); break;
|
|
|
|
case SB_THUMBTRACK:
|
|
case SB_THUMBPOSITION: nCurPos = nPos; break;
|
|
}
|
|
|
|
SetScrollPos(SB_VERT, nCurPos);
|
|
Invalidate(FALSE);
|
|
|
|
CWnd::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
void CControlIconsView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
// its horizontal scroll bar
|
|
int nCurPos = GetScrollPos(SB_HORZ);
|
|
|
|
// decide what to do for each diffrent scroll event
|
|
switch(nSBCode)
|
|
{
|
|
case SB_LEFT: nCurPos = 0; break;
|
|
case SB_RIGHT: nCurPos = GetScrollLimit(SB_HORZ); break;
|
|
case SB_LINELEFT: nCurPos = max(nCurPos - 6, 0); break;
|
|
case SB_LINERIGHT: nCurPos = min(nCurPos + 6, GetScrollLimit(SB_HORZ)); break;
|
|
case SB_PAGELEFT: nCurPos = max(nCurPos - CXTPClientRect(this).Width(), 0); break;
|
|
case SB_PAGERIGHT: nCurPos = min(nCurPos + CXTPClientRect(this).Width(), GetScrollLimit(SB_HORZ)); break;
|
|
|
|
case SB_THUMBTRACK:
|
|
case SB_THUMBPOSITION: nCurPos = nPos; break;
|
|
}
|
|
|
|
SetScrollPos(SB_HORZ, nCurPos);
|
|
Invalidate(FALSE);
|
|
|
|
CWnd::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
int CControlIconsView::GetScrollOffset(int nBar)
|
|
{
|
|
if (!m_bScrollVisible[nBar])
|
|
return 0;
|
|
|
|
return GetScrollPos(nBar);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CControlIconsView message handlers
|
|
|
|
BOOL CControlIconsView::OnEraseBkgnd(CDC* /*pDC*/)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
void CControlIconsView::OnLButtonDown(UINT /*nFlags*/, CPoint point)
|
|
{
|
|
CControlIconsViewItem* pSelected = HitTest(point);
|
|
|
|
if (pSelected != m_pSelected)
|
|
{
|
|
m_pSelected = pSelected;
|
|
Invalidate(FALSE);
|
|
}
|
|
SetFocus();
|
|
}
|
|
|
|
void CControlIconsView::Edit()
|
|
{
|
|
if (!m_pSelected)
|
|
return;
|
|
|
|
CControlIconsViewItem* pSelected = m_pSelected;
|
|
|
|
CXTPImageEditorDlg id;
|
|
id.SetIcon(pSelected->GetIcon());
|
|
if (id.DoModal() == IDOK)
|
|
{
|
|
CXTPImageManagerIconHandle iconHandle;
|
|
id.GetIcon(&iconHandle);
|
|
|
|
pSelected->pIcon->SetIcon(iconHandle, pSelected->imageState);
|
|
m_pPaneIcons->GetImageManager()->RefreshAll();
|
|
|
|
m_pPaneIcons->SetModified();
|
|
m_pPaneIcons->RefreshAll();
|
|
}
|
|
}
|
|
|
|
void CControlIconsView::OnLButtonDblClk(UINT nFlags, CPoint point)
|
|
{
|
|
if (m_pSelected)
|
|
{
|
|
Edit();
|
|
return;
|
|
|
|
}
|
|
|
|
CWnd::OnLButtonDblClk(nFlags, point);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPaneIcons
|
|
|
|
CPaneIcons::CPaneIcons()
|
|
{
|
|
m_wndIconsView.m_pPaneIcons = this;
|
|
m_pActiveIcons = NULL;
|
|
m_pLastControl = NULL;
|
|
|
|
m_pImageManager = NULL;
|
|
m_pActiveFrame = NULL;
|
|
m_pActiveResourceManager = NULL;
|
|
}
|
|
|
|
CPaneIcons::~CPaneIcons()
|
|
{
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPaneIcons, CWnd)
|
|
//{{AFX_MSG_MAP(CPaneIcons)
|
|
ON_WM_CREATE()
|
|
ON_WM_SIZE()
|
|
ON_COMMAND(ID_PANEICONS_CLEAR, OnPaneiconsClear)
|
|
ON_UPDATE_COMMAND_UI(ID_PANEICONS_CLEAR, OnUpdatePaneiconsClear)
|
|
ON_COMMAND(ID_PANEICONS_NEW, OnPaneiconsNew)
|
|
ON_UPDATE_COMMAND_UI(ID_PANEICONS_NEW, OnUpdatePaneiconsNew)
|
|
ON_COMMAND(ID_PANEICONS_EDIT, OnPaneiconsEdit)
|
|
ON_UPDATE_COMMAND_UI(ID_PANEICONS_EDIT, OnUpdatePaneiconsEdit)
|
|
ON_UPDATE_COMMAND_UI(ID_PANEICONS_IMPORT_AND_EXPORT, OnUpdatePaneiconsImportAndExport)
|
|
ON_COMMAND(ID_IMPORTANDEXPORT_EXPORTTOXML, OnImportandexportExporttoxml)
|
|
ON_COMMAND(ID_IMPORTANDEXPORT_IMPORTFROMXML, OnImportandexportImportfromxml)
|
|
ON_UPDATE_COMMAND_UI(ID_IMPORTANDEXPORT_EXPORTTOXML, OnUpdateXMLCommand)
|
|
ON_UPDATE_COMMAND_UI(ID_IMPORTANDEXPORT_IMPORTFROMXML, OnUpdateXMLCommand)
|
|
|
|
|
|
ON_COMMAND(ID_IMPORTANDEXPORT_EXPORTTOBITMAP, OnImportandexportExporttobitmap)
|
|
ON_COMMAND(ID_IMPORTANDEXPORT_IMPORTFROMBITMAP, OnImportandexportImportfrombitmap)
|
|
//}}AFX_MSG_MAP
|
|
ON_CBN_SELCHANGE(ID_PANEICONS_COMBO, OnComboChanged)
|
|
END_MESSAGE_MAP()
|
|
|
|
CString CPaneIcons::GetStringID(int nID)
|
|
{
|
|
if (m_pActiveResourceManager)
|
|
return m_pActiveResourceManager->GetStringID(nID);
|
|
|
|
CString str;
|
|
str.Format(_T("%i"), nID);
|
|
return str;
|
|
}
|
|
|
|
|
|
void CPaneIcons::RefreshIcons()
|
|
{
|
|
//m_wndListBox.ResetContent();
|
|
m_wndCombo.ResetContent();
|
|
m_wndIconsView.DeleteAllItems();
|
|
m_wndIconsView.m_pIconSet = NULL;
|
|
m_wndIconsView.m_pSelected = NULL;
|
|
|
|
if (GetImageManager() == NULL)
|
|
{
|
|
m_wndIconsView.Invalidate(FALSE);
|
|
return;
|
|
}
|
|
|
|
|
|
CMap<UINT, UINT, CXTPImageManagerIconSet*, CXTPImageManagerIconSet*>* pIcons = GetImageManager()->GetImages();
|
|
UINT nIDCommand;
|
|
CXTPImageManagerIconSet* pIconSet;
|
|
|
|
POSITION pos = pIcons->GetStartPosition();
|
|
while (pos)
|
|
{
|
|
pIcons->GetNextAssoc(pos, nIDCommand, pIconSet);
|
|
|
|
//if (nIDCommand >= 1000 && nIDCommand < 4000)
|
|
{
|
|
if (pIconSet)
|
|
{
|
|
CString str = GetStringID(pIconSet->GetID());
|
|
|
|
int nIndex = m_wndCombo.AddString(str);
|
|
m_wndCombo.SetItemData(nIndex, (DWORD_PTR)pIconSet);
|
|
|
|
|
|
if (m_pActiveIcons == pIconSet)
|
|
{
|
|
|
|
m_wndCombo.SetCurSel(nIndex);
|
|
m_wndIconsView.RefreshIcons(pIconSet);
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
m_wndIconsView.Invalidate(FALSE);
|
|
}
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPaneIcons message handlers
|
|
|
|
CXTPImageManager* CPaneIcons::GetImageManager()
|
|
{
|
|
return m_pImageManager;
|
|
}
|
|
|
|
int CPaneIcons::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CWnd::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
VERIFY(m_wndToolBar.CreateToolBar(WS_VISIBLE|WS_CHILD|CBRS_TOOLTIPS, this));
|
|
VERIFY(m_wndToolBar.LoadToolBar(IDR_PANE_ICONS));
|
|
m_wndToolBar.GetControls()->FindControl(xtpControlButton, ID_PANEICONS_EDIT, TRUE, FALSE)
|
|
->SetStyle(xtpButtonIconAndCaption);
|
|
|
|
CXTPControlPopup* pControl = (CXTPControlPopup*)m_wndToolBar.GetControls()->SetControlType(3, xtpControlButtonPopup);
|
|
pControl->SetStyle(xtpButtonCaption);
|
|
CMenu menu;
|
|
menu.LoadMenu(IDR_PANE_ICONS_IMPORT_AND_EXPORT);
|
|
pControl->GetCommandBar()->LoadMenu(menu.GetSubMenu(0));
|
|
|
|
|
|
|
|
if (!m_wndIconsView.CWnd::CreateEx(WS_EX_STATICEDGE, AfxRegisterWndClass(CS_DBLCLKS, ::LoadCursor(0, IDC_ARROW)), NULL,
|
|
WS_CHILD|WS_VISIBLE|SS_NOTIFY, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST))
|
|
{
|
|
TRACE0("Failed to create tree control.\n");
|
|
return -1;
|
|
}
|
|
m_wndIconsView.ModifyStyleEx(0, WS_EX_STATICEDGE);
|
|
|
|
CFont* pFont = XTPPaintManager()->GetRegularFont();
|
|
LOGFONT lf = {sizeof(LOGFONT)};
|
|
pFont->GetLogFont(&lf);
|
|
m_fntRegular.CreateFontIndirect(&lf);
|
|
|
|
|
|
m_wndCombo.Create(WS_VISIBLE|WS_CHILD|CBS_DROPDOWNLIST, CRect(0, 0, 0, 200), this, ID_PANEICONS_COMBO);
|
|
m_wndCombo.SetFont(&m_fntRegular);
|
|
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
void CPaneIcons::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CWnd::OnSize(nType, cx, cy);
|
|
|
|
int nTop = 0;
|
|
|
|
if (m_wndCombo.GetSafeHwnd())
|
|
{
|
|
CRect rc;
|
|
m_wndCombo.GetWindowRect(&rc);
|
|
|
|
m_wndCombo.MoveWindow(0, 0, cx, rc.Height());
|
|
nTop += rc.Height();
|
|
}
|
|
if (m_wndToolBar.GetSafeHwnd())
|
|
{
|
|
CSize sz = m_wndToolBar.CalcDockingLayout(cx, /*LM_HIDEWRAP|*/ LM_HORZDOCK|LM_HORZ | LM_COMMIT);
|
|
|
|
m_wndToolBar.MoveWindow(0, nTop, cx, sz.cy);
|
|
m_wndToolBar.Invalidate(FALSE);
|
|
nTop += sz.cy;
|
|
}
|
|
|
|
if (m_wndIconsView.GetSafeHwnd())
|
|
{
|
|
m_wndIconsView.MoveWindow(0, nTop, cx, cy - nTop);
|
|
m_wndIconsView.Invalidate(FALSE);
|
|
}
|
|
}
|
|
|
|
void CPaneIcons::SetModified()
|
|
{
|
|
if (m_pActiveFrame)
|
|
{
|
|
m_pActiveFrame->GetCommandBars()->RedrawCommandBars();
|
|
}
|
|
}
|
|
void CPaneIcons::RefreshAll()
|
|
{
|
|
GetMainFrame()->RefreshPanes(TRUE);
|
|
}
|
|
|
|
|
|
void CPaneIcons::ShowIcons(CXTPImageManager* pImageManager, int nActive)
|
|
{
|
|
if (!m_hWnd)
|
|
return;
|
|
|
|
if (m_pActiveFrame)
|
|
{
|
|
m_pActiveFrame->GetCommandBars()->SetDragControl(NULL);
|
|
}
|
|
m_pActiveResourceManager = NULL;
|
|
|
|
m_pImageManager = pImageManager;
|
|
m_pActiveIcons = pImageManager->GetIconSet(nActive);
|
|
m_pLastControl = NULL;
|
|
|
|
RefreshIcons();
|
|
}
|
|
|
|
|
|
void CPaneIcons::Refresh(BOOL bForce)
|
|
{
|
|
CEmbeddedFrame* pActiveFrame = GetMainFrame()->GetActiveEmbeddedFrame();
|
|
CXTPImageManager* pImageManager = pActiveFrame ? pActiveFrame->GetCommandBars()->GetImageManager() : NULL;
|
|
|
|
if (pActiveFrame != m_pActiveFrame)
|
|
{
|
|
m_pActiveFrame = pActiveFrame;
|
|
m_pImageManager = pImageManager;
|
|
|
|
m_pActiveResourceManager = m_pActiveFrame ? m_pActiveFrame->ResourceManager() : NULL;
|
|
|
|
RefreshIcons();
|
|
return;
|
|
}
|
|
|
|
if (bForce)
|
|
{
|
|
RefreshIcons();
|
|
return;
|
|
}
|
|
|
|
|
|
if (m_pActiveFrame)
|
|
{
|
|
CXTPControl* pControl = m_pActiveFrame->GetCommandBars()->GetDragControl();
|
|
if (pControl && m_pLastControl != pControl)
|
|
{
|
|
CXTPImageManagerIconSet* pIconSet = m_pActiveFrame->GetCommandBars()->GetImageManager()->GetIconSet(pControl->GetIconId());
|
|
if (pIconSet && pIconSet != m_pActiveIcons)
|
|
{
|
|
m_pImageManager = m_pActiveFrame->GetCommandBars()->GetImageManager();
|
|
m_pActiveIcons = pIconSet;
|
|
m_pActiveResourceManager = m_pActiveFrame->ResourceManager();
|
|
RefreshIcons();
|
|
}
|
|
m_pLastControl = pControl;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void CPaneIcons::OnComboChanged()
|
|
{
|
|
int nIndex = m_wndCombo.GetCurSel();
|
|
if (nIndex != CB_ERR)
|
|
{
|
|
m_pActiveIcons = (CXTPImageManagerIconSet*)m_wndCombo.GetItemData(nIndex);
|
|
}
|
|
else
|
|
{
|
|
m_pActiveIcons = NULL;
|
|
}
|
|
RefreshIcons();
|
|
|
|
}
|
|
|
|
void CPaneIcons::RemoveIcons(CXTPImageManagerIconSet* pIconSet, CXTPImageManagerIcon* pIconRemove)
|
|
{
|
|
CXTPImageManagerIconSet::CIconSetMap* pMapIcons = pIconSet->GetIcons();
|
|
|
|
POSITION pos = pMapIcons->GetStartPosition();
|
|
UINT nWidth;
|
|
CXTPImageManagerIcon* pIcon;
|
|
|
|
while (pos)
|
|
{
|
|
pMapIcons->GetNextAssoc(pos, nWidth, pIcon);
|
|
if (pIcon == pIconRemove)
|
|
{
|
|
pMapIcons->RemoveKey(nWidth);
|
|
delete pIcon;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (pMapIcons->IsEmpty())
|
|
{
|
|
CMap<UINT, UINT, CXTPImageManagerIconSet*, CXTPImageManagerIconSet*>* pIcons = GetImageManager()->GetImages();
|
|
UINT nIDCommand;
|
|
CXTPImageManagerIconSet* pIconSetRemove;
|
|
|
|
POSITION pos = pIcons->GetStartPosition();
|
|
while (pos)
|
|
{
|
|
pIcons->GetNextAssoc(pos, nIDCommand, pIconSetRemove);
|
|
if (pIconSetRemove == pIconSet)
|
|
{
|
|
pIcons->RemoveKey(nIDCommand);
|
|
delete pIconSet;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CPaneIcons::OnPaneiconsClear()
|
|
{
|
|
CControlIconsViewItem* pSelected = m_wndIconsView.m_pSelected;
|
|
if (pSelected)
|
|
{
|
|
switch(pSelected->imageState)
|
|
{
|
|
case xtpImageNormal:
|
|
RemoveIcons(m_pActiveIcons, pSelected->pIcon);
|
|
break;
|
|
|
|
default:
|
|
CXTPImageManagerIconHandle& icon = pSelected->pIcon->GetIcon(pSelected->imageState);
|
|
CXTPImageManagerIconHandle& iconNormal = pSelected->pIcon->GetIcon();
|
|
if (&icon != &iconNormal) icon.Clear();
|
|
break;
|
|
}
|
|
|
|
RefreshIcons();
|
|
SetModified();
|
|
}
|
|
|
|
}
|
|
|
|
void CPaneIcons::OnUpdatePaneiconsClear(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_wndIconsView.m_pSelected != NULL);
|
|
|
|
}
|
|
|
|
HICON GenerateIcon(int nWidth, int nHeight)
|
|
{
|
|
CImageList il;
|
|
il.Create(nWidth, nHeight, ILC_COLOR24 |ILC_MASK, 0, 0);
|
|
il.Add(AfxGetApp()->LoadIcon(IDI_ICONEMPTY));
|
|
|
|
return il.ExtractIcon(0);
|
|
}
|
|
|
|
void CPaneIcons::OnPaneiconsNew()
|
|
{
|
|
if (!GetImageManager())
|
|
return;
|
|
|
|
CDialogNewIcon dni;
|
|
int nIndex = m_wndCombo.GetCurSel();
|
|
if (nIndex != CB_ERR) m_wndCombo.GetLBText(nIndex, dni.m_strId);
|
|
|
|
if (dni.DoModal() == IDOK)
|
|
{
|
|
|
|
int nIDCommand = m_pActiveResourceManager ? m_pActiveResourceManager->GetStringID(dni.m_strId) : _ttoi(dni.m_strId);
|
|
if (nIDCommand == 0)
|
|
return;
|
|
|
|
int nWidth = _ttoi(dni.m_strWidth);
|
|
int nHeight = _ttoi(dni.m_strHeight);
|
|
HICON hIcon = GenerateIcon(nWidth, nHeight);
|
|
GetImageManager()->SetIcon(hIcon, nIDCommand);
|
|
|
|
m_pActiveIcons = GetImageManager()->GetIconSet(nIDCommand);
|
|
RefreshIcons();
|
|
|
|
SetModified();
|
|
RefreshAll();
|
|
}
|
|
|
|
}
|
|
|
|
void CPaneIcons::OnUpdatePaneiconsNew(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(GetImageManager() != NULL);
|
|
|
|
}
|
|
|
|
void CPaneIcons::OnPaneiconsEdit()
|
|
{
|
|
if (m_wndIconsView.m_pSelected)
|
|
{
|
|
m_wndIconsView.Edit();
|
|
}
|
|
}
|
|
|
|
void CPaneIcons::OnUpdatePaneiconsEdit(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(m_wndIconsView.m_pSelected != NULL);
|
|
}
|
|
|
|
|
|
void CPaneIcons::OnUpdatePaneiconsImportAndExport(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(GetImageManager() != NULL);
|
|
|
|
}
|
|
|
|
void CPaneIcons::OnImportandexportExporttoxml()
|
|
{
|
|
if (GetImageManager() == NULL)
|
|
return;
|
|
|
|
CString strFilter = _T("XML Document (*.xml)|*.xml|All files (*.*)|*.*||");
|
|
|
|
CFileDialog fd(FALSE, _T("xml"), NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, strFilter);
|
|
if (fd.DoModal() != IDOK)
|
|
return;
|
|
|
|
|
|
CXTPPropExchangeXMLNode px(FALSE, 0, _T("DesignerFile"));
|
|
CXTPPropExchangeSection secImages(px.GetSection(_T("Images")));
|
|
GetImageManager()->DoPropExchange(&secImages);
|
|
|
|
px.SaveToFile(fd.GetFileName());
|
|
|
|
}
|
|
|
|
void CPaneIcons::OnImportandexportImportfromxml()
|
|
{
|
|
if (GetImageManager() == NULL)
|
|
return;
|
|
|
|
CString strFilter = _T("XML Document (*.xml)|*.xml|All files (*.*)|*.*||");
|
|
|
|
CFileDialog fd(TRUE, _T("xml"), NULL, OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, strFilter);
|
|
if (fd.DoModal() != IDOK)
|
|
return;
|
|
|
|
CXTPPropExchangeXMLNode px(TRUE, NULL, _T("DesignerFile"));
|
|
if (!px.LoadFromFile(fd.GetPathName()))
|
|
return;
|
|
|
|
CXTPPropExchangeSection secImages(px.GetSection(_T("Images")));
|
|
GetImageManager()->DoPropExchange(&secImages);
|
|
|
|
RefreshAll();
|
|
SetModified();
|
|
}
|
|
|
|
void CPaneIcons::OnUpdateXMLCommand(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(IsXMLEngineAvailable() && GetImageManager() != NULL);
|
|
}
|
|
|
|
void CPaneIcons::OnImportandexportExporttobitmap()
|
|
{
|
|
if (!GetImageManager())
|
|
return;
|
|
|
|
CDialogBitmapExport dbe(GetImageManager(), m_pActiveResourceManager);
|
|
dbe.DoModal();
|
|
}
|
|
|
|
void CPaneIcons::OnImportandexportImportfrombitmap()
|
|
{
|
|
if (!GetImageManager())
|
|
return;
|
|
|
|
CString strFilter = _T("Bitmap Files (*.bmp;*.png)|*.bmp; *.png|All files (*.*)|*.*||");
|
|
|
|
CFileDialog fd(TRUE, _T("bmp"), NULL, OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, strFilter);
|
|
if (fd.DoModal() != IDOK)
|
|
return;
|
|
|
|
CDialogBitmapImport dbi(GetImageManager(), fd.GetPathName(), m_pActiveResourceManager);
|
|
dbi.DoModal();
|
|
|
|
RefreshAll();
|
|
SetModified();
|
|
}
|