VirtualBox

Changeset 83490 in vbox


Ignore:
Timestamp:
Mar 30, 2020 4:57:41 PM (5 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9686. Hopefully somewhat better table width handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.cpp

    r83476 r83490  
    7373
    7474    UIVMResouceMonitorTableView(QWidget *pParent = 0);
     75    void setMinimumColumnWidths(const QVector<int>& widths);
     76    void updateColumVisibility();
    7577
    7678protected:
     
    8082private slots:
    8183
    82     void sltHeaderResized(int iIndex, int iOldSize, int iNewSize);
     84
    8385
    8486private:
    8587
    8688    void resizeHeader();
    87     QSet<int> m_userResizedColums;
    88 
     89    QVector<int> m_minimumColumnWidths;
    8990};
    9091
     
    146147
    147148private:
     149
    148150    QVariant m_data;
    149151};
     
    166168
    167169    //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 */;
    169173
    170174private:
     
    239243
    240244
     245
    241246/*********************************************************************************************************************************
    242247*   Class UIVMResouceMonitorTableView implementation.                                                                            *
     
    245250UIVMResouceMonitorTableView::UIVMResouceMonitorTableView(QWidget *pParent /* = 0 */)
    246251    :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
     256void UIVMResouceMonitorTableView::setMinimumColumnWidths(const QVector<int>& widths)
     257{
     258    m_minimumColumnWidths = widths;
     259}
     260
     261void 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();
    254279}
    255280
    256281void UIVMResouceMonitorTableView::resizeEvent(QResizeEvent *pEvent)
    257282{
    258     //resizeHeader();
     283    resizeHeader();
    259284    QTableView::resizeEvent(pEvent);
    260285}
     
    266291        return;
    267292    int iSectionCount = pHeader->count();
    268     if (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    }
    276301}
    277302
     
    408433}
    409434
    410 
    411 bool UIResourceMonitorProxyModel::filterAcceptsColumn(int iSourceColumn, const QModelIndex &sourceParent) const
    412 {
    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// }
    419444
    420445
     
    783808    if (m_pModel)
    784809        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    }
    785822}
    786823
     
    846883        m_pTableView->setShowGrid(false);
    847884        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);
    851886        m_pTableView->verticalHeader()->setVisible(false);
    852887        m_pTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
     
    858893        connect(m_pModel, &UIResourceMonitorModel::sigDataUpdate, this, &UIResourceMonitorWidget::sltHandleDataUpdate);
    859894
    860         m_pModel->setColumnVisible(m_columnVisible);
     895        updateModelColumVisibilityCache();
    861896    }
    862897}
     
    9881023    if (m_pModel)
    9891024        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();
    9921028}
    9931029
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette