Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/widgets/widgets/qgroupbox.cpp |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 QtWidgets 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 | #include "qgroupbox.h" | - | ||||||||||||||||||
41 | #ifndef QT_NO_GROUPBOX | - | ||||||||||||||||||
42 | #include "qapplication.h" | - | ||||||||||||||||||
43 | #include "qbitmap.h" | - | ||||||||||||||||||
44 | #include "qdrawutil.h" | - | ||||||||||||||||||
45 | #include "qevent.h" | - | ||||||||||||||||||
46 | #include "qlayout.h" | - | ||||||||||||||||||
47 | #include "qradiobutton.h" | - | ||||||||||||||||||
48 | #include "qstyle.h" | - | ||||||||||||||||||
49 | #include "qstyleoption.h" | - | ||||||||||||||||||
50 | #include "qstylepainter.h" | - | ||||||||||||||||||
51 | #ifndef QT_NO_ACCESSIBILITY | - | ||||||||||||||||||
52 | #include "qaccessible.h" | - | ||||||||||||||||||
53 | #endif | - | ||||||||||||||||||
54 | #include <private/qwidget_p.h> | - | ||||||||||||||||||
55 | - | |||||||||||||||||||
56 | #include "qdebug.h" | - | ||||||||||||||||||
57 | - | |||||||||||||||||||
58 | QT_BEGIN_NAMESPACE | - | ||||||||||||||||||
59 | - | |||||||||||||||||||
60 | class QGroupBoxPrivate : public QWidgetPrivate | - | ||||||||||||||||||
61 | { | - | ||||||||||||||||||
62 | Q_DECLARE_PUBLIC(QGroupBox) | - | ||||||||||||||||||
63 | - | |||||||||||||||||||
64 | public: | - | ||||||||||||||||||
65 | void skip(); | - | ||||||||||||||||||
66 | void init(); | - | ||||||||||||||||||
67 | void calculateFrame(); | - | ||||||||||||||||||
68 | QString title; | - | ||||||||||||||||||
69 | int align; | - | ||||||||||||||||||
70 | #ifndef QT_NO_SHORTCUT | - | ||||||||||||||||||
71 | int shortcutId; | - | ||||||||||||||||||
72 | #endif | - | ||||||||||||||||||
73 | - | |||||||||||||||||||
74 | void _q_fixFocus(Qt::FocusReason reason); | - | ||||||||||||||||||
75 | void _q_setChildrenEnabled(bool b); | - | ||||||||||||||||||
76 | void click(); | - | ||||||||||||||||||
77 | bool flat; | - | ||||||||||||||||||
78 | bool checkable; | - | ||||||||||||||||||
79 | bool checked; | - | ||||||||||||||||||
80 | bool hover; | - | ||||||||||||||||||
81 | bool overCheckBox; | - | ||||||||||||||||||
82 | QStyle::SubControl pressedControl; | - | ||||||||||||||||||
83 | }; | - | ||||||||||||||||||
84 | - | |||||||||||||||||||
85 | /*! | - | ||||||||||||||||||
86 | Initialize \a option with the values from this QGroupBox. This method | - | ||||||||||||||||||
87 | is useful for subclasses when they need a QStyleOptionGroupBox, but don't want | - | ||||||||||||||||||
88 | to fill in all the information themselves. | - | ||||||||||||||||||
89 | - | |||||||||||||||||||
90 | \sa QStyleOption::initFrom() | - | ||||||||||||||||||
91 | */ | - | ||||||||||||||||||
92 | void QGroupBox::initStyleOption(QStyleOptionGroupBox *option) const | - | ||||||||||||||||||
93 | { | - | ||||||||||||||||||
94 | if (!option)
| 0 | ||||||||||||||||||
95 | return; never executed: return; | 0 | ||||||||||||||||||
96 | - | |||||||||||||||||||
97 | Q_D(const QGroupBox); | - | ||||||||||||||||||
98 | option->initFrom(this); | - | ||||||||||||||||||
99 | option->text = d->title; | - | ||||||||||||||||||
100 | option->lineWidth = 1; | - | ||||||||||||||||||
101 | option->midLineWidth = 0; | - | ||||||||||||||||||
102 | option->textAlignment = Qt::Alignment(d->align); | - | ||||||||||||||||||
103 | option->activeSubControls |= d->pressedControl; | - | ||||||||||||||||||
104 | option->subControls = QStyle::SC_GroupBoxFrame; | - | ||||||||||||||||||
105 | - | |||||||||||||||||||
106 | option->state.setFlag(QStyle::State_MouseOver, d->hover); | - | ||||||||||||||||||
107 | if (d->flat)
| 0 | ||||||||||||||||||
108 | option->features |= QStyleOptionFrame::Flat; never executed: option->features |= QStyleOptionFrame::Flat; | 0 | ||||||||||||||||||
109 | - | |||||||||||||||||||
110 | if (d->checkable) {
| 0 | ||||||||||||||||||
111 | option->subControls |= QStyle::SC_GroupBoxCheckBox; | - | ||||||||||||||||||
112 | option->state |= (d->checked ? QStyle::State_On : QStyle::State_Off);
| 0 | ||||||||||||||||||
113 | if ((d->pressedControl == QStyle::SC_GroupBoxCheckBox
| 0 | ||||||||||||||||||
114 | || d->pressedControl == QStyle::SC_GroupBoxLabel) && (d->hover || d->overCheckBox))
| 0 | ||||||||||||||||||
115 | option->state |= QStyle::State_Sunken; never executed: option->state |= QStyle::State_Sunken; | 0 | ||||||||||||||||||
116 | } never executed: end of block | 0 | ||||||||||||||||||
117 | - | |||||||||||||||||||
118 | if (!option->palette.isBrushSet(isEnabled() ? QPalette::Active :
| 0 | ||||||||||||||||||
119 | QPalette::Disabled, QPalette::WindowText))
| 0 | ||||||||||||||||||
120 | option->textColor = QColor(style()->styleHint(QStyle::SH_GroupBox_TextLabelColor, never executed: option->textColor = QColor(style()->styleHint(QStyle::SH_GroupBox_TextLabelColor, option, this)); | 0 | ||||||||||||||||||
121 | option, this)); never executed: option->textColor = QColor(style()->styleHint(QStyle::SH_GroupBox_TextLabelColor, option, this)); | 0 | ||||||||||||||||||
122 | - | |||||||||||||||||||
123 | if (!d->title.isEmpty())
| 0 | ||||||||||||||||||
124 | option->subControls |= QStyle::SC_GroupBoxLabel; never executed: option->subControls |= QStyle::SC_GroupBoxLabel; | 0 | ||||||||||||||||||
125 | } never executed: end of block | 0 | ||||||||||||||||||
126 | - | |||||||||||||||||||
127 | void QGroupBoxPrivate::click() | - | ||||||||||||||||||
128 | { | - | ||||||||||||||||||
129 | Q_Q(QGroupBox); | - | ||||||||||||||||||
130 | - | |||||||||||||||||||
131 | QPointer<QGroupBox> guard(q); | - | ||||||||||||||||||
132 | q->setChecked(!checked); | - | ||||||||||||||||||
133 | if (!guard)
| 0 | ||||||||||||||||||
134 | return; never executed: return; | 0 | ||||||||||||||||||
135 | emit q->clicked(checked); | - | ||||||||||||||||||
136 | } never executed: end of block | 0 | ||||||||||||||||||
137 | - | |||||||||||||||||||
138 | /*! | - | ||||||||||||||||||
139 | \class QGroupBox | - | ||||||||||||||||||
140 | \brief The QGroupBox widget provides a group box frame with a title. | - | ||||||||||||||||||
141 | - | |||||||||||||||||||
142 | \ingroup organizers | - | ||||||||||||||||||
143 | \ingroup geomanagement | - | ||||||||||||||||||
144 | \inmodule QtWidgets | - | ||||||||||||||||||
145 | - | |||||||||||||||||||
146 | A group box provides a frame, a title on top, a keyboard shortcut, and | - | ||||||||||||||||||
147 | displays various other widgets inside itself. The keyboard shortcut moves | - | ||||||||||||||||||
148 | keyboard focus to one of the group box's child widgets. | - | ||||||||||||||||||
149 | - | |||||||||||||||||||
150 | QGroupBox also lets you set the \l title (normally set in the | - | ||||||||||||||||||
151 | constructor) and the title's \l alignment. Group boxes can be | - | ||||||||||||||||||
152 | \l checkable. Child widgets in checkable group boxes are enabled or | - | ||||||||||||||||||
153 | disabled depending on whether or not the group box is \l checked. | - | ||||||||||||||||||
154 | - | |||||||||||||||||||
155 | You can minimize the space consumption of a group box by enabling | - | ||||||||||||||||||
156 | the \l flat property. In most \l{QStyle}{styles}, enabling this | - | ||||||||||||||||||
157 | property results in the removal of the left, right and bottom | - | ||||||||||||||||||
158 | edges of the frame. | - | ||||||||||||||||||
159 | - | |||||||||||||||||||
160 | QGroupBox doesn't automatically lay out the child widgets (which | - | ||||||||||||||||||
161 | are often \l{QCheckBox}es or \l{QRadioButton}s but can be any | - | ||||||||||||||||||
162 | widgets). The following example shows how we can set up a | - | ||||||||||||||||||
163 | QGroupBox with a layout: | - | ||||||||||||||||||
164 | - | |||||||||||||||||||
165 | \snippet widgets/groupbox/window.cpp 2 | - | ||||||||||||||||||
166 | - | |||||||||||||||||||
167 | \table 100% | - | ||||||||||||||||||
168 | \row \li \inlineimage windowsvista-groupbox.png Screenshot of a Windows Vista style group box | - | ||||||||||||||||||
169 | \li \inlineimage macintosh-groupbox.png Screenshot of a Macintosh style group box | - | ||||||||||||||||||
170 | \li \inlineimage fusion-groupbox.png Screenshot of a Fusion style group box | - | ||||||||||||||||||
171 | \row \li A \l{Windows Vista Style Widget Gallery}{Windows Vista style} group box. | - | ||||||||||||||||||
172 | \li A \l{Macintosh Style Widget Gallery}{Macintosh style} group box. | - | ||||||||||||||||||
173 | \li A \l{Fusion Style Widget Gallery}{Fusion style} group box. | - | ||||||||||||||||||
174 | \endtable | - | ||||||||||||||||||
175 | - | |||||||||||||||||||
176 | \sa QButtonGroup, {Group Box Example} | - | ||||||||||||||||||
177 | */ | - | ||||||||||||||||||
178 | - | |||||||||||||||||||
179 | - | |||||||||||||||||||
180 | - | |||||||||||||||||||
181 | /*! | - | ||||||||||||||||||
182 | Constructs a group box widget with the given \a parent but with no title. | - | ||||||||||||||||||
183 | */ | - | ||||||||||||||||||
184 | - | |||||||||||||||||||
185 | QGroupBox::QGroupBox(QWidget *parent) | - | ||||||||||||||||||
186 | : QWidget(*new QGroupBoxPrivate, parent, 0) | - | ||||||||||||||||||
187 | { | - | ||||||||||||||||||
188 | Q_D(QGroupBox); | - | ||||||||||||||||||
189 | d->init(); | - | ||||||||||||||||||
190 | } never executed: end of block | 0 | ||||||||||||||||||
191 | - | |||||||||||||||||||
192 | /*! | - | ||||||||||||||||||
193 | Constructs a group box with the given \a title and \a parent. | - | ||||||||||||||||||
194 | */ | - | ||||||||||||||||||
195 | - | |||||||||||||||||||
196 | QGroupBox::QGroupBox(const QString &title, QWidget *parent) | - | ||||||||||||||||||
197 | : QWidget(*new QGroupBoxPrivate, parent, 0) | - | ||||||||||||||||||
198 | { | - | ||||||||||||||||||
199 | Q_D(QGroupBox); | - | ||||||||||||||||||
200 | d->init(); | - | ||||||||||||||||||
201 | setTitle(title); | - | ||||||||||||||||||
202 | } never executed: end of block | 0 | ||||||||||||||||||
203 | - | |||||||||||||||||||
204 | - | |||||||||||||||||||
205 | /*! | - | ||||||||||||||||||
206 | Destroys the group box. | - | ||||||||||||||||||
207 | */ | - | ||||||||||||||||||
208 | QGroupBox::~QGroupBox() | - | ||||||||||||||||||
209 | { | - | ||||||||||||||||||
210 | } | - | ||||||||||||||||||
211 | - | |||||||||||||||||||
212 | void QGroupBoxPrivate::init() | - | ||||||||||||||||||
213 | { | - | ||||||||||||||||||
214 | Q_Q(QGroupBox); | - | ||||||||||||||||||
215 | align = Qt::AlignLeft; | - | ||||||||||||||||||
216 | #ifndef QT_NO_SHORTCUT | - | ||||||||||||||||||
217 | shortcutId = 0; | - | ||||||||||||||||||
218 | #endif | - | ||||||||||||||||||
219 | flat = false; | - | ||||||||||||||||||
220 | checkable = false; | - | ||||||||||||||||||
221 | checked = true; | - | ||||||||||||||||||
222 | hover = false; | - | ||||||||||||||||||
223 | overCheckBox = false; | - | ||||||||||||||||||
224 | pressedControl = QStyle::SC_None; | - | ||||||||||||||||||
225 | calculateFrame(); | - | ||||||||||||||||||
226 | q->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred, | - | ||||||||||||||||||
227 | QSizePolicy::GroupBox)); | - | ||||||||||||||||||
228 | } never executed: end of block | 0 | ||||||||||||||||||
229 | - | |||||||||||||||||||
230 | void QGroupBox::setTitle(const QString &title) | - | ||||||||||||||||||
231 | { | - | ||||||||||||||||||
232 | Q_D(QGroupBox); | - | ||||||||||||||||||
233 | if (d->title == title) // no change
| 0 | ||||||||||||||||||
234 | return; never executed: return; | 0 | ||||||||||||||||||
235 | d->title = title; | - | ||||||||||||||||||
236 | #ifndef QT_NO_SHORTCUT | - | ||||||||||||||||||
237 | releaseShortcut(d->shortcutId); | - | ||||||||||||||||||
238 | d->shortcutId = grabShortcut(QKeySequence::mnemonic(title)); | - | ||||||||||||||||||
239 | #endif | - | ||||||||||||||||||
240 | d->calculateFrame(); | - | ||||||||||||||||||
241 | - | |||||||||||||||||||
242 | update(); | - | ||||||||||||||||||
243 | updateGeometry(); | - | ||||||||||||||||||
244 | #ifndef QT_NO_ACCESSIBILITY | - | ||||||||||||||||||
245 | QAccessibleEvent event(this, QAccessible::NameChanged); | - | ||||||||||||||||||
246 | QAccessible::updateAccessibility(&event); | - | ||||||||||||||||||
247 | #endif | - | ||||||||||||||||||
248 | } never executed: end of block | 0 | ||||||||||||||||||
249 | - | |||||||||||||||||||
250 | /*! | - | ||||||||||||||||||
251 | \property QGroupBox::title | - | ||||||||||||||||||
252 | \brief the group box title text | - | ||||||||||||||||||
253 | - | |||||||||||||||||||
254 | The group box title text will have a keyboard shortcut if the title | - | ||||||||||||||||||
255 | contains an ampersand ('&') followed by a letter. | - | ||||||||||||||||||
256 | - | |||||||||||||||||||
257 | \snippet code/src_gui_widgets_qgroupbox.cpp 0 | - | ||||||||||||||||||
258 | - | |||||||||||||||||||
259 | In the example above, \uicontrol Alt+U moves the keyboard focus to the | - | ||||||||||||||||||
260 | group box. See the \l {QShortcut#mnemonic}{QShortcut} | - | ||||||||||||||||||
261 | documentation for details (to display an actual ampersand, use | - | ||||||||||||||||||
262 | '&&'). | - | ||||||||||||||||||
263 | - | |||||||||||||||||||
264 | There is no default title text. | - | ||||||||||||||||||
265 | - | |||||||||||||||||||
266 | \sa alignment | - | ||||||||||||||||||
267 | */ | - | ||||||||||||||||||
268 | - | |||||||||||||||||||
269 | QString QGroupBox::title() const | - | ||||||||||||||||||
270 | { | - | ||||||||||||||||||
271 | Q_D(const QGroupBox); | - | ||||||||||||||||||
272 | return d->title; never executed: return d->title; | 0 | ||||||||||||||||||
273 | } | - | ||||||||||||||||||
274 | - | |||||||||||||||||||
275 | /*! | - | ||||||||||||||||||
276 | \property QGroupBox::alignment | - | ||||||||||||||||||
277 | \brief the alignment of the group box title. | - | ||||||||||||||||||
278 | - | |||||||||||||||||||
279 | Most styles place the title at the top of the frame. The horizontal | - | ||||||||||||||||||
280 | alignment of the title can be specified using single values from | - | ||||||||||||||||||
281 | the following list: | - | ||||||||||||||||||
282 | - | |||||||||||||||||||
283 | \list | - | ||||||||||||||||||
284 | \li Qt::AlignLeft aligns the title text with the left-hand side of the group box. | - | ||||||||||||||||||
285 | \li Qt::AlignRight aligns the title text with the right-hand side of the group box. | - | ||||||||||||||||||
286 | \li Qt::AlignHCenter aligns the title text with the horizontal center of the group box. | - | ||||||||||||||||||
287 | \endlist | - | ||||||||||||||||||
288 | - | |||||||||||||||||||
289 | The default alignment is Qt::AlignLeft. | - | ||||||||||||||||||
290 | - | |||||||||||||||||||
291 | \sa Qt::Alignment | - | ||||||||||||||||||
292 | */ | - | ||||||||||||||||||
293 | Qt::Alignment QGroupBox::alignment() const | - | ||||||||||||||||||
294 | { | - | ||||||||||||||||||
295 | Q_D(const QGroupBox); | - | ||||||||||||||||||
296 | return QFlag(d->align); never executed: return QFlag(d->align); | 0 | ||||||||||||||||||
297 | } | - | ||||||||||||||||||
298 | - | |||||||||||||||||||
299 | void QGroupBox::setAlignment(int alignment) | - | ||||||||||||||||||
300 | { | - | ||||||||||||||||||
301 | Q_D(QGroupBox); | - | ||||||||||||||||||
302 | d->align = alignment; | - | ||||||||||||||||||
303 | updateGeometry(); | - | ||||||||||||||||||
304 | update(); | - | ||||||||||||||||||
305 | } never executed: end of block | 0 | ||||||||||||||||||
306 | - | |||||||||||||||||||
307 | /*! \reimp | - | ||||||||||||||||||
308 | */ | - | ||||||||||||||||||
309 | void QGroupBox::resizeEvent(QResizeEvent *e) | - | ||||||||||||||||||
310 | { | - | ||||||||||||||||||
311 | QWidget::resizeEvent(e); | - | ||||||||||||||||||
312 | } never executed: end of block | 0 | ||||||||||||||||||
313 | - | |||||||||||||||||||
314 | /*! \reimp | - | ||||||||||||||||||
315 | */ | - | ||||||||||||||||||
316 | - | |||||||||||||||||||
317 | void QGroupBox::paintEvent(QPaintEvent *) | - | ||||||||||||||||||
318 | { | - | ||||||||||||||||||
319 | QStylePainter paint(this); | - | ||||||||||||||||||
320 | QStyleOptionGroupBox option; | - | ||||||||||||||||||
321 | initStyleOption(&option); | - | ||||||||||||||||||
322 | paint.drawComplexControl(QStyle::CC_GroupBox, option); | - | ||||||||||||||||||
323 | } never executed: end of block | 0 | ||||||||||||||||||
324 | - | |||||||||||||||||||
325 | /*! \reimp */ | - | ||||||||||||||||||
326 | bool QGroupBox::event(QEvent *e) | - | ||||||||||||||||||
327 | { | - | ||||||||||||||||||
328 | Q_D(QGroupBox); | - | ||||||||||||||||||
329 | #ifndef QT_NO_SHORTCUT | - | ||||||||||||||||||
330 | if (e->type() == QEvent::Shortcut) {
| 0 | ||||||||||||||||||
331 | QShortcutEvent *se = static_cast<QShortcutEvent *>(e); | - | ||||||||||||||||||
332 | if (se->shortcutId() == d->shortcutId) {
| 0 | ||||||||||||||||||
333 | if (!isCheckable()) {
| 0 | ||||||||||||||||||
334 | d->_q_fixFocus(Qt::ShortcutFocusReason); | - | ||||||||||||||||||
335 | } else { never executed: end of block | 0 | ||||||||||||||||||
336 | d->click(); | - | ||||||||||||||||||
337 | setFocus(Qt::ShortcutFocusReason); | - | ||||||||||||||||||
338 | } never executed: end of block | 0 | ||||||||||||||||||
339 | return true; never executed: return true; | 0 | ||||||||||||||||||
340 | } | - | ||||||||||||||||||
341 | } never executed: end of block | 0 | ||||||||||||||||||
342 | #endif | - | ||||||||||||||||||
343 | QStyleOptionGroupBox box; | - | ||||||||||||||||||
344 | initStyleOption(&box); | - | ||||||||||||||||||
345 | switch (e->type()) { | - | ||||||||||||||||||
346 | case QEvent::HoverEnter: never executed: case QEvent::HoverEnter: | 0 | ||||||||||||||||||
347 | case QEvent::HoverMove: { never executed: case QEvent::HoverMove: | 0 | ||||||||||||||||||
348 | QStyle::SubControl control = style()->hitTestComplexControl(QStyle::CC_GroupBox, &box, | - | ||||||||||||||||||
349 | static_cast<QHoverEvent *>(e)->pos(), | - | ||||||||||||||||||
350 | this); | - | ||||||||||||||||||
351 | bool oldHover = d->hover; | - | ||||||||||||||||||
352 | d->hover = d->checkable && (control == QStyle::SC_GroupBoxLabel || control == QStyle::SC_GroupBoxCheckBox);
| 0 | ||||||||||||||||||
353 | if (oldHover != d->hover) {
| 0 | ||||||||||||||||||
354 | QRect rect = style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this) | - | ||||||||||||||||||
355 | | style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxLabel, this); | - | ||||||||||||||||||
356 | update(rect); | - | ||||||||||||||||||
357 | } never executed: end of block | 0 | ||||||||||||||||||
358 | return true; never executed: return true; | 0 | ||||||||||||||||||
359 | } | - | ||||||||||||||||||
360 | case QEvent::HoverLeave: never executed: case QEvent::HoverLeave: | 0 | ||||||||||||||||||
361 | d->hover = false; | - | ||||||||||||||||||
362 | if (d->checkable) {
| 0 | ||||||||||||||||||
363 | QRect rect = style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this) | - | ||||||||||||||||||
364 | | style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxLabel, this); | - | ||||||||||||||||||
365 | update(rect); | - | ||||||||||||||||||
366 | } never executed: end of block | 0 | ||||||||||||||||||
367 | return true; never executed: return true; | 0 | ||||||||||||||||||
368 | case QEvent::KeyPress: { never executed: case QEvent::KeyPress: | 0 | ||||||||||||||||||
369 | QKeyEvent *k = static_cast<QKeyEvent*>(e); | - | ||||||||||||||||||
370 | if (!k->isAutoRepeat() && (k->key() == Qt::Key_Select || k->key() == Qt::Key_Space)) {
| 0 | ||||||||||||||||||
371 | d->pressedControl = QStyle::SC_GroupBoxCheckBox; | - | ||||||||||||||||||
372 | update(style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this)); | - | ||||||||||||||||||
373 | return true; never executed: return true; | 0 | ||||||||||||||||||
374 | } | - | ||||||||||||||||||
375 | break; never executed: break; | 0 | ||||||||||||||||||
376 | } | - | ||||||||||||||||||
377 | case QEvent::KeyRelease: { never executed: case QEvent::KeyRelease: | 0 | ||||||||||||||||||
378 | QKeyEvent *k = static_cast<QKeyEvent*>(e); | - | ||||||||||||||||||
379 | if (!k->isAutoRepeat() && (k->key() == Qt::Key_Select || k->key() == Qt::Key_Space)) {
| 0 | ||||||||||||||||||
380 | bool toggle = (d->pressedControl == QStyle::SC_GroupBoxLabel
| 0 | ||||||||||||||||||
381 | || d->pressedControl == QStyle::SC_GroupBoxCheckBox);
| 0 | ||||||||||||||||||
382 | d->pressedControl = QStyle::SC_None; | - | ||||||||||||||||||
383 | if (toggle)
| 0 | ||||||||||||||||||
384 | d->click(); never executed: d->click(); | 0 | ||||||||||||||||||
385 | return true; never executed: return true; | 0 | ||||||||||||||||||
386 | } | - | ||||||||||||||||||
387 | break; never executed: break; | 0 | ||||||||||||||||||
388 | } | - | ||||||||||||||||||
389 | default: never executed: default: | 0 | ||||||||||||||||||
390 | break; never executed: break; | 0 | ||||||||||||||||||
391 | } | - | ||||||||||||||||||
392 | return QWidget::event(e); never executed: return QWidget::event(e); | 0 | ||||||||||||||||||
393 | } | - | ||||||||||||||||||
394 | - | |||||||||||||||||||
395 | /*!\reimp */ | - | ||||||||||||||||||
396 | void QGroupBox::childEvent(QChildEvent *c) | - | ||||||||||||||||||
397 | { | - | ||||||||||||||||||
398 | Q_D(QGroupBox); | - | ||||||||||||||||||
399 | if (c->type() != QEvent::ChildAdded || !c->child()->isWidgetType())
| 0 | ||||||||||||||||||
400 | return; never executed: return; | 0 | ||||||||||||||||||
401 | QWidget *w = (QWidget*)c->child(); | - | ||||||||||||||||||
402 | if (w->isWindow())
| 0 | ||||||||||||||||||
403 | return; never executed: return; | 0 | ||||||||||||||||||
404 | if (d->checkable) {
| 0 | ||||||||||||||||||
405 | if (d->checked) {
| 0 | ||||||||||||||||||
406 | if (!w->testAttribute(Qt::WA_ForceDisabled))
| 0 | ||||||||||||||||||
407 | w->setEnabled(true); never executed: w->setEnabled(true); | 0 | ||||||||||||||||||
408 | } else { never executed: end of block | 0 | ||||||||||||||||||
409 | if (w->isEnabled()) {
| 0 | ||||||||||||||||||
410 | w->setEnabled(false); | - | ||||||||||||||||||
411 | w->setAttribute(Qt::WA_ForceDisabled, false); | - | ||||||||||||||||||
412 | } never executed: end of block | 0 | ||||||||||||||||||
413 | } never executed: end of block | 0 | ||||||||||||||||||
414 | } | - | ||||||||||||||||||
415 | } never executed: end of block | 0 | ||||||||||||||||||
416 | - | |||||||||||||||||||
417 | - | |||||||||||||||||||
418 | /*! | - | ||||||||||||||||||
419 | \internal | - | ||||||||||||||||||
420 | - | |||||||||||||||||||
421 | This private slot finds a widget in this group box that can accept | - | ||||||||||||||||||
422 | focus, and gives the focus to that widget. | - | ||||||||||||||||||
423 | */ | - | ||||||||||||||||||
424 | - | |||||||||||||||||||
425 | void QGroupBoxPrivate::_q_fixFocus(Qt::FocusReason reason) | - | ||||||||||||||||||
426 | { | - | ||||||||||||||||||
427 | Q_Q(QGroupBox); | - | ||||||||||||||||||
428 | QWidget *fw = q->focusWidget(); | - | ||||||||||||||||||
429 | if (!fw || fw == q) {
| 0 | ||||||||||||||||||
430 | QWidget * best = 0; | - | ||||||||||||||||||
431 | QWidget * candidate = 0; | - | ||||||||||||||||||
432 | QWidget * w = q; | - | ||||||||||||||||||
433 | while ((w = w->nextInFocusChain()) != q) {
| 0 | ||||||||||||||||||
434 | if (q->isAncestorOf(w) && (w->focusPolicy() & Qt::TabFocus) == Qt::TabFocus && w->isVisibleTo(q)) {
| 0 | ||||||||||||||||||
435 | if (!best && qobject_cast<QRadioButton*>(w) && ((QRadioButton*)w)->isChecked())
| 0 | ||||||||||||||||||
436 | // we prefer a checked radio button or a widget that | - | ||||||||||||||||||
437 | // already has focus, if there is one | - | ||||||||||||||||||
438 | best = w; never executed: best = w; | 0 | ||||||||||||||||||
439 | else | - | ||||||||||||||||||
440 | if (!candidate)
| 0 | ||||||||||||||||||
441 | // but we'll accept anything that takes focus | - | ||||||||||||||||||
442 | candidate = w; never executed: candidate = w; | 0 | ||||||||||||||||||
443 | } never executed: end of block | 0 | ||||||||||||||||||
444 | } never executed: end of block | 0 | ||||||||||||||||||
445 | if (best)
| 0 | ||||||||||||||||||
446 | fw = best; never executed: fw = best; | 0 | ||||||||||||||||||
447 | else if (candidate)
| 0 | ||||||||||||||||||
448 | fw = candidate; never executed: fw = candidate; | 0 | ||||||||||||||||||
449 | } never executed: end of block | 0 | ||||||||||||||||||
450 | if (fw)
| 0 | ||||||||||||||||||
451 | fw->setFocus(reason); never executed: fw->setFocus(reason); | 0 | ||||||||||||||||||
452 | } never executed: end of block | 0 | ||||||||||||||||||
453 | - | |||||||||||||||||||
454 | /* | - | ||||||||||||||||||
455 | Sets the right frame rect depending on the title. | - | ||||||||||||||||||
456 | */ | - | ||||||||||||||||||
457 | void QGroupBoxPrivate::calculateFrame() | - | ||||||||||||||||||
458 | { | - | ||||||||||||||||||
459 | Q_Q(QGroupBox); | - | ||||||||||||||||||
460 | QStyleOptionGroupBox box; | - | ||||||||||||||||||
461 | q->initStyleOption(&box); | - | ||||||||||||||||||
462 | QRect contentsRect = q->style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxContents, q); | - | ||||||||||||||||||
463 | q->setContentsMargins(contentsRect.left() - box.rect.left(), contentsRect.top() - box.rect.top(), | - | ||||||||||||||||||
464 | box.rect.right() - contentsRect.right(), box.rect.bottom() - contentsRect.bottom()); | - | ||||||||||||||||||
465 | setLayoutItemMargins(QStyle::SE_GroupBoxLayoutItem, &box); | - | ||||||||||||||||||
466 | } never executed: end of block | 0 | ||||||||||||||||||
467 | - | |||||||||||||||||||
468 | /*! \reimp | - | ||||||||||||||||||
469 | */ | - | ||||||||||||||||||
470 | void QGroupBox::focusInEvent(QFocusEvent *fe) | - | ||||||||||||||||||
471 | { // note no call to super | - | ||||||||||||||||||
472 | Q_D(QGroupBox); | - | ||||||||||||||||||
473 | if (focusPolicy() == Qt::NoFocus) {
| 0 | ||||||||||||||||||
474 | d->_q_fixFocus(fe->reason()); | - | ||||||||||||||||||
475 | } else { never executed: end of block | 0 | ||||||||||||||||||
476 | QWidget::focusInEvent(fe); | - | ||||||||||||||||||
477 | } never executed: end of block | 0 | ||||||||||||||||||
478 | } | - | ||||||||||||||||||
479 | - | |||||||||||||||||||
480 | - | |||||||||||||||||||
481 | /*! | - | ||||||||||||||||||
482 | \reimp | - | ||||||||||||||||||
483 | */ | - | ||||||||||||||||||
484 | QSize QGroupBox::minimumSizeHint() const | - | ||||||||||||||||||
485 | { | - | ||||||||||||||||||
486 | Q_D(const QGroupBox); | - | ||||||||||||||||||
487 | QStyleOptionGroupBox option; | - | ||||||||||||||||||
488 | initStyleOption(&option); | - | ||||||||||||||||||
489 | - | |||||||||||||||||||
490 | QFontMetrics metrics(fontMetrics()); | - | ||||||||||||||||||
491 | - | |||||||||||||||||||
492 | int baseWidth = metrics.width(d->title) + metrics.width(QLatin1Char(' ')); | - | ||||||||||||||||||
493 | int baseHeight = metrics.height(); | - | ||||||||||||||||||
494 | if (d->checkable) {
| 0 | ||||||||||||||||||
495 | baseWidth += style()->pixelMetric(QStyle::PM_IndicatorWidth); | - | ||||||||||||||||||
496 | baseWidth += style()->pixelMetric(QStyle::PM_CheckBoxLabelSpacing); | - | ||||||||||||||||||
497 | baseHeight = qMax(baseHeight, style()->pixelMetric(QStyle::PM_IndicatorHeight)); | - | ||||||||||||||||||
498 | } never executed: end of block | 0 | ||||||||||||||||||
499 | - | |||||||||||||||||||
500 | QSize size = style()->sizeFromContents(QStyle::CT_GroupBox, &option, QSize(baseWidth, baseHeight), this); | - | ||||||||||||||||||
501 | return size.expandedTo(QWidget::minimumSizeHint()); never executed: return size.expandedTo(QWidget::minimumSizeHint()); | 0 | ||||||||||||||||||
502 | } | - | ||||||||||||||||||
503 | - | |||||||||||||||||||
504 | /*! | - | ||||||||||||||||||
505 | \property QGroupBox::flat | - | ||||||||||||||||||
506 | \brief whether the group box is painted flat or has a frame | - | ||||||||||||||||||
507 | - | |||||||||||||||||||
508 | A group box usually consists of a surrounding frame with a title | - | ||||||||||||||||||
509 | at the top. If this property is enabled, only the top part of the frame is | - | ||||||||||||||||||
510 | drawn in most styles; otherwise, the whole frame is drawn. | - | ||||||||||||||||||
511 | - | |||||||||||||||||||
512 | By default, this property is disabled, i.e., group boxes are not flat unless | - | ||||||||||||||||||
513 | explicitly specified. | - | ||||||||||||||||||
514 | - | |||||||||||||||||||
515 | \b{Note:} In some styles, flat and non-flat group boxes have similar | - | ||||||||||||||||||
516 | representations and may not be as distinguishable as they are in other | - | ||||||||||||||||||
517 | styles. | - | ||||||||||||||||||
518 | - | |||||||||||||||||||
519 | \sa title | - | ||||||||||||||||||
520 | */ | - | ||||||||||||||||||
521 | bool QGroupBox::isFlat() const | - | ||||||||||||||||||
522 | { | - | ||||||||||||||||||
523 | Q_D(const QGroupBox); | - | ||||||||||||||||||
524 | return d->flat; never executed: return d->flat; | 0 | ||||||||||||||||||
525 | } | - | ||||||||||||||||||
526 | - | |||||||||||||||||||
527 | void QGroupBox::setFlat(bool b) | - | ||||||||||||||||||
528 | { | - | ||||||||||||||||||
529 | Q_D(QGroupBox); | - | ||||||||||||||||||
530 | if (d->flat == b)
| 0 | ||||||||||||||||||
531 | return; never executed: return; | 0 | ||||||||||||||||||
532 | d->flat = b; | - | ||||||||||||||||||
533 | updateGeometry(); | - | ||||||||||||||||||
534 | update(); | - | ||||||||||||||||||
535 | } never executed: end of block | 0 | ||||||||||||||||||
536 | - | |||||||||||||||||||
537 | - | |||||||||||||||||||
538 | /*! | - | ||||||||||||||||||
539 | \property QGroupBox::checkable | - | ||||||||||||||||||
540 | \brief whether the group box has a checkbox in its title | - | ||||||||||||||||||
541 | - | |||||||||||||||||||
542 | If this property is \c true, the group box displays its title using | - | ||||||||||||||||||
543 | a checkbox in place of an ordinary label. If the checkbox is checked, | - | ||||||||||||||||||
544 | the group box's children are enabled; otherwise, they are disabled and | - | ||||||||||||||||||
545 | inaccessible. | - | ||||||||||||||||||
546 | - | |||||||||||||||||||
547 | By default, group boxes are not checkable. | - | ||||||||||||||||||
548 | - | |||||||||||||||||||
549 | If this property is enabled for a group box, it will also be initially | - | ||||||||||||||||||
550 | checked to ensure that its contents are enabled. | - | ||||||||||||||||||
551 | - | |||||||||||||||||||
552 | \sa checked | - | ||||||||||||||||||
553 | */ | - | ||||||||||||||||||
554 | void QGroupBox::setCheckable(bool checkable) | - | ||||||||||||||||||
555 | { | - | ||||||||||||||||||
556 | Q_D(QGroupBox); | - | ||||||||||||||||||
557 | - | |||||||||||||||||||
558 | bool wasCheckable = d->checkable; | - | ||||||||||||||||||
559 | d->checkable = checkable; | - | ||||||||||||||||||
560 | - | |||||||||||||||||||
561 | if (checkable) {
| 0 | ||||||||||||||||||
562 | setChecked(true); | - | ||||||||||||||||||
563 | if (!wasCheckable) {
| 0 | ||||||||||||||||||
564 | setFocusPolicy(Qt::StrongFocus); | - | ||||||||||||||||||
565 | d->_q_setChildrenEnabled(true); | - | ||||||||||||||||||
566 | updateGeometry(); | - | ||||||||||||||||||
567 | } never executed: end of block | 0 | ||||||||||||||||||
568 | } else { never executed: end of block | 0 | ||||||||||||||||||
569 | if (wasCheckable) {
| 0 | ||||||||||||||||||
570 | setFocusPolicy(Qt::NoFocus); | - | ||||||||||||||||||
571 | d->_q_setChildrenEnabled(true); | - | ||||||||||||||||||
572 | updateGeometry(); | - | ||||||||||||||||||
573 | } never executed: end of block | 0 | ||||||||||||||||||
574 | d->_q_setChildrenEnabled(true); | - | ||||||||||||||||||
575 | } never executed: end of block | 0 | ||||||||||||||||||
576 | - | |||||||||||||||||||
577 | if (wasCheckable != checkable) {
| 0 | ||||||||||||||||||
578 | d->calculateFrame(); | - | ||||||||||||||||||
579 | update(); | - | ||||||||||||||||||
580 | } never executed: end of block | 0 | ||||||||||||||||||
581 | } never executed: end of block | 0 | ||||||||||||||||||
582 | - | |||||||||||||||||||
583 | bool QGroupBox::isCheckable() const | - | ||||||||||||||||||
584 | { | - | ||||||||||||||||||
585 | Q_D(const QGroupBox); | - | ||||||||||||||||||
586 | return d->checkable; never executed: return d->checkable; | 0 | ||||||||||||||||||
587 | } | - | ||||||||||||||||||
588 | - | |||||||||||||||||||
589 | - | |||||||||||||||||||
590 | bool QGroupBox::isChecked() const | - | ||||||||||||||||||
591 | { | - | ||||||||||||||||||
592 | Q_D(const QGroupBox); | - | ||||||||||||||||||
593 | return d->checkable && d->checked; never executed: return d->checkable && d->checked; | 0 | ||||||||||||||||||
594 | } | - | ||||||||||||||||||
595 | - | |||||||||||||||||||
596 | - | |||||||||||||||||||
597 | /*! | - | ||||||||||||||||||
598 | \fn void QGroupBox::toggled(bool on) | - | ||||||||||||||||||
599 | - | |||||||||||||||||||
600 | If the group box is checkable, this signal is emitted when the check box | - | ||||||||||||||||||
601 | is toggled. \a on is true if the check box is checked; otherwise, it is false. | - | ||||||||||||||||||
602 | - | |||||||||||||||||||
603 | \sa checkable | - | ||||||||||||||||||
604 | */ | - | ||||||||||||||||||
605 | - | |||||||||||||||||||
606 | - | |||||||||||||||||||
607 | /*! | - | ||||||||||||||||||
608 | \fn void QGroupBox::clicked(bool checked) | - | ||||||||||||||||||
609 | \since 4.2 | - | ||||||||||||||||||
610 | - | |||||||||||||||||||
611 | This signal is emitted when the check box is activated (i.e., pressed down | - | ||||||||||||||||||
612 | then released while the mouse cursor is inside the button), or when the | - | ||||||||||||||||||
613 | shortcut key is typed. Notably, this signal is \e not emitted if you call | - | ||||||||||||||||||
614 | setChecked(). | - | ||||||||||||||||||
615 | - | |||||||||||||||||||
616 | If the check box is checked, \a checked is true; it is false if the check | - | ||||||||||||||||||
617 | box is unchecked. | - | ||||||||||||||||||
618 | - | |||||||||||||||||||
619 | \sa checkable, toggled(), checked | - | ||||||||||||||||||
620 | */ | - | ||||||||||||||||||
621 | - | |||||||||||||||||||
622 | /*! | - | ||||||||||||||||||
623 | \property QGroupBox::checked | - | ||||||||||||||||||
624 | \brief whether the group box is checked | - | ||||||||||||||||||
625 | - | |||||||||||||||||||
626 | If the group box is checkable, it is displayed with a check box. | - | ||||||||||||||||||
627 | If the check box is checked, the group box's children are enabled; | - | ||||||||||||||||||
628 | otherwise, the children are disabled and are inaccessible to the user. | - | ||||||||||||||||||
629 | - | |||||||||||||||||||
630 | By default, checkable group boxes are also checked. | - | ||||||||||||||||||
631 | - | |||||||||||||||||||
632 | \sa checkable | - | ||||||||||||||||||
633 | */ | - | ||||||||||||||||||
634 | void QGroupBox::setChecked(bool b) | - | ||||||||||||||||||
635 | { | - | ||||||||||||||||||
636 | Q_D(QGroupBox); | - | ||||||||||||||||||
637 | if (d->checkable && b != d->checked) {
| 0 | ||||||||||||||||||
638 | update(); | - | ||||||||||||||||||
639 | d->checked = b; | - | ||||||||||||||||||
640 | d->_q_setChildrenEnabled(b); | - | ||||||||||||||||||
641 | #ifndef QT_NO_ACCESSIBILITY | - | ||||||||||||||||||
642 | QAccessible::State st; | - | ||||||||||||||||||
643 | st.checked = true; | - | ||||||||||||||||||
644 | QAccessibleStateChangeEvent e(this, st); | - | ||||||||||||||||||
645 | QAccessible::updateAccessibility(&e); | - | ||||||||||||||||||
646 | #endif | - | ||||||||||||||||||
647 | emit toggled(b); | - | ||||||||||||||||||
648 | } never executed: end of block | 0 | ||||||||||||||||||
649 | } never executed: end of block | 0 | ||||||||||||||||||
650 | - | |||||||||||||||||||
651 | /* | - | ||||||||||||||||||
652 | sets all children of the group box except the qt_groupbox_checkbox | - | ||||||||||||||||||
653 | to either disabled/enabled | - | ||||||||||||||||||
654 | */ | - | ||||||||||||||||||
655 | void QGroupBoxPrivate::_q_setChildrenEnabled(bool b) | - | ||||||||||||||||||
656 | { | - | ||||||||||||||||||
657 | Q_Q(QGroupBox); | - | ||||||||||||||||||
658 | for (QObject *o : q->children()) { | - | ||||||||||||||||||
659 | if (o->isWidgetType()) {
| 0 | ||||||||||||||||||
660 | QWidget *w = static_cast<QWidget *>(o); | - | ||||||||||||||||||
661 | if (b) {
| 0 | ||||||||||||||||||
662 | if (!w->testAttribute(Qt::WA_ForceDisabled))
| 0 | ||||||||||||||||||
663 | w->setEnabled(true); never executed: w->setEnabled(true); | 0 | ||||||||||||||||||
664 | } else { never executed: end of block | 0 | ||||||||||||||||||
665 | if (w->isEnabled()) {
| 0 | ||||||||||||||||||
666 | w->setEnabled(false); | - | ||||||||||||||||||
667 | w->setAttribute(Qt::WA_ForceDisabled, false); | - | ||||||||||||||||||
668 | } never executed: end of block | 0 | ||||||||||||||||||
669 | } never executed: end of block | 0 | ||||||||||||||||||
670 | } | - | ||||||||||||||||||
671 | } never executed: end of block | 0 | ||||||||||||||||||
672 | } never executed: end of block | 0 | ||||||||||||||||||
673 | - | |||||||||||||||||||
674 | /*! \reimp */ | - | ||||||||||||||||||
675 | void QGroupBox::changeEvent(QEvent *ev) | - | ||||||||||||||||||
676 | { | - | ||||||||||||||||||
677 | Q_D(QGroupBox); | - | ||||||||||||||||||
678 | if (ev->type() == QEvent::EnabledChange) {
| 0 | ||||||||||||||||||
679 | if (d->checkable && isEnabled()) {
| 0 | ||||||||||||||||||
680 | // we are being enabled - disable children | - | ||||||||||||||||||
681 | if (!d->checked)
| 0 | ||||||||||||||||||
682 | d->_q_setChildrenEnabled(false); never executed: d->_q_setChildrenEnabled(false); | 0 | ||||||||||||||||||
683 | } never executed: end of block | 0 | ||||||||||||||||||
684 | } else if (ev->type() == QEvent::FontChange never executed: end of block
| 0 | ||||||||||||||||||
685 | #ifdef Q_OS_MAC | - | ||||||||||||||||||
686 | || ev->type() == QEvent::MacSizeChange | - | ||||||||||||||||||
687 | #endif | - | ||||||||||||||||||
688 | || ev->type() == QEvent::StyleChange) {
| 0 | ||||||||||||||||||
689 | d->calculateFrame(); | - | ||||||||||||||||||
690 | } never executed: end of block | 0 | ||||||||||||||||||
691 | QWidget::changeEvent(ev); | - | ||||||||||||||||||
692 | } never executed: end of block | 0 | ||||||||||||||||||
693 | - | |||||||||||||||||||
694 | /*! \reimp */ | - | ||||||||||||||||||
695 | void QGroupBox::mousePressEvent(QMouseEvent *event) | - | ||||||||||||||||||
696 | { | - | ||||||||||||||||||
697 | if (event->button() != Qt::LeftButton) {
| 0 | ||||||||||||||||||
698 | event->ignore(); | - | ||||||||||||||||||
699 | return; never executed: return; | 0 | ||||||||||||||||||
700 | } | - | ||||||||||||||||||
701 | - | |||||||||||||||||||
702 | Q_D(QGroupBox); | - | ||||||||||||||||||
703 | QStyleOptionGroupBox box; | - | ||||||||||||||||||
704 | initStyleOption(&box); | - | ||||||||||||||||||
705 | d->pressedControl = style()->hitTestComplexControl(QStyle::CC_GroupBox, &box, | - | ||||||||||||||||||
706 | event->pos(), this); | - | ||||||||||||||||||
707 | if (d->checkable && (d->pressedControl & (QStyle::SC_GroupBoxCheckBox | QStyle::SC_GroupBoxLabel))) {
| 0 | ||||||||||||||||||
708 | d->overCheckBox = true; | - | ||||||||||||||||||
709 | update(style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this)); | - | ||||||||||||||||||
710 | } else { never executed: end of block | 0 | ||||||||||||||||||
711 | event->ignore(); | - | ||||||||||||||||||
712 | } never executed: end of block | 0 | ||||||||||||||||||
713 | } | - | ||||||||||||||||||
714 | - | |||||||||||||||||||
715 | /*! \reimp */ | - | ||||||||||||||||||
716 | void QGroupBox::mouseMoveEvent(QMouseEvent *event) | - | ||||||||||||||||||
717 | { | - | ||||||||||||||||||
718 | Q_D(QGroupBox); | - | ||||||||||||||||||
719 | QStyleOptionGroupBox box; | - | ||||||||||||||||||
720 | initStyleOption(&box); | - | ||||||||||||||||||
721 | QStyle::SubControl pressed = style()->hitTestComplexControl(QStyle::CC_GroupBox, &box, | - | ||||||||||||||||||
722 | event->pos(), this); | - | ||||||||||||||||||
723 | bool oldOverCheckBox = d->overCheckBox; | - | ||||||||||||||||||
724 | d->overCheckBox = (pressed == QStyle::SC_GroupBoxCheckBox || pressed == QStyle::SC_GroupBoxLabel);
| 0 | ||||||||||||||||||
725 | if (d->checkable && (d->pressedControl == QStyle::SC_GroupBoxCheckBox || d->pressedControl == QStyle::SC_GroupBoxLabel)
| 0 | ||||||||||||||||||
726 | && (d->overCheckBox != oldOverCheckBox))
| 0 | ||||||||||||||||||
727 | update(style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this)); never executed: update(style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this)); | 0 | ||||||||||||||||||
728 | - | |||||||||||||||||||
729 | event->ignore(); | - | ||||||||||||||||||
730 | } never executed: end of block | 0 | ||||||||||||||||||
731 | - | |||||||||||||||||||
732 | /*! \reimp */ | - | ||||||||||||||||||
733 | void QGroupBox::mouseReleaseEvent(QMouseEvent *event) | - | ||||||||||||||||||
734 | { | - | ||||||||||||||||||
735 | if (event->button() != Qt::LeftButton) {
| 0 | ||||||||||||||||||
736 | event->ignore(); | - | ||||||||||||||||||
737 | return; never executed: return; | 0 | ||||||||||||||||||
738 | } | - | ||||||||||||||||||
739 | - | |||||||||||||||||||
740 | Q_D(QGroupBox); | - | ||||||||||||||||||
741 | if (!d->overCheckBox) {
| 0 | ||||||||||||||||||
742 | event->ignore(); | - | ||||||||||||||||||
743 | return; never executed: return; | 0 | ||||||||||||||||||
744 | } | - | ||||||||||||||||||
745 | QStyleOptionGroupBox box; | - | ||||||||||||||||||
746 | initStyleOption(&box); | - | ||||||||||||||||||
747 | QStyle::SubControl released = style()->hitTestComplexControl(QStyle::CC_GroupBox, &box, | - | ||||||||||||||||||
748 | event->pos(), this); | - | ||||||||||||||||||
749 | bool toggle = d->checkable && (released == QStyle::SC_GroupBoxLabel
| 0 | ||||||||||||||||||
750 | || released == QStyle::SC_GroupBoxCheckBox);
| 0 | ||||||||||||||||||
751 | d->pressedControl = QStyle::SC_None; | - | ||||||||||||||||||
752 | d->overCheckBox = false; | - | ||||||||||||||||||
753 | if (toggle)
| 0 | ||||||||||||||||||
754 | d->click(); never executed: d->click(); | 0 | ||||||||||||||||||
755 | else if (d->checkable)
| 0 | ||||||||||||||||||
756 | update(style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this)); never executed: update(style()->subControlRect(QStyle::CC_GroupBox, &box, QStyle::SC_GroupBoxCheckBox, this)); | 0 | ||||||||||||||||||
757 | } never executed: end of block | 0 | ||||||||||||||||||
758 | - | |||||||||||||||||||
759 | - | |||||||||||||||||||
760 | QT_END_NAMESPACE | - | ||||||||||||||||||
761 | - | |||||||||||||||||||
762 | #include "moc_qgroupbox.cpp" | - | ||||||||||||||||||
763 | - | |||||||||||||||||||
764 | #endif //QT_NO_GROUPBOX | - | ||||||||||||||||||
Source code | Switch to Preprocessed file |