VirtualBox

Changeset 77366 in vbox


Ignore:
Timestamp:
Feb 19, 2019 4:00:39 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
128908
Message:

FE/Qt: bugref:9373: VirtualBox Manager: Chooser pane: Integrate pin button for making Global Tools item favorite.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc

    r77215 r77366  
    146146        <file alias="extension_pack_uninstall_disabled_16px.png">images/extension_pack_uninstall_disabled_16px.png</file>
    147147        <file alias="extension_pack_warning_16px.png">images/extension_pack_warning_16px.png</file>
     148        <file alias="favorite_24px.png">images/favorite_24px.png</file>
     149        <file alias="favorite_pressed_24px.png">images/favorite_pressed_24px.png</file>
    148150        <file alias="fd_16px.png">images/fd_16px.png</file>
    149151        <file alias="fd_add_16px.png">images/fd_add_16px.png</file>
  • trunk/src/VBox/Frontends/VirtualBox/VirtualBox1_x2.qrc

    r77215 r77366  
    146146        <file alias="extension_pack_uninstall_disabled_16px_x2.png">images/x2/extension_pack_uninstall_disabled_16px_x2.png</file>
    147147        <file alias="extension_pack_warning_16px_x2.png">images/x2/extension_pack_warning_16px_x2.png</file>
     148        <file alias="favorite_24px_x2.png">images/x2/favorite_24px_x2.png</file>
     149        <file alias="favorite_pressed_24px_x2.png">images/x2/favorite_pressed_24px_x2.png</file>
    148150        <file alias="fd_16px_x2.png">images/x2/fd_16px_x2.png</file>
    149151        <file alias="fd_add_16px_x2.png">images/x2/fd_add_16px_x2.png</file>
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserHandlerMouse.cpp

    r77364 r77366  
    8080                            pClickedItem = pGlobalItem;
    8181                    }
     82                    else
     83                    if (   pGlobalItem->isPinButtonArea(itemCursorPos)
     84                        && (   model()->currentItem() == pGlobalItem
     85                            || pGlobalItem->isHovered()))
     86                        model()->handlePinButtonClick(pGlobalItem);
    8287                    else
    8388                        pClickedItem = pGlobalItem;
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.cpp

    r77346 r77366  
    291291}
    292292
     293void UIChooserItem::setFavorite(bool fFavorite)
     294{
     295    m_fFavorite = fFavorite;
     296    if (m_pParent)
     297        m_pParent->toGroupItem()->updateFavorites();
     298}
     299
    293300UIChooserItemGroup *UIChooserItem::toGroupItem()
    294301{
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.h

    r77346 r77366  
    118118        /** Returns whether item is temporary. */
    119119        bool isTemporary() const { return m_fTemporary; }
     120
     121        /** Defines whether item is @a fFavorite. */
     122        virtual void setFavorite(bool fFavorite);
    120123
    121124        /** Casts item to group one. */
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGlobal.cpp

    r77365 r77366  
    7676}
    7777
     78void UIChooserItemGlobal::setFavorite(bool fFavorite)
     79{
     80    /* Call to base-class: */
     81    UIChooserItem::setFavorite(fFavorite);
     82
     83    /* Update pin-pixmap: */
     84    updatePinPixmap();
     85}
     86
    7887bool UIChooserItemGlobal::isToolButtonArea(const QPoint &position, int iMarginMultiplier /* = 1 */) const
    7988{
     
    94103}
    95104
     105bool UIChooserItemGlobal::isPinButtonArea(const QPoint &position, int iMarginMultiplier /* = 1 */) const
     106{
     107    const int iFullWidth = geometry().width();
     108    const int iFullHeight = geometry().height();
     109    const int iMargin = data(GlobalItemData_Margin).toInt();
     110    const int iSpacing = data(GlobalItemData_Spacing).toInt();
     111    const int iButtonMargin = data(GlobalItemData_ButtonMargin).toInt();
     112    const int iPinPixmapX = iFullWidth - iMargin - 1
     113                            - m_toolPixmap.width() / m_toolPixmap.devicePixelRatio()
     114                            - iSpacing
     115                            - m_pinPixmap.width() / m_pinPixmap.devicePixelRatio();
     116    const int iPinPixmapY = (iFullHeight - m_pinPixmap.height() / m_pinPixmap.devicePixelRatio()) / 2;
     117    QRect rect = QRect(iPinPixmapX,
     118                       iPinPixmapY,
     119                       m_pinPixmap.width() / m_pinPixmap.devicePixelRatio(),
     120                       m_pinPixmap.height() / m_pinPixmap.devicePixelRatio());
     121    rect.adjust(-iMarginMultiplier * iButtonMargin, -iMarginMultiplier * iButtonMargin,
     122                 iMarginMultiplier * iButtonMargin,  iMarginMultiplier * iButtonMargin);
     123    return rect.contains(position);
     124}
     125
    96126void UIChooserItemGlobal::setHeightHint(int iHint)
    97127{
     
    295325                       m_iMinimumNameWidth +
    296326                       iSpacing +
    297                        m_toolPixmapSize.width());
     327                       m_toolPixmapSize.width() +
     328                       iSpacing +
     329                       m_pinPixmapSize.width());
    298330
    299331    /* Return result: */
     
    312344    int iContentHeight = qMax(m_pixmapSize.height(), m_visibleNameSize.height());
    313345    iContentHeight = qMax(iContentHeight, m_toolPixmapSize.height());
     346    iContentHeight = qMax(iContentHeight, m_pinPixmapSize.height());
    314347
    315348    /* If we have height hint: */
     
    454487    /* Update tool-pixmap: */
    455488    updateToolPixmap();
     489    /* Update pin-pixmap: */
     490    updatePinPixmap();
    456491}
    457492
     
    498533    {
    499534        m_toolPixmap = toolPixmap;
     535        update();
     536    }
     537}
     538
     539void UIChooserItemGlobal::updatePinPixmap()
     540{
     541    /* Determine icon metric: */
     542    const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize) * .75;
     543    /* Create new tool-pixmap and tool-pixmap size: */
     544    const QIcon pinIcon = UIIconPool::iconSet(isFavorite() ? ":/favorite_pressed_24px.png" : ":/favorite_24px.png");
     545    AssertReturnVoid(!pinIcon.isNull());
     546    const QSize pinPixmapSize = QSize(iIconMetric, iIconMetric);
     547    const QPixmap pinPixmap = pinIcon.pixmap(gpManager->windowHandle(), pinPixmapSize);
     548    /* Update linked values: */
     549    if (m_pinPixmapSize != pinPixmapSize)
     550    {
     551        m_pinPixmapSize = pinPixmapSize;
     552        updateGeometry();
     553    }
     554    if (m_pinPixmap.toImage() != pinPixmap.toImage())
     555    {
     556        m_pinPixmap = pinPixmap;
    500557        update();
    501558    }
     
    808865                    m_toolPixmap);
    809866    }
    810 }
     867
     868    /* Calculate indents: */
     869    iRightColumnIndent = iRightColumnIndent - m_toolPixmap.width() / m_toolPixmap.devicePixelRatio() - iSpacing;
     870
     871    /* Paint right column: */
     872    if (   model()->currentItem() == this
     873        || isHovered())
     874    {
     875        /* Prepare variables: */
     876        const int iPinPixmapX = iRightColumnIndent;
     877        const int iPinPixmapY = (iFullHeight - m_pinPixmap.height() / m_pinPixmap.devicePixelRatio()) / 2;
     878        QRect pinButtonRectangle = QRect(iPinPixmapX,
     879                                         iPinPixmapY,
     880                                         m_pinPixmap.width() / m_pinPixmap.devicePixelRatio(),
     881                                         m_pinPixmap.height() / m_pinPixmap.devicePixelRatio());
     882        pinButtonRectangle.adjust(- iButtonMargin, -iButtonMargin, iButtonMargin, iButtonMargin);
     883
     884        /* Paint pin button: */
     885        if (   isHovered()
     886            && isPinButtonArea(itemCursorPosition, 4))
     887            paintFlatButton(/* Painter: */
     888                            pPainter,
     889                            /* Button rectangle: */
     890                            pinButtonRectangle,
     891                            /* Cursor position: */
     892                            itemCursorPosition);
     893
     894        /* Paint pixmap: */
     895        paintPixmap(/* Painter: */
     896                    pPainter,
     897                    /* Point to paint in: */
     898                    QPoint(iPinPixmapX, iPinPixmapY),
     899                    /* Pixmap to paint: */
     900                    m_pinPixmap);
     901    }
     902}
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGlobal.h

    r77364 r77366  
    5151    /** @name Item stuff.
    5252      * @{ */
     53        /** Defines whether item is @a fFavorite. */
     54        virtual void setFavorite(bool fFavorite) /* override */;
     55
    5356        /** Returns whether passed @a position belongs to tool button area. */
    5457        bool isToolButtonArea(const QPoint &position, int iMarginMultiplier = 1) const;
     58        /** Returns whether passed @a position belongs to pin button area. */
     59        bool isPinButtonArea(const QPoint &position, int iMarginMultiplier = 1) const;
    5560    /** @} */
    5661
     
    213218        /** Updates tool pixmap. */
    214219        void updateToolPixmap();
     220        /** Updates pin pixmap. */
     221        void updatePinPixmap();
    215222        /** Updates minimum name width. */
    216223        void updateMinimumNameWidth();
     
    253260        /** Holds item tool pixmap. */
    254261        QPixmap  m_toolPixmap;
     262        /** Holds item pin pixmap. */
     263        QPixmap  m_pinPixmap;
    255264
    256265        /** Holds item name. */
     
    271280        /** Holds tool pixmap size. */
    272281        QSize  m_toolPixmapSize;
     282        /** Holds pin pixmap size. */
     283        QSize  m_pinPixmapSize;
    273284        /** Holds visible name size. */
    274285        QSize  m_visibleNameSize;
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.cpp

    r77346 r77366  
    312312}
    313313
     314void UIChooserItemGroup::updateFavorites()
     315{
     316    /* Global items only for now, move items to corresponding layout: */
     317    foreach (UIChooserItem *pItem, items(UIChooserItemType_Global))
     318        if (pItem->isFavorite())
     319        {
     320            for (int iIndex = 0; iIndex < m_pLayoutGlobal->count(); ++iIndex)
     321                if (m_pLayoutGlobal->itemAt(iIndex) == pItem)
     322                    m_pLayoutFavorite->addItem(pItem);
     323        }
     324        else
     325        {
     326            for (int iIndex = 0; iIndex < m_pLayoutFavorite->count(); ++iIndex)
     327                if (m_pLayoutFavorite->itemAt(iIndex) == pItem)
     328                    m_pLayoutGlobal->addItem(pItem);
     329        }
     330
     331    /* Update/activate children layout: */
     332    m_pLayout->updateGeometry();
     333    m_pLayout->activate();
     334
     335    /* Relayout model: */
     336    model()->updateLayout();
     337}
     338
    314339void UIChooserItemGroup::retranslateUi()
    315340{
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.h

    r77346 r77366  
    102102        /** Makes sure passed child @a pItem is visible. */
    103103        virtual void makeSureItemIsVisible(UIChooserItem *pItem) /* override */;
     104    /** @} */
     105
     106    /** @name Children stuff.
     107      * @{ */
     108        /** Updates positions of favorite items. */
     109        void updateFavorites();
    104110    /** @} */
    105111
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp

    r77347 r77366  
    162162        case UIChooserItemType_Machine:
    163163            emit sigToolMenuRequested(UIToolClass_Machine, pItem->geometry().topRight().toPoint());
     164            break;
     165        default:
     166            break;
     167    }
     168}
     169
     170void UIChooserModel::handlePinButtonClick(UIChooserItem *pItem)
     171{
     172    switch (pItem->type())
     173    {
     174        case UIChooserItemType_Global:
     175            pItem->setFavorite(!pItem->isFavorite());
    164176            break;
    165177        default:
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h

    r77347 r77366  
    133133        /** Handles tool button click for certain @a pItem. */
    134134        void handleToolButtonClick(UIChooserItem *pItem);
     135        /** Handles pin button click for certain @a pItem. */
     136        void handlePinButtonClick(UIChooserItem *pItem);
    135137    /** @} */
    136138
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