2025-11-27 16:46:48 +09:00

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;
}