qprogressbar.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/widgets/qprogressbar.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7class QProgressBarPrivate : public QWidgetPrivate-
8{-
9 inline QProgressBar* q_func() { return static_cast<QProgressBar *>(q_ptr); } inline const QProgressBar* q_func() const { return static_cast<const QProgressBar *>(q_ptr); } friend class QProgressBar;-
10-
11public:-
12 QProgressBarPrivate();-
13-
14 void init();-
15 void initDefaultFormat();-
16 inline void resetLayoutItemMargins();-
17-
18 int minimum;-
19 int maximum;-
20 int value;-
21 Qt::Alignment alignment;-
22 uint textVisible : 1;-
23 uint defaultFormat: 1;-
24 int lastPaintedValue;-
25 Qt::Orientation orientation;-
26 bool invertedAppearance;-
27 QProgressBar::Direction textDirection;-
28 QString format;-
29 inline int bound(int val) const { return qMax(minimum-1, qMin(maximum, val)); }-
30 bool repaintRequired() const;-
31};-
32-
33QProgressBarPrivate::QProgressBarPrivate()-
34 : minimum(0), maximum(100), value(-1), alignment(Qt::AlignLeft), textVisible(true),-
35 defaultFormat(true), lastPaintedValue(-1), orientation(Qt::Horizontal), invertedAppearance(false),-
36 textDirection(QProgressBar::TopToBottom)-
37{-
38 initDefaultFormat();-
39}-
40-
41void QProgressBarPrivate::initDefaultFormat()-
42{-
43 if (defaultFormat)-
44 format = QLatin1String("%p") + locale.percent();-
45}-
46-
47void QProgressBarPrivate::init()-
48{-
49 QProgressBar * const q = q_func();-
50 QSizePolicy sp(QSizePolicy::Expanding, QSizePolicy::Fixed);-
51 if (orientation == Qt::Vertical)-
52 sp.transpose();-
53 q->setSizePolicy(sp);-
54 q->setAttribute(Qt::WA_WState_OwnSizePolicy, false);-
55 resetLayoutItemMargins();-
56}-
57-
58void QProgressBarPrivate::resetLayoutItemMargins()-
59{-
60 QProgressBar * const q = q_func();-
61 QStyleOptionProgressBar option;-
62 q->initStyleOption(&option);-
63 setLayoutItemMargins(QStyle::SE_ProgressBarLayoutItem, &option);-
64}-
65void QProgressBar::initStyleOption(QStyleOptionProgressBar *option) const-
66{-
67 if (!option)-
68 return;-
69 const QProgressBarPrivate * const d = d_func();-
70 option->initFrom(this);-
71-
72 if (d->orientation == Qt::Horizontal)-
73 option->state |= QStyle::State_Horizontal;-
74 option->minimum = d->minimum;-
75 option->maximum = d->maximum;-
76 option->progress = d->value;-
77 option->textAlignment = d->alignment;-
78 option->textVisible = d->textVisible;-
79 option->text = text();-
80 option->orientation = d->orientation;-
81 option->invertedAppearance = d->invertedAppearance;-
82 option->bottomToTop = d->textDirection == QProgressBar::BottomToTop;-
83}-
84-
85bool QProgressBarPrivate::repaintRequired() const-
86{-
87 const QProgressBar * const q = q_func();-
88 if (value == lastPaintedValue
value == lastPaintedValueDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
89 return
never executed: return false;
false;
never executed: return false;
0
90-
91 const qint64int valueDifference = qAbs(qint64(value )- lastPaintedValue);-
92-
93-
94 if (value == minimum
value == minimumDescription
TRUEnever evaluated
FALSEnever evaluated
|| value == maximum
value == maximumDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
95 return
never executed: return true;
true;
never executed: return true;
0
const qint64 totalSteps = qint64(maximum) - minimum
never executed: return true;
never executed: return true;
;
never executed: return true;
96 if (textVisible
textVisibleDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
97 if ((
(format.contai...String("%v")))Description
TRUEnever evaluated
FALSEnever evaluated
format.contains(QLatin1String("%v")))
(format.contai...String("%v")))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
98 return
never executed: return true;
true;
never executed: return true;
0
99 if ((format.contains(QLatin1String("%p"))
format.contain...1String("%p"))Description
TRUEnever evaluated
FALSEnever evaluated
0
100 && valueDifference >= qAbs(totalSteps((maximum - minimum) / 100)
valueDifferenc...inimum) / 100)Description
TRUEnever evaluated
FALSEnever evaluated
))
0
101 return
never executed: return true;
true;
never executed: return true;
0
102 }
never executed: end of block
0
103-
104-
105 QStyleOptionProgressBar opt;-
106 q->initStyleOption(&opt);-
107 int cw = q->style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &opt, q);-
108 QRect groove = q->style()->subElementRect(QStyle::SE_ProgressBarGroove, &opt, q);-
109-
110-
111-
112 int grooveBlock = (
(q->orientatio...t::Horizontal)Description
TRUEnever evaluated
FALSEnever evaluated
q->orientation() == Qt::Horizontal)
(q->orientatio...t::Horizontal)Description
TRUEnever evaluated
FALSEnever evaluated
? groove.width() : groove.height();
0
113 return
never executed: return (valueDifference * grooveBlock > cw * (maximum - minimum));
(valueDifference * grooveBlock > cw * totalSteps;(maximum - minimum));
never executed: return (valueDifference * grooveBlock > cw * (maximum - minimum));
0
114}-
115QProgressBar::QProgressBar(QWidget *parent)-
116 : QWidget(*(new QProgressBarPrivate), parent, 0)-
117{-
118 d_func()->init();-
119}-
120-
121-
122-
123-
124QProgressBar::~QProgressBar()-
125{-
126}-
127-
128-
129-
130-
131-
132-
133void QProgressBar::reset()-
134{-
135 QProgressBarPrivate * const d = d_func();-
136 d->value = d->minimum - 1;-
137 if (d->minimum == (-2147483647 - 1)
d->minimum == ...147483647 - 1)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
138 d->value = (-2147483647 - 1);
never executed: d->value = (-2147483647 - 1);
0
139 else-
d->value = d->minimum - 1;repaint();
140}
never executed: end of block
0
141void QProgressBar::setMinimum(int minimum)-
142{-
143 setRange(minimum, qMax(d_func()->maximum, minimum));-
144}-
145-
146int QProgressBar::minimum() const-
147{-
148 return d_func()->minimum;-
149}-
150void QProgressBar::setMaximum(int maximum)-
151{-
152 setRange(qMin(d_func()->minimum, maximum), maximum);-
153}-
154-
155int QProgressBar::maximum() const-
156{-
157 return d_func()->maximum;-
158}-
159void QProgressBar::setValue(int value)-
160{-
161 QProgressBarPrivate * const d = d_func();-
162 if (d->value == value-
163 || ((value > d->maximum || value < d->minimum)-
164 && (d->maximum != 0 || d->minimum != 0)))-
165 return;-
166 d->value = value;-
167 valueChanged(value);-
168-
169 if (isVisible()) {-
170 QAccessibleValueChangeEvent event(this, value);-
171 QAccessible::updateAccessibility(&event);-
172 }-
173-
174 if (d->repaintRequired())-
175 repaint();-
176}-
177-
178int QProgressBar::value() const-
179{-
180 return d_func()->value;-
181}-
182void QProgressBar::setRange(int minimum, int maximum)-
183{-
184 QProgressBarPrivate * const d = d_func();-
185 if (minimum != d->minimum
minimum != d->minimumDescription
TRUEnever evaluated
FALSEnever evaluated
|| maximum != d->maximum
maximum != d->maximumDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
186 d->minimum = minimum;-
187 d->maximum = qMax(minimum, maximum);-
188-
189 if (d->value < qint64(d->minimum )- 1)
d->value < (d->minimum - 1)Description
TRUEnever evaluated
FALSEnever evaluated
|| d->value > d->maximum
d->value > d->maximumDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
190 reset();
never executed: reset();
0
191 else-
192 update();
never executed: update();
0
193 }-
194}
never executed: end of block
0
195void QProgressBar::setTextVisible(bool visible)-
196{-
197 QProgressBarPrivate * const d = d_func();-
198 if (d->textVisible != visible) {-
199 d->textVisible = visible;-
200 repaint();-
201 }-
202}-
203-
204bool QProgressBar::isTextVisible() const-
205{-
206 return d_func()->textVisible;-
207}-
208-
209-
210-
211-
212-
213void QProgressBar::setAlignment(Qt::Alignment alignment)-
214{-
215 if (d_func()->alignment != alignment) {-
216 d_func()->alignment = alignment;-
217 repaint();-
218 }-
219}-
220-
221Qt::Alignment QProgressBar::alignment() const-
222{-
223 return d_func()->alignment;-
224}-
225-
226-
227-
228-
229void QProgressBar::paintEvent(QPaintEvent *)-
230{-
231 QStylePainter paint(this);-
232 QStyleOptionProgressBar opt;-
233 initStyleOption(&opt);-
234 paint.drawControl(QStyle::CE_ProgressBar, opt);-
235 d_func()->lastPaintedValue = d_func()->value;-
236}-
237-
238-
239-
240-
241QSize QProgressBar::sizeHint() const-
242{-
243 ensurePolished();-
244 QFontMetrics fm = fontMetrics();-
245 QStyleOptionProgressBar opt;-
246 initStyleOption(&opt);-
247 int cw = style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &opt, this);-
248 QSize size = QSize(qMax(9, cw) * 7 + fm.width(QLatin1Char('0')) * 4, fm.height() + 8);-
249 if (opt.orientation == Qt::Vertical)-
250 size = size.transposed();-
251 return style()->sizeFromContents(QStyle::CT_ProgressBar, &opt, size, this);-
252}-
253-
254-
255-
256-
257QSize QProgressBar::minimumSizeHint() const-
258{-
259 QSize size;-
260 if (orientation() == Qt::Horizontal)-
261 size = QSize(sizeHint().width(), fontMetrics().height() + 2);-
262 else-
263 size = QSize(fontMetrics().height() + 2, sizeHint().height());-
264 return size;-
265}-
266QString QProgressBar::text() const-
267{-
268 const QProgressBarPrivate * const d = d_func();-
269 if ((d->maximum == 0 && d->minimum == 0) || d->value < d->minimum-
270 || (d->value == (-2147483647 - 1) && d->minimum == (-2147483647 - 1)))-
271 return QString();-
272-
273 qint64 totalSteps = qint64(d->maximum) - d->minimum;-
274-
275 QString result = d->format;-
276 QLocale locale = d->locale;-
277 locale.setNumberOptions(locale.numberOptions() | QLocale::OmitGroupSeparator);-
278 result.replace(QLatin1String("%m"), locale.toString(totalSteps));-
279 result.replace(QLatin1String("%v"), locale.toString(d->value));-
280-
281-
282-
283-
284 if (totalSteps == 0) {-
285 result.replace(QLatin1String("%p"), locale.toString(int(100)));-
286 return result;-
287 }-
288-
289 int progress = (qreal(d->value) - d->minimum) * 100.0 / totalSteps;-
290 result.replace(QLatin1String("%p"), locale.toString(progress));-
291 return result;-
292}-
293void QProgressBar::setOrientation(Qt::Orientation orientation)-
294{-
295 QProgressBarPrivate * const d = d_func();-
296 if (d->orientation == orientation)-
297 return;-
298 d->orientation = orientation;-
299 if (!testAttribute(Qt::WA_WState_OwnSizePolicy)) {-
300 QSizePolicy sp = sizePolicy();-
301 sp.transpose();-
302 setSizePolicy(sp);-
303 setAttribute(Qt::WA_WState_OwnSizePolicy, false);-
304 }-
305 d->resetLayoutItemMargins();-
306 update();-
307 updateGeometry();-
308}-
309-
310Qt::Orientation QProgressBar::orientation() const-
311{-
312 const QProgressBarPrivate * const d = d_func();-
313 return d->orientation;-
314}-
315void QProgressBar::setInvertedAppearance(bool invert)-
316{-
317 QProgressBarPrivate * const d = d_func();-
318 d->invertedAppearance = invert;-
319 update();-
320}-
321-
322bool QProgressBar::invertedAppearance() const-
323{-
324 const QProgressBarPrivate * const d = d_func();-
325 return d->invertedAppearance;-
326}-
327void QProgressBar::setTextDirection(QProgressBar::Direction textDirection)-
328{-
329 QProgressBarPrivate * const d = d_func();-
330 d->textDirection = textDirection;-
331 update();-
332}-
333-
334QProgressBar::Direction QProgressBar::textDirection() const-
335{-
336 const QProgressBarPrivate * const d = d_func();-
337 return d->textDirection;-
338}-
339-
340-
341bool QProgressBar::event(QEvent *e)-
342{-
343 QProgressBarPrivate * const d = d_func();-
344 switch (e->type()) {-
345 case QEvent::StyleChange:-
346-
347-
348-
349 d->resetLayoutItemMargins();-
350 break;-
351 case QEvent::LocaleChange:-
352 d->initDefaultFormat();-
353 break;-
354 default:-
355 break;-
356 }-
357 return QWidget::event(e);-
358}-
359void QProgressBar::setFormat(const QString &format)-
360{-
361 QProgressBarPrivate * const d = d_func();-
362 if (d->format == format)-
363 return;-
364 d->format = format;-
365 d->defaultFormat = false;-
366 update();-
367}-
368-
369void QProgressBar::resetFormat()-
370{-
371 QProgressBarPrivate * const d = d_func();-
372 d->defaultFormat = true;-
373 d->initDefaultFormat();-
374 update();-
375}-
376-
377QString QProgressBar::format() const-
378{-
379 const QProgressBarPrivate * const d = d_func();-
380 return d->format;-
381}-
382-
383-
384-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9