VirtualBox

source: vbox/trunk/src/VBox/Frontends/VirtualBox/src/manager/details/UIDetailsContextMenu.cpp@ 103977

Last change on this file since 103977 was 98103, checked in by vboxsync, 2 years ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
  • Property svn:mergeinfo set to (toggle deleted branches)
    /branches/VBox-3.0/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp58652,​70973
    /branches/VBox-3.2/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp66309,​66318
    /branches/VBox-4.0/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp70873
    /branches/VBox-4.1/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp74233
    /branches/VBox-4.2/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp91503-91504,​91506-91508,​91510,​91514-91515,​91521
    /branches/VBox-4.3/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp91223
    /branches/VBox-4.3/trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp91223
    /branches/dsen/gui/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp79076-79078,​79089,​79109-79110,​79112-79113,​79127-79130,​79134,​79141,​79151,​79155,​79157-79159,​79193,​79197
    /branches/dsen/gui2/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp79562-79569,​79572-79573,​79578,​79581-79582,​79590-79591,​79598-79599,​79602-79603,​79605-79606,​79632,​79635,​79637,​79644
    /branches/dsen/gui3/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsModel.cpp79645-79692
    /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/chooser/UIGChooserModel.cpp79225,​79271
File size: 46.2 KB
Line 
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
39UIDetailsContextMenu::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
48void 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
63void 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
261void UIDetailsContextMenu::retranslateUi()
262{
263 retranslateCategories();
264 retranslateOptions();
265 adjustListWidgets();
266}
267
268void 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
283void 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
475void UIDetailsContextMenu::sltCategoryItemEntered(QListWidgetItem *pItem)
476{
477 /* Choose hovered item as current one: */
478 m_pListWidgetCategories->setCurrentItem(pItem);
479}
480
481void 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
495void UIDetailsContextMenu::sltCategoryItemChanged(QListWidgetItem *, QListWidgetItem *)
496{
497 /* Update options list: */
498 populateOptions();
499 updateOptionStates();
500 retranslateOptions();
501}
502
503void UIDetailsContextMenu::sltOptionItemEntered(QListWidgetItem *pItem)
504{
505 /* Choose hovered item as current one: */
506 m_pListWidgetOptions->setCurrentItem(pItem);
507}
508
509void 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
615void 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
660void 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
680void 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
977void 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
992QListWidgetItem *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
1000QListWidgetItem *UIDetailsContextMenu::createOptionItem()
1001{
1002 QListWidgetItem *pItem = new QListWidgetItem(QString(), m_pListWidgetOptions);
1003 if (pItem)
1004 m_pListWidgetOptions->addItem(pItem);
1005 return pItem;
1006}
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