VirtualBox

Changeset 85393 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Jul 20, 2020 3:31:24 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
139423
Message:

FE/Qt: bugref:9722: VirtualBox Manager: Finally we can enable possibility to register external terminal apps and edit their profiles, s.a. r139414.

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

Legend:

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

    r85389 r85393  
    13841384};
    13851385
     1386/** Simple action extension, used as 'Perform Configure Applications' action class. */
     1387class UIActionSimpleSelectorConsolePerformConfigureApplications : public UIActionSimple
     1388{
     1389    Q_OBJECT;
     1390
     1391public:
     1392
     1393    /** Constructs action passing @a pParent to the base-class. */
     1394    UIActionSimpleSelectorConsolePerformConfigureApplications(UIActionPool *pParent)
     1395        : UIActionSimple(pParent,
     1396                         ":/cloud_machine_console_configure_external_terminal_16px.png",
     1397                         ":/cloud_machine_console_configure_external_terminal_disabled_16px.png")
     1398    {}
     1399
     1400protected:
     1401
     1402    /** Returns shortcut extra-data ID. */
     1403    virtual QString shortcutExtraDataID() const /* override */
     1404    {
     1405        return QString("ConfigureConsoleApplications");
     1406    }
     1407
     1408    /** Handles translation event. */
     1409    virtual void retranslateUi() /* override */
     1410    {
     1411        setName(QApplication::translate("UIActionPool", "&Configure Console Applications"));
     1412        setStatusTip(QApplication::translate("UIActionPool", "Open configuration dialog to edit console application settings"));
     1413    }
     1414};
     1415
    13861416/** Simple action extension, used as 'Copy Command' action class. */
    13871417class UIActionSimpleSelectorConsolePerformCopyCommand : public UIActionSimple
     
    30223052        : UIActionSimple(pParent,
    30233053                         ":/cloud_console_application_add_32px.png",          ":/cloud_console_application_add_16px.png",
    3024                          ":/cloud_console_application_add_disabled_32px.png", ":/cloud_console_application_add_disabled_16px.png") /// @todo use proper icons
     3054                         ":/cloud_console_application_add_disabled_32px.png", ":/cloud_console_application_add_disabled_16px.png")
    30253055    {
    30263056        setShortcutContext(Qt::WidgetWithChildrenShortcut);
     
    30573087        : UIActionSimple(pParent,
    30583088                         ":/cloud_console_application_remove_32px.png",          ":/cloud_console_application_remove_16px.png",
    3059                          ":/cloud_console_application_remove_disabled_32px.png", ":/cloud_console_application_remove_disabled_16px.png") /// @todo use proper icons
     3089                         ":/cloud_console_application_remove_disabled_32px.png", ":/cloud_console_application_remove_disabled_16px.png")
    30603090    {
    30613091        setShortcutContext(Qt::WidgetWithChildrenShortcut);
     
    30923122        : UIActionSimple(pParent,
    30933123                         ":/cloud_console_profile_add_32px.png",          ":/cloud_console_profile_add_16px.png",
    3094                          ":/cloud_console_profile_add_disabled_32px.png", ":/cloud_console_profile_add_disabled_16px.png") /// @todo use proper icons
     3124                         ":/cloud_console_profile_add_disabled_32px.png", ":/cloud_console_profile_add_disabled_16px.png")
    30953125    {
    30963126        setShortcutContext(Qt::WidgetWithChildrenShortcut);
     
    31273157        : UIActionSimple(pParent,
    31283158                         ":/cloud_console_profile_remove_32px.png",          ":/cloud_console_profile_remove_16px.png",
    3129                          ":/cloud_console_profile_remove_disabled_32px.png", ":/cloud_console_profile_remove_disabled_16px.png") /// @todo use proper icons
     3159                         ":/cloud_console_profile_remove_disabled_32px.png", ":/cloud_console_profile_remove_disabled_16px.png")
    31303160    {
    31313161        setShortcutContext(Qt::WidgetWithChildrenShortcut);
     
    31633193    {
    31643194        setShortcutContext(Qt::WidgetWithChildrenShortcut);
     3195        /// @todo use icons with check-boxes
    31653196        setIcon(UIIconPool::iconSetFull(":/cloud_console_edit_32px.png",          ":/cloud_console_edit_16px.png",
    3166                                         ":/cloud_console_edit_disabled_32px.png", ":/cloud_console_edit_disabled_16px.png")); /// @todo use proper icons with check-boxes
     3197                                        ":/cloud_console_edit_disabled_32px.png", ":/cloud_console_edit_disabled_16px.png"));
    31673198    }
    31683199
     
    32933324    m_pool[UIActionIndexST_M_Group_M_Console_S_CreateConnection] = new UIActionSimpleSelectorConsolePerformCreateConnection(this);
    32943325    m_pool[UIActionIndexST_M_Group_M_Console_S_DeleteConnection] = new UIActionSimpleSelectorConsolePerformDeleteConnection(this);
     3326    m_pool[UIActionIndexST_M_Group_M_Console_S_ConfigureApplications] = new UIActionSimpleSelectorConsolePerformConfigureApplications(this);
    32953327    m_pool[UIActionIndexST_M_Group_M_Close] = new UIActionMenuSelectorClose(this);
    32963328    m_pool[UIActionIndexST_M_Group_M_Close_S_Detach] = new UIActionSimpleSelectorClosePerformDetach(this);
     
    33313363    m_pool[UIActionIndexST_M_Machine_M_Console_S_CopyCommandSerial] = new UIActionSimpleSelectorConsolePerformCopyCommand(this, true);
    33323364    m_pool[UIActionIndexST_M_Machine_M_Console_S_CopyCommandVNC] = new UIActionSimpleSelectorConsolePerformCopyCommand(this, false);
     3365    m_pool[UIActionIndexST_M_Machine_M_Console_S_ConfigureApplications] = new UIActionSimpleSelectorConsolePerformConfigureApplications(this);
    33333366    m_pool[UIActionIndexST_M_Machine_M_Close] = new UIActionMenuSelectorClose(this);
    33343367    m_pool[UIActionIndexST_M_Machine_M_Close_S_Detach] = new UIActionSimpleSelectorClosePerformDetach(this);
     
    41254158                    << action(UIActionIndexST_M_Group_M_Console_S_CreateConnection)
    41264159                    << action(UIActionIndexST_M_Group_M_Console_S_DeleteConnection)
     4160                    << action(UIActionIndexST_M_Group_M_Console_S_ConfigureApplications)
    41274161                    // << action(UIActionIndexST_M_Group_M_Close_S_Detach)
    41284162                    << action(UIActionIndexST_M_Group_M_Close_S_SaveState)
     
    41614195                    << action(UIActionIndexST_M_Machine_M_Console_S_CopyCommandSerial)
    41624196                    << action(UIActionIndexST_M_Machine_M_Console_S_CopyCommandVNC)
     4197                    << action(UIActionIndexST_M_Machine_M_Console_S_ConfigureApplications)
    41634198                    // << action(UIActionIndexST_M_Machine_M_Close_S_Detach)
    41644199                    << action(UIActionIndexST_M_Machine_M_Close_S_SaveState)
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolManager.h

    r85389 r85393  
    7373    UIActionIndexST_M_Group_M_Console_S_CreateConnection,
    7474    UIActionIndexST_M_Group_M_Console_S_DeleteConnection,
     75    UIActionIndexST_M_Group_M_Console_S_ConfigureApplications,
    7576    UIActionIndexST_M_Group_M_Close,
    7677    UIActionIndexST_M_Group_M_Close_S_Detach,
     
    111112    UIActionIndexST_M_Machine_M_Console_S_CopyCommandSerial,
    112113    UIActionIndexST_M_Machine_M_Console_S_CopyCommandVNC,
     114    UIActionIndexST_M_Machine_M_Console_S_ConfigureApplications,
    113115    UIActionIndexST_M_Machine_M_Close,
    114116    UIActionIndexST_M_Machine_M_Close_S_Detach,
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp

    r85388 r85393  
    2121#include <QGuiApplication>
    2222#include <QMenuBar>
     23#include <QProcess>
    2324#include <QPushButton>
    2425#include <QStandardPaths>
     
    2930#include "QIFileDialog.h"
    3031#include "UIActionPoolManager.h"
     32#include "UICloudConsoleManager.h"
    3133#include "UICloudMachineSettingsDialog.h"
    3234#include "UICloudNetworkingStuff.h"
     
    261263    , m_pManagerHostNetwork(0)
    262264    , m_pManagerCloudProfile(0)
     265    , m_pManagerCloudConsole(0)
    263266{
    264267    s_pInstance = this;
     
    611614}
    612615
     616void UIVirtualBoxManager::sltOpenCloudConsoleManagerWindow()
     617{
     618    /* Create instance if not yet created: */
     619    if (!m_pManagerCloudConsole)
     620    {
     621        UICloudConsoleManagerFactory(m_pActionPool).prepare(m_pManagerCloudConsole, this);
     622        connect(m_pManagerCloudConsole, &QIManagerDialog::sigClose,
     623                this, &UIVirtualBoxManager::sltCloseCloudConsoleManagerWindow);
     624    }
     625
     626    /* Show instance: */
     627    m_pManagerCloudConsole->show();
     628    m_pManagerCloudConsole->setWindowState(m_pManagerCloudConsole->windowState() & ~Qt::WindowMinimized);
     629    m_pManagerCloudConsole->activateWindow();
     630}
     631
     632void UIVirtualBoxManager::sltCloseCloudConsoleManagerWindow()
     633{
     634    /* Destroy instance if still exists: */
     635    if (m_pManagerCloudConsole)
     636        UIHostNetworkManagerFactory().cleanup(m_pManagerCloudConsole);
     637}
     638
    613639void UIVirtualBoxManager::sltOpenImportApplianceWizard(const QString &strFileName /* = QString() */)
    614640{
     
    12061232    AssertPtrReturnVoid(pClipboard);
    12071233    pClipboard->setText(pAction->property("fingerprint").toString());
     1234}
     1235
     1236void UIVirtualBoxManager::sltExecuteExternalApplication()
     1237{
     1238    /* Acquire passed path and argument: */
     1239    QAction *pAction = qobject_cast<QAction*>(sender());
     1240    AssertMsgReturnVoid(pAction, ("This slot should be called by action only!\n"));
     1241    const QString strPath = pAction->property("path").toString();
     1242    QStringList arguments = QStringList() << pAction->property("arguments").toString();
     1243
     1244    /* Get current-item: */
     1245    UIVirtualMachineItem *pItem = currentItem();
     1246    AssertMsgReturnVoid(pItem, ("Current item should be selected!\n"));
     1247    UIVirtualMachineItemCloud *pCloudItem = pItem->toCloud();
     1248    AssertPtrReturnVoid(pCloudItem);
     1249
     1250    /* Add serial command to arguments: */
     1251    const CCloudMachine comMachine = pCloudItem->machine();
     1252#ifdef VBOX_WS_WIN
     1253    arguments << comMachine.GetSerialConsoleCommandWindows();
     1254#else
     1255    arguments << comMachine.GetSerialConsoleCommand();
     1256#endif
     1257
     1258    /* Execute console application finally: */
     1259    QProcess::startDetached(strPath, arguments);
    12081260}
    12091261
     
    20852137    connect(actionPool()->action(UIActionIndexST_M_Group_M_Console_S_DeleteConnection), &UIAction::triggered,
    20862138            this, &UIVirtualBoxManager::sltPerformDeleteConsoleConnectionForGroup);
     2139    connect(actionPool()->action(UIActionIndexST_M_Group_M_Console_S_ConfigureApplications), &UIAction::triggered,
     2140            this, &UIVirtualBoxManager::sltOpenCloudConsoleManagerWindow);
    20872141
    20882142    /* 'Machine/Console' menu connections: */
     
    20952149    connect(actionPool()->action(UIActionIndexST_M_Machine_M_Console_S_CopyCommandVNC), &UIAction::triggered,
    20962150            this, &UIVirtualBoxManager::sltPerformCopyCommandVNC);
     2151    connect(actionPool()->action(UIActionIndexST_M_Machine_M_Console_S_ConfigureApplications), &UIAction::triggered,
     2152            this, &UIVirtualBoxManager::sltOpenCloudConsoleManagerWindow);
    20972153
    20982154    /* 'Group/Close' menu connections: */
     
    21812237    sltCloseHostNetworkManagerWindow();
    21822238    sltCloseCloudProfileManagerWindow();
     2239    sltCloseCloudConsoleManagerWindow();
    21832240
    21842241    /* Save settings: */
     
    25002557    pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_M_Console_S_CreateConnection));
    25012558    pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_M_Console_S_DeleteConnection));
     2559    pMenu->addSeparator();
     2560    pMenu->addAction(actionPool()->action(UIActionIndexST_M_Group_M_Console_S_ConfigureApplications));
    25022561}
    25032562
     
    25592618        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_M_Console_S_CopyCommandSerial));
    25602619        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_M_Console_S_CopyCommandVNC));
     2620        pMenu->addSeparator();
     2621
     2622        /* Terminal application/profile action list: */
     2623        const QStringList restrictions = gEDataManager->cloudConsoleManagerRestrictions();
     2624        foreach (const QString strApplicationId, gEDataManager->cloudConsoleManagerApplications())
     2625        {
     2626            const QString strApplicationDefinition = QString("/%1").arg(strApplicationId);
     2627            if (restrictions.contains(strApplicationDefinition))
     2628                continue;
     2629            const QString strApplicationOptions = gEDataManager->cloudConsoleManagerApplication(strApplicationId);
     2630            const QStringList applicationValues = strApplicationOptions.split(',');
     2631            foreach (const QString strProfileId, gEDataManager->cloudConsoleManagerProfiles(strApplicationId))
     2632            {
     2633                const QString strProfileDefinition = QString("/%1/%2").arg(strApplicationId, strProfileId);
     2634                if (restrictions.contains(strProfileDefinition))
     2635                    continue;
     2636                const QString strProfileOptions = gEDataManager->cloudConsoleManagerProfile(strApplicationId, strProfileId);
     2637                const QStringList profileValues = strProfileOptions.split(',');
     2638                QAction *pAction = pMenu->addAction(QApplication::translate("UIActionPool", "%1 (%2)")
     2639                                                        .arg(applicationValues.value(0), profileValues.value(0)),
     2640                                                    this, &UIVirtualBoxManager::sltExecuteExternalApplication);
     2641                pAction->setProperty("path", applicationValues.value(1));
     2642                pAction->setProperty("arguments", profileValues.value(1));
     2643            }
     2644        }
     2645        /* Terminal application configuration tool: */
     2646        pMenu->addAction(actionPool()->action(UIActionIndexST_M_Machine_M_Console_S_ConfigureApplications));
    25612647        pMenu->addSeparator();
    25622648
     
    26902776    actionPool()->action(UIActionIndexST_M_Group_M_Console_S_CreateConnection)->setEnabled(isActionEnabled(UIActionIndexST_M_Group_M_Console_S_CreateConnection, items));
    26912777    actionPool()->action(UIActionIndexST_M_Group_M_Console_S_DeleteConnection)->setEnabled(isActionEnabled(UIActionIndexST_M_Group_M_Console_S_DeleteConnection, items));
     2778    actionPool()->action(UIActionIndexST_M_Group_M_Console_S_ConfigureApplications)->setEnabled(isActionEnabled(UIActionIndexST_M_Group_M_Console_S_ConfigureApplications, items));
    26922779
    26932780    /* Enable/disable machine-console actions: */
     
    26972784    actionPool()->action(UIActionIndexST_M_Machine_M_Console_S_CopyCommandSerial)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_M_Console_S_CopyCommandSerial, items));
    26982785    actionPool()->action(UIActionIndexST_M_Machine_M_Console_S_CopyCommandVNC)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_M_Console_S_CopyCommandVNC, items));
     2786    actionPool()->action(UIActionIndexST_M_Machine_M_Console_S_ConfigureApplications)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_M_Console_S_ConfigureApplications, items));
    26992787
    27002788    /* Enable/disable group-close actions: */
     
    29643052        case UIActionIndexST_M_Group_M_Console_S_CreateConnection:
    29653053        case UIActionIndexST_M_Group_M_Console_S_DeleteConnection:
     3054        case UIActionIndexST_M_Group_M_Console_S_ConfigureApplications:
    29663055        case UIActionIndexST_M_Machine_M_Console:
    29673056        case UIActionIndexST_M_Machine_M_Console_S_CreateConnection:
     
    29693058        case UIActionIndexST_M_Machine_M_Console_S_CopyCommandSerial:
    29703059        case UIActionIndexST_M_Machine_M_Console_S_CopyCommandVNC:
     3060        case UIActionIndexST_M_Machine_M_Console_S_ConfigureApplications:
    29713061        {
    29723062            return isAtLeastOneItemStarted(items);
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.h

    r85192 r85393  
    170170        /** Handles call to close Cloud Profile Manager window. */
    171171        void sltCloseCloudProfileManagerWindow();
     172
     173        /** Handles call to open Cloud Console Manager window. */
     174        void sltOpenCloudConsoleManagerWindow();
     175        /** Handles call to close Cloud Console Manager window. */
     176        void sltCloseCloudConsoleManagerWindow();
    172177
    173178        /** Handles call to open Import Appliance wizard.
     
    252257        /** Handles call to copy VNC console command. */
    253258        void sltPerformCopyCommandVNC();
     259        /** Handles call to execute external application. */
     260        void sltExecuteExternalApplication();
    254261
    255262        /** Handles call to discard machine state. */
     
    436443    /** Holds the Cloud Profile Manager window instance. */
    437444    QIManagerDialog *m_pManagerCloudProfile;
     445    /** Holds the Cloud Console Manager window instance. */
     446    QIManagerDialog *m_pManagerCloudConsole;
    438447    /** Holds a map of (machineUUID, UIVMLogViewerDialog). */
    439448    VMLogViewerMap   m_logViewers;
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