void CXTPTabPaintManager::CreateMultiRowIndexer(CXTPTabManager* pTabManager, CDC* pDC, int nWidth) { int x = 0; int nRowCount = 1; int i; int nTotalLength = 0; int nItemCount = pTabManager->GetItemCount(); CXTPTabManagerItem* pSelectedItem = 0; for (i = 0; i < nItemCount; i++) { CXTPTabManagerItem* pItem = pTabManager->GetItem(i); if (pItem->IsSelected()) { pSelectedItem = pItem; } int nLength = pItem->m_nContentLength = pItem->m_nButtonLength = pItem->IsVisible() ? m_pAppearanceSet->GetButtonLength(pDC, pItem) : 0; if (x + nLength > nWidth && x != 0) { x = 0; nRowCount++; } x += nLength; nTotalLength += nLength; } CXTPTabManager::ROW_ITEMS* pRowItems = pTabManager->m_pRowIndexer->CreateIndexer(nRowCount); if (nRowCount == 1) return; pRowItems[0].nFirstItem = pRowItems[0].nLastItem = 0; VERIFY(_CreateMultiRowIndexerBestFit(pTabManager, nWidth, 0, nTotalLength)); if (!m_bMultiRowFixedSelection && pSelectedItem) { int nSelectedRow = pSelectedItem->GetItemRow(); CXTPTabManager::ROW_ITEMS selectedRow = pRowItems[nSelectedRow]; pRowItems[nSelectedRow] = pRowItems[0]; pRowItems[0] = selectedRow; } }
void CXTPTabPaintManager::DrawRowItems(CXTPTabManager* pTabManager, CDC* pDC, const CRect& rcClipBox, int nItemRow) { CXTPTabManagerItem* pSelected = NULL; CXTPTabManager::ROW_ITEMS* pRowItems = pTabManager->m_pRowIndexer->GetRowItems(); if (!pRowItems) return; if (nItemRow >= pTabManager->GetRowCount()) return; int nFirstItem = pRowItems[nItemRow].nFirstItem; int nLastItem = pRowItems[nItemRow].nLastItem; BOOL bDrawRow = TRUE; if (m_pAppearanceSet->m_bButtonsReverseZOrder) { bDrawRow = FALSE; for (int i = nFirstItem; i <= nLastItem; i++) { CXTPTabManagerItem* pItem = pTabManager->GetItem(i); if (!pItem) return; if (pItem->m_nItemRow != nItemRow) break; if (pItem->IsSelected()) { nFirstItem = i; bDrawRow = TRUE; break; } if (pItem->IsVisible() && CRect().IntersectRect(rcClipBox, m_pAppearanceSet->GetButtonDrawRect(pItem))) { m_pAppearanceSet->DrawSingleButton(pDC, pItem); } } } if (bDrawRow) { for (int i = nLastItem; i >= nFirstItem; i--) { CXTPTabManagerItem* pItem = pTabManager->GetItem(i); if (!pItem) return; if (pItem->m_nItemRow != nItemRow) break; if (pItem->IsVisible() && CRect().IntersectRect(rcClipBox, m_pAppearanceSet->GetButtonDrawRect(pItem))) { if (pItem->IsSelected()) pSelected = pItem; else m_pAppearanceSet->DrawSingleButton(pDC, pItem); } } } if (pSelected) { m_pAppearanceSet->DrawSingleButton(pDC, pSelected); } }