qabstractbutton.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9-
10-
11-
12__attribute__((visibility("default"))) extern bool qt_tab_all_widgets();-
13QAbstractButtonPrivate::QAbstractButtonPrivate(QSizePolicy::ControlType type)-
14 :-
15-
16 shortcutId(0),-
17-
18 checkable(false), checked(false), autoRepeat(false), autoExclusive(false),-
19 down(false), blockRefresh(false), pressed(false),-
20-
21 group(0),-
22-
23 autoRepeatDelay(300),-
24 autoRepeatInterval(100),-
25 controlType(type)-
26{}-
27-
28QList<QAbstractButton *>QAbstractButtonPrivate::queryButtonList() const-
29{-
30-
31 if (group
groupDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
32 return
never executed: return group->d_func()->buttonList;
group->d_func()->buttonList;
never executed: return group->d_func()->buttonList;
0
33-
34-
35 QList<QAbstractButton*>candidates = parent->findChildren<QAbstractButton *>();-
36 if (autoExclusive
autoExclusiveDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
37 for (int iauto isNoMemberOfMyAutoExclusiveGroup = candidates.count() - 1; i >= 0; --i) {[](QAbstractButton *candidate= candidates.at(i);-
if (!) {
38 return
never executed: return !candidate->autoExclusive() || candidate->group() ;
!
never executed: return !candidate->autoExclusive() || candidate->group() ;
never executed: return !candidate->autoExclusive() || candidate->group() ;
candidate->autoExclusive()
never executed: return !candidate->autoExclusive() || candidate->group() ;
0
390
40 || candidate->group()
never executed: return !candidate->autoExclusive() || candidate->group() ;
0
410
42 );
never executed: return !candidate->autoExclusive() || candidate->group() ;
0
43 };-
44 candidates.removeAterase(i);-
}std::remove_if(candidates.begin(), candidates.end(),
45 isNoMemberOfMyAutoExclusiveGroup),-
46 candidates.end());-
47 }
never executed: end of block
0
48 return
never executed: return candidates;
candidates;
never executed: return candidates;
0
49}-
50-
51QAbstractButton *QAbstractButtonPrivate::queryCheckedButton() const-
52{-
53-
54 if (group)-
55 return group->d_func()->checkedButton;-
56-
57-
58 const QAbstractButton * const q = q_func();-
59 QList<QAbstractButton *> buttonList = queryButtonList();-
60 if (!autoExclusive || buttonList.count() == 1)-
61 return 0;-
62-
63 for (int i = 0; i < buttonList.count(); ++i) {-
64 QAbstractButton *b = buttonList.at(i);-
65 if (b->d_func()->checked && b != q)-
66 return b;-
67 }-
68 return checked ? const_cast<QAbstractButton *>(q) : 0;-
69}-
70-
71void QAbstractButtonPrivate::notifyChecked()-
72{-
73-
74 QAbstractButton * const q = q_func();-
75 if (group) {-
76 QAbstractButton *previous = group->d_func()->checkedButton;-
77 group->d_func()->checkedButton = q;-
78 if (group->d_func()->exclusive && previous && previous != q)-
79 previous->nextCheckState();-
80 } else-
81-
82 if (autoExclusive) {-
83 if (QAbstractButton *b = queryCheckedButton())-
84 b->setChecked(false);-
85 }-
86}-
87-
88void QAbstractButtonPrivate::moveFocus(int key)-
89{-
90 QList<QAbstractButton *> buttonList = queryButtonList();;-
91-
92 bool exclusive = group ? group->d_func()->exclusive : autoExclusive;-
93-
94-
95-
96 QWidget *f = QApplication::focusWidget();-
97 QAbstractButton *fb = qobject_cast<QAbstractButton *>(f);-
98 if (!fb || !buttonList.contains(fb))-
99 return;-
100-
101 QAbstractButton *candidate = 0;-
102 int bestScore = -1;-
103 QRect target = f->rect().translated(f->mapToGlobal(QPoint(0,0)));-
104 QPoint goal = target.center();-
105 uint focus_flag = qt_tab_all_widgets() ? Qt::TabFocus : Qt::StrongFocus;-
106-
107 for (int i = 0; i < buttonList.count(); ++i) {-
108 QAbstractButton *button = buttonList.at(i);-
109 if (button != f && button->window() == f->window() && button->isEnabled() && !button->isHidden() &&-
110 (autoExclusive || (button->focusPolicy() & focus_flag) == focus_flag)) {-
111 QRect buttonRect = button->rect().translated(button->mapToGlobal(QPoint(0,0)));-
112 QPoint p = buttonRect.center();-
113-
114-
115-
116-
117 int score;-
118 if ((buttonRect.x() < target.right() && target.x() < buttonRect.right())-
119 && (key == Qt::Key_Up || key == Qt::Key_Down)) {-
120-
121 score = (qAbs(p.y() - goal.y()) << 16) + qAbs(p.x() - goal.x());-
122 } else if ((buttonRect.y() < target.bottom() && target.y() < buttonRect.bottom())-
123 && (key == Qt::Key_Left || key == Qt::Key_Right) ) {-
124-
125 score = (qAbs(p.x() - goal.x()) << 16) + qAbs(p.y() - goal.y());-
126 } else {-
127 score = (1 << 30) + (p.y() - goal.y()) * (p.y() - goal.y()) + (p.x() - goal.x()) * (p.x() - goal.x());-
128 }-
129-
130 if (score > bestScore && candidate)-
131 continue;-
132-
133 switch(key) {-
134 case Qt::Key_Up:-
135 if (p.y() < goal.y()) {-
136 candidate = button;-
137 bestScore = score;-
138 }-
139 break;-
140 case Qt::Key_Down:-
141 if (p.y() > goal.y()) {-
142 candidate = button;-
143 bestScore = score;-
144 }-
145 break;-
146 case Qt::Key_Left:-
147 if (p.x() < goal.x()) {-
148 candidate = button;-
149 bestScore = score;-
150 }-
151 break;-
152 case Qt::Key_Right:-
153 if (p.x() > goal.x()) {-
154 candidate = button;-
155 bestScore = score;-
156 }-
157 break;-
158 }-
159 }-
160 }-
161-
162 if (exclusive-
163-
164-
165-
166 && candidate-
167 && fb->d_func()->checked-
168 && candidate->d_func()->checkable)-
169 candidate->click();-
170-
171 if (candidate) {-
172 if (key == Qt::Key_Up || key == Qt::Key_Left)-
173 candidate->setFocus(Qt::BacktabFocusReason);-
174 else-
175 candidate->setFocus(Qt::TabFocusReason);-
176 }-
177}-
178-
179void QAbstractButtonPrivate::fixFocusPolicy()-
180{-
181 QAbstractButton * const q = q_func();-
182-
183 if (!group && !autoExclusive)-
184-
185-
186-
187 return;-
188-
189 QList<QAbstractButton *> buttonList = queryButtonList();-
190 for (int i = 0; i < buttonList.count(); ++i) {-
191 QAbstractButton *b = buttonList.at(i);-
192 if (!b->isCheckable())-
193 continue;-
194 b->setFocusPolicy((Qt::FocusPolicy) ((b == q || !q->isCheckable())-
195 ? (b->focusPolicy() | Qt::TabFocus)-
196 : (b->focusPolicy() & ~Qt::TabFocus)));-
197 }-
198}-
199-
200void QAbstractButtonPrivate::init()-
201{-
202 QAbstractButton * const q = q_func();-
203-
204 q->setFocusPolicy(Qt::FocusPolicy(q->style()->styleHint(QStyle::SH_Button_FocusPolicy)));-
205 q->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed, controlType));-
206 q->setAttribute(Qt::WA_WState_OwnSizePolicy, false);-
207 q->setForegroundRole(QPalette::ButtonText);-
208 q->setBackgroundRole(QPalette::Button);-
209}-
210-
211void QAbstractButtonPrivate::refresh()-
212{-
213 QAbstractButton * const q = q_func();-
214-
215 if (blockRefresh)-
216 return;-
217 q->update();-
218}-
219-
220void QAbstractButtonPrivate::click()-
221{-
222 QAbstractButton * const q = q_func();-
223-
224 down = false;-
225 blockRefresh = true;-
226 bool changeState = true;-
227 if (checked && queryCheckedButton() == q) {-
228-
229-
230 if (group ? group->d_func()->exclusive : autoExclusive)-
231-
232-
233-
234 changeState = false;-
235 }-
236-
237 QPointer<QAbstractButton> guard(q);-
238 if (changeState) {-
239 q->nextCheckState();-
240 if (!guard)-
241 return;-
242 }-
243 blockRefresh = false;-
244 refresh();-
245 q->repaint();-
246 QApplication::flush();-
247 if (guard)-
248 emitReleased();-
249 if (guard)-
250 emitClicked();-
251}-
252-
253void QAbstractButtonPrivate::emitClicked()-
254{-
255 QAbstractButton * const q = q_func();-
256 QPointer<QAbstractButton> guard(q);-
257 q->clicked(checked);-
258-
259 if (guard && group) {-
260 group->buttonClicked(group->id(q));-
261 if (guard && group)-
262 group->buttonClicked(q);-
263 }-
264-
265}-
266-
267void QAbstractButtonPrivate::emitPressed()-
268{-
269 QAbstractButton * const q = q_func();-
270 QPointer<QAbstractButton> guard(q);-
271 q->pressed();-
272-
273 if (guard && group) {-
274 group->buttonPressed(group->id(q));-
275 if (guard && group)-
276 group->buttonPressed(q);-
277 }-
278-
279}-
280-
281void QAbstractButtonPrivate::emitReleased()-
282{-
283 QAbstractButton * const q = q_func();-
284 QPointer<QAbstractButton> guard(q);-
285 q->released();-
286-
287 if (guard && group) {-
288 group->buttonReleased(group->id(q));-
289 if (guard && group)-
290 group->buttonReleased(q);-
291 }-
292-
293}-
294-
295void QAbstractButtonPrivate::emitToggled(bool checked)-
296{-
297 QAbstractButton * const q = q_func();-
298 QPointer<QAbstractButton> guard(q);-
299 q->toggled(checked);-
300-
301 if (guard && group) {-
302 group->buttonToggled(group->id(q), checked);-
303 if (guard && group)-
304 group->buttonToggled(q, checked);-
305 }-
306-
307}-
308-
309-
310-
311-
312QAbstractButton::QAbstractButton(QWidget *parent)-
313 : QWidget(*new QAbstractButtonPrivate, parent, 0)-
314{-
315 QAbstractButtonPrivate * const d = d_func();-
316 d->init();-
317}-
318-
319-
320-
321-
322 QAbstractButton::~QAbstractButton()-
323{-
324-
325 QAbstractButtonPrivate * const d = d_func();-
326 if (d->group)-
327 d->group->removeButton(this);-
328-
329}-
330-
331-
332-
333-
334QAbstractButton::QAbstractButton(QAbstractButtonPrivate &dd, QWidget *parent)-
335 : QWidget(dd, parent, 0)-
336{-
337 QAbstractButtonPrivate * const d = d_func();-
338 d->init();-
339}-
340void QAbstractButton::setText(const QString &text)-
341{-
342 QAbstractButtonPrivate * const d = d_func();-
343 if (d->text == text)-
344 return;-
345 d->text = text;-
346-
347 QKeySequence newMnemonic = QKeySequence::mnemonic(text);-
348 setShortcut(newMnemonic);-
349-
350 d->sizeHint = QSize();-
351 update();-
352 updateGeometry();-
353-
354 QAccessibleEvent event(this, QAccessible::NameChanged);-
355 QAccessible::updateAccessibility(&event);-
356-
357}-
358-
359QString QAbstractButton::text() const-
360{-
361 const QAbstractButtonPrivate * const d = d_func();-
362 return d->text;-
363}-
364void QAbstractButton::setIcon(const QIcon &icon)-
365{-
366 QAbstractButtonPrivate * const d = d_func();-
367 d->icon = icon;-
368 d->sizeHint = QSize();-
369 update();-
370 updateGeometry();-
371}-
372-
373QIcon QAbstractButton::icon() const-
374{-
375 const QAbstractButtonPrivate * const d = d_func();-
376 return d->icon;-
377}-
378-
379-
380-
381-
382-
383-
384-
385void QAbstractButton::setShortcut(const QKeySequence &key)-
386{-
387 QAbstractButtonPrivate * const d = d_func();-
388 if (d->shortcutId != 0)-
389 releaseShortcut(d->shortcutId);-
390 d->shortcut = key;-
391 d->shortcutId = grabShortcut(key);-
392}-
393-
394QKeySequence QAbstractButton::shortcut() const-
395{-
396 const QAbstractButtonPrivate * const d = d_func();-
397 return d->shortcut;-
398}-
399void QAbstractButton::setCheckable(bool checkable)-
400{-
401 QAbstractButtonPrivate * const d = d_func();-
402 if (d->checkable == checkable)-
403 return;-
404-
405 d->checkable = checkable;-
406 d->checked = false;-
407}-
408-
409bool QAbstractButton::isCheckable() const-
410{-
411 const QAbstractButtonPrivate * const d = d_func();-
412 return d->checkable;-
413}-
414void QAbstractButton::setChecked(bool checked)-
415{-
416 QAbstractButtonPrivate * const d = d_func();-
417 if (!d->checkable || d->checked == checked) {-
418 if (!d->blockRefresh)-
419 checkStateSet();-
420 return;-
421 }-
422-
423 if (!checked && d->queryCheckedButton() == this) {-
424-
425-
426 if (d->group ? d->group->d_func()->exclusive : d->autoExclusive)-
427 return;-
428 if (d->group)-
429 d->group->d_func()->detectCheckedButton();-
430-
431-
432-
433-
434 }-
435-
436 QPointer<QAbstractButton> guard(this);-
437-
438 d->checked = checked;-
439 if (!d->blockRefresh)-
440 checkStateSet();-
441 d->refresh();-
442-
443 if (guard && checked)-
444 d->notifyChecked();-
445 if (guard)-
446 d->emitToggled(checked);-
447-
448-
449-
450 QAccessible::State s;-
451 s.checked = true;-
452 QAccessibleStateChangeEvent event(this, s);-
453 QAccessible::updateAccessibility(&event);-
454-
455}-
456-
457bool QAbstractButton::isChecked() const-
458{-
459 const QAbstractButtonPrivate * const d = d_func();-
460 return d->checked;-
461}-
462void QAbstractButton::setDown(bool down)-
463{-
464 QAbstractButtonPrivate * const d = d_func();-
465 if (d->down == down)-
466 return;-
467 d->down = down;-
468 d->refresh();-
469 if (d->autoRepeat && d->down)-
470 d->repeatTimer.start(d->autoRepeatDelay, this);-
471 else-
472 d->repeatTimer.stop();-
473}-
474-
475bool QAbstractButton::isDown() const-
476{-
477 const QAbstractButtonPrivate * const d = d_func();-
478 return d->down;-
479}-
480void QAbstractButton::setAutoRepeat(bool autoRepeat)-
481{-
482 QAbstractButtonPrivate * const d = d_func();-
483 if (d->autoRepeat == autoRepeat)-
484 return;-
485 d->autoRepeat = autoRepeat;-
486 if (d->autoRepeat && d->down)-
487 d->repeatTimer.start(d->autoRepeatDelay, this);-
488 else-
489 d->repeatTimer.stop();-
490}-
491-
492bool QAbstractButton::autoRepeat() const-
493{-
494 const QAbstractButtonPrivate * const d = d_func();-
495 return d->autoRepeat;-
496}-
497void QAbstractButton::setAutoRepeatDelay(int autoRepeatDelay)-
498{-
499 QAbstractButtonPrivate * const d = d_func();-
500 d->autoRepeatDelay = autoRepeatDelay;-
501}-
502-
503int QAbstractButton::autoRepeatDelay() const-
504{-
505 const QAbstractButtonPrivate * const d = d_func();-
506 return d->autoRepeatDelay;-
507}-
508void QAbstractButton::setAutoRepeatInterval(int autoRepeatInterval)-
509{-
510 QAbstractButtonPrivate * const d = d_func();-
511 d->autoRepeatInterval = autoRepeatInterval;-
512}-
513-
514int QAbstractButton::autoRepeatInterval() const-
515{-
516 const QAbstractButtonPrivate * const d = d_func();-
517 return d->autoRepeatInterval;-
518}-
519void QAbstractButton::setAutoExclusive(bool autoExclusive)-
520{-
521 QAbstractButtonPrivate * const d = d_func();-
522 d->autoExclusive = autoExclusive;-
523}-
524-
525bool QAbstractButton::autoExclusive() const-
526{-
527 const QAbstractButtonPrivate * const d = d_func();-
528 return d->autoExclusive;-
529}-
530QButtonGroup *QAbstractButton::group() const-
531{-
532 const QAbstractButtonPrivate * const d = d_func();-
533 return d->group;-
534}-
535void QAbstractButton::animateClick(int msec)-
536{-
537 if (!isEnabled())-
538 return;-
539 QAbstractButtonPrivate * const d = d_func();-
540 if (d->checkable && focusPolicy() & Qt::ClickFocus)-
541 setFocus();-
542 setDown(true);-
543 repaint();-
544 QApplication::flush();-
545 if (!d->animateTimer.isActive())-
546 d->emitPressed();-
547 d->animateTimer.start(msec, this);-
548}-
549void QAbstractButton::click()-
550{-
551 if (!isEnabled())-
552 return;-
553 QAbstractButtonPrivate * const d = d_func();-
554 QPointer<QAbstractButton> guard(this);-
555 d->down = true;-
556 d->emitPressed();-
557 if (guard) {-
558 d->down = false;-
559 nextCheckState();-
560 if (guard)-
561 d->emitReleased();-
562 if (guard)-
563 d->emitClicked();-
564 }-
565}-
566-
567-
568-
569-
570-
571-
572-
573void QAbstractButton::toggle()-
574{-
575 QAbstractButtonPrivate * const d = d_func();-
576 setChecked(!d->checked);-
577}-
578void QAbstractButton::checkStateSet()-
579{-
580}-
581void QAbstractButton::nextCheckState()-
582{-
583 if (isCheckable())-
584 setChecked(!isChecked());-
585}-
586bool QAbstractButton::hitButton(const QPoint &pos) const-
587{-
588 return rect().contains(pos);-
589}-
590-
591-
592bool QAbstractButton::event(QEvent *e)-
593{-
594-
595-
596 if (!isEnabled()) {-
597 switch(e->type()) {-
598 case QEvent::TabletPress:-
599 case QEvent::TabletRelease:-
600 case QEvent::TabletMove:-
601 case QEvent::MouseButtonPress:-
602 case QEvent::MouseButtonRelease:-
603 case QEvent::MouseButtonDblClick:-
604 case QEvent::MouseMove:-
605 case QEvent::HoverMove:-
606 case QEvent::HoverEnter:-
607 case QEvent::HoverLeave:-
608 case QEvent::ContextMenu:-
609-
610 case QEvent::Wheel:-
611-
612 return true;-
613 default:-
614 break;-
615 }-
616 }-
617-
618-
619 if (e->type() == QEvent::Shortcut) {-
620 QAbstractButtonPrivate * const d = d_func();-
621 QShortcutEvent *se = static_cast<QShortcutEvent *>(e);-
622 if (d->shortcutId != se->shortcutId())-
623 return false;-
624 if (!se->isAmbiguous()) {-
625 if (!d->animateTimer.isActive())-
626 animateClick();-
627 } else {-
628 if (focusPolicy() != Qt::NoFocus)-
629 setFocus(Qt::ShortcutFocusReason);-
630 window()->setAttribute(Qt::WA_KeyboardFocusChange);-
631 }-
632 return true;-
633 }-
634-
635 return QWidget::event(e);-
636}-
637-
638-
639void QAbstractButton::mousePressEvent(QMouseEvent *e)-
640{-
641 QAbstractButtonPrivate * const d = d_func();-
642 if (e->button() != Qt::LeftButton) {-
643 e->ignore();-
644 return;-
645 }-
646 if (hitButton(e->pos())) {-
647 setDown(true);-
648 d->pressed = true;-
649 repaint();-
650 QApplication::flush();-
651 d->emitPressed();-
652 e->accept();-
653 } else {-
654 e->ignore();-
655 }-
656}-
657-
658-
659void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)-
660{-
661 QAbstractButtonPrivate * const d = d_func();-
662 d->pressed = false;-
663-
664 if (e->button() != Qt::LeftButton) {-
665 e->ignore();-
666 return;-
667 }-
668-
669 if (!d->down) {-
670-
671 d->refresh();-
672 e->ignore();-
673 return;-
674 }-
675-
676 if (hitButton(e->pos())) {-
677 d->repeatTimer.stop();-
678 d->click();-
679 e->accept();-
680 } else {-
681 setDown(false);-
682 e->ignore();-
683 }-
684}-
685-
686-
687void QAbstractButton::mouseMoveEvent(QMouseEvent *e)-
688{-
689 QAbstractButtonPrivate * const d = d_func();-
690 if (!(e->buttons() & Qt::LeftButton) || !d->pressed) {-
691 e->ignore();-
692 return;-
693 }-
694-
695 if (hitButton(e->pos()) != d->down) {-
696 setDown(!d->down);-
697 repaint();-
698 QApplication::flush();-
699 if (d->down)-
700 d->emitPressed();-
701 else-
702 d->emitReleased();-
703 e->accept();-
704 } else if (!hitButton(e->pos())) {-
705 e->ignore();-
706 }-
707}-
708-
709-
710void QAbstractButton::keyPressEvent(QKeyEvent *e)-
711{-
712 QAbstractButtonPrivate * const d = d_func();-
713 bool next = true;-
714 switch (e->key()) {-
715 case Qt::Key_Enter:-
716 case Qt::Key_Return:-
717 e->ignore();-
718 break;-
719 case Qt::Key_Select:-
720 case Qt::Key_Space:-
721 if (!e->isAutoRepeat()) {-
722 setDown(true);-
723 repaint();-
724 QApplication::flush();-
725 d->emitPressed();-
726 }-
727 break;-
728 case Qt::Key_Up:-
729 next = false;-
730-
731 case Qt::Key_Left:-
732 case Qt::Key_Right:-
733 case Qt::Key_Down: {-
734 QWidget *pw = parentWidget();-
735 if (d->autoExclusive-
736-
737 || d->group-
738-
739-
740 || (pw && qobject_cast<QAbstractItemView *>(pw->parentWidget()))-
741-
742 ) {-
743-
744-
745-
746-
747 d->moveFocus(e->key());-
748 if (hasFocus())-
749 e->ignore();-
750 } else {-
751-
752 QWidget *w = pw ? pw : this;-
753 bool reverse = (w->layoutDirection() == Qt::RightToLeft);-
754 if ((e->key() == Qt::Key_Left && !reverse)-
755 || (e->key() == Qt::Key_Right && reverse)) {-
756 next = false;-
757 }-
758 focusNextPrevChild(next);-
759 }-
760 break;-
761 }-
762 default:-
763 if (e->matches(QKeySequence::Cancel) && d->down) {-
764 setDown(false);-
765 repaint();-
766 QApplication::flush();-
767 d->emitReleased();-
768 return;-
769 }-
770 e->ignore();-
771 }-
772}-
773-
774-
775void QAbstractButton::keyReleaseEvent(QKeyEvent *e)-
776{-
777 QAbstractButtonPrivate * const d = d_func();-
778-
779 if (!e->isAutoRepeat())-
780 d->repeatTimer.stop();-
781-
782 switch (e->key()) {-
783 case Qt::Key_Select:-
784 case Qt::Key_Space:-
785 if (!e->isAutoRepeat() && d->down)-
786 d->click();-
787 break;-
788 default:-
789 e->ignore();-
790 }-
791}-
792-
793-
794-
795void QAbstractButton::timerEvent(QTimerEvent *e)-
796{-
797 QAbstractButtonPrivate * const d = d_func();-
798 if (e->timerId() == d->repeatTimer.timerId()) {-
799 d->repeatTimer.start(d->autoRepeatInterval, this);-
800 if (d->down) {-
801 QPointer<QAbstractButton> guard(this);-
802 nextCheckState();-
803 if (guard)-
804 d->emitReleased();-
805 if (guard)-
806 d->emitClicked();-
807 if (guard)-
808 d->emitPressed();-
809 }-
810 } else if (e->timerId() == d->animateTimer.timerId()) {-
811 d->animateTimer.stop();-
812 d->click();-
813 }-
814}-
815-
816-
817void QAbstractButton::focusInEvent(QFocusEvent *e)-
818{-
819 QAbstractButtonPrivate * const d = d_func();-
820-
821-
822-
823 d->fixFocusPolicy();-
824 QWidget::focusInEvent(e);-
825}-
826-
827-
828void QAbstractButton::focusOutEvent(QFocusEvent *e)-
829{-
830 QAbstractButtonPrivate * const d = d_func();-
831 if (e->reason() != Qt::PopupFocusReason && d->down) {-
832 d->down = false;-
833 d->emitReleased();-
834 }-
835 QWidget::focusOutEvent(e);-
836}-
837-
838-
839void QAbstractButton::changeEvent(QEvent *e)-
840{-
841 QAbstractButtonPrivate * const d = d_func();-
842 switch (e->type()) {-
843 case QEvent::EnabledChange:-
844 if (!isEnabled() && d->down) {-
845 d->down = false;-
846 d->emitReleased();-
847 }-
848 break;-
849 default:-
850 d->sizeHint = QSize();-
851 break;-
852 }-
853 QWidget::changeEvent(e);-
854}-
855QSize QAbstractButton::iconSize() const-
856{-
857 const QAbstractButtonPrivate * const d = d_func();-
858 if (d->iconSize.isValid())-
859 return d->iconSize;-
860 int e = style()->pixelMetric(QStyle::PM_ButtonIconSize, 0, this);-
861 return QSize(e, e);-
862}-
863-
864void QAbstractButton::setIconSize(const QSize &size)-
865{-
866 QAbstractButtonPrivate * const d = d_func();-
867 if (d->iconSize == size)-
868 return;-
869-
870 d->iconSize = size;-
871 d->sizeHint = QSize();-
872 updateGeometry();-
873 if (isVisible()) {-
874 update();-
875 }-
876}-
877-
878-
879-
880-
881-
Switch to Source codePreprocessed file

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