VirtualBox

source: vbox/trunk/src/VBox/Frontends/VirtualBox/include/VBoxApplianceEditorWgt.h@ 18384

Last change on this file since 18384 was 18384, checked in by vboxsync, 16 years ago

FE/Qt4: remove import dependency

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.3 KB
Line 
1/** @file
2 *
3 * VBox frontends: Qt4 GUI ("VirtualBox"):
4 * VBoxApplianceEditorWgt class declaration
5 */
6
7/*
8 * Copyright (C) 2009 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 __VBoxApplianceEditorWgt_h__
24#define __VBoxApplianceEditorWgt_h__
25
26/* VBox includes */
27#include "COMDefs.h"
28#include "VBoxApplianceEditorWgt.gen.h"
29#include "QIWithRetranslateUI.h"
30
31/* Qt includes */
32#include <QSortFilterProxyModel>
33#include <QItemDelegate>
34
35/* VBox forward declarations */
36class ModelItem;
37
38////////////////////////////////////////////////////////////////////////////////
39// Globals
40
41enum TreeViewSection { DescriptionSection = 0, OriginalValueSection, ConfigValueSection };
42
43////////////////////////////////////////////////////////////////////////////////
44// ModelItem
45
46enum ModelItemType { RootType, VirtualSystemType, HardwareType };
47
48/* This & the following derived classes represent the data items of a Virtual
49 System. All access/manipulation is done with the help of virtual functions
50 to keep the interface clean. ModelItem is able to handle tree structures
51 with a parent & several children's. */
52class ModelItem
53{
54public:
55 ModelItem (int aNumber, ModelItemType aType, ModelItem *aParent = NULL);
56
57 ~ModelItem();
58
59 ModelItem *parent() const { return mParentItem; }
60
61 void appendChild (ModelItem *aChild);
62 ModelItem * child (int aRow) const;
63
64 int row() const;
65
66 int childCount() const;
67 int columnCount() const { return 3; }
68
69 virtual Qt::ItemFlags itemFlags (int /* aColumn */) const { return 0; }
70 virtual bool setData (int /* aColumn */, const QVariant & /* aValue */, int /* aRole */) { return false; }
71 virtual QVariant data (int /* aColumn */, int /* aRole */) const { return QVariant(); }
72 virtual QWidget * createEditor (QWidget * /* aParent */, const QStyleOptionViewItem & /* aOption */, const QModelIndex & /* aIndex */) const { return NULL; }
73 virtual bool setEditorData (QWidget * /* aEditor */, const QModelIndex & /* aIndex */) const { return false; }
74 virtual bool setModelData (QWidget * /* aEditor */, QAbstractItemModel * /* aModel */, const QModelIndex & /* aIndex */) { return false; }
75
76 virtual void restoreDefaults() {}
77 virtual void putBack (QVector<BOOL>& aFinalStates, QVector<QString>& aFinalValues, QVector<QString>& aFinalExtraValues);
78
79 ModelItemType type() const { return mType; }
80
81protected:
82 /* Protected member vars */
83 int mNumber;
84 ModelItemType mType;
85
86 ModelItem *mParentItem;
87 QList<ModelItem*> mChildItems;
88};
89
90////////////////////////////////////////////////////////////////////////////////
91// VirtualSystemItem
92
93/* This class represent a Virtual System with an index. */
94class VirtualSystemItem: public ModelItem
95{
96public:
97 VirtualSystemItem (int aNumber, CVirtualSystemDescription aDesc, ModelItem *aParent);
98
99 virtual QVariant data (int aColumn, int aRole) const;
100
101 virtual void putBack (QVector<BOOL>& aFinalStates, QVector<QString>& aFinalValues, QVector<QString>& aFinalExtraValues);
102
103private:
104 CVirtualSystemDescription mDesc;
105};
106
107////////////////////////////////////////////////////////////////////////////////
108// HardwareItem
109
110/* This class represent an hardware item of a Virtual System. All values of
111 KVirtualSystemDescriptionType are supported & handled differently. */
112class HardwareItem: public ModelItem
113{
114 friend class VirtualSystemSortProxyModel;
115public:
116
117 HardwareItem (int aNumber,
118 KVirtualSystemDescriptionType aType,
119 const QString &aRef,
120 const QString &aOrigValue,
121 const QString &aConfigValue,
122 const QString &aExtraConfigValue,
123 ModelItem *aParent);
124
125 virtual void putBack (QVector<BOOL>& aFinalStates, QVector<QString>& aFinalValues, QVector<QString>& aFinalExtraValues);
126
127 virtual bool setData (int aColumn, const QVariant &aValue, int aRole);
128 virtual QVariant data (int aColumn, int aRole) const;
129
130 virtual Qt::ItemFlags itemFlags (int aColumn) const;
131
132 virtual QWidget * createEditor (QWidget *aParent, const QStyleOptionViewItem &aOption, const QModelIndex &aIndex) const;
133 virtual bool setEditorData (QWidget *aEditor, const QModelIndex &aIndex) const;
134
135 virtual bool setModelData (QWidget *aEditor, QAbstractItemModel *aModel, const QModelIndex &aIndex);
136
137 virtual void restoreDefaults()
138 {
139 mConfigValue = mConfigDefaultValue;
140 mCheckState = Qt::Checked;
141 }
142
143private:
144
145 /* Private member vars */
146 KVirtualSystemDescriptionType mType;
147 QString mRef;
148 QString mOrigValue;
149 QString mConfigValue;
150 QString mConfigDefaultValue;
151 QString mExtraConfigValue;
152 Qt::CheckState mCheckState;
153};
154
155////////////////////////////////////////////////////////////////////////////////
156// VirtualSystemModel
157
158class VirtualSystemModel: public QAbstractItemModel
159{
160
161public:
162 VirtualSystemModel (QVector<CVirtualSystemDescription>& aVSDs, QObject *aParent = NULL);
163
164 QModelIndex index (int aRow, int aColumn, const QModelIndex &aParent = QModelIndex()) const;
165 QModelIndex parent (const QModelIndex &aIndex) const;
166 int rowCount (const QModelIndex &aParent = QModelIndex()) const;
167 int columnCount (const QModelIndex &aParent = QModelIndex()) const;
168 bool setData (const QModelIndex &aIndex, const QVariant &aValue, int aRole);
169 QVariant data (const QModelIndex &aIndex, int aRole = Qt::DisplayRole) const;
170 Qt::ItemFlags flags (const QModelIndex &aIndex) const;
171 QVariant headerData (int aSection, Qt::Orientation aOrientation, int aRole) const;
172
173 void restoreDefaults (const QModelIndex& aParent = QModelIndex());
174 void putBack();
175
176private:
177 /* Private member vars */
178 ModelItem *mRootItem;
179};
180
181////////////////////////////////////////////////////////////////////////////////
182// VirtualSystemDelegate
183
184/* The delegate is used for creating/handling the different editors for the
185 various types we support. This class forward the requests to the virtual
186 methods of our different ModelItems. If this is not possible the default
187 methods of QItemDelegate are used to get some standard behavior. Note: We
188 have to handle the proxy model ourself. I really don't understand why Qt is
189 not doing this for us. */
190class VirtualSystemDelegate: public QItemDelegate
191{
192public:
193 VirtualSystemDelegate (QAbstractProxyModel *aProxy, QObject *aParent = NULL);
194
195 QWidget * createEditor (QWidget *aParent, const QStyleOptionViewItem &aOption, const QModelIndex &aIndex) const;
196 void setEditorData (QWidget *aEditor, const QModelIndex &aIndex) const;
197 void setModelData (QWidget *aEditor, QAbstractItemModel *aModel, const QModelIndex &aIndex) const;
198 void updateEditorGeometry (QWidget *aEditor, const QStyleOptionViewItem &aOption, const QModelIndex &aIndex) const;
199
200 QSize sizeHint (const QStyleOptionViewItem &aOption, const QModelIndex &aIndex) const
201 {
202 QSize size = QItemDelegate::sizeHint (aOption, aIndex);
203#ifdef Q_WS_MAC
204 int h = 28;
205#else /* Q_WS_MAC */
206 int h = 24;
207#endif /* Q_WS_MAC */
208 size.setHeight (RT_MAX (h, size.height()));
209 return size;
210 }
211private:
212 /* Private member vars */
213 QAbstractProxyModel *mProxy;
214};
215
216////////////////////////////////////////////////////////////////////////////////
217// VirtualSystemSortProxyModel
218
219class VirtualSystemSortProxyModel: public QSortFilterProxyModel
220{
221public:
222 VirtualSystemSortProxyModel (QObject *aParent = NULL);
223
224protected:
225 bool filterAcceptsRow (int aSourceRow, const QModelIndex & aSourceParent) const;
226 bool lessThan (const QModelIndex &aLeft, const QModelIndex &aRight) const;
227
228 static KVirtualSystemDescriptionType mSortList[];
229
230 QList<KVirtualSystemDescriptionType> mFilterList;
231};
232
233////////////////////////////////////////////////////////////////////////////////
234// VBoxApplianceEditorWgt
235
236class VBoxApplianceEditorWgt : public QIWithRetranslateUI<QWidget>,
237 public Ui::VBoxApplianceEditorWgt
238{
239 Q_OBJECT;
240
241public:
242 VBoxApplianceEditorWgt (QWidget *aParent = NULL);
243
244 bool isValid() const { return mAppliance != NULL; }
245 CAppliance* appliance() const { return mAppliance; }
246
247 static int minGuestRAM() { return mMinGuestRAM; }
248 static int maxGuestRAM() { return mMaxGuestRAM; }
249 static int minGuestCPUCount() { return mMinGuestCPUCount; }
250 static int maxGuestCPUCount() { return mMaxGuestCPUCount; }
251
252public slots:
253 void restoreDefaults();
254
255protected:
256 virtual void retranslateUi();
257
258 /* Protected member vars */
259 CAppliance *mAppliance;
260 VirtualSystemModel *mModel;
261
262private:
263 static void initSystemSettings();
264
265 /* Private member vars */
266 static int mMinGuestRAM;
267 static int mMaxGuestRAM;
268 static int mMinGuestCPUCount;
269 static int mMaxGuestCPUCount;
270};
271
272#endif /* __VBoxApplianceEditorWgt_h__ */
273
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette