VirtualBox

Changeset 24774 in vbox for trunk


Ignore:
Timestamp:
Nov 18, 2009 10:17:40 PM (15 years ago)
Author:
vboxsync
Message:

FE/Qt4: Snapshots Dialog: snapshot tree-widget item now contains snapshot's age.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/include/VBoxSnapshotsWgt.h

    r23924 r24774  
    2424#define __VBoxSnapshotsWgt_h__
    2525
     26/* Global includes */
     27#include <QTimer>
     28
    2629/* Local includes */
    2730#include "VBoxSnapshotsWgt.gen.h"
     
    3134/* Local forwards */
    3235class SnapshotWgtItem;
     36
     37/* Snapshot age format */
     38enum SnapshotAgeFormat
     39{
     40    AgeInSeconds,
     41    AgeInMinutes,
     42    AgeInHours,
     43    AgeInDays,
     44    AgeMax
     45};
    3346
    3447class VBoxSnapshotsWgt : public QIWithRetranslateUI <QWidget>, public Ui::VBoxSnapshotsWgt
     
    6174    void sessionStateChanged (const VBoxSessionStateChangeEvent &aEvent);
    6275
     76    void updateSnapshotsAge();
     77
    6378private:
    6479
     
    6782    SnapshotWgtItem* curStateItem();
    6883    void populateSnapshots (const CSnapshot &aSnapshot, QTreeWidgetItem *aItem);
     84    SnapshotAgeFormat traverseSnapshotAge (QTreeWidgetItem *aParentItem);
    6985
    7086    CMachine         mMachine;
     
    8197    QAction         *mShowSnapshotDetailsAction;
    8298    QAction         *mTakeSnapshotAction;
     99
     100    QTimer          mAgeUpdateTimer;
    83101};
    84102
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxSnapshotsWgt.cpp

    r24734 r24774  
    4141public:
    4242
     43    enum { ItemType = QTreeWidgetItem::UserType + 1 };
     44
    4345    /* Normal snapshot item (child of tree-widget) */
    4446    SnapshotWgtItem (QTreeWidget *aTreeWidget, const CSnapshot &aSnapshot)
    45         : QTreeWidgetItem (aTreeWidget)
     47        : QTreeWidgetItem (aTreeWidget, ItemType)
    4648        , mSnapshot (aSnapshot)
    4749    {
     
    5052    /* Normal snapshot item (child of tree-widget-item) */
    5153    SnapshotWgtItem (QTreeWidgetItem *aRootItem, const CSnapshot &aSnapshot)
    52         : QTreeWidgetItem (aRootItem)
     54        : QTreeWidgetItem (aRootItem, ItemType)
    5355        , mSnapshot (aSnapshot)
    5456    {
     
    5759    /* Current state item (child of tree-widget) */
    5860    SnapshotWgtItem (QTreeWidget *aTreeWidget, const CMachine &aMachine)
    59         : QTreeWidgetItem (aTreeWidget)
     61        : QTreeWidgetItem (aTreeWidget, ItemType)
    6062        , mMachine (aMachine)
    6163    {
     
    6567    /* Current state item (child of tree-widget-item) */
    6668    SnapshotWgtItem (QTreeWidgetItem *aRootItem, const CMachine &aMachine)
    67         : QTreeWidgetItem (aRootItem)
     69        : QTreeWidgetItem (aRootItem, ItemType)
    6870        , mMachine (aMachine)
    6971    {
    7072        updateCurrentState (mMachine.GetState());
     73    }
     74
     75    QVariant data (int aColumn, int aRole) const
     76    {
     77        switch (aRole)
     78        {
     79            case Qt::DisplayRole:
     80                return QVariant (QString ("%1%2").arg (QTreeWidgetItem::data (aColumn, aRole).toString()).arg (mAge));
     81            default:
     82                break;
     83        }
     84        return QTreeWidgetItem::data (aColumn, aRole);
     85    }
     86
     87    QString text (int aColumn) const
     88    {
     89        return QTreeWidgetItem::data (aColumn, Qt::DisplayRole).toString();
    7190    }
    7291
     
    148167    }
    149168
     169    SnapshotAgeFormat updateAge()
     170    {
     171        QString oldAge (mAge);
     172
     173        /* Age: [date time|%1d ago|%1h ago|%1min ago|%1sec ago] */
     174        SnapshotAgeFormat ageFormat;
     175        if (mTimestamp.daysTo (QDateTime::currentDateTime()) > 30)
     176        {
     177            mAge = VBoxSnapshotsWgt::tr (" [%1]").arg (mTimestamp.toString (Qt::LocalDate));
     178            ageFormat = AgeMax;
     179        }
     180        else if (mTimestamp.secsTo (QDateTime::currentDateTime()) > 60 * 60 * 24)
     181        {
     182            mAge = VBoxSnapshotsWgt::tr (" [%1d ago]").arg (mTimestamp.secsTo (QDateTime::currentDateTime()) / 60 / 60 / 24);
     183            ageFormat = AgeInDays;
     184        }
     185        else if (mTimestamp.secsTo (QDateTime::currentDateTime()) > 60 * 60)
     186        {
     187            mAge = VBoxSnapshotsWgt::tr (" [%1h ago]").arg (mTimestamp.secsTo (QDateTime::currentDateTime()) / 60 / 60);
     188            ageFormat = AgeInHours;
     189        }
     190        else if (mTimestamp.secsTo (QDateTime::currentDateTime()) > 60)
     191        {
     192            mAge = VBoxSnapshotsWgt::tr (" [%1min ago]").arg (mTimestamp.secsTo (QDateTime::currentDateTime()) / 60);
     193            ageFormat = AgeInMinutes;
     194        }
     195        else
     196        {
     197            mAge = VBoxSnapshotsWgt::tr (" [%1sec ago]").arg (mTimestamp.secsTo (QDateTime::currentDateTime()));
     198            ageFormat = AgeInSeconds;
     199        }
     200
     201        if (mAge != oldAge)
     202            emitDataChanged();
     203
     204        return ageFormat;
     205    }
     206
    150207private:
    151208
     
    211268    QString mDesc;
    212269    QDateTime mTimestamp;
     270    QString mAge;
    213271
    214272    bool mCurStateModified;
     
    308366    mTakeSnapshotAction->setShortcut (QString ("Ctrl+Shift+S"));
    309367
     368    mAgeUpdateTimer.setSingleShot (true);
     369
    310370    /* Setup connections */
    311371    connect (mTreeWidget, SIGNAL (currentItemChanged (QTreeWidgetItem*, QTreeWidgetItem*)),
     
    328388             this, SLOT (sessionStateChanged (const VBoxSessionStateChangeEvent&)));
    329389
     390    connect (&mAgeUpdateTimer, SIGNAL (timeout()), this, SLOT (updateSnapshotsAge()));
     391
    330392    retranslateUi();
    331393}
     
    406468    if (item)
    407469    {
    408         CSnapshot snap = mMachine.GetSnapshot (item->snapshotId());
     470        CSnapshot snap = item->snapshotId().isNull() ? CSnapshot() : mMachine.GetSnapshot (item->snapshotId());
    409471        if (!snap.isNull() && snap.isOk() && snap.GetName() != item->text (0))
    410472            snap.SetName (item->text (0));
     
    518580    while (*iterator)
    519581    {
    520         QString snapShot = (*iterator)->text (0);
     582        QString snapShot = static_cast <SnapshotWgtItem*> (*iterator)->text (0);
    521583        int pos = regExp.indexIn (snapShot);
    522584        if (pos != -1)
     
    584646    mSessionState = aEvent.state;
    585647    onCurrentChanged (mTreeWidget->currentItem());
     648}
     649
     650void VBoxSnapshotsWgt::updateSnapshotsAge()
     651{
     652    if (mAgeUpdateTimer.isActive())
     653        mAgeUpdateTimer.stop();
     654
     655    SnapshotAgeFormat age = traverseSnapshotAge (mTreeWidget->invisibleRootItem());
     656
     657    switch (age)
     658    {
     659        case AgeInSeconds:
     660            mAgeUpdateTimer.setInterval (5 * 1000);
     661            break;
     662        case AgeInMinutes:
     663            mAgeUpdateTimer.setInterval (60 * 1000);
     664            break;
     665        case AgeInHours:
     666            mAgeUpdateTimer.setInterval (60 * 60 * 1000);
     667            break;
     668        case AgeInDays:
     669            mAgeUpdateTimer.setInterval (24 * 60 * 60 * 1000);
     670            break;
     671        default:
     672            mAgeUpdateTimer.setInterval (0);
     673            break;
     674    }
     675
     676    if (mAgeUpdateTimer.interval() > 0)
     677        mAgeUpdateTimer.start();
    586678}
    587679
     
    669761    }
    670762
     763    /* Updating age */
     764    updateSnapshotsAge();
     765
    671766    mTreeWidget->resizeColumnToContents (0);
    672767}
     
    715810}
    716811
     812SnapshotAgeFormat VBoxSnapshotsWgt::traverseSnapshotAge (QTreeWidgetItem *aParentItem)
     813{
     814    SnapshotWgtItem *parentItem = aParentItem->type() == SnapshotWgtItem::ItemType ?
     815                                  static_cast <SnapshotWgtItem*> (aParentItem) : 0;
     816
     817    SnapshotAgeFormat age = parentItem ? parentItem->updateAge() : AgeMax;
     818    for (int i = 0; i < aParentItem->childCount(); ++ i)
     819    {
     820        SnapshotAgeFormat newAge = traverseSnapshotAge (aParentItem->child (i));
     821        age = newAge < age ? newAge : age;
     822    }
     823
     824    return age;
     825}
     826
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