VirtualBox

source: vbox/trunk/src/VBox/Frontends/VirtualBox/include/VBoxGlobal.h@ 6813

Last change on this file since 6813 was 6784, checked in by vboxsync, 17 years ago

2655: FE/Qt support for SB16:

Controller combo-box added into audio settings page.
Details updated to display audio controller type.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.5 KB
Line 
1/** @file
2 *
3 * VBox frontends: Qt GUI ("VirtualBox"):
4 * VBoxGlobal class declaration
5 */
6
7/*
8 * Copyright (C) 2006-2007 innotek GmbH
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
19#ifndef __VBoxGlobal_h__
20#define __VBoxGlobal_h__
21
22#include "COMDefs.h"
23
24#include "VBoxGlobalSettings.h"
25
26#include <qapplication.h>
27#include <qpixmap.h>
28#include <qiconset.h>
29#include <qcolor.h>
30#include <quuid.h>
31#include <qthread.h>
32#include <qpopupmenu.h>
33#include <qtooltip.h>
34
35#include <qptrvector.h>
36#include <qvaluevector.h>
37#include <qvaluelist.h>
38#include <qdict.h>
39#include <qintdict.h>
40
41class QAction;
42class QLabel;
43class QToolButton;
44
45// Auxiliary types
46////////////////////////////////////////////////////////////////////////////////
47
48/** Simple media descriptor type. */
49struct VBoxMedia
50{
51 enum Status { Unknown, Ok, Error, Inaccessible };
52
53 VBoxMedia() : type (VBoxDefs::InvalidType), status (Ok) {}
54
55 VBoxMedia (const CUnknown &d, VBoxDefs::DiskType t, Status s)
56 : disk (d), type (t), status (s) {}
57
58 CUnknown disk;
59 VBoxDefs::DiskType type;
60 Status status;
61};
62
63typedef QValueList <VBoxMedia> VBoxMediaList;
64
65// VirtualBox callback events
66////////////////////////////////////////////////////////////////////////////////
67
68class VBoxMachineStateChangeEvent : public QEvent
69{
70public:
71 VBoxMachineStateChangeEvent (const QUuid &aId, CEnums::MachineState aState)
72 : QEvent ((QEvent::Type) VBoxDefs::MachineStateChangeEventType)
73 , id (aId), state (aState)
74 {}
75
76 const QUuid id;
77 const CEnums::MachineState state;
78};
79
80class VBoxMachineDataChangeEvent : public QEvent
81{
82public:
83 VBoxMachineDataChangeEvent (const QUuid &aId)
84 : QEvent ((QEvent::Type) VBoxDefs::MachineDataChangeEventType)
85 , id (aId)
86 {}
87
88 const QUuid id;
89};
90
91class VBoxMachineRegisteredEvent : public QEvent
92{
93public:
94 VBoxMachineRegisteredEvent (const QUuid &aId, bool aRegistered)
95 : QEvent ((QEvent::Type) VBoxDefs::MachineRegisteredEventType)
96 , id (aId), registered (aRegistered)
97 {}
98
99 const QUuid id;
100 const bool registered;
101};
102
103class VBoxSessionStateChangeEvent : public QEvent
104{
105public:
106 VBoxSessionStateChangeEvent (const QUuid &aId, CEnums::SessionState aState)
107 : QEvent ((QEvent::Type) VBoxDefs::SessionStateChangeEventType)
108 , id (aId), state (aState)
109 {}
110
111 const QUuid id;
112 const CEnums::SessionState state;
113};
114
115class VBoxSnapshotEvent : public QEvent
116{
117public:
118
119 enum What { Taken, Discarded, Changed };
120
121 VBoxSnapshotEvent (const QUuid &aMachineId, const QUuid &aSnapshotId,
122 What aWhat)
123 : QEvent ((QEvent::Type) VBoxDefs::SnapshotEventType)
124 , what (aWhat)
125 , machineId (aMachineId), snapshotId (aSnapshotId)
126 {}
127
128 const What what;
129
130 const QUuid machineId;
131 const QUuid snapshotId;
132};
133
134class VBoxCanShowRegDlgEvent : public QEvent
135{
136public:
137 VBoxCanShowRegDlgEvent (bool aCanShow)
138 : QEvent ((QEvent::Type) VBoxDefs::CanShowRegDlgEventType)
139 , mCanShow (aCanShow)
140 {}
141
142 const bool mCanShow;
143};
144
145// VBoxGlobal
146////////////////////////////////////////////////////////////////////////////////
147
148class VBoxSelectorWnd;
149class VBoxConsoleWnd;
150class VBoxRegistrationDlg;
151
152class VBoxGlobal : public QObject
153{
154 Q_OBJECT
155
156public:
157
158 static VBoxGlobal &instance();
159
160 bool isValid() { return mValid; }
161
162 QString versionString() { return verString; }
163
164 CVirtualBox virtualBox() const { return mVBox; }
165
166 const VBoxGlobalSettings &settings() const { return gset; }
167 bool setSettings (const VBoxGlobalSettings &gs);
168
169 VBoxSelectorWnd &selectorWnd();
170 VBoxConsoleWnd &consoleWnd();
171
172 bool isVMConsoleProcess() const { return !vmUuid.isNull(); }
173 QUuid managedVMUuid() const { return vmUuid; }
174
175 VBoxDefs::RenderMode vmRenderMode() const { return vm_render_mode; }
176 const char *vmRenderModeStr() const { return vm_render_mode_str; }
177
178#ifdef VBOX_WITH_DEBUGGER_GUI
179 bool isDebuggerEnabled() const { return dbg_enabled; }
180 bool isDebuggerVisibleAtStartup() const { return dbg_visible_at_startup; }
181#endif
182
183 /* VBox enum to/from string/icon/color convertors */
184
185 QStringList vmGuestOSTypeDescriptions() const;
186 CGuestOSType vmGuestOSType (int aIndex) const;
187 int vmGuestOSTypeIndex (const QString &aId) const;
188 QPixmap vmGuestOSTypeIcon (const QString &aId) const;
189 QString vmGuestOSTypeDescription (const QString &aId) const;
190
191 QPixmap toIcon (CEnums::MachineState s) const
192 {
193 QPixmap *pm = mStateIcons [s];
194 AssertMsg (pm, ("Icon for VM state %d must be defined", s));
195 return pm ? *pm : QPixmap();
196 }
197
198 const QColor &toColor (CEnums::MachineState s) const
199 {
200 static const QColor none;
201 AssertMsg (vm_state_color [s], ("No color for %d", s));
202 return vm_state_color [s] ? *vm_state_color [s] : none;
203 }
204
205 QString toString (CEnums::MachineState s) const
206 {
207 AssertMsg (!machineStates [s].isNull(), ("No text for %d", s));
208 return machineStates [s];
209 }
210
211 QString toString (CEnums::SessionState s) const
212 {
213 AssertMsg (!sessionStates [s].isNull(), ("No text for %d", s));
214 return sessionStates [s];
215 }
216
217 QString toString (CEnums::DiskControllerType t) const
218 {
219 AssertMsg (!diskControllerTypes [t].isNull(), ("No text for %d", t));
220 return diskControllerTypes [t];
221 }
222
223 QString toString (CEnums::HardDiskType t) const
224 {
225 AssertMsg (!diskTypes [t].isNull(), ("No text for %d", t));
226 return diskTypes [t];
227 }
228
229 QString toString (CEnums::HardDiskStorageType t) const
230 {
231 AssertMsg (!diskStorageTypes [t].isNull(), ("No text for %d", t));
232 return diskStorageTypes [t];
233 }
234
235 QString toString (CEnums::VRDPAuthType t) const
236 {
237 AssertMsg (!vrdpAuthTypes [t].isNull(), ("No text for %d", t));
238 return vrdpAuthTypes [t];
239 }
240
241 QString toString (CEnums::PortMode t) const
242 {
243 AssertMsg (!portModeTypes [t].isNull(), ("No text for %d", t));
244 return portModeTypes [t];
245 }
246
247 QString toString (CEnums::USBDeviceFilterAction t) const
248 {
249 AssertMsg (!usbFilterActionTypes [t].isNull(), ("No text for %d", t));
250 return usbFilterActionTypes [t];
251 }
252
253 QString toString (CEnums::ClipboardMode t) const
254 {
255 AssertMsg (!clipboardTypes [t].isNull(), ("No text for %d", t));
256 return clipboardTypes [t];
257 }
258
259 CEnums::ClipboardMode toClipboardModeType (const QString &s) const
260 {
261 QStringVector::const_iterator it =
262 qFind (clipboardTypes.begin(), clipboardTypes.end(), s);
263 AssertMsg (it != clipboardTypes.end(), ("No value for {%s}", s.latin1()));
264 return CEnums::ClipboardMode (it - clipboardTypes.begin());
265 }
266
267 QString toString (CEnums::IDEControllerType t) const
268 {
269 AssertMsg (!ideControllerTypes [t].isNull(), ("No text for %d", t));
270 return ideControllerTypes [t];
271 }
272
273 CEnums::IDEControllerType toIDEControllerType (const QString &s) const
274 {
275 QStringVector::const_iterator it =
276 qFind (ideControllerTypes.begin(), ideControllerTypes.end(), s);
277 AssertMsg (it != ideControllerTypes.end(), ("No value for {%s}", s.latin1()));
278 return CEnums::IDEControllerType (it - ideControllerTypes.begin());
279 }
280
281 CEnums::VRDPAuthType toVRDPAuthType (const QString &s) const
282 {
283 QStringVector::const_iterator it =
284 qFind (vrdpAuthTypes.begin(), vrdpAuthTypes.end(), s);
285 AssertMsg (it != vrdpAuthTypes.end(), ("No value for {%s}", s.latin1()));
286 return CEnums::VRDPAuthType (it - vrdpAuthTypes.begin());
287 }
288
289 CEnums::PortMode toPortMode (const QString &s) const
290 {
291 QStringVector::const_iterator it =
292 qFind (portModeTypes.begin(), portModeTypes.end(), s);
293 AssertMsg (it != portModeTypes.end(), ("No value for {%s}", s.latin1()));
294 return CEnums::PortMode (it - portModeTypes.begin());
295 }
296
297 CEnums::USBDeviceFilterAction toUSBDevFilterAction (const QString &s) const
298 {
299 QStringVector::const_iterator it =
300 qFind (usbFilterActionTypes.begin(), usbFilterActionTypes.end(), s);
301 AssertMsg (it != usbFilterActionTypes.end(), ("No value for {%s}", s.latin1()));
302 return CEnums::USBDeviceFilterAction (it - usbFilterActionTypes.begin());
303 }
304
305 /**
306 * Similar to toString (CEnums::HardDiskType), but returns 'Differencing'
307 * for normal hard disks that have a parent hard disk.
308 */
309 QString hardDiskTypeString (const CHardDisk &aHD) const
310 {
311 if (!aHD.GetParent().isNull())
312 {
313 Assert (aHD.GetType() == CEnums::NormalHardDisk);
314 return tr ("Differencing", "hard disk");
315 }
316 return toString (aHD.GetType());
317 }
318
319 QString toString (CEnums::DiskControllerType t, LONG d) const;
320
321 QString toString (CEnums::DeviceType t) const
322 {
323 AssertMsg (!deviceTypes [t].isNull(), ("No text for %d", t));
324 return deviceTypes [t];
325 }
326
327 CEnums::DeviceType toDeviceType (const QString &s) const
328 {
329 QStringVector::const_iterator it =
330 qFind (deviceTypes.begin(), deviceTypes.end(), s);
331 AssertMsg (it != deviceTypes.end(), ("No value for {%s}", s.latin1()));
332 return CEnums::DeviceType (it - deviceTypes.begin());
333 }
334
335 QStringList deviceTypeStrings() const;
336
337 QString toString (CEnums::AudioDriverType t) const
338 {
339 AssertMsg (!audioDriverTypes [t].isNull(), ("No text for %d", t));
340 return audioDriverTypes [t];
341 }
342
343 CEnums::AudioDriverType toAudioDriverType (const QString &s) const
344 {
345 QStringVector::const_iterator it =
346 qFind (audioDriverTypes.begin(), audioDriverTypes.end(), s);
347 AssertMsg (it != audioDriverTypes.end(), ("No value for {%s}", s.latin1()));
348 return CEnums::AudioDriverType (it - audioDriverTypes.begin());
349 }
350
351 QString toString (CEnums::AudioControllerType t) const
352 {
353 AssertMsg (!audioControllerTypes [t].isNull(), ("No text for %d", t));
354 return audioControllerTypes [t];
355 }
356
357 CEnums::AudioControllerType toAudioControllerType (const QString &s) const
358 {
359 QStringVector::const_iterator it =
360 qFind (audioControllerTypes.begin(), audioControllerTypes.end(), s);
361 AssertMsg (it != audioControllerTypes.end(), ("No value for {%s}", s.latin1()));
362 return CEnums::AudioControllerType (it - audioControllerTypes.begin());
363 }
364
365 QString toString (CEnums::NetworkAttachmentType t) const
366 {
367 AssertMsg (!networkAttachmentTypes [t].isNull(), ("No text for %d", t));
368 return networkAttachmentTypes [t];
369 }
370
371 CEnums::NetworkAttachmentType toNetworkAttachmentType (const QString &s) const
372 {
373 QStringVector::const_iterator it =
374 qFind (networkAttachmentTypes.begin(), networkAttachmentTypes.end(), s);
375 AssertMsg (it != networkAttachmentTypes.end(), ("No value for {%s}", s.latin1()));
376 return CEnums::NetworkAttachmentType (it - networkAttachmentTypes.begin());
377 }
378
379 QString toString (CEnums::USBDeviceState aState) const
380 {
381 AssertMsg (!USBDeviceStates [aState].isNull(), ("No text for %d", aState));
382 return USBDeviceStates [aState];
383 }
384
385 QStringList COMPortNames() const;
386 QString toCOMPortName (ulong aIRQ, ulong aIOBase) const;
387 bool toCOMPortNumbers (const QString &aName, ulong &aIRQ, ulong &aIOBase) const;
388
389 QStringList LPTPortNames() const;
390 QString toLPTPortName (ulong aIRQ, ulong aIOBase) const;
391 bool toLPTPortNumbers (const QString &aName, ulong &aIRQ, ulong &aIOBase) const;
392
393 QPixmap snapshotIcon (bool online) const
394 {
395 return online ? mOnlineSnapshotIcon : mOfflineSnapshotIcon;
396 }
397
398 /* details generators */
399
400 QString details (const CHardDisk &aHD, bool aPredict = false,
401 bool aDoRefresh = true);
402
403 QString details (const CUSBDevice &aDevice) const;
404 QString toolTip (const CUSBDevice &aDevice) const;
405
406 QString prepareFileNameForHTML (const QString &fn) const;
407
408 QString detailsReport (const CMachine &m, bool isNewVM, bool withLinks,
409 bool aDoRefresh = true);
410
411 /* VirtualBox helpers */
412
413#ifdef Q_WS_X11
414 bool showVirtualBoxLicense();
415#endif
416
417 CSession openSession (const QUuid &id);
418
419 bool startMachine (const QUuid &id);
420
421 void startEnumeratingMedia();
422
423 /**
424 * Returns a list of all currently registered media. This list is used
425 * to globally track the accessiblity state of all media on a dedicated
426 * thread. This the list is initially empty (before the first enumeration
427 * process is started using #startEnumeratingMedia()).
428 */
429 const VBoxMediaList &currentMediaList() const { return media_list; }
430
431 /** Returns true if the media enumeration is in progress. */
432 bool isMediaEnumerationStarted() const { return media_enum_thread != NULL; }
433
434 void addMedia (const VBoxMedia &);
435 void updateMedia (const VBoxMedia &);
436 void removeMedia (VBoxDefs::DiskType, const QUuid &);
437
438 bool findMedia (const CUnknown &, VBoxMedia &) const;
439
440 /* various helpers */
441
442 QString languageName() const;
443 QString languageCountry() const;
444 QString languageNameEnglish() const;
445 QString languageCountryEnglish() const;
446 QString languageTranslators() const;
447
448 void languageChange();
449
450 /** @internal made public for internal purposes */
451 void cleanup();
452
453 /* public static stuff */
454
455 static bool isDOSType (const QString &aOSTypeId);
456
457 static void adoptLabelPixmap (QLabel *);
458
459 static QString languageId();
460 static void loadLanguage (const QString &aLangId = QString::null);
461
462 static QIconSet iconSet (const char *aNormal,
463 const char *aDisabled = 0,
464 const char *aActive = 0);
465 static QIconSet iconSetEx (const char *aNormal, const char *aSmallNormal,
466 const char *aDisabled = 0, const char *aSmallDisabled = 0,
467 const char *aActive = 0, const char *aSmallActive = 0);
468
469 static void setTextLabel (QToolButton *aToolButton, const QString &aTextLabel);
470
471 static QRect normalizeGeometry (const QRect &aRect, const QRect &aBoundRect,
472 bool aCanResize = true);
473
474 static void centerWidget (QWidget *aWidget, QWidget *aRelative,
475 bool aCanResize = true);
476
477 static QChar decimalSep();
478 static QString sizeRegexp();
479
480 static Q_UINT64 parseSize (const QString &);
481 static QString formatSize (Q_UINT64, int aMode = 0);
482
483 static QString highlight (const QString &aStr, bool aToolTip = false);
484
485 static QString systemLanguageId();
486
487 static QString getExistingDirectory (const QString &aDir, QWidget *aParent,
488 const char *aName = 0,
489 const QString &aCaption = QString::null,
490 bool aDirOnly = TRUE,
491 bool resolveSymlinks = TRUE);
492
493 static QString getOpenFileName (const QString &, const QString &, QWidget*,
494 const char*, const QString &,
495 QString *defaultFilter = 0,
496 bool resolveSymLinks = true);
497
498 static QString getFirstExistingDir (const QString &);
499
500 static bool activateWindow (WId aWId, bool aSwitchDesktop = true);
501
502 static QString removeAccelMark (const QString &aText);
503
504 static QWidget *findWidget (QWidget *aParent, const char *aName,
505 const char *aClassName = NULL,
506 bool aRecursive = false);
507
508signals:
509
510 /**
511 * Emitted at the beginning of the enumeration process started
512 * by #startEnumeratingMedia().
513 */
514 void mediaEnumStarted();
515
516 /**
517 * Emitted when a new media item from the list has updated
518 * its accessibility state.
519 */
520 void mediaEnumerated (const VBoxMedia &aMedia, int aIndex);
521
522 /**
523 * Emitted at the end of the enumeration process started
524 * by #startEnumeratingMedia(). The @a aList argument is passed for
525 * convenience, it is exactly the same as returned by #currentMediaList().
526 */
527 void mediaEnumFinished (const VBoxMediaList &aList);
528
529 /** Emitted when a new media is added using #addMedia(). */
530 void mediaAdded (const VBoxMedia &);
531
532 /** Emitted when the media is updated using #updateMedia(). */
533 void mediaUpdated (const VBoxMedia &);
534
535 /** Emitted when the media is removed using #removeMedia(). */
536 void mediaRemoved (VBoxDefs::DiskType, const QUuid &);
537
538 /* signals emitted when the VirtualBox callback is called by the server
539 * (not that currently these signals are emitted only when the application
540 * is the in the VM selector mode) */
541
542 void machineStateChanged (const VBoxMachineStateChangeEvent &e);
543 void machineDataChanged (const VBoxMachineDataChangeEvent &e);
544 void machineRegistered (const VBoxMachineRegisteredEvent &e);
545 void sessionStateChanged (const VBoxSessionStateChangeEvent &e);
546 void snapshotChanged (const VBoxSnapshotEvent &e);
547
548 void canShowRegDlg (bool aCanShow);
549
550public slots:
551
552 bool openURL (const QString &aURL);
553
554 void showRegistrationDialog (bool aForce = true);
555
556protected:
557
558 bool event (QEvent *e);
559 bool eventFilter (QObject *, QEvent *);
560
561private:
562
563 VBoxGlobal();
564 ~VBoxGlobal() {}
565
566 void init();
567
568 bool mValid;
569
570 CVirtualBox mVBox;
571
572 VBoxGlobalSettings gset;
573
574 VBoxSelectorWnd *mSelectorWnd;
575 VBoxConsoleWnd *mConsoleWnd;
576
577#ifdef VBOX_WITH_REGISTRATION
578 VBoxRegistrationDlg *mRegDlg;
579#endif
580
581 QUuid vmUuid;
582
583 QThread *media_enum_thread;
584 VBoxMediaList media_list;
585
586 VBoxDefs::RenderMode vm_render_mode;
587 const char * vm_render_mode_str;
588
589#ifdef VBOX_WITH_DEBUGGER_GUI
590 bool dbg_enabled;
591 bool dbg_visible_at_startup;
592#endif
593
594#if defined (Q_WS_WIN32)
595 DWORD dwHTMLHelpCookie;
596#endif
597
598 CVirtualBoxCallback callback;
599
600 typedef QValueVector <QString> QStringVector;
601
602 QString verString;
603
604 QValueVector <CGuestOSType> vm_os_types;
605 QDict <QPixmap> vm_os_type_icons;
606 QPtrVector <QColor> vm_state_color;
607
608 QIntDict <QPixmap> mStateIcons;
609 QPixmap mOfflineSnapshotIcon, mOnlineSnapshotIcon;
610
611 QStringVector machineStates;
612 QStringVector sessionStates;
613 QStringVector deviceTypes;
614 QStringVector diskControllerTypes;
615 QStringVector diskTypes;
616 QStringVector diskStorageTypes;
617 QStringVector vrdpAuthTypes;
618 QStringVector portModeTypes;
619 QStringVector usbFilterActionTypes;
620 QStringVector diskControllerDevices;
621 QStringVector audioDriverTypes;
622 QStringVector audioControllerTypes;
623 QStringVector networkAttachmentTypes;
624 QStringVector clipboardTypes;
625 QStringVector ideControllerTypes;
626 QStringVector USBDeviceStates;
627
628 QString mUserDefinedPortName;
629
630 mutable bool detailReportTemplatesReady;
631
632 friend VBoxGlobal &vboxGlobal();
633 friend class VBoxCallback;
634};
635
636inline VBoxGlobal &vboxGlobal() { return VBoxGlobal::instance(); }
637
638// Helper classes
639////////////////////////////////////////////////////////////////////////////////
640
641/**
642 * Generic asyncronous event.
643 *
644 * This abstract class is intended to provide a conveinent way to execute
645 * code on the main GUI thread asynchronously to the calling party. This is
646 * done by putting necessary actions to the #handle() function in a subclass
647 * and then posting an instance of the subclass using #post(). The instance
648 * must be allocated on the heap using the <tt>new</tt> operation and will be
649 * automatically deleted after processing. Note that if you don't call #post()
650 * on the created instance, you have to delete it yourself.
651 */
652class VBoxAsyncEvent : public QEvent
653{
654public:
655
656 VBoxAsyncEvent() : QEvent ((QEvent::Type) VBoxDefs::AsyncEventType) {}
657
658 /**
659 * Worker function. Gets executed on the GUI thread when the posted event
660 * is processed by the main event loop.
661 */
662 virtual void handle() = 0;
663
664 /**
665 * Posts this event to the main event loop.
666 * The caller loses ownership of this object after this method returns
667 * and must not delete the object.
668 */
669 void post()
670 {
671 QApplication::postEvent (&vboxGlobal(), this);
672 }
673};
674
675/**
676 * USB Popup Menu class.
677 * This class provides the list of USB devices attached to the host.
678 */
679class VBoxUSBMenu : public QPopupMenu
680{
681 Q_OBJECT
682
683public:
684
685 enum { USBDevicesMenuNoDevicesId = 1 };
686
687 VBoxUSBMenu (QWidget *);
688
689 const CUSBDevice& getUSB (int);
690
691 void setConsole (const CConsole &);
692
693private slots:
694
695 void processAboutToShow();
696
697 void processHighlighted (int);
698
699private:
700
701 QMap <int, CUSBDevice> mUSBDevicesMap;
702 CConsole mConsole;
703};
704
705
706/**
707 * Enable/Disable Menu class.
708 * This class provides enable/disable menu items.
709 */
710class VBoxSwitchMenu : public QPopupMenu
711{
712 Q_OBJECT
713
714public:
715
716 VBoxSwitchMenu (QWidget *, QAction *, bool aInverted = false);
717
718 void setToolTip (const QString &);
719
720private slots:
721
722 void processAboutToShow();
723
724 void processActivated (int);
725
726private:
727
728 QAction *mAction;
729 QString mTip;
730 bool mInverted;
731};
732
733#endif /* __VBoxGlobal_h__ */
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