1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtGui module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QPLATFORMTHEME_H
41#define QPLATFORMTHEME_H
42
43//
44// W A R N I N G
45// -------------
46//
47// This file is part of the QPA API and is not meant to be used
48// in applications. Usage of this API may make your code
49// source and binary incompatible with future versions of Qt.
50//
51
52#include <QtGui/qtguiglobal.h>
53#include <QtCore/QScopedPointer>
54#include <QtGui/QKeySequence>
55
56QT_BEGIN_NAMESPACE
57
58class QIcon;
59class QIconEngine;
60class QMenu;
61class QMenuBar;
62class QPlatformMenuItem;
63class QPlatformMenu;
64class QPlatformMenuBar;
65class QPlatformDialogHelper;
66class QPlatformSystemTrayIcon;
67class QPlatformThemePrivate;
68class QVariant;
69class QPalette;
70class QFont;
71class QPixmap;
72class QSizeF;
73class QFileInfo;
74
75class Q_GUI_EXPORT QPlatformTheme
76{
77 Q_DECLARE_PRIVATE(QPlatformTheme)
78public:
79 Q_DISABLE_COPY_MOVE(QPlatformTheme)
80
81 enum ThemeHint {
82 CursorFlashTime,
83 KeyboardInputInterval,
84 MouseDoubleClickInterval,
85 StartDragDistance,
86 StartDragTime,
87 KeyboardAutoRepeatRate,
88 PasswordMaskDelay,
89 StartDragVelocity,
90 TextCursorWidth,
91 DropShadow,
92 MaximumScrollBarDragDistance,
93 ToolButtonStyle,
94 ToolBarIconSize,
95 ItemViewActivateItemOnSingleClick,
96 SystemIconThemeName,
97 SystemIconFallbackThemeName,
98 IconThemeSearchPaths,
99 StyleNames,
100 WindowAutoPlacement,
101 DialogButtonBoxLayout,
102 DialogButtonBoxButtonsHaveIcons,
103 UseFullScreenForPopupMenu,
104 KeyboardScheme,
105 UiEffects,
106 SpellCheckUnderlineStyle,
107#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
108 TabFocusBehavior,
109#else
110 TabAllWidgets,
111 TabFocusBehavior = TabAllWidgets,
112#endif
113 IconPixmapSizes,
114 PasswordMaskCharacter,
115 DialogSnapToDefaultButton,
116 ContextMenuOnMouseRelease,
117 MousePressAndHoldInterval,
118 MouseDoubleClickDistance,
119 WheelScrollLines,
120 TouchDoubleTapDistance,
121 ShowShortcutsInContextMenus,
122 IconFallbackSearchPaths,
123 MouseQuickSelectionThreshold
124 };
125
126 enum DialogType {
127 FileDialog,
128 ColorDialog,
129 FontDialog,
130 MessageDialog
131 };
132
133 enum Palette {
134 SystemPalette,
135 ToolTipPalette,
136 ToolButtonPalette,
137 ButtonPalette,
138 CheckBoxPalette,
139 RadioButtonPalette,
140 HeaderPalette,
141 ComboBoxPalette,
142 ItemViewPalette,
143 MessageBoxLabelPelette,
144 MessageBoxLabelPalette = MessageBoxLabelPelette,
145 TabBarPalette,
146 LabelPalette,
147 GroupBoxPalette,
148 MenuPalette,
149 MenuBarPalette,
150 TextEditPalette,
151 TextLineEditPalette,
152 NPalettes
153 };
154
155 enum Font {
156 SystemFont,
157 MenuFont,
158 MenuBarFont,
159 MenuItemFont,
160 MessageBoxFont,
161 LabelFont,
162 TipLabelFont,
163 StatusBarFont,
164 TitleBarFont,
165 MdiSubWindowTitleFont,
166 DockWidgetTitleFont,
167 PushButtonFont,
168 CheckBoxFont,
169 RadioButtonFont,
170 ToolButtonFont,
171 ItemViewFont,
172 ListViewFont,
173 HeaderViewFont,
174 ListBoxFont,
175 ComboMenuItemFont,
176 ComboLineEditFont,
177 SmallFont,
178 MiniFont,
179 FixedFont,
180 GroupBoxTitleFont,
181 TabButtonFont,
182 EditorFont,
183 NFonts
184 };
185
186 enum StandardPixmap { // Keep in sync with QStyle::StandardPixmap
187 TitleBarMenuButton,
188 TitleBarMinButton,
189 TitleBarMaxButton,
190 TitleBarCloseButton,
191 TitleBarNormalButton,
192 TitleBarShadeButton,
193 TitleBarUnshadeButton,
194 TitleBarContextHelpButton,
195 DockWidgetCloseButton,
196 MessageBoxInformation,
197 MessageBoxWarning,
198 MessageBoxCritical,
199 MessageBoxQuestion,
200 DesktopIcon,
201 TrashIcon,
202 ComputerIcon,
203 DriveFDIcon,
204 DriveHDIcon,
205 DriveCDIcon,
206 DriveDVDIcon,
207 DriveNetIcon,
208 DirOpenIcon,
209 DirClosedIcon,
210 DirLinkIcon,
211 DirLinkOpenIcon,
212 FileIcon,
213 FileLinkIcon,
214 ToolBarHorizontalExtensionButton,
215 ToolBarVerticalExtensionButton,
216 FileDialogStart,
217 FileDialogEnd,
218 FileDialogToParent,
219 FileDialogNewFolder,
220 FileDialogDetailedView,
221 FileDialogInfoView,
222 FileDialogContentsView,
223 FileDialogListView,
224 FileDialogBack,
225 DirIcon,
226 DialogOkButton,
227 DialogCancelButton,
228 DialogHelpButton,
229 DialogOpenButton,
230 DialogSaveButton,
231 DialogCloseButton,
232 DialogApplyButton,
233 DialogResetButton,
234 DialogDiscardButton,
235 DialogYesButton,
236 DialogNoButton,
237 ArrowUp,
238 ArrowDown,
239 ArrowLeft,
240 ArrowRight,
241 ArrowBack,
242 ArrowForward,
243 DirHomeIcon,
244 CommandLink,
245 VistaShield,
246 BrowserReload,
247 BrowserStop,
248 MediaPlay,
249 MediaStop,
250 MediaPause,
251 MediaSkipForward,
252 MediaSkipBackward,
253 MediaSeekForward,
254 MediaSeekBackward,
255 MediaVolume,
256 MediaVolumeMuted,
257 LineEditClearButton,
258 // do not add any values below/greater than this
259 CustomBase = 0xf0000000
260 };
261
262 enum KeyboardSchemes
263 {
264 WindowsKeyboardScheme,
265 MacKeyboardScheme,
266 X11KeyboardScheme,
267 KdeKeyboardScheme,
268 GnomeKeyboardScheme,
269 CdeKeyboardScheme
270 };
271
272 enum UiEffect
273 {
274 GeneralUiEffect = 0x1,
275 AnimateMenuUiEffect = 0x2,
276 FadeMenuUiEffect = 0x4,
277 AnimateComboUiEffect = 0x8,
278 AnimateTooltipUiEffect = 0x10,
279 FadeTooltipUiEffect = 0x20,
280 AnimateToolBoxUiEffect = 0x40,
281 HoverEffect = 0x80
282 };
283
284 enum IconOption {
285 DontUseCustomDirectoryIcons = 0x01
286 };
287 Q_DECLARE_FLAGS(IconOptions, IconOption)
288
289 explicit QPlatformTheme();
290 virtual ~QPlatformTheme();
291
292 virtual QPlatformMenuItem* createPlatformMenuItem() const;
293 virtual QPlatformMenu* createPlatformMenu() const;
294 virtual QPlatformMenuBar* createPlatformMenuBar() const;
295 virtual void showPlatformMenuBar() {}
296
297 virtual bool usePlatformNativeDialog(DialogType type) const;
298 virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;
299
300#ifndef QT_NO_SYSTEMTRAYICON
301 virtual QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const;
302#endif
303
304 virtual const QPalette *palette(Palette type = SystemPalette) const;
305
306 virtual const QFont *font(Font type = SystemFont) const;
307
308 virtual QVariant themeHint(ThemeHint hint) const;
309
310 virtual QPixmap standardPixmap(StandardPixmap sp, const QSizeF &size) const;
311 virtual QIcon fileIcon(const QFileInfo &fileInfo,
312 QPlatformTheme::IconOptions iconOptions = nullptr) const;
313 virtual QIconEngine *createIconEngine(const QString &iconName) const;
314
315#ifndef QT_NO_SHORTCUT
316 virtual QList<QKeySequence> keyBindings(QKeySequence::StandardKey key) const;
317#endif
318
319 virtual QString standardButtonText(int button) const;
320 virtual QKeySequence standardButtonShortcut(int button) const;
321
322 static QVariant defaultThemeHint(ThemeHint hint);
323 static QString defaultStandardButtonText(int button);
324 static QString removeMnemonics(const QString &original);
325
326protected:
327 explicit QPlatformTheme(QPlatformThemePrivate *priv);
328 QScopedPointer<QPlatformThemePrivate> d_ptr;
329};
330
331QT_END_NAMESPACE
332
333#endif // QPLATFORMTHEME_H
334