1 | /* $Id: UIDetailsContextMenu.cpp 98103 2023-01-17 14:15:46Z vboxsync $ */
|
---|
2 | /** @file
|
---|
3 | * VBox Qt GUI - UIDetailsContextMenu class implementation.
|
---|
4 | */
|
---|
5 |
|
---|
6 | /*
|
---|
7 | * Copyright (C) 2012-2023 Oracle and/or its affiliates.
|
---|
8 | *
|
---|
9 | * This file is part of VirtualBox base platform packages, as
|
---|
10 | * available from https://www.virtualbox.org.
|
---|
11 | *
|
---|
12 | * This program is free software; you can redistribute it and/or
|
---|
13 | * modify it under the terms of the GNU General Public License
|
---|
14 | * as published by the Free Software Foundation, in version 3 of the
|
---|
15 | * License.
|
---|
16 | *
|
---|
17 | * This program is distributed in the hope that it will be useful, but
|
---|
18 | * WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
20 | * General Public License for more details.
|
---|
21 | *
|
---|
22 | * You should have received a copy of the GNU General Public License
|
---|
23 | * along with this program; if not, see <https://www.gnu.org/licenses>.
|
---|
24 | *
|
---|
25 | * SPDX-License-Identifier: GPL-3.0-only
|
---|
26 | */
|
---|
27 |
|
---|
28 | /* Qt includes: */
|
---|
29 | #include <QHBoxLayout>
|
---|
30 | #include <QListWidget>
|
---|
31 | #include <QMetaEnum>
|
---|
32 |
|
---|
33 | /* GUI includes: */
|
---|
34 | #include "UIConverter.h"
|
---|
35 | #include "UIDetailsContextMenu.h"
|
---|
36 | #include "UIDetailsModel.h"
|
---|
37 |
|
---|
38 |
|
---|
39 | UIDetailsContextMenu::UIDetailsContextMenu(UIDetailsModel *pModel)
|
---|
40 | : QIWithRetranslateUI2<QWidget>(0, Qt::Popup)
|
---|
41 | , m_pModel(pModel)
|
---|
42 | , m_pListWidgetCategories(0)
|
---|
43 | , m_pListWidgetOptions(0)
|
---|
44 | {
|
---|
45 | prepare();
|
---|
46 | }
|
---|
47 |
|
---|
48 | void UIDetailsContextMenu::updateCategoryStates()
|
---|
49 | {
|
---|
50 | /* Enumerate all the category items: */
|
---|
51 | for (int i = 0; i < m_pListWidgetCategories->count(); ++i)
|
---|
52 | {
|
---|
53 | QListWidgetItem *pCategoryItem = m_pListWidgetCategories->item(i);
|
---|
54 | if (pCategoryItem)
|
---|
55 | {
|
---|
56 | /* Apply check-state on per-enum basis: */
|
---|
57 | const DetailsElementType enmCategoryType = pCategoryItem->data(DataField_Type).value<DetailsElementType>();
|
---|
58 | pCategoryItem->setCheckState(m_pModel->categories().contains(enmCategoryType) ? Qt::Checked : Qt::Unchecked);
|
---|
59 | }
|
---|
60 | }
|
---|
61 | }
|
---|
62 |
|
---|
63 | void UIDetailsContextMenu::updateOptionStates(DetailsElementType enmRequiredCategoryType /* = DetailsElementType_Invalid */)
|
---|
64 | {
|
---|
65 | /* First make sure we really have category item selected: */
|
---|
66 | QListWidgetItem *pCategoryItem = m_pListWidgetCategories->currentItem();
|
---|
67 | if (!pCategoryItem)
|
---|
68 | return;
|
---|
69 |
|
---|
70 | /* Then acquire category type and check if it is suitable: */
|
---|
71 | const DetailsElementType enmCategoryType = pCategoryItem->data(DataField_Type).value<DetailsElementType>();
|
---|
72 | if (enmRequiredCategoryType == DetailsElementType_Invalid)
|
---|
73 | enmRequiredCategoryType = enmCategoryType;
|
---|
74 | if (enmCategoryType != enmRequiredCategoryType)
|
---|
75 | return;
|
---|
76 |
|
---|
77 | /* Handle known category types: */
|
---|
78 | switch (enmRequiredCategoryType)
|
---|
79 | {
|
---|
80 | case DetailsElementType_General:
|
---|
81 | {
|
---|
82 | /* Enumerate all the option items: */
|
---|
83 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
84 | {
|
---|
85 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
86 | if (pOptionItem)
|
---|
87 | {
|
---|
88 | /* Apply check-state on per-enum basis: */
|
---|
89 | const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral enmOptionType =
|
---|
90 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>();
|
---|
91 | pOptionItem->setCheckState(m_pModel->optionsGeneral() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
92 | }
|
---|
93 | }
|
---|
94 | break;
|
---|
95 | }
|
---|
96 | case DetailsElementType_System:
|
---|
97 | {
|
---|
98 | /* Enumerate all the option items: */
|
---|
99 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
100 | {
|
---|
101 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
102 | if (pOptionItem)
|
---|
103 | {
|
---|
104 | /* Apply check-state on per-enum basis: */
|
---|
105 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem enmOptionType =
|
---|
106 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>();
|
---|
107 | pOptionItem->setCheckState(m_pModel->optionsSystem() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
108 | }
|
---|
109 | }
|
---|
110 | break;
|
---|
111 | }
|
---|
112 | case DetailsElementType_Display:
|
---|
113 | {
|
---|
114 | /* Enumerate all the option items: */
|
---|
115 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
116 | {
|
---|
117 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
118 | if (pOptionItem)
|
---|
119 | {
|
---|
120 | /* Apply check-state on per-enum basis: */
|
---|
121 | const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay enmOptionType =
|
---|
122 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>();
|
---|
123 | pOptionItem->setCheckState(m_pModel->optionsDisplay() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
124 | }
|
---|
125 | }
|
---|
126 | break;
|
---|
127 | }
|
---|
128 | case DetailsElementType_Storage:
|
---|
129 | {
|
---|
130 | /* Enumerate all the option items: */
|
---|
131 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
132 | {
|
---|
133 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
134 | if (pOptionItem)
|
---|
135 | {
|
---|
136 | /* Apply check-state on per-enum basis: */
|
---|
137 | const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage enmOptionType =
|
---|
138 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>();
|
---|
139 | pOptionItem->setCheckState(m_pModel->optionsStorage() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
140 | }
|
---|
141 | }
|
---|
142 | break;
|
---|
143 | }
|
---|
144 | case DetailsElementType_Audio:
|
---|
145 | {
|
---|
146 | /* Enumerate all the option items: */
|
---|
147 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
148 | {
|
---|
149 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
150 | if (pOptionItem)
|
---|
151 | {
|
---|
152 | /* Apply check-state on per-enum basis: */
|
---|
153 | const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio enmOptionType =
|
---|
154 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>();
|
---|
155 | pOptionItem->setCheckState(m_pModel->optionsAudio() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
156 | }
|
---|
157 | }
|
---|
158 | break;
|
---|
159 | }
|
---|
160 | case DetailsElementType_Network:
|
---|
161 | {
|
---|
162 | /* Enumerate all the option items: */
|
---|
163 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
164 | {
|
---|
165 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
166 | if (pOptionItem)
|
---|
167 | {
|
---|
168 | /* Apply check-state on per-enum basis: */
|
---|
169 | const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork enmOptionType =
|
---|
170 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>();
|
---|
171 | pOptionItem->setCheckState(m_pModel->optionsNetwork() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
172 | }
|
---|
173 | }
|
---|
174 | break;
|
---|
175 | }
|
---|
176 | case DetailsElementType_Serial:
|
---|
177 | {
|
---|
178 | /* Enumerate all the option items: */
|
---|
179 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
180 | {
|
---|
181 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
182 | if (pOptionItem)
|
---|
183 | {
|
---|
184 | /* Apply check-state on per-enum basis: */
|
---|
185 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial enmOptionType =
|
---|
186 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>();
|
---|
187 | pOptionItem->setCheckState(m_pModel->optionsSerial() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
188 | }
|
---|
189 | }
|
---|
190 | break;
|
---|
191 | }
|
---|
192 | case DetailsElementType_USB:
|
---|
193 | {
|
---|
194 | /* Enumerate all the option items: */
|
---|
195 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
196 | {
|
---|
197 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
198 | if (pOptionItem)
|
---|
199 | {
|
---|
200 | /* Apply check-state on per-enum basis: */
|
---|
201 | const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb enmOptionType =
|
---|
202 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>();
|
---|
203 | pOptionItem->setCheckState(m_pModel->optionsUsb() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
204 | }
|
---|
205 | }
|
---|
206 | break;
|
---|
207 | }
|
---|
208 | case DetailsElementType_SF:
|
---|
209 | {
|
---|
210 | /* Enumerate all the option items: */
|
---|
211 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
212 | {
|
---|
213 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
214 | if (pOptionItem)
|
---|
215 | {
|
---|
216 | /* Apply check-state on per-enum basis: */
|
---|
217 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders enmOptionType =
|
---|
218 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>();
|
---|
219 | pOptionItem->setCheckState(m_pModel->optionsSharedFolders() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
220 | }
|
---|
221 | }
|
---|
222 | break;
|
---|
223 | }
|
---|
224 | case DetailsElementType_UI:
|
---|
225 | {
|
---|
226 | /* Enumerate all the option items: */
|
---|
227 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
228 | {
|
---|
229 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
230 | if (pOptionItem)
|
---|
231 | {
|
---|
232 | /* Apply check-state on per-enum basis: */
|
---|
233 | const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface enmOptionType =
|
---|
234 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>();
|
---|
235 | pOptionItem->setCheckState(m_pModel->optionsUserInterface() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
236 | }
|
---|
237 | }
|
---|
238 | break;
|
---|
239 | }
|
---|
240 | case DetailsElementType_Description:
|
---|
241 | {
|
---|
242 | /* Enumerate all the option items: */
|
---|
243 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
244 | {
|
---|
245 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
246 | if (pOptionItem)
|
---|
247 | {
|
---|
248 | /* Apply check-state on per-enum basis: */
|
---|
249 | const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription enmOptionType =
|
---|
250 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>();
|
---|
251 | pOptionItem->setCheckState(m_pModel->optionsDescription() & enmOptionType ? Qt::Checked : Qt::Unchecked);
|
---|
252 | }
|
---|
253 | }
|
---|
254 | break;
|
---|
255 | }
|
---|
256 | default:
|
---|
257 | break;
|
---|
258 | }
|
---|
259 | }
|
---|
260 |
|
---|
261 | void UIDetailsContextMenu::retranslateUi()
|
---|
262 | {
|
---|
263 | retranslateCategories();
|
---|
264 | retranslateOptions();
|
---|
265 | adjustListWidgets();
|
---|
266 | }
|
---|
267 |
|
---|
268 | void UIDetailsContextMenu::retranslateCategories()
|
---|
269 | {
|
---|
270 | /* Enumerate all the category items: */
|
---|
271 | for (int i = 0; i < m_pListWidgetCategories->count(); ++i)
|
---|
272 | {
|
---|
273 | QListWidgetItem *pCategoryItem = m_pListWidgetCategories->item(i);
|
---|
274 | if (pCategoryItem)
|
---|
275 | {
|
---|
276 | /* We can translate this thing on per-enum basis: */
|
---|
277 | const DetailsElementType enmCategoryType = pCategoryItem->data(DataField_Type).value<DetailsElementType>();
|
---|
278 | pCategoryItem->setText(gpConverter->toString(enmCategoryType));
|
---|
279 | }
|
---|
280 | }
|
---|
281 | }
|
---|
282 |
|
---|
283 | void UIDetailsContextMenu::retranslateOptions()
|
---|
284 | {
|
---|
285 | /* Acquire currently selected category item: */
|
---|
286 | QListWidgetItem *pCategoryItem = m_pListWidgetCategories->currentItem();
|
---|
287 | if (!pCategoryItem)
|
---|
288 | return;
|
---|
289 |
|
---|
290 | /* Populate currently selected category options: */
|
---|
291 | const DetailsElementType enmCategoryType = pCategoryItem->data(DataField_Type).value<DetailsElementType>();
|
---|
292 | switch (enmCategoryType)
|
---|
293 | {
|
---|
294 | case DetailsElementType_General:
|
---|
295 | {
|
---|
296 | /* Enumerate all the option items: */
|
---|
297 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
298 | {
|
---|
299 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
300 | if (pOptionItem)
|
---|
301 | {
|
---|
302 | /* We can translate this thing on per-enum basis: */
|
---|
303 | const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral enmOptionType =
|
---|
304 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>();
|
---|
305 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
306 | }
|
---|
307 | }
|
---|
308 | break;
|
---|
309 | }
|
---|
310 | case DetailsElementType_System:
|
---|
311 | {
|
---|
312 | /* Enumerate all the option items: */
|
---|
313 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
314 | {
|
---|
315 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
316 | if (pOptionItem)
|
---|
317 | {
|
---|
318 | /* We can translate this thing on per-enum basis: */
|
---|
319 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem enmOptionType =
|
---|
320 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>();
|
---|
321 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
322 | }
|
---|
323 | }
|
---|
324 | break;
|
---|
325 | }
|
---|
326 | case DetailsElementType_Display:
|
---|
327 | {
|
---|
328 | /* Enumerate all the option items: */
|
---|
329 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
330 | {
|
---|
331 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
332 | if (pOptionItem)
|
---|
333 | {
|
---|
334 | /* We can translate this thing on per-enum basis: */
|
---|
335 | const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay enmOptionType =
|
---|
336 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>();
|
---|
337 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
338 | }
|
---|
339 | }
|
---|
340 | break;
|
---|
341 | }
|
---|
342 | case DetailsElementType_Storage:
|
---|
343 | {
|
---|
344 | /* Enumerate all the option items: */
|
---|
345 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
346 | {
|
---|
347 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
348 | if (pOptionItem)
|
---|
349 | {
|
---|
350 | /* We can translate this thing on per-enum basis: */
|
---|
351 | const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage enmOptionType =
|
---|
352 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>();
|
---|
353 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
354 | }
|
---|
355 | }
|
---|
356 | break;
|
---|
357 | }
|
---|
358 | case DetailsElementType_Audio:
|
---|
359 | {
|
---|
360 | /* Enumerate all the option items: */
|
---|
361 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
362 | {
|
---|
363 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
364 | if (pOptionItem)
|
---|
365 | {
|
---|
366 | /* We can translate this thing on per-enum basis: */
|
---|
367 | const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio enmOptionType =
|
---|
368 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>();
|
---|
369 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
370 | }
|
---|
371 | }
|
---|
372 | break;
|
---|
373 | }
|
---|
374 | case DetailsElementType_Network:
|
---|
375 | {
|
---|
376 | /* Enumerate all the option items: */
|
---|
377 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
378 | {
|
---|
379 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
380 | if (pOptionItem)
|
---|
381 | {
|
---|
382 | /* We can translate this thing on per-enum basis: */
|
---|
383 | const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork enmOptionType =
|
---|
384 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>();
|
---|
385 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
386 | }
|
---|
387 | }
|
---|
388 | break;
|
---|
389 | }
|
---|
390 | case DetailsElementType_Serial:
|
---|
391 | {
|
---|
392 | /* Enumerate all the option items: */
|
---|
393 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
394 | {
|
---|
395 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
396 | if (pOptionItem)
|
---|
397 | {
|
---|
398 | /* We can translate this thing on per-enum basis: */
|
---|
399 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial enmOptionType =
|
---|
400 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>();
|
---|
401 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
402 | }
|
---|
403 | }
|
---|
404 | break;
|
---|
405 | }
|
---|
406 | case DetailsElementType_USB:
|
---|
407 | {
|
---|
408 | /* Enumerate all the option items: */
|
---|
409 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
410 | {
|
---|
411 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
412 | if (pOptionItem)
|
---|
413 | {
|
---|
414 | /* We can translate this thing on per-enum basis: */
|
---|
415 | const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb enmOptionType =
|
---|
416 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>();
|
---|
417 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
418 | }
|
---|
419 | }
|
---|
420 | break;
|
---|
421 | }
|
---|
422 | case DetailsElementType_SF:
|
---|
423 | {
|
---|
424 | /* Enumerate all the option items: */
|
---|
425 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
426 | {
|
---|
427 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
428 | if (pOptionItem)
|
---|
429 | {
|
---|
430 | /* We can translate this thing on per-enum basis: */
|
---|
431 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders enmOptionType =
|
---|
432 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>();
|
---|
433 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
434 | }
|
---|
435 | }
|
---|
436 | break;
|
---|
437 | }
|
---|
438 | case DetailsElementType_UI:
|
---|
439 | {
|
---|
440 | /* Enumerate all the option items: */
|
---|
441 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
442 | {
|
---|
443 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
444 | if (pOptionItem)
|
---|
445 | {
|
---|
446 | /* We can translate this thing on per-enum basis: */
|
---|
447 | const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface enmOptionType =
|
---|
448 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>();
|
---|
449 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
450 | }
|
---|
451 | }
|
---|
452 | break;
|
---|
453 | }
|
---|
454 | case DetailsElementType_Description:
|
---|
455 | {
|
---|
456 | /* Enumerate all the option items: */
|
---|
457 | for (int i = 0; i < m_pListWidgetOptions->count(); ++i)
|
---|
458 | {
|
---|
459 | QListWidgetItem *pOptionItem = m_pListWidgetOptions->item(i);
|
---|
460 | if (pOptionItem)
|
---|
461 | {
|
---|
462 | /* We can translate this thing on per-enum basis: */
|
---|
463 | const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription enmOptionType =
|
---|
464 | pOptionItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>();
|
---|
465 | pOptionItem->setText(gpConverter->toString(enmOptionType));
|
---|
466 | }
|
---|
467 | }
|
---|
468 | break;
|
---|
469 | }
|
---|
470 | default:
|
---|
471 | break;
|
---|
472 | }
|
---|
473 | }
|
---|
474 |
|
---|
475 | void UIDetailsContextMenu::sltCategoryItemEntered(QListWidgetItem *pItem)
|
---|
476 | {
|
---|
477 | /* Choose hovered item as current one: */
|
---|
478 | m_pListWidgetCategories->setCurrentItem(pItem);
|
---|
479 | }
|
---|
480 |
|
---|
481 | void UIDetailsContextMenu::sltCategoryItemClicked(QListWidgetItem *pItem)
|
---|
482 | {
|
---|
483 | /* Notify listeners: */
|
---|
484 | const DetailsElementType enmCategoryType = pItem->data(DataField_Type).value<DetailsElementType>();
|
---|
485 |
|
---|
486 | /* Toggle element visibility status: */
|
---|
487 | QMap<DetailsElementType, bool> categories = m_pModel->categories();
|
---|
488 | if (categories.contains(enmCategoryType))
|
---|
489 | categories.remove(enmCategoryType);
|
---|
490 | else
|
---|
491 | categories[enmCategoryType] = true;
|
---|
492 | m_pModel->setCategories(categories);
|
---|
493 | }
|
---|
494 |
|
---|
495 | void UIDetailsContextMenu::sltCategoryItemChanged(QListWidgetItem *, QListWidgetItem *)
|
---|
496 | {
|
---|
497 | /* Update options list: */
|
---|
498 | populateOptions();
|
---|
499 | updateOptionStates();
|
---|
500 | retranslateOptions();
|
---|
501 | }
|
---|
502 |
|
---|
503 | void UIDetailsContextMenu::sltOptionItemEntered(QListWidgetItem *pItem)
|
---|
504 | {
|
---|
505 | /* Choose hovered item as current one: */
|
---|
506 | m_pListWidgetOptions->setCurrentItem(pItem);
|
---|
507 | }
|
---|
508 |
|
---|
509 | void UIDetailsContextMenu::sltOptionItemClicked(QListWidgetItem *pItem)
|
---|
510 | {
|
---|
511 | /* First make sure we really have category item selected: */
|
---|
512 | QListWidgetItem *pCategoryItem = m_pListWidgetCategories->currentItem();
|
---|
513 | if (!pCategoryItem)
|
---|
514 | return;
|
---|
515 |
|
---|
516 | /* Then acquire category type: */
|
---|
517 | const DetailsElementType enmCategoryType = pCategoryItem->data(DataField_Type).value<DetailsElementType>();
|
---|
518 |
|
---|
519 | /* Handle known category types: */
|
---|
520 | switch (enmCategoryType)
|
---|
521 | {
|
---|
522 | case DetailsElementType_General:
|
---|
523 | {
|
---|
524 | /* Toggle element visibility status: */
|
---|
525 | const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral enmOptionType =
|
---|
526 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>();
|
---|
527 | m_pModel->setOptionsGeneral(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(m_pModel->optionsGeneral() ^ enmOptionType));
|
---|
528 | break;
|
---|
529 | }
|
---|
530 | case DetailsElementType_System:
|
---|
531 | {
|
---|
532 | /* Toggle element visibility status: */
|
---|
533 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem enmOptionType =
|
---|
534 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>();
|
---|
535 | m_pModel->setOptionsSystem(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(m_pModel->optionsSystem() ^ enmOptionType));
|
---|
536 | break;
|
---|
537 | }
|
---|
538 | case DetailsElementType_Display:
|
---|
539 | {
|
---|
540 | /* Toggle element visibility status: */
|
---|
541 | const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay enmOptionType =
|
---|
542 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>();
|
---|
543 | m_pModel->setOptionsDisplay(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(m_pModel->optionsDisplay() ^ enmOptionType));
|
---|
544 | break;
|
---|
545 | }
|
---|
546 | case DetailsElementType_Storage:
|
---|
547 | {
|
---|
548 | /* Toggle element visibility status: */
|
---|
549 | const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage enmOptionType =
|
---|
550 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>();
|
---|
551 | m_pModel->setOptionsStorage(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(m_pModel->optionsStorage() ^ enmOptionType));
|
---|
552 | break;
|
---|
553 | }
|
---|
554 | case DetailsElementType_Audio:
|
---|
555 | {
|
---|
556 | /* Toggle element visibility status: */
|
---|
557 | const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio enmOptionType =
|
---|
558 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>();
|
---|
559 | m_pModel->setOptionsAudio(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(m_pModel->optionsAudio() ^ enmOptionType));
|
---|
560 | break;
|
---|
561 | }
|
---|
562 | case DetailsElementType_Network:
|
---|
563 | {
|
---|
564 | /* Toggle element visibility status: */
|
---|
565 | const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork enmOptionType =
|
---|
566 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>();
|
---|
567 | m_pModel->setOptionsNetwork(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(m_pModel->optionsNetwork() ^ enmOptionType));
|
---|
568 | break;
|
---|
569 | }
|
---|
570 | case DetailsElementType_Serial:
|
---|
571 | {
|
---|
572 | /* Toggle element visibility status: */
|
---|
573 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial enmOptionType =
|
---|
574 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>();
|
---|
575 | m_pModel->setOptionsSerial(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(m_pModel->optionsSerial() ^ enmOptionType));
|
---|
576 | break;
|
---|
577 | }
|
---|
578 | case DetailsElementType_USB:
|
---|
579 | {
|
---|
580 | /* Toggle element visibility status: */
|
---|
581 | const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb enmOptionType =
|
---|
582 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>();
|
---|
583 | m_pModel->setOptionsUsb(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(m_pModel->optionsUsb() ^ enmOptionType));
|
---|
584 | break;
|
---|
585 | }
|
---|
586 | case DetailsElementType_SF:
|
---|
587 | {
|
---|
588 | /* Toggle element visibility status: */
|
---|
589 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders enmOptionType =
|
---|
590 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>();
|
---|
591 | m_pModel->setOptionsSharedFolders(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(m_pModel->optionsSharedFolders() ^ enmOptionType));
|
---|
592 | break;
|
---|
593 | }
|
---|
594 | case DetailsElementType_UI:
|
---|
595 | {
|
---|
596 | /* Toggle element visibility status: */
|
---|
597 | const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface enmOptionType =
|
---|
598 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>();
|
---|
599 | m_pModel->setOptionsUserInterface(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(m_pModel->optionsUserInterface() ^ enmOptionType));
|
---|
600 | break;
|
---|
601 | }
|
---|
602 | case DetailsElementType_Description:
|
---|
603 | {
|
---|
604 | /* Toggle element visibility status: */
|
---|
605 | const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription enmOptionType =
|
---|
606 | pItem->data(DataField_Type).value<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>();
|
---|
607 | m_pModel->setOptionsDescription(static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(m_pModel->optionsDescription() ^ enmOptionType));
|
---|
608 | break;
|
---|
609 | }
|
---|
610 | default:
|
---|
611 | break;
|
---|
612 | }
|
---|
613 | }
|
---|
614 |
|
---|
615 | void UIDetailsContextMenu::prepare()
|
---|
616 | {
|
---|
617 | /* Create main layout: */
|
---|
618 | QHBoxLayout *pMainLayout = new QHBoxLayout(this);
|
---|
619 | if (pMainLayout)
|
---|
620 | {
|
---|
621 | pMainLayout->setContentsMargins(0, 0, 0, 0);
|
---|
622 | pMainLayout->setSpacing(1);
|
---|
623 |
|
---|
624 | /* Create list of categories: */
|
---|
625 | m_pListWidgetCategories = new QListWidget(this);
|
---|
626 | if (m_pListWidgetCategories)
|
---|
627 | {
|
---|
628 | m_pListWidgetCategories->setMouseTracking(true);
|
---|
629 | m_pListWidgetCategories->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
|
---|
630 | connect(m_pListWidgetCategories, &QListWidget::itemEntered,
|
---|
631 | this, &UIDetailsContextMenu::sltCategoryItemEntered);
|
---|
632 | connect(m_pListWidgetCategories, &QListWidget::itemClicked,
|
---|
633 | this, &UIDetailsContextMenu::sltCategoryItemClicked);
|
---|
634 | connect(m_pListWidgetCategories, &QListWidget::currentItemChanged,
|
---|
635 | this, &UIDetailsContextMenu::sltCategoryItemChanged);
|
---|
636 | pMainLayout->addWidget(m_pListWidgetCategories);
|
---|
637 | }
|
---|
638 |
|
---|
639 | /* Create list of options: */
|
---|
640 | m_pListWidgetOptions = new QListWidget(this);
|
---|
641 | if (m_pListWidgetOptions)
|
---|
642 | {
|
---|
643 | m_pListWidgetOptions->setMouseTracking(true);
|
---|
644 | m_pListWidgetOptions->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
|
---|
645 | connect(m_pListWidgetOptions, &QListWidget::itemEntered,
|
---|
646 | this, &UIDetailsContextMenu::sltOptionItemEntered);
|
---|
647 | connect(m_pListWidgetOptions, &QListWidget::itemClicked,
|
---|
648 | this, &UIDetailsContextMenu::sltOptionItemClicked);
|
---|
649 | pMainLayout->addWidget(m_pListWidgetOptions);
|
---|
650 | }
|
---|
651 | }
|
---|
652 |
|
---|
653 | /* Prepare lists: */
|
---|
654 | populateCategories();
|
---|
655 | populateOptions();
|
---|
656 | /* Apply language settings: */
|
---|
657 | retranslateUi();
|
---|
658 | }
|
---|
659 |
|
---|
660 | void UIDetailsContextMenu::populateCategories()
|
---|
661 | {
|
---|
662 | /* Clear category list initially: */
|
---|
663 | m_pListWidgetCategories->clear();
|
---|
664 |
|
---|
665 | /* Enumerate all the known categories: */
|
---|
666 | for (int i = DetailsElementType_Invalid + 1; i < DetailsElementType_Max; ++i)
|
---|
667 | {
|
---|
668 | /* Prepare current category type: */
|
---|
669 | const DetailsElementType enmCategoryType = static_cast<DetailsElementType>(i);
|
---|
670 | /* And create list-widget item of it: */
|
---|
671 | QListWidgetItem *pCategoryItem = createCategoryItem(gpConverter->toIcon(enmCategoryType));
|
---|
672 | if (pCategoryItem)
|
---|
673 | {
|
---|
674 | pCategoryItem->setData(DataField_Type, QVariant::fromValue(enmCategoryType));
|
---|
675 | pCategoryItem->setCheckState(Qt::Unchecked);
|
---|
676 | }
|
---|
677 | }
|
---|
678 | }
|
---|
679 |
|
---|
680 | void UIDetailsContextMenu::populateOptions()
|
---|
681 | {
|
---|
682 | /* Clear option list initially: */
|
---|
683 | m_pListWidgetOptions->clear();
|
---|
684 |
|
---|
685 | /* Acquire currently selected category item: */
|
---|
686 | QListWidgetItem *pCategoryItem = m_pListWidgetCategories->currentItem();
|
---|
687 | if (!pCategoryItem)
|
---|
688 | return;
|
---|
689 |
|
---|
690 | /* We will use that one for all the options fetching: */
|
---|
691 | const QMetaObject &smo = UIExtraDataMetaDefs::staticMetaObject;
|
---|
692 |
|
---|
693 | /* Populate currently selected category options: */
|
---|
694 | const DetailsElementType enmCategoryType = pCategoryItem->data(DataField_Type).value<DetailsElementType>();
|
---|
695 | switch (enmCategoryType)
|
---|
696 | {
|
---|
697 | case DetailsElementType_General:
|
---|
698 | {
|
---|
699 | /* Enumerate all the known options: */
|
---|
700 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeGeneral");
|
---|
701 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
702 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
703 | {
|
---|
704 | /* Prepare current option type: */
|
---|
705 | const UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral enmOptionType =
|
---|
706 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
707 | /* Skip invalid and default types: */
|
---|
708 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Invalid
|
---|
709 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeGeneral_Default)
|
---|
710 | continue;
|
---|
711 | /* And create list-widget item of it: */
|
---|
712 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
713 | if (pOptionItem)
|
---|
714 | {
|
---|
715 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
716 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
717 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
718 | }
|
---|
719 | }
|
---|
720 | break;
|
---|
721 | }
|
---|
722 | case DetailsElementType_System:
|
---|
723 | {
|
---|
724 | /* Enumerate all the known options: */
|
---|
725 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeSystem");
|
---|
726 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
727 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
728 | {
|
---|
729 | /* Prepare current option type: */
|
---|
730 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSystem enmOptionType =
|
---|
731 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSystem>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
732 | /* Skip invalid and default types: */
|
---|
733 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Invalid
|
---|
734 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeSystem_Default)
|
---|
735 | continue;
|
---|
736 | /* And create list-widget item of it: */
|
---|
737 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
738 | if (pOptionItem)
|
---|
739 | {
|
---|
740 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
741 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
742 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
743 | }
|
---|
744 | }
|
---|
745 | break;
|
---|
746 | }
|
---|
747 | case DetailsElementType_Display:
|
---|
748 | {
|
---|
749 | /* Enumerate all the known options: */
|
---|
750 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeDisplay");
|
---|
751 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
752 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
753 | {
|
---|
754 | /* Prepare current option type: */
|
---|
755 | const UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay enmOptionType =
|
---|
756 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
757 | /* Skip invalid and default types: */
|
---|
758 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Invalid
|
---|
759 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeDisplay_Default)
|
---|
760 | continue;
|
---|
761 | /* And create list-widget item of it: */
|
---|
762 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
763 | if (pOptionItem)
|
---|
764 | {
|
---|
765 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
766 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
767 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
768 | }
|
---|
769 | }
|
---|
770 | break;
|
---|
771 | }
|
---|
772 | case DetailsElementType_Storage:
|
---|
773 | {
|
---|
774 | /* Enumerate all the known options: */
|
---|
775 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeStorage");
|
---|
776 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
777 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
778 | {
|
---|
779 | /* Prepare current option type: */
|
---|
780 | const UIExtraDataMetaDefs::DetailsElementOptionTypeStorage enmOptionType =
|
---|
781 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeStorage>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
782 | /* Skip invalid and default types: */
|
---|
783 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Invalid
|
---|
784 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeStorage_Default)
|
---|
785 | continue;
|
---|
786 | /* And create list-widget item of it: */
|
---|
787 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
788 | if (pOptionItem)
|
---|
789 | {
|
---|
790 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
791 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
792 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
793 | }
|
---|
794 | }
|
---|
795 | break;
|
---|
796 | }
|
---|
797 | case DetailsElementType_Audio:
|
---|
798 | {
|
---|
799 | /* Enumerate all the known options: */
|
---|
800 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeAudio");
|
---|
801 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
802 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
803 | {
|
---|
804 | /* Prepare current option type: */
|
---|
805 | const UIExtraDataMetaDefs::DetailsElementOptionTypeAudio enmOptionType =
|
---|
806 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeAudio>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
807 | /* Skip invalid and default types: */
|
---|
808 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Invalid
|
---|
809 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeAudio_Default)
|
---|
810 | continue;
|
---|
811 | /* And create list-widget item of it: */
|
---|
812 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
813 | if (pOptionItem)
|
---|
814 | {
|
---|
815 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
816 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
817 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
818 | }
|
---|
819 | }
|
---|
820 | break;
|
---|
821 | }
|
---|
822 | case DetailsElementType_Network:
|
---|
823 | {
|
---|
824 | /* Enumerate all the known options: */
|
---|
825 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeNetwork");
|
---|
826 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
827 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
828 | {
|
---|
829 | /* Prepare current option type: */
|
---|
830 | const UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork enmOptionType =
|
---|
831 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
832 | /* Skip invalid and default types: */
|
---|
833 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Invalid
|
---|
834 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeNetwork_Default)
|
---|
835 | continue;
|
---|
836 | /* And create list-widget item of it: */
|
---|
837 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
838 | if (pOptionItem)
|
---|
839 | {
|
---|
840 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
841 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
842 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
843 | }
|
---|
844 | }
|
---|
845 | break;
|
---|
846 | }
|
---|
847 | case DetailsElementType_Serial:
|
---|
848 | {
|
---|
849 | /* Enumerate all the known options: */
|
---|
850 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeSerial");
|
---|
851 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
852 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
853 | {
|
---|
854 | /* Prepare current option type: */
|
---|
855 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSerial enmOptionType =
|
---|
856 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSerial>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
857 | /* Skip invalid and default types: */
|
---|
858 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Invalid
|
---|
859 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeSerial_Default)
|
---|
860 | continue;
|
---|
861 | /* And create list-widget item of it: */
|
---|
862 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
863 | if (pOptionItem)
|
---|
864 | {
|
---|
865 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
866 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
867 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
868 | }
|
---|
869 | }
|
---|
870 | break;
|
---|
871 | }
|
---|
872 | case DetailsElementType_USB:
|
---|
873 | {
|
---|
874 | /* Enumerate all the known options: */
|
---|
875 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeUsb");
|
---|
876 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
877 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
878 | {
|
---|
879 | /* Prepare current option type: */
|
---|
880 | const UIExtraDataMetaDefs::DetailsElementOptionTypeUsb enmOptionType =
|
---|
881 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeUsb>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
882 | /* Skip invalid and default types: */
|
---|
883 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Invalid
|
---|
884 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeUsb_Default)
|
---|
885 | continue;
|
---|
886 | /* And create list-widget item of it: */
|
---|
887 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
888 | if (pOptionItem)
|
---|
889 | {
|
---|
890 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
891 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
892 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
893 | }
|
---|
894 | }
|
---|
895 | break;
|
---|
896 | }
|
---|
897 | case DetailsElementType_SF:
|
---|
898 | {
|
---|
899 | /* Enumerate all the known options: */
|
---|
900 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeSharedFolders");
|
---|
901 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
902 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
903 | {
|
---|
904 | /* Prepare current option type: */
|
---|
905 | const UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders enmOptionType =
|
---|
906 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
907 | /* Skip invalid and default types: */
|
---|
908 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Invalid
|
---|
909 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeSharedFolders_Default)
|
---|
910 | continue;
|
---|
911 | /* And create list-widget item of it: */
|
---|
912 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
913 | if (pOptionItem)
|
---|
914 | {
|
---|
915 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
916 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
917 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
918 | }
|
---|
919 | }
|
---|
920 | break;
|
---|
921 | }
|
---|
922 | case DetailsElementType_UI:
|
---|
923 | {
|
---|
924 | /* Enumerate all the known options: */
|
---|
925 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeUserInterface");
|
---|
926 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
927 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
928 | {
|
---|
929 | /* Prepare current option type: */
|
---|
930 | const UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface enmOptionType =
|
---|
931 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
932 | /* Skip invalid and default types: */
|
---|
933 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Invalid
|
---|
934 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeUserInterface_Default)
|
---|
935 | continue;
|
---|
936 | /* And create list-widget item of it: */
|
---|
937 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
938 | if (pOptionItem)
|
---|
939 | {
|
---|
940 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
941 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
942 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
943 | }
|
---|
944 | }
|
---|
945 | break;
|
---|
946 | }
|
---|
947 | case DetailsElementType_Description:
|
---|
948 | {
|
---|
949 | /* Enumerate all the known options: */
|
---|
950 | const int iEnumIndex = smo.indexOfEnumerator("DetailsElementOptionTypeDescription");
|
---|
951 | const QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
|
---|
952 | for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
|
---|
953 | {
|
---|
954 | /* Prepare current option type: */
|
---|
955 | const UIExtraDataMetaDefs::DetailsElementOptionTypeDescription enmOptionType =
|
---|
956 | static_cast<UIExtraDataMetaDefs::DetailsElementOptionTypeDescription>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
|
---|
957 | /* Skip invalid and default types: */
|
---|
958 | if ( enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Invalid
|
---|
959 | || enmOptionType == UIExtraDataMetaDefs::DetailsElementOptionTypeDescription_Default)
|
---|
960 | continue;
|
---|
961 | /* And create list-widget item of it: */
|
---|
962 | QListWidgetItem *pOptionItem = createOptionItem();
|
---|
963 | if (pOptionItem)
|
---|
964 | {
|
---|
965 | pOptionItem->setData(DataField_Type, QVariant::fromValue(enmOptionType));
|
---|
966 | pOptionItem->setData(DataField_Name, gpConverter->toInternalString(enmOptionType));
|
---|
967 | pOptionItem->setCheckState(Qt::Unchecked);
|
---|
968 | }
|
---|
969 | }
|
---|
970 | break;
|
---|
971 | }
|
---|
972 | default:
|
---|
973 | break;
|
---|
974 | }
|
---|
975 | }
|
---|
976 |
|
---|
977 | void UIDetailsContextMenu::adjustListWidgets()
|
---|
978 | {
|
---|
979 | /* Include frame width: */
|
---|
980 | int iW = 2 * m_pListWidgetCategories->frameWidth();
|
---|
981 | int iH = iW;
|
---|
982 |
|
---|
983 | /* Include size hints: */
|
---|
984 | iW += m_pListWidgetCategories->sizeHintForColumn(0);
|
---|
985 | iH += m_pListWidgetCategories->sizeHintForRow(0) * m_pListWidgetCategories->count();
|
---|
986 |
|
---|
987 | /* Category list size is constant, options list size is vague: */
|
---|
988 | m_pListWidgetCategories->setFixedSize(QSize(iW * 1.3, iH));
|
---|
989 | m_pListWidgetOptions->setFixedSize(QSize(iW * 1.3, iH));
|
---|
990 | }
|
---|
991 |
|
---|
992 | QListWidgetItem *UIDetailsContextMenu::createCategoryItem(const QIcon &icon)
|
---|
993 | {
|
---|
994 | QListWidgetItem *pItem = new QListWidgetItem(icon, QString(), m_pListWidgetCategories);
|
---|
995 | if (pItem)
|
---|
996 | m_pListWidgetCategories->addItem(pItem);
|
---|
997 | return pItem;
|
---|
998 | }
|
---|
999 |
|
---|
1000 | QListWidgetItem *UIDetailsContextMenu::createOptionItem()
|
---|
1001 | {
|
---|
1002 | QListWidgetItem *pItem = new QListWidgetItem(QString(), m_pListWidgetOptions);
|
---|
1003 | if (pItem)
|
---|
1004 | m_pListWidgetOptions->addItem(pItem);
|
---|
1005 | return pItem;
|
---|
1006 | }
|
---|