VirtualBox

source: vbox/trunk/src/VBox/Frontends/VirtualBox/include/VBoxToolBar.h@ 23223

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

API: big medium handling change and lots of assorted other cleanups and fixes

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.3 KB
Line 
1/** @file
2 *
3 * VBox frontends: Qt GUI ("VirtualBox"):
4 * VBoxToolBar class declaration & implementation
5 */
6
7/*
8 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.virtualbox.org. This file is free software;
12 * you can redistribute it and/or modify it under the terms of the GNU
13 * General Public License (GPL) as published by the Free Software
14 * Foundation, in version 2 as it comes in the "COPYING" file of the
15 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17 *
18 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
19 * Clara, CA 95054 USA or visit http://www.sun.com if you need
20 * additional information or have any questions.
21 */
22
23#ifndef ___VBoxToolBar_h___
24#define ___VBoxToolBar_h___
25
26#include <QGlobalStatic> /* for Q_WS_MAC */
27#ifdef Q_WS_MAC
28#include "VBoxUtils.h"
29#endif
30
31/* Qt includes */
32#include <QLayout>
33#include <QMainWindow>
34#include <QToolBar>
35
36/* Note: This styles are available on _all_ platforms. */
37#include <QCleanlooksStyle>
38#include <QWindowsStyle>
39
40/**
41 * The VBoxToolBar class is a simple QToolBar reimplementation to disable
42 * its built-in context menu and add some default behavior we need.
43 */
44class VBoxToolBar : public QToolBar
45{
46
47public:
48
49 VBoxToolBar (QWidget *aParent)
50 : QToolBar (aParent)
51 , mMainWindow (qobject_cast <QMainWindow*> (aParent))
52 {
53 setFloatable (false);
54 setMovable (false);
55
56 /* Remove that ugly frame panel around the toolbar.
57 * Doing that currently for Cleanlooks & Windows styles. */
58 if (qobject_cast <QCleanlooksStyle*> (QToolBar::style()) ||
59 qobject_cast <QWindowsStyle*> (QToolBar::style()))
60 setStyleSheet ("QToolBar { border: 0px none black; }");
61
62 if (layout())
63 layout()->setContentsMargins (0, 0, 0, 0);;
64
65 setContextMenuPolicy (Qt::NoContextMenu);
66 }
67
68#ifdef Q_WS_MAC
69 void setMacToolbar()
70 {
71 if (mMainWindow)
72 {
73 mMainWindow->setUnifiedTitleAndToolBarOnMac (true);
74#ifndef QT_MAC_USE_COCOA
75 WindowRef window = ::darwinToNativeWindow (this);
76 EventHandlerUPP eventHandler = ::NewEventHandlerUPP (VBoxToolBar::macEventFilter);
77 EventTypeSpec eventTypes[2];
78 eventTypes[0].eventClass = kEventClassMouse;
79 eventTypes[0].eventKind = kEventMouseDown;
80 eventTypes[1].eventClass = kEventClassMouse;
81 eventTypes[1].eventKind = kEventMouseUp;
82 InstallWindowEventHandler (window, eventHandler,
83 RT_ELEMENTS (eventTypes), eventTypes,
84 NULL, NULL);
85#endif /* !QT_MAC_USE_COCOA */
86 }
87 }
88
89#ifndef QT_MAC_USE_COCOA
90 static pascal OSStatus macEventFilter (EventHandlerCallRef aNextHandler,
91 EventRef aEvent, void * /* aUserData */)
92 {
93 UInt32 eclass = GetEventClass (aEvent);
94 if (eclass == kEventClassMouse)
95 {
96 WindowPartCode partCode;
97 GetEventParameter (aEvent, kEventParamWindowPartCode, typeWindowPartCode, NULL, sizeof (WindowPartCode), NULL, &partCode);
98 UInt32 ekind = GetEventKind (aEvent);
99 if (partCode == 15 ||
100 partCode == 4)
101 if(ekind == kEventMouseDown || ekind == kEventMouseUp)
102 {
103 EventMouseButton button = 0;
104 GetEventParameter (aEvent, kEventParamMouseButton, typeMouseButton, NULL, sizeof (button), NULL, &button);
105 if (button != kEventMouseButtonPrimary)
106 return noErr;
107 }
108 }
109 return CallNextEventHandler (aNextHandler, aEvent);
110 }
111#endif /* !QT_MAC_USE_COCOA */
112
113 void setShowToolBarButton (bool aShow)
114 {
115 ::darwinSetShowsToolbarButton (this, aShow);
116 }
117#endif /* Q_WS_MAC */
118
119 void setUsesTextLabel (bool aEnable)
120 {
121 Qt::ToolButtonStyle tbs = Qt::ToolButtonTextUnderIcon;
122 if (!aEnable)
123 tbs = Qt::ToolButtonIconOnly;
124
125 if (mMainWindow)
126 mMainWindow->setToolButtonStyle (tbs);
127 else
128 setToolButtonStyle (tbs);
129 }
130
131private:
132
133 QMainWindow *mMainWindow;
134};
135
136#endif // !___VBoxToolBar_h___
137
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