869 lines
26 KiB
C++
869 lines
26 KiB
C++
// ==========================================================================
|
|
// Class Implementation: COXCustomizeToolbarsPage
|
|
// ==========================================================================
|
|
|
|
// Version: 9.3
|
|
|
|
// This software along with its related components, documentation and files ("The Libraries")
|
|
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
|
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
|
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
|
// to obtain this file, or directly from our office. For a copy of the license governing
|
|
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
|
|
|
// //////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "OXCustomizeToolbarsPage.h"
|
|
#include "OXCustomizeManager.h"
|
|
#include "OXSkins.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXCustomizeToolbarsPage dialog
|
|
|
|
IMPLEMENT_DYNCREATE(COXCustomizeToolbarsPage, COXCustomizePage)
|
|
|
|
|
|
COXCustomizeToolbarsPage::COXCustomizeToolbarsPage()
|
|
{
|
|
//{{AFX_DATA_INIT(COXCustomizeToolbarsPage)
|
|
m_bCoolLook=TRUE;
|
|
m_bShowTooltips=TRUE;
|
|
m_nBorderSize=0;
|
|
m_bShowGripper=TRUE;
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_nDialogID=IDD;
|
|
m_sProfileName.Empty();
|
|
}
|
|
|
|
|
|
COXCustomizeToolbarsPage::~COXCustomizeToolbarsPage()
|
|
{
|
|
for(int nIndex=0; nIndex<m_arrCustomMadeToolbars.GetSize(); nIndex++)
|
|
{
|
|
COXCoolToolBar* pToolbar=m_arrCustomMadeToolbars[nIndex];
|
|
ASSERT(pToolbar!=NULL);
|
|
delete pToolbar;
|
|
}
|
|
m_arrCustomMadeToolbars.RemoveAll();
|
|
|
|
m_arrToolbars.RemoveAll();
|
|
|
|
m_mapAssociatedToolbars.RemoveAll();
|
|
}
|
|
|
|
|
|
BOOL COXCustomizeToolbarsPage::OnCloseManager(BOOL bIsOk)
|
|
{
|
|
if(!UpdateData(TRUE))
|
|
return FALSE;
|
|
|
|
if(bIsOk)
|
|
{
|
|
if(!m_sProfileName.IsEmpty())
|
|
{
|
|
#ifndef _MAC
|
|
CWinApp* pApp=AfxGetApp();
|
|
ASSERT(pApp!=NULL);
|
|
|
|
// save toolbar options
|
|
pApp->WriteProfileInt(m_sProfileName,_T("CoolLook"),m_bCoolLook);
|
|
pApp->WriteProfileInt(m_sProfileName,_T("ShowTooltips"),m_bShowTooltips);
|
|
pApp->WriteProfileInt(m_sProfileName,_T("ShowGripper"),m_bShowGripper);
|
|
pApp->WriteProfileInt(m_sProfileName,_T("BorderSize"),m_nBorderSize);
|
|
|
|
// delete old information about created custom made toolbars
|
|
int nCustomToolbarIndex=0;
|
|
while(TRUE)
|
|
{
|
|
CString sProfileKey=BuildToolbarKey(nCustomToolbarIndex)+_T("_ID");
|
|
UINT nToolbarID=(UINT)pApp->GetProfileInt(m_sProfileName,
|
|
sProfileKey,NULL);
|
|
if(nToolbarID==NULL)
|
|
break;
|
|
pApp->WriteProfileString(m_sProfileName,sProfileKey,NULL);
|
|
sProfileKey=BuildToolbarKey(nCustomToolbarIndex)+_T("_Title");
|
|
pApp->WriteProfileString(m_sProfileName,sProfileKey,NULL);
|
|
|
|
nCustomToolbarIndex++;
|
|
}
|
|
|
|
// save information about created custom made toolbars
|
|
nCustomToolbarIndex=0;
|
|
for(int nIndex=0; nIndex<m_arrToolbars.GetSize(); nIndex++)
|
|
{
|
|
OXCUSTOMIZE_TOOLBARINFO& tbInfo=m_arrToolbars[nIndex];
|
|
ASSERT(tbInfo.m_pToolBar!=NULL);
|
|
if(tbInfo.m_bCustomMade)
|
|
{
|
|
CString sProfileKey=BuildToolbarKey(nCustomToolbarIndex)+_T("_ID");
|
|
pApp->WriteProfileInt(m_sProfileName,sProfileKey,
|
|
tbInfo.m_pToolBar->GetDlgCtrlID());
|
|
|
|
sProfileKey=BuildToolbarKey(nCustomToolbarIndex)+_T("_Title");
|
|
CString sTitle;
|
|
tbInfo.m_pToolBar->GetWindowText(sTitle);
|
|
ASSERT(!sTitle.IsEmpty());
|
|
pApp->WriteProfileString(m_sProfileName,sProfileKey,sTitle);
|
|
|
|
nCustomToolbarIndex++;
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL COXCustomizeToolbarsPage::
|
|
InitializeToolbars(BOOL bCoolLook/*=TRUE*/,
|
|
BOOL bShowGripper/*=TRUE*/,
|
|
BOOL bShowTooltips/*=TRUE*/,
|
|
int nBorderSize/*=0*/,
|
|
LPCTSTR lpszProfileName/*=_T("CustomizeToolbars")*/)
|
|
{
|
|
CWnd* pWnd=AfxGetMainWnd();
|
|
ASSERT(pWnd!=NULL);
|
|
CFrameWnd* pFrameWnd=DYNAMIC_DOWNCAST(CFrameWnd,pWnd);
|
|
ASSERT(pFrameWnd!=NULL);
|
|
|
|
m_bCoolLook=bCoolLook;
|
|
m_bShowTooltips=bShowTooltips;
|
|
m_nBorderSize=nBorderSize;
|
|
m_bShowGripper=bShowGripper;
|
|
|
|
// go through all existing toolbars and save information about them
|
|
CControlBar* pBar=NULL;
|
|
POSITION pos=pFrameWnd->m_listControlBars.GetHeadPosition();
|
|
while(pos!=NULL)
|
|
{
|
|
pBar=(CControlBar*)pFrameWnd->m_listControlBars.GetNext(pos);
|
|
ASSERT(pBar!=NULL);
|
|
|
|
if(pBar->IsKindOf(RUNTIME_CLASS(CToolBar)))
|
|
{
|
|
CToolBar* pToolbar=DYNAMIC_DOWNCAST(CToolBar,pBar);
|
|
ASSERT(pToolbar!=NULL);
|
|
OXCUSTOMIZE_TOOLBARINFO tbInfo(pToolbar,FALSE);
|
|
m_arrToolbars.Add(tbInfo);
|
|
|
|
#ifdef _DEBUG
|
|
int nToolbarIndex=-1;
|
|
ASSERT(!m_mapAssociatedToolbars.Lookup(pToolbar,nToolbarIndex));
|
|
#endif // _DEBUG
|
|
m_mapAssociatedToolbars.SetAt(pToolbar,PtrToInt(m_arrToolbars.GetSize())-1);
|
|
}
|
|
}
|
|
|
|
|
|
if(lpszProfileName!=NULL)
|
|
m_sProfileName=lpszProfileName;
|
|
|
|
#ifndef _MAC
|
|
if(!m_sProfileName.IsEmpty())
|
|
{
|
|
CWinApp* pApp=AfxGetApp();
|
|
ASSERT(pApp!=NULL);
|
|
|
|
// retrieve toolbar options
|
|
m_bCoolLook=(BOOL)pApp->GetProfileInt(m_sProfileName,
|
|
_T("CoolLook"),m_bCoolLook);
|
|
m_bShowTooltips=(BOOL)pApp->GetProfileInt(m_sProfileName,
|
|
_T("ShowTooltips"),m_bShowTooltips);
|
|
m_bShowGripper=(BOOL)pApp->GetProfileInt(m_sProfileName,
|
|
_T("ShowGripper"),m_bShowGripper);
|
|
m_nBorderSize=(int)pApp->GetProfileInt(m_sProfileName,
|
|
_T("BorderSize"),m_nBorderSize);
|
|
|
|
// retrieve information about saved custom made toolbars
|
|
// and create them
|
|
int nIndex=0;
|
|
while(TRUE)
|
|
{
|
|
CString sProfileKey=BuildToolbarKey(nIndex)+_T("_ID");
|
|
UINT nToolbarID=(UINT)pApp->GetProfileInt(m_sProfileName,sProfileKey,NULL);
|
|
if(nToolbarID==NULL)
|
|
break;
|
|
sProfileKey=BuildToolbarKey(nIndex)+_T("_Title");
|
|
CString sTitle=pApp->GetProfileString(m_sProfileName,sProfileKey,_T(""));
|
|
ASSERT(!sTitle.IsEmpty());
|
|
|
|
COXCoolToolBar* pToolbar=new COXCoolToolBar;
|
|
ASSERT(pToolbar!=NULL);
|
|
m_arrCustomMadeToolbars.Add(pToolbar);
|
|
VERIFY(pToolbar->Create(pFrameWnd,WS_CHILD|WS_VISIBLE|CBRS_TOP|
|
|
CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC,nToolbarID));
|
|
pToolbar->IniSizes(CSize(ID_OXCUSTOMIZE_TBIMAGE_WIDTH,
|
|
ID_OXCUSTOMIZE_TBIMAGE_HEIGHT));
|
|
pToolbar->UpdateSizes();
|
|
pToolbar->SetWindowText(sTitle);
|
|
pToolbar->EnableDocking(CBRS_ALIGN_ANY);
|
|
pFrameWnd->DockControlBar(pToolbar);
|
|
|
|
OXCUSTOMIZE_TOOLBARINFO tbInfo(pToolbar,TRUE);
|
|
m_arrToolbars.Add(tbInfo);
|
|
|
|
#ifdef _DEBUG
|
|
int nToolbarIndex=-1;
|
|
ASSERT(!m_mapAssociatedToolbars.Lookup(pToolbar,nToolbarIndex));
|
|
#endif // _DEBUG
|
|
m_mapAssociatedToolbars.SetAt(pToolbar,PtrToInt(m_arrToolbars.GetSize())-1);
|
|
|
|
nIndex++;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
// go through toolbars and apply options and load saved states
|
|
for(int nIndex=0; nIndex<m_arrToolbars.GetSize(); nIndex++)
|
|
{
|
|
OXCUSTOMIZE_TOOLBARINFO& tbInfo=m_arrToolbars[nIndex];
|
|
CToolBar* pToolbar=tbInfo.m_pToolBar;
|
|
ASSERT(pToolbar!=NULL);
|
|
|
|
// apply saved toobars options
|
|
if(!pToolbar->IsKindOf(RUNTIME_CLASS(COXMenuBar)))
|
|
{
|
|
if(m_bShowTooltips)
|
|
pToolbar->SetBarStyle(pToolbar->GetBarStyle()|CBRS_TOOLTIPS);
|
|
else
|
|
pToolbar->SetBarStyle(pToolbar->GetBarStyle()&~CBRS_TOOLTIPS);
|
|
pToolbar->m_cxLeftBorder=m_nBorderSize;
|
|
pToolbar->m_cyTopBorder=m_nBorderSize;
|
|
pToolbar->m_cxRightBorder=m_nBorderSize;
|
|
pToolbar->m_cyBottomBorder=m_nBorderSize;
|
|
|
|
if(pToolbar->IsKindOf(RUNTIME_CLASS(COXCoolToolBar)))
|
|
{
|
|
COXCoolToolBar* pCoolToolbar=DYNAMIC_DOWNCAST(COXCoolToolBar,pToolbar);
|
|
ASSERT(pCoolToolbar!=NULL);
|
|
pCoolToolbar->SetFlat(m_bCoolLook);
|
|
pCoolToolbar->SetGripper(m_bShowGripper);
|
|
pCoolToolbar->RedrawToolBar();
|
|
}
|
|
else
|
|
{
|
|
pToolbar->SetWindowPos(NULL,0,0,0,0,
|
|
SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_DRAWFRAME);
|
|
pToolbar->RedrawWindow(NULL,NULL,
|
|
RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_FRAME|RDW_ALLCHILDREN);
|
|
|
|
CFrameWnd* pFrameWnd=pToolbar->GetDockingFrame();
|
|
if(pFrameWnd!=NULL)
|
|
pFrameWnd->RecalcLayout();
|
|
}
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void COXCustomizeToolbarsPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
COXCustomizePage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(COXCustomizeToolbarsPage)
|
|
DDX_Control(pDX, IDC_OX_TREE_TOOLBARS, m_treeToolbars);
|
|
DDX_Control(pDX, IDC_OX_SPIN_BORDER_SIZE, m_spinBorderSize);
|
|
DDX_Control(pDX, IDC_OX_SEPARATOR_TOOLBARS, m_sepToolbars);
|
|
DDX_Control(pDX, IDC_OX_SEPARATOR_OPTIONS, m_sepOptions);
|
|
DDX_Control(pDX, IDC_OX_SEPARATOR_OPERATIONS, m_sepOperations);
|
|
DDX_Check(pDX, IDC_OX_CHECK_COOL, m_bCoolLook);
|
|
DDX_Check(pDX, IDC_OX_CHECK_TOOLTIPS, m_bShowTooltips);
|
|
DDX_Text(pDX, IDC_OX_EDIT_BORDER_SIZE, m_nBorderSize);
|
|
DDV_MinMaxDWord(pDX, m_nBorderSize, 0, 100);
|
|
DDX_Check(pDX, IDC_OX_CHECK_GRIPPER, m_bShowGripper);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(COXCustomizeToolbarsPage, COXCustomizePage)
|
|
//{{AFX_MSG_MAP(COXCustomizeToolbarsPage)
|
|
ON_BN_CLICKED(IDC_OX_BUTTON_DELETE, OnButtonDelete)
|
|
ON_BN_CLICKED(IDC_OX_BUTTON_NEW, OnButtonNew)
|
|
ON_BN_CLICKED(IDC_OX_BUTTON_RENAME, OnButtonRename)
|
|
ON_BN_CLICKED(IDC_OX_BUTTON_RESET, OnButtonReset)
|
|
ON_BN_CLICKED(IDC_OX_BUTTON_RESET_ALL, OnButtonResetAll)
|
|
ON_BN_CLICKED(IDC_OX_CHECK_COOL, OnCheckCool)
|
|
ON_BN_CLICKED(IDC_OX_CHECK_TOOLTIPS, OnCheckTooltips)
|
|
ON_EN_CHANGE(IDC_OX_EDIT_BORDER_SIZE, OnChangeEditBorderSize)
|
|
ON_NOTIFY(TVN_ENDLABELEDIT, IDC_OX_TREE_TOOLBARS, OnEndlabeleditTreeToolbars)
|
|
ON_NOTIFY(OTN_OPTIONCHANGED, IDC_OX_TREE_TOOLBARS, OnOptionChanged)
|
|
ON_BN_CLICKED(IDC_OX_CHECK_GRIPPER, OnCheckGripper)
|
|
ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_OX_TREE_TOOLBARS, OnBeginlabeleditTreeToolbars)
|
|
ON_NOTIFY(TVN_SELCHANGED, IDC_OX_TREE_TOOLBARS, OnSelchangedTreeToolbars)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COXCustomizeToolbarsPage message handlers
|
|
BOOL COXCustomizeToolbarsPage::Load(const COXCustomizeManager* pCustomizeManager)
|
|
{
|
|
// Call default implementation. It will load this demo dialog as the first
|
|
// page and will create About and CodeSample pages if specified.
|
|
if(!COXCustomizePage::Load(pCustomizeManager))
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void COXCustomizeToolbarsPage::Unload()
|
|
{
|
|
// add here code for cleaning up all objects created by demo
|
|
//
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
COXCustomizePage::Unload();
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnInitDialog()
|
|
{
|
|
// must call default implementation
|
|
COXCustomizePage::OnInitDialog();
|
|
|
|
// add here initialization code for your demo dialog. Treat it as a
|
|
// normal CDialog::OnInitDialog function
|
|
|
|
// separator controls
|
|
COLORREF clr=::GetSysColor(COLOR_WINDOW);
|
|
m_sepToolbars.SetTextColor(clr);
|
|
m_sepOptions.SetTextColor(clr);
|
|
m_sepOperations.SetTextColor(clr);
|
|
|
|
// spin control
|
|
m_spinBorderSize.SetRange(0,1000);
|
|
|
|
GetVars();
|
|
|
|
// layout
|
|
//
|
|
m_LayoutManager.TieChild(&m_treeToolbars,OX_LMS_ANY,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(&m_sepToolbars,OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(&m_sepOperations,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(&m_sepOptions,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_BUTTON_NEW,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_BUTTON_DELETE,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_BUTTON_RENAME,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_BUTTON_RESET,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_BUTTON_RESET_ALL,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_CHECK_TOOLTIPS,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_CHECK_COOL,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_CHECK_GRIPPER,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_STATIC_BORDER_SIZE,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_EDIT_BORDER_SIZE,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
m_LayoutManager.TieChild(IDC_OX_SPIN_BORDER_SIZE,OX_LMS_RIGHT,OX_LMT_SAME);
|
|
//
|
|
///////////////////////////////////////
|
|
|
|
// If the OfficeXP skin is on disable the CoolLook checkbox
|
|
COXSkinnedApp* pSkinnedApp = DYNAMIC_DOWNCAST(COXSkinnedApp, AfxGetApp());
|
|
if (pSkinnedApp != NULL)
|
|
{
|
|
COXSkin* pCurrentSkin = pSkinnedApp->GetCurrentSkin();
|
|
if (pCurrentSkin != NULL)
|
|
if (pCurrentSkin->GetName() == _T("Office XP"))
|
|
{
|
|
CButton* pBtn = (CButton*) GetDlgItem(IDC_OX_CHECK_COOL);
|
|
pBtn->SetCheck(TRUE);
|
|
pBtn->EnableWindow(FALSE);
|
|
}
|
|
}
|
|
|
|
m_bInitialized=TRUE;
|
|
|
|
UpdateState();
|
|
}
|
|
|
|
|
|
void COXCustomizeToolbarsPage::GetVars()
|
|
{
|
|
// build tree control
|
|
//
|
|
m_treeToolbars.DeleteAllItems();
|
|
|
|
for(int nIndex=0; nIndex<m_arrToolbars.GetSize(); nIndex++)
|
|
{
|
|
OXCUSTOMIZE_TOOLBARINFO& tbInfo=m_arrToolbars[nIndex];
|
|
ASSERT(tbInfo.m_pToolBar!=NULL);
|
|
|
|
CString sTitle;
|
|
tbInfo.m_pToolBar->GetWindowText(sTitle);
|
|
BOOL bIsVisible=((tbInfo.m_pToolBar->GetStyle()&WS_VISIBLE)==WS_VISIBLE);
|
|
|
|
HTREEITEM hItem=m_treeToolbars.AddCheckBox(tbInfo.m_pToolBar->GetDlgCtrlID(),
|
|
sTitle,TVI_ROOT,(bIsVisible ? OTITEM_CHECKED : OTITEM_UNCHECKED));
|
|
ASSERT(hItem!=NULL);
|
|
m_treeToolbars.SetItemData(hItem,(LPARAM)tbInfo.m_pToolBar);
|
|
}
|
|
}
|
|
|
|
|
|
void COXCustomizeToolbarsPage::UpdateState()
|
|
{
|
|
if(!m_bInitialized)
|
|
return;
|
|
|
|
if(!UpdateData(TRUE))
|
|
return;
|
|
|
|
#ifndef OX_CUSTOMIZE_COMMANDS
|
|
GetDlgItem(IDC_OX_BUTTON_RESET)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_OX_BUTTON_RESET_ALL)->EnableWindow(FALSE);
|
|
#endif // OX_CUSTOMIZE_COMMANDS
|
|
|
|
HTREEITEM hItem=m_treeToolbars.GetSelectedItem();
|
|
if(hItem==NULL)
|
|
{
|
|
GetDlgItem(IDC_OX_BUTTON_DELETE)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_OX_BUTTON_RENAME)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_OX_BUTTON_RESET)->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
CToolBar* pToolbar=(CToolBar*)m_treeToolbars.GetItemData(hItem);
|
|
ASSERT(pToolbar!=NULL);
|
|
|
|
int nToolbarIndex=-1;
|
|
VERIFY(m_mapAssociatedToolbars.Lookup(pToolbar,nToolbarIndex));
|
|
ASSERT(nToolbarIndex!=-1);
|
|
OXCUSTOMIZE_TOOLBARINFO& rtbInfo=m_arrToolbars[nToolbarIndex];
|
|
ASSERT(rtbInfo.m_pToolBar==pToolbar);
|
|
if(rtbInfo.m_bCustomMade)
|
|
{
|
|
GetDlgItem(IDC_OX_BUTTON_DELETE)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_OX_BUTTON_RENAME)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_OX_BUTTON_RESET)->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_OX_BUTTON_DELETE)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_OX_BUTTON_RENAME)->EnableWindow(FALSE);
|
|
#ifdef OX_CUSTOMIZE_COMMANDS
|
|
GetDlgItem(IDC_OX_BUTTON_RESET)->EnableWindow(TRUE);
|
|
#endif // OX_CUSTOMIZE_COMMANDS
|
|
}
|
|
}
|
|
|
|
GetDlgItem(IDC_OX_CHECK_GRIPPER)->EnableWindow(m_bCoolLook);
|
|
}
|
|
|
|
|
|
void COXCustomizeToolbarsPage::OnButtonDelete()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
HTREEITEM hItem=m_treeToolbars.GetSelectedItem();
|
|
ASSERT(hItem!=NULL);
|
|
|
|
CWnd* pWnd=AfxGetMainWnd();
|
|
ASSERT(pWnd!=NULL);
|
|
CFrameWnd* pFrameWnd=DYNAMIC_DOWNCAST(CFrameWnd,pWnd);
|
|
ASSERT(pFrameWnd!=NULL);
|
|
|
|
CToolBar* pToolbar=(CToolBar*)m_treeToolbars.GetItemData(hItem);
|
|
ASSERT(pToolbar!=NULL);
|
|
BOOL bWasFloating=pToolbar->IsFloating();
|
|
|
|
int nToolbarIndex=-1;
|
|
VERIFY(m_mapAssociatedToolbars.Lookup(pToolbar,nToolbarIndex));
|
|
ASSERT(nToolbarIndex!=-1);
|
|
OXCUSTOMIZE_TOOLBARINFO& rtbInfo=m_arrToolbars[nToolbarIndex];
|
|
ASSERT(rtbInfo.m_pToolBar==pToolbar);
|
|
ASSERT(rtbInfo.m_bCustomMade);
|
|
|
|
VERIFY(pToolbar->DestroyWindow());
|
|
POSITION pos=pFrameWnd->m_listControlBars.Find(pToolbar);
|
|
if(pos!=NULL)
|
|
pFrameWnd->m_listControlBars.RemoveAt(pos);
|
|
|
|
m_mapAssociatedToolbars.RemoveKey(pToolbar);
|
|
pos=m_mapAssociatedToolbars.GetStartPosition();
|
|
while(pos!=NULL)
|
|
{
|
|
CToolBar* pToolbarTest=NULL;
|
|
int nIndexTest=-1;
|
|
m_mapAssociatedToolbars.GetNextAssoc(pos,pToolbarTest,nIndexTest);
|
|
ASSERT(pToolbarTest!=NULL);
|
|
ASSERT(nIndexTest!=-1 && nIndexTest!=nToolbarIndex);
|
|
if(nIndexTest>nToolbarIndex)
|
|
m_mapAssociatedToolbars.SetAt(pToolbarTest,nIndexTest-1);
|
|
}
|
|
|
|
m_arrToolbars.RemoveAt(nToolbarIndex);
|
|
|
|
m_treeToolbars.DeleteItem(hItem);
|
|
|
|
if(!bWasFloating)
|
|
pFrameWnd->RecalcLayout();
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnButtonNew()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
CWnd* pWnd=AfxGetMainWnd();
|
|
ASSERT(pWnd!=NULL);
|
|
CFrameWnd* pFrameWnd=DYNAMIC_DOWNCAST(CFrameWnd,pWnd);
|
|
ASSERT(pFrameWnd!=NULL);
|
|
|
|
COXCoolToolBar* pToolbar=NULL;
|
|
// go through already created custom-made toolbars and find
|
|
// if any was already deleted
|
|
int nIndex=0;
|
|
for(nIndex=0; nIndex<m_arrCustomMadeToolbars.GetSize(); nIndex++)
|
|
{
|
|
COXCoolToolBar* pExistingToolbar=m_arrCustomMadeToolbars[nIndex];
|
|
ASSERT(pExistingToolbar!=NULL);
|
|
int nToolbarIndex=-1;
|
|
if(!m_mapAssociatedToolbars.Lookup(pExistingToolbar,nToolbarIndex))
|
|
{
|
|
ASSERT(nToolbarIndex==-1);
|
|
pToolbar=pExistingToolbar;
|
|
break;
|
|
}
|
|
}
|
|
if(pToolbar==NULL)
|
|
{
|
|
pToolbar=new COXCoolToolBar;
|
|
ASSERT(pToolbar!=NULL);
|
|
m_arrCustomMadeToolbars.Add(pToolbar);
|
|
}
|
|
ASSERT(pToolbar!=NULL);
|
|
|
|
UINT nToolbarID=NULL;
|
|
for(nIndex=AFX_IDW_CONTROLBAR_LAST; nIndex>AFX_IDW_CONTROLBAR_FIRST+20; nIndex--)
|
|
{
|
|
if(pFrameWnd->GetControlBar(nIndex)==NULL)
|
|
{
|
|
nToolbarID=nIndex;
|
|
break;
|
|
}
|
|
}
|
|
if(nToolbarID==NULL)
|
|
{
|
|
TRACE(_T("COXCustomizeToolbarsPage::OnButtonNew: failed to create new toolbar, there is no available IDs left\n"));
|
|
return;
|
|
}
|
|
|
|
VERIFY(pToolbar->Create(pFrameWnd,WS_CHILD|WS_VISIBLE|CBRS_TOP|
|
|
CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC,nToolbarID));
|
|
|
|
// convert toolbar to be compatible with "Customize Commands" page
|
|
#ifdef OX_CUSTOMIZE_COMMANDS
|
|
COXCustomizeCommandsPage* pCommandsPage=m_pCustomizeManager->GetCommandsPage();
|
|
if(pCommandsPage!=NULL)
|
|
{
|
|
pCommandsPage->ConvertToolbar(pToolbar);
|
|
}
|
|
#endif // OX_CUSTOMIZE_COMMANDS
|
|
|
|
CString sTitle;
|
|
sTitle.Format(IDS_OX_CSTMZETOOLBARTITLECUSTOM, m_arrCustomMadeToolbars.GetSize());//"Custom Toolbar %d"
|
|
pToolbar->SetWindowText(sTitle);
|
|
pToolbar->EnableDocking(CBRS_ALIGN_ANY);
|
|
pFrameWnd->FloatControlBar(pToolbar,CPoint(100,100));
|
|
|
|
// apply toolbar options
|
|
if(m_bShowTooltips)
|
|
pToolbar->SetBarStyle(pToolbar->GetBarStyle()|CBRS_TOOLTIPS);
|
|
else
|
|
pToolbar->SetBarStyle(pToolbar->GetBarStyle()&~CBRS_TOOLTIPS);
|
|
pToolbar->m_cxLeftBorder=m_nBorderSize;
|
|
pToolbar->m_cyTopBorder=m_nBorderSize;
|
|
pToolbar->m_cxRightBorder=m_nBorderSize;
|
|
pToolbar->m_cyBottomBorder=m_nBorderSize;
|
|
|
|
pToolbar->SetFlat(m_bCoolLook);
|
|
pToolbar->SetGripper(m_bShowGripper);
|
|
pToolbar->RedrawToolBar();
|
|
|
|
OXCUSTOMIZE_TOOLBARINFO tbInfo(pToolbar,TRUE);
|
|
m_arrToolbars.Add(tbInfo);
|
|
|
|
#ifdef _DEBUG
|
|
int nToolbarIndex=-1;
|
|
VERIFY(!m_mapAssociatedToolbars.Lookup(pToolbar,nToolbarIndex));
|
|
#endif // _DEBUG
|
|
m_mapAssociatedToolbars.SetAt(pToolbar,PtrToInt(m_arrToolbars.GetSize())-1);
|
|
|
|
// add new item to the tree
|
|
HTREEITEM hItem=m_treeToolbars.AddCheckBox(pToolbar->GetDlgCtrlID(),
|
|
sTitle,TVI_ROOT,OTITEM_CHECKED);
|
|
ASSERT(hItem!=NULL);
|
|
m_treeToolbars.SetItemData(hItem,(LPARAM)tbInfo.m_pToolBar);
|
|
|
|
m_treeToolbars.SelectItem(hItem);
|
|
m_treeToolbars.EditLabel(hItem);
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnButtonRename()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
HTREEITEM hItem=m_treeToolbars.GetSelectedItem();
|
|
ASSERT(hItem!=NULL);
|
|
|
|
m_treeToolbars.EditLabel(hItem);
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnButtonReset()
|
|
{
|
|
#ifdef OX_CUSTOMIZE_COMMANDS
|
|
// TODO: Add your control notification handler code here
|
|
HTREEITEM hItem=m_treeToolbars.GetSelectedItem();
|
|
ASSERT(hItem!=NULL);
|
|
|
|
CToolBar* pToolbar=(CToolBar*)m_treeToolbars.GetItemData(hItem);
|
|
ASSERT(pToolbar!=NULL);
|
|
|
|
// restore the state from the registry
|
|
ASSERT(m_pCustomizeManager!=NULL);
|
|
ASSERT(m_pCustomizeManager->GetCommandsPage()!=NULL);
|
|
m_pCustomizeManager->GetCommandsPage()->LoadToolbarState(pToolbar);
|
|
#endif // OX_CUSTOMIZE_COMMANDS
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnButtonResetAll()
|
|
{
|
|
#ifdef OX_CUSTOMIZE_COMMANDS
|
|
// TODO: Add your control notification handler code here
|
|
// go through toolbars and apply options and load saved states
|
|
for(int nIndex=0; nIndex<m_arrToolbars.GetSize(); nIndex++)
|
|
{
|
|
OXCUSTOMIZE_TOOLBARINFO& tbInfo=m_arrToolbars[nIndex];
|
|
CToolBar* pToolbar=tbInfo.m_pToolBar;
|
|
ASSERT(pToolbar!=NULL);
|
|
|
|
// restore the state from the registry
|
|
ASSERT(m_pCustomizeManager!=NULL);
|
|
ASSERT(m_pCustomizeManager->GetCommandsPage()!=NULL);
|
|
m_pCustomizeManager->GetCommandsPage()->LoadToolbarState(pToolbar);
|
|
}
|
|
#endif // OX_CUSTOMIZE_COMMANDS
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnCheckCool()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
if(!m_bInitialized)
|
|
return;
|
|
|
|
if(!UpdateData(TRUE))
|
|
return;
|
|
|
|
// go through toolbars and apply options
|
|
for(int nIndex=0; nIndex<m_arrToolbars.GetSize(); nIndex++)
|
|
{
|
|
OXCUSTOMIZE_TOOLBARINFO& tbInfo=m_arrToolbars[nIndex];
|
|
CToolBar* pToolbar=tbInfo.m_pToolBar;
|
|
ASSERT(pToolbar!=NULL);
|
|
if(pToolbar->IsKindOf(RUNTIME_CLASS(COXCoolToolBar)) &&
|
|
!pToolbar->IsKindOf(RUNTIME_CLASS(COXMenuBar)))
|
|
{
|
|
COXCoolToolBar* pCoolToolbar=DYNAMIC_DOWNCAST(COXCoolToolBar,pToolbar);
|
|
ASSERT(pCoolToolbar!=NULL);
|
|
pCoolToolbar->SetFlat(m_bCoolLook);
|
|
pCoolToolbar->RedrawToolBar(TRUE,TRUE);
|
|
}
|
|
}
|
|
|
|
UpdateState();
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnCheckTooltips()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
if(!m_bInitialized)
|
|
return;
|
|
|
|
if(!UpdateData(TRUE))
|
|
return;
|
|
|
|
// go through toolbars and apply options
|
|
for(int nIndex=0; nIndex<m_arrToolbars.GetSize(); nIndex++)
|
|
{
|
|
OXCUSTOMIZE_TOOLBARINFO& tbInfo=m_arrToolbars[nIndex];
|
|
CToolBar* pToolbar=tbInfo.m_pToolBar;
|
|
ASSERT(pToolbar!=NULL);
|
|
if(!pToolbar->IsKindOf(RUNTIME_CLASS(COXMenuBar)))
|
|
{
|
|
if(m_bShowTooltips)
|
|
pToolbar->SetBarStyle(pToolbar->GetBarStyle()|CBRS_TOOLTIPS);
|
|
else
|
|
pToolbar->SetBarStyle(pToolbar->GetBarStyle()&~CBRS_TOOLTIPS);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnCheckGripper()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
if(!m_bInitialized)
|
|
return;
|
|
|
|
if(!UpdateData(TRUE))
|
|
return;
|
|
|
|
ASSERT(m_bCoolLook);
|
|
// go through toolbars and apply options
|
|
for(int nIndex=0; nIndex<m_arrToolbars.GetSize(); nIndex++)
|
|
{
|
|
OXCUSTOMIZE_TOOLBARINFO& tbInfo=m_arrToolbars[nIndex];
|
|
CToolBar* pToolbar=tbInfo.m_pToolBar;
|
|
ASSERT(pToolbar!=NULL);
|
|
if(pToolbar->IsKindOf(RUNTIME_CLASS(COXCoolToolBar)) &&
|
|
!pToolbar->IsKindOf(RUNTIME_CLASS(COXMenuBar)))
|
|
{
|
|
COXCoolToolBar* pCoolToolbar=DYNAMIC_DOWNCAST(COXCoolToolBar,pToolbar);
|
|
ASSERT(pCoolToolbar!=NULL);
|
|
pCoolToolbar->SetGripper(m_bShowGripper);
|
|
pCoolToolbar->RedrawToolBar(TRUE,TRUE);
|
|
}
|
|
}
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnChangeEditBorderSize()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the COXCustomizePage::OnInitDialog()
|
|
// function and call CRichEditCtrl().SetEventMask()
|
|
// with the ENM_CHANGE flag ORed into the mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
|
|
if(!m_bInitialized)
|
|
return;
|
|
|
|
if(!UpdateData(TRUE))
|
|
return;
|
|
|
|
// go through toolbars and apply options
|
|
for(int nIndex=0; nIndex<m_arrToolbars.GetSize(); nIndex++)
|
|
{
|
|
OXCUSTOMIZE_TOOLBARINFO& tbInfo=m_arrToolbars[nIndex];
|
|
CToolBar* pToolbar=tbInfo.m_pToolBar;
|
|
ASSERT(pToolbar!=NULL);
|
|
pToolbar->m_cxLeftBorder=m_nBorderSize;
|
|
pToolbar->m_cyTopBorder=m_nBorderSize;
|
|
pToolbar->m_cxRightBorder=m_nBorderSize;
|
|
pToolbar->m_cyBottomBorder=m_nBorderSize;
|
|
|
|
pToolbar->SetWindowPos(NULL,0,0,0,0,
|
|
SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_DRAWFRAME);
|
|
pToolbar->RedrawWindow(NULL,NULL,
|
|
RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_FRAME|RDW_ALLCHILDREN);
|
|
|
|
CFrameWnd* pFrameWnd=pToolbar->GetDockingFrame();
|
|
if(pFrameWnd!=NULL)
|
|
pFrameWnd->RecalcLayout();
|
|
}
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnEndlabeleditTreeToolbars(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
TV_DISPINFO* pTVDispInfo=(TV_DISPINFO*)pNMHDR;
|
|
// TODO: Add your control notification handler code here
|
|
|
|
*pResult=FALSE;
|
|
|
|
CString sNewTitle=pTVDispInfo->item.pszText;
|
|
if(sNewTitle.IsEmpty())
|
|
return;
|
|
|
|
ASSERT(pTVDispInfo!=NULL);
|
|
ASSERT(pTVDispInfo->item.hItem!=NULL);
|
|
ASSERT(pTVDispInfo->item.lParam!=NULL);
|
|
|
|
CToolBar* pToolbar=(CToolBar*)pTVDispInfo->item.lParam;
|
|
ASSERT(!pToolbar->IsKindOf(RUNTIME_CLASS(COXMenuBar)));
|
|
|
|
*pResult=TRUE;
|
|
pToolbar->SetWindowText(sNewTitle);
|
|
|
|
CFrameWnd* pFrameWnd=pToolbar->GetParentFrame();
|
|
if(pFrameWnd!=NULL && pFrameWnd->IsKindOf(RUNTIME_CLASS(CMiniDockFrameWnd)))
|
|
pFrameWnd->SetWindowText(sNewTitle);
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnOptionChanged(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NMOPTIONTREE* pNMOptionTree=(NMOPTIONTREE*)pNMHDR;
|
|
ASSERT(pNMOptionTree!=NULL);
|
|
// TODO: Add your control notification handler code here
|
|
|
|
*pResult=0;
|
|
|
|
CWnd* pWnd=AfxGetMainWnd();
|
|
ASSERT(pWnd!=NULL);
|
|
CFrameWnd* pFrameWnd=DYNAMIC_DOWNCAST(CFrameWnd,pWnd);
|
|
ASSERT(pFrameWnd!=NULL);
|
|
|
|
HTREEITEM hItem=pNMOptionTree->hItem;
|
|
ASSERT(hItem!=NULL);
|
|
CToolBar* pToolbar=(CToolBar*)m_treeToolbars.GetItemData(hItem);
|
|
BOOL bIsVisible=(pNMOptionTree->nNewCheck==OTITEM_CHECKED);
|
|
|
|
#ifdef _DEBUG
|
|
ASSERT(pToolbar!=NULL);
|
|
int nToolbarIndex=-1;
|
|
VERIFY(m_mapAssociatedToolbars.Lookup(pToolbar,nToolbarIndex));
|
|
ASSERT(nToolbarIndex!=-1);
|
|
OXCUSTOMIZE_TOOLBARINFO& rtbInfo=m_arrToolbars[nToolbarIndex];
|
|
ASSERT(rtbInfo.m_pToolBar==pToolbar);
|
|
BOOL bWasVisible=((pToolbar->GetStyle()&WS_VISIBLE)==WS_VISIBLE);
|
|
ASSERT(bIsVisible==!bWasVisible);
|
|
#endif // _DEBUG
|
|
|
|
pFrameWnd->ShowControlBar(pToolbar,bIsVisible,FALSE);
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnBeginlabeleditTreeToolbars(NMHDR* pNMHDR,
|
|
LRESULT* pResult)
|
|
{
|
|
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
|
|
// TODO: Add your control notification handler code here
|
|
|
|
*pResult=FALSE;
|
|
|
|
ASSERT(pTVDispInfo!=NULL);
|
|
ASSERT(pTVDispInfo->item.hItem!=NULL);
|
|
ASSERT(pTVDispInfo->item.lParam!=NULL);
|
|
|
|
CToolBar* pToolbar=(CToolBar*)pTVDispInfo->item.lParam;
|
|
ASSERT(!pToolbar->IsKindOf(RUNTIME_CLASS(COXMenuBar)));
|
|
|
|
int nToolbarIndex=-1;
|
|
VERIFY(m_mapAssociatedToolbars.Lookup(pToolbar,nToolbarIndex));
|
|
ASSERT(nToolbarIndex!=-1);
|
|
OXCUSTOMIZE_TOOLBARINFO& rtbInfo=m_arrToolbars[nToolbarIndex];
|
|
ASSERT(rtbInfo.m_pToolBar==pToolbar);
|
|
if(!rtbInfo.m_bCustomMade)
|
|
*pResult=TRUE;
|
|
}
|
|
|
|
void COXCustomizeToolbarsPage::OnSelchangedTreeToolbars(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
|
UNREFERENCED_PARAMETER(pNMTreeView);
|
|
// TODO: Add your control notification handler code here
|
|
|
|
UpdateState();
|
|
|
|
*pResult = 0;
|
|
}
|
|
|