VirtualBox

Changeset 85080 in vbox for trunk


Ignore:
Timestamp:
Jul 7, 2020 10:37:23 AM (4 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9722: VirtualBox Manager: Rework group and machine menus to have different contents for local and cloud VMs.

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

Legend:

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

    r84991 r85080  
    32933293    pMenu->clear();
    32943294
    3295     /* Populate Machine-menu: */
    3296     pMenu->addAction(action(UIActionIndexST_M_Group_S_New));
    3297     pMenu->addAction(action(UIActionIndexST_M_Group_S_Add));
    3298     pMenu->addSeparator();
    3299     pMenu->addAction(action(UIActionIndexST_M_Group_S_Rename));
    3300     pMenu->addAction(action(UIActionIndexST_M_Group_S_Remove));
    3301     pMenu->addAction(action(UIActionIndexST_M_Group_M_MoveToGroup));
    3302     pMenu->addSeparator();
    3303     pMenu->addAction(action(UIActionIndexST_M_Group_M_StartOrShow));
    3304     pMenu->addAction(action(UIActionIndexST_M_Group_T_Pause));
    3305     pMenu->addAction(action(UIActionIndexST_M_Group_S_Reset));
    3306     pMenu->addMenu(action(UIActionIndexST_M_Group_M_Close)->menu());
    3307     pMenu->addSeparator();
    3308     pMenu->addMenu(action(UIActionIndexST_M_Group_M_Tools)->menu());
    3309     pMenu->addSeparator();
    3310     pMenu->addAction(action(UIActionIndexST_M_Group_S_Discard));
    3311     pMenu->addAction(action(UIActionIndexST_M_Group_S_ShowLogDialog));
    3312     pMenu->addAction(action(UIActionIndexST_M_Group_S_Refresh));
    3313     pMenu->addSeparator();
    3314     pMenu->addAction(action(UIActionIndexST_M_Group_S_ShowInFileManager));
    3315     pMenu->addAction(action(UIActionIndexST_M_Group_S_CreateShortcut));
    3316     pMenu->addSeparator();
    3317     pMenu->addAction(action(UIActionIndexST_M_Group_S_Sort));
    3318 
    3319     /* Mark menu as valid: */
    3320     m_invalidations.remove(UIActionIndexST_M_Group);
     3295    /* This menu always remains invalid.. */
    33213296}
    33223297
     
    33293304    pMenu->clear();
    33303305
    3331     /* Populate Machine-menu: */
    3332     pMenu->addAction(action(UIActionIndexST_M_Machine_S_New));
    3333     pMenu->addAction(action(UIActionIndexST_M_Machine_S_Add));
    3334     pMenu->addSeparator();
    3335     pMenu->addAction(action(UIActionIndexST_M_Machine_S_Settings));
    3336     pMenu->addAction(action(UIActionIndexST_M_Machine_S_Clone));
    3337     pMenu->addAction(action(UIActionIndexST_M_Machine_S_Move));
    3338     pMenu->addAction(action(UIActionIndexST_M_Machine_S_ExportToOCI));
    3339     pMenu->addAction(action(UIActionIndexST_M_Machine_S_Remove));
    3340     pMenu->addAction(action(UIActionIndexST_M_Machine_M_MoveToGroup));
    3341     pMenu->addSeparator();
    3342     pMenu->addAction(action(UIActionIndexST_M_Machine_M_StartOrShow));
    3343     pMenu->addAction(action(UIActionIndexST_M_Machine_T_Pause));
    3344     pMenu->addAction(action(UIActionIndexST_M_Machine_S_Reset));
    3345     pMenu->addMenu(action(UIActionIndexST_M_Machine_M_Close)->menu());
    3346     pMenu->addSeparator();
    3347     pMenu->addMenu(action(UIActionIndexST_M_Machine_M_Tools)->menu());
    3348     pMenu->addSeparator();
    3349     pMenu->addAction(action(UIActionIndexST_M_Machine_S_Discard));
    3350     pMenu->addAction(action(UIActionIndexST_M_Machine_S_ShowLogDialog));
    3351     pMenu->addAction(action(UIActionIndexST_M_Machine_S_Refresh));
    3352     pMenu->addSeparator();
    3353     pMenu->addAction(action(UIActionIndexST_M_Machine_S_ShowInFileManager));
    3354     pMenu->addAction(action(UIActionIndexST_M_Machine_S_CreateShortcut));
    3355     pMenu->addSeparator();
    3356     pMenu->addAction(action(UIActionIndexST_M_Machine_S_SortParent));
    3357     pMenu->addAction(action(UIActionIndexST_M_Machine_T_Search));
    3358 
    3359     /* Mark menu as valid: */
    3360     m_invalidations.remove(UIActionIndexST_M_Machine);
     3306    /* This menu always remains invalid.. */
    33613307}
    33623308
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp

    r85039 r85080  
    15081508
    15091509    /* Prepare menu update-handlers: */
     1510    m_menuUpdateHandlers[UIActionIndexST_M_Group] = &UIVirtualBoxManager::updateMenuGroup;
     1511    m_menuUpdateHandlers[UIActionIndexST_M_Machine] = &UIVirtualBoxManager::updateMenuMachine;
    15101512    m_menuUpdateHandlers[UIActionIndexST_M_Group_M_MoveToGroup] = &UIVirtualBoxManager::updateMenuGroupMoveToGroup;
    15111513    m_menuUpdateHandlers[UIActionIndexST_M_Group_M_Close] = &UIVirtualBoxManager::updateMenuGroupClose;
     
    19781980}
    19791981
     1982void UIVirtualBoxManager::updateMenuGroup(QMenu *pMenu)
     1983{
     1984    /* For single local group selected: */
     1985    if (isSingleLocalGroupSelected())
     1986    {
     1987        /* Populate Group-menu: */
     1988        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_New));
     1989        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Add));
     1990        pMenu->addSeparator();
     1991        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Rename));
     1992        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Remove));
     1993        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_M_MoveToGroup));
     1994        pMenu->addSeparator();
     1995        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_M_StartOrShow));
     1996        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_T_Pause));
     1997        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Reset));
     1998        pMenu->addMenu(actionPool()->action(UIActionIndexST_M_Group_M_Close)->menu());
     1999        pMenu->addSeparator();
     2000        pMenu->addMenu(actionPool()->action(UIActionIndexST_M_Group_M_Tools)->menu());
     2001        pMenu->addSeparator();
     2002        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Discard));
     2003        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_ShowLogDialog));
     2004        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Refresh));
     2005        pMenu->addSeparator();
     2006        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_ShowInFileManager));
     2007        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_CreateShortcut));
     2008        pMenu->addSeparator();
     2009        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Sort));
     2010    }
     2011    else
     2012    {
     2013        /* Populate Group-menu: */
     2014        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_New));
     2015        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Add));
     2016        pMenu->addSeparator();
     2017        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_M_StartOrShow));
     2018        pMenu->addMenu(actionPool()->action(UIActionIndexST_M_Group_M_Close)->menu());
     2019        pMenu->addSeparator();
     2020        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Discard));
     2021        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Refresh));
     2022        pMenu->addSeparator();
     2023        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Sort));
     2024    }
     2025}
     2026
     2027void UIVirtualBoxManager::updateMenuMachine(QMenu *pMenu)
     2028{
     2029    /* Get first selected item: */
     2030    UIVirtualMachineItem *pItem = currentItem();
     2031    AssertPtrReturnVoid(pItem);
     2032
     2033    /* For local machine: */
     2034    if (pItem->itemType() == UIVirtualMachineItemType_Local)
     2035    {
     2036        /* Populate Machine-menu: */
     2037        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_New));
     2038        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Add));
     2039        pMenu->addSeparator();
     2040        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Settings));
     2041        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Clone));
     2042        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Move));
     2043        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_ExportToOCI));
     2044        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Remove));
     2045        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_M_MoveToGroup));
     2046        pMenu->addSeparator();
     2047        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_M_StartOrShow));
     2048        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_T_Pause));
     2049        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Reset));
     2050        pMenu->addMenu(actionPool()->action(UIActionIndexST_M_Machine_M_Close)->menu());
     2051        pMenu->addSeparator();
     2052        pMenu->addMenu(actionPool()->action(UIActionIndexST_M_Machine_M_Tools)->menu());
     2053        pMenu->addSeparator();
     2054        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Discard));
     2055        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_ShowLogDialog));
     2056        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Refresh));
     2057        pMenu->addSeparator();
     2058        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_ShowInFileManager));
     2059        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_CreateShortcut));
     2060        pMenu->addSeparator();
     2061        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_SortParent));
     2062        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_T_Search));
     2063    }
     2064    else
     2065    {
     2066        /* Populate Machine-menu: */
     2067        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_New));
     2068        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Add));
     2069        pMenu->addSeparator();
     2070        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Settings));
     2071        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Remove));
     2072        pMenu->addSeparator();
     2073        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_M_StartOrShow));
     2074        pMenu->addMenu(actionPool()->action(UIActionIndexST_M_Machine_M_Close)->menu());
     2075        pMenu->addSeparator();
     2076        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Discard));
     2077        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Refresh));
     2078        pMenu->addSeparator();
     2079        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_SortParent));
     2080        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_T_Search));
     2081    }
     2082}
     2083
    19802084void UIVirtualBoxManager::updateMenuGroupMoveToGroup(QMenu *pMenu)
    19812085{
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.h

    r84892 r85080  
    348348    /** @name Action update stuff.
    349349      * @{ */
     350        /** Updates 'Group' menu. */
     351        void updateMenuGroup(QMenu *pMenu);
     352        /** Updates 'Machine' menu. */
     353        void updateMenuMachine(QMenu *pMenu);
    350354        /** Updates 'Group' : 'Move to Group' menu. */
    351355        void updateMenuGroupMoveToGroup(QMenu *pMenu);
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp

    r85038 r85080  
    12411241{
    12421242    /* Context menu for global(s): */
    1243     m_menus[UIChooserNodeType_Global] = new QMenu;
    1244     if (QMenu *pMenuGlobal = m_menus.value(UIChooserNodeType_Global))
     1243    m_localMenus[UIChooserNodeType_Global] = new QMenu;
     1244    if (QMenu *pMenuGlobal = m_localMenus.value(UIChooserNodeType_Global))
    12451245    {
    12461246        /* Check if Ext Pack is ready, some of actions my depend on it: */
     
    12871287    }
    12881288
    1289     /* Context menu for group(s): */
    1290     m_menus[UIChooserNodeType_Group] = new QMenu;
    1291     if (QMenu *pMenuGroup = m_menus.value(UIChooserNodeType_Group))
     1289    /* Context menu for local group(s): */
     1290    m_localMenus[UIChooserNodeType_Group] = new QMenu;
     1291    if (QMenu *pMenuGroup = m_localMenus.value(UIChooserNodeType_Group))
    12921292    {
    12931293        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_New));
     
    13131313    }
    13141314
    1315     /* Context menu for machine(s): */
    1316     m_menus[UIChooserNodeType_Machine] = new QMenu;
    1317     if (QMenu *pMenuMachine = m_menus.value(UIChooserNodeType_Machine))
     1315    /* Context menu for local machine(s): */
     1316    m_localMenus[UIChooserNodeType_Machine] = new QMenu;
     1317    if (QMenu *pMenuMachine = m_localMenus.value(UIChooserNodeType_Machine))
    13181318    {
    13191319        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Settings));
     
    13391339        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_T_Search));
    13401340    }
     1341
     1342    /* Context menu for cloud group(s): */
     1343    m_cloudMenus[UIChooserNodeType_Group] = new QMenu;
     1344    if (QMenu *pMenuGroup = m_cloudMenus.value(UIChooserNodeType_Group))
     1345    {
     1346        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_New));
     1347        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Add));
     1348        pMenuGroup->addSeparator();
     1349        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_M_StartOrShow));
     1350        pMenuGroup->addMenu(actionPool()->action(UIActionIndexST_M_Group_M_Close)->menu());
     1351        pMenuGroup->addSeparator();
     1352        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Discard));
     1353        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Refresh));
     1354        pMenuGroup->addSeparator();
     1355        pMenuGroup->addAction(actionPool()->action(UIActionIndexST_M_Group_S_Sort));
     1356    }
     1357
     1358    /* Context menu for cloud machine(s): */
     1359    m_cloudMenus[UIChooserNodeType_Machine] = new QMenu;
     1360    if (QMenu *pMenuMachine = m_cloudMenus.value(UIChooserNodeType_Machine))
     1361    {
     1362        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Settings));
     1363        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Remove));
     1364        pMenuMachine->addSeparator();
     1365        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_M_StartOrShow));
     1366        pMenuMachine->addMenu(actionPool()->action(UIActionIndexST_M_Machine_M_Close)->menu());
     1367        pMenuMachine->addSeparator();
     1368        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Discard));
     1369        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Refresh));
     1370        pMenuMachine->addSeparator();
     1371        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_SortParent));
     1372        pMenuMachine->addAction(actionPool()->action(UIActionIndexST_M_Machine_T_Search));
     1373    }
    13411374}
    13421375
     
    13871420void UIChooserModel::cleanupContextMenu()
    13881421{
    1389     qDeleteAll(m_menus);
    1390     m_menus.clear();
     1422    qDeleteAll(m_localMenus);
     1423    m_localMenus.clear();
     1424    qDeleteAll(m_cloudMenus);
     1425    m_cloudMenus.clear();
    13911426}
    13921427
     
    14191454                    {
    14201455                        /* Global context menu for all global item cases: */
    1421                         m_menus.value(UIChooserNodeType_Global)->exec(pEvent->screenPos());
     1456                        m_localMenus.value(UIChooserNodeType_Global)->exec(pEvent->screenPos());
    14221457                        break;
    14231458                    }
     
    14251460                    {
    14261461                        /* Get group-item: */
    1427                         UIChooserItem *pGroupItem = qgraphicsitem_cast<UIChooserItemGroup*>(pItem);
     1462                        UIChooserItemGroup *pGroupItem = qgraphicsitem_cast<UIChooserItemGroup*>(pItem);
    14281463                        /* Don't show context menu for root-item: */
    14291464                        if (pGroupItem->isRoot())
     
    14331468                        {
    14341469                            /* Group context menu in that case: */
    1435                             m_menus.value(UIChooserNodeType_Group)->exec(pEvent->screenPos());
     1470                            if (pGroupItem->groupType() == UIChooserNodeGroupType_Local)
     1471                                m_localMenus.value(UIChooserNodeType_Group)->exec(pEvent->screenPos());
     1472                            else if (   pGroupItem->groupType() == UIChooserNodeGroupType_Provider
     1473                                     || pGroupItem->groupType() == UIChooserNodeGroupType_Profile)
     1474                                m_cloudMenus.value(UIChooserNodeType_Group)->exec(pEvent->screenPos());
    14361475                            break;
    14371476                        }
     
    14401479                    case UIChooserNodeType_Machine:
    14411480                    {
     1481                        /* Get machine-item: */
     1482                        UIChooserItemMachine *pMachineItem = qgraphicsitem_cast<UIChooserItemMachine*>(pItem);
    14421483                        /* Machine context menu for other Group/Machine cases: */
    1443                         m_menus.value(UIChooserNodeType_Machine)->exec(pEvent->screenPos());
     1484                        if (pMachineItem->cacheType() == UIVirtualMachineItemType_Local)
     1485                            m_localMenus.value(UIChooserNodeType_Machine)->exec(pEvent->screenPos());
     1486                        else if (pMachineItem->cacheType() == UIVirtualMachineItemType_CloudReal)
     1487                            m_cloudMenus.value(UIChooserNodeType_Machine)->exec(pEvent->screenPos());
    14441488                        break;
    14451489                    }
     
    14611505                    {
    14621506                        /* Global context menu for all global item cases: */
    1463                         m_menus.value(UIChooserNodeType_Global)->exec(pEvent->screenPos());
     1507                        m_localMenus.value(UIChooserNodeType_Global)->exec(pEvent->screenPos());
    14641508                        break;
    14651509                    }
    14661510                    case UIChooserNodeType_Group:
    14671511                    {
     1512                        /* Get group-item: */
     1513                        UIChooserItemGroup *pGroupItem = qgraphicsitem_cast<UIChooserItemGroup*>(pItem);
    14681514                        /* Make sure we have group-item selected exclusively: */
    1469                         if (selectedItems().size() == 1)
     1515                        if (selectedItems().contains(pGroupItem) && selectedItems().size() == 1)
    14701516                        {
    14711517                            /* Group context menu in that case: */
    1472                             m_menus.value(UIChooserNodeType_Group)->exec(pEvent->screenPos());
     1518                            if (pGroupItem->groupType() == UIChooserNodeGroupType_Local)
     1519                                m_localMenus.value(UIChooserNodeType_Group)->exec(pEvent->screenPos());
     1520                            else if (   pGroupItem->groupType() == UIChooserNodeGroupType_Provider
     1521                                     || pGroupItem->groupType() == UIChooserNodeGroupType_Profile)
     1522                                m_cloudMenus.value(UIChooserNodeType_Group)->exec(pEvent->screenPos());
    14731523                            break;
    14741524                        }
     
    14771527                    case UIChooserNodeType_Machine:
    14781528                    {
     1529                        /* Get machine-item: */
     1530                        UIChooserItemMachine *pMachineItem = qgraphicsitem_cast<UIChooserItemMachine*>(pItem);
    14791531                        /* Machine context menu for other Group/Machine cases: */
    1480                         m_menus.value(UIChooserNodeType_Machine)->exec(pEvent->screenPos());
     1532                        if (pMachineItem->cacheType() == UIVirtualMachineItemType_Local)
     1533                            m_localMenus.value(UIChooserNodeType_Machine)->exec(pEvent->screenPos());
     1534                        else if (pMachineItem->cacheType() == UIVirtualMachineItemType_CloudReal)
     1535                            m_cloudMenus.value(UIChooserNodeType_Machine)->exec(pEvent->screenPos());
    14811536                        break;
    14821537                    }
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h

    r85038 r85080  
    379379        UIChooserHandlerKeyboard *m_pKeyboardHandler;
    380380
    381         /** Holds the map of context-menu instances. */
    382         QMap<UIChooserNodeType, QMenu*>  m_menus;
     381        /** Holds the map of local context-menu instances. */
     382        QMap<UIChooserNodeType, QMenu*>  m_localMenus;
     383        /** Holds the map of cloud context-menu instances. */
     384        QMap<UIChooserNodeType, QMenu*>  m_cloudMenus;
    383385    /** @} */
    384386
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