From 9b7739899e5040cb6fbb4825a6ac96d9eaca60d6 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 20 Apr 2012 13:54:52 +0200 Subject: Window geometry manual tests: Add Window state controls. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Factor out controls from the window flags test, split state into Qt::WindowState (QWindow) and Qt::WindowStates(Qt::Widget). - Add to geometry test. Change-Id: I25b9a8696bfb7f4faef113ac82559ebb90a140c5 Reviewed-by: Morten Johan Sørvig --- tests/manual/windowflags/controls.cpp | 314 ++++++++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100644 tests/manual/windowflags/controls.cpp (limited to 'tests/manual/windowflags/controls.cpp') diff --git a/tests/manual/windowflags/controls.cpp b/tests/manual/windowflags/controls.cpp new file mode 100644 index 0000000000..bdd8894c0d --- /dev/null +++ b/tests/manual/windowflags/controls.cpp @@ -0,0 +1,314 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "controls.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +HintControl::HintControl(QWidget *parent) + : QGroupBox(tr("Hints"), parent) + , msWindowsFixedSizeDialogCheckBox(new QCheckBox(tr("MS Windows fixed size dialog"))) + , x11BypassWindowManagerCheckBox(new QCheckBox(tr("X11 bypass window manager"))) + , framelessWindowCheckBox(new QCheckBox(tr("Frameless window"))) + , windowTitleCheckBox(new QCheckBox(tr("Window title"))) + , windowSystemMenuCheckBox(new QCheckBox(tr("Window system menu"))) + , windowMinimizeButtonCheckBox(new QCheckBox(tr("Window minimize button"))) + , windowMaximizeButtonCheckBox(new QCheckBox(tr("Window maximize button"))) + , windowCloseButtonCheckBox(new QCheckBox(tr("Window close button"))) + , windowContextHelpButtonCheckBox(new QCheckBox(tr("Window context help button"))) + , windowShadeButtonCheckBox(new QCheckBox(tr("Window shade button"))) + , windowStaysOnTopCheckBox(new QCheckBox(tr("Window stays on top"))) + , windowStaysOnBottomCheckBox(new QCheckBox(tr("Window stays on bottom"))) + , customizeWindowHintCheckBox(new QCheckBox(tr("Customize window"))) +{ + connect(msWindowsFixedSizeDialogCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(x11BypassWindowManagerCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(framelessWindowCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(windowTitleCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(windowSystemMenuCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(windowMinimizeButtonCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(windowMaximizeButtonCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(windowCloseButtonCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(windowContextHelpButtonCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(windowShadeButtonCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(windowStaysOnTopCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(windowStaysOnBottomCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + connect(customizeWindowHintCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged())); + QGridLayout *layout = new QGridLayout(this); + layout->setSpacing(0); + layout->setMargin(ControlLayoutMargin); + layout->addWidget(msWindowsFixedSizeDialogCheckBox, 0, 0); + layout->addWidget(x11BypassWindowManagerCheckBox, 1, 0); + layout->addWidget(framelessWindowCheckBox, 2, 0); + layout->addWidget(windowTitleCheckBox, 3, 0); + layout->addWidget(windowSystemMenuCheckBox, 4, 0); + layout->addWidget(windowMinimizeButtonCheckBox, 0, 1); + layout->addWidget(windowMaximizeButtonCheckBox, 1, 1); + layout->addWidget(windowCloseButtonCheckBox, 2, 1); + layout->addWidget(windowContextHelpButtonCheckBox, 3, 1); + layout->addWidget(windowShadeButtonCheckBox, 4, 1); + layout->addWidget(windowStaysOnTopCheckBox, 5, 1); + layout->addWidget(windowStaysOnBottomCheckBox, 6, 1); + layout->addWidget(customizeWindowHintCheckBox, 5, 0); +} + +Qt::WindowFlags HintControl::hints() const +{ + Qt::WindowFlags flags = 0; + if (msWindowsFixedSizeDialogCheckBox->isChecked()) + flags |= Qt::MSWindowsFixedSizeDialogHint; + if (x11BypassWindowManagerCheckBox->isChecked()) + flags |= Qt::X11BypassWindowManagerHint; + if (framelessWindowCheckBox->isChecked()) + flags |= Qt::FramelessWindowHint; + if (windowTitleCheckBox->isChecked()) + flags |= Qt::WindowTitleHint; + if (windowSystemMenuCheckBox->isChecked()) + flags |= Qt::WindowSystemMenuHint; + if (windowMinimizeButtonCheckBox->isChecked()) + flags |= Qt::WindowMinimizeButtonHint; + if (windowMaximizeButtonCheckBox->isChecked()) + flags |= Qt::WindowMaximizeButtonHint; + if (windowCloseButtonCheckBox->isChecked()) + flags |= Qt::WindowCloseButtonHint; + if (windowContextHelpButtonCheckBox->isChecked()) + flags |= Qt::WindowContextHelpButtonHint; + if (windowShadeButtonCheckBox->isChecked()) + flags |= Qt::WindowShadeButtonHint; + if (windowStaysOnTopCheckBox->isChecked()) + flags |= Qt::WindowStaysOnTopHint; + if (windowStaysOnBottomCheckBox->isChecked()) + flags |= Qt::WindowStaysOnBottomHint; + if (customizeWindowHintCheckBox->isChecked()) + flags |= Qt::CustomizeWindowHint; + return flags; +} + +void HintControl::setHints(Qt::WindowFlags flags) +{ + msWindowsFixedSizeDialogCheckBox->setChecked(flags & Qt::MSWindowsFixedSizeDialogHint); + x11BypassWindowManagerCheckBox->setChecked(flags & Qt::X11BypassWindowManagerHint); + framelessWindowCheckBox->setChecked(flags & Qt::FramelessWindowHint); + windowTitleCheckBox->setChecked(flags & Qt::WindowTitleHint); + windowSystemMenuCheckBox->setChecked(flags & Qt::WindowSystemMenuHint); + windowMinimizeButtonCheckBox->setChecked(flags & Qt::WindowMinimizeButtonHint); + windowMaximizeButtonCheckBox->setChecked(flags & Qt::WindowMaximizeButtonHint); + windowCloseButtonCheckBox->setChecked(flags & Qt::WindowCloseButtonHint); + windowContextHelpButtonCheckBox->setChecked(flags & Qt::WindowContextHelpButtonHint); + windowShadeButtonCheckBox->setChecked(flags & Qt::WindowShadeButtonHint); + windowStaysOnTopCheckBox->setChecked(flags & Qt::WindowStaysOnTopHint); + windowStaysOnBottomCheckBox->setChecked(flags & Qt::WindowStaysOnBottomHint); + customizeWindowHintCheckBox->setChecked(flags & Qt::CustomizeWindowHint); +} + +void HintControl::slotCheckBoxChanged() +{ + emit changed(hints()); +} + +WindowStateControl::WindowStateControl(unsigned flags, 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"))) +{ + 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); + } + + group->setExclusive(true); + if (flags & WantMinimizeRadioButton) { + minimizeButton = new QRadioButton(tr("Minimized")); + group->addButton(minimizeButton, Qt::WindowMinimized); + layout->addWidget(minimizeButton); + } + group->addButton(restoreButton, Qt::WindowNoState); + layout->addWidget(restoreButton); + group->addButton(maximizeButton, Qt::WindowMaximized); + layout->addWidget(maximizeButton); + group->addButton(fullscreenButton, Qt::WindowFullScreen); + layout->addWidget(fullscreenButton); + connect(group, SIGNAL(buttonReleased(int)), this, SIGNAL(changed())); +} + +Qt::WindowState WindowStateControl::state() const +{ + return Qt::WindowState(group->checkedId()); +} + +void WindowStateControl::setState(Qt::WindowState s) +{ + group->blockSignals(true); + if (QAbstractButton *b = group->button(s)) + b->setChecked(true); + group->blockSignals(false); +} + +bool WindowStateControl::visibleValue() const +{ + return visibleCheckBox && visibleCheckBox->isChecked(); +} + +void WindowStateControl::setVisibleValue(bool v) +{ + if (visibleCheckBox) { + visibleCheckBox->blockSignals(true); + visibleCheckBox->setChecked(v); + visibleCheckBox->blockSignals(false); + } +} + +WindowStatesControl::WindowStatesControl(unsigned flags, QWidget *parent) + : QGroupBox(tr("States"), parent) + , visibleCheckBox(0) + , minimizeCheckBox(new QCheckBox(tr("Minimized"))) + , stateControl(new WindowStateControl(0)) +{ + 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); + } + layout->addWidget(minimizeCheckBox); + layout->addWidget(stateControl); + connect(stateControl, SIGNAL(changed()), this, SIGNAL(changed())); + connect(minimizeCheckBox, SIGNAL(clicked()), this, SIGNAL(changed())); +} + +Qt::WindowStates WindowStatesControl::states() const +{ + Qt::WindowStates s = stateControl->state(); + if (minimizeCheckBox->isChecked()) + s |= Qt::WindowMinimized; + return s; +} + +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))); +} + +bool WindowStatesControl::visibleValue() const +{ + return visibleCheckBox && visibleCheckBox->isChecked(); +} + +void WindowStatesControl::setVisibleValue(bool v) +{ + if (visibleCheckBox) { + visibleCheckBox->blockSignals(true); + visibleCheckBox->setChecked(v); + visibleCheckBox->blockSignals(false); + } +} + +TypeControl::TypeControl(QWidget *parent) + : QGroupBox(tr("Type"), parent) + , group(new QButtonGroup) + , windowRadioButton(new QRadioButton(tr("Window"))) + , dialogRadioButton(new QRadioButton(tr("Dialog"))) + , sheetRadioButton(new QRadioButton(tr("Sheet"))) + , drawerRadioButton(new QRadioButton(tr("Drawer"))) + , popupRadioButton(new QRadioButton(tr("Popup"))) + , toolRadioButton(new QRadioButton(tr("Tool"))) + , toolTipRadioButton(new QRadioButton(tr("Tooltip"))) + , splashScreenRadioButton(new QRadioButton(tr("Splash screen"))) +{ + group->setExclusive(true); + QGridLayout *layout = new QGridLayout(this); + layout->setSpacing(0); + layout->setMargin(ControlLayoutMargin); + group->addButton(windowRadioButton, Qt::Window); + layout->addWidget(windowRadioButton, 0, 0); + group->addButton(dialogRadioButton, Qt::Dialog); + layout->addWidget(dialogRadioButton, 1, 0); + group->addButton(sheetRadioButton, Qt::Sheet); + layout->addWidget(sheetRadioButton, 2, 0); + group->addButton(drawerRadioButton, Qt::Drawer); + layout->addWidget(drawerRadioButton, 3, 0); + group->addButton(popupRadioButton, Qt::Popup); + layout->addWidget(popupRadioButton, 0, 1); + group->addButton(toolRadioButton, Qt::Tool); + layout->addWidget(toolRadioButton, 1, 1); + group->addButton(toolTipRadioButton, Qt::ToolTip); + layout->addWidget(toolTipRadioButton, 2, 1); + group->addButton(splashScreenRadioButton, Qt::SplashScreen); + layout->addWidget(splashScreenRadioButton, 3, 1); + connect(group, SIGNAL(buttonReleased(int)), this, SLOT(slotChanged())); +} + +Qt::WindowFlags TypeControl::type() const +{ + return Qt::WindowFlags(group->checkedId()); +} + +void TypeControl::setType(Qt::WindowFlags s) +{ + if (QAbstractButton *b = group->button(s & Qt::WindowType_Mask)) + b->setChecked(true); +} + +void TypeControl::slotChanged() +{ + emit changed(type()); +} -- cgit v1.2.3