VirtualBox

Ignore:
Timestamp:
Feb 19, 2018 4:14:36 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
120921
Message:

FE/Qt: bugref:6699 Adding expand and collapse to the tree widget

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIInformationGuestSession.cpp

    r71049 r71058  
    7474    void contextMenuEvent(QContextMenuEvent *pEvent) /* override */
    7575    {
     76        QMenu *menu = new QMenu(this);
    7677        QList<QTreeWidgetItem *> selectedList = selectedItems();
    77         if (selectedList.isEmpty())
    78             return;
    79         /* Always use the 0th item even if we have a multiple selection. */
    80         UIGuestSessionTreeItem *sessionTreeItem = dynamic_cast<UIGuestSessionTreeItem*>(selectedList[0]);
     78
     79        UIGuestSessionTreeItem *sessionTreeItem = 0;
     80        if (!selectedList.isEmpty())
     81            sessionTreeItem = dynamic_cast<UIGuestSessionTreeItem*>(selectedList[0]);
     82        QAction *pSessionCloseAction = 0;
     83
    8184        /* Create a guest session related context menu */
    8285        if (sessionTreeItem)
    8386        {
    84             QMenu *menu = new QMenu(this);
    85             QAction *pAction = menu->addAction(UIVMInformationDialog::tr("Close Session"));
    86 
    87             if (pAction)
    88                 connect(pAction, &QAction::triggered,
     87            pSessionCloseAction = menu->addAction(UIVMInformationDialog::tr("Close Session"));
     88            if (pSessionCloseAction)
     89                connect(pSessionCloseAction, &QAction::triggered,
    8990                        this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
    90 
    91             menu->exec(pEvent->globalPos());
    92 
    93             if (pAction)
    94                 disconnect(pAction, &QAction::triggered,
     91        }
     92        UIGuestProcessTreeItem *processTreeItem = 0;
     93        if (!selectedList.isEmpty())
     94            processTreeItem = dynamic_cast<UIGuestProcessTreeItem*>(selectedList[0]);
     95        QAction *pProcessTerminateAction = 0;
     96        if (processTreeItem)
     97        {
     98            pProcessTerminateAction = menu->addAction(UIVMInformationDialog::tr("Terminate Process"));
     99            if (pProcessTerminateAction)
     100                connect(pProcessTerminateAction, &QAction::triggered,
    95101                        this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
    96 
    97             delete menu;
    98             return;
    99         }
    100         UIGuestProcessTreeItem *processTreeItem = dynamic_cast<UIGuestProcessTreeItem*>(selectedList[0]);
    101         if (!processTreeItem)
    102             return;
    103         /* Create a guest process tree item */
    104         QMenu *menu = new QMenu(this);
    105         QAction *pAction = menu->addAction(UIVMInformationDialog::tr("Terminate Process"));
    106         if (pAction)
    107             connect(pAction, &QAction::triggered,
    108                     this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
     102        }
     103        if (pProcessTerminateAction || pSessionCloseAction)
     104            menu->addSeparator();
     105        // Add actions to expand/collapse all tree items
     106        QAction *pExpandAllAction = menu->addAction(UIVMInformationDialog::tr("Expand All"));
     107        if (pExpandAllAction)
     108            connect(pExpandAllAction, &QAction::triggered,
     109                    this, &UIGuestControlTreeWidget::sltExpandAll);
     110        QAction *pCollapseAllAction = menu->addAction(UIVMInformationDialog::tr("Collapse All"));
     111        if (pCollapseAllAction)
     112            connect(pCollapseAllAction, &QAction::triggered,
     113                    this, &UIGuestControlTreeWidget::sltCollapseAll);
     114
    109115        menu->exec(pEvent->globalPos());
    110116
    111         if (pAction)
    112             disconnect(pAction, &QAction::triggered,
    113                     this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
     117        if (pSessionCloseAction)
     118            disconnect(pSessionCloseAction, &QAction::triggered,
     119                       this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
     120        if (pProcessTerminateAction)
     121            disconnect(pProcessTerminateAction, &QAction::triggered,
     122                       this, &UIGuestControlTreeWidget::sigCloseSessionOrProcess);
     123
     124        if (pExpandAllAction)
     125            disconnect(pExpandAllAction, &QAction::triggered,
     126                    this, &UIGuestControlTreeWidget::sltExpandAll);
     127
     128        if (pCollapseAllAction)
     129            disconnect(pCollapseAllAction, &QAction::triggered,
     130                    this, &UIGuestControlTreeWidget::sltCollapseAll);
     131
    114132        delete menu;
    115 
     133    }
     134
     135private slots:
     136
     137    void sltExpandAll(bool bExpand)
     138    {
     139        expandCollapseAll(true);
     140    }
     141
     142    void sltCollapseAll()
     143    {
     144        expandCollapseAll(false);
     145    }
     146
     147    void expandCollapseAll(bool bFlag)
     148    {
     149        for(int i = 0; i < topLevelItemCount(); ++i)
     150        {
     151            if (!topLevelItem(i))
     152                break;
     153            topLevelItem(i)->setExpanded(bFlag);
     154            for (int j = 0; j < topLevelItem(i)->childCount(); ++j)
     155            {
     156                if (topLevelItem(i)->child(j))
     157                {
     158                    topLevelItem(i)->child(j)->setExpanded(bFlag);
     159                }
     160            }
     161        }
    116162    }
    117163
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