VirtualBox

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

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

FE/Qt4-OVF: make it possible to edit items with the keyboard

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.4 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 QModelIndex buddy (const QModelIndex &aIndex) const;
174
175 void restoreDefaults (const QModelIndex& aParent = QModelIndex());
176 void putBack();
177
178private:
179 /* Private member vars */
180 ModelItem *mRootItem;
181};
182
183////////////////////////////////////////////////////////////////////////////////
184// VirtualSystemDelegate
185
186/* The delegate is used for creating/handling the different editors for the
187 various types we support. This class forward the requests to the virtual
188 methods of our different ModelItems. If this is not possible the default
189 methods of QItemDelegate are used to get some standard behavior. Note: We
190 have to handle the proxy model ourself. I really don't understand why Qt is
191 not doing this for us. */
192class VirtualSystemDelegate: public QItemDelegate
193{
194public:
195 VirtualSystemDelegate (QAbstractProxyModel *aProxy, QObject *aParent = NULL);
196
197 QWidget * createEditor (QWidget *aParent, const QStyleOptionViewItem &aOption, const QModelIndex &aIndex) const;
198 void setEditorData (QWidget *aEditor, const QModelIndex &aIndex) const;
199 void setModelData (QWidget *aEditor, QAbstractItemModel *aModel, const QModelIndex &aIndex) const;
200 void updateEditorGeometry (QWidget *aEditor, const QStyleOptionViewItem &aOption, const QModelIndex &aIndex) const;
201
202 QSize sizeHint (const QStyleOptionViewItem &aOption, const QModelIndex &aIndex) const
203 {
204 QSize size = QItemDelegate::sizeHint (aOption, aIndex);
205#ifdef Q_WS_MAC
206 int h = 28;
207#else /* Q_WS_MAC */
208 int h = 24;
209#endif /* Q_WS_MAC */
210 size.setHeight (RT_MAX (h, size.height()));
211 return size;
212 }
213private:
214 /* Private member vars */
215 QAbstractProxyModel *mProxy;
216};
217
218////////////////////////////////////////////////////////////////////////////////
219// VirtualSystemSortProxyModel
220
221class VirtualSystemSortProxyModel: public QSortFilterProxyModel
222{
223public:
224 VirtualSystemSortProxyModel (QObject *aParent = NULL);
225
226protected:
227 bool filterAcceptsRow (int aSourceRow, const QModelIndex & aSourceParent) const;
228 bool lessThan (const QModelIndex &aLeft, const QModelIndex &aRight) const;
229
230 static KVirtualSystemDescriptionType mSortList[];
231
232 QList<KVirtualSystemDescriptionType> mFilterList;
233};
234
235////////////////////////////////////////////////////////////////////////////////
236// VBoxApplianceEditorWgt
237
238class VBoxApplianceEditorWgt : public QIWithRetranslateUI<QWidget>,
239 public Ui::VBoxApplianceEditorWgt
240{
241 Q_OBJECT;
242
243public:
244 VBoxApplianceEditorWgt (QWidget *aParent = NULL);
245
246 bool isValid() const { return mAppliance != NULL; }
247 CAppliance* appliance() const { return mAppliance; }
248
249 static int minGuestRAM() { return mMinGuestRAM; }
250 static int maxGuestRAM() { return mMaxGuestRAM; }
251 static int minGuestCPUCount() { return mMinGuestCPUCount; }
252 static int maxGuestCPUCount() { return mMaxGuestCPUCount; }
253
254public slots:
255 void restoreDefaults();
256
257protected:
258 virtual void retranslateUi();
259
260 /* Protected member vars */
261 CAppliance *mAppliance;
262 VirtualSystemModel *mModel;
263
264private:
265 static void initSystemSettings();
266
267 /* Private member vars */
268 static int mMinGuestRAM;
269 static int mMaxGuestRAM;
270 static int mMinGuestCPUCount;
271 static int mMaxGuestCPUCount;
272};
273
274#endif /* __VBoxApplianceEditorWgt_h__ */
275
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