VirtualBox

Changeset 52152 in vbox


Ignore:
Timestamp:
Jul 23, 2014 3:18:04 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95186
Message:

FE/Qt: 7462: Runtime UI: Menu-bar, menu cleanup/rework (part 07).

Location:
trunk/src/VBox/Frontends/VirtualBox/src/globals
Files:
2 edited

Legend:

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

    r52151 r52152  
    4848    QAction *m_pAction;
    4949};
    50 
    51 
    52 UIAction::UIAction(UIActionPool *pParent, UIActionType type)
    53     : QAction(pParent)
    54     , m_pActionPool(pParent)
    55     , m_type(type)
    56     , m_actionPoolType(pParent->type())
    57     , m_fShortcutHidden(false)
    58 {
    59     /* By default there is no specific menu role.
    60      * It will be set explicitly later. */
    61     setMenuRole(QAction::NoRole);
    62 }
    63 
    64 UIActionPolymorphic* UIAction::toActionPolymorphic()
    65 {
    66     return qobject_cast<UIActionPolymorphic*>(this);
    67 }
    68 
    69 void UIAction::setName(const QString &strName)
    70 {
    71     /* Remember internal name: */
    72     m_strName = strName;
    73     /* Update text according new name: */
    74     updateText();
    75 }
    76 
    77 void UIAction::setShortcut(const QKeySequence &shortcut)
    78 {
    79     /* Only for selector's action-pool: */
    80     if (m_actionPoolType == UIActionPoolType_Selector)
    81     {
    82         /* If shortcut is visible: */
    83         if (!m_fShortcutHidden)
    84             /* Call to base-class: */
    85             QAction::setShortcut(shortcut);
    86         /* Remember shortcut: */
    87         m_shortcut = shortcut;
    88     }
    89     /* Update text according new shortcut: */
    90     updateText();
    91 }
    92 
    93 void UIAction::showShortcut()
    94 {
    95     m_fShortcutHidden = false;
    96     if (!m_shortcut.isEmpty())
    97         QAction::setShortcut(m_shortcut);
    98 }
    99 
    100 void UIAction::hideShortcut()
    101 {
    102     m_fShortcutHidden = true;
    103     if (!shortcut().isEmpty())
    104         QAction::setShortcut(QKeySequence());
    105 }
    106 
    107 QString UIAction::nameInMenu() const
    108 {
    109     /* Action-name format depends on action-pool type: */
    110     switch (m_actionPoolType)
    111     {
    112         /* Unchanged name for Selector UI: */
    113         case UIActionPoolType_Selector: return name();
    114         /* Filtered name for Runtime UI: */
    115         case UIActionPoolType_Runtime: return VBoxGlobal::removeAccelMark(name());
    116     }
    117     /* Nothing by default: */
    118     return QString();
    119 }
    120 
    121 void UIAction::updateText()
    122 {
    123     /* Action-text format depends on action-pool type: */
    124     switch (m_actionPoolType)
    125     {
    126         /* The same as menu name for Selector UI: */
    127         case UIActionPoolType_Selector:
    128             setText(nameInMenu());
    129             break;
    130         /* With shortcut appended for Runtime UI: */
    131         case UIActionPoolType_Runtime:
    132             setText(vboxGlobal().insertKeyToActionText(nameInMenu(),
    133                                                        gShortcutPool->shortcut(actionPool(), this).toString()));
    134             break;
    135     }
    136 }
    13750
    13851
     
    16780
    16881
     82UIAction::UIAction(UIActionPool *pParent, UIActionType type)
     83    : QAction(pParent)
     84    , m_pActionPool(pParent)
     85    , m_type(type)
     86    , m_actionPoolType(pParent->type())
     87    , m_fShortcutHidden(false)
     88{
     89    /* By default there is no specific menu role.
     90     * It will be set explicitly later. */
     91    setMenuRole(QAction::NoRole);
     92}
     93
     94UIActionPolymorphic* UIAction::toActionPolymorphic()
     95{
     96    return qobject_cast<UIActionPolymorphic*>(this);
     97}
     98
     99void UIAction::setName(const QString &strName)
     100{
     101    /* Remember internal name: */
     102    m_strName = strName;
     103    /* Update text according new name: */
     104    updateText();
     105}
     106
     107void UIAction::setShortcut(const QKeySequence &shortcut)
     108{
     109    /* Only for selector's action-pool: */
     110    if (m_actionPoolType == UIActionPoolType_Selector)
     111    {
     112        /* If shortcut is visible: */
     113        if (!m_fShortcutHidden)
     114            /* Call to base-class: */
     115            QAction::setShortcut(shortcut);
     116        /* Remember shortcut: */
     117        m_shortcut = shortcut;
     118    }
     119    /* Update text according new shortcut: */
     120    updateText();
     121}
     122
     123void UIAction::showShortcut()
     124{
     125    m_fShortcutHidden = false;
     126    if (!m_shortcut.isEmpty())
     127        QAction::setShortcut(m_shortcut);
     128}
     129
     130void UIAction::hideShortcut()
     131{
     132    m_fShortcutHidden = true;
     133    if (!shortcut().isEmpty())
     134        QAction::setShortcut(QKeySequence());
     135}
     136
     137QString UIAction::nameInMenu() const
     138{
     139    /* Action-name format depends on action-pool type: */
     140    switch (m_actionPoolType)
     141    {
     142        /* Unchanged name for Selector UI: */
     143        case UIActionPoolType_Selector: return name();
     144        /* Filtered name for Runtime UI: */
     145        case UIActionPoolType_Runtime: return VBoxGlobal::removeAccelMark(name());
     146    }
     147    /* Nothing by default: */
     148    return QString();
     149}
     150
     151void UIAction::updateText()
     152{
     153    /* Action-text format depends on action-pool type: */
     154    switch (m_actionPoolType)
     155    {
     156        /* The same as menu name for Selector UI: */
     157        case UIActionPoolType_Selector:
     158            setText(nameInMenu());
     159            break;
     160        /* With shortcut appended for Runtime UI: */
     161        case UIActionPoolType_Runtime:
     162            setText(vboxGlobal().insertKeyToActionText(nameInMenu(),
     163                                                       gShortcutPool->shortcut(actionPool(), this).toString()));
     164            break;
     165    }
     166}
     167
     168
     169UIActionMenu::UIActionMenu(UIActionPool *pParent,
     170                           const QString &strIcon, const QString &strIconDis)
     171    : UIAction(pParent, UIActionType_Menu)
     172{
     173    if (!strIcon.isNull())
     174        setIcon(UIIconPool::iconSet(strIcon, strIconDis));
     175    setMenu(new UIMenu);
     176}
     177
     178UIActionMenu::UIActionMenu(UIActionPool *pParent,
     179                           const QIcon &icon)
     180    : UIAction(pParent, UIActionType_Menu)
     181{
     182    if (!icon.isNull())
     183        setIcon(icon);
     184    setMenu(new UIMenu);
     185}
     186
     187void UIActionMenu::setShowToolTip(bool fShowToolTip)
     188{
     189    qobject_cast<UIMenu*>(menu())->setShowToolTip(fShowToolTip);
     190}
     191
     192void UIActionMenu::updateText()
     193{
     194    setText(nameInMenu());
     195}
     196
     197
    169198UIActionSimple::UIActionSimple(UIActionPool *pParent,
    170199                               const QString &strIcon /* = QString() */, const QString &strIconDisabled /* = QString() */)
     
    191220
    192221
    193 UIActionPolymorphic::UIActionPolymorphic(UIActionPool *pParent,
    194                              const QString &strIcon /* = QString() */, const QString &strIconDisabled /* = QString() */)
    195     : UIAction(pParent, UIActionType_Polymorphic)
    196     , m_iState(0)
    197 {
    198     if (!strIcon.isNull())
    199         setIcon(UIIconPool::iconSet(strIcon, strIconDisabled));
    200 }
    201 
    202 UIActionPolymorphic::UIActionPolymorphic(UIActionPool *pParent,
    203                              const QString &strIconNormal, const QString &strIconSmall,
    204                              const QString &strIconNormalDisabled, const QString &strIconSmallDisabled)
    205     : UIAction(pParent, UIActionType_Polymorphic)
    206     , m_iState(0)
    207 {
    208     setIcon(UIIconPool::iconSetFull(strIconNormal, strIconSmall, strIconNormalDisabled, strIconSmallDisabled));
    209 }
    210 
    211 UIActionPolymorphic::UIActionPolymorphic(UIActionPool *pParent,
    212                              const QIcon& icon)
    213     : UIAction(pParent, UIActionType_Polymorphic)
    214     , m_iState(0)
    215 {
    216     if (!icon.isNull())
    217         setIcon(icon);
    218 }
    219 
    220 
    221222UIActionToggle::UIActionToggle(UIActionPool *pParent,
    222223                               const QString &strIcon /* = QString() */, const QString &strIconDisabled /* = QString() */)
     
    252253
    253254
    254 UIActionMenu::UIActionMenu(UIActionPool *pParent,
    255                            const QString &strIcon, const QString &strIconDis)
    256     : UIAction(pParent, UIActionType_Menu)
     255UIActionPolymorphic::UIActionPolymorphic(UIActionPool *pParent,
     256                                         const QString &strIcon /* = QString() */, const QString &strIconDisabled /* = QString() */)
     257    : UIAction(pParent, UIActionType_Polymorphic)
     258    , m_iState(0)
    257259{
    258260    if (!strIcon.isNull())
    259         setIcon(UIIconPool::iconSet(strIcon, strIconDis));
    260     setMenu(new UIMenu);
    261 }
    262 
    263 UIActionMenu::UIActionMenu(UIActionPool *pParent,
    264                            const QIcon &icon)
    265     : UIAction(pParent, UIActionType_Menu)
     261        setIcon(UIIconPool::iconSet(strIcon, strIconDisabled));
     262}
     263
     264UIActionPolymorphic::UIActionPolymorphic(UIActionPool *pParent,
     265                                         const QString &strIconNormal, const QString &strIconSmall,
     266                                         const QString &strIconNormalDisabled, const QString &strIconSmallDisabled)
     267    : UIAction(pParent, UIActionType_Polymorphic)
     268    , m_iState(0)
     269{
     270    setIcon(UIIconPool::iconSetFull(strIconNormal, strIconSmall, strIconNormalDisabled, strIconSmallDisabled));
     271}
     272
     273UIActionPolymorphic::UIActionPolymorphic(UIActionPool *pParent,
     274                                         const QIcon& icon)
     275    : UIAction(pParent, UIActionType_Polymorphic)
     276    , m_iState(0)
    266277{
    267278    if (!icon.isNull())
    268279        setIcon(icon);
    269     setMenu(new UIMenu);
    270 }
    271 
    272 void UIActionMenu::setShowToolTip(bool fShowToolTip)
    273 {
    274     qobject_cast<UIMenu*>(menu())->setShowToolTip(fShowToolTip);
    275 }
    276 
    277 void UIActionMenu::updateText()
    278 {
    279     setText(nameInMenu());
    280280}
    281281
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.h

    r52151 r52152  
    4040enum UIActionType
    4141{
     42    UIActionType_Menu,
    4243    UIActionType_Simple,
    43     UIActionType_Polymorphic,
    4444    UIActionType_Toggle,
    45     UIActionType_Menu
     45    UIActionType_Polymorphic
    4646};
    4747
     
    6969
    7070
     71/** QMenu extension
     72  * allowing to show tool-tips. */
     73class UIMenu : public QMenu
     74{
     75    Q_OBJECT;
     76
     77public:
     78
     79    /** Constructor. */
     80    UIMenu();
     81
     82    /** Defines whether tool-tip should be shown. */
     83    void setShowToolTip(bool fShowToolTips) { m_fShowToolTip = fShowToolTips; }
     84
     85protected:
     86
     87    /** General event handler. */
     88    virtual bool event(QEvent *pEvent);
     89
     90private:
     91
     92    /** Holds whether tool-tip should be shown. */
     93    bool m_fShowToolTip;
     94};
     95
     96
    7197/** Abstract QAction extension. */
    7298class UIAction : public QAction
     
    135161
    136162
    137 /** QMenu extension
    138   * allowing to show tool-tips. */
    139 class UIMenu : public QMenu
    140 {
    141     Q_OBJECT;
    142 
    143 public:
    144 
    145     /** Constructor. */
    146     UIMenu();
     163/** Abstract UIAction extension for 'Menu' action type. */
     164class UIActionMenu : public UIAction
     165{
     166    Q_OBJECT;
     167
     168protected:
     169
     170    /** Constructor, taking normal icon name and name for disabled analog. */
     171    UIActionMenu(UIActionPool *pParent,
     172                 const QString &strIcon = QString(), const QString &strIconDis = QString());
     173    /** Constructor, taking copy of existing icon. */
     174    UIActionMenu(UIActionPool *pParent,
     175                 const QIcon &icon);
    147176
    148177    /** Defines whether tool-tip should be shown. */
    149     void setShowToolTip(bool fShowToolTips) { m_fShowToolTip = fShowToolTips; }
    150 
    151 protected:
    152 
    153     /** General event handler. */
    154     virtual bool event(QEvent *pEvent);
    155 
    156 private:
    157 
    158     /** Holds whether tool-tip should be shown. */
    159     bool m_fShowToolTip;
     178    void setShowToolTip(bool fShowToolTip);
     179
     180private:
     181
     182    /** Updates action text accordingly. */
     183    virtual void updateText();
    160184};
    161185
     
    181205
    182206
     207/** Abstract UIAction extension for 'Toggle' action type. */
     208class UIActionToggle : public UIAction
     209{
     210    Q_OBJECT;
     211
     212protected:
     213
     214    /** Constructor, taking normal icon name and name for disabled analog. */
     215    UIActionToggle(UIActionPool *pParent,
     216                   const QString &strIcon = QString(), const QString &strIconDisabled = QString());
     217    /** Constructor, taking normal on/off icon names and names for disabled analogs. */
     218    UIActionToggle(UIActionPool *pParent,
     219                   const QString &strIconOn, const QString &strIconOff,
     220                   const QString &strIconOnDisabled, const QString &strIconOffDisabled);
     221    /** Constructor, taking copy of existing icon. */
     222    UIActionToggle(UIActionPool *pParent,
     223                   const QIcon &icon);
     224
     225private:
     226
     227    /** Prepare routine. */
     228    void prepare();
     229};
     230
     231
    183232/** Abstract UIAction extension for 'Polymorphic' action type. */
    184233class UIActionPolymorphic : public UIAction
     
    213262
    214263
    215 /** Abstract UIAction extension for 'Toggle' action type. */
    216 class UIActionToggle : public UIAction
    217 {
    218     Q_OBJECT;
    219 
    220 protected:
    221 
    222     /** Constructor, taking normal icon name and name for disabled analog. */
    223     UIActionToggle(UIActionPool *pParent,
    224                    const QString &strIcon = QString(), const QString &strIconDisabled = QString());
    225     /** Constructor, taking normal on/off icon names and names for disabled analogs. */
    226     UIActionToggle(UIActionPool *pParent,
    227                    const QString &strIconOn, const QString &strIconOff,
    228                    const QString &strIconOnDisabled, const QString &strIconOffDisabled);
    229     /** Constructor, taking copy of existing icon. */
    230     UIActionToggle(UIActionPool *pParent,
    231                    const QIcon &icon);
    232 
    233 private:
    234 
    235     /** Prepare routine. */
    236     void prepare();
    237 };
    238 
    239 
    240 /** Abstract UIAction extension for 'Menu' action type. */
    241 class UIActionMenu : public UIAction
    242 {
    243     Q_OBJECT;
    244 
    245 protected:
    246 
    247     /** Constructor, taking normal icon name and name for disabled analog. */
    248     UIActionMenu(UIActionPool *pParent,
    249                  const QString &strIcon = QString(), const QString &strIconDis = QString());
    250     /** Constructor, taking copy of existing icon. */
    251     UIActionMenu(UIActionPool *pParent,
    252                  const QIcon &icon);
    253 
    254     /** Defines whether tool-tip should be shown. */
    255     void setShowToolTip(bool fShowToolTip);
    256 
    257 private:
    258 
    259     /** Updates action text accordingly. */
    260     virtual void updateText();
    261 };
    262 
    263 
    264264/** Abstract QObject extension
    265265  * representing action-pool singleton. */
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