Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/widgets/widgets/qspinbox.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 <private/qabstractspinbox_p.h> | - | ||||||||||||||||||||||||
41 | #include <qspinbox.h> | - | ||||||||||||||||||||||||
42 | - | |||||||||||||||||||||||||
43 | #ifndef QT_NO_SPINBOX | - | ||||||||||||||||||||||||
44 | - | |||||||||||||||||||||||||
45 | #include <qlineedit.h> | - | ||||||||||||||||||||||||
46 | #include <qlocale.h> | - | ||||||||||||||||||||||||
47 | #include <qvalidator.h> | - | ||||||||||||||||||||||||
48 | #include <qdebug.h> | - | ||||||||||||||||||||||||
49 | - | |||||||||||||||||||||||||
50 | #include <float.h> | - | ||||||||||||||||||||||||
51 | - | |||||||||||||||||||||||||
52 | QT_BEGIN_NAMESPACE | - | ||||||||||||||||||||||||
53 | - | |||||||||||||||||||||||||
54 | //#define QSPINBOX_QSBDEBUG | - | ||||||||||||||||||||||||
55 | #ifdef QSPINBOX_QSBDEBUG | - | ||||||||||||||||||||||||
56 | # define QSBDEBUG qDebug | - | ||||||||||||||||||||||||
57 | #else | - | ||||||||||||||||||||||||
58 | # define QSBDEBUG if (false) qDebug | - | ||||||||||||||||||||||||
59 | #endif | - | ||||||||||||||||||||||||
60 | - | |||||||||||||||||||||||||
61 | class QSpinBoxPrivate : public QAbstractSpinBoxPrivate | - | ||||||||||||||||||||||||
62 | { | - | ||||||||||||||||||||||||
63 | Q_DECLARE_PUBLIC(QSpinBox) | - | ||||||||||||||||||||||||
64 | public: | - | ||||||||||||||||||||||||
65 | QSpinBoxPrivate(); | - | ||||||||||||||||||||||||
66 | void emitSignals(EmitPolicy ep, const QVariant &) Q_DECL_OVERRIDE; | - | ||||||||||||||||||||||||
67 | - | |||||||||||||||||||||||||
68 | virtual QVariant valueFromText(const QString &n) const Q_DECL_OVERRIDE; | - | ||||||||||||||||||||||||
69 | virtual QString textFromValue(const QVariant &n) const Q_DECL_OVERRIDE; | - | ||||||||||||||||||||||||
70 | QVariant validateAndInterpret(QString &input, int &pos, | - | ||||||||||||||||||||||||
71 | QValidator::State &state) const; | - | ||||||||||||||||||||||||
72 | - | |||||||||||||||||||||||||
73 | inline void init() { | - | ||||||||||||||||||||||||
74 | Q_Q(QSpinBox); | - | ||||||||||||||||||||||||
75 | q->setInputMethodHints(Qt::ImhDigitsOnly); | - | ||||||||||||||||||||||||
76 | setLayoutItemMargins(QStyle::SE_SpinBoxLayoutItem); | - | ||||||||||||||||||||||||
77 | } never executed: end of block | 0 | ||||||||||||||||||||||||
78 | - | |||||||||||||||||||||||||
79 | int displayIntegerBase; | - | ||||||||||||||||||||||||
80 | }; | - | ||||||||||||||||||||||||
81 | - | |||||||||||||||||||||||||
82 | class QDoubleSpinBoxPrivate : public QAbstractSpinBoxPrivate | - | ||||||||||||||||||||||||
83 | { | - | ||||||||||||||||||||||||
84 | Q_DECLARE_PUBLIC(QDoubleSpinBox) | - | ||||||||||||||||||||||||
85 | public: | - | ||||||||||||||||||||||||
86 | QDoubleSpinBoxPrivate(); | - | ||||||||||||||||||||||||
87 | void emitSignals(EmitPolicy ep, const QVariant &) Q_DECL_OVERRIDE; | - | ||||||||||||||||||||||||
88 | - | |||||||||||||||||||||||||
89 | virtual QVariant valueFromText(const QString &n) const Q_DECL_OVERRIDE; | - | ||||||||||||||||||||||||
90 | virtual QString textFromValue(const QVariant &n) const Q_DECL_OVERRIDE; | - | ||||||||||||||||||||||||
91 | QVariant validateAndInterpret(QString &input, int &pos, | - | ||||||||||||||||||||||||
92 | QValidator::State &state) const; | - | ||||||||||||||||||||||||
93 | double round(double input) const; | - | ||||||||||||||||||||||||
94 | // variables | - | ||||||||||||||||||||||||
95 | int decimals; | - | ||||||||||||||||||||||||
96 | - | |||||||||||||||||||||||||
97 | inline void init() { | - | ||||||||||||||||||||||||
98 | Q_Q(QDoubleSpinBox); | - | ||||||||||||||||||||||||
99 | q->setInputMethodHints(Qt::ImhFormattedNumbersOnly); | - | ||||||||||||||||||||||||
100 | } never executed: end of block | 0 | ||||||||||||||||||||||||
101 | - | |||||||||||||||||||||||||
102 | // When fiddling with the decimals property, we may lose precision in these properties. | - | ||||||||||||||||||||||||
103 | double actualMin; | - | ||||||||||||||||||||||||
104 | double actualMax; | - | ||||||||||||||||||||||||
105 | }; | - | ||||||||||||||||||||||||
106 | - | |||||||||||||||||||||||||
107 | - | |||||||||||||||||||||||||
108 | /*! | - | ||||||||||||||||||||||||
109 | \class QSpinBox | - | ||||||||||||||||||||||||
110 | \brief The QSpinBox class provides a spin box widget. | - | ||||||||||||||||||||||||
111 | - | |||||||||||||||||||||||||
112 | \ingroup basicwidgets | - | ||||||||||||||||||||||||
113 | \inmodule QtWidgets | - | ||||||||||||||||||||||||
114 | - | |||||||||||||||||||||||||
115 | QSpinBox is designed to handle integers and discrete sets of | - | ||||||||||||||||||||||||
116 | values (e.g., month names); use QDoubleSpinBox for floating point | - | ||||||||||||||||||||||||
117 | values. | - | ||||||||||||||||||||||||
118 | - | |||||||||||||||||||||||||
119 | QSpinBox allows the user to choose a value by clicking the up/down | - | ||||||||||||||||||||||||
120 | buttons or pressing up/down on the keyboard to increase/decrease | - | ||||||||||||||||||||||||
121 | the value currently displayed. The user can also type the value in | - | ||||||||||||||||||||||||
122 | manually. The spin box supports integer values but can be extended to | - | ||||||||||||||||||||||||
123 | use different strings with validate(), textFromValue() and valueFromText(). | - | ||||||||||||||||||||||||
124 | - | |||||||||||||||||||||||||
125 | Every time the value changes QSpinBox emits two valueChanged() signals, | - | ||||||||||||||||||||||||
126 | one providing an int and the other a QString. The QString overload | - | ||||||||||||||||||||||||
127 | provides the value with both prefix() and suffix(). | - | ||||||||||||||||||||||||
128 | The current value can be fetched with value() and set with setValue(). | - | ||||||||||||||||||||||||
129 | - | |||||||||||||||||||||||||
130 | Clicking the up/down buttons or using the keyboard accelerator's | - | ||||||||||||||||||||||||
131 | up and down arrows will increase or decrease the current value in | - | ||||||||||||||||||||||||
132 | steps of size singleStep(). If you want to change this behaviour you | - | ||||||||||||||||||||||||
133 | can reimplement the virtual function stepBy(). The minimum and | - | ||||||||||||||||||||||||
134 | maximum value and the step size can be set using one of the | - | ||||||||||||||||||||||||
135 | constructors, and can be changed later with setMinimum(), | - | ||||||||||||||||||||||||
136 | setMaximum() and setSingleStep(). | - | ||||||||||||||||||||||||
137 | - | |||||||||||||||||||||||||
138 | Most spin boxes are directional, but QSpinBox can also operate as | - | ||||||||||||||||||||||||
139 | a circular spin box, i.e. if the range is 0-99 and the current | - | ||||||||||||||||||||||||
140 | value is 99, clicking "up" will give 0 if wrapping() is set to | - | ||||||||||||||||||||||||
141 | true. Use setWrapping() if you want circular behavior. | - | ||||||||||||||||||||||||
142 | - | |||||||||||||||||||||||||
143 | The displayed value can be prepended and appended with arbitrary | - | ||||||||||||||||||||||||
144 | strings indicating, for example, currency or the unit of | - | ||||||||||||||||||||||||
145 | measurement. See setPrefix() and setSuffix(). The text in the spin | - | ||||||||||||||||||||||||
146 | box is retrieved with text() (which includes any prefix() and | - | ||||||||||||||||||||||||
147 | suffix()), or with cleanText() (which has no prefix(), no suffix() | - | ||||||||||||||||||||||||
148 | and no leading or trailing whitespace). | - | ||||||||||||||||||||||||
149 | - | |||||||||||||||||||||||||
150 | It is often desirable to give the user a special (often default) | - | ||||||||||||||||||||||||
151 | choice in addition to the range of numeric values. See | - | ||||||||||||||||||||||||
152 | setSpecialValueText() for how to do this with QSpinBox. | - | ||||||||||||||||||||||||
153 | - | |||||||||||||||||||||||||
154 | \table 100% | - | ||||||||||||||||||||||||
155 | \row \li \inlineimage windowsvista-spinbox.png Screenshot of a Windows Vista spin box | - | ||||||||||||||||||||||||
156 | \li A spin box shown in the \l{Windows Vista Style Widget Gallery}{Windows Vista widget style}. | - | ||||||||||||||||||||||||
157 | \row \li \inlineimage fusion-spinbox.png Screenshot of a Fusion spin box | - | ||||||||||||||||||||||||
158 | \li A spin box shown in the \l{Fusion Style Widget Gallery}{Fusion widget style}. | - | ||||||||||||||||||||||||
159 | \row \li \inlineimage macintosh-spinbox.png Screenshot of a Macintosh spin box | - | ||||||||||||||||||||||||
160 | \li A spin box shown in the \l{Macintosh Style Widget Gallery}{Macintosh widget style}. | - | ||||||||||||||||||||||||
161 | \endtable | - | ||||||||||||||||||||||||
162 | - | |||||||||||||||||||||||||
163 | \section1 Subclassing QSpinBox | - | ||||||||||||||||||||||||
164 | - | |||||||||||||||||||||||||
165 | If using prefix(), suffix(), and specialValueText() don't provide | - | ||||||||||||||||||||||||
166 | enough control, you subclass QSpinBox and reimplement | - | ||||||||||||||||||||||||
167 | valueFromText() and textFromValue(). For example, here's the code | - | ||||||||||||||||||||||||
168 | for a custom spin box that allows the user to enter icon sizes | - | ||||||||||||||||||||||||
169 | (e.g., "32 x 32"): | - | ||||||||||||||||||||||||
170 | - | |||||||||||||||||||||||||
171 | \snippet widgets/icons/iconsizespinbox.cpp 1 | - | ||||||||||||||||||||||||
172 | \codeline | - | ||||||||||||||||||||||||
173 | \snippet widgets/icons/iconsizespinbox.cpp 2 | - | ||||||||||||||||||||||||
174 | - | |||||||||||||||||||||||||
175 | See the \l{widgets/icons}{Icons} example for the full source | - | ||||||||||||||||||||||||
176 | code. | - | ||||||||||||||||||||||||
177 | - | |||||||||||||||||||||||||
178 | \sa QDoubleSpinBox, QDateTimeEdit, QSlider, {Spin Boxes Example} | - | ||||||||||||||||||||||||
179 | */ | - | ||||||||||||||||||||||||
180 | - | |||||||||||||||||||||||||
181 | /*! | - | ||||||||||||||||||||||||
182 | \fn void QSpinBox::valueChanged(int i) | - | ||||||||||||||||||||||||
183 | - | |||||||||||||||||||||||||
184 | This signal is emitted whenever the spin box's value is changed. | - | ||||||||||||||||||||||||
185 | The new value's integer value is passed in \a i. | - | ||||||||||||||||||||||||
186 | */ | - | ||||||||||||||||||||||||
187 | - | |||||||||||||||||||||||||
188 | /*! | - | ||||||||||||||||||||||||
189 | \fn void QSpinBox::valueChanged(const QString &text) | - | ||||||||||||||||||||||||
190 | - | |||||||||||||||||||||||||
191 | \overload | - | ||||||||||||||||||||||||
192 | - | |||||||||||||||||||||||||
193 | The new value is passed in \a text with prefix() and suffix(). | - | ||||||||||||||||||||||||
194 | */ | - | ||||||||||||||||||||||||
195 | - | |||||||||||||||||||||||||
196 | /*! | - | ||||||||||||||||||||||||
197 | Constructs a spin box with 0 as minimum value and 99 as maximum value, a | - | ||||||||||||||||||||||||
198 | step value of 1. The value is initially set to 0. It is parented to \a | - | ||||||||||||||||||||||||
199 | parent. | - | ||||||||||||||||||||||||
200 | - | |||||||||||||||||||||||||
201 | \sa setMinimum(), setMaximum(), setSingleStep() | - | ||||||||||||||||||||||||
202 | */ | - | ||||||||||||||||||||||||
203 | - | |||||||||||||||||||||||||
204 | QSpinBox::QSpinBox(QWidget *parent) | - | ||||||||||||||||||||||||
205 | : QAbstractSpinBox(*new QSpinBoxPrivate, parent) | - | ||||||||||||||||||||||||
206 | { | - | ||||||||||||||||||||||||
207 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
208 | d->init(); | - | ||||||||||||||||||||||||
209 | } never executed: end of block | 0 | ||||||||||||||||||||||||
210 | - | |||||||||||||||||||||||||
211 | /*! | - | ||||||||||||||||||||||||
212 | Destructor. | - | ||||||||||||||||||||||||
213 | */ | - | ||||||||||||||||||||||||
214 | QSpinBox::~QSpinBox() {} | - | ||||||||||||||||||||||||
215 | - | |||||||||||||||||||||||||
216 | /*! | - | ||||||||||||||||||||||||
217 | \property QSpinBox::value | - | ||||||||||||||||||||||||
218 | \brief the value of the spin box | - | ||||||||||||||||||||||||
219 | - | |||||||||||||||||||||||||
220 | setValue() will emit valueChanged() if the new value is different | - | ||||||||||||||||||||||||
221 | from the old one. The value property has a second notifier | - | ||||||||||||||||||||||||
222 | signal which includes the spin box's prefix and suffix. | - | ||||||||||||||||||||||||
223 | */ | - | ||||||||||||||||||||||||
224 | - | |||||||||||||||||||||||||
225 | int QSpinBox::value() const | - | ||||||||||||||||||||||||
226 | { | - | ||||||||||||||||||||||||
227 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
228 | return d->value.toInt(); never executed: return d->value.toInt(); | 0 | ||||||||||||||||||||||||
229 | } | - | ||||||||||||||||||||||||
230 | - | |||||||||||||||||||||||||
231 | void QSpinBox::setValue(int value) | - | ||||||||||||||||||||||||
232 | { | - | ||||||||||||||||||||||||
233 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
234 | d->setValue(QVariant(value), EmitIfChanged); | - | ||||||||||||||||||||||||
235 | } never executed: end of block | 0 | ||||||||||||||||||||||||
236 | - | |||||||||||||||||||||||||
237 | /*! | - | ||||||||||||||||||||||||
238 | \property QSpinBox::prefix | - | ||||||||||||||||||||||||
239 | \brief the spin box's prefix | - | ||||||||||||||||||||||||
240 | - | |||||||||||||||||||||||||
241 | The prefix is prepended to the start of the displayed value. | - | ||||||||||||||||||||||||
242 | Typical use is to display a unit of measurement or a currency | - | ||||||||||||||||||||||||
243 | symbol. For example: | - | ||||||||||||||||||||||||
244 | - | |||||||||||||||||||||||||
245 | \snippet code/src_gui_widgets_qspinbox.cpp 0 | - | ||||||||||||||||||||||||
246 | - | |||||||||||||||||||||||||
247 | To turn off the prefix display, set this property to an empty | - | ||||||||||||||||||||||||
248 | string. The default is no prefix. The prefix is not displayed when | - | ||||||||||||||||||||||||
249 | value() == minimum() and specialValueText() is set. | - | ||||||||||||||||||||||||
250 | - | |||||||||||||||||||||||||
251 | If no prefix is set, prefix() returns an empty string. | - | ||||||||||||||||||||||||
252 | - | |||||||||||||||||||||||||
253 | \sa suffix(), setSuffix(), specialValueText(), setSpecialValueText() | - | ||||||||||||||||||||||||
254 | */ | - | ||||||||||||||||||||||||
255 | - | |||||||||||||||||||||||||
256 | QString QSpinBox::prefix() const | - | ||||||||||||||||||||||||
257 | { | - | ||||||||||||||||||||||||
258 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
259 | return d->prefix; never executed: return d->prefix; | 0 | ||||||||||||||||||||||||
260 | } | - | ||||||||||||||||||||||||
261 | - | |||||||||||||||||||||||||
262 | void QSpinBox::setPrefix(const QString &prefix) | - | ||||||||||||||||||||||||
263 | { | - | ||||||||||||||||||||||||
264 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
265 | - | |||||||||||||||||||||||||
266 | d->prefix = prefix; | - | ||||||||||||||||||||||||
267 | d->updateEdit(); | - | ||||||||||||||||||||||||
268 | - | |||||||||||||||||||||||||
269 | d->cachedSizeHint = QSize(); | - | ||||||||||||||||||||||||
270 | d->cachedMinimumSizeHint = QSize(); // minimumSizeHint cares about the prefix | - | ||||||||||||||||||||||||
271 | updateGeometry(); | - | ||||||||||||||||||||||||
272 | } never executed: end of block | 0 | ||||||||||||||||||||||||
273 | - | |||||||||||||||||||||||||
274 | /*! | - | ||||||||||||||||||||||||
275 | \property QSpinBox::suffix | - | ||||||||||||||||||||||||
276 | \brief the suffix of the spin box | - | ||||||||||||||||||||||||
277 | - | |||||||||||||||||||||||||
278 | The suffix is appended to the end of the displayed value. Typical | - | ||||||||||||||||||||||||
279 | use is to display a unit of measurement or a currency symbol. For | - | ||||||||||||||||||||||||
280 | example: | - | ||||||||||||||||||||||||
281 | - | |||||||||||||||||||||||||
282 | \snippet code/src_gui_widgets_qspinbox.cpp 1 | - | ||||||||||||||||||||||||
283 | - | |||||||||||||||||||||||||
284 | To turn off the suffix display, set this property to an empty | - | ||||||||||||||||||||||||
285 | string. The default is no suffix. The suffix is not displayed for | - | ||||||||||||||||||||||||
286 | the minimum() if specialValueText() is set. | - | ||||||||||||||||||||||||
287 | - | |||||||||||||||||||||||||
288 | If no suffix is set, suffix() returns an empty string. | - | ||||||||||||||||||||||||
289 | - | |||||||||||||||||||||||||
290 | \sa prefix(), setPrefix(), specialValueText(), setSpecialValueText() | - | ||||||||||||||||||||||||
291 | */ | - | ||||||||||||||||||||||||
292 | - | |||||||||||||||||||||||||
293 | QString QSpinBox::suffix() const | - | ||||||||||||||||||||||||
294 | { | - | ||||||||||||||||||||||||
295 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
296 | - | |||||||||||||||||||||||||
297 | return d->suffix; never executed: return d->suffix; | 0 | ||||||||||||||||||||||||
298 | } | - | ||||||||||||||||||||||||
299 | - | |||||||||||||||||||||||||
300 | void QSpinBox::setSuffix(const QString &suffix) | - | ||||||||||||||||||||||||
301 | { | - | ||||||||||||||||||||||||
302 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
303 | - | |||||||||||||||||||||||||
304 | d->suffix = suffix; | - | ||||||||||||||||||||||||
305 | d->updateEdit(); | - | ||||||||||||||||||||||||
306 | - | |||||||||||||||||||||||||
307 | d->cachedSizeHint = QSize(); | - | ||||||||||||||||||||||||
308 | updateGeometry(); | - | ||||||||||||||||||||||||
309 | } never executed: end of block | 0 | ||||||||||||||||||||||||
310 | - | |||||||||||||||||||||||||
311 | /*! | - | ||||||||||||||||||||||||
312 | \property QSpinBox::cleanText | - | ||||||||||||||||||||||||
313 | - | |||||||||||||||||||||||||
314 | \brief the text of the spin box excluding any prefix, suffix, | - | ||||||||||||||||||||||||
315 | or leading or trailing whitespace. | - | ||||||||||||||||||||||||
316 | - | |||||||||||||||||||||||||
317 | \sa text, QSpinBox::prefix, QSpinBox::suffix | - | ||||||||||||||||||||||||
318 | */ | - | ||||||||||||||||||||||||
319 | - | |||||||||||||||||||||||||
320 | QString QSpinBox::cleanText() const | - | ||||||||||||||||||||||||
321 | { | - | ||||||||||||||||||||||||
322 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
323 | - | |||||||||||||||||||||||||
324 | return d->stripped(d->edit->displayText()); never executed: return d->stripped(d->edit->displayText()); | 0 | ||||||||||||||||||||||||
325 | } | - | ||||||||||||||||||||||||
326 | - | |||||||||||||||||||||||||
327 | - | |||||||||||||||||||||||||
328 | /*! | - | ||||||||||||||||||||||||
329 | \property QSpinBox::singleStep | - | ||||||||||||||||||||||||
330 | \brief the step value | - | ||||||||||||||||||||||||
331 | - | |||||||||||||||||||||||||
332 | When the user uses the arrows to change the spin box's value the | - | ||||||||||||||||||||||||
333 | value will be incremented/decremented by the amount of the | - | ||||||||||||||||||||||||
334 | singleStep. The default value is 1. Setting a singleStep value of | - | ||||||||||||||||||||||||
335 | less than 0 does nothing. | - | ||||||||||||||||||||||||
336 | */ | - | ||||||||||||||||||||||||
337 | - | |||||||||||||||||||||||||
338 | int QSpinBox::singleStep() const | - | ||||||||||||||||||||||||
339 | { | - | ||||||||||||||||||||||||
340 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
341 | - | |||||||||||||||||||||||||
342 | return d->singleStep.toInt(); never executed: return d->singleStep.toInt(); | 0 | ||||||||||||||||||||||||
343 | } | - | ||||||||||||||||||||||||
344 | - | |||||||||||||||||||||||||
345 | void QSpinBox::setSingleStep(int value) | - | ||||||||||||||||||||||||
346 | { | - | ||||||||||||||||||||||||
347 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
348 | if (value >= 0) {
| 0 | ||||||||||||||||||||||||
349 | d->singleStep = QVariant(value); | - | ||||||||||||||||||||||||
350 | d->updateEdit(); | - | ||||||||||||||||||||||||
351 | } never executed: end of block | 0 | ||||||||||||||||||||||||
352 | } never executed: end of block | 0 | ||||||||||||||||||||||||
353 | - | |||||||||||||||||||||||||
354 | /*! | - | ||||||||||||||||||||||||
355 | \property QSpinBox::minimum | - | ||||||||||||||||||||||||
356 | - | |||||||||||||||||||||||||
357 | \brief the minimum value of the spin box | - | ||||||||||||||||||||||||
358 | - | |||||||||||||||||||||||||
359 | When setting this property the \l maximum is adjusted | - | ||||||||||||||||||||||||
360 | if necessary to ensure that the range remains valid. | - | ||||||||||||||||||||||||
361 | - | |||||||||||||||||||||||||
362 | The default minimum value is 0. | - | ||||||||||||||||||||||||
363 | - | |||||||||||||||||||||||||
364 | \sa setRange(), specialValueText | - | ||||||||||||||||||||||||
365 | */ | - | ||||||||||||||||||||||||
366 | - | |||||||||||||||||||||||||
367 | int QSpinBox::minimum() const | - | ||||||||||||||||||||||||
368 | { | - | ||||||||||||||||||||||||
369 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
370 | - | |||||||||||||||||||||||||
371 | return d->minimum.toInt(); never executed: return d->minimum.toInt(); | 0 | ||||||||||||||||||||||||
372 | } | - | ||||||||||||||||||||||||
373 | - | |||||||||||||||||||||||||
374 | void QSpinBox::setMinimum(int minimum) | - | ||||||||||||||||||||||||
375 | { | - | ||||||||||||||||||||||||
376 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
377 | const QVariant m(minimum); | - | ||||||||||||||||||||||||
378 | d->setRange(m, (d->variantCompare(d->maximum, m) > 0 ? d->maximum : m)); | - | ||||||||||||||||||||||||
379 | } never executed: end of block | 0 | ||||||||||||||||||||||||
380 | - | |||||||||||||||||||||||||
381 | /*! | - | ||||||||||||||||||||||||
382 | \property QSpinBox::maximum | - | ||||||||||||||||||||||||
383 | - | |||||||||||||||||||||||||
384 | \brief the maximum value of the spin box | - | ||||||||||||||||||||||||
385 | - | |||||||||||||||||||||||||
386 | When setting this property the minimum is adjusted | - | ||||||||||||||||||||||||
387 | if necessary, to ensure that the range remains valid. | - | ||||||||||||||||||||||||
388 | - | |||||||||||||||||||||||||
389 | The default maximum value is 99. | - | ||||||||||||||||||||||||
390 | - | |||||||||||||||||||||||||
391 | \sa setRange(), specialValueText | - | ||||||||||||||||||||||||
392 | - | |||||||||||||||||||||||||
393 | */ | - | ||||||||||||||||||||||||
394 | - | |||||||||||||||||||||||||
395 | int QSpinBox::maximum() const | - | ||||||||||||||||||||||||
396 | { | - | ||||||||||||||||||||||||
397 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
398 | - | |||||||||||||||||||||||||
399 | return d->maximum.toInt(); never executed: return d->maximum.toInt(); | 0 | ||||||||||||||||||||||||
400 | } | - | ||||||||||||||||||||||||
401 | - | |||||||||||||||||||||||||
402 | void QSpinBox::setMaximum(int maximum) | - | ||||||||||||||||||||||||
403 | { | - | ||||||||||||||||||||||||
404 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
405 | const QVariant m(maximum); | - | ||||||||||||||||||||||||
406 | d->setRange((d->variantCompare(d->minimum, m) < 0 ? d->minimum : m), m); | - | ||||||||||||||||||||||||
407 | } never executed: end of block | 0 | ||||||||||||||||||||||||
408 | - | |||||||||||||||||||||||||
409 | /*! | - | ||||||||||||||||||||||||
410 | Convenience function to set the \a minimum, and \a maximum values | - | ||||||||||||||||||||||||
411 | with a single function call. | - | ||||||||||||||||||||||||
412 | - | |||||||||||||||||||||||||
413 | \snippet code/src_gui_widgets_qspinbox.cpp 2 | - | ||||||||||||||||||||||||
414 | is equivalent to: | - | ||||||||||||||||||||||||
415 | \snippet code/src_gui_widgets_qspinbox.cpp 3 | - | ||||||||||||||||||||||||
416 | - | |||||||||||||||||||||||||
417 | \sa minimum, maximum | - | ||||||||||||||||||||||||
418 | */ | - | ||||||||||||||||||||||||
419 | - | |||||||||||||||||||||||||
420 | void QSpinBox::setRange(int minimum, int maximum) | - | ||||||||||||||||||||||||
421 | { | - | ||||||||||||||||||||||||
422 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
423 | d->setRange(QVariant(minimum), QVariant(maximum)); | - | ||||||||||||||||||||||||
424 | } never executed: end of block | 0 | ||||||||||||||||||||||||
425 | - | |||||||||||||||||||||||||
426 | /*! | - | ||||||||||||||||||||||||
427 | \property QSpinBox::displayIntegerBase | - | ||||||||||||||||||||||||
428 | - | |||||||||||||||||||||||||
429 | \brief the base used to display the value of the spin box | - | ||||||||||||||||||||||||
430 | - | |||||||||||||||||||||||||
431 | The default displayIntegerBase value is 10. | - | ||||||||||||||||||||||||
432 | - | |||||||||||||||||||||||||
433 | \sa textFromValue(), valueFromText() | - | ||||||||||||||||||||||||
434 | \since 5.2 | - | ||||||||||||||||||||||||
435 | */ | - | ||||||||||||||||||||||||
436 | - | |||||||||||||||||||||||||
437 | int QSpinBox::displayIntegerBase() const | - | ||||||||||||||||||||||||
438 | { | - | ||||||||||||||||||||||||
439 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
440 | return d->displayIntegerBase; never executed: return d->displayIntegerBase; | 0 | ||||||||||||||||||||||||
441 | } | - | ||||||||||||||||||||||||
442 | - | |||||||||||||||||||||||||
443 | void QSpinBox::setDisplayIntegerBase(int base) | - | ||||||||||||||||||||||||
444 | { | - | ||||||||||||||||||||||||
445 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
446 | // Falls back to base 10 on invalid bases (like QString) | - | ||||||||||||||||||||||||
447 | if (Q_UNLIKELY(base < 2 || base > 36)) {
| 0 | ||||||||||||||||||||||||
448 | qWarning("QSpinBox::setDisplayIntegerBase: Invalid base (%d)", base); | - | ||||||||||||||||||||||||
449 | base = 10; | - | ||||||||||||||||||||||||
450 | } never executed: end of block | 0 | ||||||||||||||||||||||||
451 | - | |||||||||||||||||||||||||
452 | if (base != d->displayIntegerBase) {
| 0 | ||||||||||||||||||||||||
453 | d->displayIntegerBase = base; | - | ||||||||||||||||||||||||
454 | d->updateEdit(); | - | ||||||||||||||||||||||||
455 | } never executed: end of block | 0 | ||||||||||||||||||||||||
456 | } never executed: end of block | 0 | ||||||||||||||||||||||||
457 | - | |||||||||||||||||||||||||
458 | /*! | - | ||||||||||||||||||||||||
459 | This virtual function is used by the spin box whenever it needs to | - | ||||||||||||||||||||||||
460 | display the given \a value. The default implementation returns a | - | ||||||||||||||||||||||||
461 | string containing \a value printed in the standard way using | - | ||||||||||||||||||||||||
462 | QWidget::locale().toString(), but with the thousand separator | - | ||||||||||||||||||||||||
463 | removed unless setGroupSeparatorShown() is set. Reimplementations may | - | ||||||||||||||||||||||||
464 | return anything. (See the example in the detailed description.) | - | ||||||||||||||||||||||||
465 | - | |||||||||||||||||||||||||
466 | Note: QSpinBox does not call this function for specialValueText() | - | ||||||||||||||||||||||||
467 | and that neither prefix() nor suffix() should be included in the | - | ||||||||||||||||||||||||
468 | return value. | - | ||||||||||||||||||||||||
469 | - | |||||||||||||||||||||||||
470 | If you reimplement this, you may also need to reimplement | - | ||||||||||||||||||||||||
471 | valueFromText() and validate() | - | ||||||||||||||||||||||||
472 | - | |||||||||||||||||||||||||
473 | \sa valueFromText(), validate(), QLocale::groupSeparator() | - | ||||||||||||||||||||||||
474 | */ | - | ||||||||||||||||||||||||
475 | - | |||||||||||||||||||||||||
476 | QString QSpinBox::textFromValue(int value) const | - | ||||||||||||||||||||||||
477 | { | - | ||||||||||||||||||||||||
478 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
479 | QString str; | - | ||||||||||||||||||||||||
480 | - | |||||||||||||||||||||||||
481 | if (d->displayIntegerBase != 10) {
| 0 | ||||||||||||||||||||||||
482 | const QLatin1String prefix = value < 0 ? QLatin1String("-") : QLatin1String();
| 0 | ||||||||||||||||||||||||
483 | str = prefix + QString::number(qAbs(value), d->displayIntegerBase); | - | ||||||||||||||||||||||||
484 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||
485 | str = locale().toString(value); | - | ||||||||||||||||||||||||
486 | if (!d->showGroupSeparator && (qAbs(value) >= 1000 || value == INT_MIN)) {
| 0 | ||||||||||||||||||||||||
487 | str.remove(locale().groupSeparator()); | - | ||||||||||||||||||||||||
488 | } never executed: end of block | 0 | ||||||||||||||||||||||||
489 | } never executed: end of block | 0 | ||||||||||||||||||||||||
490 | - | |||||||||||||||||||||||||
491 | return str; never executed: return str; | 0 | ||||||||||||||||||||||||
492 | } | - | ||||||||||||||||||||||||
493 | - | |||||||||||||||||||||||||
494 | /*! | - | ||||||||||||||||||||||||
495 | \fn int QSpinBox::valueFromText(const QString &text) const | - | ||||||||||||||||||||||||
496 | - | |||||||||||||||||||||||||
497 | This virtual function is used by the spin box whenever it needs to | - | ||||||||||||||||||||||||
498 | interpret \a text entered by the user as a value. | - | ||||||||||||||||||||||||
499 | - | |||||||||||||||||||||||||
500 | Subclasses that need to display spin box values in a non-numeric | - | ||||||||||||||||||||||||
501 | way need to reimplement this function. | - | ||||||||||||||||||||||||
502 | - | |||||||||||||||||||||||||
503 | Note: QSpinBox handles specialValueText() separately; this | - | ||||||||||||||||||||||||
504 | function is only concerned with the other values. | - | ||||||||||||||||||||||||
505 | - | |||||||||||||||||||||||||
506 | \sa textFromValue(), validate() | - | ||||||||||||||||||||||||
507 | */ | - | ||||||||||||||||||||||||
508 | - | |||||||||||||||||||||||||
509 | int QSpinBox::valueFromText(const QString &text) const | - | ||||||||||||||||||||||||
510 | { | - | ||||||||||||||||||||||||
511 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
512 | - | |||||||||||||||||||||||||
513 | QString copy = text; | - | ||||||||||||||||||||||||
514 | int pos = d->edit->cursorPosition(); | - | ||||||||||||||||||||||||
515 | QValidator::State state = QValidator::Acceptable; | - | ||||||||||||||||||||||||
516 | return d->validateAndInterpret(copy, pos, state).toInt(); never executed: return d->validateAndInterpret(copy, pos, state).toInt(); | 0 | ||||||||||||||||||||||||
517 | } | - | ||||||||||||||||||||||||
518 | - | |||||||||||||||||||||||||
519 | /*! | - | ||||||||||||||||||||||||
520 | \reimp | - | ||||||||||||||||||||||||
521 | */ | - | ||||||||||||||||||||||||
522 | QValidator::State QSpinBox::validate(QString &text, int &pos) const | - | ||||||||||||||||||||||||
523 | { | - | ||||||||||||||||||||||||
524 | Q_D(const QSpinBox); | - | ||||||||||||||||||||||||
525 | - | |||||||||||||||||||||||||
526 | QValidator::State state; | - | ||||||||||||||||||||||||
527 | d->validateAndInterpret(text, pos, state); | - | ||||||||||||||||||||||||
528 | return state; never executed: return state; | 0 | ||||||||||||||||||||||||
529 | } | - | ||||||||||||||||||||||||
530 | - | |||||||||||||||||||||||||
531 | - | |||||||||||||||||||||||||
532 | /*! | - | ||||||||||||||||||||||||
533 | \reimp | - | ||||||||||||||||||||||||
534 | */ | - | ||||||||||||||||||||||||
535 | void QSpinBox::fixup(QString &input) const | - | ||||||||||||||||||||||||
536 | { | - | ||||||||||||||||||||||||
537 | if (!isGroupSeparatorShown())
| 0 | ||||||||||||||||||||||||
538 | input.remove(locale().groupSeparator()); never executed: input.remove(locale().groupSeparator()); | 0 | ||||||||||||||||||||||||
539 | } never executed: end of block | 0 | ||||||||||||||||||||||||
540 | - | |||||||||||||||||||||||||
541 | - | |||||||||||||||||||||||||
542 | // --- QDoubleSpinBox --- | - | ||||||||||||||||||||||||
543 | - | |||||||||||||||||||||||||
544 | /*! | - | ||||||||||||||||||||||||
545 | \class QDoubleSpinBox | - | ||||||||||||||||||||||||
546 | \brief The QDoubleSpinBox class provides a spin box widget that | - | ||||||||||||||||||||||||
547 | takes doubles. | - | ||||||||||||||||||||||||
548 | - | |||||||||||||||||||||||||
549 | \ingroup basicwidgets | - | ||||||||||||||||||||||||
550 | \inmodule QtWidgets | - | ||||||||||||||||||||||||
551 | - | |||||||||||||||||||||||||
552 | QDoubleSpinBox allows the user to choose a value by clicking the | - | ||||||||||||||||||||||||
553 | up and down buttons or by pressing Up or Down on the keyboard to | - | ||||||||||||||||||||||||
554 | increase or decrease the value currently displayed. The user can | - | ||||||||||||||||||||||||
555 | also type the value in manually. The spin box supports double | - | ||||||||||||||||||||||||
556 | values but can be extended to use different strings with | - | ||||||||||||||||||||||||
557 | validate(), textFromValue() and valueFromText(). | - | ||||||||||||||||||||||||
558 | - | |||||||||||||||||||||||||
559 | Every time the value changes QDoubleSpinBox emits two | - | ||||||||||||||||||||||||
560 | valueChanged() signals, one taking providing a double and the other | - | ||||||||||||||||||||||||
561 | a QString. The QString overload provides the value with both | - | ||||||||||||||||||||||||
562 | prefix() and suffix(). The current value can be fetched with | - | ||||||||||||||||||||||||
563 | value() and set with setValue(). | - | ||||||||||||||||||||||||
564 | - | |||||||||||||||||||||||||
565 | Note: QDoubleSpinBox will round numbers so they can be displayed | - | ||||||||||||||||||||||||
566 | with the current precision. In a QDoubleSpinBox with decimals set | - | ||||||||||||||||||||||||
567 | to 2, calling setValue(2.555) will cause value() to return 2.56. | - | ||||||||||||||||||||||||
568 | - | |||||||||||||||||||||||||
569 | Clicking the up and down buttons or using the keyboard accelerator's | - | ||||||||||||||||||||||||
570 | Up and Down arrows will increase or decrease the current value in | - | ||||||||||||||||||||||||
571 | steps of size singleStep(). If you want to change this behavior you | - | ||||||||||||||||||||||||
572 | can reimplement the virtual function stepBy(). The minimum and | - | ||||||||||||||||||||||||
573 | maximum value and the step size can be set using one of the | - | ||||||||||||||||||||||||
574 | constructors, and can be changed later with setMinimum(), | - | ||||||||||||||||||||||||
575 | setMaximum() and setSingleStep(). The spinbox has a default | - | ||||||||||||||||||||||||
576 | precision of 2 decimal places but this can be changed using | - | ||||||||||||||||||||||||
577 | setDecimals(). | - | ||||||||||||||||||||||||
578 | - | |||||||||||||||||||||||||
579 | Most spin boxes are directional, but QDoubleSpinBox can also | - | ||||||||||||||||||||||||
580 | operate as a circular spin box, i.e. if the range is 0.0-99.9 and | - | ||||||||||||||||||||||||
581 | the current value is 99.9, clicking "up" will give 0 if wrapping() | - | ||||||||||||||||||||||||
582 | is set to true. Use setWrapping() if you want circular behavior. | - | ||||||||||||||||||||||||
583 | - | |||||||||||||||||||||||||
584 | The displayed value can be prepended and appended with arbitrary | - | ||||||||||||||||||||||||
585 | strings indicating, for example, currency or the unit of | - | ||||||||||||||||||||||||
586 | measurement. See setPrefix() and setSuffix(). The text in the spin | - | ||||||||||||||||||||||||
587 | box is retrieved with text() (which includes any prefix() and | - | ||||||||||||||||||||||||
588 | suffix()), or with cleanText() (which has no prefix(), no suffix() | - | ||||||||||||||||||||||||
589 | and no leading or trailing whitespace). | - | ||||||||||||||||||||||||
590 | - | |||||||||||||||||||||||||
591 | It is often desirable to give the user a special (often default) | - | ||||||||||||||||||||||||
592 | choice in addition to the range of numeric values. See | - | ||||||||||||||||||||||||
593 | setSpecialValueText() for how to do this with QDoubleSpinBox. | - | ||||||||||||||||||||||||
594 | - | |||||||||||||||||||||||||
595 | \note The displayed value of the QDoubleSpinBox is limited to 18 characters | - | ||||||||||||||||||||||||
596 | in addition to eventual prefix and suffix content. This limitation is used | - | ||||||||||||||||||||||||
597 | to keep the double spin box usable even with extremely large values. | - | ||||||||||||||||||||||||
598 | \sa QSpinBox, QDateTimeEdit, QSlider, {Spin Boxes Example} | - | ||||||||||||||||||||||||
599 | */ | - | ||||||||||||||||||||||||
600 | - | |||||||||||||||||||||||||
601 | /*! | - | ||||||||||||||||||||||||
602 | \fn void QDoubleSpinBox::valueChanged(double d); | - | ||||||||||||||||||||||||
603 | - | |||||||||||||||||||||||||
604 | This signal is emitted whenever the spin box's value is changed. | - | ||||||||||||||||||||||||
605 | The new value is passed in \a d. | - | ||||||||||||||||||||||||
606 | */ | - | ||||||||||||||||||||||||
607 | - | |||||||||||||||||||||||||
608 | /*! | - | ||||||||||||||||||||||||
609 | \fn void QDoubleSpinBox::valueChanged(const QString &text); | - | ||||||||||||||||||||||||
610 | - | |||||||||||||||||||||||||
611 | \overload | - | ||||||||||||||||||||||||
612 | - | |||||||||||||||||||||||||
613 | The new value is passed in \a text with prefix() and suffix(). | - | ||||||||||||||||||||||||
614 | */ | - | ||||||||||||||||||||||||
615 | - | |||||||||||||||||||||||||
616 | /*! | - | ||||||||||||||||||||||||
617 | Constructs a spin box with 0.0 as minimum value and 99.99 as maximum value, | - | ||||||||||||||||||||||||
618 | a step value of 1.0 and a precision of 2 decimal places. The value is | - | ||||||||||||||||||||||||
619 | initially set to 0.00. The spin box has the given \a parent. | - | ||||||||||||||||||||||||
620 | - | |||||||||||||||||||||||||
621 | \sa setMinimum(), setMaximum(), setSingleStep() | - | ||||||||||||||||||||||||
622 | */ | - | ||||||||||||||||||||||||
623 | QDoubleSpinBox::QDoubleSpinBox(QWidget *parent) | - | ||||||||||||||||||||||||
624 | : QAbstractSpinBox(*new QDoubleSpinBoxPrivate, parent) | - | ||||||||||||||||||||||||
625 | { | - | ||||||||||||||||||||||||
626 | Q_D(QDoubleSpinBox); | - | ||||||||||||||||||||||||
627 | d->init(); | - | ||||||||||||||||||||||||
628 | } never executed: end of block | 0 | ||||||||||||||||||||||||
629 | - | |||||||||||||||||||||||||
630 | /*! | - | ||||||||||||||||||||||||
631 | Destructor. | - | ||||||||||||||||||||||||
632 | */ | - | ||||||||||||||||||||||||
633 | QDoubleSpinBox::~QDoubleSpinBox() {} | - | ||||||||||||||||||||||||
634 | - | |||||||||||||||||||||||||
635 | /*! | - | ||||||||||||||||||||||||
636 | \property QDoubleSpinBox::value | - | ||||||||||||||||||||||||
637 | \brief the value of the spin box | - | ||||||||||||||||||||||||
638 | - | |||||||||||||||||||||||||
639 | setValue() will emit valueChanged() if the new value is different | - | ||||||||||||||||||||||||
640 | from the old one. The value property has a second notifier | - | ||||||||||||||||||||||||
641 | signal which includes the spin box's prefix and suffix. | - | ||||||||||||||||||||||||
642 | - | |||||||||||||||||||||||||
643 | Note: The value will be rounded so it can be displayed with the | - | ||||||||||||||||||||||||
644 | current setting of decimals. | - | ||||||||||||||||||||||||
645 | - | |||||||||||||||||||||||||
646 | \sa decimals | - | ||||||||||||||||||||||||
647 | */ | - | ||||||||||||||||||||||||
648 | double QDoubleSpinBox::value() const | - | ||||||||||||||||||||||||
649 | { | - | ||||||||||||||||||||||||
650 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
651 | - | |||||||||||||||||||||||||
652 | return d->value.toDouble(); never executed: return d->value.toDouble(); | 0 | ||||||||||||||||||||||||
653 | } | - | ||||||||||||||||||||||||
654 | - | |||||||||||||||||||||||||
655 | void QDoubleSpinBox::setValue(double value) | - | ||||||||||||||||||||||||
656 | { | - | ||||||||||||||||||||||||
657 | Q_D(QDoubleSpinBox); | - | ||||||||||||||||||||||||
658 | QVariant v(d->round(value)); | - | ||||||||||||||||||||||||
659 | d->setValue(v, EmitIfChanged); | - | ||||||||||||||||||||||||
660 | } never executed: end of block | 0 | ||||||||||||||||||||||||
661 | /*! | - | ||||||||||||||||||||||||
662 | \property QDoubleSpinBox::prefix | - | ||||||||||||||||||||||||
663 | \brief the spin box's prefix | - | ||||||||||||||||||||||||
664 | - | |||||||||||||||||||||||||
665 | The prefix is prepended to the start of the displayed value. | - | ||||||||||||||||||||||||
666 | Typical use is to display a unit of measurement or a currency | - | ||||||||||||||||||||||||
667 | symbol. For example: | - | ||||||||||||||||||||||||
668 | - | |||||||||||||||||||||||||
669 | \snippet code/src_gui_widgets_qspinbox.cpp 4 | - | ||||||||||||||||||||||||
670 | - | |||||||||||||||||||||||||
671 | To turn off the prefix display, set this property to an empty | - | ||||||||||||||||||||||||
672 | string. The default is no prefix. The prefix is not displayed when | - | ||||||||||||||||||||||||
673 | value() == minimum() and specialValueText() is set. | - | ||||||||||||||||||||||||
674 | - | |||||||||||||||||||||||||
675 | If no prefix is set, prefix() returns an empty string. | - | ||||||||||||||||||||||||
676 | - | |||||||||||||||||||||||||
677 | \sa suffix(), setSuffix(), specialValueText(), setSpecialValueText() | - | ||||||||||||||||||||||||
678 | */ | - | ||||||||||||||||||||||||
679 | - | |||||||||||||||||||||||||
680 | QString QDoubleSpinBox::prefix() const | - | ||||||||||||||||||||||||
681 | { | - | ||||||||||||||||||||||||
682 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
683 | - | |||||||||||||||||||||||||
684 | return d->prefix; never executed: return d->prefix; | 0 | ||||||||||||||||||||||||
685 | } | - | ||||||||||||||||||||||||
686 | - | |||||||||||||||||||||||||
687 | void QDoubleSpinBox::setPrefix(const QString &prefix) | - | ||||||||||||||||||||||||
688 | { | - | ||||||||||||||||||||||||
689 | Q_D(QDoubleSpinBox); | - | ||||||||||||||||||||||||
690 | - | |||||||||||||||||||||||||
691 | d->prefix = prefix; | - | ||||||||||||||||||||||||
692 | d->updateEdit(); | - | ||||||||||||||||||||||||
693 | } never executed: end of block | 0 | ||||||||||||||||||||||||
694 | - | |||||||||||||||||||||||||
695 | /*! | - | ||||||||||||||||||||||||
696 | \property QDoubleSpinBox::suffix | - | ||||||||||||||||||||||||
697 | \brief the suffix of the spin box | - | ||||||||||||||||||||||||
698 | - | |||||||||||||||||||||||||
699 | The suffix is appended to the end of the displayed value. Typical | - | ||||||||||||||||||||||||
700 | use is to display a unit of measurement or a currency symbol. For | - | ||||||||||||||||||||||||
701 | example: | - | ||||||||||||||||||||||||
702 | - | |||||||||||||||||||||||||
703 | \snippet code/src_gui_widgets_qspinbox.cpp 5 | - | ||||||||||||||||||||||||
704 | - | |||||||||||||||||||||||||
705 | To turn off the suffix display, set this property to an empty | - | ||||||||||||||||||||||||
706 | string. The default is no suffix. The suffix is not displayed for | - | ||||||||||||||||||||||||
707 | the minimum() if specialValueText() is set. | - | ||||||||||||||||||||||||
708 | - | |||||||||||||||||||||||||
709 | If no suffix is set, suffix() returns an empty string. | - | ||||||||||||||||||||||||
710 | - | |||||||||||||||||||||||||
711 | \sa prefix(), setPrefix(), specialValueText(), setSpecialValueText() | - | ||||||||||||||||||||||||
712 | */ | - | ||||||||||||||||||||||||
713 | - | |||||||||||||||||||||||||
714 | QString QDoubleSpinBox::suffix() const | - | ||||||||||||||||||||||||
715 | { | - | ||||||||||||||||||||||||
716 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
717 | - | |||||||||||||||||||||||||
718 | return d->suffix; never executed: return d->suffix; | 0 | ||||||||||||||||||||||||
719 | } | - | ||||||||||||||||||||||||
720 | - | |||||||||||||||||||||||||
721 | void QDoubleSpinBox::setSuffix(const QString &suffix) | - | ||||||||||||||||||||||||
722 | { | - | ||||||||||||||||||||||||
723 | Q_D(QDoubleSpinBox); | - | ||||||||||||||||||||||||
724 | - | |||||||||||||||||||||||||
725 | d->suffix = suffix; | - | ||||||||||||||||||||||||
726 | d->updateEdit(); | - | ||||||||||||||||||||||||
727 | - | |||||||||||||||||||||||||
728 | d->cachedSizeHint = QSize(); | - | ||||||||||||||||||||||||
729 | updateGeometry(); | - | ||||||||||||||||||||||||
730 | } never executed: end of block | 0 | ||||||||||||||||||||||||
731 | - | |||||||||||||||||||||||||
732 | /*! | - | ||||||||||||||||||||||||
733 | \property QDoubleSpinBox::cleanText | - | ||||||||||||||||||||||||
734 | - | |||||||||||||||||||||||||
735 | \brief the text of the spin box excluding any prefix, suffix, | - | ||||||||||||||||||||||||
736 | or leading or trailing whitespace. | - | ||||||||||||||||||||||||
737 | - | |||||||||||||||||||||||||
738 | \sa text, QDoubleSpinBox::prefix, QDoubleSpinBox::suffix | - | ||||||||||||||||||||||||
739 | */ | - | ||||||||||||||||||||||||
740 | - | |||||||||||||||||||||||||
741 | QString QDoubleSpinBox::cleanText() const | - | ||||||||||||||||||||||||
742 | { | - | ||||||||||||||||||||||||
743 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
744 | - | |||||||||||||||||||||||||
745 | return d->stripped(d->edit->displayText()); never executed: return d->stripped(d->edit->displayText()); | 0 | ||||||||||||||||||||||||
746 | } | - | ||||||||||||||||||||||||
747 | - | |||||||||||||||||||||||||
748 | /*! | - | ||||||||||||||||||||||||
749 | \property QDoubleSpinBox::singleStep | - | ||||||||||||||||||||||||
750 | \brief the step value | - | ||||||||||||||||||||||||
751 | - | |||||||||||||||||||||||||
752 | When the user uses the arrows to change the spin box's value the | - | ||||||||||||||||||||||||
753 | value will be incremented/decremented by the amount of the | - | ||||||||||||||||||||||||
754 | singleStep. The default value is 1.0. Setting a singleStep value | - | ||||||||||||||||||||||||
755 | of less than 0 does nothing. | - | ||||||||||||||||||||||||
756 | */ | - | ||||||||||||||||||||||||
757 | double QDoubleSpinBox::singleStep() const | - | ||||||||||||||||||||||||
758 | { | - | ||||||||||||||||||||||||
759 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
760 | - | |||||||||||||||||||||||||
761 | return d->singleStep.toDouble(); never executed: return d->singleStep.toDouble(); | 0 | ||||||||||||||||||||||||
762 | } | - | ||||||||||||||||||||||||
763 | - | |||||||||||||||||||||||||
764 | void QDoubleSpinBox::setSingleStep(double value) | - | ||||||||||||||||||||||||
765 | { | - | ||||||||||||||||||||||||
766 | Q_D(QDoubleSpinBox); | - | ||||||||||||||||||||||||
767 | - | |||||||||||||||||||||||||
768 | if (value >= 0) {
| 0 | ||||||||||||||||||||||||
769 | d->singleStep = value; | - | ||||||||||||||||||||||||
770 | d->updateEdit(); | - | ||||||||||||||||||||||||
771 | } never executed: end of block | 0 | ||||||||||||||||||||||||
772 | } never executed: end of block | 0 | ||||||||||||||||||||||||
773 | - | |||||||||||||||||||||||||
774 | /*! | - | ||||||||||||||||||||||||
775 | \property QDoubleSpinBox::minimum | - | ||||||||||||||||||||||||
776 | - | |||||||||||||||||||||||||
777 | \brief the minimum value of the spin box | - | ||||||||||||||||||||||||
778 | - | |||||||||||||||||||||||||
779 | When setting this property the \l maximum is adjusted | - | ||||||||||||||||||||||||
780 | if necessary to ensure that the range remains valid. | - | ||||||||||||||||||||||||
781 | - | |||||||||||||||||||||||||
782 | The default minimum value is 0.0. | - | ||||||||||||||||||||||||
783 | - | |||||||||||||||||||||||||
784 | Note: The minimum value will be rounded to match the decimals | - | ||||||||||||||||||||||||
785 | property. | - | ||||||||||||||||||||||||
786 | - | |||||||||||||||||||||||||
787 | \sa decimals, setRange(), specialValueText | - | ||||||||||||||||||||||||
788 | */ | - | ||||||||||||||||||||||||
789 | - | |||||||||||||||||||||||||
790 | double QDoubleSpinBox::minimum() const | - | ||||||||||||||||||||||||
791 | { | - | ||||||||||||||||||||||||
792 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
793 | - | |||||||||||||||||||||||||
794 | return d->minimum.toDouble(); never executed: return d->minimum.toDouble(); | 0 | ||||||||||||||||||||||||
795 | } | - | ||||||||||||||||||||||||
796 | - | |||||||||||||||||||||||||
797 | void QDoubleSpinBox::setMinimum(double minimum) | - | ||||||||||||||||||||||||
798 | { | - | ||||||||||||||||||||||||
799 | Q_D(QDoubleSpinBox); | - | ||||||||||||||||||||||||
800 | d->actualMin = minimum; | - | ||||||||||||||||||||||||
801 | const QVariant m(d->round(minimum)); | - | ||||||||||||||||||||||||
802 | d->setRange(m, (d->variantCompare(d->maximum, m) > 0 ? d->maximum : m)); | - | ||||||||||||||||||||||||
803 | } never executed: end of block | 0 | ||||||||||||||||||||||||
804 | - | |||||||||||||||||||||||||
805 | /*! | - | ||||||||||||||||||||||||
806 | \property QDoubleSpinBox::maximum | - | ||||||||||||||||||||||||
807 | - | |||||||||||||||||||||||||
808 | \brief the maximum value of the spin box | - | ||||||||||||||||||||||||
809 | - | |||||||||||||||||||||||||
810 | When setting this property the \l minimum is adjusted | - | ||||||||||||||||||||||||
811 | if necessary, to ensure that the range remains valid. | - | ||||||||||||||||||||||||
812 | - | |||||||||||||||||||||||||
813 | The default maximum value is 99.99. | - | ||||||||||||||||||||||||
814 | - | |||||||||||||||||||||||||
815 | Note: The maximum value will be rounded to match the decimals | - | ||||||||||||||||||||||||
816 | property. | - | ||||||||||||||||||||||||
817 | - | |||||||||||||||||||||||||
818 | \sa decimals, setRange() | - | ||||||||||||||||||||||||
819 | */ | - | ||||||||||||||||||||||||
820 | - | |||||||||||||||||||||||||
821 | double QDoubleSpinBox::maximum() const | - | ||||||||||||||||||||||||
822 | { | - | ||||||||||||||||||||||||
823 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
824 | - | |||||||||||||||||||||||||
825 | return d->maximum.toDouble(); never executed: return d->maximum.toDouble(); | 0 | ||||||||||||||||||||||||
826 | } | - | ||||||||||||||||||||||||
827 | - | |||||||||||||||||||||||||
828 | void QDoubleSpinBox::setMaximum(double maximum) | - | ||||||||||||||||||||||||
829 | { | - | ||||||||||||||||||||||||
830 | Q_D(QDoubleSpinBox); | - | ||||||||||||||||||||||||
831 | d->actualMax = maximum; | - | ||||||||||||||||||||||||
832 | const QVariant m(d->round(maximum)); | - | ||||||||||||||||||||||||
833 | d->setRange((d->variantCompare(d->minimum, m) < 0 ? d->minimum : m), m); | - | ||||||||||||||||||||||||
834 | } never executed: end of block | 0 | ||||||||||||||||||||||||
835 | - | |||||||||||||||||||||||||
836 | /*! | - | ||||||||||||||||||||||||
837 | Convenience function to set the \a minimum and \a maximum values | - | ||||||||||||||||||||||||
838 | with a single function call. | - | ||||||||||||||||||||||||
839 | - | |||||||||||||||||||||||||
840 | Note: The maximum and minimum values will be rounded to match the | - | ||||||||||||||||||||||||
841 | decimals property. | - | ||||||||||||||||||||||||
842 | - | |||||||||||||||||||||||||
843 | \snippet code/src_gui_widgets_qspinbox.cpp 6 | - | ||||||||||||||||||||||||
844 | is equivalent to: | - | ||||||||||||||||||||||||
845 | \snippet code/src_gui_widgets_qspinbox.cpp 7 | - | ||||||||||||||||||||||||
846 | - | |||||||||||||||||||||||||
847 | \sa minimum, maximum | - | ||||||||||||||||||||||||
848 | */ | - | ||||||||||||||||||||||||
849 | - | |||||||||||||||||||||||||
850 | void QDoubleSpinBox::setRange(double minimum, double maximum) | - | ||||||||||||||||||||||||
851 | { | - | ||||||||||||||||||||||||
852 | Q_D(QDoubleSpinBox); | - | ||||||||||||||||||||||||
853 | d->actualMin = minimum; | - | ||||||||||||||||||||||||
854 | d->actualMax = maximum; | - | ||||||||||||||||||||||||
855 | d->setRange(QVariant(d->round(minimum)), QVariant(d->round(maximum))); | - | ||||||||||||||||||||||||
856 | } never executed: end of block | 0 | ||||||||||||||||||||||||
857 | - | |||||||||||||||||||||||||
858 | /*! | - | ||||||||||||||||||||||||
859 | \property QDoubleSpinBox::decimals | - | ||||||||||||||||||||||||
860 | - | |||||||||||||||||||||||||
861 | \brief the precision of the spin box, in decimals | - | ||||||||||||||||||||||||
862 | - | |||||||||||||||||||||||||
863 | Sets how many decimals the spinbox will use for displaying and | - | ||||||||||||||||||||||||
864 | interpreting doubles. | - | ||||||||||||||||||||||||
865 | - | |||||||||||||||||||||||||
866 | \warning The maximum value for \a decimals is DBL_MAX_10_EXP + | - | ||||||||||||||||||||||||
867 | DBL_DIG (ie. 323) because of the limitations of the double type. | - | ||||||||||||||||||||||||
868 | - | |||||||||||||||||||||||||
869 | Note: The maximum, minimum and value might change as a result of | - | ||||||||||||||||||||||||
870 | changing this property. | - | ||||||||||||||||||||||||
871 | */ | - | ||||||||||||||||||||||||
872 | - | |||||||||||||||||||||||||
873 | int QDoubleSpinBox::decimals() const | - | ||||||||||||||||||||||||
874 | { | - | ||||||||||||||||||||||||
875 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
876 | - | |||||||||||||||||||||||||
877 | return d->decimals; never executed: return d->decimals; | 0 | ||||||||||||||||||||||||
878 | } | - | ||||||||||||||||||||||||
879 | - | |||||||||||||||||||||||||
880 | void QDoubleSpinBox::setDecimals(int decimals) | - | ||||||||||||||||||||||||
881 | { | - | ||||||||||||||||||||||||
882 | Q_D(QDoubleSpinBox); | - | ||||||||||||||||||||||||
883 | d->decimals = qBound(0, decimals, DBL_MAX_10_EXP + DBL_DIG); | - | ||||||||||||||||||||||||
884 | - | |||||||||||||||||||||||||
885 | setRange(d->actualMin, d->actualMax); // make sure values are rounded | - | ||||||||||||||||||||||||
886 | setValue(value()); | - | ||||||||||||||||||||||||
887 | } never executed: end of block | 0 | ||||||||||||||||||||||||
888 | - | |||||||||||||||||||||||||
889 | /*! | - | ||||||||||||||||||||||||
890 | This virtual function is used by the spin box whenever it needs to | - | ||||||||||||||||||||||||
891 | display the given \a value. The default implementation returns a string | - | ||||||||||||||||||||||||
892 | containing \a value printed using QWidget::locale().toString(\a value, | - | ||||||||||||||||||||||||
893 | QLatin1Char('f'), decimals()) and will remove the thousand | - | ||||||||||||||||||||||||
894 | separator unless setGroupSeparatorShown() is set. Reimplementations may | - | ||||||||||||||||||||||||
895 | return anything. | - | ||||||||||||||||||||||||
896 | - | |||||||||||||||||||||||||
897 | Note: QDoubleSpinBox does not call this function for | - | ||||||||||||||||||||||||
898 | specialValueText() and that neither prefix() nor suffix() should | - | ||||||||||||||||||||||||
899 | be included in the return value. | - | ||||||||||||||||||||||||
900 | - | |||||||||||||||||||||||||
901 | If you reimplement this, you may also need to reimplement | - | ||||||||||||||||||||||||
902 | valueFromText(). | - | ||||||||||||||||||||||||
903 | - | |||||||||||||||||||||||||
904 | \sa valueFromText(), QLocale::groupSeparator() | - | ||||||||||||||||||||||||
905 | */ | - | ||||||||||||||||||||||||
906 | - | |||||||||||||||||||||||||
907 | - | |||||||||||||||||||||||||
908 | QString QDoubleSpinBox::textFromValue(double value) const | - | ||||||||||||||||||||||||
909 | { | - | ||||||||||||||||||||||||
910 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
911 | QString str = locale().toString(value, 'f', d->decimals); | - | ||||||||||||||||||||||||
912 | if (!d->showGroupSeparator && qAbs(value) >= 1000.0)
| 0 | ||||||||||||||||||||||||
913 | str.remove(locale().groupSeparator()); never executed: str.remove(locale().groupSeparator()); | 0 | ||||||||||||||||||||||||
914 | - | |||||||||||||||||||||||||
915 | return str; never executed: return str; | 0 | ||||||||||||||||||||||||
916 | } | - | ||||||||||||||||||||||||
917 | - | |||||||||||||||||||||||||
918 | /*! | - | ||||||||||||||||||||||||
919 | This virtual function is used by the spin box whenever it needs to | - | ||||||||||||||||||||||||
920 | interpret \a text entered by the user as a value. | - | ||||||||||||||||||||||||
921 | - | |||||||||||||||||||||||||
922 | Subclasses that need to display spin box values in a non-numeric | - | ||||||||||||||||||||||||
923 | way need to reimplement this function. | - | ||||||||||||||||||||||||
924 | - | |||||||||||||||||||||||||
925 | Note: QDoubleSpinBox handles specialValueText() separately; this | - | ||||||||||||||||||||||||
926 | function is only concerned with the other values. | - | ||||||||||||||||||||||||
927 | - | |||||||||||||||||||||||||
928 | \sa textFromValue(), validate() | - | ||||||||||||||||||||||||
929 | */ | - | ||||||||||||||||||||||||
930 | double QDoubleSpinBox::valueFromText(const QString &text) const | - | ||||||||||||||||||||||||
931 | { | - | ||||||||||||||||||||||||
932 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
933 | - | |||||||||||||||||||||||||
934 | QString copy = text; | - | ||||||||||||||||||||||||
935 | int pos = d->edit->cursorPosition(); | - | ||||||||||||||||||||||||
936 | QValidator::State state = QValidator::Acceptable; | - | ||||||||||||||||||||||||
937 | return d->validateAndInterpret(copy, pos, state).toDouble(); never executed: return d->validateAndInterpret(copy, pos, state).toDouble(); | 0 | ||||||||||||||||||||||||
938 | } | - | ||||||||||||||||||||||||
939 | - | |||||||||||||||||||||||||
940 | /*! | - | ||||||||||||||||||||||||
941 | \reimp | - | ||||||||||||||||||||||||
942 | */ | - | ||||||||||||||||||||||||
943 | QValidator::State QDoubleSpinBox::validate(QString &text, int &pos) const | - | ||||||||||||||||||||||||
944 | { | - | ||||||||||||||||||||||||
945 | Q_D(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
946 | - | |||||||||||||||||||||||||
947 | QValidator::State state; | - | ||||||||||||||||||||||||
948 | d->validateAndInterpret(text, pos, state); | - | ||||||||||||||||||||||||
949 | return state; never executed: return state; | 0 | ||||||||||||||||||||||||
950 | } | - | ||||||||||||||||||||||||
951 | - | |||||||||||||||||||||||||
952 | - | |||||||||||||||||||||||||
953 | /*! | - | ||||||||||||||||||||||||
954 | \reimp | - | ||||||||||||||||||||||||
955 | */ | - | ||||||||||||||||||||||||
956 | void QDoubleSpinBox::fixup(QString &input) const | - | ||||||||||||||||||||||||
957 | { | - | ||||||||||||||||||||||||
958 | input.remove(locale().groupSeparator()); | - | ||||||||||||||||||||||||
959 | } never executed: end of block | 0 | ||||||||||||||||||||||||
960 | - | |||||||||||||||||||||||||
961 | // --- QSpinBoxPrivate --- | - | ||||||||||||||||||||||||
962 | - | |||||||||||||||||||||||||
963 | /*! | - | ||||||||||||||||||||||||
964 | \internal | - | ||||||||||||||||||||||||
965 | Constructs a QSpinBoxPrivate object | - | ||||||||||||||||||||||||
966 | */ | - | ||||||||||||||||||||||||
967 | - | |||||||||||||||||||||||||
968 | QSpinBoxPrivate::QSpinBoxPrivate() | - | ||||||||||||||||||||||||
969 | { | - | ||||||||||||||||||||||||
970 | minimum = QVariant((int)0); | - | ||||||||||||||||||||||||
971 | maximum = QVariant((int)99); | - | ||||||||||||||||||||||||
972 | value = minimum; | - | ||||||||||||||||||||||||
973 | displayIntegerBase = 10; | - | ||||||||||||||||||||||||
974 | singleStep = QVariant((int)1); | - | ||||||||||||||||||||||||
975 | type = QVariant::Int; | - | ||||||||||||||||||||||||
976 | } never executed: end of block | 0 | ||||||||||||||||||||||||
977 | - | |||||||||||||||||||||||||
978 | /*! | - | ||||||||||||||||||||||||
979 | \internal | - | ||||||||||||||||||||||||
980 | \reimp | - | ||||||||||||||||||||||||
981 | */ | - | ||||||||||||||||||||||||
982 | - | |||||||||||||||||||||||||
983 | void QSpinBoxPrivate::emitSignals(EmitPolicy ep, const QVariant &old) | - | ||||||||||||||||||||||||
984 | { | - | ||||||||||||||||||||||||
985 | Q_Q(QSpinBox); | - | ||||||||||||||||||||||||
986 | if (ep != NeverEmit) {
| 0 | ||||||||||||||||||||||||
987 | pendingEmit = false; | - | ||||||||||||||||||||||||
988 | if (ep == AlwaysEmit || value != old) {
| 0 | ||||||||||||||||||||||||
989 | emit q->valueChanged(edit->displayText()); | - | ||||||||||||||||||||||||
990 | emit q->valueChanged(value.toInt()); | - | ||||||||||||||||||||||||
991 | } never executed: end of block | 0 | ||||||||||||||||||||||||
992 | } never executed: end of block | 0 | ||||||||||||||||||||||||
993 | } never executed: end of block | 0 | ||||||||||||||||||||||||
994 | - | |||||||||||||||||||||||||
995 | /*! | - | ||||||||||||||||||||||||
996 | \internal | - | ||||||||||||||||||||||||
997 | \reimp | - | ||||||||||||||||||||||||
998 | */ | - | ||||||||||||||||||||||||
999 | - | |||||||||||||||||||||||||
1000 | QString QSpinBoxPrivate::textFromValue(const QVariant &value) const | - | ||||||||||||||||||||||||
1001 | { | - | ||||||||||||||||||||||||
1002 | Q_Q(const QSpinBox); | - | ||||||||||||||||||||||||
1003 | return q->textFromValue(value.toInt()); never executed: return q->textFromValue(value.toInt()); | 0 | ||||||||||||||||||||||||
1004 | } | - | ||||||||||||||||||||||||
1005 | /*! | - | ||||||||||||||||||||||||
1006 | \internal | - | ||||||||||||||||||||||||
1007 | \reimp | - | ||||||||||||||||||||||||
1008 | */ | - | ||||||||||||||||||||||||
1009 | - | |||||||||||||||||||||||||
1010 | QVariant QSpinBoxPrivate::valueFromText(const QString &text) const | - | ||||||||||||||||||||||||
1011 | { | - | ||||||||||||||||||||||||
1012 | Q_Q(const QSpinBox); | - | ||||||||||||||||||||||||
1013 | - | |||||||||||||||||||||||||
1014 | return QVariant(q->valueFromText(text)); never executed: return QVariant(q->valueFromText(text)); | 0 | ||||||||||||||||||||||||
1015 | } | - | ||||||||||||||||||||||||
1016 | - | |||||||||||||||||||||||||
1017 | - | |||||||||||||||||||||||||
1018 | /*! | - | ||||||||||||||||||||||||
1019 | \internal Multi purpose function that parses input, sets state to | - | ||||||||||||||||||||||||
1020 | the appropriate state and returns the value it will be interpreted | - | ||||||||||||||||||||||||
1021 | as. | - | ||||||||||||||||||||||||
1022 | */ | - | ||||||||||||||||||||||||
1023 | - | |||||||||||||||||||||||||
1024 | QVariant QSpinBoxPrivate::validateAndInterpret(QString &input, int &pos, | - | ||||||||||||||||||||||||
1025 | QValidator::State &state) const | - | ||||||||||||||||||||||||
1026 | { | - | ||||||||||||||||||||||||
1027 | if (cachedText == input && !input.isEmpty()) {
| 0 | ||||||||||||||||||||||||
1028 | state = cachedState; | - | ||||||||||||||||||||||||
1029 | QSBDEBUG() << "cachedText was '" << cachedText << "' state was " dead code: QMessageLogger(__FILE__, 1029, __PRETTY_FUNCTION__).debug() << "cachedText was '" << cachedText << "' state was " << state << " and value was " << cachedValue; | - | ||||||||||||||||||||||||
1030 | << state << " and value was " << cachedValue; dead code: QMessageLogger(__FILE__, 1029, __PRETTY_FUNCTION__).debug() << "cachedText was '" << cachedText << "' state was " << state << " and value was " << cachedValue; | - | ||||||||||||||||||||||||
1031 | - | |||||||||||||||||||||||||
1032 | return cachedValue; never executed: return cachedValue; | 0 | ||||||||||||||||||||||||
1033 | } | - | ||||||||||||||||||||||||
1034 | const int max = maximum.toInt(); | - | ||||||||||||||||||||||||
1035 | const int min = minimum.toInt(); | - | ||||||||||||||||||||||||
1036 | - | |||||||||||||||||||||||||
1037 | QString copy = stripped(input, &pos); | - | ||||||||||||||||||||||||
1038 | QSBDEBUG() << "input" << input << "copy" << copy; dead code: QMessageLogger(__FILE__, 1038, __PRETTY_FUNCTION__).debug() << "input" << input << "copy" << copy; | - | ||||||||||||||||||||||||
1039 | state = QValidator::Acceptable; | - | ||||||||||||||||||||||||
1040 | int num = min; | - | ||||||||||||||||||||||||
1041 | - | |||||||||||||||||||||||||
1042 | if (max != min && (copy.isEmpty()
| 0 | ||||||||||||||||||||||||
1043 | || (min < 0 && copy == QLatin1String("-"))
| 0 | ||||||||||||||||||||||||
1044 | || (max >= 0 && copy == QLatin1String("+")))) {
| 0 | ||||||||||||||||||||||||
1045 | state = QValidator::Intermediate; | - | ||||||||||||||||||||||||
1046 | QSBDEBUG() << __FILE__ << __LINE__<< "num is set to" << num; dead code: QMessageLogger(__FILE__, 1046, __PRETTY_FUNCTION__).debug() << __FILE__ << 1046<< "num is set to" << num; | - | ||||||||||||||||||||||||
1047 | } else if (copy.startsWith(QLatin1Char('-')) && min >= 0) { never executed: end of block
| 0 | ||||||||||||||||||||||||
1048 | state = QValidator::Invalid; // special-case -0 will be interpreted as 0 and thus not be invalid with a range from 0-100 | - | ||||||||||||||||||||||||
1049 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||
1050 | bool ok = false; | - | ||||||||||||||||||||||||
1051 | if (displayIntegerBase != 10) {
| 0 | ||||||||||||||||||||||||
1052 | num = copy.toInt(&ok, displayIntegerBase); | - | ||||||||||||||||||||||||
1053 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||
1054 | num = locale.toInt(copy, &ok); | - | ||||||||||||||||||||||||
1055 | if (!ok && copy.contains(locale.groupSeparator()) && (max >= 1000 || min <= -1000)) {
| 0 | ||||||||||||||||||||||||
1056 | QString copy2 = copy; | - | ||||||||||||||||||||||||
1057 | copy2.remove(locale.groupSeparator()); | - | ||||||||||||||||||||||||
1058 | num = locale.toInt(copy2, &ok); | - | ||||||||||||||||||||||||
1059 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1060 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1061 | QSBDEBUG() << __FILE__ << __LINE__<< "num is set to" << num; dead code: QMessageLogger(__FILE__, 1061, __PRETTY_FUNCTION__).debug() << __FILE__ << 1061<< "num is set to" << num; | - | ||||||||||||||||||||||||
1062 | if (!ok) {
| 0 | ||||||||||||||||||||||||
1063 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1064 | } else if (num >= min && num <= max) { never executed: end of block
| 0 | ||||||||||||||||||||||||
1065 | state = QValidator::Acceptable; | - | ||||||||||||||||||||||||
1066 | } else if (max == min) { never executed: end of block
| 0 | ||||||||||||||||||||||||
1067 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1068 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||
1069 | if ((num >= 0 && num > max) || (num < 0 && num < min)) {
| 0 | ||||||||||||||||||||||||
1070 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1071 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1071, __PRETTY_FUNCTION__).debug() << __FILE__ << 1071<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1072 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||
1073 | state = QValidator::Intermediate; | - | ||||||||||||||||||||||||
1074 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Intermediate"; dead code: QMessageLogger(__FILE__, 1074, __PRETTY_FUNCTION__).debug() << __FILE__ << 1074<< "state is set to Intermediate"; | - | ||||||||||||||||||||||||
1075 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1076 | } | - | ||||||||||||||||||||||||
1077 | } | - | ||||||||||||||||||||||||
1078 | if (state != QValidator::Acceptable)
| 0 | ||||||||||||||||||||||||
1079 | num = max > 0 ? min : max; never executed: num = max > 0 ? min : max;
| 0 | ||||||||||||||||||||||||
1080 | input = prefix + copy + suffix; | - | ||||||||||||||||||||||||
1081 | cachedText = input; | - | ||||||||||||||||||||||||
1082 | cachedState = state; | - | ||||||||||||||||||||||||
1083 | cachedValue = QVariant((int)num); | - | ||||||||||||||||||||||||
1084 | - | |||||||||||||||||||||||||
1085 | QSBDEBUG() << "cachedText is set to '" << cachedText << "' state is set to " dead code: QMessageLogger(__FILE__, 1085, __PRETTY_FUNCTION__).debug() << "cachedText is set to '" << cachedText << "' state is set to " << state << " and value is set to " << cachedValue; | - | ||||||||||||||||||||||||
1086 | << state << " and value is set to " << cachedValue; dead code: QMessageLogger(__FILE__, 1085, __PRETTY_FUNCTION__).debug() << "cachedText is set to '" << cachedText << "' state is set to " << state << " and value is set to " << cachedValue; | - | ||||||||||||||||||||||||
1087 | return cachedValue; never executed: return cachedValue; | 0 | ||||||||||||||||||||||||
1088 | } | - | ||||||||||||||||||||||||
1089 | - | |||||||||||||||||||||||||
1090 | // --- QDoubleSpinBoxPrivate --- | - | ||||||||||||||||||||||||
1091 | - | |||||||||||||||||||||||||
1092 | /*! | - | ||||||||||||||||||||||||
1093 | \internal | - | ||||||||||||||||||||||||
1094 | Constructs a QSpinBoxPrivate object | - | ||||||||||||||||||||||||
1095 | */ | - | ||||||||||||||||||||||||
1096 | - | |||||||||||||||||||||||||
1097 | QDoubleSpinBoxPrivate::QDoubleSpinBoxPrivate() | - | ||||||||||||||||||||||||
1098 | { | - | ||||||||||||||||||||||||
1099 | actualMin = 0.0; | - | ||||||||||||||||||||||||
1100 | actualMax = 99.99; | - | ||||||||||||||||||||||||
1101 | minimum = QVariant(actualMin); | - | ||||||||||||||||||||||||
1102 | maximum = QVariant(actualMax); | - | ||||||||||||||||||||||||
1103 | value = minimum; | - | ||||||||||||||||||||||||
1104 | singleStep = QVariant(1.0); | - | ||||||||||||||||||||||||
1105 | decimals = 2; | - | ||||||||||||||||||||||||
1106 | type = QVariant::Double; | - | ||||||||||||||||||||||||
1107 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1108 | - | |||||||||||||||||||||||||
1109 | /*! | - | ||||||||||||||||||||||||
1110 | \internal | - | ||||||||||||||||||||||||
1111 | \reimp | - | ||||||||||||||||||||||||
1112 | */ | - | ||||||||||||||||||||||||
1113 | - | |||||||||||||||||||||||||
1114 | void QDoubleSpinBoxPrivate::emitSignals(EmitPolicy ep, const QVariant &old) | - | ||||||||||||||||||||||||
1115 | { | - | ||||||||||||||||||||||||
1116 | Q_Q(QDoubleSpinBox); | - | ||||||||||||||||||||||||
1117 | if (ep != NeverEmit) {
| 0 | ||||||||||||||||||||||||
1118 | pendingEmit = false; | - | ||||||||||||||||||||||||
1119 | if (ep == AlwaysEmit || value != old) {
| 0 | ||||||||||||||||||||||||
1120 | emit q->valueChanged(edit->displayText()); | - | ||||||||||||||||||||||||
1121 | emit q->valueChanged(value.toDouble()); | - | ||||||||||||||||||||||||
1122 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1123 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1124 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1125 | - | |||||||||||||||||||||||||
1126 | - | |||||||||||||||||||||||||
1127 | /*! | - | ||||||||||||||||||||||||
1128 | \internal | - | ||||||||||||||||||||||||
1129 | \reimp | - | ||||||||||||||||||||||||
1130 | */ | - | ||||||||||||||||||||||||
1131 | QVariant QDoubleSpinBoxPrivate::valueFromText(const QString &f) const | - | ||||||||||||||||||||||||
1132 | { | - | ||||||||||||||||||||||||
1133 | Q_Q(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
1134 | return QVariant(q->valueFromText(f)); never executed: return QVariant(q->valueFromText(f)); | 0 | ||||||||||||||||||||||||
1135 | } | - | ||||||||||||||||||||||||
1136 | - | |||||||||||||||||||||||||
1137 | /*! | - | ||||||||||||||||||||||||
1138 | \internal | - | ||||||||||||||||||||||||
1139 | Rounds to a double value that is restricted to decimals. | - | ||||||||||||||||||||||||
1140 | E.g. // decimals = 2 | - | ||||||||||||||||||||||||
1141 | - | |||||||||||||||||||||||||
1142 | round(5.555) => 5.56 | - | ||||||||||||||||||||||||
1143 | */ | - | ||||||||||||||||||||||||
1144 | - | |||||||||||||||||||||||||
1145 | double QDoubleSpinBoxPrivate::round(double value) const | - | ||||||||||||||||||||||||
1146 | { | - | ||||||||||||||||||||||||
1147 | return QString::number(value, 'f', decimals).toDouble(); never executed: return QString::number(value, 'f', decimals).toDouble(); | 0 | ||||||||||||||||||||||||
1148 | } | - | ||||||||||||||||||||||||
1149 | - | |||||||||||||||||||||||||
1150 | - | |||||||||||||||||||||||||
1151 | /*! | - | ||||||||||||||||||||||||
1152 | \internal Multi purpose function that parses input, sets state to | - | ||||||||||||||||||||||||
1153 | the appropriate state and returns the value it will be interpreted | - | ||||||||||||||||||||||||
1154 | as. | - | ||||||||||||||||||||||||
1155 | */ | - | ||||||||||||||||||||||||
1156 | - | |||||||||||||||||||||||||
1157 | QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos, | - | ||||||||||||||||||||||||
1158 | QValidator::State &state) const | - | ||||||||||||||||||||||||
1159 | { | - | ||||||||||||||||||||||||
1160 | if (cachedText == input && !input.isEmpty()) {
| 0 | ||||||||||||||||||||||||
1161 | state = cachedState; | - | ||||||||||||||||||||||||
1162 | QSBDEBUG() << "cachedText was '" << cachedText << "' state was " dead code: QMessageLogger(__FILE__, 1162, __PRETTY_FUNCTION__).debug() << "cachedText was '" << cachedText << "' state was " << state << " and value was " << cachedValue; | - | ||||||||||||||||||||||||
1163 | << state << " and value was " << cachedValue; dead code: QMessageLogger(__FILE__, 1162, __PRETTY_FUNCTION__).debug() << "cachedText was '" << cachedText << "' state was " << state << " and value was " << cachedValue; | - | ||||||||||||||||||||||||
1164 | return cachedValue; never executed: return cachedValue; | 0 | ||||||||||||||||||||||||
1165 | } | - | ||||||||||||||||||||||||
1166 | const double max = maximum.toDouble(); | - | ||||||||||||||||||||||||
1167 | const double min = minimum.toDouble(); | - | ||||||||||||||||||||||||
1168 | - | |||||||||||||||||||||||||
1169 | QString copy = stripped(input, &pos); | - | ||||||||||||||||||||||||
1170 | QSBDEBUG() << "input" << input << "copy" << copy; dead code: QMessageLogger(__FILE__, 1170, __PRETTY_FUNCTION__).debug() << "input" << input << "copy" << copy; | - | ||||||||||||||||||||||||
1171 | int len = copy.size(); | - | ||||||||||||||||||||||||
1172 | double num = min; | - | ||||||||||||||||||||||||
1173 | const bool plus = max >= 0; | - | ||||||||||||||||||||||||
1174 | const bool minus = min <= 0; | - | ||||||||||||||||||||||||
1175 | - | |||||||||||||||||||||||||
1176 | switch (len) { | - | ||||||||||||||||||||||||
1177 | case 0: never executed: case 0: | 0 | ||||||||||||||||||||||||
1178 | state = max != min ? QValidator::Intermediate : QValidator::Invalid;
| 0 | ||||||||||||||||||||||||
1179 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1180 | case 1: never executed: case 1: | 0 | ||||||||||||||||||||||||
1181 | if (copy.at(0) == locale.decimalPoint()
| 0 | ||||||||||||||||||||||||
1182 | || (plus && copy.at(0) == QLatin1Char('+'))
| 0 | ||||||||||||||||||||||||
1183 | || (minus && copy.at(0) == QLatin1Char('-'))) {
| 0 | ||||||||||||||||||||||||
1184 | state = QValidator::Intermediate; | - | ||||||||||||||||||||||||
1185 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1186 | } | - | ||||||||||||||||||||||||
1187 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1188 | case 2: never executed: case 2: | 0 | ||||||||||||||||||||||||
1189 | if (copy.at(1) == locale.decimalPoint()
| 0 | ||||||||||||||||||||||||
1190 | && ((plus && copy.at(0) == QLatin1Char('+')) || (minus && copy.at(0) == QLatin1Char('-')))) {
| 0 | ||||||||||||||||||||||||
1191 | state = QValidator::Intermediate; | - | ||||||||||||||||||||||||
1192 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1193 | } | - | ||||||||||||||||||||||||
1194 | break; never executed: break; | 0 | ||||||||||||||||||||||||
1195 | default: break; never executed: break; never executed: default: | 0 | ||||||||||||||||||||||||
1196 | } | - | ||||||||||||||||||||||||
1197 | - | |||||||||||||||||||||||||
1198 | if (copy.at(0) == locale.groupSeparator()) {
| 0 | ||||||||||||||||||||||||
1199 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1199, __PRETTY_FUNCTION__).debug() << __FILE__ << 1199<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1200 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1201 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1202 | } else if (len > 1) {
| 0 | ||||||||||||||||||||||||
1203 | const int dec = copy.indexOf(locale.decimalPoint()); | - | ||||||||||||||||||||||||
1204 | if (dec != -1) {
| 0 | ||||||||||||||||||||||||
1205 | if (dec + 1 < copy.size() && copy.at(dec + 1) == locale.decimalPoint() && pos == dec + 1) {
| 0 | ||||||||||||||||||||||||
1206 | copy.remove(dec + 1, 1); // typing a delimiter when you are on the delimiter | - | ||||||||||||||||||||||||
1207 | } // should be treated as typing right arrow never executed: end of block | 0 | ||||||||||||||||||||||||
1208 | - | |||||||||||||||||||||||||
1209 | if (copy.size() - dec > decimals + 1) {
| 0 | ||||||||||||||||||||||||
1210 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1210, __PRETTY_FUNCTION__).debug() << __FILE__ << 1210<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1211 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1212 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1213 | } | - | ||||||||||||||||||||||||
1214 | for (int i=dec + 1; i<copy.size(); ++i) {
| 0 | ||||||||||||||||||||||||
1215 | if (copy.at(i).isSpace() || copy.at(i) == locale.groupSeparator()) {
| 0 | ||||||||||||||||||||||||
1216 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1216, __PRETTY_FUNCTION__).debug() << __FILE__ << 1216<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1217 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1218 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1219 | } | - | ||||||||||||||||||||||||
1220 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1221 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||
1222 | const QChar last = copy.at(len - 1); | - | ||||||||||||||||||||||||
1223 | const QChar secondLast = copy.at(len - 2); | - | ||||||||||||||||||||||||
1224 | if ((last == locale.groupSeparator() || last.isSpace())
| 0 | ||||||||||||||||||||||||
1225 | && (secondLast == locale.groupSeparator() || secondLast.isSpace())) {
| 0 | ||||||||||||||||||||||||
1226 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1227 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1227, __PRETTY_FUNCTION__).debug() << __FILE__ << 1227<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1228 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1229 | } else if (last.isSpace() && (!locale.groupSeparator().isSpace() || secondLast.isSpace())) {
| 0 | ||||||||||||||||||||||||
1230 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1231 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1231, __PRETTY_FUNCTION__).debug() << __FILE__ << 1231<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1232 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1233 | } | - | ||||||||||||||||||||||||
1234 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1235 | } | - | ||||||||||||||||||||||||
1236 | - | |||||||||||||||||||||||||
1237 | { | - | ||||||||||||||||||||||||
1238 | bool ok = false; | - | ||||||||||||||||||||||||
1239 | num = locale.toDouble(copy, &ok); | - | ||||||||||||||||||||||||
1240 | QSBDEBUG() << __FILE__ << __LINE__ << locale << copy << num << ok; dead code: QMessageLogger(__FILE__, 1240, __PRETTY_FUNCTION__).debug() << __FILE__ << 1240 << locale << copy << num << ok; | - | ||||||||||||||||||||||||
1241 | - | |||||||||||||||||||||||||
1242 | if (!ok) {
| 0 | ||||||||||||||||||||||||
1243 | if (locale.groupSeparator().isPrint()) {
| 0 | ||||||||||||||||||||||||
1244 | if (max < 1000 && min > -1000 && copy.contains(locale.groupSeparator())) {
| 0 | ||||||||||||||||||||||||
1245 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1246 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1246, __PRETTY_FUNCTION__).debug() << __FILE__ << 1246<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1247 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1248 | } | - | ||||||||||||||||||||||||
1249 | - | |||||||||||||||||||||||||
1250 | const int len = copy.size(); | - | ||||||||||||||||||||||||
1251 | for (int i=0; i<len- 1; ++i) {
| 0 | ||||||||||||||||||||||||
1252 | if (copy.at(i) == locale.groupSeparator() && copy.at(i + 1) == locale.groupSeparator()) {
| 0 | ||||||||||||||||||||||||
1253 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1253, __PRETTY_FUNCTION__).debug() << __FILE__ << 1253<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1254 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1255 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1256 | } | - | ||||||||||||||||||||||||
1257 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1258 | - | |||||||||||||||||||||||||
1259 | QString copy2 = copy; | - | ||||||||||||||||||||||||
1260 | copy2.remove(locale.groupSeparator()); | - | ||||||||||||||||||||||||
1261 | num = locale.toDouble(copy2, &ok); | - | ||||||||||||||||||||||||
1262 | QSBDEBUG() << locale.groupSeparator() << num << copy2 << ok; dead code: QMessageLogger(__FILE__, 1262, __PRETTY_FUNCTION__).debug() << locale.groupSeparator() << num << copy2 << ok; | - | ||||||||||||||||||||||||
1263 | - | |||||||||||||||||||||||||
1264 | if (!ok) {
| 0 | ||||||||||||||||||||||||
1265 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1266 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1266, __PRETTY_FUNCTION__).debug() << __FILE__ << 1266<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1267 | goto end; never executed: goto end; | 0 | ||||||||||||||||||||||||
1268 | } | - | ||||||||||||||||||||||||
1269 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1270 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1271 | - | |||||||||||||||||||||||||
1272 | if (!ok) {
| 0 | ||||||||||||||||||||||||
1273 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1274 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1274, __PRETTY_FUNCTION__).debug() << __FILE__ << 1274<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1275 | } else if (num >= min && num <= max) { never executed: end of block
| 0 | ||||||||||||||||||||||||
1276 | state = QValidator::Acceptable; | - | ||||||||||||||||||||||||
1277 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Acceptable"; dead code: QMessageLogger(__FILE__, 1277, __PRETTY_FUNCTION__).debug() << __FILE__ << 1277<< "state is set to Acceptable"; | - | ||||||||||||||||||||||||
1278 | } else if (max == min) { // when max and min is the same the only non-Invalid input is max (or min) never executed: end of block
| 0 | ||||||||||||||||||||||||
1279 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1280 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1280, __PRETTY_FUNCTION__).debug() << __FILE__ << 1280<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1281 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||
1282 | if ((num >= 0 && num > max) || (num < 0 && num < min)) {
| 0 | ||||||||||||||||||||||||
1283 | state = QValidator::Invalid; | - | ||||||||||||||||||||||||
1284 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid"; dead code: QMessageLogger(__FILE__, 1284, __PRETTY_FUNCTION__).debug() << __FILE__ << 1284<< "state is set to Invalid"; | - | ||||||||||||||||||||||||
1285 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||
1286 | state = QValidator::Intermediate; | - | ||||||||||||||||||||||||
1287 | QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Intermediate"; dead code: QMessageLogger(__FILE__, 1287, __PRETTY_FUNCTION__).debug() << __FILE__ << 1287<< "state is set to Intermediate"; | - | ||||||||||||||||||||||||
1288 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1289 | } | - | ||||||||||||||||||||||||
1290 | } | - | ||||||||||||||||||||||||
1291 | - | |||||||||||||||||||||||||
1292 | end: code before this statement never executed: end: | 0 | ||||||||||||||||||||||||
1293 | if (state != QValidator::Acceptable) {
| 0 | ||||||||||||||||||||||||
1294 | num = max > 0 ? min : max;
| 0 | ||||||||||||||||||||||||
1295 | } never executed: end of block | 0 | ||||||||||||||||||||||||
1296 | - | |||||||||||||||||||||||||
1297 | input = prefix + copy + suffix; | - | ||||||||||||||||||||||||
1298 | cachedText = input; | - | ||||||||||||||||||||||||
1299 | cachedState = state; | - | ||||||||||||||||||||||||
1300 | cachedValue = QVariant(num); | - | ||||||||||||||||||||||||
1301 | return QVariant(num); never executed: return QVariant(num); | 0 | ||||||||||||||||||||||||
1302 | } | - | ||||||||||||||||||||||||
1303 | - | |||||||||||||||||||||||||
1304 | /* | - | ||||||||||||||||||||||||
1305 | \internal | - | ||||||||||||||||||||||||
1306 | \reimp | - | ||||||||||||||||||||||||
1307 | */ | - | ||||||||||||||||||||||||
1308 | - | |||||||||||||||||||||||||
1309 | QString QDoubleSpinBoxPrivate::textFromValue(const QVariant &f) const | - | ||||||||||||||||||||||||
1310 | { | - | ||||||||||||||||||||||||
1311 | Q_Q(const QDoubleSpinBox); | - | ||||||||||||||||||||||||
1312 | return q->textFromValue(f.toDouble()); never executed: return q->textFromValue(f.toDouble()); | 0 | ||||||||||||||||||||||||
1313 | } | - | ||||||||||||||||||||||||
1314 | - | |||||||||||||||||||||||||
1315 | /*! \reimp */ | - | ||||||||||||||||||||||||
1316 | bool QSpinBox::event(QEvent *event) | - | ||||||||||||||||||||||||
1317 | { | - | ||||||||||||||||||||||||
1318 | Q_D(QSpinBox); | - | ||||||||||||||||||||||||
1319 | if (event->type() == QEvent::StyleChange
| 0 | ||||||||||||||||||||||||
1320 | #ifdef Q_OS_MAC | - | ||||||||||||||||||||||||
1321 | || event->type() == QEvent::MacSizeChange | - | ||||||||||||||||||||||||
1322 | #endif | - | ||||||||||||||||||||||||
1323 | ) | - | ||||||||||||||||||||||||
1324 | d->setLayoutItemMargins(QStyle::SE_SpinBoxLayoutItem); never executed: d->setLayoutItemMargins(QStyle::SE_SpinBoxLayoutItem); | 0 | ||||||||||||||||||||||||
1325 | return QAbstractSpinBox::event(event); never executed: return QAbstractSpinBox::event(event); | 0 | ||||||||||||||||||||||||
1326 | } | - | ||||||||||||||||||||||||
1327 | - | |||||||||||||||||||||||||
1328 | QT_END_NAMESPACE | - | ||||||||||||||||||||||||
1329 | - | |||||||||||||||||||||||||
1330 | #include "moc_qspinbox.cpp" | - | ||||||||||||||||||||||||
1331 | - | |||||||||||||||||||||||||
1332 | #endif // QT_NO_SPINBOX | - | ||||||||||||||||||||||||
Source code | Switch to Preprocessed file |