// PaneToolbars.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 "PaneToolbars.h" #include "DialogNewToolbar.h" #include "PropertyItemFlags.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif class CFloatingPopupBar : public CXTPToolBar { DECLARE_XTP_COMMANDBAR(CFloatingPopupBar) public: CFloatingPopupBar() { m_bBuiltIn = FALSE; m_barType = xtpBarTypePopup; SetWidth(0); } }; IMPLEMENT_XTP_COMMANDBAR(CFloatingPopupBar, CXTPToolBar); LRESULT CPaneToolbars::CToolbarsTree::WindowProc(UINT message,WPARAM wParam,LPARAM lParam) { switch (message) { case WM_NCPAINT: { CTreeCtrl::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 CTreeCtrl::WindowProc(message, wParam, lParam); } ///////////////////////////////////////////////////////////////////////////// // CPaneToolbars CPaneToolbars::CPaneToolbars() { m_bLockSelected = FALSE; } CPaneToolbars::~CPaneToolbars() { } BEGIN_MESSAGE_MAP(CPaneToolbars, CWnd) //{{AFX_MSG_MAP(CPaneToolbars) ON_WM_CREATE() ON_WM_SIZE() ON_WM_SETFOCUS() ON_COMMAND(ID_PANETOOLBARS_ADD, OnPanetoolbarsAdd) ON_COMMAND(ID_PANETOOLBARS_ADDMENU, OnPanetoolbarsAddMenu) ON_UPDATE_COMMAND_UI(ID_PANETOOLBARS_ADD, OnUpdatePanetoolbarsAdd) ON_UPDATE_COMMAND_UI(ID_PANETOOLBARS_DELETE, OnUpdatePanetoolbarsDelete) ON_COMMAND(ID_PANETOOLBARS_DELETE, OnPanetoolbarsDelete) //}}AFX_MSG_MAP ON_NOTIFY(TVN_SELCHANGED, AFX_IDW_PANE_FIRST, OnTreeSelChanged) ON_NOTIFY(NM_SETFOCUS, AFX_IDW_PANE_FIRST, OnTreeSetFocus) END_MESSAGE_MAP() int CPaneToolbars::BuildToolbarsTree(HTREEITEM hItem, CXTPCommandBar* pCommandBar, BOOL bCheck) { BOOL bToolbar = pCommandBar->GetType() != xtpBarTypePopup; int nImageIndex = bToolbar? 0: 1; HTREEITEM hItemChild = 0; int nTotalCount = 1; CString strTitle = pCommandBar->GetTitle(); if (strTitle.IsEmpty()) strTitle = _T("[Untitled]"); if (bCheck) { hItemChild = (HTREEITEM)pCommandBar->GetCommandBarData(); TVITEM item; item.hItem = hItemChild; item.mask = TVIF_PARAM; if (hItemChild != 0 && m_wndTreeCtrl.SendMessage(TVM_GETITEM, 0, (LPARAM)&item) && (DWORD_PTR)item.lParam == (DWORD_PTR)pCommandBar) { if (m_wndTreeCtrl.GetItemText(hItemChild) != strTitle) { m_wndTreeCtrl.SetItemText(hItemChild, strTitle); } } else return 0; } else { hItemChild = m_wndTreeCtrl.InsertItem(strTitle, nImageIndex, nImageIndex, hItem); m_wndTreeCtrl.SetItemData(hItemChild, (DWORD_PTR)pCommandBar); pCommandBar->SetCommandBarData((DWORD_PTR)hItemChild); } for (int i = 0; i < pCommandBar->GetControlCount(); i++) { CXTPControl* pControl = pCommandBar->GetControl(i); CXTPCommandBar* pPopupBar = pControl->GetCommandBar(); if (pControl == NULL || pControl->GetID() == XTP_ID_TOOLBAR_EXPAND || pPopupBar == NULL) continue; int nCount = BuildToolbarsTree(hItemChild, pPopupBar, bCheck); if (bCheck && nCount == 0) return 0; nTotalCount += nCount; } if (!bCheck) m_wndTreeCtrl.Expand (hItemChild, TVE_EXPAND); return nTotalCount; } void CPaneToolbars::Refresh() { if (!AfxGetMainWnd()) return; if (!m_wndTreeCtrl.GetSafeHwnd()) return; CXTPCommandBars* pCommandBars = ((CMainFrame*)AfxGetMainWnd())->GetActiveCommandBars(); m_pActiveCommandBars = pCommandBars; if (!pCommandBars || pCommandBars->GetCount() == 0) { m_bLockSelected = TRUE; m_wndTreeCtrl.DeleteAllItems(); m_bLockSelected = FALSE; return; } int nTotalCount = 0, i; for (i = 0; i < pCommandBars->GetCount(); i++) { CXTPToolBar* pCommandBar = pCommandBars->GetAt(i); if (!pCommandBar->IsBuiltIn()) continue; int nCount = BuildToolbarsTree(TVI_ROOT, pCommandBar, TRUE); if (nCount == 0) { nTotalCount = 0; break; } nTotalCount += nCount; } for (i = 0; i < pCommandBars->GetContextMenus()->GetCount(); i++) { CXTPCommandBar* pCommandBar = pCommandBars->GetContextMenus()->GetAt(i); int nCount = BuildToolbarsTree(TVI_ROOT, pCommandBar, TRUE); if (nCount == 0) { nTotalCount = 0; break; } nTotalCount += nCount; } if (nTotalCount != (int)m_wndTreeCtrl.GetCount()) { nTotalCount = 0; } if (nTotalCount == 0) { m_wndTreeCtrl.LockWindowUpdate(); m_bLockSelected = TRUE; m_wndTreeCtrl.DeleteAllItems(); for (i = 0; i < pCommandBars->GetCount(); i++) { CXTPToolBar* pCommandBar = pCommandBars->GetAt(i); if (!pCommandBar->IsBuiltIn()) continue; BuildToolbarsTree(TVI_ROOT, pCommandBar, FALSE); } for (i = 0; i < pCommandBars->GetContextMenus()->GetCount(); i++) { CXTPCommandBar* pCommandBar = pCommandBars->GetContextMenus()->GetAt(i); BuildToolbarsTree(TVI_ROOT, pCommandBar, FALSE); } m_wndTreeCtrl.UnlockWindowUpdate(); ((CMainFrame*)AfxGetMainWnd())->m_pActivePane = NULL; ((CMainFrame*)AfxGetMainWnd())->RefreshPanes(); m_bLockSelected = FALSE; } } ///////////////////////////////////////////////////////////////////////////// // CPaneToolbars message handlers int CPaneToolbars::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; XTPImageManager()->SetMaskColor(RGB(0, 0xFF, 0)); VERIFY(m_wndToolBar.CreateToolBar(WS_VISIBLE|WS_CHILD|CBRS_TOOLTIPS, this)); VERIFY(m_wndToolBar.LoadToolBar(IDR_PANE_TOOLBARS)); m_ilTreeIcons.Create(16, 16, ILC_MASK|ILC_COLOR24, 0, 1); CBitmap bmp; bmp.LoadBitmap(IDB_PANE_TOOLBARS_ICONS); m_ilTreeIcons.Add(&bmp, RGB(0, 255, 0)); if (!m_wndTreeCtrl.Create(WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE|TVS_HASLINES| TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST)) { TRACE0("Failed to create view window\n"); return -1; } m_wndTreeCtrl.ModifyStyleEx(0, WS_EX_STATICEDGE); m_wndTreeCtrl.SetImageList(&m_ilTreeIcons, TVSIL_NORMAL); Refresh(); return 0; } void CPaneToolbars::OnSize(UINT nType, int cx, int cy) { CWnd::OnSize(nType, cx, cy); CSize sz(0); if (m_wndToolBar.GetSafeHwnd()) { sz = m_wndToolBar.CalcDockingLayout(cx, /*LM_HIDEWRAP|*/ LM_HORZDOCK|LM_HORZ | LM_COMMIT); m_wndToolBar.MoveWindow(0, 0, cx, sz.cy); m_wndToolBar.Invalidate(FALSE); } if (m_wndTreeCtrl.GetSafeHwnd()) { m_wndTreeCtrl.MoveWindow(0, sz.cy, cx, cy - sz.cy); } } void CPaneToolbars::OnSetFocus(CWnd*) { m_wndTreeCtrl.SetFocus(); } void CPaneToolbars::OnPanetoolbarsAdd() { CDialogNewToolbar dt(TRUE); CEmbeddedFrame* pFrame = GetMainFrame()->GetActiveEmbeddedFrame(); if (!pFrame) return; if (dt.DoModal() == IDOK) { CXTPToolBar* pCommandBar = (CXTPToolBar*)pFrame->GetCommandBars()->Add(dt.m_strCaption, xtpBarTop); pCommandBar->SetBarID(pFrame->ResourceManager()->GetStringID(dt.m_strId)); Refresh(); HTREEITEM hItem = (HTREEITEM)pCommandBar->GetCommandBarData(); m_wndTreeCtrl.SelectItem(hItem); } } void CPaneToolbars::ShowContextMenu(HTREEITEM hItem) { CEmbeddedFrame* pFrame = GetMainFrame()->GetActiveEmbeddedFrame(); if (!pFrame) return; CXTPCommandBars* pCommandBars = pFrame->GetCommandBars(); CXTPCommandBar* pSelectedBar = (CXTPCommandBar*)m_wndTreeCtrl.GetItemData(hItem); pFrame->CommitContextMenu(); if (!pSelectedBar->IsPopupBar() || !((CXTPPopupBar*)pSelectedBar)->IsContextMenu()) return; CXTPPopupBar* pPopupBar = (CXTPPopupBar*)pSelectedBar; CXTPToolBar* pContextMenu = (CXTPToolBar*)pCommandBars->Add(pPopupBar->GetTitle(), xtpBarTop, RUNTIME_CLASS(CFloatingPopupBar)); if (!pContextMenu) { TRACE0("Failed to create toolbar\n"); return; } CXTPControls* pControls = pPopupBar->GetControls()->Duplicate(); pContextMenu->SetControls(pControls); pContextMenu->SetBarID(pPopupBar->GetBarID()); pContextMenu->SetCustomizeDialogPresent(FALSE); pContextMenu->SetPosition(xtpBarFloating); pContextMenu->EnableDocking(xtpFlagFloating); pContextMenu->OnRecalcLayout(); CXTPWindowRect rcContext(pContextMenu); CXTPWindowRect rcParent(pFrame); CPoint pt = pFrame->m_ptContextMenu; if (pt == CPoint(0, 0)) pt = CPoint(rcParent.right, rcParent.top); pContextMenu->MoveWindow(pt.x, pt.y, rcContext.Width(), rcContext.Height()); pContextMenu->SetCommandBarData((DWORD_PTR)pPopupBar); pContextMenu->OnUpdateCmdUI(); pFrame->m_pContextMenu = pContextMenu; } void CPaneToolbars::OnPanetoolbarsAddMenu() { CDialogNewToolbar dt(FALSE); CEmbeddedFrame* pFrame = GetMainFrame()->GetActiveEmbeddedFrame(); if (!pFrame) return; if (dt.DoModal() == IDOK) { pFrame->CommitContextMenu(); CXTPCommandBars* pCommandBars = pFrame->GetCommandBars(); CXTPPopupBar* pPopupBar = CXTPPopupBar::CreatePopupBar(pCommandBars); pPopupBar->SetTitle(dt.m_strCaption); pPopupBar->SetBarID(pFrame->ResourceManager()->GetStringID(dt.m_strId)); pFrame->GetCommandBars()->GetContextMenus()->Add(pPopupBar); Refresh(); HTREEITEM hItem = (HTREEITEM)pPopupBar->GetCommandBarData(); m_wndTreeCtrl.SelectItem(hItem); //ShowContextMenu(hItem); } } void CPaneToolbars::OnUpdatePanetoolbarsAdd(CCmdUI* pCmdUI) { pCmdUI->Enable(m_pActiveCommandBars != NULL); } void CPaneToolbars::RefreshItem(HTREEITEM hItem) { ((CMainFrame*)AfxGetMainWnd())->m_pActivePane = this; ((CMainFrame*)AfxGetMainWnd())->RefreshPanes(); } void CPaneToolbars::OnTreeSelChanged(NMHDR* pNMHDR, LRESULT* pResult) { NMTREEVIEW* pNMTreeView = (NMTREEVIEW *)pNMHDR; if (m_bLockSelected) return; RefreshItem(pNMTreeView->itemNew.hItem); ShowContextMenu(m_wndTreeCtrl.GetSelectedItem()); *pResult = 0; } void CPaneToolbars::OnTreeSetFocus(NMHDR* /*pNMHDR*/, LRESULT* /*pResult*/) { HTREEITEM hItem = m_wndTreeCtrl.GetSelectedItem(); if (hItem) RefreshItem(hItem); } void CPaneToolbars::OnUpdatePanetoolbarsDelete(CCmdUI* pCmdUI) { HTREEITEM hItem = m_wndTreeCtrl.GetSelectedItem(); if (hItem) { CXTPCommandBar* pCommandBar = (CXTPCommandBar*)m_wndTreeCtrl.GetItemData(hItem); pCmdUI->Enable(((pCommandBar->GetType() == xtpBarTypeNormal) && (pCommandBar->GetPosition() != xtpBarPopup)) || (pCommandBar->IsPopupBar() && ((CXTPPopupBar*)pCommandBar)->IsContextMenu())); } else { pCmdUI->Enable(FALSE); } } void CPaneToolbars::OnPanetoolbarsDelete() { HTREEITEM hItem = m_wndTreeCtrl.GetSelectedItem(); if (hItem) { CXTPCommandBar* pCommandBar = (CXTPCommandBar*)m_wndTreeCtrl.GetItemData(hItem); if (pCommandBar->IsPopupBar() && ((CXTPPopupBar*)pCommandBar)->IsContextMenu()) { CEmbeddedFrame* pFrame = GetMainFrame()->GetActiveEmbeddedFrame(); if (!pFrame) return; pFrame->CommitContextMenu(); ((CMainFrame*)AfxGetMainWnd())->m_pActivePane = NULL; m_pActiveCommandBars->SetDragControl(NULL); pCommandBar->GetCommandBars()->GetContextMenus()->Remove(pCommandBar); Refresh(); } else if ((pCommandBar->GetType() == xtpBarTypeNormal) && (pCommandBar->GetPosition() != xtpBarPopup)) { ((CMainFrame*)AfxGetMainWnd())->m_pActivePane = NULL; m_pActiveCommandBars->SetDragControl(NULL); pCommandBar->GetCommandBars()->Remove((CXTPToolBar*)pCommandBar); Refresh(); } } } void CPaneToolbars::FillConstraintsToolbarsID(CXTPPropertyGridItem* pItem) { CEmbeddedFrame* pFrame = GetMainFrame()->GetActiveEmbeddedFrame(); CXTPCommandBars* pCommandBars = GetMainFrame()->GetActiveCommandBars(); ASSERT(pCommandBars); for (int i = 0; i < pCommandBars->GetCount(); i++) { CXTPCommandBar* pCommandBar = pCommandBars->GetAt(i); if (pCommandBar->GetType() == xtpBarTypeNormal) { pItem->GetConstraints()->AddConstraint(pFrame->ResourceManager()->GetStringID(pCommandBar->GetBarID())); } } } CObject* CPaneToolbars::RefreshPropertyGrid(CXTPPropertyGrid* pPropertyGrid) { LPCTSTR lpStyles[] = {_T("xtpButtonAutomatic"), _T("xtpButtonCaption"), _T("xtpButtonIcon"), _T("xtpButtonIconAndCaption"), _T("xtpButtonIconAndCaptionBelow"), _T("xtpButtonCaptionAndDescription") }; HTREEITEM hItem = m_wndTreeCtrl.GetSelectedItem(); if (!hItem) return NULL; CXTPCommandBar* pCommandBar = (CXTPCommandBar*)m_wndTreeCtrl.GetItemData(hItem); if (!pCommandBar) return NULL; CXTPToolBar* pToolBar = DYNAMIC_DOWNCAST(CXTPToolBar, pCommandBar); CXTPPopupBar* pPopupBar = DYNAMIC_DOWNCAST(CXTPPopupBar, pCommandBar); CEmbeddedFrame* pFrame = GetMainFrame()->GetActiveEmbeddedFrame(); if (!pFrame) return NULL; CXTPPropertyGridItem* pCategoryAppearance = pPropertyGrid->AddCategory(ID_GRID_CATEGORY_APPEARANCE); CXTPPropertyGridItem* pCategoryBehavior = pPropertyGrid->AddCategory(ID_GRID_CATEGORY_BEHAVIOR); pCategoryAppearance->AddChildItem(new CXTPPropertyGridItem(ID_GRID_ITEM_COMMANDBAR_TITLE, pCommandBar->GetTitle())); CString strID = pFrame->ResourceManager()->GetStringID(pCommandBar->GetBarID()); CXTPPropertyGridItem* pItemCommandBarId = pCategoryAppearance->AddChildItem(new CXTPPropertyGridItem(ID_GRID_ITEM_COMMANDBAR_ID, strID)); pItemCommandBarId->SetReadOnly(TRUE); CXTPPropertyGridItem* pItemCommandBarVisible = pCategoryBehavior->AddChildItem( new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_VISIBLE, pToolBar? pToolBar->IsVisible(): TRUE)); if (!pCommandBar->IsKindOf(RUNTIME_CLASS(CXTPToolBar))) pItemCommandBarVisible->SetReadOnly(TRUE); pCategoryBehavior->AddChildItem(new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_CUSTOMIZABLE, pCommandBar->IsCustomizable())); pCategoryBehavior->AddChildItem(new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_ANIMATION, pCommandBar->IsAnimationEnabled())); pCategoryBehavior->AddChildItem(new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_SHOWGRIPPER, pCommandBar->GetShowGripper())); { CXTPPropertyGridItem* pItemCommandBarStyle = pCategoryBehavior->AddChildItem(new CXTPPropertyGridItemEnum(ID_GRID_ITEM_COMMANDBAR_DEFAULTBUTTONSTYLE, pCommandBar->GetDefaultButtonStyle())); CXTPPropertyGridItemConstraints* pConstraints = pItemCommandBarStyle->GetConstraints(); for (int i = 0; i < _countof(lpStyles); i++) pConstraints->AddConstraint(lpStyles[i], i); } if (pToolBar) { pCategoryBehavior->AddChildItem(new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_CLOSEABLE, pToolBar->IsCloseable())); pCategoryBehavior->AddChildItem(new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_CONTEXTMENUPRESENT, pToolBar->IsContextMenuPresent())); pCategoryBehavior->AddChildItem(new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_CUSTOMIZEDIALOGPRESENT, pToolBar->IsCustomizeDialogPresent())); } if (pCommandBar->IsKindOf(RUNTIME_CLASS(CXTPPopupBar))) { CString strCaption; UINT nID; int nWidth; BOOL bTearOff = pPopupBar->IsTearOffPopup(strCaption, nID, nWidth); CXTPPropertyGridItem* pItemCommandBarTearOff = pCategoryBehavior->AddChildItem( new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_TEAROFF, bTearOff)); if (bTearOff) { CString strID = pFrame->ResourceManager()->GetStringID(nID); pItemCommandBarTearOff->AddChildItem(new CXTPPropertyGridItem(ID_GRID_ITEM_COMMANDBAR_TEAROFF_CAPTION, strCaption)); CXTPPropertyGridItem* pItemCommandBarTearOffId = pItemCommandBarTearOff->AddChildItem( new CXTPPropertyGridItem(ID_GRID_ITEM_COMMANDBAR_TEAROFF_ID, strID)); pItemCommandBarTearOffId->SetFlags(xtpGridItemHasComboButton | xtpGridItemHasEdit); FillConstraintsToolbarsID(pItemCommandBarTearOffId); pItemCommandBarTearOff->AddChildItem(new CXTPPropertyGridItemNumber(ID_GRID_ITEM_COMMANDBAR_TEAROFF_WIDTH, nWidth)); pItemCommandBarTearOff->Expand(); } CXTPPropertyGridItem* pItemPopupToolBar = pCategoryAppearance->AddChildItem(new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_POPUPTOOLBAR, pCommandBar->GetType() !=xtpBarTypePopup)); if (pCommandBar->GetType() != xtpBarTypePopup) { pItemPopupToolBar->AddChildItem(new CXTPPropertyGridItemNumber(ID_GRID_ITEM_COMMANDBAR_WIDTH, pCommandBar->GetWidth())); } if (pCommandBar->GetType() == xtpBarTypePopup) { pCategoryAppearance->AddChildItem(new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_DOUBLEGRIPPER, ((CXTPPopupBar*)pCommandBar)->IsDoubleGripper())); } } ///if (pCommandBar->GetType() != xtpBarTypePopup) { CSize sz = pCommandBar->GetIconSize(); pCategoryAppearance->AddChildItem(new CXTPPropertyGridItemSize(ID_GRID_ITEM_COMMANDBAR_ICON_SIZE, sz)); } if (pCommandBar->GetType() != xtpBarTypePopup) { CSize sz = pCommandBar->GetButtonSize(); pCategoryAppearance->AddChildItem(new CXTPPropertyGridItemSize(ID_GRID_ITEM_COMMANDBAR_BUTTON_SIZE, sz)); } if (pCommandBar->GetType() != xtpBarTypePopup) { pCategoryAppearance->AddChildItem(new CXTPPropertyGridItemBool(ID_GRID_ITEM_COMMANDBAR_TEXTBELOWICONS, pCommandBar->IsTextBelowIcons())); } if (pCommandBar->IsKindOf(RUNTIME_CLASS(CXTPToolBar))) { pCategoryBehavior->AddChildItem(new CPropertyGridItemDockingFlags(ID_GRID_ITEM_COMMANDBAR_FLAGS, pCommandBar->GetFlags())); pCategoryBehavior->AddChildItem(new CPropertyGridItemStretchFlags(ID_GRID_ITEM_COMMANDBAR_STRETCH, pCommandBar->GetFlags())); } pCategoryAppearance->Expand(); pCategoryBehavior->Expand(); return pCommandBar; } BOOL CPaneToolbars::OnPropertyGridValueChanged(CObject* pActiveObject, CXTPPropertyGridItem* pItem) { CXTPCommandBar* pCommandBar = DYNAMIC_DOWNCAST(CXTPCommandBar, pActiveObject); if (!pCommandBar) return FALSE; switch (pItem->GetID()) { case ID_GRID_ITEM_COMMANDBAR_TITLE: pCommandBar->SetTitle(pItem->GetValue()); Refresh(); return TRUE; case ID_GRID_ITEM_COMMANDBAR_ICON_SIZE: { CSize sz = ((CXTPPropertyGridItemSize*)pItem)->GetSize(); pCommandBar->SetIconSize(sz); pCommandBar->DelayLayout(); GetMainFrame()->RefreshPanes(TRUE); } return TRUE; case ID_GRID_ITEM_COMMANDBAR_BUTTON_SIZE: { CSize sz = ((CXTPPropertyGridItemSize*)pItem)->GetSize(); pCommandBar->SetButtonSize(sz); pCommandBar->DelayLayout(); GetMainFrame()->RefreshPanes(TRUE); } return TRUE; case ID_GRID_ITEM_COMMANDBAR_TEXTBELOWICONS: pCommandBar->ShowTextBelowIcons(GetBoolValue(pItem)); return TRUE; case ID_GRID_ITEM_COMMANDBAR_VISIBLE: pCommandBar->SetVisible(GetBoolValue(pItem)); Refresh(); return TRUE; case ID_GRID_ITEM_COMMANDBAR_CUSTOMIZABLE: pCommandBar->EnableCustomization(GetBoolValue(pItem)); Refresh(); return TRUE; case ID_GRID_ITEM_COMMANDBAR_ANIMATION: pCommandBar->EnableAnimation(GetBoolValue(pItem)); return TRUE; case ID_GRID_ITEM_COMMANDBAR_SHOWGRIPPER: pCommandBar->SetShowGripper(GetBoolValue(pItem)); pCommandBar->OnRecalcLayout(); return TRUE; case ID_GRID_ITEM_COMMANDBAR_DEFAULTBUTTONSTYLE: pCommandBar->SetDefaultButtonStyle((XTPButtonStyle)GetEnumValue(pItem)); pCommandBar->OnRecalcLayout(); return TRUE; case ID_GRID_ITEM_COMMANDBAR_CLOSEABLE: ((CXTPToolBar*)pCommandBar)->SetCloseable(GetBoolValue(pItem)); return TRUE; case ID_GRID_ITEM_COMMANDBAR_CONTEXTMENUPRESENT: ((CXTPToolBar*)pCommandBar)->SetContextMenuPresent(GetBoolValue(pItem)); return TRUE; case ID_GRID_ITEM_COMMANDBAR_CUSTOMIZEDIALOGPRESENT: ((CXTPToolBar*)pCommandBar)->SetCustomizeDialogPresent(GetBoolValue(pItem)); return TRUE; case ID_GRID_ITEM_COMMANDBAR_STRETCH: case ID_GRID_ITEM_COMMANDBAR_FLAGS: { DWORD dwMask = pItem->GetID() == ID_GRID_ITEM_COMMANDBAR_STRETCH? xtpFlagHideWrap|xtpFlagStretched: xtpFlagAlignAny|xtpFlagFloating; DWORD dwFalgs = (pCommandBar->GetFlags() & ~dwMask) | GetFlagsValue(pItem); ((CXTPToolBar*)pCommandBar)->EnableDocking(dwFalgs); pCommandBar->DelayLayout(); Refresh(); } return TRUE; case ID_GRID_ITEM_COMMANDBAR_POPUPTOOLBAR: ((CXTPPopupBar*)pCommandBar)->SetPopupToolBar(GetBoolValue(pItem)); pCommandBar->DelayLayout(); Refresh(); ((CMainFrame*)AfxGetMainWnd())->m_paneProperties.Refresh(this); return TRUE; case ID_GRID_ITEM_COMMANDBAR_WIDTH: pCommandBar->SetWidth(GetNumberValue(pItem)); pCommandBar->DelayLayout(); Refresh(); return TRUE; case ID_GRID_ITEM_COMMANDBAR_DOUBLEGRIPPER: { CXTPPopupBar* pPopupBar = DYNAMIC_DOWNCAST(CXTPPopupBar, pCommandBar); ASSERT(pPopupBar); pPopupBar->SetDoubleGripper(GetBoolValue(pItem)); break; } case ID_GRID_ITEM_COMMANDBAR_TEAROFF: { CXTPPopupBar* pPopupBar = DYNAMIC_DOWNCAST(CXTPPopupBar, pCommandBar); ASSERT(pPopupBar); if (GetBoolValue(pItem)) { CString strCaption; UINT nID; int nWidth; pPopupBar->IsTearOffPopup(strCaption, nID, nWidth); if (nID == 0) { CEmbeddedFrame* pFrame = GetMainFrame()->GetActiveEmbeddedFrame(); ASSERT(pFrame); nID = pFrame->ResourceManager()->GetStringID(_T("IDR_UNTITLED")); pPopupBar->SetTearOffPopup(_T("Untitled"), nID); } else pPopupBar->SetTearOffPopup(strCaption, nID, nWidth); } else { pPopupBar->SetTearOffPopup(_T(""), 0); } ((CMainFrame*)AfxGetMainWnd())->m_paneProperties.Refresh(this); } return TRUE; case ID_GRID_ITEM_COMMANDBAR_TEAROFF_ID: { CEmbeddedFrame* pFrame = GetMainFrame()->GetActiveEmbeddedFrame(); ASSERT(pFrame); CXTPPopupBar* pPopupBar = DYNAMIC_DOWNCAST(CXTPPopupBar, pCommandBar); ASSERT(pPopupBar); CString strCaption; UINT nID; int nWidth; pPopupBar->IsTearOffPopup(strCaption, nID, nWidth); pPopupBar->SetTearOffPopup(strCaption, pFrame->ResourceManager()->GetStringID(pItem->GetValue()), nWidth); } return TRUE; case ID_GRID_ITEM_COMMANDBAR_TEAROFF_CAPTION: { CXTPPopupBar* pPopupBar = DYNAMIC_DOWNCAST(CXTPPopupBar, pCommandBar); ASSERT(pPopupBar); CString strCaption; UINT nID; int nWidth; pPopupBar->IsTearOffPopup(strCaption, nID, nWidth); pPopupBar->SetTearOffPopup(pItem->GetValue(), nID, nWidth); } return TRUE; case ID_GRID_ITEM_COMMANDBAR_TEAROFF_WIDTH: { CXTPPopupBar* pPopupBar = DYNAMIC_DOWNCAST(CXTPPopupBar, pCommandBar); ASSERT(pPopupBar); CString strCaption; UINT nID; int nWidth; pPopupBar->IsTearOffPopup(strCaption, nID, nWidth); pPopupBar->SetTearOffPopup(strCaption, nID, GetNumberValue(pItem)); } return TRUE; } return FALSE; }