windowflags: Allow testing of naked QWindows, not just QWidgets
Change-Id: Ia0eddcb385207ada8c3df59d49ff1de27a2aeb71 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
parent
f09f2f240f
commit
4ac47689fa
@ -59,24 +59,26 @@ ControllerWidget::ControllerWidget(QWidget *parent)
|
||||
QLabel *label = new QLabel(tr("Parent window"));
|
||||
parentWindow->setCentralWidget(label);
|
||||
|
||||
previewWindow = new PreviewWindow;
|
||||
previewWindow = new QWindow;
|
||||
previewWindow->installEventFilter(this);
|
||||
previewWidget = new PreviewWidget;
|
||||
previewWidget->installEventFilter(this);
|
||||
previewDialog = new PreviewDialog;
|
||||
previewDialog->installEventFilter(this);
|
||||
|
||||
createTypeGroupBox();
|
||||
|
||||
hintsControl = new HintControl;
|
||||
hintsControl->setHints(previewWindow->windowFlags());
|
||||
hintsControl->setHints(previewWidget->windowFlags());
|
||||
connect(hintsControl, SIGNAL(changed(Qt::WindowFlags)), this, SLOT(updatePreview()));
|
||||
|
||||
statesControl = new WindowStatesControl;
|
||||
statesControl->setStates(previewWindow->windowState());
|
||||
statesControl->setStates(previewWidget->windowState());
|
||||
statesControl->setVisibleValue(true);
|
||||
connect(statesControl, SIGNAL(changed()), this, SLOT(updatePreview()));
|
||||
|
||||
typeControl = new TypeControl;
|
||||
typeControl->setType(previewWindow->windowFlags());
|
||||
typeControl->setType(previewWidget->windowFlags());
|
||||
connect(typeControl, SIGNAL(changed(Qt::WindowFlags)), this, SLOT(updatePreview()));
|
||||
|
||||
QVBoxLayout *mainLayout = new QVBoxLayout(this);
|
||||
@ -98,61 +100,99 @@ bool ControllerWidget::eventFilter(QObject *, QEvent *e)
|
||||
|
||||
void ControllerWidget::updateStateControl()
|
||||
{
|
||||
if (previewWidget)
|
||||
statesControl->setStates(previewWidget->windowState());
|
||||
if (activePreview)
|
||||
statesControl->setStates(activePreview->windowStates());
|
||||
}
|
||||
|
||||
void ControllerWidget::updatePreview()
|
||||
void ControllerWidget::updatePreview(QWindow *preview)
|
||||
{
|
||||
const Qt::WindowFlags flags = typeControl->type() | hintsControl->hints();
|
||||
activePreview = preview;
|
||||
|
||||
if (previewWidgetButton->isChecked()) {
|
||||
previewWidget = previewWindow;
|
||||
previewDialog->hide();
|
||||
} else {
|
||||
previewWidget = previewDialog;
|
||||
previewWindow->hide();
|
||||
}
|
||||
const Qt::WindowFlags flags = typeControl->type() | hintsControl->hints();
|
||||
|
||||
if (modalWindowCheckBox->isChecked()) {
|
||||
parentWindow->show();
|
||||
previewWidget->setWindowModality(Qt::WindowModal);
|
||||
previewWidget->setParent(parentWindow);
|
||||
preview->setModality(Qt::WindowModal);
|
||||
preview->setParent(parentWindow->windowHandle());
|
||||
} else {
|
||||
previewWidget->setWindowModality(Qt::NonModal);
|
||||
previewWidget->setParent(0);
|
||||
preview->setModality(Qt::NonModal);
|
||||
preview->setParent(0);
|
||||
parentWindow->hide();
|
||||
}
|
||||
|
||||
if (previewWidgetButton->isChecked())
|
||||
previewWindow->setWindowFlags(flags);
|
||||
else
|
||||
previewDialog->setWindowFlags(flags);
|
||||
preview->setFlags(flags);
|
||||
|
||||
if (fixedSizeWindowCheckBox->isChecked()) {
|
||||
previewWidget->setFixedSize(300, 300);
|
||||
preview->setMinimumSize(QSize(300, 300));
|
||||
preview->setMaximumSize(QSize(300, 300));
|
||||
} else {
|
||||
previewWidget->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
|
||||
preview->setMinimumSize(QSize(0, 0));
|
||||
preview->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
|
||||
}
|
||||
|
||||
QPoint pos = previewWidget->pos();
|
||||
preview->setWindowStates(statesControl->states());
|
||||
preview->setVisible(statesControl->visibleValue());
|
||||
}
|
||||
|
||||
void ControllerWidget::updatePreview(QWidget *preview)
|
||||
{
|
||||
activePreview = preview->windowHandle();
|
||||
|
||||
const Qt::WindowFlags flags = typeControl->type() | hintsControl->hints();
|
||||
|
||||
if (modalWindowCheckBox->isChecked()) {
|
||||
parentWindow->show();
|
||||
preview->setWindowModality(Qt::WindowModal);
|
||||
preview->setParent(parentWindow);
|
||||
} else {
|
||||
preview->setWindowModality(Qt::NonModal);
|
||||
preview->setParent(0);
|
||||
parentWindow->hide();
|
||||
}
|
||||
|
||||
preview->setWindowFlags(flags);
|
||||
|
||||
QSize fixedSize = fixedSizeWindowCheckBox->isChecked() ?
|
||||
QSize(300, 300) : QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
|
||||
preview->setFixedSize(fixedSize);
|
||||
|
||||
QPoint pos = preview->pos();
|
||||
if (pos.x() < 0)
|
||||
pos.setX(0);
|
||||
if (pos.y() < 0)
|
||||
pos.setY(0);
|
||||
previewWidget->move(pos);
|
||||
preview->move(pos);
|
||||
|
||||
previewWidget->setWindowState(statesControl->states());
|
||||
previewWidget->setVisible(statesControl->visibleValue());
|
||||
preview->setWindowState(statesControl->states());
|
||||
preview->setVisible(statesControl->visibleValue());
|
||||
}
|
||||
|
||||
void ControllerWidget::updatePreview()
|
||||
{
|
||||
if (previewWindowButton->isChecked()) {
|
||||
previewDialog->hide();
|
||||
previewWidget->close();
|
||||
updatePreview(previewWindow);
|
||||
} else if (previewWidgetButton->isChecked()) {
|
||||
previewWindow->hide();
|
||||
previewDialog->hide();
|
||||
updatePreview(previewWidget);
|
||||
} else {
|
||||
previewWindow->hide();
|
||||
previewWidget->close();
|
||||
updatePreview(previewDialog);
|
||||
}
|
||||
}
|
||||
|
||||
void ControllerWidget::createTypeGroupBox()
|
||||
{
|
||||
widgetTypeGroupBox = new QGroupBox(tr("Widget Type"));
|
||||
widgetTypeGroupBox = new QGroupBox(tr("Window Type"));
|
||||
previewWindowButton = createRadioButton(tr("QWindow"));
|
||||
previewWidgetButton = createRadioButton(tr("QWidget"));
|
||||
previewWidgetButton->setChecked(true);
|
||||
previewDialogButton = createRadioButton(tr("QDialog"));
|
||||
previewWindowButton->setChecked(true);
|
||||
QHBoxLayout *l = new QHBoxLayout;
|
||||
l->addWidget(previewWindowButton);
|
||||
l->addWidget(previewWidgetButton);
|
||||
l->addWidget(previewDialogButton);
|
||||
widgetTypeGroupBox->setLayout(l);
|
||||
|
@ -60,20 +60,27 @@ private slots:
|
||||
void updateStateControl();
|
||||
|
||||
private:
|
||||
void updatePreview(QWindow *);
|
||||
void updatePreview(QWidget *);
|
||||
void createTypeGroupBox();
|
||||
QCheckBox *createCheckBox(const QString &text);
|
||||
QRadioButton *createRadioButton(const QString &text);
|
||||
|
||||
QMainWindow *parentWindow;
|
||||
PreviewWindow *previewWindow;
|
||||
|
||||
QWindow *previewWindow;
|
||||
PreviewWidget *previewWidget;
|
||||
PreviewDialog *previewDialog;
|
||||
QWidget *previewWidget;
|
||||
|
||||
QWindow *activePreview;
|
||||
|
||||
QGroupBox *widgetTypeGroupBox;
|
||||
QGroupBox *additionalOptionsGroupBox;
|
||||
TypeControl *typeControl;
|
||||
HintControl *hintsControl;
|
||||
WindowStatesControl *statesControl;
|
||||
|
||||
QRadioButton *previewWindowButton;
|
||||
QRadioButton *previewWidgetButton;
|
||||
QRadioButton *previewDialogButton;
|
||||
QCheckBox *modalWindowCheckBox;
|
||||
|
@ -43,5 +43,6 @@ int main(int argc, char *argv[])
|
||||
if (!arguments.contains(QLatin1String("-e")))
|
||||
controller.registerEventFilter();
|
||||
controller.show();
|
||||
controller.lower();
|
||||
return app.exec();
|
||||
}
|
||||
|
@ -172,37 +172,37 @@ static QPlainTextEdit *createControlPanel(QWidget *widget)
|
||||
QGridLayout *buttonLayout = new QGridLayout;
|
||||
bottomLayout->addStretch();
|
||||
bottomLayout->addLayout(buttonLayout);
|
||||
QPushButton *showNormalButton = new QPushButton(PreviewWindow::tr("Show normal"));
|
||||
QPushButton *showNormalButton = new QPushButton(PreviewWidget::tr("Show normal"));
|
||||
QObject::connect(showNormalButton, SIGNAL(clicked()), widget, SLOT(showNormal()));
|
||||
buttonLayout->addWidget(showNormalButton, 0, 0);
|
||||
QPushButton *showMinimizedButton = new QPushButton(PreviewWindow::tr("Show minimized"));
|
||||
QPushButton *showMinimizedButton = new QPushButton(PreviewWidget::tr("Show minimized"));
|
||||
QObject::connect(showMinimizedButton, SIGNAL(clicked()), widget, SLOT(showMinimized()));
|
||||
buttonLayout->addWidget(showMinimizedButton, 0, 1);
|
||||
QPushButton *showMaximizedButton = new QPushButton(PreviewWindow::tr("Show maximized"));
|
||||
QPushButton *showMaximizedButton = new QPushButton(PreviewWidget::tr("Show maximized"));
|
||||
QObject::connect(showMaximizedButton, SIGNAL(clicked()), widget, SLOT(showMaximized()));
|
||||
buttonLayout->addWidget(showMaximizedButton, 0, 2);
|
||||
QPushButton *showFullScreenButton = new QPushButton(PreviewWindow::tr("Show fullscreen"));
|
||||
QPushButton *showFullScreenButton = new QPushButton(PreviewWidget::tr("Show fullscreen"));
|
||||
QObject::connect(showFullScreenButton, SIGNAL(clicked()), widget, SLOT(showFullScreen()));
|
||||
buttonLayout->addWidget(showFullScreenButton, 0, 3);
|
||||
|
||||
QPushButton *updateInfoButton = new QPushButton(PreviewWindow::tr("&Update Info"));
|
||||
QPushButton *updateInfoButton = new QPushButton(PreviewWidget::tr("&Update Info"));
|
||||
QObject::connect(updateInfoButton, SIGNAL(clicked()), widget, SLOT(updateInfo()));
|
||||
buttonLayout->addWidget(updateInfoButton, 1, 0);
|
||||
QPushButton *closeButton = new QPushButton(PreviewWindow::tr("&Close"));
|
||||
QPushButton *closeButton = new QPushButton(PreviewWidget::tr("&Close"));
|
||||
QObject::connect(closeButton, SIGNAL(clicked()), widget, SLOT(close()));
|
||||
buttonLayout->addWidget(closeButton, 1, 3);
|
||||
|
||||
return textEdit;
|
||||
}
|
||||
|
||||
PreviewWindow::PreviewWindow(QWidget *parent)
|
||||
PreviewWidget::PreviewWidget(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
textEdit = createControlPanel(this);
|
||||
setWindowTitle(tr("Preview <QWidget> Qt %1").arg(QLatin1String(QT_VERSION_STR)));
|
||||
}
|
||||
|
||||
bool PreviewWindow::event(QEvent *event)
|
||||
bool PreviewWidget::event(QEvent *event)
|
||||
{
|
||||
const bool ret = QWidget::event(event);
|
||||
|
||||
@ -219,7 +219,7 @@ bool PreviewWindow::event(QEvent *event)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void PreviewWindow::setWindowFlags(Qt::WindowFlags flags)
|
||||
void PreviewWidget::setWindowFlags(Qt::WindowFlags flags)
|
||||
{
|
||||
if (flags == windowFlags())
|
||||
return;
|
||||
@ -227,7 +227,7 @@ void PreviewWindow::setWindowFlags(Qt::WindowFlags flags)
|
||||
QTimer::singleShot(0, this, SLOT(updateInfo()));
|
||||
}
|
||||
|
||||
void PreviewWindow::updateInfo()
|
||||
void PreviewWidget::updateInfo()
|
||||
{
|
||||
textEdit->setPlainText(formatWidgetInfo(this));
|
||||
}
|
||||
|
@ -35,12 +35,12 @@ QT_BEGIN_NAMESPACE
|
||||
class QPlainTextEdit;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
class PreviewWindow : public QWidget
|
||||
class PreviewWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
PreviewWindow(QWidget *parent = 0);
|
||||
PreviewWidget(QWidget *parent = 0);
|
||||
|
||||
void setWindowFlags(Qt::WindowFlags flags);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user