VirtualBox

Ignore:
Timestamp:
Apr 24, 2015 7:27:41 AM (10 years ago)
Author:
vboxsync
Message:

FE/Qt: Action-pool: Support for polymorphic menu actions which able to be simple actions or menu actions with various arguments depending on state.

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

Legend:

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

    r55343 r55415  
    120120}
    121121
     122UIActionPolymorphicMenu* UIAction::toActionPolymorphicMenu()
     123{
     124    return qobject_cast<UIActionPolymorphicMenu*>(this);
     125}
     126
    122127void UIAction::setName(const QString &strName)
    123128{
     
    313318    if (!icon.isNull())
    314319        setIcon(icon);
     320}
     321
     322
     323UIActionPolymorphicMenu::UIActionPolymorphicMenu(UIActionPool *pParent,
     324                                                 const QString &strIcon, const QString &strIconDisabled)
     325    : UIAction(pParent, UIActionType_PolymorphicMenu)
     326    , m_pMenu(0)
     327    , m_iState(0)
     328{
     329    if (!strIcon.isNull())
     330        setIcon(UIIconPool::iconSet(strIcon, strIconDisabled));
     331    prepare();
     332}
     333
     334UIActionPolymorphicMenu::UIActionPolymorphicMenu(UIActionPool *pParent,
     335                                                 const QString &strIconNormal, const QString &strIconSmall,
     336                                                 const QString &strIconNormalDisabled, const QString &strIconSmallDisabled)
     337    : UIAction(pParent, UIActionType_PolymorphicMenu)
     338    , m_pMenu(0)
     339    , m_iState(0)
     340{
     341    if (!strIconNormal.isNull())
     342        setIcon(UIIconPool::iconSetFull(strIconNormal, strIconSmall, strIconNormalDisabled, strIconSmallDisabled));
     343    prepare();
     344}
     345
     346UIActionPolymorphicMenu::UIActionPolymorphicMenu(UIActionPool *pParent,
     347                                                 const QIcon &icon)
     348    : UIAction(pParent, UIActionType_PolymorphicMenu)
     349    , m_pMenu(0)
     350    , m_iState(0)
     351{
     352    if (!icon.isNull())
     353        setIcon(icon);
     354    prepare();
     355}
     356
     357UIActionPolymorphicMenu::~UIActionPolymorphicMenu()
     358{
     359    /* Hide menu: */
     360    hideMenu();
     361    /* Delete menu: */
     362    delete m_pMenu;
     363    m_pMenu = 0;
     364}
     365
     366void UIActionPolymorphicMenu::setShowToolTip(bool fShowToolTip)
     367{
     368    qobject_cast<UIMenu*>(menu())->setShowToolTip(fShowToolTip);
     369}
     370
     371void UIActionPolymorphicMenu::showMenu()
     372{
     373    /* Show menu if necessary: */
     374    if (!menu())
     375        setMenu(m_pMenu);
     376}
     377
     378void UIActionPolymorphicMenu::hideMenu()
     379{
     380    /* Hide menu if necessary: */
     381    if (menu())
     382        setMenu(0);
     383}
     384
     385void UIActionPolymorphicMenu::prepare()
     386{
     387    /* Create menu: */
     388    m_pMenu = new UIMenu;
     389    AssertPtrReturnVoid(m_pMenu);
     390    {
     391        /* Prepare menu: */
     392        connect(m_pMenu, SIGNAL(aboutToShow()),
     393                parent(), SLOT(sltHandleMenuPrepare()));
     394        /* Show menu: */
     395        showMenu();
     396    }
     397}
     398
     399void UIActionPolymorphicMenu::updateText()
     400{
     401    setText(nameInMenu());
    315402}
    316403
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.h

    r55401 r55415  
    2929/* Forward declarations: */
    3030class UIActionPolymorphic;
     31class UIActionPolymorphicMenu;
    3132class UIActionPool;
    3233class UIActionPoolRuntime;
     
    4748    UIActionType_Simple,
    4849    UIActionType_Toggle,
    49     UIActionType_Polymorphic
     50    UIActionType_Polymorphic,
     51    UIActionType_PolymorphicMenu
    5052};
    5153
     
    155157    /** Casts action to polymorphic-action. */
    156158    UIActionPolymorphic* toActionPolymorphic();
     159    /** Casts action to polymorphic-menu-action. */
     160    UIActionPolymorphicMenu* toActionPolymorphicMenu();
    157161
    158162    /** Returns current action name. */
     
    312316private:
    313317
     318    /** Holds current action state. */
     319    int m_iState;
     320};
     321
     322
     323/** Abstract UIAction extension for 'Polymorphic Menu' action type. */
     324class UIActionPolymorphicMenu : public UIAction
     325{
     326    Q_OBJECT;
     327
     328public:
     329
     330    /** Returns current action state. */
     331    int state() const { return m_iState; }
     332    /** Defines current action state. */
     333    void setState(int iState) { m_iState = iState; retranslateUi(); }
     334
     335protected:
     336
     337    /** Constructor, taking normal icon name and name for disabled analog. */
     338    UIActionPolymorphicMenu(UIActionPool *pParent,
     339                            const QString &strIcon = QString(), const QString &strIconDis = QString());
     340    /** Constructor, taking normal, small icon names and names for disabled analogs. */
     341    UIActionPolymorphicMenu(UIActionPool *pParent,
     342                            const QString &strIconNormal, const QString &strIconSmall,
     343                            const QString &strIconNormalDisabled, const QString &strIconSmallDisabled);
     344    /** Constructor, taking copy of existing icon. */
     345    UIActionPolymorphicMenu(UIActionPool *pParent,
     346                            const QIcon &icon);
     347
     348    /** Destructor. */
     349    ~UIActionPolymorphicMenu();
     350
     351    /** Defines whether tool-tip should be shown. */
     352    void setShowToolTip(bool fShowToolTip);
     353
     354    /** Show menu. */
     355    void showMenu();
     356    /** Hide menu. */
     357    void hideMenu();
     358
     359private:
     360
     361    /** Prepare routine. */
     362    void prepare();
     363
     364    /** Updates action text accordingly. */
     365    virtual void updateText();
     366
     367private:
     368
     369    /** Holds the menu instance. */
     370    UIMenu *m_pMenu;
    314371    /** Holds current action state. */
    315372    int m_iState;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette