qstatusbar.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/widgets/qstatusbar.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2015 The Qt Company Ltd.-
4** Contact: http://www.qt.io/licensing/-
5**-
6** This file is part of the QtWidgets module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL21$-
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 http://www.qt.io/terms-conditions. For further-
15** information use the contact form at http://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 2.1 or version 3 as published by the Free-
20** Software Foundation and appearing in the file LICENSE.LGPLv21 and-
21** LICENSE.LGPLv3 included in the packaging of this file. Please review the-
22** following information to ensure the GNU Lesser General Public License-
23** requirements will be met: https://www.gnu.org/licenses/lgpl.html and-
24** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.-
25**-
26** As a special exception, The Qt Company gives you certain additional-
27** rights. These rights are described in The Qt Company LGPL Exception-
28** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.-
29**-
30** $QT_END_LICENSE$-
31**-
32****************************************************************************/-
33-
34#include "qstatusbar.h"-
35#ifndef QT_NO_STATUSBAR-
36-
37#include "qlist.h"-
38#include "qdebug.h"-
39#include "qevent.h"-
40#include "qlayout.h"-
41#include "qpainter.h"-
42#include "qtimer.h"-
43#include "qstyle.h"-
44#include "qstyleoption.h"-
45#include "qsizegrip.h"-
46#include "qmainwindow.h"-
47-
48#ifndef QT_NO_ACCESSIBILITY-
49#include "qaccessible.h"-
50#endif-
51-
52#include <private/qlayoutengine_p.h>-
53#include <private/qwidget_p.h>-
54-
55QT_BEGIN_NAMESPACE-
56-
57class QStatusBarPrivate : public QWidgetPrivate-
58{-
59 Q_DECLARE_PUBLIC(QStatusBar)-
60public:-
61 QStatusBarPrivate() {}-
62-
63 struct SBItem {-
64 SBItem(QWidget* widget, int stretch, bool permanent)-
65 : s(stretch), w(widget), p(permanent) {}
never executed: end of block
0
66 int s;-
67 QWidget * w;-
68 bool p;-
69 };-
70-
71 QList<SBItem *> items;-
72 QString tempItem;-
73-
74 QBoxLayout * box;-
75 QTimer * timer;-
76-
77#ifndef QT_NO_SIZEGRIP-
78 QSizeGrip * resizer;-
79 bool showSizeGrip;-
80#endif-
81-
82 int savedStrut;-
83-
84#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
85 QPoint dragStart;-
86#endif-
87-
88 int indexToLastNonPermanentWidget() const-
89 {-
90 int i = items.size() - 1;-
91 for (; i >= 0; --i) {
i >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
92 SBItem *item = items.at(i);-
93 if (!(item && item->p))
itemDescription
TRUEnever evaluated
FALSEnever evaluated
item->pDescription
TRUEnever evaluated
FALSEnever evaluated
0
94 break;
never executed: break;
0
95 }
never executed: end of block
0
96 return i;
never executed: return i;
0
97 }-
98-
99#ifndef QT_NO_SIZEGRIP-
100 void tryToShowSizeGrip()-
101 {-
102 if (!showSizeGrip)
!showSizeGripDescription
TRUEnever evaluated
FALSEnever evaluated
0
103 return;
never executed: return;
0
104 showSizeGrip = false;-
105 if (!resizer || resizer->isVisible())
!resizerDescription
TRUEnever evaluated
FALSEnever evaluated
resizer->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
106 return;
never executed: return;
0
107 resizer->setAttribute(Qt::WA_WState_ExplicitShowHide, false);-
108 QMetaObject::invokeMethod(resizer, "_q_showIfNotHidden", Qt::DirectConnection);-
109 resizer->setAttribute(Qt::WA_WState_ExplicitShowHide, false);-
110 }
never executed: end of block
0
111#endif-
112-
113 QRect messageRect() const;-
114};-
115-
116-
117QRect QStatusBarPrivate::messageRect() const-
118{-
119 Q_Q(const QStatusBar);-
120 bool rtl = q->layoutDirection() == Qt::RightToLeft;-
121-
122 int left = 6;-
123 int right = q->width() - 12;-
124-
125#ifndef QT_NO_SIZEGRIP-
126 if (resizer && resizer->isVisible()) {
resizerDescription
TRUEnever evaluated
FALSEnever evaluated
resizer->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
127 if (rtl)
rtlDescription
TRUEnever evaluated
FALSEnever evaluated
0
128 left = resizer->x() + resizer->width();
never executed: left = resizer->x() + resizer->width();
0
129 else-
130 right = resizer->x();
never executed: right = resizer->x();
0
131 }-
132#endif-
133-
134 for (int i=0; i<items.size(); ++i) {
i<items.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
135 QStatusBarPrivate::SBItem* item = items.at(i);-
136 if (!item)
!itemDescription
TRUEnever evaluated
FALSEnever evaluated
0
137 break;
never executed: break;
0
138 if (item->p && item->w->isVisible()) {
item->pDescription
TRUEnever evaluated
FALSEnever evaluated
item->w->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
139 if (item->p) {
item->pDescription
TRUEnever evaluated
FALSEnever evaluated
0
140 if (rtl)
rtlDescription
TRUEnever evaluated
FALSEnever evaluated
0
141 left = qMax(left, item->w->x() + item->w->width() + 2);
never executed: left = qMax(left, item->w->x() + item->w->width() + 2);
0
142 else-
143 right = qMin(right, item->w->x() - 2);
never executed: right = qMin(right, item->w->x() - 2);
0
144 }-
145 break;
never executed: break;
0
146 }-
147 }
never executed: end of block
0
148 return QRect(left, 0, right-left, q->height());
never executed: return QRect(left, 0, right-left, q->height());
0
149}-
150-
151-
152/*!-
153 \class QStatusBar-
154 \brief The QStatusBar class provides a horizontal bar suitable for-
155 presenting status information.-
156-
157 \ingroup mainwindow-classes-
158 \ingroup helpsystem-
159 \inmodule QtWidgets-
160-
161 Each status indicator falls into one of three categories:-
162-
163 \list-
164 \li \e Temporary - briefly occupies most of the status bar. Used-
165 to explain tool tip texts or menu entries, for example.-
166 \li \e Normal - occupies part of the status bar and may be hidden-
167 by temporary messages. Used to display the page and line-
168 number in a word processor, for example.-
169 \li \e Permanent - is never hidden. Used for important mode-
170 indications, for example, some applications put a Caps Lock-
171 indicator in the status bar.-
172 \endlist-
173-
174 QStatusBar lets you display all three types of indicators.-
175-
176 Typically, a request for the status bar functionality occurs in-
177 relation to a QMainWindow object. QMainWindow provides a main-
178 application window, with a menu bar, tool bars, dock widgets \e-
179 and a status bar around a large central widget. The status bar can-
180 be retrieved using the QMainWindow::statusBar() function, and-
181 replaced using the QMainWindow::setStatusBar() function.-
182-
183 Use the showMessage() slot to display a \e temporary message:-
184-
185 \snippet mainwindows/dockwidgets/mainwindow.cpp 8-
186-
187 To remove a temporary message, use the clearMessage() slot, or set-
188 a time limit when calling showMessage(). For example:-
189-
190 \snippet mainwindows/dockwidgets/mainwindow.cpp 3-
191-
192 Use the currentMessage() function to retrieve the temporary-
193 message currently shown. The QStatusBar class also provide the-
194 messageChanged() signal which is emitted whenever the temporary-
195 status message changes.-
196-
197 \target permanent message-
198 \e Normal and \e Permanent messages are displayed by creating a-
199 small widget (QLabel, QProgressBar or even QToolButton) and then-
200 adding it to the status bar using the addWidget() or the-
201 addPermanentWidget() function. Use the removeWidget() function to-
202 remove such messages from the status bar.-
203-
204 \snippet code/src_gui_widgets_qstatusbar.cpp 0-
205-
206 By default QStatusBar provides a QSizeGrip in the lower-right-
207 corner. You can disable it using the setSizeGripEnabled()-
208 function. Use the isSizeGripEnabled() function to determine the-
209 current status of the size grip.-
210-
211 \image fusion-statusbar-sizegrip.png A status bar shown in the Fusion widget style-
212-
213 \sa QMainWindow, QStatusTipEvent, {fowler}{GUI Design Handbook:-
214 Status Bar}, {Application Example}-
215*/-
216-
217-
218/*!-
219 Constructs a status bar with a size grip and the given \a parent.-
220-
221 \sa setSizeGripEnabled()-
222*/-
223QStatusBar::QStatusBar(QWidget * parent)-
224 : QWidget(*new QStatusBarPrivate, parent, 0)-
225{-
226 Q_D(QStatusBar);-
227 d->box = 0;-
228 d->timer = 0;-
229-
230#ifndef QT_NO_SIZEGRIP-
231 d->resizer = 0;-
232 setSizeGripEnabled(true); // causes reformat()-
233#else-
234 reformat();-
235#endif-
236}
never executed: end of block
0
237-
238/*!-
239 Destroys this status bar and frees any allocated resources and-
240 child widgets.-
241*/-
242QStatusBar::~QStatusBar()-
243{-
244 Q_D(QStatusBar);-
245 while (!d->items.isEmpty())
!d->items.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
246 delete d->items.takeFirst();
never executed: delete d->items.takeFirst();
0
247}
never executed: end of block
0
248-
249-
250/*!-
251 Adds the given \a widget to this status bar, reparenting the-
252 widget if it isn't already a child of this QStatusBar object. The-
253 \a stretch parameter is used to compute a suitable size for the-
254 given \a widget as the status bar grows and shrinks. The default-
255 stretch factor is 0, i.e giving the widget a minimum of space.-
256-
257 The widget is located to the far left of the first permanent-
258 widget (see addPermanentWidget()) and may be obscured by temporary-
259 messages.-
260-
261 \sa insertWidget(), removeWidget(), addPermanentWidget()-
262*/-
263-
264void QStatusBar::addWidget(QWidget * widget, int stretch)-
265{-
266 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
267 return;
never executed: return;
0
268 insertWidget(d_func()->indexToLastNonPermanentWidget() + 1, widget, stretch);-
269}
never executed: end of block
0
270-
271/*!-
272 \since 4.2-
273-
274 Inserts the given \a widget at the given \a index to this status bar,-
275 reparenting the widget if it isn't already a child of this-
276 QStatusBar object. If \a index is out of range, the widget is appended-
277 (in which case it is the actual index of the widget that is returned).-
278-
279 The \a stretch parameter is used to compute a suitable size for-
280 the given \a widget as the status bar grows and shrinks. The-
281 default stretch factor is 0, i.e giving the widget a minimum of-
282 space.-
283-
284 The widget is located to the far left of the first permanent-
285 widget (see addPermanentWidget()) and may be obscured by temporary-
286 messages.-
287-
288 \sa addWidget(), removeWidget(), addPermanentWidget()-
289*/-
290int QStatusBar::insertWidget(int index, QWidget *widget, int stretch)-
291{-
292 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
293 return -1;
never executed: return -1;
0
294-
295 Q_D(QStatusBar);-
296 QStatusBarPrivate::SBItem* item = new QStatusBarPrivate::SBItem(widget, stretch, false);-
297-
298 int idx = d->indexToLastNonPermanentWidget();-
299 if (index < 0 || index > d->items.size() || (idx >= 0 && index > idx + 1)) {
index < 0Description
TRUEnever evaluated
FALSEnever evaluated
index > d->items.size()Description
TRUEnever evaluated
FALSEnever evaluated
idx >= 0Description
TRUEnever evaluated
FALSEnever evaluated
index > idx + 1Description
TRUEnever evaluated
FALSEnever evaluated
0
300 qWarning("QStatusBar::insertWidget: Index out of range (%d), appending widget", index);-
301 index = idx + 1;-
302 }
never executed: end of block
0
303 d->items.insert(index, item);-
304-
305 if (!d->tempItem.isEmpty())
!d->tempItem.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
306 widget->hide();
never executed: widget->hide();
0
307-
308 reformat();-
309 if (!widget->isHidden() || !widget->testAttribute(Qt::WA_WState_ExplicitShowHide))
!widget->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
!widget->testA...licitShowHide)Description
TRUEnever evaluated
FALSEnever evaluated
0
310 widget->show();
never executed: widget->show();
0
311-
312 return index;
never executed: return index;
0
313}-
314-
315/*!-
316 Adds the given \a widget permanently to this status bar,-
317 reparenting the widget if it isn't already a child of this-
318 QStatusBar object. The \a stretch parameter is used to compute a-
319 suitable size for the given \a widget as the status bar grows and-
320 shrinks. The default stretch factor is 0, i.e giving the widget a-
321 minimum of space.-
322-
323 Permanently means that the widget may not be obscured by temporary-
324 messages. It is is located at the far right of the status bar.-
325-
326 \sa insertPermanentWidget(), removeWidget(), addWidget()-
327*/-
328-
329void QStatusBar::addPermanentWidget(QWidget * widget, int stretch)-
330{-
331 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
332 return;
never executed: return;
0
333 insertPermanentWidget(d_func()->items.size(), widget, stretch);-
334}
never executed: end of block
0
335-
336-
337/*!-
338 \since 4.2-
339-
340 Inserts the given \a widget at the given \a index permanently to this status bar,-
341 reparenting the widget if it isn't already a child of this-
342 QStatusBar object. If \a index is out of range, the widget is appended-
343 (in which case it is the actual index of the widget that is returned).-
344-
345 The \a stretch parameter is used to compute a-
346 suitable size for the given \a widget as the status bar grows and-
347 shrinks. The default stretch factor is 0, i.e giving the widget a-
348 minimum of space.-
349-
350 Permanently means that the widget may not be obscured by temporary-
351 messages. It is is located at the far right of the status bar.-
352-
353 \sa addPermanentWidget(), removeWidget(), addWidget()-
354*/-
355int QStatusBar::insertPermanentWidget(int index, QWidget *widget, int stretch)-
356{-
357 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
358 return -1;
never executed: return -1;
0
359-
360 Q_D(QStatusBar);-
361 QStatusBarPrivate::SBItem* item = new QStatusBarPrivate::SBItem(widget, stretch, true);-
362-
363 int idx = d->indexToLastNonPermanentWidget();-
364 if (index < 0 || index > d->items.size() || (idx >= 0 && index <= idx)) {
index < 0Description
TRUEnever evaluated
FALSEnever evaluated
index > d->items.size()Description
TRUEnever evaluated
FALSEnever evaluated
idx >= 0Description
TRUEnever evaluated
FALSEnever evaluated
index <= idxDescription
TRUEnever evaluated
FALSEnever evaluated
0
365 qWarning("QStatusBar::insertPermanentWidget: Index out of range (%d), appending widget", index);-
366 index = d->items.size();-
367 }
never executed: end of block
0
368 d->items.insert(index, item);-
369-
370 reformat();-
371 if (!widget->isHidden() || !widget->testAttribute(Qt::WA_WState_ExplicitShowHide))
!widget->isHidden()Description
TRUEnever evaluated
FALSEnever evaluated
!widget->testA...licitShowHide)Description
TRUEnever evaluated
FALSEnever evaluated
0
372 widget->show();
never executed: widget->show();
0
373-
374 return index;
never executed: return index;
0
375}-
376-
377/*!-
378 Removes the specified \a widget from the status bar.-
379-
380 \note This function does not delete the widget but \e hides it.-
381 To add the widget again, you must call both the addWidget() and-
382 show() functions.-
383-
384 \sa addWidget(), addPermanentWidget(), clearMessage()-
385*/-
386-
387void QStatusBar::removeWidget(QWidget *widget)-
388{-
389 if (!widget)
!widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
390 return;
never executed: return;
0
391-
392 Q_D(QStatusBar);-
393 bool found = false;-
394 QStatusBarPrivate::SBItem* item;-
395 for (int i=0; i<d->items.size(); ++i) {
i<d->items.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
396 item = d->items.at(i);-
397 if (!item)
!itemDescription
TRUEnever evaluated
FALSEnever evaluated
0
398 break;
never executed: break;
0
399 if (item->w == widget) {
item->w == widgetDescription
TRUEnever evaluated
FALSEnever evaluated
0
400 d->items.removeAt(i);-
401 item->w->hide();-
402 delete item;-
403 found = true;-
404 break;
never executed: break;
0
405 }-
406 }
never executed: end of block
0
407-
408 if (found)
foundDescription
TRUEnever evaluated
FALSEnever evaluated
0
409 reformat();
never executed: reformat();
0
410#if defined(QT_DEBUG)-
411 else-
412 qDebug("QStatusBar::removeWidget(): Widget not found.");
never executed: QMessageLogger(__FILE__, 412, __PRETTY_FUNCTION__).debug("QStatusBar::removeWidget(): Widget not found.");
0
413#endif-
414}-
415-
416/*!-
417 \property QStatusBar::sizeGripEnabled-
418-
419 \brief whether the QSizeGrip in the bottom-right corner of the-
420 status bar is enabled-
421-
422 The size grip is enabled by default.-
423*/-
424-
425bool QStatusBar::isSizeGripEnabled() const-
426{-
427#ifdef QT_NO_SIZEGRIP-
428 return false;-
429#else-
430 Q_D(const QStatusBar);-
431 return !!d->resizer;
never executed: return !!d->resizer;
0
432#endif-
433}-
434-
435void QStatusBar::setSizeGripEnabled(bool enabled)-
436{-
437#ifdef QT_NO_SIZEGRIP-
438 Q_UNUSED(enabled);-
439#else-
440 Q_D(QStatusBar);-
441 if (!enabled != !d->resizer) {
!enabled != !d->resizerDescription
TRUEnever evaluated
FALSEnever evaluated
0
442 if (enabled) {
enabledDescription
TRUEnever evaluated
FALSEnever evaluated
0
443 d->resizer = new QSizeGrip(this);-
444 d->resizer->hide();-
445 d->resizer->installEventFilter(this);-
446 d->showSizeGrip = true;-
447 } else {
never executed: end of block
0
448 delete d->resizer;-
449 d->resizer = 0;-
450 d->showSizeGrip = false;-
451 }
never executed: end of block
0
452 reformat();-
453 if (d->resizer && isVisible())
d->resizerDescription
TRUEnever evaluated
FALSEnever evaluated
isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
454 d->tryToShowSizeGrip();
never executed: d->tryToShowSizeGrip();
0
455 }
never executed: end of block
0
456#endif-
457}
never executed: end of block
0
458-
459-
460/*!-
461 Changes the status bar's appearance to account for item changes.-
462-
463 Special subclasses may need this function, but geometry management-
464 will usually take care of any necessary rearrangements.-
465*/-
466void QStatusBar::reformat()-
467{-
468 Q_D(QStatusBar);-
469 if (d->box)
d->boxDescription
TRUEnever evaluated
FALSEnever evaluated
0
470 delete d->box;
never executed: delete d->box;
0
471-
472 QBoxLayout *vbox;-
473#ifndef QT_NO_SIZEGRIP-
474 if (d->resizer) {
d->resizerDescription
TRUEnever evaluated
FALSEnever evaluated
0
475 d->box = new QHBoxLayout(this);-
476 d->box->setMargin(0);-
477 vbox = new QVBoxLayout;-
478 d->box->addLayout(vbox);-
479 } else
never executed: end of block
0
480#endif-
481 {-
482 vbox = d->box = new QVBoxLayout(this);-
483 d->box->setMargin(0);-
484 }
never executed: end of block
0
485 vbox->addSpacing(3);-
486 QBoxLayout* l = new QHBoxLayout;-
487 vbox->addLayout(l);-
488 l->addSpacing(2);-
489 l->setSpacing(6);-
490-
491 int maxH = fontMetrics().height();-
492-
493 int i;-
494 QStatusBarPrivate::SBItem* item;-
495 for (i=0,item=0; i<d->items.size(); ++i) {
i<d->items.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
496 item = d->items.at(i);-
497 if (!item || item->p)
!itemDescription
TRUEnever evaluated
FALSEnever evaluated
item->pDescription
TRUEnever evaluated
FALSEnever evaluated
0
498 break;
never executed: break;
0
499 l->addWidget(item->w, item->s);-
500 int itemH = qMin(qSmartMinSize(item->w).height(), item->w->maximumHeight());-
501 maxH = qMax(maxH, itemH);-
502 }
never executed: end of block
0
503-
504 l->addStretch(0);-
505-
506 for (item=0; i<d->items.size(); ++i) {
i<d->items.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
507 item = d->items.at(i);-
508 if (!item)
!itemDescription
TRUEnever evaluated
FALSEnever evaluated
0
509 break;
never executed: break;
0
510 l->addWidget(item->w, item->s);-
511 int itemH = qMin(qSmartMinSize(item->w).height(), item->w->maximumHeight());-
512 maxH = qMax(maxH, itemH);-
513 }
never executed: end of block
0
514#ifndef QT_NO_SIZEGRIP-
515 if (d->resizer) {
d->resizerDescription
TRUEnever evaluated
FALSEnever evaluated
0
516 maxH = qMax(maxH, d->resizer->sizeHint().height());-
517 d->box->addSpacing(1);-
518 d->box->addWidget(d->resizer, 0, Qt::AlignBottom);-
519 }
never executed: end of block
0
520#endif-
521 l->addStrut(maxH);-
522 d->savedStrut = maxH;-
523 vbox->addSpacing(2);-
524 d->box->activate();-
525 update();-
526}
never executed: end of block
0
527-
528/*!-
529-
530 Hides the normal status indications and displays the given \a-
531 message for the specified number of milli-seconds (\a{timeout}). If-
532 \a{timeout} is 0 (default), the \a {message} remains displayed until-
533 the clearMessage() slot is called or until the showMessage() slot is-
534 called again to change the message.-
535-
536 Note that showMessage() is called to show temporary explanations of-
537 tool tip texts, so passing a \a{timeout} of 0 is not sufficient to-
538 display a \l{permanent message}{permanent message}.-
539-
540 \sa messageChanged(), currentMessage(), clearMessage()-
541*/-
542void QStatusBar::showMessage(const QString &message, int timeout)-
543{-
544 Q_D(QStatusBar);-
545-
546 if (timeout > 0) {
timeout > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
547 if (!d->timer) {
!d->timerDescription
TRUEnever evaluated
FALSEnever evaluated
0
548 d->timer = new QTimer(this);-
549 connect(d->timer, SIGNAL(timeout()), this, SLOT(clearMessage()));-
550 }
never executed: end of block
0
551 d->timer->start(timeout);-
552 } else if (d->timer) {
never executed: end of block
d->timerDescription
TRUEnever evaluated
FALSEnever evaluated
0
553 delete d->timer;-
554 d->timer = 0;-
555 }
never executed: end of block
0
556 if (d->tempItem == message)
d->tempItem == messageDescription
TRUEnever evaluated
FALSEnever evaluated
0
557 return;
never executed: return;
0
558 d->tempItem = message;-
559-
560 hideOrShow();-
561}
never executed: end of block
0
562-
563/*!-
564 Removes any temporary message being shown.-
565-
566 \sa currentMessage(), showMessage(), removeWidget()-
567*/-
568-
569void QStatusBar::clearMessage()-
570{-
571 Q_D(QStatusBar);-
572 if (d->tempItem.isEmpty())
d->tempItem.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
573 return;
never executed: return;
0
574 if (d->timer) {
d->timerDescription
TRUEnever evaluated
FALSEnever evaluated
0
575 qDeleteInEventHandler(d->timer);-
576 d->timer = 0;-
577 }
never executed: end of block
0
578 d->tempItem.clear();-
579 hideOrShow();-
580}
never executed: end of block
0
581-
582/*!-
583 Returns the temporary message currently shown,-
584 or an empty string if there is no such message.-
585-
586 \sa showMessage()-
587*/-
588QString QStatusBar::currentMessage() const-
589{-
590 Q_D(const QStatusBar);-
591 return d->tempItem;
never executed: return d->tempItem;
0
592}-
593-
594/*!-
595 \fn QStatusBar::messageChanged(const QString &message)-
596-
597 This signal is emitted whenever the temporary status message-
598 changes. The new temporary message is passed in the \a message-
599 parameter which is a null-string when the message has been-
600 removed.-
601-
602 \sa showMessage(), clearMessage()-
603*/-
604-
605/*!-
606 Ensures that the right widgets are visible.-
607-
608 Used by the showMessage() and clearMessage() functions.-
609*/-
610void QStatusBar::hideOrShow()-
611{-
612 Q_D(QStatusBar);-
613 bool haveMessage = !d->tempItem.isEmpty();-
614-
615 QStatusBarPrivate::SBItem* item = 0;-
616 for (int i=0; i<d->items.size(); ++i) {
i<d->items.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
617 item = d->items.at(i);-
618 if (!item || item->p)
!itemDescription
TRUEnever evaluated
FALSEnever evaluated
item->pDescription
TRUEnever evaluated
FALSEnever evaluated
0
619 break;
never executed: break;
0
620 if (haveMessage && item->w->isVisible()) {
haveMessageDescription
TRUEnever evaluated
FALSEnever evaluated
item->w->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
0
621 item->w->hide();-
622 item->w->setAttribute(Qt::WA_WState_ExplicitShowHide, false);-
623 } else if (!haveMessage && !item->w->testAttribute(Qt::WA_WState_ExplicitShowHide)) {
never executed: end of block
!haveMessageDescription
TRUEnever evaluated
FALSEnever evaluated
!item->w->test...licitShowHide)Description
TRUEnever evaluated
FALSEnever evaluated
0
624 item->w->show();-
625 }
never executed: end of block
0
626 }
never executed: end of block
0
627-
628 emit messageChanged(d->tempItem);-
629-
630#ifndef QT_NO_ACCESSIBILITY-
631 if (QAccessible::isActive()) {
QAccessible::isActive()Description
TRUEnever evaluated
FALSEnever evaluated
0
632 QAccessibleEvent event(this, QAccessible::NameChanged);-
633 QAccessible::updateAccessibility(&event);-
634 }
never executed: end of block
0
635#endif-
636-
637 repaint(d->messageRect());-
638}
never executed: end of block
0
639-
640/*!-
641 \reimp-
642 */-
643void QStatusBar::showEvent(QShowEvent *)-
644{-
645#ifndef QT_NO_SIZEGRIP-
646 Q_D(QStatusBar);-
647 if (d->resizer && d->showSizeGrip)
d->resizerDescription
TRUEnever evaluated
FALSEnever evaluated
d->showSizeGripDescription
TRUEnever evaluated
FALSEnever evaluated
0
648 d->tryToShowSizeGrip();
never executed: d->tryToShowSizeGrip();
0
649#endif-
650}
never executed: end of block
0
651-
652/*!-
653 \reimp-
654 \fn void QStatusBar::paintEvent(QPaintEvent *event)-
655-
656 Shows the temporary message, if appropriate, in response to the-
657 paint \a event.-
658*/-
659void QStatusBar::paintEvent(QPaintEvent *event)-
660{-
661 Q_D(QStatusBar);-
662 bool haveMessage = !d->tempItem.isEmpty();-
663-
664 QPainter p(this);-
665 QStyleOption opt;-
666 opt.initFrom(this);-
667 style()->drawPrimitive(QStyle::PE_PanelStatusBar, &opt, &p, this);-
668-
669 for (int i=0; i<d->items.size(); ++i) {
i<d->items.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
670 QStatusBarPrivate::SBItem* item = d->items.at(i);-
671 if (item && item->w->isVisible() && (!haveMessage || item->p)) {
itemDescription
TRUEnever evaluated
FALSEnever evaluated
item->w->isVisible()Description
TRUEnever evaluated
FALSEnever evaluated
!haveMessageDescription
TRUEnever evaluated
FALSEnever evaluated
item->pDescription
TRUEnever evaluated
FALSEnever evaluated
0
672 QRect ir = item->w->geometry().adjusted(-2, -1, 2, 1);-
673 if (event->rect().intersects(ir)) {
event->rect().intersects(ir)Description
TRUEnever evaluated
FALSEnever evaluated
0
674 QStyleOption opt(0);-
675 opt.rect = ir;-
676 opt.palette = palette();-
677 opt.state = QStyle::State_None;-
678 style()->drawPrimitive(QStyle::PE_FrameStatusBarItem, &opt, &p, item->w);-
679 }
never executed: end of block
0
680 }
never executed: end of block
0
681 }
never executed: end of block
0
682 if (haveMessage) {
haveMessageDescription
TRUEnever evaluated
FALSEnever evaluated
0
683 p.setPen(palette().foreground().color());-
684 p.drawText(d->messageRect(), Qt::AlignLeading | Qt::AlignVCenter | Qt::TextSingleLine, d->tempItem);-
685 }
never executed: end of block
0
686}
never executed: end of block
0
687-
688/*!-
689 \reimp-
690*/-
691void QStatusBar::resizeEvent(QResizeEvent * e)-
692{-
693 QWidget::resizeEvent(e);-
694}
never executed: end of block
0
695-
696/*!-
697 \reimp-
698*/-
699-
700bool QStatusBar::event(QEvent *e)-
701{-
702 Q_D(QStatusBar);-
703-
704 if (e->type() == QEvent::LayoutRequest
e->type() == Q...:LayoutRequestDescription
TRUEnever evaluated
FALSEnever evaluated
0
705 ) {-
706 // Calculate new strut height and call reformat() if it has changed-
707 int maxH = fontMetrics().height();-
708-
709 QStatusBarPrivate::SBItem* item = 0;-
710 for (int i=0; i<d->items.size(); ++i) {
i<d->items.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
711 item = d->items.at(i);-
712 if (!item)
!itemDescription
TRUEnever evaluated
FALSEnever evaluated
0
713 break;
never executed: break;
0
714 int itemH = qMin(qSmartMinSize(item->w).height(), item->w->maximumHeight());-
715 maxH = qMax(maxH, itemH);-
716 }
never executed: end of block
0
717-
718#ifndef QT_NO_SIZEGRIP-
719 if (d->resizer)
d->resizerDescription
TRUEnever evaluated
FALSEnever evaluated
0
720 maxH = qMax(maxH, d->resizer->sizeHint().height());
never executed: maxH = qMax(maxH, d->resizer->sizeHint().height());
0
721#endif-
722-
723 if (maxH != d->savedStrut)
maxH != d->savedStrutDescription
TRUEnever evaluated
FALSEnever evaluated
0
724 reformat();
never executed: reformat();
0
725 else-
726 update();
never executed: update();
0
727 }-
728 if (e->type() == QEvent::ChildRemoved) {
e->type() == Q...::ChildRemovedDescription
TRUEnever evaluated
FALSEnever evaluated
0
729 QStatusBarPrivate::SBItem* item = 0;-
730 for (int i=0; i<d->items.size(); ++i) {
i<d->items.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
731 item = d->items.at(i);-
732 if (!item)
!itemDescription
TRUEnever evaluated
FALSEnever evaluated
0
733 break;
never executed: break;
0
734 if (item->w == ((QChildEvent*)e)->child()) {
item->w == ((Q...t*)e)->child()Description
TRUEnever evaluated
FALSEnever evaluated
0
735 d->items.removeAt(i);-
736 delete item;-
737 }
never executed: end of block
0
738 }
never executed: end of block
0
739 }
never executed: end of block
0
740-
741// On Mac OS X Leopard it is possible to drag the window by clicking-
742// on the tool bar on most applications.-
743#ifndef Q_DEAD_CODE_FROM_QT4_MAC-
744 return QWidget::event(e);
never executed: return QWidget::event(e);
0
745#else-
746 if (QSysInfo::MacintoshVersion <= QSysInfo::MV_10_4)-
747 return QWidget::event(e);-
748-
749 // Enable drag-click only if the status bar is the status bar for a-
750 // QMainWindow with a unifed toolbar.-
751 if (parent() == 0 || qobject_cast<QMainWindow *>(parent()) == 0 ||-
752 qobject_cast<QMainWindow *>(parent())->unifiedTitleAndToolBarOnMac() == false )-
753 return QWidget::event(e);-
754-
755 // Check for mouse events.-
756 QMouseEvent *mouseEvent;-
757 if (e->type() == QEvent::MouseButtonPress ||-
758 e->type() == QEvent::MouseMove ||-
759 e->type() == QEvent::MouseButtonRelease) {-
760 mouseEvent = static_cast <QMouseEvent*>(e);-
761 } else {-
762 return QWidget::event(e);-
763 }-
764-
765 // The following is a standard mouse drag handler.-
766 if (e->type() == QEvent::MouseButtonPress && (mouseEvent->button() == Qt::LeftButton)) {-
767 d->dragStart = mouseEvent->pos();-
768 } else if (e->type() == QEvent::MouseMove){-
769 if (d->dragStart == QPoint())-
770 return QWidget::event(e);-
771 QPoint pos = mouseEvent->pos();-
772 QPoint delta = (pos - d->dragStart);-
773 window()->move(window()->pos() + delta);-
774 } else if (e->type() == QEvent::MouseButtonRelease && (mouseEvent->button() == Qt::LeftButton)){-
775 d->dragStart = QPoint();-
776 } else {-
777 return QWidget::event(e);-
778 }-
779-
780 return true;-
781#endif-
782}-
783-
784QT_END_NAMESPACE-
785-
786#include "moc_qstatusbar.cpp"-
787-
788#endif-
Source codeSwitch to Preprocessed file

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