VirtualBox

Changeset 77228 in vbox


Ignore:
Timestamp:
Feb 8, 2019 6:05:46 PM (6 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9241: VirtualBox Manager UI: Make sure Chooser pane item is fully visible on focus-item change if possible (that's necessary after r128731).

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooser.cpp

    r77224 r77228  
    167167    connect(m_pChooserModel, &UIChooserModel::sigRootItemMinimumWidthHintChanged,
    168168            m_pChooserView, &UIChooserView::sltMinimumWidthHintChanged);
    169     connect(m_pChooserModel, &UIChooserModel::sigFocusChanged,
    170             m_pChooserView, &UIChooserView::sltFocusChanged);
    171169    connect(m_pChooserModel, &UIChooserModel::sigToolMenuRequested,
    172170            this, &UIChooser::sltToolMenuRequested);
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItem.h

    r77224 r77228  
    212212        /** Makes sure item is visible. */
    213213        virtual void makeSureItsVisible();
     214        /** Makes sure passed child @a pItem is visible. */
     215        virtual void makeSureItemIsVisible(UIChooserItem *pItem) { Q_UNUSED(pItem); }
    214216
    215217        /** Returns pixmap item representation. */
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.cpp

    r77224 r77228  
    289289{
    290290    return "UIChooserItemGroup";
     291}
     292
     293void UIChooserItemGroup::makeSureItemIsVisible(UIChooserItem *pItem)
     294{
     295    /* Make sure item exists: */
     296    AssertPtrReturnVoid(pItem);
     297
     298    /* Convert child rectangle to local coordinates for this group. This also
     299     * works for a child at any sub-level, doesn't necessary of this group. */
     300    const QPointF positionInScene = pItem->mapToScene(QPointF(0, 0));
     301    const QPointF positionInGroup = mapFromScene(positionInScene);
     302    const QRectF itemRectInGroup = QRectF(positionInGroup, pItem->size());
     303    m_pScrollArea->makeSureRectIsVisible(itemRectInGroup);
    291304}
    292305
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.h

    r77224 r77228  
    9999        /** Class-name used for drag&drop mime-data format. */
    100100        static QString className();
     101
     102        /** Makes sure passed child @a pItem is visible. */
     103        virtual void makeSureItemIsVisible(UIChooserItem *pItem) /* override */;
    101104    /** @} */
    102105
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp

    r77224 r77228  
    421421        connect(m_pFocusItem, SIGNAL(destroyed(QObject*)), this, SLOT(sltFocusItemDestroyed()));
    422422
    423     /* Notify listeners about focus change: */
    424     emit sigFocusChanged();
     423    /* If dialog is visible and item exists => make it visible as well: */
     424    if (scene()->views()[0]->window()->isVisible() && pItem)
     425        root()->makeSureItemIsVisible(pItem);
    425426}
    426427
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.h

    r77224 r77228  
    7979        /** Notifies about selection changed. */
    8080        void sigSelectionChanged();
    81         /** Notifies about focus changed. */
    82         void sigFocusChanged();
    8381
    8482        /** Notifies about root sliding started. */
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserView.cpp

    r77224 r77228  
    100100}
    101101
    102 void UIChooserView::sltFocusChanged()
    103 {
    104     /* Make sure focus-item set: */
    105     const UIChooserItem *pFocusItem = chooser() && chooser()->model()
    106                                     ? chooser()->model()->focusItem()
    107                                     : 0;
    108     if (!pFocusItem)
    109         return;
    110 
    111     const QSize viewSize = viewport()->size();
    112     QRectF geo = pFocusItem->geometry();
    113     geo &= QRectF(geo.topLeft(), viewSize);
    114     ensureVisible(geo, 0, 0);
    115 }
    116 
    117102void UIChooserView::sltMinimumWidthHintChanged(int iHint)
    118103{
  • trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserView.h

    r77224 r77228  
    5353public slots:
    5454
    55     /** @name General stuff.
    56       * @{ */
    57         /** Handles focus change to @a pFocusItem. */
    58         void sltFocusChanged();
    59     /** @} */
    60 
    6155    /** @name Layout stuff.
    6256      * @{ */
  • trunk/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsScrollArea.cpp

    r77203 r77228  
    9898}
    9999
     100void UIGraphicsScrollArea::makeSureRectIsVisible(const QRectF &rect)
     101{
     102    /* Make sure rect size is bound by the scroll-area size: */
     103    QRectF actualRect = rect;
     104    QSizeF actualRectSize = actualRect.size();
     105    actualRectSize = actualRectSize.boundedTo(size());
     106    actualRect.setSize(actualRectSize);
     107
     108    switch (m_enmOrientation)
     109    {
     110        /* Scroll viewport horizontally: */
     111        case Qt::Horizontal:
     112        {
     113            /* If rectangle is at least partially right of visible area: */
     114            if (actualRect.x() + actualRect.width() > size().width())
     115                m_pScrollBar->setValue(m_pScrollBar->value() + actualRect.x() + actualRect.width() - size().width());
     116            /* If rectangle is at least partially left of visible area: */
     117            else if (actualRect.x() < 0)
     118                m_pScrollBar->setValue(m_pScrollBar->value() + actualRect.x());
     119            break;
     120        }
     121        /* Scroll viewport vertically: */
     122        case Qt::Vertical:
     123        {
     124            /* If rectangle is at least partially under visible area: */
     125            if (actualRect.y() + actualRect.height() > size().height())
     126                m_pScrollBar->setValue(m_pScrollBar->value() + actualRect.y() + actualRect.height() - size().height());
     127            /* If rectangle is at least partially above visible area: */
     128            else if (actualRect.y() < 0)
     129                m_pScrollBar->setValue(m_pScrollBar->value() + actualRect.y());
     130            break;
     131        }
     132    }
     133}
     134
    100135bool UIGraphicsScrollArea::eventFilter(QObject *pObject, QEvent *pEvent)
    101136{
  • trunk/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsScrollArea.h

    r77086 r77228  
    5050    QIGraphicsWidget *viewport() const;
    5151
     52    /** Makes sure passed @a rect is visible. */
     53    void makeSureRectIsVisible(const QRectF &rect);
     54
    5255protected:
    5356
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