VirtualBox

Changeset 44285 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Jan 14, 2013 1:11:01 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
83193
Message:

FE/Qt: VM Selector: Chooser-view: Avoid machine-item excessive update.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.cpp

    r43956 r44285  
    206206void UIGChooserItemMachine::updatePixmaps()
    207207{
    208     /* First row update required? */
    209     bool fFirstRowUpdateRequired = false;
    210     bool fSecondRowUpdateRequired = false;
    211 
    212208    /* Update pixmap: */
     209    updatePixmap();
     210
     211    /* Update state-pixmap: */
     212    updateStatePixmap();
     213}
     214
     215void UIGChooserItemMachine::updatePixmap()
     216{
     217    /* Get new pixmap and pixmap-size: */
    213218    QIcon icon = osIcon();
    214219    QSize iconSize = icon.availableSizes().first();
    215220    QPixmap pixmap = icon.pixmap(iconSize);
     221    /* Update linked values: */
     222    if (m_pixmapSize != iconSize)
     223    {
     224        m_pixmapSize = iconSize;
     225        updateFirstRowMaximumWidth();
     226        updateGeometry();
     227    }
    216228    if (m_pixmap.toImage() != pixmap.toImage())
    217229    {
     
    219231        update();
    220232    }
    221     if (m_pixmapSize != iconSize)
    222     {
    223         m_pixmapSize = iconSize;
    224         fFirstRowUpdateRequired = true;
    225     }
    226 
    227     /* Update state-pixmap: */
     233}
     234
     235void UIGChooserItemMachine::updateStatePixmap()
     236{
     237    /* Get new state-pixmap and state-pixmap size: */
    228238    QIcon stateIcon = machineStateIcon();
    229239    QSize stateIconSize = stateIcon.availableSizes().first();
    230     m_statePixmap = stateIcon.pixmap(stateIconSize);
    231240    QPixmap statePixmap = stateIcon.pixmap(stateIconSize);
     241    /* Update linked values: */
     242    if (m_statePixmapSize != stateIconSize)
     243    {
     244        m_statePixmapSize = stateIconSize;
     245        updateGeometry();
     246    }
    232247    if (m_statePixmap.toImage() != statePixmap.toImage())
    233248    {
     
    235250        update();
    236251    }
    237     if (m_statePixmapSize != stateIconSize)
    238     {
    239         m_statePixmapSize = stateIconSize;
    240         fSecondRowUpdateRequired = true;
    241     }
    242 
    243     /* Update linked values: */
    244     if (fFirstRowUpdateRequired || fSecondRowUpdateRequired)
    245         updateGeometry();
    246     if (fFirstRowUpdateRequired)
    247         updateFirstRowMaximumWidth();
    248252}
    249253
    250254void UIGChooserItemMachine::updateName()
    251255{
    252     /* Something changed? */
     256    /* Get new name: */
    253257    QString strName = name();
     258
     259    /* Is there something changed? */
    254260    if (m_strName == strName)
    255261        return;
    256262
    257     /* Remember new name: */
     263    /* Update linked values: */
    258264    m_strName = strName;
    259 
    260     /* Update linked values: */
    261265    updateMinimumNameWidth();
    262266    updateVisibleName();
     
    265269void UIGChooserItemMachine::updateSnapshotName()
    266270{
    267     /* Something changed? */
     271    /* Get new snapshot-name: */
    268272    QString strSnapshotName = snapshotName();
     273
     274    /* Is there something changed? */
    269275    if (m_strSnapshotName == strSnapshotName)
    270276        return;
    271277
    272     /* Remember new snapshot name: */
     278    /* Update linked values: */
    273279    m_strSnapshotName = strSnapshotName;
    274 
    275     /* Update linked values: */
    276280    updateMinimumSnapshotNameWidth();
    277281    updateVisibleSnapshotName();
     
    282286    /* Prepare variables: */
    283287    int iMargin = data(MachineItemData_Margin).toInt();
    284     int iPixmapWidth = m_pixmapSize.width();
    285     int iMachineItemMajorSpacing = data(MachineItemData_MajorSpacing).toInt();
    286     int iMachineItemMinorSpacing = data(MachineItemData_MinorSpacing).toInt();
     288    int iMajorSpacing = data(MachineItemData_MajorSpacing).toInt();
    287289    int iToolBarWidth = data(MachineItemData_ToolBarSize).toSize().width();
    288290
    289     /* Calculate maximum width for the first row: */
    290     m_iFirstRowMaximumWidth = geometry().width();
    291     m_iFirstRowMaximumWidth -= iMargin; /* left margin */
    292     m_iFirstRowMaximumWidth -= iPixmapWidth; /* pixmap width */
    293     m_iFirstRowMaximumWidth -= iMachineItemMajorSpacing; /* spacing between pixmap and name */
    294     if (!snapshotName().isEmpty())
    295         m_iFirstRowMaximumWidth -= iMachineItemMinorSpacing; /* spacing between name and snapshot name */
     291    /* Calculate new maximum width for the first row: */
     292    int iFirstRowMaximumWidth = geometry().width();
     293    iFirstRowMaximumWidth -= iMargin; /* left margin */
     294    iFirstRowMaximumWidth -= m_pixmapSize.width(); /* pixmap width */
     295    iFirstRowMaximumWidth -= iMajorSpacing; /* spacing between pixmap and name(s) */
    296296    if (m_pToolBar)
    297297    {
    298         m_iFirstRowMaximumWidth -= iMachineItemMajorSpacing; /* spacing before toolbar */
    299         m_iFirstRowMaximumWidth -= iToolBarWidth; /* toolbar width */
    300     }
    301     m_iFirstRowMaximumWidth -= iMargin; /* right margin */
     298        iFirstRowMaximumWidth -= iMajorSpacing; /* spacing before toolbar */
     299        iFirstRowMaximumWidth -= iToolBarWidth; /* toolbar width */
     300    }
     301    iFirstRowMaximumWidth -= iMargin; /* right margin */
     302
     303    /* Is there something changed? */
     304    if (m_iFirstRowMaximumWidth == iFirstRowMaximumWidth)
     305        return;
    302306
    303307    /* Update linked values: */
     308    m_iFirstRowMaximumWidth = iFirstRowMaximumWidth;
    304309    updateMaximumNameWidth();
    305310    updateMaximumSnapshotNameWidth();
     
    308313void UIGChooserItemMachine::updateMinimumNameWidth()
    309314{
    310     /* Calculate minimum name width: */
     315    /* Calculate new minimum name width: */
    311316    QPaintDevice *pPaintDevice = model()->paintDevice();
    312317    QFontMetrics fm(m_nameFont, pPaintDevice);
    313     m_iMinimumNameWidth = fm.width(compressText(m_nameFont, pPaintDevice, m_strName, textWidth(m_nameFont, pPaintDevice, 15)));
     318    int iMinimumNameWidth = fm.width(compressText(m_nameFont, pPaintDevice, m_strName, textWidth(m_nameFont, pPaintDevice, 15)));
     319
     320    /* Is there something changed? */
     321    if (m_iMinimumNameWidth == iMinimumNameWidth)
     322        return;
    314323
    315324    /* Update linked values: */
     325    m_iMinimumNameWidth = iMinimumNameWidth;
    316326    updateGeometry();
    317327}
     
    319329void UIGChooserItemMachine::updateMinimumSnapshotNameWidth()
    320330{
    321     /* Do we have a snapshot? */
    322     if (m_strSnapshotName.isEmpty())
    323     {
    324         /* Clear minimum snapshot name width: */
    325         m_iMinimumSnapshotNameWidth = 0;
    326     }
    327     else
    328     {
    329         /* Calculate minimum snapshot name width: */
     331    /* Calculate new minimum snapshot-name width: */
     332    int iMinimumSnapshotNameWidth = 0;
     333    /* Is there any snapshot exists? */
     334    if (!m_strSnapshotName.isEmpty())
     335    {
    330336        QFontMetrics fm(m_snapshotNameFont, model()->paintDevice());
    331337        int iBracketWidth = fm.width("()"); /* bracket width */
    332         int iActualTextWidth = fm.width(m_strSnapshotName); /* snapshot name width */
     338        int iActualTextWidth = fm.width(m_strSnapshotName); /* snapshot-name width */
    333339        int iMinimumTextWidth = fm.width("..."); /* ellipsis width */
    334         m_iMinimumSnapshotNameWidth = iBracketWidth + qMin(iActualTextWidth, iMinimumTextWidth);
    335     }
     340        iMinimumSnapshotNameWidth = iBracketWidth + qMin(iActualTextWidth, iMinimumTextWidth);
     341    }
     342
     343    /* Is there something changed? */
     344    if (m_iMinimumSnapshotNameWidth == iMinimumSnapshotNameWidth)
     345        return;
    336346
    337347    /* Update linked values: */
     348    m_iMinimumSnapshotNameWidth = iMinimumSnapshotNameWidth;
     349    updateMaximumNameWidth();
    338350    updateGeometry();
    339     updateMaximumNameWidth();
    340351}
    341352
    342353void UIGChooserItemMachine::updateMaximumNameWidth()
    343354{
    344     /* Calculate maximum name width: */
    345     m_iMaximumNameWidth = m_iFirstRowMaximumWidth - m_iMinimumSnapshotNameWidth;
    346 
    347     /* Calculate linked values: */
     355    /* Calculate new maximum name width: */
     356    int iMaximumNameWidth = m_iFirstRowMaximumWidth;
     357    /* Do we have a minimum snapshot-name width? */
     358    if (m_iMinimumSnapshotNameWidth != 0)
     359    {
     360        /* Prepare variables: */
     361        int iMinorSpacing = data(MachineItemData_MinorSpacing).toInt();
     362        /* Take spacing and snapshot-name into account: */
     363        iMaximumNameWidth -= (iMinorSpacing + m_iMinimumSnapshotNameWidth);
     364    }
     365
     366    /* Is there something changed? */
     367    if (m_iMaximumNameWidth == iMaximumNameWidth)
     368        return;
     369
     370    /* Update linked values: */
     371    m_iMaximumNameWidth = iMaximumNameWidth;
    348372    updateVisibleName();
    349373}
     
    351375void UIGChooserItemMachine::updateMaximumSnapshotNameWidth()
    352376{
    353     /* Calculate maximum snapshot name width: */
    354     m_iMaximumSnapshotNameWidth = m_iFirstRowMaximumWidth - m_visibleNameSize.width();
     377    /* Prepare variables: */
     378    int iMinorSpacing = data(MachineItemData_MinorSpacing).toInt();
     379
     380    /* Calculate new maximum snapshot-name width: */
     381    int iMaximumSnapshotNameWidth = m_iFirstRowMaximumWidth;
     382    iMaximumSnapshotNameWidth -= (iMinorSpacing + m_visibleNameSize.width());
     383
     384    /* Is there something changed? */
     385    if (m_iMaximumSnapshotNameWidth == iMaximumSnapshotNameWidth)
     386        return;
    355387
    356388    /* Update linked values: */
     389    m_iMaximumSnapshotNameWidth = iMaximumSnapshotNameWidth;
    357390    updateVisibleSnapshotName();
    358391}
     
    363396    QPaintDevice *pPaintDevice = model()->paintDevice();
    364397
    365     /* Calculate visible name: */
    366     m_strVisibleName = compressText(m_nameFont, pPaintDevice, m_strName, m_iMaximumNameWidth);
    367     m_visibleNameSize = textSize(m_nameFont, pPaintDevice, m_strVisibleName);
     398    /* Calculate new visible name and name-size: */
     399    QString strVisibleName = compressText(m_nameFont, pPaintDevice, m_strName, m_iMaximumNameWidth);
     400    QSize visibleNameSize = textSize(m_nameFont, pPaintDevice, strVisibleName);
    368401
    369402    /* Update linked values: */
    370     updateGeometry();
    371     updateMaximumSnapshotNameWidth();
    372     update();
     403    if (m_visibleNameSize != visibleNameSize)
     404    {
     405        m_visibleNameSize = visibleNameSize;
     406        updateMaximumSnapshotNameWidth();
     407        updateGeometry();
     408    }
     409    if (m_strVisibleName != strVisibleName)
     410    {
     411        m_strVisibleName = strVisibleName;
     412        update();
     413    }
    373414}
    374415
     
    378419    QPaintDevice *pPaintDevice = model()->paintDevice();
    379420
    380     /* Calculate visible snapshot name: */
     421    /* Calculate new visible snapshot-name: */
    381422    int iBracketWidth = QFontMetrics(m_snapshotNameFont, pPaintDevice).width("()");
    382423    QString strVisibleSnapshotName = compressText(m_snapshotNameFont, pPaintDevice, m_strSnapshotName,
    383424                                                  m_iMaximumSnapshotNameWidth - iBracketWidth);
    384     m_strVisibleSnapshotName = QString("(%1)").arg(strVisibleSnapshotName);
    385     m_visibleSnapshotNameSize = textSize(m_snapshotNameFont, pPaintDevice, m_strVisibleSnapshotName);
     425    strVisibleSnapshotName = QString("(%1)").arg(strVisibleSnapshotName);
     426    QSize visibleSnapshotNameSize = textSize(m_snapshotNameFont, pPaintDevice, strVisibleSnapshotName);
    386427
    387428    /* Update linked values: */
    388     updateGeometry();
    389     update();
     429    if (m_visibleSnapshotNameSize != visibleSnapshotNameSize)
     430    {
     431        m_visibleSnapshotNameSize = visibleSnapshotNameSize;
     432        updateGeometry();
     433    }
     434    if (m_strVisibleSnapshotName != strVisibleSnapshotName)
     435    {
     436        m_strVisibleSnapshotName = strVisibleSnapshotName;
     437        update();
     438    }
    390439}
    391440
    392441void UIGChooserItemMachine::updateStateText()
    393442{
    394     /* Something changed? */
     443    /* Get new state-text and state-text size: */
    395444    QString strStateText = machineStateName();
    396     if (m_strStateText == strStateText)
    397         return;
    398 
    399     /* Update state text: */
    400     m_strStateText = strStateText;
    401     m_stateTextSize = textSize(m_stateTextFont, model()->paintDevice(), m_strStateText);
     445    QSize stateTextSize = textSize(m_stateTextFont, model()->paintDevice(), m_strStateText);
    402446
    403447    /* Update linked values: */
    404     updateGeometry();
    405     update();
     448    if (m_stateTextSize != stateTextSize)
     449    {
     450        m_stateTextSize = stateTextSize;
     451        updateGeometry();
     452    }
     453    if (m_strStateText != strStateText)
     454    {
     455        m_strStateText = strStateText;
     456        update();
     457    }
    406458}
    407459
     
    553605{
    554606    /* Prepare variables: */
    555     int iMachineItemMargin = data(MachineItemData_Margin).toInt();
    556     int iMachineItemMajorSpacing = data(MachineItemData_MajorSpacing).toInt();
    557     int iMachineItemMinorSpacing = data(MachineItemData_MinorSpacing).toInt();
     607    int iMargin = data(MachineItemData_Margin).toInt();
     608    int iMajorSpacing = data(MachineItemData_MajorSpacing).toInt();
     609    int iMinorSpacing = data(MachineItemData_MinorSpacing).toInt();
    558610    int iToolBarWidth = data(MachineItemData_ToolBarSize).toSize().width();
    559611
     
    562614
    563615    /* Two margins: */
    564     iProposedWidth += 2 * iMachineItemMargin;
     616    iProposedWidth += 2 * iMargin;
    565617    /* And machine-item content to take into account: */
    566     int iTopLineWidth = m_iMinimumNameWidth +
    567                         iMachineItemMinorSpacing +
    568                         m_iMinimumSnapshotNameWidth;
     618    int iTopLineWidth = m_iMinimumNameWidth;
     619    if (!m_strSnapshotName.isEmpty())
     620        iTopLineWidth += (iMinorSpacing +
     621                          m_iMinimumSnapshotNameWidth);
    569622    int iBottomLineWidth = m_statePixmapSize.width() +
    570                            iMachineItemMinorSpacing +
     623                           iMinorSpacing +
    571624                           m_stateTextSize.width();
    572625    int iRightColumnWidth = qMax(iTopLineWidth, iBottomLineWidth);
    573626    int iMachineItemWidth = m_pixmapSize.width() +
    574                             iMachineItemMajorSpacing +
     627                            iMajorSpacing +
    575628                            iRightColumnWidth;
    576629    if (m_pToolBar)
    577         iMachineItemWidth += (iMachineItemMajorSpacing + iToolBarWidth);
     630        iMachineItemWidth += (iMajorSpacing + iToolBarWidth);
    578631    iProposedWidth += iMachineItemWidth;
    579632
     
    585638{
    586639    /* Prepare variables: */
    587     int iMachineItemMargin = data(MachineItemData_Margin).toInt();
     640    int iMargin = data(MachineItemData_Margin).toInt();
    588641    int iMachineItemTextSpacing = data(MachineItemData_TextSpacing).toInt();
    589642    int iToolBarHeight = data(MachineItemData_ToolBarSize).toSize().height();
     
    593646
    594647    /* Two margins: */
    595     iProposedHeight += 2 * iMachineItemMargin;
     648    iProposedHeight += 2 * iMargin;
    596649    /* And machine-item content to take into account: */
    597650    int iTopLineHeight = qMax(m_visibleNameSize.height(), m_visibleSnapshotNameSize.height());
     
    865918    int iFullHeight = fullRect.height();
    866919    int iMargin = data(MachineItemData_Margin).toInt();
    867     int iMachineItemMajorSpacing = data(MachineItemData_MajorSpacing).toInt();
    868     int iMachineItemMinorSpacing = data(MachineItemData_MinorSpacing).toInt();
     920    int iMajorSpacing = data(MachineItemData_MajorSpacing).toInt();
     921    int iMinorSpacing = data(MachineItemData_MinorSpacing).toInt();
    869922    int iMachineItemTextSpacing = data(MachineItemData_TextSpacing).toInt();
    870923
     
    908961    int iRightColumnIndent = iLeftColumnIndent +
    909962                             m_pixmapSize.width() +
    910                              iMachineItemMajorSpacing;
     963                             iMajorSpacing;
    911964
    912965    /* Paint right column: */
     
    941994            int iSnapshotNameIndent = iRightColumnIndent +
    942995                                      m_visibleNameSize.width() +
    943                                       iMachineItemMinorSpacing;
     996                                      iMinorSpacing;
    944997
    945998            /* Paint right element: */
     
    9491002                int iSnapshotNameX = iSnapshotNameIndent;
    9501003                int iSnapshotNameY = iTopLineIndent;
    951                 /* Paint snapshot name: */
     1004                /* Paint snapshot-name: */
    9521005                paintText(/* Painter: */
    9531006                          pPainter,
     
    9851038            int iMachineStateTextIndent = iRightColumnIndent +
    9861039                                          m_statePixmapSize.width() +
    987                                           iMachineItemMinorSpacing;
     1040                                          iMinorSpacing;
    9881041
    9891042            /* Paint right element: */
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserItemMachine.h

    r43853 r44285  
    9393    /* Helpers: Update stuff: */
    9494    void updatePixmaps();
     95    void updatePixmap();
     96    void updateStatePixmap();
    9597    void updateName();
    9698    void updateSnapshotName();
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