//************************************************************************************* void CBCGPRibbonButtonsGroup::SetParentCategory (CBCGPRibbonCategory* pCategory) { ASSERT_VALID (this); CBCGPBaseRibbonElement::SetParentCategory (pCategory); for (int i = 0; i < m_arButtons.GetSize (); i++) { CBCGPBaseRibbonElement* pButton = m_arButtons [i]; ASSERT_VALID (pButton); pButton->SetParentCategory (pCategory); } }
//********************************************************************** void CBCGPRibbonCustomizeRibbonPage::OnAdd() { ASSERT_VALID (m_pRibbonBar); if (m_pSelCategorySrc != NULL) { ASSERT_VALID(m_pSelCategorySrc); UINT nContextID = GetNewTabContextID(); CBCGPRibbonCategory* pNewTab = m_pSelCategorySrc->CreateCustomCopy(m_pRibbonBar); ASSERT_VALID(pNewTab); pNewTab->m_uiContextID = nContextID; pNewTab->m_bIsVisible = nContextID == 0; if (nContextID != 0) { pNewTab->SetTabColor(m_pRibbonBar->GetContextColor(nContextID)); } m_pRibbonBar->AddCustomCategory(pNewTab, TRUE); m_CustomizationData.AddCustomTab(*pNewTab, GetNewTabIndex(), nContextID); RebuildDestTree((DWORD_PTR)pNewTab, TRUE); m_wndRibbonTreeSrc.MoveSelection(TRUE); return; } if (m_pSelPanelSrc != NULL) { ASSERT_VALID(m_pSelPanelSrc); CBCGPRibbonCategory* pParentCategory = m_pSelCategoryDest; if (pParentCategory == NULL) { if (m_pSelPanelDest != NULL) { ASSERT_VALID(m_pSelPanelDest); pParentCategory = m_pSelPanelDest->GetParentCategory(); } else if (m_pSelElemDest != NULL) { ASSERT_VALID(m_pSelElemDest); pParentCategory = m_pSelElemDest->GetParentCategory(); } } if (pParentCategory == NULL) { ASSERT(FALSE); return; } ASSERT_VALID(pParentCategory); if (pParentCategory->HasPanel(m_pSelPanelSrc)) { if (m_CustomizationData.IsPanelHidden(m_pSelPanelSrc)) { m_CustomizationData.ShowPanel(m_pSelPanelSrc, TRUE); RebuildDestTree((DWORD_PTR)m_pSelPanelSrc, TRUE); } } else { CBCGPRibbonPanel* pNewPanel = m_pSelPanelSrc->CreateCustomCopy(pParentCategory); ASSERT_VALID(pNewPanel); pNewPanel->m_bIsNew = TRUE; int nIndex = GetNewPanelIndex(); pParentCategory->AddCustomPanel(pNewPanel, nIndex); m_CustomizationData.AddCustomPanel(*pNewPanel, nIndex); RebuildDestTree((DWORD_PTR)pNewPanel, TRUE); m_wndRibbonTreeSrc.MoveSelection(TRUE); } return; } if (m_pSelElemSrc != NULL) { ASSERT_VALID(m_pSelElemSrc); CBCGPRibbonPanel* pPanel = m_pSelPanelDest; if (pPanel == NULL) { if (m_pSelElemDest != NULL) { pPanel = m_pSelElemDest->GetParentPanel(); } } if (pPanel == NULL) { ASSERT(FALSE); return; } ASSERT_VALID(pPanel); CBCGPBaseRibbonElement* pElem = m_pSelElemSrc->CreateCustomCopy(); ASSERT_VALID (pElem); pElem->SetParentCategory(pPanel->GetParentCategory()); pElem->m_bIsNew = TRUE; pPanel->Add(pElem); m_CustomizationData.AddCustomElement(*pPanel, *pElem); m_wndRibbonTreeSrc.MoveSelection(TRUE); RebuildDestTree((DWORD_PTR)pElem); return; } }
//******************************************************************************** void CBCGPRibbonButtonsGroup::OnAfterChangeRect (CDC* pDC) { ASSERT_VALID (this); BOOL bIsFirst = TRUE; const BOOL bIsOnStatusBar = IsStatusBarMode(); const BOOL bIsQATOnBottom = IsQAT () && !m_pRibbonBar->IsQuickAccessToolbarOnTop (); const int nMarginX = IsQAT () ? 2 : 0; const int nMarginTop = bIsQATOnBottom ? 2 : bIsOnStatusBar ? 1 : 0; const int nMarginBottom = (IsQAT () || bIsOnStatusBar) ? 1 : 0; const int nButtonHeight = m_rect.Height () - nMarginTop - nMarginBottom; CRect rectGroup = m_rect; if (!IsQAT() && !bIsOnStatusBar && m_pParentMenu == NULL) { rectGroup.DeflateRect(CBCGPVisualManager::GetInstance ()->GetRibbonButtonsGroupHorzMargin(), 0); } int x = rectGroup.left + nMarginX; int nCustomizeButtonIndex = -1; if (IsQAT () && m_arButtons.GetSize () > 0) { //--------------------------------------------- // Last button is customize - it always visible. // Leave space for it: //--------------------------------------------- nCustomizeButtonIndex = (int) m_arButtons.GetSize () - 1; CBCGPBaseRibbonElement* pButton = m_arButtons [nCustomizeButtonIndex]; ASSERT_VALID (pButton); CSize sizeButton = pButton->GetSize (pDC); rectGroup.right -= sizeButton.cx; } BOOL bHasHiddenItems = FALSE; for (int i = 0; i < m_arButtons.GetSize (); i++) { CBCGPBaseRibbonElement* pButton = m_arButtons [i]; ASSERT_VALID (pButton); pButton->m_bShowGroupBorder = TRUE; if (pButton->m_pRibbonBar != NULL && !pButton->m_pRibbonBar->IsShowGroupBorder (this)) { pButton->m_bShowGroupBorder = FALSE; } if (m_rect.IsRectEmpty ()) { pButton->m_rect = CRect (0, 0, 0, 0); pButton->OnAfterChangeRect (pDC); continue; } BOOL bIsLast = i == m_arButtons.GetSize () - 1; pButton->SetParentCategory (m_pParent); CSize sizeButton = pButton->GetSize (pDC); sizeButton.cy = i != nCustomizeButtonIndex ? nButtonHeight : nButtonHeight - 1; const int y = i != nCustomizeButtonIndex ? rectGroup.top + nMarginTop : rectGroup.top; pButton->m_rect = CRect (CPoint (x, y), sizeButton); const BOOL bIsHiddenSeparator = bHasHiddenItems && pButton->IsSeparator (); if ((pButton->m_rect.right > rectGroup.right || bIsHiddenSeparator) && i != nCustomizeButtonIndex) { pButton->m_rect = CRect (0, 0, 0, 0); bHasHiddenItems = TRUE; } else { x += sizeButton.cx; } pButton->OnAfterChangeRect (pDC); if (bIsFirst && bIsLast) { pButton->m_Location = RibbonElementSingleInGroup; } else if (bIsFirst) { pButton->m_Location = RibbonElementFirstInGroup; } else if (bIsLast) { pButton->m_Location = RibbonElementLastInGroup; } else { pButton->m_Location = RibbonElementMiddleInGroup; } bIsFirst = FALSE; } }