VirtualBox

Changeset 83439 in vbox for trunk


Ignore:
Timestamp:
Mar 26, 2020 2:12:18 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
136661
Message:

FE/Qt: bugref:9686. Adding a toolbar action for column visibility toggle.

Location:
trunk/src/VBox/Frontends/VirtualBox/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolManager.cpp

    r83373 r83439  
    27952795        setStatusTip(QApplication::translate("UIActionPool", "Show cloud profile help"));
    27962796        setToolTip(  QApplication::translate("UIActionPool", "Show Cloud Profile Help")
     2797                   + (shortcut().isEmpty() ? QString() : QString(" (%1)").arg(shortcut().toString())));
     2798    }
     2799};
     2800
     2801/** Toggle action extension, used as 'Toggle Columns' action class. */
     2802class UIActionMenuSelectorVMResourceManagerToggleColumns : public UIActionToggle
     2803{
     2804    Q_OBJECT;
     2805
     2806public:
     2807
     2808    /** Constructs action passing @a pParent to the base-class. */
     2809    UIActionMenuSelectorVMResourceManagerToggleColumns(UIActionPool *pParent)
     2810        : UIActionToggle(pParent)
     2811    {
     2812        setShortcutContext(Qt::WidgetWithChildrenShortcut);
     2813        setIcon(UIIconPool::iconSetFull(":/cloud_profile_edit_32px.png",          ":/cloud_profile_edit_16px.png",
     2814                                        ":/cloud_profile_edit_disabled_32px.png", ":/cloud_profile_edit_disabled_16px.png"));
     2815    }
     2816
     2817protected:
     2818
     2819    /** Returns shortcut extra-data ID. */
     2820    virtual QString shortcutExtraDataID() const /* override */
     2821    {
     2822        return QString("ToggleVMResourceMonitorColumns");
     2823    }
     2824
     2825    /** Returns default shortcut. */
     2826    virtual QKeySequence defaultShortcut(UIActionPoolType) const /* override */
     2827    {
     2828        return QKeySequence();
     2829    }
     2830
     2831    /** Handles translation event. */
     2832    virtual void retranslateUi() /* override */
     2833    {
     2834        setIconText(QApplication::translate("UIActionPool", "Columns"));
     2835        setName(QApplication::translate("UIActionPool", "Add Remove Columns"));
     2836        //setShortcutScope(QApplication::translate("UIActionPool", "Cloud Profile Manager"));
     2837        setStatusTip(QApplication::translate("UIActionPool", "Open context menu to disable/menu table columns"));
     2838        setToolTip(  QApplication::translate("UIActionPool", "Open context menu to disable/menu table columns")
    27972839                   + (shortcut().isEmpty() ? QString() : QString(" (%1)").arg(shortcut().toString())));
    27982840    }
     
    29352977    m_pool[UIActionIndexST_M_Cloud_S_TryPage] = new UIActionMenuSelectorCloudShowTryPage(this);
    29362978    m_pool[UIActionIndexST_M_Cloud_S_Help] = new UIActionMenuSelectorCloudShowHelp(this);
     2979
     2980    /* VM resource Monitor actions: */
     2981    m_pool[UIActionIndexST_M_VMResourceMonitor_T_Columns] = new UIActionMenuSelectorVMResourceManagerToggleColumns(this);
    29372982
    29382983    /* 'Group' action groups: */
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolManager.h

    r83304 r83439  
    164164    UIActionIndexST_M_Cloud_S_Help,
    165165
     166    /* VM resource Monitor actions: */
     167    UIActionIndexST_M_VMResourceMonitor_T_Columns,
     168
    166169    /* Maximum index: */
    167170    UIActionIndexST_Max
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp

    r83290 r83439  
    657657                    break;
    658658                }
     659                case UIToolType_VMResourceMonitor:
     660                {
     661                    m_pToolBar->addAction(actionPool()->action(UIActionIndexST_M_VMResourceMonitor_T_Columns));
     662                    break;
     663                }
     664
    659665                default:
    660666                    break;
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.cpp

    r83304 r83439  
    452452            case UIToolType_Network:            pItem->reconfigure(tr("Network")); break;
    453453            case UIToolType_Cloud:              pItem->reconfigure(tr("Cloud")); break;
    454             case UIToolType_VMResourceMonitor:  pItem->reconfigure(tr("VM Resource Monitor")); break;
     454            case UIToolType_VMResourceMonitor:  pItem->reconfigure(tr("Resources")); break;
    455455            case UIToolType_Details:            pItem->reconfigure(tr("Details")); break;
    456456            case UIToolType_Snapshots:          pItem->reconfigure(tr("Snapshots")); break;
  • trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.cpp

    r83431 r83439  
    1818/* Qt includes: */
    1919#include <QAbstractTableModel>
     20#include <QCheckBox>
    2021#include <QHeaderView>
    2122#include <QItemDelegate>
     
    118119};
    119120
     121/*********************************************************************************************************************************
     122*   Class UIVMResouceMonitorCheckBox definition.                                                                           *
     123*********************************************************************************************************************************/
     124class UIVMResouceMonitorCheckBox : public QCheckBox
     125{
     126    Q_OBJECT;
     127
     128public:
     129
     130    UIVMResouceMonitorCheckBox(QWidget *parent = 0);
     131    void setData(const QVariant& data);
     132    const QVariant data() const;
     133
     134private:
     135    QVariant m_data;
     136};
    120137
    121138/*********************************************************************************************************************************
     
    286303}
    287304
     305
     306/*********************************************************************************************************************************
     307*   Class UIVMResouceMonitorCheckBox implementation.                                                                             *
     308*********************************************************************************************************************************/
     309
     310UIVMResouceMonitorCheckBox::UIVMResouceMonitorCheckBox(QWidget *parent /* = 0 */)
     311    :QCheckBox(parent)
     312{
     313}
     314void UIVMResouceMonitorCheckBox::setData(const QVariant& data)
     315{
     316    m_data = data;
     317}
     318
     319const QVariant UIVMResouceMonitorCheckBox::data() const
     320{
     321    return m_data;
     322}
    288323
    289324
     
    594629    , m_pToolBar(0)
    595630    , m_pTableView(0)
     631    , m_pColumnSelectionMenu(0)
    596632{
    597633    /* Prepare: */
     
    601637QMenu *UIResourceMonitorWidget::menu() const
    602638{
    603     return m_pActionPool->action(UIActionIndexST_M_NetworkWindow)->menu();
     639    return NULL;
    604640}
    605641
     
    635671}
    636672
     673void UIResourceMonitorWidget::paintEvent(QPaintEvent *pEvent)
     674{
     675    QIWithRetranslateUI<QWidget>::paintEvent(pEvent);
     676}
     677
     678
    637679void UIResourceMonitorWidget::prepare()
    638680{
     
    643685    loadSettings();
    644686    retranslateUi();
     687    prepareActions();
    645688}
    646689
     
    669712    {
    670713        layout()->addWidget(m_pTableView);
    671         m_pTableView->setContextMenuPolicy(Qt::CustomContextMenu);
    672         connect(m_pTableView, &QTableView::customContextMenuRequested,
    673                 this, &UIResourceMonitorWidget::sltCreateContextMenu);
     714        // m_pTableView->setContextMenuPolicy(Qt::CustomContextMenu);
     715        // connect(m_pTableView, &QTableView::customContextMenuRequested,
     716        //         this, &UIResourceMonitorWidget::sltCreateContextMenu);
    674717        m_pProxyModel->setSourceModel(m_pModel);
    675718        m_pTableView->setModel(m_pProxyModel);
     
    694737        m_pProxyModel->setColumnShown(m_columnShown);
    695738    }
     739}
     740
     741void UIResourceMonitorWidget::prepareActions()
     742{
     743    connect(m_pActionPool->action(UIActionIndexST_M_VMResourceMonitor_T_Columns), &QAction::toggled,
     744            this, &UIResourceMonitorWidget::sltToggleColumnSelectionMenu);
     745    m_pColumnSelectionMenu  = new QFrame(this);
     746    m_pColumnSelectionMenu->setAutoFillBackground(true);
     747    m_pColumnSelectionMenu->setFrameStyle(QFrame::Panel | QFrame::Plain);
     748    m_pColumnSelectionMenu->hide();
     749    QVBoxLayout* pLayout = new QVBoxLayout(m_pColumnSelectionMenu);
     750    int iLength = 0;
     751    for (int i = 0; i < VMResouceMonitorColumn_Max; ++i)
     752    {
     753        UIVMResouceMonitorCheckBox* pCheckBox = new UIVMResouceMonitorCheckBox;
     754        pCheckBox->setText(m_columnCaptions[i]);
     755        iLength = m_columnCaptions[i].length() > iLength ? m_columnCaptions[i].length() : iLength;
     756        if (!pCheckBox)
     757            continue;
     758        pLayout->addWidget(pCheckBox);
     759        pCheckBox->setData(i);
     760        if (i < m_columnShown.size())
     761            pCheckBox->setChecked(m_columnShown[i]);
     762        if (i == (int)VMResouceMonitorColumn_Name)
     763            pCheckBox->setEnabled(false);
     764        connect(pCheckBox, &UIVMResouceMonitorCheckBox::toggled, this, &UIResourceMonitorWidget::sltHandleColumnAction);
     765    }
     766    QFontMetrics fontMetrics(m_pColumnSelectionMenu->font());
     767    int iWidth = iLength * fontMetrics.width('x') +
     768        QApplication::style()->pixelMetric(QStyle::PM_IndicatorWidth) +
     769        2 * QApplication::style()->pixelMetric(QStyle::PM_LayoutLeftMargin) +
     770        2 * QApplication::style()->pixelMetric(QStyle::PM_LayoutRightMargin);
     771    m_pColumnSelectionMenu->setFixedWidth(iWidth);
    696772}
    697773
     
    725801}
    726802
    727 void UIResourceMonitorWidget::sltCreateContextMenu(const QPoint &point)
    728 {
    729     if (!m_pTableView)
     803void UIResourceMonitorWidget::sltToggleColumnSelectionMenu(bool fChecked)
     804{
     805    if (!m_pColumnSelectionMenu)
    730806        return;
    731     QMenu menu;
    732     for (int i = 0; i < VMResouceMonitorColumn_Max; ++i)
    733     {
    734         QAction *pAction = menu.addAction(m_columnCaptions[i]);
    735         if (!pAction)
    736             continue;
    737         pAction->setData(i);
    738         pAction->setCheckable(true);
    739         if (i < m_columnShown.size())
    740             pAction->setChecked(m_columnShown[i]);
    741         if (i == (int)VMResouceMonitorColumn_Name)
    742             pAction->setEnabled(false);
    743         connect(pAction, &QAction::triggered, this, &UIResourceMonitorWidget::sltHandleColumnAction);
    744     }
    745     menu.exec(m_pTableView->mapToGlobal(point));
     807    m_pColumnSelectionMenu->setVisible(fChecked);
     808
     809    if (fChecked)
     810    {
     811        m_pColumnSelectionMenu->move(0, 0);
     812        m_pColumnSelectionMenu->raise();
     813        m_pColumnSelectionMenu->resize(400, 400);
     814        m_pColumnSelectionMenu->show();
     815        m_pColumnSelectionMenu->setFocus();
     816    }
     817    else
     818        m_pColumnSelectionMenu->hide();
     819
     820    update();
     821
     822    // QPoint point(0, 0);
     823    // if (!m_pTableView)
     824    //     return;
     825    // if (fChecked)
     826    //     m_pMenu->exec(m_pTableView->mapToGlobal(point));
     827    // else
     828    //     m_pMenu->hide();
    746829}
    747830
    748831void UIResourceMonitorWidget::sltHandleColumnAction(bool fChecked)
    749832{
    750     QAction* pSender = qobject_cast<QAction*>(sender());
     833    UIVMResouceMonitorCheckBox* pSender = qobject_cast<UIVMResouceMonitorCheckBox*>(sender());
    751834    if (!pSender)
    752835        return;
  • trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.h

    r83379 r83439  
    3131/* Forward declarations: */
    3232class QAbstractButton;
     33class QFrame;
    3334class QTableView;
    3435class QTreeWidgetItem;
     
    6566        virtual void resizeEvent(QResizeEvent *pEvent) /* override */;
    6667        virtual void showEvent(QShowEvent *pEvent) /* override */;
     68        virtual void paintEvent(QPaintEvent *pEvent) /* override */;
    6769    /** @} */
    6870
     
    7072
    7173    void sltHandleDataUpdate();
    72     void sltCreateContextMenu(const QPoint &point);
     74    void sltToggleColumnSelectionMenu(bool fChecked);
    7375    void sltHandleColumnAction(bool fChecked);
    7476
     
    8183        void prepareWidgets();
    8284        void prepareToolBar();
     85        void prepareActions();
    8386        void loadSettings();
    8487    /** @} */
     
    100103        QVector<bool>                m_columnShown;
    101104    /** @} */
    102 
     105    QFrame* m_pColumnSelectionMenu;
    103106};
    104107
Note: See TracChangeset for help on using the changeset viewer.

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