VirtualBox

Changeset 63832 in vbox for trunk


Ignore:
Timestamp:
Sep 14, 2016 1:03:07 PM (8 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:6899: Accessibility support (step 27): Selector UI: Overal refactoring for UISnapshotPane.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.cpp

    r63821 r63832  
    107107            case Qt::DisplayRole:
    108108            {
    109                 /* Call to the base-class for "current state" item, compose ourselves otherwise: */
    110                 return m_fCurrentState ? QTreeWidgetItem::data(iColumn, iRole) : QVariant(QString("%1%2")
    111                                          .arg(QTreeWidgetItem::data(iColumn, Qt::DisplayRole).toString())
    112                                          .arg(QTreeWidgetItem::data(iColumn, Qt::UserRole).toString()));
     109                /* Call to base-class for "current state" item, compose ourselves otherwise: */
     110                return m_fCurrentState ? QTreeWidgetItem::data(iColumn, iRole) :
     111                                         QString("%1%2")
     112                                             .arg(QTreeWidgetItem::data(iColumn, Qt::DisplayRole).toString())
     113                                             .arg(QTreeWidgetItem::data(iColumn, Qt::UserRole).toString());
    113114            }
    114115            case Qt::SizeHintRole:
     
    159160
    160161    /** Returns whether the font is bold. */
    161     bool bold() const { return font (0).bold(); }
     162    bool bold() const { return font(0).bold(); }
    162163    /** Defines whether the font is @a fBold. */
    163164    void setBold(bool fBold)
     
    173174
    174175    /** Returns whether the font is italic. */
    175     bool italic() const { return font (0).italic(); }
     176    bool italic() const { return font(0).italic(); }
    176177    /** Defines whether the font is @a fItalic. */
    177178    void setItalic(bool fItalic)
     
    199200        if (m_fCurrentState)
    200201        {
     202            /* Fetch machine information: */
    201203            AssertReturnVoid(!m_comMachine.isNull());
    202204            m_fCurrentStateModified = m_comMachine.GetCurrentStateModified();
     
    213215        else
    214216        {
     217            /* Fetch snapshot information: */
    215218            AssertReturnVoid(!m_comSnapshot.isNull());
    216219            m_strSnapshotID = m_comSnapshot.GetId();
     
    305308    void adjustText()
    306309    {
    307         if (!treeWidget()) return; /* only for initialised items */
     310        /* Make sure item is initialised: */
     311        if (!treeWidget())
     312            return;
     313
     314        /* Calculate metrics: */
    308315        QFontMetrics metrics(font(0));
    309316        int iHei0 = (metrics.height() > 16 ?
     
    322329    {
    323330        /* Is the saved date today? */
    324         const QString strName = text(0);
     331        const bool fDateTimeToday = m_timestamp.date() == QDate::currentDate();
    325332
    326333        /* Compose date time: */
    327         const bool fDateTimeToday = m_timestamp.date() == QDate::currentDate();
    328334        QString strDateTime = fDateTimeToday ?
    329335                              m_timestamp.time().toString(Qt::LocalDate) :
     
    361367        /* Prepare tool-tip: */
    362368        QString strToolTip = QString("<nobr><b>%1</b>%2</nobr><br><nobr>%3</nobr>")
    363                              .arg(strName).arg(strDetails).arg(strDateTime);
     369                                 .arg(text(0)).arg(strDetails).arg(strDateTime);
    364370
    365371        /* Append description if any: */
     
    409415
    410416    /** Constructs edit blocker. */
    411     SnapshotEditBlocker(bool &fProtector)
    412         : m_fProtector(fProtector)
    413     {
    414         m_fProtector = true;
    415     }
    416 
     417    SnapshotEditBlocker(bool &fProtector) : m_fProtector(fProtector) { m_fProtector = true; }
    417418    /** Destructs edit blocker. */
    418     virtual ~SnapshotEditBlocker()
    419     {
    420         m_fProtector = false;
    421     }
     419    virtual ~SnapshotEditBlocker() { m_fProtector = false; }
    422420
    423421private:
     
    581579    m_pActionTakeSnapshot->setStatusTip(tr("Take a snapshot of the current virtual machine state"));
    582580    m_pActionCloneSnapshot->setStatusTip(tr("Clone selected virtual machine"));
    583     /* Translate actions tool-tips: */
    584     m_pActionRestoreSnapshot->setToolTip(m_pActionRestoreSnapshot->statusTip() +
    585         QString(" (%1)").arg(m_pActionRestoreSnapshot->shortcut().toString()));
    586     m_pActionDeleteSnapshot->setToolTip(m_pActionDeleteSnapshot->statusTip() +
    587         QString(" (%1)").arg(m_pActionDeleteSnapshot->shortcut().toString()));
    588     m_pActionShowSnapshotDetails->setToolTip(m_pActionShowSnapshotDetails->statusTip() +
    589         QString(" (%1)").arg(m_pActionShowSnapshotDetails->shortcut().toString()));
    590     m_pActionTakeSnapshot->setToolTip(m_pActionTakeSnapshot->statusTip() +
    591         QString(" (%1)").arg(m_pActionTakeSnapshot->shortcut().toString()));
    592     m_pActionCloneSnapshot->setToolTip(m_pActionCloneSnapshot->statusTip() +
    593         QString(" (%1)").arg(m_pActionCloneSnapshot->shortcut().toString()));
    594581}
    595582
     
    605592    }
    606593
    607     /* Whether another direct session is open or not: */
     594    /* Check whether another direct session is open or not: */
    608595    const bool fBusy = m_enmSessionState != KSessionState_Unlocked;
    609596
     
    614601
    615602    /* Whether taking or deleting snapshots is possible right now: */
    616     const bool canTakeDeleteSnapshot =    !fBusy
    617                                        || enmState == KMachineState_PoweredOff
    618                                        || enmState == KMachineState_Saved
    619                                        || enmState == KMachineState_Aborted
    620                                        || enmState == KMachineState_Running
    621                                        || enmState == KMachineState_Paused;
     603    const bool fCanTakeDeleteSnapshot =    !fBusy
     604                                        || enmState == KMachineState_PoweredOff
     605                                        || enmState == KMachineState_Saved
     606                                        || enmState == KMachineState_Aborted
     607                                        || enmState == KMachineState_Running
     608                                        || enmState == KMachineState_Paused;
    622609
    623610    /* Enable/disable snapshot operations: */
    624     m_pActionRestoreSnapshot->setEnabled(!fBusy && m_pCurrentSnapshotItem && pSnapshotItem && !pSnapshotItem->isCurrentStateItem());
    625     m_pActionDeleteSnapshot->setEnabled(m_fShapshotOperationsAllowed &&
    626                                         canTakeDeleteSnapshot && m_pCurrentSnapshotItem && pSnapshotItem && !pSnapshotItem->isCurrentStateItem());
    627     m_pActionShowSnapshotDetails->setEnabled(m_pCurrentSnapshotItem && pSnapshotItem && !pSnapshotItem->isCurrentStateItem());
    628     m_pActionTakeSnapshot->setEnabled(m_fShapshotOperationsAllowed &&
    629                                       ((canTakeDeleteSnapshot && m_pCurrentSnapshotItem && pSnapshotItem && pSnapshotItem->isCurrentStateItem()) ||
    630                                       (pSnapshotItem && !m_pCurrentSnapshotItem)));
    631     m_pActionCloneSnapshot->setEnabled(!fBusy && pSnapshotItem);
     611    m_pActionRestoreSnapshot->setEnabled(
     612           !fBusy
     613        && m_pCurrentSnapshotItem
     614        && pSnapshotItem
     615        && !pSnapshotItem->isCurrentStateItem()
     616    );
     617    m_pActionDeleteSnapshot->setEnabled(
     618           m_fShapshotOperationsAllowed
     619        && fCanTakeDeleteSnapshot
     620        && m_pCurrentSnapshotItem
     621        && pSnapshotItem
     622        && !pSnapshotItem->isCurrentStateItem()
     623    );
     624    m_pActionShowSnapshotDetails->setEnabled(
     625           m_pCurrentSnapshotItem
     626        && pSnapshotItem
     627        && !pSnapshotItem->isCurrentStateItem()
     628    );
     629    m_pActionTakeSnapshot->setEnabled(
     630           m_fShapshotOperationsAllowed
     631        && (   (   fCanTakeDeleteSnapshot
     632                && m_pCurrentSnapshotItem
     633                && pSnapshotItem
     634                && pSnapshotItem->isCurrentStateItem())
     635            || (   pSnapshotItem
     636                && !m_pCurrentSnapshotItem))
     637    );
     638    m_pActionCloneSnapshot->setEnabled(
     639           !fBusy
     640        && pSnapshotItem
     641    );
    632642}
    633643
     
    671681    /* Make sure snapshot item was changed: */
    672682    const SnapshotWgtItem *pSnapshotItem = pItem ? static_cast<const SnapshotWgtItem*>(pItem) : 0;
    673 
    674     if (pSnapshotItem)
    675     {
    676         /* Rename corresponding snapshot: */
    677         CSnapshot comSnapshot = pSnapshotItem->snapshotID().isNull() ? CSnapshot() : m_comMachine.FindSnapshot(pSnapshotItem->snapshotID());
    678         if (!comSnapshot.isNull() && comSnapshot.isOk() && comSnapshot.GetName() != pSnapshotItem->text(0))
    679             comSnapshot.SetName(pSnapshotItem->text(0));
    680     }
     683    if (!pSnapshotItem)
     684        return;
     685
     686    /* Rename corresponding snapshot: */
     687    CSnapshot comSnapshot = pSnapshotItem->snapshotID().isNull() ? CSnapshot() : m_comMachine.FindSnapshot(pSnapshotItem->snapshotID());
     688    if (!comSnapshot.isNull() && comSnapshot.isOk() && comSnapshot.GetName() != pSnapshotItem->text(0))
     689        comSnapshot.SetName(pSnapshotItem->text(0));
    681690}
    682691
     
    700709}
    701710
    702 void UISnapshotPane::sltTakeSnapshot()
    703 {
    704     takeSnapshot();
    705 }
    706 
    707711void UISnapshotPane::sltRestoreSnapshot(bool fSuppressNonCriticalWarnings /* = false */)
    708712{
     
    711715    AssertReturnVoid(pSnapshotItem);
    712716
    713     /* Detemine snapshot id: */
    714     const QString strSnapshotID = pSnapshotItem->snapshotID();
    715     AssertReturnVoid(!strSnapshotID.isNull());
    716     /* Get currently desired snapshot: */
    717     const CSnapshot comSnapshot = m_comMachine.FindSnapshot(strSnapshotID);
     717    /* Get desired snapshot: */
     718    const CSnapshot comSnapshot = pSnapshotItem->snapshot();
     719    AssertReturnVoid(!comSnapshot.isNull());
    718720
    719721    /* Ask the user if he really wants to restore the snapshot: */
     
    763765    AssertReturnVoid(pSnapshotItem);
    764766
    765     /* Detemine snapshot id: */
    766     const QString strSnapshotID = pSnapshotItem->snapshotID();
    767     AssertReturnVoid(!strSnapshotID.isNull());
    768     /* Get currently desired snapshot: */
    769     const CSnapshot comSnapshot = m_comMachine.FindSnapshot(strSnapshotID);
     767    /* Get desired snapshot: */
     768    const CSnapshot comSnapshot = pSnapshotItem->snapshot();
     769    AssertReturnVoid(!comSnapshot.isNull());
    770770
    771771    /* Confirm snapshot removal: */
     
    794794    /* Remove chosen snapshot: */
    795795    CMachine comMachine = comSession.GetMachine();
    796     CProgress comProgress = comMachine.DeleteSnapshot(strSnapshotID);
     796    CProgress comProgress = comMachine.DeleteSnapshot(pSnapshotItem->snapshotID());
    797797    if (comMachine.isOk())
    798798    {
     
    819819    AssertReturnVoid(!comSnapshot.isNull());
    820820
    821     // WTF?
    822     CMachine comMachine = comSnapshot.GetMachine();
    823 
    824821    /* Show Snapshot Details dialog: */
    825     VBoxSnapshotDetailsDlg pDlg(this);
    826     pDlg.getFromSnapshot(comSnapshot);
    827 
    828     if (pDlg.exec() == QDialog::Accepted)
    829         pDlg.putBackToSnapshot();
     822    QPointer<VBoxSnapshotDetailsDlg> pDlg = new VBoxSnapshotDetailsDlg(this);
     823    pDlg->getFromSnapshot(comSnapshot);
     824    if (pDlg->exec() == QDialog::Accepted)
     825        pDlg->putBackToSnapshot();
     826    if (pDlg)
     827        delete pDlg;
    830828}
    831829
     
    909907    switch (age)
    910908    {
    911         case SnapshotAgeFormat_InSeconds:
    912             m_ageUpdateTimer.setInterval(5 * 1000);
    913             break;
    914         case SnapshotAgeFormat_InMinutes:
    915             m_ageUpdateTimer.setInterval(60 * 1000);
    916             break;
    917         case SnapshotAgeFormat_InHours:
    918             m_ageUpdateTimer.setInterval(60 * 60 * 1000);
    919             break;
    920         case SnapshotAgeFormat_InDays:
    921             m_ageUpdateTimer.setInterval(24 * 60 * 60 * 1000);
    922             break;
    923         default:
    924             m_ageUpdateTimer.setInterval(0);
    925             break;
     909        case SnapshotAgeFormat_InSeconds: m_ageUpdateTimer.setInterval(5 * 1000); break;
     910        case SnapshotAgeFormat_InMinutes: m_ageUpdateTimer.setInterval(60 * 1000); break;
     911        case SnapshotAgeFormat_InHours:   m_ageUpdateTimer.setInterval(60 * 60 * 1000); break;
     912        case SnapshotAgeFormat_InDays:    m_ageUpdateTimer.setInterval(24 * 60 * 60 * 1000); break;
     913        default:                          m_ageUpdateTimer.setInterval(0); break;
    926914    }
    927915
     
    935923    /* Prepare result: */
    936924    bool fIsValid = true;
    937 
    938     // WTF?
    939     const SnapshotWgtItem *pSnapshotItem = m_pTreeWidget->currentItem() ? static_cast<const SnapshotWgtItem*>(m_pTreeWidget->currentItem()) : 0;
    940     AssertReturn(pSnapshotItem, (bool)0);
    941925
    942926    /* Open a session (this call will handle all errors): */
     
    978962
    979963        /* Show Take Snapshot dialog: */
    980         bool fDialogAccepted = pDlg->exec() == QDialog::Accepted;
    981 
    982         /* Is the dialog still valid? */
    983         if (pDlg)
     964        if (pDlg->exec() == QDialog::Accepted)
    984965        {
    985966            /* Acquire snapshot name/description: */
     
    987968            const QString strSnapshotDescription = pDlg->mTeDescription->toPlainText();
    988969
    989             /* Destroy dialog early: */
    990             delete pDlg;
    991 
    992             /* Was the dialog accepted? */
    993             if (fDialogAccepted)
     970            /* Take snapshot: */
     971            QString strSnapshotID;
     972            CProgress comProgress = comMachine.TakeSnapshot(strSnapshotName, strSnapshotDescription, true, strSnapshotID);
     973            if (comMachine.isOk())
    994974            {
    995                 /* Take snapshot: */
    996                 QString strSnapshotID;
    997                 CProgress comProgress = comMachine.TakeSnapshot(strSnapshotName, strSnapshotDescription, true, strSnapshotID);
    998                 if (comMachine.isOk())
     975                msgCenter().showModalProgressDialog(comProgress, m_comMachine.GetName(), ":/progress_snapshot_create_90px.png");
     976                if (!comProgress.isOk() || comProgress.GetResultCode() != 0)
    999977                {
    1000                     msgCenter().showModalProgressDialog(comProgress, m_comMachine.GetName(), ":/progress_snapshot_create_90px.png");
    1001                     if (!comProgress.isOk() || comProgress.GetResultCode() != 0)
    1002                     {
    1003                         msgCenter().cannotTakeSnapshot(comProgress, m_comMachine.GetName());
    1004                         fIsValid = false;
    1005                     }
    1006                 }
    1007                 else
    1008                 {
    1009                     msgCenter().cannotTakeSnapshot(comMachine, m_comMachine.GetName());
     978                    msgCenter().cannotTakeSnapshot(comProgress, m_comMachine.GetName());
    1010979                    fIsValid = false;
    1011980                }
    1012981            }
    1013982            else
     983            {
     984                msgCenter().cannotTakeSnapshot(comMachine, m_comMachine.GetName());
    1014985                fIsValid = false;
     986            }
    1015987        }
    1016988        else
    1017989            fIsValid = false;
    1018 
    1019         /* Unlock machine finally: */
    1020         comSession.UnlockMachine();
     990        if (pDlg)
     991        {
     992            delete pDlg;
     993            /* Unlock machine finally: */
     994            comSession.UnlockMachine();
     995        }
    1021996    }
    1022997
     
    11441119
    11451120    /* Walk through the children recursively: */
    1146     const CSnapshotVector snapshots = comSnapshot.GetChildren();
    1147     foreach (const CSnapshot &comIteratedSnapshot, snapshots)
     1121    foreach (const CSnapshot &comIteratedSnapshot, comSnapshot.GetChildren())
    11481122        populateSnapshots(comIteratedSnapshot, pSnapshotItem);
    11491123
  • trunk/src/VBox/Frontends/VirtualBox/src/selector/UISnapshotPane.h

    r63821 r63832  
    4747
    4848/** QWidget extension providing GUI with the pane to control snapshot related functionality. */
    49 class UISnapshotPane : public QIWithRetranslateUI <QWidget>, public Ui::UISnapshotPane
     49class UISnapshotPane : public QIWithRetranslateUI<QWidget>, public Ui::UISnapshotPane
    5050{
    5151    Q_OBJECT;
     
    8484      * @{ */
    8585        /** Proposes to take a snapshot. */
    86         void sltTakeSnapshot();
     86        void sltTakeSnapshot() { takeSnapshot(); }
    8787        /** Proposes to restore the snapshot. */
    8888        void sltRestoreSnapshot(bool fSuppressNonCriticalWarnings = false);
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