1 /*
2 styleoption.cpp
3
4 This file is part of GammaRay, the Qt application inspection and
5 manipulation tool.
6
7 Copyright (C) 2012-2021 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
8 Author: Volker Krause <volker.krause@kdab.com>
9
10 Licensees holding valid commercial KDAB GammaRay licenses may use this file in
11 accordance with GammaRay Commercial License Agreement provided with the Software.
12
13 Contact info@kdab.com if any conditions of this licensing are not clear to you.
14
15 This program is free software; you can redistribute it and/or modify
16 it under the terms of the GNU General Public License as published by
17 the Free Software Foundation, either version 2 of the License, or
18 (at your option) any later version.
19
20 This program is distributed in the hope that it will be useful,
21 but WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 GNU General Public License for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with this program. If not, see <http://www.gnu.org/licenses/>.
27 */
28
29 #include "styleoption.h"
30
31 #include <QStyleOption>
32
33 using namespace GammaRay;
34
35 // The following commit in qtbase.git deprecated versioned style class in 5.7.0
36 // 95a6dc1 - QStyleOption*V<N>: mark as Q_DECL_DEPRECATED
37 #if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
38 using QStyleOptionFrameCV = QStyleOptionFrame;
39 using QStyleOptionToolBoxCV = QStyleOptionToolBox;
40 using QStyleOptionTabCV = QStyleOptionTab;
41 using QStyleOptionTabBarBaseCV = QStyleOptionTabBarBase;
42 using QStyleOptionTabWidgetFrameCV = QStyleOptionTabWidgetFrame;
43 using QStyleOptionViewItemCV = QStyleOptionViewItem;
44 using QStyleOptionProgressBarCV = QStyleOptionProgressBar;
45 #else
46 typedef QStyleOptionFrameV3 QStyleOptionFrameCV;
47 typedef QStyleOptionToolBoxV2 QStyleOptionToolBoxCV;
48 typedef QStyleOptionTabBarBaseV2 QStyleOptionTabBarBaseCV;
49 typedef QStyleOptionTabV3 QStyleOptionTabCV;
50 typedef QStyleOptionTabWidgetFrameV2 QStyleOptionTabWidgetFrameCV;
51 typedef QStyleOptionViewItemV4 QStyleOptionViewItemCV;
52 typedef QStyleOptionProgressBarV2 QStyleOptionProgressBarCV;
53 #endif
54
55 struct style_state_t {
56 const char *name;
57 QStyle::State state;
58 };
59
60 #define MAKE_STATE(state) { #state, QStyle:: state }
61
62 static const style_state_t styleStates[] = {
63 MAKE_STATE(State_None),
64 MAKE_STATE(State_Enabled),
65 MAKE_STATE(State_Raised),
66 MAKE_STATE(State_Sunken),
67 MAKE_STATE(State_Off),
68 MAKE_STATE(State_NoChange),
69 MAKE_STATE(State_On),
70 MAKE_STATE(State_DownArrow),
71 MAKE_STATE(State_Horizontal),
72 MAKE_STATE(State_HasFocus),
73 MAKE_STATE(State_Top),
74 MAKE_STATE(State_Bottom),
75 MAKE_STATE(State_FocusAtBorder),
76 MAKE_STATE(State_AutoRaise),
77 MAKE_STATE(State_MouseOver),
78 MAKE_STATE(State_UpArrow),
79 MAKE_STATE(State_Selected),
80 MAKE_STATE(State_Active),
81 MAKE_STATE(State_Window),
82 MAKE_STATE(State_Open),
83 MAKE_STATE(State_Children),
84 MAKE_STATE(State_Item),
85 MAKE_STATE(State_Sibling),
86 MAKE_STATE(State_Editing),
87 MAKE_STATE(State_KeyboardFocusChange),
88 MAKE_STATE(State_ReadOnly),
89 MAKE_STATE(State_Small),
90 MAKE_STATE(State_Mini)
91 };
92
stateCount()93 int StyleOption::stateCount()
94 {
95 return sizeof(styleStates) / sizeof(style_state_t);
96 }
97
stateDisplayName(int index)98 QString StyleOption::stateDisplayName(int index)
99 {
100 return QString::fromLatin1(styleStates[index].name).mid(6); // remove the State_ prefix
101 }
102
prettyState(int index)103 QStyle::State StyleOption::prettyState(int index)
104 {
105 QStyle::State s = styleStates[index].state;
106 if (s == QStyle::State_None)
107 return s;
108 return s | QStyle::State_Enabled; // enable by default, else we usually see disabled stuff only
109 }
110
makeStyleOption()111 QStyleOption *StyleOption::makeStyleOption()
112 {
113 return new QStyleOption;
114 }
115
makeStyleOptionComplex()116 QStyleOption *StyleOption::makeStyleOptionComplex()
117 {
118 return new QStyleOptionComplex;
119 }
120
makeButtonStyleOption()121 QStyleOption *StyleOption::makeButtonStyleOption()
122 {
123 auto *opt = new QStyleOptionButton;
124 opt->features = QStyleOptionButton::None;
125 opt->text = QStringLiteral("Label");
126 return opt;
127 }
128
makeComboBoxStyleOption()129 QStyleOption *StyleOption::makeComboBoxStyleOption()
130 {
131 auto *opt = new QStyleOptionComboBox;
132 opt->frame = true;
133 opt->currentText = QStringLiteral("Current Text");
134 return opt;
135 }
136
makeFrameStyleOption()137 QStyleOption *StyleOption::makeFrameStyleOption()
138 {
139 auto opt = new QStyleOptionFrameCV;
140 opt->lineWidth = 1;
141 opt->midLineWidth = 0;
142 opt->frameShape = QFrame::StyledPanel;
143 return opt;
144 }
145
makeGroupBoxStyleOption()146 QStyleOption *StyleOption::makeGroupBoxStyleOption()
147 {
148 auto *opt = new QStyleOptionGroupBox;
149 opt->lineWidth = 1;
150 opt->midLineWidth = 0;
151 opt->text = QStringLiteral("Label");
152 return opt;
153 }
154
makeHeaderStyleOption()155 QStyleOption *StyleOption::makeHeaderStyleOption()
156 {
157 auto *opt = new QStyleOptionHeader;
158 opt->orientation = Qt::Horizontal;
159 opt->text = QStringLiteral("Label");
160 return opt;
161 }
162
makeItemViewStyleOption()163 QStyleOption *StyleOption::makeItemViewStyleOption()
164 {
165 auto opt = new QStyleOptionViewItemCV;
166 opt->text = QStringLiteral("Text");
167 opt->features = QStyleOptionViewItemCV::HasDisplay;
168 return opt;
169 }
170
makeMenuStyleOption()171 QStyleOption *StyleOption::makeMenuStyleOption()
172 {
173 auto *opt = new QStyleOptionMenuItem;
174 opt->text = QStringLiteral("Label");
175 return opt;
176 }
177
makeProgressBarStyleOption()178 QStyleOption *StyleOption::makeProgressBarStyleOption()
179 {
180 auto opt = new QStyleOptionProgressBarCV;
181 opt->minimum = 0;
182 opt->maximum = 100;
183 opt->progress = 42;
184 return opt;
185 }
186
makeSliderStyleOption()187 QStyleOption *StyleOption::makeSliderStyleOption()
188 {
189 auto *opt = new QStyleOptionSlider;
190 opt->minimum = 0;
191 opt->maximum = 100;
192 opt->sliderValue = 42;
193 opt->tickInterval = 5;
194 return opt;
195 }
196
makeSpinBoxStyleOption()197 QStyleOption *StyleOption::makeSpinBoxStyleOption()
198 {
199 auto *opt = new QStyleOptionSpinBox;
200 opt->frame = true;
201 return opt;
202 }
203
makeTabStyleOption()204 QStyleOption *StyleOption::makeTabStyleOption()
205 {
206 auto opt = new QStyleOptionTabCV;
207 opt->text = QStringLiteral("Label");
208 return opt;
209 }
210
makeTabBarBaseStyleOption()211 QStyleOption *StyleOption::makeTabBarBaseStyleOption()
212 {
213 return new QStyleOptionTabBarBaseCV;
214 }
215
makeTabWidgetFrameStyleOption()216 QStyleOption *StyleOption::makeTabWidgetFrameStyleOption()
217 {
218 auto opt = new QStyleOptionTabWidgetFrameCV;
219 opt->lineWidth = 1;
220 return opt;
221 }
222
makeTitleBarStyleOption()223 QStyleOption *StyleOption::makeTitleBarStyleOption()
224 {
225 auto *opt = new QStyleOptionTitleBar;
226 opt->text = QStringLiteral("Title");
227 opt->titleBarFlags = Qt::WindowMinMaxButtonsHint
228 |Qt::WindowTitleHint
229 |Qt::WindowSystemMenuHint
230 |Qt::WindowCloseButtonHint;
231 return opt;
232 }
233
makeToolBoxStyleOption()234 QStyleOption *StyleOption::makeToolBoxStyleOption()
235 {
236 auto opt = new QStyleOptionToolBoxCV;
237 opt->text = QStringLiteral("Label");
238 return opt;
239 }
240
makeToolButtonStyleOption()241 QStyleOption *StyleOption::makeToolButtonStyleOption()
242 {
243 auto *opt = new QStyleOptionToolButton;
244 opt->text = QStringLiteral("Label");
245 opt->toolButtonStyle = Qt::ToolButtonFollowStyle;
246 return opt;
247 }
248