VirtualBox

Changeset 44061 in vbox for trunk


Ignore:
Timestamp:
Dec 7, 2012 2:46:43 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
82547
Message:

FE/Qt: VM group UI: Details-view: Precise scene rectangle calculation.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetails.cpp

    r43990 r44061  
    9191{
    9292    /* Setup details-model connections: */
    93     connect(m_pDetailsModel, SIGNAL(sigRootMinimumSizeHintChanged(const QSizeF&)),
    94             m_pDetailsView, SLOT(sltHandleRootItemMinimumSizeHintChanged(const QSizeF&)));
     93    connect(m_pDetailsModel, SIGNAL(sigRootItemMinimumWidthHintChanged(int)),
     94            m_pDetailsView, SLOT(sltMinimumWidthHintChanged(int)));
     95    connect(m_pDetailsModel, SIGNAL(sigRootItemMinimumHeightHintChanged(int)),
     96            m_pDetailsView, SLOT(sltMinimumHeightHintChanged(int)));
    9597    connect(m_pDetailsModel, SIGNAL(sigLinkClicked(const QString&, const QString&, const QString&)),
    9698            this, SIGNAL(sigLinkClicked(const QString&, const QString&, const QString&)));
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.cpp

    r44060 r44061  
    1818 */
    1919
     20/* Qt include: */
     21#include <QGraphicsScene>
     22
    2023/* GUI includes: */
    2124#include "UIGDetailsGroup.h"
     
    2629#include "UIVMItem.h"
    2730
    28 UIGDetailsGroup::UIGDetailsGroup()
     31UIGDetailsGroup::UIGDetailsGroup(QGraphicsScene *pParent)
    2932    : UIGDetailsItem(0)
     33    , m_iPreviousMinimumWidthHint(0)
     34    , m_iPreviousMinimumHeightHint(0)
    3035    , m_pBuildStep(0)
    3136{
     37    /* Add group to the parent scene: */
     38    pParent->addItem(this);
     39
     40    /* Prepare connections: */
     41    prepareConnections();
    3242}
    3343
     
    171181        default: AssertMsgFailed(("Invalid item type!")); break;
    172182    }
     183}
     184
     185void UIGDetailsGroup::prepareConnections()
     186{
     187    /* Prepare group-item connections: */
     188    connect(this, SIGNAL(sigMinimumWidthHintChanged(int)),
     189            model(), SIGNAL(sigRootItemMinimumWidthHintChanged(int)));
     190    connect(this, SIGNAL(sigMinimumHeightHintChanged(int)),
     191            model(), SIGNAL(sigRootItemMinimumHeightHintChanged(int)));
    173192}
    174193
     
    195214}
    196215
     216void UIGDetailsGroup::updateGeometry()
     217{
     218    /* Call to base class: */
     219    UIGDetailsItem::updateGeometry();
     220
     221    /* Group-item should notify details-view if minimum-width-hint was changed: */
     222    int iMinimumWidthHint = minimumWidthHint();
     223    if (m_iPreviousMinimumWidthHint != iMinimumWidthHint)
     224    {
     225        /* Save new minimum-width-hint, notify listener: */
     226        m_iPreviousMinimumWidthHint = iMinimumWidthHint;
     227        emit sigMinimumWidthHintChanged(m_iPreviousMinimumWidthHint);
     228    }
     229    /* Group-item should notify details-view if minimum-height-hint was changed: */
     230    int iMinimumHeightHint = minimumHeightHint();
     231    if (m_iPreviousMinimumHeightHint != iMinimumHeightHint)
     232    {
     233        /* Save new minimum-height-hint, notify listener: */
     234        m_iPreviousMinimumHeightHint = iMinimumHeightHint;
     235        emit sigMinimumHeightHintChanged(m_iPreviousMinimumHeightHint);
     236    }
     237}
     238
    197239int UIGDetailsGroup::minimumWidthHint() const
    198240{
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsGroup.h

    r44019 r44061  
    2525/* Forward declarations: */
    2626class UIVMItem;
     27class QGraphicsScene;
    2728
    2829/* Details group
     
    3132{
    3233    Q_OBJECT;
     34
     35signals:
     36
     37    /* Notifiers: Size-hint stuff: */
     38    void sigMinimumWidthHintChanged(int iMinimumWidthHint);
     39    void sigMinimumHeightHintChanged(int iMinimumHeightHint);
    3340
    3441public:
     
    3946
    4047    /* Constructor/destructor: */
    41     UIGDetailsGroup();
     48    UIGDetailsGroup(QGraphicsScene *pParent);
    4249    ~UIGDetailsGroup();
    4350
     
    7380
    7481    /* Helpers: Prepare stuff: */
     82    void prepareConnections();
    7583    void loadSettings();
    7684
    7785    /* Helpers: Layout stuff: */
     86    void updateGeometry();
    7887    int minimumWidthHint() const;
    7988    int minimumHeightHint() const;
     
    8190
    8291    /* Variables: */
     92    int m_iPreviousMinimumWidthHint;
     93    int m_iPreviousMinimumHeightHint;
    8394    QList<UIGDetailsItem*> m_items;
    8495    QList<UIVMItem*> m_machineItems;
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp

    r44016 r44061  
    8686    /* Layout root content: */
    8787    m_pRoot->updateLayout();
    88 
    89     /* Notify view about root minimum-size-hint changed: */
    90     emit sigRootMinimumSizeHintChanged(m_pRoot->minimumSizeHint());
    9188}
    9289
     
    232229void UIGDetailsModel::prepareRoot()
    233230{
    234     m_pRoot = new UIGDetailsGroup;
    235     scene()->addItem(m_pRoot);
     231    m_pRoot = new UIGDetailsGroup(scene());
    236232}
    237233
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.h

    r43990 r44061  
    4949signals:
    5050
    51     /* Notifier: Root-item stuff: */
    52     void sigRootMinimumSizeHintChanged(const QSizeF &minimumSizeHint);
     51    /* Notifiers: Root-item stuff: */
     52    void sigRootItemMinimumWidthHintChanged(int iRootItemMinimumWidthHint);
     53    void sigRootItemMinimumHeightHintChanged(int iRootItemMinimumHeightHint);
    5354
    5455    /* Notifier: Link processing stuff: */
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.cpp

    r43990 r44061  
    2828UIGDetailsView::UIGDetailsView(QWidget *pParent)
    2929    : QGraphicsView(pParent)
     30    , m_iMinimumWidthHint(0)
     31    , m_iMinimumHeightHint(0)
    3032{
    3133    /* Prepare palette: */
     
    4446}
    4547
    46 void UIGDetailsView::sltHandleRootItemMinimumSizeHintChanged(const QSizeF &minimumSizeHint)
     48void UIGDetailsView::sltMinimumWidthHintChanged(int iMinimumWidthHint)
    4749{
     50    /* Is there something changed? */
     51    if (m_iMinimumWidthHint == iMinimumWidthHint)
     52        return;
     53
     54    /* Remember new value: */
     55    m_iMinimumWidthHint = iMinimumWidthHint;
     56
     57    /* Set minimum view width according passed width-hint: */
     58    setMinimumWidth(2 * frameWidth() + iMinimumWidthHint + verticalScrollBar()->sizeHint().width());
     59
    4860    /* Update scene-rect: */
    49     updateSceneRect(minimumSizeHint);
     61    updateSceneRect();
     62}
    5063
    51     /* Set minimum-width: */
    52     setMinimumWidth(2 * frameWidth() +
    53                     minimumSizeHint.width() +
    54                     verticalScrollBar()->sizeHint().width());
     64void UIGDetailsView::sltMinimumHeightHintChanged(int iMinimumHeightHint)
     65{
     66    /* Is there something changed? */
     67    if (m_iMinimumHeightHint == iMinimumHeightHint)
     68        return;
     69
     70    /* Remember new value: */
     71    m_iMinimumHeightHint = iMinimumHeightHint;
     72
     73    /* Update scene-rect: */
     74    updateSceneRect();
    5575}
    5676
     
    7191}
    7292
    73 void UIGDetailsView::updateSceneRect(const QSizeF &minimumSizeHint /* = QSizeF() */)
     93void UIGDetailsView::updateSceneRect()
    7494{
    75     QPointF topLeft = QPointF(0, 0);
    76     QSizeF rectSize = viewport()->size();
    77     if (!minimumSizeHint.isNull())
    78         rectSize.setHeight(minimumSizeHint.height());
    79     setSceneRect(QRectF(topLeft, rectSize));
     95    setSceneRect(0, 0, m_iMinimumWidthHint, m_iMinimumHeightHint);
    8096}
    8197
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsView.h

    r43990 r44061  
    4040private slots:
    4141
    42     /* Handler: Root-item stuff: */
    43     void sltHandleRootItemMinimumSizeHintChanged(const QSizeF &minimumSizeHint);
     42    /* Handlers: Size-hint stuff: */
     43    void sltMinimumWidthHintChanged(int iMinimumWidthHint);
     44    void sltMinimumHeightHintChanged(int iMinimumHeightHint);
    4445
    4546private:
     
    5253
    5354    /* Helper: Update stuff: */
    54     void updateSceneRect(const QSizeF &minimumSizeHint = QSizeF());
     55    void updateSceneRect();
     56
     57    /* Variables: */
     58    int m_iMinimumWidthHint;
     59    int m_iMinimumHeightHint;
    5560};
    5661
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