int CXTPReportColumn::GetPrintWidth(int nTotalWidth) const { CXTPReportColumns* pColumns = m_pColumns; int nColumnsWidth = 0; CXTPReportColumn* pLastAutoColumn = NULL; for (int nColumn = 0; nColumn < pColumns->GetCount(); nColumn++) { CXTPReportColumn* pColumn = pColumns->GetAt(nColumn); if (!pColumn->IsVisible()) continue; if (pColumn->IsAutoSize()) { pLastAutoColumn = pColumn; nColumnsWidth += pColumn->GetWidth(); } else { nTotalWidth -= pColumn->GetWidth(); } } for (int i = 0; i < pColumns->GetCount(); i++) { CXTPReportColumn* pColumn = pColumns->GetAt(i); if (!pColumn->IsVisible()) continue; int nWidth = pColumn->GetWidth(); if (pColumn->IsAutoSize()) { if (pColumn == pLastAutoColumn) { nWidth = max(nTotalWidth, pColumn->GetMinWidth()); } else { nColumnsWidth = max(1, nColumnsWidth); nWidth = max(int(pColumn->GetWidth() * nTotalWidth / nColumnsWidth), pColumn->GetMinWidth()); nTotalWidth -= nWidth; nColumnsWidth -= pColumn->GetWidth(); } } if (pColumn == this) return nWidth; } return 0; }
CXTPReportColumn* CXTPReportColumns::GetLastVisibleColumn() const { for (int nColumn = GetCount() - 1; nColumn >= 0; nColumn--) { CXTPReportColumn* pColumn = GetAt(nColumn); if (pColumn->IsVisible()) return pColumn; } return NULL; }
CXTPReportColumn* CXTPReportColumns::GetFirstVisibleColumn() const { for (int nColumn = 0; nColumn < GetCount(); nColumn++) { CXTPReportColumn* pColumn = GetAt(nColumn); if (pColumn->IsVisible()) return pColumn; } return NULL; }
int CXTPReportColumns::GetVisibleColumnsCount() const { int nVisibleCount = 0; int nCount = GetCount(); for (int nColumn = 0; nColumn < nCount; nColumn++) { CXTPReportColumn* pColumn = GetAt(nColumn); if (pColumn && pColumn->IsVisible()) nVisibleCount++; } return nVisibleCount; }
void CXTPReportColumns::GetVisibleColumns(CXTPReportColumns& arrColumns) const { int nCount = GetCount(); for (int nColumn = 0; nColumn < nCount; nColumn++) { CXTPReportColumn* pColumn = GetAt(nColumn); if (pColumn && pColumn->IsVisible()) { arrColumns.m_arrColumns.Add(pColumn); pColumn->InternalAddRef(); } } }
CXTPReportColumn* CXTPReportColumns::GetVisibleAt(int nIndex) const { for (int nColumn = 0; nColumn < GetCount(); nColumn++) { CXTPReportColumn* pColumn = GetAt(nColumn); if (!pColumn->IsVisible()) continue; if (nIndex == 0) return pColumn; nIndex--; } return NULL; }