diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2017-02-03 15:55:49 +0100 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2017-02-09 14:11:00 +0000 |
commit | 92dc1752d477cfa5ea72e6a0489d21a42213371c (patch) | |
tree | 52556bc7a7f189c81ce1d2874f34e7006451d8b7 /tests/manual/windowflags/controls.cpp | |
parent | 2aa62dad1d0de1142d446ecc4a6b38393231a17d (diff) |
windowflags test: Don't assume window states can not be compound
The controls need to reflect the facts that e.g. maximized and fullscreen
can both be set at the same time, the same way a window can be minimized
and fullscreen.
Change-Id: I7f3e354a5efaefb9f51e6b1f24fa35980fe35899
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'tests/manual/windowflags/controls.cpp')
-rw-r--r-- | tests/manual/windowflags/controls.cpp | 96 |
1 files changed, 33 insertions, 63 deletions
diff --git a/tests/manual/windowflags/controls.cpp b/tests/manual/windowflags/controls.cpp index 319f6aac8e..c167e5f8bf 100644 --- a/tests/manual/windowflags/controls.cpp +++ b/tests/manual/windowflags/controls.cpp @@ -161,97 +161,71 @@ void HintControl::slotCheckBoxChanged() emit changed(hints()); } -WindowStateControl::WindowStateControl(unsigned flags, QWidget *parent) +WindowStateControl::WindowStateControl(QWidget *parent) : QWidget(parent) , group(new QButtonGroup) - , visibleCheckBox(0) - , restoreButton(new QRadioButton(tr("Normal"))) - , minimizeButton(0) - , maximizeButton(new QRadioButton(tr("Maximized"))) - , fullscreenButton(new QRadioButton(tr("Fullscreen"))) + , restoreButton(new QCheckBox(tr("Normal"))) + , minimizeButton(new QCheckBox(tr("Minimized"))) + , maximizeButton(new QCheckBox(tr("Maximized"))) + , fullscreenButton(new QCheckBox(tr("Fullscreen"))) { QHBoxLayout *layout = new QHBoxLayout(this); - layout->setSpacing(0); + group->setExclusive(false); layout->setMargin(ControlLayoutMargin); - if (flags & WantVisibleCheckBox) { - visibleCheckBox = new QCheckBox(tr("Visible")); - connect(visibleCheckBox, SIGNAL(toggled(bool)), this, SIGNAL(changed())); - layout->addWidget(visibleCheckBox); - } - - group->setExclusive(true); - if (flags & WantMinimizeRadioButton) { - minimizeButton = new QRadioButton(tr("Minimized")); - group->addButton(minimizeButton, Qt::WindowMinimized); - layout->addWidget(minimizeButton); - } group->addButton(restoreButton, Qt::WindowNoState); + restoreButton->setEnabled(false); layout->addWidget(restoreButton); + group->addButton(minimizeButton, Qt::WindowMinimized); + layout->addWidget(minimizeButton); group->addButton(maximizeButton, Qt::WindowMaximized); layout->addWidget(maximizeButton); group->addButton(fullscreenButton, Qt::WindowFullScreen); layout->addWidget(fullscreenButton); - connect(group, SIGNAL(buttonReleased(int)), this, SIGNAL(changed())); + connect(group, SIGNAL(buttonReleased(int)), this, SIGNAL(stateChanged(int))); } -Qt::WindowState WindowStateControl::state() const +Qt::WindowStates WindowStateControl::state() const { - return Qt::WindowState(group->checkedId()); + Qt::WindowStates states; + foreach (QAbstractButton *button, group->buttons()) { + if (button->isChecked()) + states |= Qt::WindowState(group->id(button)); + } + return states; } -void WindowStateControl::setState(Qt::WindowState s) +void WindowStateControl::setState(Qt::WindowStates s) { group->blockSignals(true); - if (QAbstractButton *b = group->button(s)) - b->setChecked(true); - group->blockSignals(false); -} + foreach (QAbstractButton *button, group->buttons()) + button->setChecked(s & Qt::WindowState(group->id(button))); -bool WindowStateControl::visibleValue() const -{ - return visibleCheckBox && visibleCheckBox->isChecked(); -} + if (!(s & (Qt::WindowMaximized | Qt::WindowFullScreen))) + restoreButton->setChecked(true); -void WindowStateControl::setVisibleValue(bool v) -{ - if (visibleCheckBox) { - visibleCheckBox->blockSignals(true); - visibleCheckBox->setChecked(v); - visibleCheckBox->blockSignals(false); - } + group->blockSignals(false); } -WindowStatesControl::WindowStatesControl(unsigned flags, QWidget *parent) +WindowStatesControl::WindowStatesControl(QWidget *parent) : QGroupBox(tr("States"), parent) - , visibleCheckBox(0) - , activeCheckBox(0) - , minimizeCheckBox(new QCheckBox(tr("Minimized"))) - , stateControl(new WindowStateControl(0)) + , visibleCheckBox(new QCheckBox(tr("Visible"))) + , activeCheckBox(new QCheckBox(tr("Active"))) + , stateControl(new WindowStateControl) { QHBoxLayout *layout = new QHBoxLayout(this); layout->setSpacing(0); layout->setMargin(ControlLayoutMargin); - if (flags & WantVisibleCheckBox) { - visibleCheckBox = new QCheckBox(tr("Visible")); - connect(visibleCheckBox, SIGNAL(toggled(bool)), this, SIGNAL(changed())); - layout->addWidget(visibleCheckBox); - } - if (flags & WantActiveCheckBox) { - activeCheckBox = new QCheckBox(tr("Active")); - connect(activeCheckBox, SIGNAL(toggled(bool)), this, SIGNAL(changed())); - layout->addWidget(activeCheckBox); - } - layout->addWidget(minimizeCheckBox); + connect(visibleCheckBox, SIGNAL(toggled(bool)), this, SIGNAL(changed())); + layout->addWidget(visibleCheckBox); + connect(activeCheckBox, SIGNAL(toggled(bool)), this, SIGNAL(changed())); + layout->addWidget(activeCheckBox); layout->addWidget(stateControl); - connect(stateControl, SIGNAL(changed()), this, SIGNAL(changed())); - connect(minimizeCheckBox, SIGNAL(clicked()), this, SIGNAL(changed())); + connect(stateControl, SIGNAL(stateChanged(int)), this, SIGNAL(changed())); } Qt::WindowStates WindowStatesControl::states() const { Qt::WindowStates s = stateControl->state(); - if (minimizeCheckBox->isChecked()) - s |= Qt::WindowMinimized; if (activeValue()) s |= Qt::WindowActive; return s; @@ -259,11 +233,7 @@ Qt::WindowStates WindowStatesControl::states() const void WindowStatesControl::setStates(Qt::WindowStates s) { - minimizeCheckBox->blockSignals(true); - minimizeCheckBox->setChecked(s & Qt::WindowMinimized); - minimizeCheckBox->blockSignals(false); - s &= ~Qt::WindowMinimized; - stateControl->setState(Qt::WindowState(int(s))); + stateControl->setState(s); setActiveValue(s & Qt::WindowActive); } |