VirtualBox

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


Ignore:
Timestamp:
Oct 2, 2014 4:13:45 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
96375
Message:

FE/Qt: Runtime UI: Separate Input menu having keyboard/mouse related actions.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h

    r52727 r52937  
    7575template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuMachineActionType>();
    7676template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuViewActionType>();
     77template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuInputActionType>();
    7778template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuDevicesActionType>();
    7879#ifdef VBOX_WITH_DEBUGGER_GUI
     
    133134template<> QString toInternalString(const UIExtraDataMetaDefs::RuntimeMenuViewActionType &runtimeMenuViewActionType);
    134135template<> UIExtraDataMetaDefs::RuntimeMenuViewActionType fromInternalString<UIExtraDataMetaDefs::RuntimeMenuViewActionType>(const QString &strRuntimeMenuViewActionType);
     136template<> QString toInternalString(const UIExtraDataMetaDefs::RuntimeMenuInputActionType &runtimeMenuInputActionType);
     137template<> UIExtraDataMetaDefs::RuntimeMenuInputActionType fromInternalString<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(const QString &strRuntimeMenuInputActionType);
    135138template<> QString toInternalString(const UIExtraDataMetaDefs::RuntimeMenuDevicesActionType &runtimeMenuDevicesActionType);
    136139template<> UIExtraDataMetaDefs::RuntimeMenuDevicesActionType fromInternalString<UIExtraDataMetaDefs::RuntimeMenuDevicesActionType>(const QString &strRuntimeMenuDevicesActionType);
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp

    r52730 r52937  
    4646template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuMachineActionType>() { return true; }
    4747template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuViewActionType>() { return true; }
     48template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuInputActionType>() { return true; }
    4849template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuDevicesActionType>() { return true; }
    4950#ifdef VBOX_WITH_DEBUGGER_GUI
     
    373374        case UIExtraDataMetaDefs::MenuType_Machine:     strResult = "Machine"; break;
    374375        case UIExtraDataMetaDefs::MenuType_View:        strResult = "View"; break;
     376        case UIExtraDataMetaDefs::MenuType_Input:       strResult = "Input"; break;
    375377        case UIExtraDataMetaDefs::MenuType_Devices:     strResult = "Devices"; break;
    376378#ifdef VBOX_WITH_DEBUGGER_GUI
     
    399401    keys << "Machine";     values << UIExtraDataMetaDefs::MenuType_Machine;
    400402    keys << "View";        values << UIExtraDataMetaDefs::MenuType_View;
     403    keys << "Input";       values << UIExtraDataMetaDefs::MenuType_Input;
    401404    keys << "Devices";     values << UIExtraDataMetaDefs::MenuType_Devices;
    402405#ifdef VBOX_WITH_DEBUGGER_GUI
     
    512515        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeScreenshot:    strResult = "TakeScreenshot"; break;
    513516        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog: strResult = "InformationDialog"; break;
    514         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard:          strResult = "Keyboard"; break;
    515         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings:  strResult = "KeyboardSettings"; break;
    516         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse:             strResult = "Mouse"; break;
    517         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration:  strResult = "MouseIntegration"; break;
    518         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD:           strResult = "TypeCAD"; break;
    519 #ifdef Q_WS_X11
    520         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS:          strResult = "TypeCABS"; break;
    521 #endif /* Q_WS_X11 */
    522517        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause:             strResult = "Pause"; break;
    523518        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Reset:             strResult = "Reset"; break;
     
    549544    keys << "TakeScreenshot";    values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeScreenshot;
    550545    keys << "InformationDialog"; values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog;
    551     keys << "Keyboard";          values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard;
    552     keys << "KeyboardSettings";  values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings;
    553     keys << "Mouse";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse;
    554     keys << "MouseIntegration";  values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration;
    555     keys << "TypeCAD";           values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD;
    556 #ifdef Q_WS_X11
    557     keys << "TypeCABS";          values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS;
    558 #endif /* Q_WS_X11 */
    559546    keys << "Pause";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause;
    560547    keys << "Reset";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Reset;
     
    628615    /* Corresponding type for known words: */
    629616    return values.at(keys.indexOf(QRegExp(strRuntimeMenuViewActionType, Qt::CaseInsensitive)));
     617}
     618
     619/* QString <= UIExtraDataMetaDefs::RuntimeMenuInputActionType: */
     620template<> QString toInternalString(const UIExtraDataMetaDefs::RuntimeMenuInputActionType &runtimeMenuInputActionType)
     621{
     622    QString strResult;
     623    switch (runtimeMenuInputActionType)
     624    {
     625        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard:          strResult = "Keyboard"; break;
     626        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings:  strResult = "KeyboardSettings"; break;
     627        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse:             strResult = "Mouse"; break;
     628        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration:  strResult = "MouseIntegration"; break;
     629        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD:           strResult = "TypeCAD"; break;
     630#ifdef Q_WS_X11
     631        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS:          strResult = "TypeCABS"; break;
     632#endif /* Q_WS_X11 */
     633        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_All:               strResult = "All"; break;
     634        default:
     635        {
     636            AssertMsgFailed(("No text for action type=%d", runtimeMenuInputActionType));
     637            break;
     638        }
     639    }
     640    return strResult;
     641}
     642
     643/* UIExtraDataMetaDefs::RuntimeMenuInputActionType <= QString: */
     644template<> UIExtraDataMetaDefs::RuntimeMenuInputActionType fromInternalString<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(const QString &strRuntimeMenuInputActionType)
     645{
     646    /* Here we have some fancy stuff allowing us
     647     * to search through the keys using 'case-insensitive' rule: */
     648    QStringList keys;            QList<UIExtraDataMetaDefs::RuntimeMenuInputActionType> values;
     649    keys << "Keyboard";          values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard;
     650    keys << "KeyboardSettings";  values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings;
     651    keys << "Mouse";             values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse;
     652    keys << "MouseIntegration";  values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration;
     653    keys << "TypeCAD";           values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD;
     654#ifdef Q_WS_X11
     655    keys << "TypeCABS";          values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS;
     656#endif /* Q_WS_X11 */
     657    keys << "All";               values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_All;
     658    /* Invalid type for unknown words: */
     659    if (!keys.contains(strRuntimeMenuInputActionType, Qt::CaseInsensitive))
     660        return UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid;
     661    /* Corresponding type for known words: */
     662    return values.at(keys.indexOf(QRegExp(strRuntimeMenuInputActionType, Qt::CaseInsensitive)));
    630663}
    631664
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp

    r52788 r52937  
    9292const char* UIExtraDataDefs::GUI_RestrictedRuntimeMachineMenuActions = "GUI/RestrictedRuntimeMachineMenuActions";
    9393const char* UIExtraDataDefs::GUI_RestrictedRuntimeViewMenuActions = "GUI/RestrictedRuntimeViewMenuActions";
     94const char* UIExtraDataDefs::GUI_RestrictedRuntimeInputMenuActions = "GUI/RestrictedRuntimeInputMenuActions";
    9495const char* UIExtraDataDefs::GUI_RestrictedRuntimeDevicesMenuActions = "GUI/RestrictedRuntimeDevicesMenuActions";
    9596#ifdef VBOX_WITH_DEBUGGER_GUI
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h

    r52788 r52937  
    154154        /** Holds restricted Runtime UI action types for View menu. */
    155155        extern const char* GUI_RestrictedRuntimeViewMenuActions;
     156        /** Holds restricted Runtime UI action types for Input menu. */
     157        extern const char* GUI_RestrictedRuntimeInputMenuActions;
    156158        /** Holds restricted Runtime UI action types for Devices menu. */
    157159        extern const char* GUI_RestrictedRuntimeDevicesMenuActions;
     
    281283    Q_ENUMS(RuntimeMenuMachineActionType);
    282284    Q_ENUMS(RuntimeMenuViewActionType);
     285    Q_ENUMS(RuntimeMenuInputActionType);
    283286    Q_ENUMS(RuntimeMenuDevicesActionType);
    284287#ifdef VBOX_WITH_DEBUGGER_GUI
     
    297300        MenuType_Machine     = RT_BIT(1),
    298301        MenuType_View        = RT_BIT(2),
    299         MenuType_Devices     = RT_BIT(3),
     302        MenuType_Input       = RT_BIT(3),
     303        MenuType_Devices     = RT_BIT(4),
    300304#ifdef VBOX_WITH_DEBUGGER_GUI
    301         MenuType_Debug       = RT_BIT(4),
     305        MenuType_Debug       = RT_BIT(5),
    302306#endif /* VBOX_WITH_DEBUGGER_GUI */
    303         MenuType_Help        = RT_BIT(5),
     307        MenuType_Help        = RT_BIT(6),
    304308        MenuType_All         = 0xFF
    305309    };
     
    343347        RuntimeMenuMachineActionType_TakeScreenshot    = RT_BIT(2),
    344348        RuntimeMenuMachineActionType_InformationDialog = RT_BIT(3),
    345         RuntimeMenuMachineActionType_Keyboard          = RT_BIT(4),
    346         RuntimeMenuMachineActionType_KeyboardSettings  = RT_BIT(5),
    347         RuntimeMenuMachineActionType_Mouse             = RT_BIT(6),
    348         RuntimeMenuMachineActionType_MouseIntegration  = RT_BIT(7),
    349         RuntimeMenuMachineActionType_TypeCAD           = RT_BIT(8),
    350 #ifdef Q_WS_X11
    351         RuntimeMenuMachineActionType_TypeCABS          = RT_BIT(9),
    352 #endif /* Q_WS_X11 */
    353349        RuntimeMenuMachineActionType_Pause             = RT_BIT(10),
    354350        RuntimeMenuMachineActionType_Reset             = RT_BIT(11),
     
    381377        RuntimeMenuViewActionType_Multiscreen       = RT_BIT(12),
    382378        RuntimeMenuViewActionType_All               = 0xFFFF
     379    };
     380
     381    /** Runtime UI: Menu "Input": Action types. */
     382    enum RuntimeMenuInputActionType
     383    {
     384        RuntimeMenuInputActionType_Invalid           = 0,
     385        RuntimeMenuInputActionType_Keyboard          = RT_BIT(0),
     386        RuntimeMenuInputActionType_KeyboardSettings  = RT_BIT(1),
     387        RuntimeMenuInputActionType_Mouse             = RT_BIT(2),
     388        RuntimeMenuInputActionType_MouseIntegration  = RT_BIT(3),
     389        RuntimeMenuInputActionType_TypeCAD           = RT_BIT(4),
     390#ifdef Q_WS_X11
     391        RuntimeMenuInputActionType_TypeCABS          = RT_BIT(5),
     392#endif /* Q_WS_X11 */
     393        RuntimeMenuInputActionType_All               = 0xFFFF
    383394    };
    384395
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp

    r52788 r52937  
    17781778           << GUI_RestrictedRuntimeMachineMenuActions
    17791779           << GUI_RestrictedRuntimeViewMenuActions
     1780           << GUI_RestrictedRuntimeInputMenuActions
    17801781           << GUI_RestrictedRuntimeDevicesMenuActions
    17811782#ifdef VBOX_WITH_DEBUGGER_GUI
     
    27202721}
    27212722
     2723UIExtraDataMetaDefs::RuntimeMenuInputActionType UIExtraDataManager::restrictedRuntimeMenuInputActionTypes(const QString &strID)
     2724{
     2725    /* Prepare result: */
     2726    UIExtraDataMetaDefs::RuntimeMenuInputActionType result = UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid;
     2727    /* Get restricted runtime-machine-menu action-types: */
     2728    foreach (const QString &strValue, extraDataStringList(GUI_RestrictedRuntimeInputMenuActions, strID))
     2729    {
     2730        UIExtraDataMetaDefs::RuntimeMenuInputActionType value = gpConverter->fromInternalString<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(strValue);
     2731        if (value != UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid)
     2732            result = static_cast<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(result | value);
     2733    }
     2734    /* Return result: */
     2735    return result;
     2736}
     2737
     2738void UIExtraDataManager::setRestrictedRuntimeMenuInputActionTypes(UIExtraDataMetaDefs::RuntimeMenuInputActionType types, const QString &strID)
     2739{
     2740    /* We have RuntimeMenuInputActionType enum registered, so we can enumerate it: */
     2741    const QMetaObject &smo = UIExtraDataMetaDefs::staticMetaObject;
     2742    const int iEnumIndex = smo.indexOfEnumerator("RuntimeMenuInputActionType");
     2743    QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
     2744
     2745    /* Prepare result: */
     2746    QStringList result;
     2747    /* Handle RuntimeMenuInputActionType_All enum-value: */
     2748    if (types == UIExtraDataMetaDefs::RuntimeMenuInputActionType_All)
     2749        result << gpConverter->toInternalString(types);
     2750    else
     2751    {
     2752        /* Handle other enum-values: */
     2753        for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
     2754        {
     2755            /* Get iterated enum-value: */
     2756            const UIExtraDataMetaDefs::RuntimeMenuInputActionType enumValue =
     2757                static_cast<const UIExtraDataMetaDefs::RuntimeMenuInputActionType>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
     2758            /* Skip RuntimeMenuInputActionType_Invalid & RuntimeMenuInputActionType_All enum-values: */
     2759            if (enumValue == UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid ||
     2760                enumValue == UIExtraDataMetaDefs::RuntimeMenuInputActionType_All)
     2761                continue;
     2762            if (types & enumValue)
     2763                result << gpConverter->toInternalString(enumValue);
     2764        }
     2765    }
     2766    /* Save result: */
     2767    setExtraDataStringList(GUI_RestrictedRuntimeInputMenuActions, result, strID);
     2768}
     2769
    27222770UIExtraDataMetaDefs::RuntimeMenuDevicesActionType UIExtraDataManager::restrictedRuntimeMenuDevicesActionTypes(const QString &strID)
    27232771{
     
    34793527            strKey == GUI_RestrictedRuntimeMachineMenuActions ||
    34803528            strKey == GUI_RestrictedRuntimeViewMenuActions ||
     3529            strKey == GUI_RestrictedRuntimeInputMenuActions ||
    34813530            strKey == GUI_RestrictedRuntimeDevicesMenuActions ||
    34823531#ifdef VBOX_WITH_DEBUGGER_GUI
  • trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h

    r52788 r52937  
    313313        void setRestrictedRuntimeMenuViewActionTypes(UIExtraDataMetaDefs::RuntimeMenuViewActionType types, const QString &strID);
    314314
     315        /** Returns restricted Runtime UI action types for Input menu. */
     316        UIExtraDataMetaDefs::RuntimeMenuInputActionType restrictedRuntimeMenuInputActionTypes(const QString &strID);
     317        /** Defines restricted Runtime UI action types for Input menu. */
     318        void setRestrictedRuntimeMenuInputActionTypes(UIExtraDataMetaDefs::RuntimeMenuInputActionType types, const QString &strID);
     319
    315320        /** Returns restricted Runtime UI action types for Devices menu. */
    316321        UIExtraDataMetaDefs::RuntimeMenuDevicesActionType restrictedRuntimeMenuDevicesActionTypes(const QString &strID);
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp

    r52730 r52937  
    205205};
    206206
    207 class UIActionMenuKeyboard : public UIActionMenu
    208 {
    209     Q_OBJECT;
    210 
    211 public:
    212 
    213     UIActionMenuKeyboard(UIActionPool *pParent)
    214         : UIActionMenu(pParent, ":/keyboard_16px.png") {}
    215 
    216 protected:
    217 
    218     /** Returns action extra-data ID. */
    219     virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard; }
    220     /** Returns action extra-data key. */
    221     virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard); }
    222     /** Returns whether action is allowed. */
    223     virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard); }
    224 
    225     void retranslateUi()
    226     {
    227         setName(QApplication::translate("UIActionPool", "&Keyboard"));
    228     }
    229 };
    230 
    231 class UIActionSimpleKeyboardSettings : public UIActionSimple
    232 {
    233     Q_OBJECT;
    234 
    235 public:
    236 
    237     UIActionSimpleKeyboardSettings(UIActionPool *pParent)
    238         : UIActionSimple(pParent, ":/keyboard_settings_16px.png", ":/keyboard_settings_disabled_16px.png") {}
    239 
    240 protected:
    241 
    242     /** Returns action extra-data ID. */
    243     virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings; }
    244     /** Returns action extra-data key. */
    245     virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings); }
    246     /** Returns whether action is allowed. */
    247     virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings); }
    248 
    249     QString shortcutExtraDataID() const
    250     {
    251         return QString("KeyboardSettings");
    252     }
    253 
    254     void retranslateUi()
    255     {
    256         setName(QApplication::translate("UIActionPool", "&Keyboard Settings..."));
    257         setStatusTip(QApplication::translate("UIActionPool", "Display the global settings window to configure shortcuts"));
    258     }
    259 };
    260 
    261 class UIActionMenuMouse : public UIActionMenu
    262 {
    263     Q_OBJECT;
    264 
    265 public:
    266 
    267     UIActionMenuMouse(UIActionPool *pParent)
    268         : UIActionMenu(pParent) {}
    269 
    270 protected:
    271 
    272     /** Returns action extra-data ID. */
    273     virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse; }
    274     /** Returns action extra-data key. */
    275     virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse); }
    276     /** Returns whether action is allowed. */
    277     virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse); }
    278 
    279     void retranslateUi()
    280     {
    281         setName(QApplication::translate("UIActionPool", "&Mouse"));
    282     }
    283 };
    284 
    285 class UIActionToggleMouseIntegration : public UIActionToggle
    286 {
    287     Q_OBJECT;
    288 
    289 public:
    290 
    291     UIActionToggleMouseIntegration(UIActionPool *pParent)
    292         : UIActionToggle(pParent,
    293                          ":/mouse_can_seamless_on_16px.png", ":/mouse_can_seamless_16px.png",
    294                          ":/mouse_can_seamless_on_disabled_16px.png", ":/mouse_can_seamless_disabled_16px.png") {}
    295 
    296 protected:
    297 
    298     /** Returns action extra-data ID. */
    299     virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration; }
    300     /** Returns action extra-data key. */
    301     virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration); }
    302     /** Returns whether action is allowed. */
    303     virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration); }
    304 
    305     QString shortcutExtraDataID() const
    306     {
    307         return QString("MouseIntegration");
    308     }
    309 
    310     QKeySequence defaultShortcut(UIActionPoolType) const
    311     {
    312         return QKeySequence("I");
    313     }
    314 
    315     void retranslateUi()
    316     {
    317         setName(QApplication::translate("UIActionPool", "Disable &Mouse Integration"));
    318         setStatusTip(QApplication::translate("UIActionPool", "Temporarily disable host mouse pointer integration"));
    319     }
    320 };
    321 
    322 class UIActionSimplePerformTypeCAD : public UIActionSimple
    323 {
    324     Q_OBJECT;
    325 
    326 public:
    327 
    328     UIActionSimplePerformTypeCAD(UIActionPool *pParent)
    329         : UIActionSimple(pParent, ":/hostkey_16px.png", ":/hostkey_disabled_16px.png") {}
    330 
    331 protected:
    332 
    333     /** Returns action extra-data ID. */
    334     virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD; }
    335     /** Returns action extra-data key. */
    336     virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD); }
    337     /** Returns whether action is allowed. */
    338     virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD); }
    339 
    340     QString shortcutExtraDataID() const
    341     {
    342         return QString("TypeCAD");
    343     }
    344 
    345     QKeySequence defaultShortcut(UIActionPoolType) const
    346     {
    347         return QKeySequence("Del");
    348     }
    349 
    350     void retranslateUi()
    351     {
    352         setName(QApplication::translate("UIActionPool", "&Insert Ctrl-Alt-Del"));
    353         setStatusTip(QApplication::translate("UIActionPool", "Send the Ctrl-Alt-Del sequence to the virtual machine"));
    354     }
    355 };
    356 
    357 #ifdef Q_WS_X11
    358 class UIActionSimplePerformTypeCABS : public UIActionSimple
    359 {
    360     Q_OBJECT;
    361 
    362 public:
    363 
    364     UIActionSimplePerformTypeCABS(UIActionPool *pParent)
    365         : UIActionSimple(pParent, ":/hostkey_16px.png", ":/hostkey_disabled_16px.png") {}
    366 
    367 protected:
    368 
    369     /** Returns action extra-data ID. */
    370     virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS; }
    371     /** Returns action extra-data key. */
    372     virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS); }
    373     /** Returns whether action is allowed. */
    374     virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS); }
    375 
    376     QString shortcutExtraDataID() const
    377     {
    378         return QString("TypeCABS");
    379     }
    380 
    381     QKeySequence defaultShortcut(UIActionPoolType) const
    382     {
    383         return QKeySequence("Backspace");
    384     }
    385 
    386     void retranslateUi()
    387     {
    388         setName(QApplication::translate("UIActionPool", "Ins&ert Ctrl-Alt-Backspace"));
    389         setStatusTip(QApplication::translate("UIActionPool", "Send the Ctrl-Alt-Backspace sequence to the virtual machine"));
    390     }
    391 };
    392 #endif /* Q_WS_X11 */
    393 
    394207class UIActionTogglePause : public UIActionToggle
    395208{
     
    1001814};
    1002815
     816class UIActionMenuInput : public UIActionMenu
     817{
     818    Q_OBJECT;
     819
     820public:
     821
     822    UIActionMenuInput(UIActionPool *pParent)
     823        : UIActionMenu(pParent) {}
     824
     825protected:
     826
     827    /** Returns action extra-data ID. */
     828    virtual int extraDataID() const { return UIExtraDataMetaDefs::MenuType_Input; }
     829    /** Returns action extra-data key. */
     830    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::MenuType_Input); }
     831    /** Returns whether action is allowed. */
     832    virtual bool isAllowed() const { return actionPool()->isAllowedInMenuBar(UIExtraDataMetaDefs::MenuType_Input); }
     833
     834    void retranslateUi()
     835    {
     836        setName(QApplication::translate("UIActionPool", "&Input"));
     837    }
     838};
     839
     840class UIActionMenuKeyboard : public UIActionMenu
     841{
     842    Q_OBJECT;
     843
     844public:
     845
     846    UIActionMenuKeyboard(UIActionPool *pParent)
     847        : UIActionMenu(pParent, ":/keyboard_16px.png") {}
     848
     849protected:
     850
     851    /** Returns action extra-data ID. */
     852    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard; }
     853    /** Returns action extra-data key. */
     854    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard); }
     855    /** Returns whether action is allowed. */
     856    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard); }
     857
     858    void retranslateUi()
     859    {
     860        setName(QApplication::translate("UIActionPool", "&Keyboard"));
     861    }
     862};
     863
     864class UIActionSimpleKeyboardSettings : public UIActionSimple
     865{
     866    Q_OBJECT;
     867
     868public:
     869
     870    UIActionSimpleKeyboardSettings(UIActionPool *pParent)
     871        : UIActionSimple(pParent, ":/keyboard_settings_16px.png", ":/keyboard_settings_disabled_16px.png") {}
     872
     873protected:
     874
     875    /** Returns action extra-data ID. */
     876    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings; }
     877    /** Returns action extra-data key. */
     878    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings); }
     879    /** Returns whether action is allowed. */
     880    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings); }
     881
     882    QString shortcutExtraDataID() const
     883    {
     884        return QString("KeyboardSettings");
     885    }
     886
     887    void retranslateUi()
     888    {
     889        setName(QApplication::translate("UIActionPool", "&Keyboard Settings..."));
     890        setStatusTip(QApplication::translate("UIActionPool", "Display the global settings window to configure shortcuts"));
     891    }
     892};
     893
     894class UIActionMenuMouse : public UIActionMenu
     895{
     896    Q_OBJECT;
     897
     898public:
     899
     900    UIActionMenuMouse(UIActionPool *pParent)
     901        : UIActionMenu(pParent) {}
     902
     903protected:
     904
     905    /** Returns action extra-data ID. */
     906    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse; }
     907    /** Returns action extra-data key. */
     908    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse); }
     909    /** Returns whether action is allowed. */
     910    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse); }
     911
     912    void retranslateUi()
     913    {
     914        setName(QApplication::translate("UIActionPool", "&Mouse"));
     915    }
     916};
     917
     918class UIActionToggleMouseIntegration : public UIActionToggle
     919{
     920    Q_OBJECT;
     921
     922public:
     923
     924    UIActionToggleMouseIntegration(UIActionPool *pParent)
     925        : UIActionToggle(pParent,
     926                         ":/mouse_can_seamless_on_16px.png", ":/mouse_can_seamless_16px.png",
     927                         ":/mouse_can_seamless_on_disabled_16px.png", ":/mouse_can_seamless_disabled_16px.png") {}
     928
     929protected:
     930
     931    /** Returns action extra-data ID. */
     932    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration; }
     933    /** Returns action extra-data key. */
     934    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration); }
     935    /** Returns whether action is allowed. */
     936    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration); }
     937
     938    QString shortcutExtraDataID() const
     939    {
     940        return QString("MouseIntegration");
     941    }
     942
     943    QKeySequence defaultShortcut(UIActionPoolType) const
     944    {
     945        return QKeySequence("I");
     946    }
     947
     948    void retranslateUi()
     949    {
     950        setName(QApplication::translate("UIActionPool", "Disable &Mouse Integration"));
     951        setStatusTip(QApplication::translate("UIActionPool", "Temporarily disable host mouse pointer integration"));
     952    }
     953};
     954
     955class UIActionSimplePerformTypeCAD : public UIActionSimple
     956{
     957    Q_OBJECT;
     958
     959public:
     960
     961    UIActionSimplePerformTypeCAD(UIActionPool *pParent)
     962        : UIActionSimple(pParent, ":/hostkey_16px.png", ":/hostkey_disabled_16px.png") {}
     963
     964protected:
     965
     966    /** Returns action extra-data ID. */
     967    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD; }
     968    /** Returns action extra-data key. */
     969    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD); }
     970    /** Returns whether action is allowed. */
     971    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD); }
     972
     973    QString shortcutExtraDataID() const
     974    {
     975        return QString("TypeCAD");
     976    }
     977
     978    QKeySequence defaultShortcut(UIActionPoolType) const
     979    {
     980        return QKeySequence("Del");
     981    }
     982
     983    void retranslateUi()
     984    {
     985        setName(QApplication::translate("UIActionPool", "&Insert Ctrl-Alt-Del"));
     986        setStatusTip(QApplication::translate("UIActionPool", "Send the Ctrl-Alt-Del sequence to the virtual machine"));
     987    }
     988};
     989
     990#ifdef Q_WS_X11
     991class UIActionSimplePerformTypeCABS : public UIActionSimple
     992{
     993    Q_OBJECT;
     994
     995public:
     996
     997    UIActionSimplePerformTypeCABS(UIActionPool *pParent)
     998        : UIActionSimple(pParent, ":/hostkey_16px.png", ":/hostkey_disabled_16px.png") {}
     999
     1000protected:
     1001
     1002    /** Returns action extra-data ID. */
     1003    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS; }
     1004    /** Returns action extra-data key. */
     1005    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS); }
     1006    /** Returns whether action is allowed. */
     1007    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS); }
     1008
     1009    QString shortcutExtraDataID() const
     1010    {
     1011        return QString("TypeCABS");
     1012    }
     1013
     1014    QKeySequence defaultShortcut(UIActionPoolType) const
     1015    {
     1016        return QKeySequence("Backspace");
     1017    }
     1018
     1019    void retranslateUi()
     1020    {
     1021        setName(QApplication::translate("UIActionPool", "Ins&ert Ctrl-Alt-Backspace"));
     1022        setStatusTip(QApplication::translate("UIActionPool", "Send the Ctrl-Alt-Backspace sequence to the virtual machine"));
     1023    }
     1024};
     1025#endif /* Q_WS_X11 */
     1026
    10031027class UIActionMenuDevices : public UIActionMenu
    10041028{
     
    18151839    m_restrictedActionsMenuView[level] = restriction;
    18161840    m_invalidations << UIActionIndexRT_M_View << UIActionIndexRT_M_ViewPopup;
     1841}
     1842
     1843bool UIActionPoolRuntime::isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType type) const
     1844{
     1845    foreach (const UIExtraDataMetaDefs::RuntimeMenuInputActionType &restriction, m_restrictedActionsMenuInput.values())
     1846        if (restriction & type)
     1847            return false;
     1848    return true;
     1849}
     1850
     1851void UIActionPoolRuntime::setRestrictionForMenuInput(UIActionRestrictionLevel level, UIExtraDataMetaDefs::RuntimeMenuInputActionType restriction)
     1852{
     1853    m_restrictedActionsMenuInput[level] = restriction;
     1854    m_invalidations << UIActionIndexRT_M_Input;
    18171855}
    18181856
     
    19211959    m_pool[UIActionIndexRT_M_Machine_S_TakeScreenshot] = new UIActionSimplePerformTakeScreenshot(this);
    19221960    m_pool[UIActionIndexRT_M_Machine_S_ShowInformation] = new UIActionSimpleShowInformationDialog(this);
    1923     m_pool[UIActionIndexRT_M_Machine_M_Keyboard] = new UIActionMenuKeyboard(this);
    1924     m_pool[UIActionIndexRT_M_Machine_M_Keyboard_S_Settings] = new UIActionSimpleKeyboardSettings(this);
    1925     m_pool[UIActionIndexRT_M_Machine_M_Mouse] = new UIActionMenuMouse(this);
    1926     m_pool[UIActionIndexRT_M_Machine_M_Mouse_T_Integration] = new UIActionToggleMouseIntegration(this);
    1927     m_pool[UIActionIndexRT_M_Machine_S_TypeCAD] = new UIActionSimplePerformTypeCAD(this);
    1928 #ifdef Q_WS_X11
    1929     m_pool[UIActionIndexRT_M_Machine_S_TypeCABS] = new UIActionSimplePerformTypeCABS(this);
    1930 #endif /* Q_WS_X11 */
    19311961    m_pool[UIActionIndexRT_M_Machine_T_Pause] = new UIActionTogglePause(this);
    19321962    m_pool[UIActionIndexRT_M_Machine_S_Reset] = new UIActionSimplePerformReset(this);
     
    19521982    m_pool[UIActionIndexRT_M_View_M_StatusBar_S_Settings] = new UIActionSimpleShowStatusBarSettingsWindow(this);
    19531983    m_pool[UIActionIndexRT_M_View_M_StatusBar_T_Visibility] = new UIActionToggleStatusBar(this);
     1984
     1985    /* 'Input' actions: */
     1986    m_pool[UIActionIndexRT_M_Input] = new UIActionMenuInput(this);
     1987    m_pool[UIActionIndexRT_M_Input_M_Keyboard] = new UIActionMenuKeyboard(this);
     1988    m_pool[UIActionIndexRT_M_Input_M_Keyboard_S_Settings] = new UIActionSimpleKeyboardSettings(this);
     1989    m_pool[UIActionIndexRT_M_Input_M_Mouse] = new UIActionMenuMouse(this);
     1990    m_pool[UIActionIndexRT_M_Input_M_Mouse_T_Integration] = new UIActionToggleMouseIntegration(this);
     1991    m_pool[UIActionIndexRT_M_Input_S_TypeCAD] = new UIActionSimplePerformTypeCAD(this);
     1992#ifdef Q_WS_X11
     1993    m_pool[UIActionIndexRT_M_Input_S_TypeCABS] = new UIActionSimplePerformTypeCABS(this);
     1994#endif /* Q_WS_X11 */
    19541995
    19551996    /* 'Devices' actions: */
     
    19932034    /* Prepare update-handlers for known menus: */
    19942035    m_menuUpdateHandlers[UIActionIndexRT_M_Machine].ptfr =                 &UIActionPoolRuntime::updateMenuMachine;
    1995     m_menuUpdateHandlers[UIActionIndexRT_M_Machine_M_Keyboard].ptfr =      &UIActionPoolRuntime::updateMenuMachineKeyboard;
    1996     m_menuUpdateHandlers[UIActionIndexRT_M_Machine_M_Mouse].ptfr =         &UIActionPoolRuntime::updateMenuMachineMouse;
    19972036    m_menuUpdateHandlers[UIActionIndexRT_M_View].ptfr =                    &UIActionPoolRuntime::updateMenuView;
    19982037    m_menuUpdateHandlers[UIActionIndexRT_M_ViewPopup].ptfr =               &UIActionPoolRuntime::updateMenuViewPopup;
    19992038    m_menuUpdateHandlers[UIActionIndexRT_M_View_M_MenuBar].ptfr =          &UIActionPoolRuntime::updateMenuViewMenuBar;
    20002039    m_menuUpdateHandlers[UIActionIndexRT_M_View_M_StatusBar].ptfr =        &UIActionPoolRuntime::updateMenuViewStatusBar;
     2040    m_menuUpdateHandlers[UIActionIndexRT_M_Input].ptfr =                   &UIActionPoolRuntime::updateMenuInput;
     2041    m_menuUpdateHandlers[UIActionIndexRT_M_Input_M_Keyboard].ptfr =        &UIActionPoolRuntime::updateMenuInputKeyboard;
     2042    m_menuUpdateHandlers[UIActionIndexRT_M_Input_M_Mouse].ptfr =           &UIActionPoolRuntime::updateMenuInputMouse;
    20012043    m_menuUpdateHandlers[UIActionIndexRT_M_Devices].ptfr =                 &UIActionPoolRuntime::updateMenuDevices;
    20022044    m_menuUpdateHandlers[UIActionIndexRT_M_Devices_M_HardDrives].ptfr =    &UIActionPoolRuntime::updateMenuDevicesHardDrives;
     
    20372079    m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] =     gEDataManager->restrictedRuntimeMenuMachineActionTypes(strMachineID);
    20382080    m_restrictedActionsMenuView[UIActionRestrictionLevel_Base] =        gEDataManager->restrictedRuntimeMenuViewActionTypes(strMachineID);
     2081    m_restrictedActionsMenuInput[UIActionRestrictionLevel_Base] =       gEDataManager->restrictedRuntimeMenuInputActionTypes(strMachineID);
    20392082    m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] =     gEDataManager->restrictedRuntimeMenuDevicesActionTypes(strMachineID);
    20402083#ifdef VBOX_WITH_DEBUGGER_GUI
     
    20632106        m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] = (UIExtraDataMetaDefs::RuntimeMenuMachineActionType)
    20642107            (m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] | UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SettingsDialog);
    2065         m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] = (UIExtraDataMetaDefs::RuntimeMenuMachineActionType)
    2066             (m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] | UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings);
     2108        m_restrictedActionsMenuInput[UIActionRestrictionLevel_Base] = (UIExtraDataMetaDefs::RuntimeMenuInputActionType)
     2109            (m_restrictedActionsMenuInput[UIActionRestrictionLevel_Base] | UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings);
    20672110        m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] = (UIExtraDataMetaDefs::RuntimeMenuDevicesActionType)
    20682111            (m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] | UIExtraDataMetaDefs::RuntimeMenuDevicesActionType_HardDrivesSettings);
     
    21492192    updateMenuViewPopup();
    21502193
     2194    /* 'Input' menu: */
     2195    addMenu(m_mainMenus, action(UIActionIndexRT_M_Input));
     2196    updateMenuInput();
     2197
    21512198    /* 'Devices' menu: */
    21522199    addMenu(m_mainMenus, action(UIActionIndexRT_M_Devices));
     
    21832230    /* 'Information Dialog' action: */
    21842231    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_ShowInformation)) || fSeparator;
    2185 
    2186     /* Separator: */
    2187     if (fSeparator)
    2188     {
    2189         pMenu->addSeparator();
    2190         fSeparator = false;
    2191     }
    2192 
    2193     /* 'Keyboard' submenu: */
    2194     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Keyboard)) || fSeparator;
    2195     updateMenuMachineKeyboard();
    2196     /* 'Mouse' submenu: */
    2197     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Mouse), false) || fSeparator;
    2198     updateMenuMachineMouse();
    2199     /* 'Mouse Integration' action: */
    2200     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration)) || fSeparator;
    22012232
    22022233    /* Separator: */
     
    22322263    /* Mark menu as valid: */
    22332264    m_invalidations.remove(UIActionIndexRT_M_Machine);
    2234 }
    2235 
    2236 void UIActionPoolRuntime::updateMenuMachineKeyboard()
    2237 {
    2238     /* Get corresponding menu: */
    2239     UIMenu *pMenu = action(UIActionIndexRT_M_Machine_M_Keyboard)->menu();
    2240     AssertPtrReturnVoid(pMenu);
    2241     /* Clear contents: */
    2242     pMenu->clear();
    2243 
    2244     /* Separator: */
    2245     bool fSeparator = false;
    2246 
    2247     /* 'Keyboard Settings' action: */
    2248     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Keyboard_S_Settings)) || fSeparator;
    2249 
    2250     /* Separator: */
    2251     if (fSeparator)
    2252     {
    2253         pMenu->addSeparator();
    2254         fSeparator = false;
    2255     }
    2256 
    2257     /* 'Type CAD' action: */
    2258     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_TypeCAD)) || fSeparator;
    2259 #ifdef Q_WS_X11
    2260     /* 'Type CABS' action: */
    2261     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_TypeCABS)) || fSeparator;
    2262 #endif /* Q_WS_X11 */
    2263 
    2264     /* Mark menu as valid: */
    2265     m_invalidations.remove(UIActionIndexRT_M_Machine_M_Keyboard);
    2266 }
    2267 
    2268 void UIActionPoolRuntime::updateMenuMachineMouse()
    2269 {
    2270     /* Get corresponding menu: */
    2271     UIMenu *pMenu = action(UIActionIndexRT_M_Machine_M_Mouse)->menu();
    2272     AssertPtrReturnVoid(pMenu);
    2273     /* Clear contents: */
    2274     pMenu->clear();
    2275 
    2276     /* 'Machine Integration' action: */
    2277     addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration));
    2278 
    2279     /* Mark menu as valid: */
    2280     m_invalidations.remove(UIActionIndexRT_M_Machine_M_Mouse);
    22812265}
    22822266
     
    25582542}
    25592543
     2544void UIActionPoolRuntime::updateMenuInput()
     2545{
     2546    /* Get corresponding menu: */
     2547    UIMenu *pMenu = action(UIActionIndexRT_M_Input)->menu();
     2548    AssertPtrReturnVoid(pMenu);
     2549    /* Clear contents: */
     2550    pMenu->clear();
     2551
     2552    /* Separator: */
     2553    bool fSeparator = false;
     2554
     2555    /* 'Keyboard' submenu: */
     2556    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Keyboard)) || fSeparator;
     2557    updateMenuInputKeyboard();
     2558    /* 'Mouse' submenu: */
     2559    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Mouse), false) || fSeparator;
     2560    updateMenuInputMouse();
     2561    /* 'Mouse Integration' action: */
     2562    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Mouse_T_Integration)) || fSeparator;
     2563
     2564    /* Mark menu as valid: */
     2565    m_invalidations.remove(UIActionIndexRT_M_Input);
     2566}
     2567
     2568void UIActionPoolRuntime::updateMenuInputKeyboard()
     2569{
     2570    /* Get corresponding menu: */
     2571    UIMenu *pMenu = action(UIActionIndexRT_M_Input_M_Keyboard)->menu();
     2572    AssertPtrReturnVoid(pMenu);
     2573    /* Clear contents: */
     2574    pMenu->clear();
     2575
     2576    /* Separator: */
     2577    bool fSeparator = false;
     2578
     2579    /* 'Keyboard Settings' action: */
     2580    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Keyboard_S_Settings)) || fSeparator;
     2581
     2582    /* Separator: */
     2583    if (fSeparator)
     2584    {
     2585        pMenu->addSeparator();
     2586        fSeparator = false;
     2587    }
     2588
     2589    /* 'Type CAD' action: */
     2590    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_S_TypeCAD)) || fSeparator;
     2591#ifdef Q_WS_X11
     2592    /* 'Type CABS' action: */
     2593    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_S_TypeCABS)) || fSeparator;
     2594#endif /* Q_WS_X11 */
     2595
     2596    /* Mark menu as valid: */
     2597    m_invalidations.remove(UIActionIndexRT_M_Input_M_Keyboard);
     2598}
     2599
     2600void UIActionPoolRuntime::updateMenuInputMouse()
     2601{
     2602    /* Get corresponding menu: */
     2603    UIMenu *pMenu = action(UIActionIndexRT_M_Input_M_Mouse)->menu();
     2604    AssertPtrReturnVoid(pMenu);
     2605    /* Clear contents: */
     2606    pMenu->clear();
     2607
     2608    /* 'Machine Integration' action: */
     2609    addAction(pMenu, action(UIActionIndexRT_M_Input_M_Mouse_T_Integration));
     2610
     2611    /* Mark menu as valid: */
     2612    m_invalidations.remove(UIActionIndexRT_M_Input_M_Mouse);
     2613}
     2614
    25602615void UIActionPoolRuntime::updateMenuDevices()
    25612616{
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h

    r52645 r52937  
    4545    UIActionIndexRT_M_Machine_S_TakeScreenshot,
    4646    UIActionIndexRT_M_Machine_S_ShowInformation,
    47     UIActionIndexRT_M_Machine_M_Keyboard,
    48     UIActionIndexRT_M_Machine_M_Keyboard_S_Settings,
    49     UIActionIndexRT_M_Machine_M_Mouse,
    50     UIActionIndexRT_M_Machine_M_Mouse_T_Integration,
    51     UIActionIndexRT_M_Machine_S_TypeCAD,
    52 #ifdef Q_WS_X11
    53     UIActionIndexRT_M_Machine_S_TypeCABS,
    54 #endif /* Q_WS_X11 */
    5547    UIActionIndexRT_M_Machine_T_Pause,
    5648    UIActionIndexRT_M_Machine_S_Reset,
     
    7668    UIActionIndexRT_M_View_M_StatusBar_S_Settings,
    7769    UIActionIndexRT_M_View_M_StatusBar_T_Visibility,
     70
     71    /* 'Input' menu actions: */
     72    UIActionIndexRT_M_Input,
     73    UIActionIndexRT_M_Input_M_Keyboard,
     74    UIActionIndexRT_M_Input_M_Keyboard_S_Settings,
     75    UIActionIndexRT_M_Input_M_Mouse,
     76    UIActionIndexRT_M_Input_M_Mouse_T_Integration,
     77    UIActionIndexRT_M_Input_S_TypeCAD,
     78#ifdef Q_WS_X11
     79    UIActionIndexRT_M_Input_S_TypeCABS,
     80#endif /* Q_WS_X11 */
    7881
    7982    /* 'Devices' menu actions: */
     
    158161    void setRestrictionForMenuView(UIActionRestrictionLevel level, UIExtraDataMetaDefs::RuntimeMenuViewActionType restriction);
    159162
     163    /** Returns whether the action with passed @a type is allowed in the 'Input' menu. */
     164    bool isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType type) const;
     165    /** Defines 'Input' menu @a restriction for passed @a level. */
     166    void setRestrictionForMenuInput(UIActionRestrictionLevel level, UIExtraDataMetaDefs::RuntimeMenuInputActionType restriction);
     167
    160168    /** Returns whether the action with passed @a type is allowed in the 'Devices' menu. */
    161169    bool isAllowedInMenuDevices(UIExtraDataMetaDefs::RuntimeMenuDevicesActionType type) const;
     
    211219    /** Update 'Machine' menu routine. */
    212220    void updateMenuMachine();
    213     /** Update 'Machine' : 'Keyboard' menu routine. */
    214     void updateMenuMachineKeyboard();
    215     /** Update 'Machine' : 'Mouse' menu routine. */
    216     void updateMenuMachineMouse();
    217221    /** Update 'View' menu routine. */
    218222    void updateMenuView();
     
    227231    /** Update 'View' : 'Virtual Screen #' @a pMenu routine (Fullscreen, Seamless). */
    228232    void updateMenuViewMultiscreen(QMenu *pMenu);
     233    /** Update 'Input' menu routine. */
     234    void updateMenuInput();
     235    /** Update 'Input' : 'Keyboard' menu routine. */
     236    void updateMenuInputKeyboard();
     237    /** Update 'Input' : 'Mouse' menu routine. */
     238    void updateMenuInputMouse();
    229239    /** Update 'Devices' menu routine. */
    230240    void updateMenuDevices();
     
    267277    /** Holds restricted action types of the View menu. */
    268278    QMap<UIActionRestrictionLevel, UIExtraDataMetaDefs::RuntimeMenuViewActionType> m_restrictedActionsMenuView;
     279    /** Holds restricted action types of the Input menu. */
     280    QMap<UIActionRestrictionLevel, UIExtraDataMetaDefs::RuntimeMenuInputActionType> m_restrictedActionsMenuInput;
    269281    /** Holds restricted action types of the Devices menu. */
    270282    QMap<UIActionRestrictionLevel, UIExtraDataMetaDefs::RuntimeMenuDevicesActionType> m_restrictedActionsMenuDevices;
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp

    r52894 r52937  
    539539
    540540    /* Update action state: */
    541     QAction *pAction = actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration);
     541    QAction *pAction = actionPool()->action(UIActionIndexRT_M_Input_M_Mouse_T_Integration);
    542542    pAction->setEnabled(fIsMouseSupportsAbsolute && fIsMouseSupportsRelative && !fIsMouseHostCursorNeeded);
    543543    if (fIsMouseHostCursorNeeded)
     
    851851
    852852    /* Move actions into running actions group: */
    853     m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCAD));
    854 #ifdef Q_WS_X11
    855     m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCABS));
    856 #endif
    857853    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_Reset));
    858854    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_Shutdown));
     
    862858    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_View_T_GuestAutoresize));
    863859    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_View_S_AdjustWindow));
     860    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_S_TypeCAD));
     861#ifdef Q_WS_X11
     862    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_S_TypeCABS));
     863#endif /* Q_WS_X11 */
    864864
    865865    /* Move actions into running-n-paused actions group: */
     
    869869    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_TakeScreenshot));
    870870    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowInformation));
    871     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard));
    872     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard_S_Settings));
    873     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse));
    874     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration));
    875871    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_T_Pause));
    876872    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar));
     
    880876    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_S_Settings));
    881877    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_T_Visibility));
     878    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard));
     879    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard_S_Settings));
     880    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Mouse));
     881    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Mouse_T_Integration));
    882882    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Devices_M_HardDrives));
    883883    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Devices_M_HardDrives_S_Settings));
     
    914914    connect(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowInformation), SIGNAL(triggered()),
    915915            this, SLOT(sltShowInformationDialog()));
    916     connect(actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard_S_Settings), SIGNAL(triggered()),
    917             this, SLOT(sltShowKeyboardSettings()));
    918     connect(actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration), SIGNAL(toggled(bool)),
    919             this, SLOT(sltToggleMouseIntegration(bool)));
    920     connect(actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCAD), SIGNAL(triggered()),
    921             this, SLOT(sltTypeCAD()));
    922 #ifdef Q_WS_X11
    923     connect(actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCABS), SIGNAL(triggered()),
    924             this, SLOT(sltTypeCABS()));
    925 #endif
    926916    connect(actionPool()->action(UIActionIndexRT_M_Machine_T_Pause), SIGNAL(toggled(bool)),
    927917            this, SLOT(sltPause(bool)));
     
    947937    connect(actionPool()->action(UIActionIndexRT_M_View_S_AdjustWindow), SIGNAL(triggered()),
    948938            this, SLOT(sltAdjustWindow()));
     939
     940    /* 'Input' actions connections: */
     941    connect(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard_S_Settings), SIGNAL(triggered()),
     942            this, SLOT(sltShowKeyboardSettings()));
     943    connect(actionPool()->action(UIActionIndexRT_M_Input_M_Mouse_T_Integration), SIGNAL(toggled(bool)),
     944            this, SLOT(sltToggleMouseIntegration(bool)));
     945    connect(actionPool()->action(UIActionIndexRT_M_Input_S_TypeCAD), SIGNAL(triggered()),
     946            this, SLOT(sltTypeCAD()));
     947#ifdef Q_WS_X11
     948    connect(actionPool()->action(UIActionIndexRT_M_Input_S_TypeCABS), SIGNAL(triggered()),
     949            this, SLOT(sltTypeCABS()));
     950#endif /* Q_WS_X11 */
    949951
    950952    /* 'Devices' actions connections: */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.cpp

    r52730 r52937  
    100100    /** Prepare 'View' menu routine. */
    101101    void prepareMenuView();
     102    /** Prepare 'Input' menu routine. */
     103    void prepareMenuInput();
    102104    /** Prepare 'Devices' menu routine. */
    103105    void prepareMenuDevices();
     
    119121    /** Updates 'View' menu routine. */
    120122    void updateMenuView();
     123    /** Updates 'Input' menu routine. */
     124    void updateMenuInput();
    121125    /** Updates 'Devices' menu routine. */
    122126    void updateMenuDevices();
     
    231235            /* Save updated menu-bar restrictions: */
    232236            gEDataManager->setRestrictedRuntimeMenuViewActionTypes(restrictions, vboxGlobal().managedVMUuid());
     237            break;
     238        }
     239        case UIExtraDataMetaDefs::MenuType_Input:
     240        {
     241            /* Get sender type: */
     242            const UIExtraDataMetaDefs::RuntimeMenuInputActionType type =
     243                static_cast<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(pAction->property("type").toInt());
     244            /* Load current menu-bar restrictions: */
     245            UIExtraDataMetaDefs::RuntimeMenuInputActionType restrictions = gEDataManager->restrictedRuntimeMenuInputActionTypes(vboxGlobal().managedVMUuid());
     246            /* Invert restriction for sender type: */
     247            restrictions = (UIExtraDataMetaDefs::RuntimeMenuInputActionType)(restrictions ^ type);
     248            /* Save updated menu-bar restrictions: */
     249            gEDataManager->setRestrictedRuntimeMenuInputActionTypes(restrictions, vboxGlobal().managedVMUuid());
    233250            break;
    234251        }
     
    335352    prepareMenuMachine();
    336353    prepareMenuView();
     354    prepareMenuInput();
    337355    prepareMenuDevices();
    338356#ifdef VBOX_WITH_DEBUGGER_GUI
     
    498516        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_S_ShowInformation));
    499517        pMenu->addSeparator();
    500         prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard));
    501         prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration));
    502         pMenu->addSeparator();
    503         prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCAD));
    504 #ifdef Q_WS_X11
    505         prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCABS));
    506 #endif /* Q_WS_X11 */
    507         pMenu->addSeparator();
    508518        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_T_Pause));
    509519        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_S_Reset));
     
    532542//        prepareCopiedAction(pMenu, Resize);
    533543//        prepareCopiedAction(pMenu, MultiScreen);
     544    }
     545}
     546
     547void UIMenuBarEditorWidget::prepareMenuInput()
     548{
     549    /* Copy menu: */
     550    QMenu *pMenu = prepareCopiedMenu(actionPool()->action(UIActionIndexRT_M_Input));
     551    AssertPtrReturnVoid(pMenu);
     552    {
     553        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard));
     554        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Input_M_Mouse_T_Integration));
    534555    }
    535556}
     
    629650    updateMenuMachine();
    630651    updateMenuView();
     652    updateMenuInput();
    631653    updateMenuDevices();
    632654#ifdef VBOX_WITH_DEBUGGER_GUI
     
    722744        /* Update action 'checked' state: */
    723745        m_actions.value(strKey)->setChecked(!(restrictionsMenuView & enumValue));
     746    }
     747}
     748
     749void UIMenuBarEditorWidget::updateMenuInput()
     750{
     751    /* Recache menu-bar configuration: */
     752    const UIExtraDataMetaDefs::RuntimeMenuInputActionType restrictionsMenuInput = gEDataManager->restrictedRuntimeMenuInputActionTypes(vboxGlobal().managedVMUuid());
     753    /* Get static meta-object: */
     754    const QMetaObject &smo = UIExtraDataMetaDefs::staticMetaObject;
     755
     756    /* We have UIExtraDataMetaDefs::RuntimeMenuInputActionType enum registered, so we can enumerate it: */
     757    const int iEnumIndex = smo.indexOfEnumerator("RuntimeMenuInputActionType");
     758    QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
     759    /* Handle other enum-values: */
     760    for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
     761    {
     762        /* Get iterated enum-value: */
     763        const UIExtraDataMetaDefs::RuntimeMenuInputActionType enumValue =
     764            static_cast<const UIExtraDataMetaDefs::RuntimeMenuInputActionType>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
     765        /* Skip RuntimeMenuInputActionType_Invalid & RuntimeMenuInputActionType_All enum-value: */
     766        if (enumValue == UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid ||
     767            enumValue == UIExtraDataMetaDefs::RuntimeMenuInputActionType_All)
     768            continue;
     769        /* Which key required action registered under? */
     770        const QString strKey = gpConverter->toInternalString(enumValue);
     771        if (!m_actions.contains(strKey))
     772            continue;
     773        /* Update action 'checked' state: */
     774        m_actions.value(strKey)->setChecked(!(restrictionsMenuInput & enumValue));
    724775    }
    725776}
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp

    r52796 r52937  
    192192        case IndicatorType_Display:       pAction = actionPool()->action(UIActionIndexRT_M_ViewPopup);                break;
    193193        case IndicatorType_VideoCapture:  pAction = actionPool()->action(UIActionIndexRT_M_Devices_M_VideoCapture);   break;
    194         case IndicatorType_Mouse:         pAction = actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse);          break;
    195         case IndicatorType_Keyboard:      pAction = actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard);       break;
     194        case IndicatorType_Mouse:         pAction = actionPool()->action(UIActionIndexRT_M_Input_M_Mouse);            break;
     195        case IndicatorType_Keyboard:      pAction = actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard);         break;
    196196        default: break;
    197197    }
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp

    r52730 r52937  
    210210
    211211    /* Restrict 'Disable Mouse Integration' action for 'Machine' menu: */
    212     actionPool()->toRuntime()->setRestrictionForMenuMachine(UIActionRestrictionLevel_Logic,
    213                                                             UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration);
     212    actionPool()->toRuntime()->setRestrictionForMenuInput(UIActionRestrictionLevel_Logic,
     213                                                          UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration);
    214214    /* Restrict 'Adjust Window', 'Guest Autoresize', 'Status Bar' and 'Resize' actions for 'View' menu: */
    215215    actionPool()->toRuntime()->setRestrictionForMenuView(UIActionRestrictionLevel_Logic,
     
    341341
    342342    /* Allow 'Disable Mouse Integration' action for 'Machine' menu: */
    343     actionPool()->toRuntime()->setRestrictionForMenuMachine(UIActionRestrictionLevel_Logic,
    344                                                             UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Invalid);
     343    actionPool()->toRuntime()->setRestrictionForMenuInput(UIActionRestrictionLevel_Logic,
     344                                                          UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid);
    345345    /* Allow 'Adjust Window', 'Guest Autoresize', 'Status Bar' and 'Resize' actions for 'View' menu: */
    346346    actionPool()->toRuntime()->setRestrictionForMenuView(UIActionRestrictionLevel_Logic,
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