Changeset 83490 in vbox
- Timestamp:
- Mar 30, 2020 4:57:41 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.cpp
r83476 r83490 73 73 74 74 UIVMResouceMonitorTableView(QWidget *pParent = 0); 75 void setMinimumColumnWidths(const QVector<int>& widths); 76 void updateColumVisibility(); 75 77 76 78 protected: … … 80 82 private slots: 81 83 82 void sltHeaderResized(int iIndex, int iOldSize, int iNewSize); 84 83 85 84 86 private: 85 87 86 88 void resizeHeader(); 87 QSet<int> m_userResizedColums; 88 89 QVector<int> m_minimumColumnWidths; 89 90 }; 90 91 … … 146 147 147 148 private: 149 148 150 QVariant m_data; 149 151 }; … … 166 168 167 169 //virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const /* override */; 168 virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const /* override */; 170 /** Section (column) visibility is controlled by the QHeaderView (see UIVMResouceMonitorTableView::updateColumVisibility) 171 * to have somewhat meaningful column resizing. */ 172 //virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const /* override */; 169 173 170 174 private: … … 239 243 240 244 245 241 246 /********************************************************************************************************************************* 242 247 * Class UIVMResouceMonitorTableView implementation. * … … 245 250 UIVMResouceMonitorTableView::UIVMResouceMonitorTableView(QWidget *pParent /* = 0 */) 246 251 :QTableView(pParent) 247 { 248 QHeaderView* pHeader = horizontalHeader(); 249 if (pHeader) 250 { 251 connect(pHeader, &QHeaderView::sectionResized, this, &UIVMResouceMonitorTableView::sltHeaderResized); 252 //pHeader->setResizeMode(QHeaderView::ResizeToContents); 253 } 252 , m_minimumColumnWidths(QVector<int>((int)VMResouceMonitorColumn_Max, 0)) 253 { 254 } 255 256 void UIVMResouceMonitorTableView::setMinimumColumnWidths(const QVector<int>& widths) 257 { 258 m_minimumColumnWidths = widths; 259 } 260 261 void UIVMResouceMonitorTableView::updateColumVisibility() 262 { 263 UIResourceMonitorProxyModel *pProxyModel = qobject_cast<UIResourceMonitorProxyModel *>(model()); 264 if (!pProxyModel) 265 return; 266 UIResourceMonitorModel *pModel = qobject_cast<UIResourceMonitorModel *>(pProxyModel->sourceModel()); 267 QHeaderView *pHeader = horizontalHeader(); 268 269 if (!pModel || !pHeader) 270 return; 271 for (int i = (int)VMResouceMonitorColumn_Name; i < (int)VMResouceMonitorColumn_Max; ++i) 272 { 273 if (!pModel->columnVisible(i)) 274 pHeader->hideSection(i); 275 else 276 pHeader->showSection(i); 277 } 278 resizeHeader(); 254 279 } 255 280 256 281 void UIVMResouceMonitorTableView::resizeEvent(QResizeEvent *pEvent) 257 282 { 258 //resizeHeader();283 resizeHeader(); 259 284 QTableView::resizeEvent(pEvent); 260 285 } … … 266 291 return; 267 292 int iSectionCount = pHeader->count(); 268 i f (iSectionCount <= 0)269 return;270 pHeader->setDefaultSectionSize(width() / iSectionCount);271 } 272 273 void UIVMResouceMonitorTableView::sltHeaderResized(int iIndex, int iOldSize, int iNewSize) 274 { 275 printf("section resize %d %d %d\n", iIndex, iOldSize, iNewSize);293 int iHiddenSectionCount = pHeader->hiddenSectionCount(); 294 int iWidth = width() / (iSectionCount - iHiddenSectionCount); 295 for (int i = 0; i < iSectionCount && i < m_minimumColumnWidths.size(); ++i) 296 { 297 if (pHeader->isSectionHidden(i)) 298 continue; 299 pHeader->resizeSection(i, iWidth < m_minimumColumnWidths[i] ? m_minimumColumnWidths[i] : iWidth); 300 } 276 301 } 277 302 … … 408 433 } 409 434 410 411 bool UIResourceMonitorProxyModel::filterAcceptsColumn(int iSourceColumn, const QModelIndex &sourceParent) const412 {413 Q_UNUSED(sourceParent);414 UIResourceMonitorModel* pModel = qobject_cast<UIResourceMonitorModel*>(sourceModel());415 if (!pModel)416 return true;417 return pModel->columnVisible(iSourceColumn);418 }435 /* See the function definition comment: */ 436 // bool UIResourceMonitorProxyModel::filterAcceptsColumn(int iSourceColumn, const QModelIndex &sourceParent) const 437 // { 438 // Q_UNUSED(sourceParent); 439 // UIResourceMonitorModel* pModel = qobject_cast<UIResourceMonitorModel*>(sourceModel()); 440 // if (!pModel) 441 // return true; 442 // return pModel->columnVisible(iSourceColumn); 443 // } 419 444 420 445 … … 783 808 if (m_pModel) 784 809 m_pModel->setColumnCaptions(m_columnCaptions); 810 if (m_pTableView) 811 { 812 QFontMetrics fontMetrics(m_pTableView->font()); 813 QVector<int> columnWidths; 814 foreach (const QString strCaption, m_columnCaptions) 815 { 816 columnWidths << fontMetrics.width(strCaption) + 817 QApplication::style()->pixelMetric(QStyle::PM_LayoutLeftMargin) + 818 QApplication::style()->pixelMetric(QStyle::PM_LayoutRightMargin); 819 } 820 m_pTableView->setMinimumColumnWidths(columnWidths); 821 } 785 822 } 786 823 … … 846 883 m_pTableView->setShowGrid(false); 847 884 m_pTableView->horizontalHeader()->setHighlightSections(false); 848 //m_pTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); 849 //m_pTableView->horizontalHeader()->setStretchLastSection(true); 850 885 m_pTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed); 851 886 m_pTableView->verticalHeader()->setVisible(false); 852 887 m_pTableView->setEditTriggers(QAbstractItemView::NoEditTriggers); … … 858 893 connect(m_pModel, &UIResourceMonitorModel::sigDataUpdate, this, &UIResourceMonitorWidget::sltHandleDataUpdate); 859 894 860 m_pModel->setColumnVisible(m_columnVisible);895 updateModelColumVisibilityCache(); 861 896 } 862 897 } … … 988 1023 if (m_pModel) 989 1024 m_pModel->setColumnVisible(m_columnVisible); 990 if (m_pProxyModel) 991 m_pProxyModel->reFilter(); 1025 /* Notify the table view for the changed column visibility: */ 1026 if (m_pTableView) 1027 m_pTableView->updateColumVisibility(); 992 1028 } 993 1029
Note:
See TracChangeset
for help on using the changeset viewer.