VirtualBox

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

Last change on this file since 25045 was 25001, checked in by vboxsync, 15 years ago

FE/Qt4-OSX: Fix various focus & background color problems for some of the editor items in the appliance dialog on Cocoa.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.5 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 }
213
214protected:
215#ifdef QT_MAC_USE_COCOA
216 bool eventFilter (QObject *aObject, QEvent *aEvent);
217#endif /* QT_MAC_USE_COCOA */
218
219private:
220 /* Private member vars */
221 QAbstractProxyModel *mProxy;
222};
223
224////////////////////////////////////////////////////////////////////////////////
225// VirtualSystemSortProxyModel
226
227class VirtualSystemSortProxyModel: public QSortFilterProxyModel
228{
229public:
230 VirtualSystemSortProxyModel (QObject *aParent = NULL);
231
232protected:
233 bool filterAcceptsRow (int aSourceRow, const QModelIndex & aSourceParent) const;
234 bool lessThan (const QModelIndex &aLeft, const QModelIndex &aRight) const;
235
236 static KVirtualSystemDescriptionType mSortList[];
237
238 QList<KVirtualSystemDescriptionType> mFilterList;
239};
240
241////////////////////////////////////////////////////////////////////////////////
242// VBoxApplianceEditorWgt
243
244class VBoxApplianceEditorWgt : public QIWithRetranslateUI<QWidget>,
245 public Ui::VBoxApplianceEditorWgt
246{
247 Q_OBJECT;
248
249public:
250 VBoxApplianceEditorWgt (QWidget *aParent = NULL);
251
252 bool isValid() const { return mAppliance != NULL; }
253 CAppliance* appliance() const { return mAppliance; }
254
255 static int minGuestRAM() { return mMinGuestRAM; }
256 static int maxGuestRAM() { return mMaxGuestRAM; }
257 static int minGuestCPUCount() { return mMinGuestCPUCount; }
258 static int maxGuestCPUCount() { return mMaxGuestCPUCount; }
259
260public slots:
261 void restoreDefaults();
262
263protected:
264 virtual void retranslateUi();
265
266 /* Protected member vars */
267 CAppliance *mAppliance;
268 VirtualSystemModel *mModel;
269
270private:
271 static void initSystemSettings();
272
273 /* Private member vars */
274 static int mMinGuestRAM;
275 static int mMaxGuestRAM;
276 static int mMinGuestCPUCount;
277 static int mMaxGuestCPUCount;
278};
279
280#endif /* __VBoxApplianceEditorWgt_h__ */
281
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