~ubuntu-branches/ubuntu/raring/virtualbox-ose/raring

« back to all changes in this revision

Viewing changes to src/VBox/Frontends/VirtualBox/include/VBoxVMListView.h

  • Committer: Bazaar Package Importer
  • Author(s): Felix Geyer
  • Date: 2009-12-18 16:44:29 UTC
  • mfrom: (0.3.3 upstream) (0.4.6 squeeze)
  • Revision ID: james.westby@ubuntu.com-20091218164429-jd34ccexpv5na11a
Tags: 3.1.2-dfsg-1ubuntu1
* Merge from Debian unstable (LP: #498219), remaining changes:
  - Disable update action
    - debian/patches/u01-disable-update-action.dpatch
  - VirtualBox should go in Accessories, not in System tools (LP: #288590)
    - debian/virtualbox-ose-qt.files/virtualbox-ose.desktop
  - Add Apport hook
    - debian/virtualbox-ose.files/source_virtualbox-ose.py
    - debian/virtualbox-ose.install
  - Add Launchpad integration
    - debian/control
    - debian/lpi-bug.xpm
    - debian/patches/u02-lp-integration.dpatch
* Fixes the following bugs:
  - Kernel module fails to build with Linux >= 2.6.32 (LP: #474625)
  - X.Org drivers need to be rebuilt against X-Server 1.7 (LP: #495935)
  - The *-source packages try to build the kernel modules even though the
    kernel headers aren't available (LP: #473334)
* Replace *-source packages with transitional packages for *-dkms.
* Adapt u01-disable-update-action.dpatch and u02-lp-integration.dpatch for
  new upstream version.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/** @file
2
 
 *
3
 
 * VBox frontends: Qt GUI ("VirtualBox"):
4
 
 * VBoxVMItem, VBoxVMModel, VBoxVMListView, VBoxVMItemPainter class declarations
5
 
 */
6
 
 
7
 
/*
8
 
 * Copyright (C) 2006-2008 Sun Microsystems, Inc.
9
 
 *
10
 
 * This file is part of VirtualBox Open Source Edition (OSE), as
11
 
 * available from http://www.virtualbox.org. This file is free software;
12
 
 * you can redistribute it and/or modify it under the terms of the GNU
13
 
 * General Public License (GPL) as published by the Free Software
14
 
 * Foundation, in version 2 as it comes in the "COPYING" file of the
15
 
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16
 
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17
 
 *
18
 
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
19
 
 * Clara, CA 95054 USA or visit http://www.sun.com if you need
20
 
 * additional information or have any questions.
21
 
 */
22
 
 
23
 
#ifndef __VBoxVMListView_h__
24
 
#define __VBoxVMListView_h__
25
 
 
26
 
#include "VBoxGlobal.h"
27
 
#include "QIListView.h"
28
 
 
29
 
/* Qt includes */
30
 
#include <QAbstractListModel>
31
 
#include <QDateTime>
32
 
 
33
 
class VBoxSelectorWnd;
34
 
 
35
 
class VBoxVMItem
36
 
{
37
 
public:
38
 
 
39
 
    VBoxVMItem (const CMachine &aMachine);
40
 
    virtual ~VBoxVMItem();
41
 
 
42
 
    CMachine machine() const { return mMachine; }
43
 
 
44
 
    QString name() const { return mName; }
45
 
    QIcon osIcon() const { return mAccessible ? vboxGlobal().vmGuestOSTypeIcon (mOSTypeId) : QPixmap (":/os_other.png"); }
46
 
    QString id() const { return mId; }
47
 
 
48
 
    QString sessionStateName() const;
49
 
    QIcon sessionStateIcon() const { return mAccessible ? vboxGlobal().toIcon (mState) : QPixmap (":/state_aborted_16px.png"); }
50
 
 
51
 
    QString snapshotName() const { return mSnapshotName; }
52
 
    ULONG snapshotCount() const { return mSnapshotCount; }
53
 
 
54
 
    QString toolTipText() const;
55
 
 
56
 
    bool accessible() const { return mAccessible; }
57
 
    const CVirtualBoxErrorInfo &accessError() const { return mAccessError; }
58
 
    KMachineState state() const { return mState; }
59
 
    KSessionState sessionState() const { return mSessionState; }
60
 
 
61
 
    bool recache();
62
 
 
63
 
    bool canSwitchTo() const;
64
 
    bool switchTo();
65
 
 
66
 
private:
67
 
 
68
 
    /* Private member vars */
69
 
    CMachine mMachine;
70
 
 
71
 
    /* Cached machine data (to minimize server requests) */
72
 
    QString mId;
73
 
    QString mSettingsFile;
74
 
 
75
 
    bool mAccessible;
76
 
    CVirtualBoxErrorInfo mAccessError;
77
 
 
78
 
    QString mName;
79
 
    QString mSnapshotName;
80
 
    KMachineState mState;
81
 
    QDateTime mLastStateChange;
82
 
    KSessionState mSessionState;
83
 
    QString mOSTypeId;
84
 
    ULONG mSnapshotCount;
85
 
 
86
 
    ULONG mPid;
87
 
};
88
 
 
89
 
/* Make the pointer of this class public to the QVariant framework */
90
 
Q_DECLARE_METATYPE(VBoxVMItem *);
91
 
 
92
 
class VBoxVMModel: public QAbstractListModel
93
 
{
94
 
    Q_OBJECT;
95
 
 
96
 
public:
97
 
    enum { SnapShotDisplayRole = Qt::UserRole,
98
 
           SnapShotFontRole,
99
 
           SessionStateDisplayRole,
100
 
           SessionStateDecorationRole,
101
 
           SessionStateFontRole,
102
 
           VBoxVMItemPtrRole };
103
 
 
104
 
    VBoxVMModel(QObject *aParent = 0)
105
 
        :QAbstractListModel (aParent) {}
106
 
 
107
 
    void addItem (VBoxVMItem *aItem);
108
 
    void removeItem (VBoxVMItem *aItem);
109
 
    void refreshItem (VBoxVMItem *aItem);
110
 
 
111
 
    void itemChanged (VBoxVMItem *aItem);
112
 
 
113
 
    void clear();
114
 
 
115
 
    VBoxVMItem *itemById (const QString &aId) const;
116
 
    VBoxVMItem *itemByRow (int aRow) const;
117
 
    QModelIndex indexById (const QString &aId) const;
118
 
 
119
 
    int rowById (const QString &aId) const;;
120
 
 
121
 
    void sort (Qt::SortOrder aOrder = Qt::AscendingOrder) { sort (0, aOrder); }
122
 
 
123
 
    /* The following are necessary model implementations */
124
 
    void sort (int aColumn, Qt::SortOrder aOrder = Qt::AscendingOrder);
125
 
 
126
 
    int rowCount (const QModelIndex &aParent = QModelIndex()) const;
127
 
 
128
 
    QVariant data (const QModelIndex &aIndex, int aRole) const;
129
 
    QVariant headerData (int aSection, Qt::Orientation aOrientation,
130
 
                         int aRole = Qt::DisplayRole) const;
131
 
 
132
 
    bool removeRows (int aRow, int aCount, const QModelIndex &aParent = QModelIndex());
133
 
 
134
 
private:
135
 
    static bool VBoxVMItemNameCompareLessThan (VBoxVMItem* aItem1, VBoxVMItem* aItem2);
136
 
    static bool VBoxVMItemNameCompareGreaterThan (VBoxVMItem* aItem1, VBoxVMItem* aItem2);
137
 
 
138
 
    /* Private member vars */
139
 
    QList<VBoxVMItem *> mVMItemList;
140
 
};
141
 
 
142
 
class VBoxVMListView: public QIListView
143
 
{
144
 
    Q_OBJECT;
145
 
 
146
 
public:
147
 
    VBoxVMListView (QWidget *aParent = 0);
148
 
 
149
 
    void selectItemByRow (int row);
150
 
    void selectItemById (const QString &aID);
151
 
    void ensureSomeRowSelected (int aRowHint);
152
 
    VBoxVMItem * selectedItem() const;
153
 
 
154
 
    void ensureCurrentVisible();
155
 
 
156
 
signals:
157
 
    void currentChanged();
158
 
    void activated();
159
 
 
160
 
protected slots:
161
 
    void selectionChanged (const QItemSelection &aSelected, const QItemSelection &aDeselected);
162
 
    void currentChanged (const QModelIndex &aCurrent, const QModelIndex &aPrevious);
163
 
    void dataChanged (const QModelIndex &aTopLeft, const QModelIndex &aBottomRight);
164
 
 
165
 
protected:
166
 
    bool selectCurrent();
167
 
};
168
 
 
169
 
class VBoxVMItemPainter: public QIItemDelegate
170
 
{
171
 
public:
172
 
    VBoxVMItemPainter (QObject *aParent = 0)
173
 
      : QIItemDelegate (aParent), mMargin (8), mSpacing (mMargin * 3 / 2) {}
174
 
 
175
 
    QSize sizeHint (const QStyleOptionViewItem &aOption,
176
 
                    const QModelIndex &aIndex) const;
177
 
 
178
 
    void paint (QPainter *aPainter, const QStyleOptionViewItem &aOption,
179
 
                const QModelIndex &aIndex) const;
180
 
 
181
 
private:
182
 
    inline QFontMetrics fontMetric (const QModelIndex &aIndex, int aRole) const { return QFontMetrics (aIndex.data (aRole).value<QFont>()); }
183
 
    inline QIcon::Mode iconMode (QStyle::State aState) const
184
 
    {
185
 
        if (!(aState & QStyle::State_Enabled))
186
 
            return QIcon::Disabled;
187
 
        if (aState & QStyle::State_Selected)
188
 
            return QIcon::Selected;
189
 
        return QIcon::Normal;
190
 
    }
191
 
    inline QIcon::State iconState (QStyle::State aState) const { return aState & QStyle::State_Open ? QIcon::On : QIcon::Off; }
192
 
 
193
 
    QRect rect (const QStyleOptionViewItem &aOption,
194
 
                const QModelIndex &aIndex, int aRole) const;
195
 
 
196
 
    void calcLayout (const QModelIndex &aIndex,
197
 
                     QRect *aOSType, QRect *aVMName, QRect *aShot,
198
 
                     QRect *aStateIcon, QRect *aState) const;
199
 
 
200
 
    /* Private member vars */
201
 
    int mMargin;
202
 
    int mSpacing;
203
 
};
204
 
 
205
 
#endif /* __VBoxVMListView_h__ */