diff options
Diffstat (limited to 'tests/manual/windowgeometry')
-rw-r--r-- | tests/manual/windowgeometry/controllerwidget.cpp | 139 | ||||
-rw-r--r-- | tests/manual/windowgeometry/controllerwidget.h | 18 | ||||
-rw-r--r-- | tests/manual/windowgeometry/windowgeometry.pro | 5 |
3 files changed, 145 insertions, 17 deletions
diff --git a/tests/manual/windowgeometry/controllerwidget.cpp b/tests/manual/windowgeometry/controllerwidget.cpp index bf0697a753..601432916a 100644 --- a/tests/manual/windowgeometry/controllerwidget.cpp +++ b/tests/manual/windowgeometry/controllerwidget.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "controllerwidget.h" +#include <controls.h> #if QT_VERSION >= 0x050000 # include <QtWidgets> @@ -62,6 +63,7 @@ CoordinateControl::CoordinateControl(const QString &sep) : m_x(new QSpinBox), m_ m_y->setMaximum(2000); connect(m_y, SIGNAL(valueChanged(int)), this, SLOT(spinBoxChanged())); QHBoxLayout *l = new QHBoxLayout(this); + l->setSpacing(2); l->addWidget(m_x); l->addWidget(new QLabel(sep)); l->addWidget(m_y); @@ -95,6 +97,8 @@ RectControl::RectControl() , m_size(new CoordinateControl(QLatin1String("x"))) { QHBoxLayout *l = new QHBoxLayout(this); + l->setSpacing(0); + l->setMargin(ControlLayoutMargin); connect(m_point, SIGNAL(pointValueChanged(QPoint)), this, SLOT(handleChanged())); connect(m_point, SIGNAL(pointValueChanged(QPoint)), this, SIGNAL(positionChanged(QPoint))); l->addWidget(m_point); @@ -121,26 +125,43 @@ void RectControl::handleChanged() } BaseWindowControl::BaseWindowControl(QObject *w) - : m_geometry(new RectControl) + : m_layout(new QGridLayout(this)) + , m_object(w) + , m_geometry(new RectControl) , m_framePosition(new CoordinateControl(QLatin1String("x"))) + , m_typeControl(new TypeControl) + , m_hintControl(new HintControl) , m_moveEventLabel(new QLabel(tr("Move events"))) , m_resizeEventLabel(new QLabel(tr("Resize events"))) , m_mouseEventLabel(new QLabel(tr("Mouse events"))) - , m_object(w) , m_moveCount(0) , m_resizeCount(0) { m_object->installEventFilter(this); - QGridLayout *l = new QGridLayout(this); m_geometry->setTitle(tr("Geometry")); - l->addWidget(m_geometry, 0, 0, 1, 2); + int row = 0; + m_layout->addWidget(m_geometry, row, 0, 1, 2); + m_layout->setMargin(ControlLayoutMargin); QGroupBox *frameGB = new QGroupBox(tr("Frame")); QVBoxLayout *frameL = new QVBoxLayout(frameGB); + frameL->setSpacing(0); + frameL->setMargin(ControlLayoutMargin); frameL->addWidget(m_framePosition); - l->addWidget(frameGB, 0, 2); - l->addWidget(m_moveEventLabel, 1, 0); - l->addWidget(m_resizeEventLabel, 1, 1); - l->addWidget(m_mouseEventLabel, 1, 2); + m_layout->addWidget(frameGB, row, 2); + + m_layout->addWidget(m_hintControl, ++row, 0, 1, 2); + connect(m_hintControl, SIGNAL(changed(Qt::WindowFlags)), this, SLOT(windowFlagsChanged())); + m_layout->addWidget(m_typeControl, row, 2); + connect(m_typeControl, SIGNAL(changed(Qt::WindowFlags)), this, SLOT(windowFlagsChanged())); + + QGroupBox *eventGroupBox = new QGroupBox(tr("Events")); + QVBoxLayout *l = new QVBoxLayout(eventGroupBox); + l->setSpacing(0); + l->setMargin(ControlLayoutMargin); + l->addWidget(m_moveEventLabel); + l->addWidget(m_resizeEventLabel); + l->addWidget(m_mouseEventLabel); + m_layout->addWidget(eventGroupBox, ++row, 2); connect(m_geometry, SIGNAL(positionChanged(QPoint)), this, SLOT(posChanged(QPoint))); connect(m_geometry, SIGNAL(sizeChanged(QSize)), this, SLOT(sizeChanged(QSize))); @@ -174,6 +195,8 @@ bool BaseWindowControl::eventFilter(QObject *, QEvent *e) arg(pos.x()).arg(pos.y()).arg(globalPos.x()).arg(globalPos.y())); } break; + case QEvent::WindowStateChange: + refresh(); default: break; } @@ -199,18 +222,32 @@ void BaseWindowControl::framePosChanged(const QPoint &p) setObjectFramePosition(m_object, p); } +void BaseWindowControl::windowFlagsChanged() +{ + const Qt::WindowFlags f = m_typeControl->type() | m_hintControl->hints(); + setObjectWindowFlags(m_object, f); +} + void BaseWindowControl::refresh() { m_geometry->setRectValue(objectGeometry(m_object)); m_framePosition->setPointValue(objectFramePosition(m_object)); + const Qt::WindowFlags flags = objectWindowFlags(m_object); + m_typeControl->setType(flags); + m_hintControl->setHints(flags); } // A control for a QWidget class WidgetWindowControl : public BaseWindowControl { + Q_OBJECT public: - explicit WidgetWindowControl(QWidget *w ) : BaseWindowControl(w) - { setTitle(w->windowTitle()); } + explicit WidgetWindowControl(QWidget *w); + + virtual void refresh(); + +private slots: + void statesChanged(); private: virtual QRect objectGeometry(const QObject *o) const @@ -223,8 +260,46 @@ private: { static_cast<QWidget *>(o)->move(p); } virtual QPoint objectMapToGlobal(const QObject *o, const QPoint &p) const { return static_cast<const QWidget *>(o)->mapToGlobal(p); } + virtual Qt::WindowFlags objectWindowFlags(const QObject *o) const + { return static_cast<const QWidget *>(o)->windowFlags(); } + virtual void setObjectWindowFlags(QObject *o, Qt::WindowFlags f); + + WindowStatesControl *m_statesControl; }; +WidgetWindowControl::WidgetWindowControl(QWidget *w ) + : BaseWindowControl(w) + , m_statesControl(new WindowStatesControl(WindowStatesControl::WantVisibleCheckBox)) +{ + setTitle(w->windowTitle()); + m_layout->addWidget(m_statesControl, 2, 0); + connect(m_statesControl, SIGNAL(changed()), this, SLOT(statesChanged())); +} + +void WidgetWindowControl::setObjectWindowFlags(QObject *o, Qt::WindowFlags f) +{ + QWidget *w = static_cast<QWidget *>(o); + const bool visible = w->isVisible(); + w->setWindowFlags(f); // hides. + if (visible) + w->show(); +} + +void WidgetWindowControl::refresh() +{ + const QWidget *w = static_cast<const QWidget *>(m_object); + m_statesControl->setVisibleValue(w->isVisible()); + m_statesControl->setStates(w->windowState()); + BaseWindowControl::refresh(); +} + +void WidgetWindowControl::statesChanged() +{ + QWidget *w = static_cast<QWidget *>(m_object); + w->setVisible(m_statesControl->visibleValue()); + w->setWindowState(m_statesControl->states()); +} + #if QT_VERSION >= 0x050000 // Test window drawing diagonal lines @@ -267,9 +342,14 @@ void Window::render() // A control for a QWindow class WindowControl : public BaseWindowControl { + Q_OBJECT public: - explicit WindowControl(QWindow *w ) : BaseWindowControl(w) - { setTitle(w->windowTitle()); } + explicit WindowControl(QWindow *w); + + virtual void refresh(); + +private slots: + void stateChanged(); private: virtual QRect objectGeometry(const QObject *o) const @@ -282,8 +362,41 @@ private: { static_cast<QWindow *>(o)->setFramePos(p); } virtual QPoint objectMapToGlobal(const QObject *o, const QPoint &p) const { return static_cast<const QWindow *>(o)->mapToGlobal(p); } + virtual Qt::WindowFlags objectWindowFlags(const QObject *o) const + { return static_cast<const QWindow *>(o)->windowFlags(); } + virtual void setObjectWindowFlags(QObject *o, Qt::WindowFlags f) + { static_cast<QWindow *>(o)->setWindowFlags(f); } + + WindowStateControl *m_stateControl; }; +WindowControl::WindowControl(QWindow *w ) + : BaseWindowControl(w) + , m_stateControl(new WindowStateControl(WindowStateControl::WantVisibleCheckBox | WindowStateControl::WantMinimizeRadioButton)) +{ + setTitle(w->windowTitle()); + QGroupBox *stateGroupBox = new QGroupBox(tr("State")); + QVBoxLayout *l = new QVBoxLayout(stateGroupBox); + l->addWidget(m_stateControl); + m_layout->addWidget(stateGroupBox, 2, 0); + connect(m_stateControl, SIGNAL(changed()), this, SLOT(stateChanged())); +} + +void WindowControl::refresh() +{ + const QWindow *w = static_cast<const QWindow *>(m_object); + BaseWindowControl::refresh(); + m_stateControl->setVisibleValue(w->isVisible()); + m_stateControl->setState(w->windowState()); +} + +void WindowControl::stateChanged() +{ + QWindow *w = static_cast<QWindow *>(m_object); + w->setVisible(m_stateControl->visibleValue()); + w->setWindowState(m_stateControl->state()); +} + #endif ControllerWidget::ControllerWidget(QWidget *parent) @@ -363,3 +476,5 @@ ControllerWidget::ControllerWidget(QWidget *parent) ControllerWidget::~ControllerWidget() { } + +#include "controllerwidget.moc" diff --git a/tests/manual/windowgeometry/controllerwidget.h b/tests/manual/windowgeometry/controllerwidget.h index d0cbcbe937..9e3901be6c 100644 --- a/tests/manual/windowgeometry/controllerwidget.h +++ b/tests/manual/windowgeometry/controllerwidget.h @@ -49,8 +49,12 @@ QT_BEGIN_NAMESPACE class QSpinBox; class QLabel; +class QGridLayout; QT_END_NAMESPACE +class TypeControl; +class HintControl; + // A control for editing points or sizes class CoordinateControl : public QWidget { @@ -112,12 +116,17 @@ protected: public: virtual bool eventFilter(QObject *, QEvent *); - void refresh(); + virtual void refresh(); private slots: void posChanged(const QPoint &); void sizeChanged(const QSize &); void framePosChanged(const QPoint &); + void windowFlagsChanged(); + +protected: + QGridLayout *m_layout; + QObject *m_object; private: virtual QRect objectGeometry(const QObject *o) const = 0; @@ -126,15 +135,18 @@ private: virtual QPoint objectFramePosition(const QObject *o) const = 0; virtual void setObjectFramePosition(QObject *o, const QPoint &) const = 0; + virtual Qt::WindowFlags objectWindowFlags(const QObject *o) const = 0; + virtual void setObjectWindowFlags(QObject *o, Qt::WindowFlags) = 0; + virtual QPoint objectMapToGlobal(const QObject *o, const QPoint &) const = 0; RectControl *m_geometry; CoordinateControl *m_framePosition; + TypeControl *m_typeControl; + HintControl *m_hintControl; QLabel *m_moveEventLabel; QLabel *m_resizeEventLabel; QLabel *m_mouseEventLabel; - - QObject *m_object; unsigned m_moveCount; unsigned m_resizeCount; }; diff --git a/tests/manual/windowgeometry/windowgeometry.pro b/tests/manual/windowgeometry/windowgeometry.pro index d7d19ca23c..4450bfd588 100644 --- a/tests/manual/windowgeometry/windowgeometry.pro +++ b/tests/manual/windowgeometry/windowgeometry.pro @@ -2,7 +2,8 @@ QT += core gui TARGET = windowgeometry TEMPLATE = app -SOURCES += main.cpp controllerwidget.cpp -HEADERS += controllerwidget.h +INCLUDEPATH += ../windowflags +SOURCES += main.cpp controllerwidget.cpp ../windowflags/controls.cpp +HEADERS += controllerwidget.h ../windowflags/controls.h greaterThan(QT_MAJOR_VERSION, 4): QT += widgets |