VirtualBox

Changeset 45515 in vbox


Ignore:
Timestamp:
Apr 12, 2013 10:16:08 AM (11 years ago)
Author:
vboxsync
Message:

FE/Qt: Popup-center: Popup-pane: Manual layout management.

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

Legend:

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

    r45508 r45515  
    255255    , m_fPolished(false)
    256256    , m_strId(strId)
     257    , m_iMainLayoutMargin(2), m_iMainFrameLayoutMargin(5), m_iMainFrameLayoutSpacing(5)
    257258    , m_strMessage(strMessage), m_strDetails(strDetails)
    258259    , m_iButton1(iButton1), m_iButton2(iButton2), m_iButton3(iButton3)
     
    260261    , m_iButtonEsc(0)
    261262    , m_iParentStatusBarHeight(parentStatusBarHeight(pParent))
    262     , m_pMainLayout(0), m_pFrameLayout(0)
    263263    , m_pTextPane(0), m_pButtonBox(0)
    264264    , m_pButton1(0), m_pButton2(0), m_pButton3(0)
     
    334334}
    335335
     336int UIPopupPane::minimumWidthHint() const
     337{
     338    /* Prepare minimum width hint: */
     339    int iMinimumWidthHint = 0;
     340
     341    /* Take into account main layout: */
     342    iMinimumWidthHint += 2 * m_iMainLayoutMargin;
     343    {
     344        /* Take into account main-frame layout: */
     345        iMinimumWidthHint += 2 * m_iMainFrameLayoutMargin;
     346        {
     347            /* Take into account widgets: */
     348            const int iTextPaneWidth = m_pTextPane->minimumSizeHint().width();
     349            const int iButtonBoxWidth = m_pButtonBox->minimumSizeHint().width();
     350            iMinimumWidthHint += qMax(iTextPaneWidth, iButtonBoxWidth);
     351        }
     352    }
     353
     354    /* Return minimum width hint: */
     355    return iMinimumWidthHint;
     356}
     357
     358int UIPopupPane::minimumHeightHint() const
     359{
     360    /* Prepare minimum height hint: */
     361    int iMinimumHeightHint = 0;
     362
     363    /* Take into account main layout: */
     364    iMinimumHeightHint += 2 * m_iMainLayoutMargin;
     365    {
     366        /* Take into account main-frame layout: */
     367        iMinimumHeightHint += 2 * m_iMainFrameLayoutMargin;
     368        {
     369            /* Take into account widgets: */
     370            iMinimumHeightHint += m_pTextPane->minimumSizeHint().height();
     371            iMinimumHeightHint += m_iMainFrameLayoutSpacing;
     372            iMinimumHeightHint += m_pButtonBox->minimumSizeHint().height();
     373        }
     374    }
     375
     376    /* Return minimum height hint: */
     377    return iMinimumHeightHint;
     378}
     379
     380QSize UIPopupPane::minimumSizeHint() const
     381{
     382    return QSize(minimumWidthHint(), minimumHeightHint());
     383}
     384
    336385void UIPopupPane::adjustAccordingParent()
    337386{
    338     /* Get some variables: */
     387    /* Get parent attributes: */
    339388    const int iWidth = parentWidget()->width();
    340389    const int iHeight = parentWidget()->height();
    341390
    342     /* Resize popup according parent: */
     391    /* Adjust text-pane according parent width: */
     392    if (m_pTextPane)
     393    {
     394        m_pTextPane->setMinimumTextWidth(iWidth - 2 * m_iMainLayoutMargin
     395                                                - 2 * m_iMainFrameLayoutMargin);
     396    }
     397
     398    /* Resize popup according parent width: */
    343399    resize(iWidth, minimumSizeHint().height());
    344400
     
    349405    raise();
    350406
    351     /* Resize text-pane according new size: */
    352     if (m_pTextPane)
    353     {
    354         int iMinimumTextWidth = iWidth;
    355         int iLeft, iTop, iRight, iBottom;
    356         m_pMainLayout->getContentsMargins(&iLeft, &iTop, &iRight, &iBottom);
    357         iMinimumTextWidth -= iLeft;
    358         iMinimumTextWidth -= iRight;
    359         m_pFrameLayout->getContentsMargins(&iLeft, &iTop, &iRight, &iBottom);
    360         iMinimumTextWidth -= iLeft;
    361         iMinimumTextWidth -= iRight;
    362         m_pTextPane->setMinimumTextWidth(iMinimumTextWidth);
     407    /* Update layout: */
     408    updateLayout();
     409}
     410
     411void UIPopupPane::updateLayout()
     412{
     413    /* This attributes: */
     414    const int iWidth = width();
     415    const int iHeight = height();
     416    /* Main layout: */
     417    {
     418        /* Main-frame: */
     419        m_pMainFrame->move(m_iMainLayoutMargin,
     420                           m_iMainLayoutMargin);
     421        m_pMainFrame->resize(iWidth - 2 * m_iMainLayoutMargin,
     422                             iHeight - 2 * m_iMainLayoutMargin);
     423        const int iMainFrameWidth = m_pMainFrame->width();
     424        /* Main-frame layout: */
     425        {
     426            /* Text-pane: */
     427            const int iTextPaneHeight = m_pTextPane->minimumSizeHint().height();
     428            m_pTextPane->move(m_iMainFrameLayoutMargin,
     429                              m_iMainFrameLayoutMargin);
     430            m_pTextPane->resize(iMainFrameWidth - 2 * m_iMainFrameLayoutMargin,
     431                                iTextPaneHeight);
     432            /* Button-box: */
     433            const int iButtonBoxHeight = m_pButtonBox->minimumSizeHint().height();
     434            m_pButtonBox->move(m_iMainFrameLayoutMargin,
     435                               m_iMainFrameLayoutMargin + iTextPaneHeight + m_iMainFrameLayoutSpacing);
     436            m_pButtonBox->resize(iMainFrameWidth - 2 * m_iMainFrameLayoutMargin,
     437                                 iButtonBoxHeight);
     438        }
    363439    }
    364440}
     
    366442void UIPopupPane::prepareContent()
    367443{
    368     /* Configure this: */
     444    /* Prepare this: */
    369445    setFocusPolicy(Qt::StrongFocus);
    370     /* Create main-layout: */
    371     m_pMainLayout = new QVBoxLayout(this);
    372     {
    373         /* Configure layout: */
    374         m_pMainLayout->setContentsMargins(2, 2, 2, 2);
    375         m_pMainLayout->setSpacing(0);
    376         /* Create main frame: */
    377         UIPopupPaneFrame *pMainFrame = new UIPopupPaneFrame;
    378         {
    379             /* Add into layout: */
    380             m_pMainLayout->addWidget(pMainFrame);
    381             /* Create frame-layout: */
    382             m_pFrameLayout = new QVBoxLayout(pMainFrame);
    383             {
    384                 /* Configure layout: */
    385                 m_pFrameLayout->setContentsMargins(15, 0, 15, 0);
    386                 m_pFrameLayout->setSpacing(0);
    387                 /* Create message-label: */
    388                 m_pTextPane = new QIRichTextLabel;
    389                 {
    390                     /* Add into layout: */
    391                     m_pFrameLayout->addWidget(m_pTextPane);
    392                     /* Configure label: */
    393                     m_pTextPane->setFocusPolicy(Qt::StrongFocus);
    394                     m_pTextPane->installEventFilter(pMainFrame);
    395                     m_pTextPane->setText(m_strMessage);
    396                     m_pTextPane->setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
    397                 }
    398                 /* Create button-box: */
    399                 m_pButtonBox = new QIDialogButtonBox;
    400                 {
    401                     /* Add into layout: */
    402                     m_pFrameLayout->addWidget(m_pButtonBox);
    403                     /* Configure button-box: */
    404                     m_pButtonBox->installEventFilter(pMainFrame);
    405                     prepareButtons();
    406                 }
    407             }
     446    /* Create main-frame: */
     447    m_pMainFrame = new UIPopupPaneFrame(this);
     448    {
     449        /* Prepare frame: */
     450        m_pMainFrame->installEventFilter(m_pMainFrame);
     451        /* Create message-label: */
     452        m_pTextPane = new QIRichTextLabel(m_pMainFrame);
     453        {
     454            /* Prepare label: */
     455            m_pTextPane->setFocusPolicy(Qt::StrongFocus);
     456            m_pTextPane->installEventFilter(m_pMainFrame);
     457            m_pTextPane->setText(m_strMessage);
     458            m_pTextPane->setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
     459        }
     460        /* Create button-box: */
     461        m_pButtonBox = new QIDialogButtonBox(m_pMainFrame);
     462        {
     463            /* Prepare button-box: */
     464            m_pButtonBox->installEventFilter(m_pMainFrame);
     465            prepareButtons();
    408466        }
    409467    }
     
    547605void UIPopupPaneFrame::prepare()
    548606{
    549     /* Install event-filter: */
    550     installEventFilter(this);
    551607    /* Install 'hover' animation for 'opacity' property: */
    552608    UIAnimationFramework::installPropertyAnimation(this, QByteArray("opacity"),
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h

    r45508 r45515  
    3030
    3131/* Forward declaration: */
    32 class UIPopupPane;
    33 class QVBoxLayout;
    3432class QPushButton;
    3533class QIRichTextLabel;
    3634class QIDialogButtonBox;
     35class UIPopupPane;
     36class UIPopupPaneFrame;
    3737
    3838/* Global popup-center object: */
     
    178178    virtual void keyPressEvent(QKeyEvent *pEvent);
    179179
    180     /* Helper: Adjust stuff: */
     180    /* Helper: Layout stuff: */
     181    int minimumWidthHint() const;
     182    int minimumHeightHint() const;
     183    QSize minimumSizeHint() const;
    181184    void adjustAccordingParent();
     185    void updateLayout();
    182186
    183187    /* Helpers: Prepare stuff: */
     
    196200    bool m_fPolished;
    197201    const QString m_strId;
     202    int m_iMainLayoutMargin;
     203    int m_iMainFrameLayoutMargin;
     204    int m_iMainFrameLayoutSpacing;
    198205    QString m_strMessage, m_strDetails;
    199206    int m_iButton1, m_iButton2, m_iButton3;
     
    203210
    204211    /* Widgets: */
    205     QVBoxLayout *m_pMainLayout;
    206     QVBoxLayout *m_pFrameLayout;
     212    UIPopupPaneFrame *m_pMainFrame;
    207213    QIRichTextLabel *m_pTextPane;
    208214    QIDialogButtonBox *m_pButtonBox;
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