From 3fa70d9c74db858a7e997d43d65be6d60937400b Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Thu, 29 Mar 2012 14:16:02 +0200 Subject: Update tests/manual/windowmodality to test native dialogs Window- and ApplicationModal native dialogs need to send WindowBlocked and WindowUnblocked events as well. This will let us test that they work properly. Change-Id: Iaa4ddb79bb0872f9ab1e61336a5decb262472283 Reviewed-by: Friedemann Kleint --- tests/manual/windowmodality/dialog.ui | 236 ++++++++++++++++++++++++++---- tests/manual/windowmodality/main.cpp | 221 ++++++++++++++++++++++------ tests/manual/windowmodality/modality.pro | 2 +- tests/manual/windowmodality/widget.ui | 241 +++++++++++++++++++++++++++---- 4 files changed, 601 insertions(+), 99 deletions(-) diff --git a/tests/manual/windowmodality/dialog.ui b/tests/manual/windowmodality/dialog.ui index 78d5ff3eb1..0254311566 100644 --- a/tests/manual/windowmodality/dialog.ui +++ b/tests/manual/windowmodality/dialog.ui @@ -6,8 +6,8 @@ 0 0 - 574 - 300 + 515 + 480 @@ -20,49 +20,140 @@ Select the type of dialog to create: - - + + - Application Modal Dialog (sibling) + Use this window as parent for newly created dialogs + + + true - - + + - Window Modal Dialog + Custom Dialog - - + + + + Color Dialog + + + + + - Application Modal Dialog (no parent) + Font Dialog - + - Application Modal + Custom Dialog - - + + - Window Modal Dialog (no parent) + Color Dialog - - + + - Modeless Dialog (no parent) + File Dialog - + + + + Font Dialog + + + + + + + Page Setup Dialog + + + + + + + Print Dialog + + + + + + + Custom Dialog + + + + + + + Color Dialog + + + + + + + File Dialog + + + + + + + Font Dialog + + + + + + + Page Setup Dialog + + + + + + + Print Dialog + + + + + + + + 0 + 0 + + + + + 11 + + + + Native Application Modal Dialogs use static API instead of exec() + + + + @@ -77,17 +168,91 @@ - - + + + + + 0 + 0 + + + + + 11 + + - Modeless Dialog + Native Window Modal Dialogs use open() - - + + + + + 0 + 0 + + + + + 75 + true + + + + Application Modal Dialogs + + + + + + + + 0 + 0 + + + + + 75 + true + + - Window Modal Dialog (sibling) + Window Modal Dialogs + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Modeless (Non-Modal) Dialogs + + + + + + + false + + + Create new dialogs as siblings of this dialog + + + true @@ -114,6 +279,9 @@ Close + + true + @@ -138,5 +306,21 @@ + + useThisAsParentCheckBox + toggled(bool) + createSiblingDialogCheckBox + setDisabled(bool) + + + 260 + 39 + + + 260 + 60 + + + diff --git a/tests/manual/windowmodality/main.cpp b/tests/manual/windowmodality/main.cpp index 5016383ad1..35584b5c68 100644 --- a/tests/manual/windowmodality/main.cpp +++ b/tests/manual/windowmodality/main.cpp @@ -44,53 +44,124 @@ #include #include +#include +#include +#include +#include +#include -class Dialog : public QDialog, public Ui::Dialog +enum DialogType +{ + CustomDialogType, + ColorDialogType, + FileDialogType, + FontDialogType, + PageSetupDialogType, + PrintDialogType +}; + +class CustomDialog : public QDialog, public Ui::Dialog { Q_OBJECT public: - Dialog(QWidget *parent = 0) + CustomDialog(QWidget *parent = 0) : QDialog(parent) { setupUi(this); - connect(this, SIGNAL(finished(int)), SLOT(dialogFinished(int))); - connect(this, SIGNAL(accepted()), SLOT(dialogAccepted())); - connect(this, SIGNAL(rejected()), SLOT(dialogRejected())); + + // hide the "Create new dialogs as siblings of this dialog" button when + // we don't have a parent of our own (they would be parentless anyway) + if (!parent) { + createSiblingDialogCheckBox->setChecked(false); + createSiblingDialogCheckBox->setVisible(false); + } } private slots: - void on_modelessButton_clicked() - { newDialog(Qt::NonModal, this); } - void on_modelessNoParentButton_clicked() - { newDialog(Qt::NonModal, 0); } - void on_windowModalButton_clicked() - { newDialog(Qt::WindowModal, this); } - void on_windowModalNoParentButton_clicked() - { newDialog(Qt::WindowModal, 0); } - void on_siblingWindowModalButton_clicked() - { newDialog(Qt::WindowModal, parentWidget()); } - void on_applicationModalButton_clicked() - { newDialog(Qt::ApplicationModal, this); } - void on_applicationModalNoParentButton_clicked() - { newDialog(Qt::ApplicationModal, 0); } - void on_siblingApplicationModalButton_clicked() - { newDialog(Qt::ApplicationModal, parentWidget()); } - - void dialogFinished(int result) - { qDebug() << "Dialog finished, result" << result; } - void dialogAccepted() - { qDebug() << "Dialog accepted"; } - void dialogRejected() - { qDebug() << "Dialog rejected"; } + void on_modelessCustomDialogButton_clicked() + { newDialog(CustomDialogType, Qt::NonModal); } + void on_modelessColorDialogButton_clicked() + { newDialog(ColorDialogType, Qt::NonModal); } + void on_modelessFontDialogButton_clicked() + { newDialog(FontDialogType, Qt::NonModal); } + + void on_windowModalCustomDialogButton_clicked() + { newDialog(CustomDialogType, Qt::WindowModal); } + void on_windowModalColorDialogButton_clicked() + { newDialog(ColorDialogType, Qt::WindowModal); } + void on_windowModalFileDialogButton_clicked() + { newDialog(FileDialogType, Qt::WindowModal); } + void on_windowModalFontDialogButton_clicked() + { newDialog(FontDialogType, Qt::WindowModal); } + void on_windowModalPageSetupDialogButton_clicked() + { newDialog(PageSetupDialogType, Qt::WindowModal); } + void on_windowModalPrintDialogButton_clicked() + { newDialog(PrintDialogType, Qt::WindowModal); } + + void on_applicationModalCustomDialogButton_clicked() + { newDialog(CustomDialogType, Qt::ApplicationModal); } + void on_applicationModalColorDialogButton_clicked() + { newDialog(ColorDialogType, Qt::ApplicationModal); } + void on_applicationModalFileDialogButton_clicked() + { newDialog(FileDialogType, Qt::ApplicationModal); } + void on_applicationModalFontDialogButton_clicked() + { newDialog(FontDialogType, Qt::ApplicationModal); } + void on_applicationModalPageSetupDialogButton_clicked() + { newDialog(PageSetupDialogType, Qt::ApplicationModal); } + void on_applicationModalPrintDialogButton_clicked() + { newDialog(PrintDialogType, Qt::ApplicationModal); } private: - void newDialog(Qt::WindowModality windowModality, QWidget *parent) + void newDialog(DialogType dialogType, Qt::WindowModality windowModality) { - Dialog *dialog = new Dialog(parent); + QWidget *parent = 0; + if (useThisAsParentCheckBox->isChecked()) + parent = this; + else if (createSiblingDialogCheckBox->isChecked()) + parent = parentWidget(); + + QDialog *dialog; + switch (dialogType) { + case CustomDialogType: + dialog = new CustomDialog(parent); + break; + case ColorDialogType: + if (windowModality == Qt::ApplicationModal && applicationModalUseExecCheckBox->isChecked()) { + QColorDialog::getColor(Qt::white, parent); + return; + } + dialog = new QColorDialog(parent); + break; + case FileDialogType: + if (windowModality == Qt::ApplicationModal && applicationModalUseExecCheckBox->isChecked()) { + QFileDialog::getOpenFileName(parent); + return; + } + dialog = new QFileDialog(parent); + break; + case FontDialogType: + if (windowModality == Qt::ApplicationModal && applicationModalUseExecCheckBox->isChecked()) { + bool unused = false; + QFontDialog::getFont(&unused, parent); + return; + } + dialog = new QFontDialog(parent); + break; + case PageSetupDialogType: + dialog = new QPageSetupDialog(parent); + break; + case PrintDialogType: + dialog = new QPrintDialog(parent); + break; + } + dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowModality(windowModality); + if (windowModality == Qt::ApplicationModal && applicationModalUseExecCheckBox->isChecked()) dialog->exec(); + else if (windowModality == Qt::WindowModal) + dialog->open(); else dialog->show(); } @@ -123,27 +194,89 @@ private slots: w->setAttribute(Qt::WA_GroupLeader); w->show(); } - void on_modelessButton_clicked() - { newDialog(Qt::NonModal); } - void on_modelessNoParentButton_clicked() - { newDialog(Qt::NonModal, false); } - void on_windowModalButton_clicked() - { newDialog(Qt::WindowModal); } - void on_windowModalNoParentButton_clicked() - { newDialog(Qt::WindowModal, false); } - void on_applicationModalButton_clicked() - { newDialog(Qt::ApplicationModal); } - void on_applicationModalNoParentButton_clicked() - { newDialog(Qt::ApplicationModal, false); } + + void on_modelessCustomDialogButton_clicked() + { newDialog(CustomDialogType, Qt::NonModal); } + void on_modelessColorDialogButton_clicked() + { newDialog(ColorDialogType, Qt::NonModal); } + void on_modelessFontDialogButton_clicked() + { newDialog(FontDialogType, Qt::NonModal); } + + void on_windowModalCustomDialogButton_clicked() + { newDialog(CustomDialogType, Qt::WindowModal); } + void on_windowModalColorDialogButton_clicked() + { newDialog(ColorDialogType, Qt::WindowModal); } + void on_windowModalFileDialogButton_clicked() + { newDialog(FileDialogType, Qt::WindowModal); } + void on_windowModalFontDialogButton_clicked() + { newDialog(FontDialogType, Qt::WindowModal); } + void on_windowModalPageSetupDialogButton_clicked() + { newDialog(PageSetupDialogType, Qt::WindowModal); } + void on_windowModalPrintDialogButton_clicked() + { newDialog(PrintDialogType, Qt::WindowModal); } + + void on_applicationModalCustomDialogButton_clicked() + { newDialog(CustomDialogType, Qt::ApplicationModal); } + void on_applicationModalColorDialogButton_clicked() + { newDialog(ColorDialogType, Qt::ApplicationModal); } + void on_applicationModalFileDialogButton_clicked() + { newDialog(FileDialogType, Qt::ApplicationModal); } + void on_applicationModalFontDialogButton_clicked() + { newDialog(FontDialogType, Qt::ApplicationModal); } + void on_applicationModalPageSetupDialogButton_clicked() + { newDialog(PageSetupDialogType, Qt::ApplicationModal); } + void on_applicationModalPrintDialogButton_clicked() + { newDialog(PrintDialogType, Qt::ApplicationModal); } private: - void newDialog(Qt::WindowModality windowModality, bool withParent = true) + void newDialog(DialogType dialogType, Qt::WindowModality windowModality) { - Dialog *dialog = new Dialog(withParent ? this : 0); + QWidget *parent = 0; + if (useThisAsParentCheckBox->isChecked()) + parent = this; + + QDialog *dialog; + switch (dialogType) { + case CustomDialogType: + dialog = new CustomDialog(parent); + break; + case ColorDialogType: + if (windowModality == Qt::ApplicationModal && applicationModalUseExecCheckBox->isChecked()) { + QColorDialog::getColor(Qt::white, parent); + return; + } + dialog = new QColorDialog(parent); + break; + case FileDialogType: + if (windowModality == Qt::ApplicationModal && applicationModalUseExecCheckBox->isChecked()) { + QFileDialog::getOpenFileName(parent); + return; + } + dialog = new QFileDialog(parent); + break; + case FontDialogType: + if (windowModality == Qt::ApplicationModal && applicationModalUseExecCheckBox->isChecked()) { + bool unused = false; + QFontDialog::getFont(&unused, parent); + return; + } + dialog = new QFontDialog(parent); + break; + case PageSetupDialogType: + dialog = new QPageSetupDialog(parent); + break; + case PrintDialogType: + dialog = new QPrintDialog(parent); + break; + } + dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setWindowModality(windowModality); + if (windowModality == Qt::ApplicationModal && applicationModalUseExecCheckBox->isChecked()) dialog->exec(); + else if (windowModality == Qt::WindowModal) + dialog->open(); else dialog->show(); } diff --git a/tests/manual/windowmodality/modality.pro b/tests/manual/windowmodality/modality.pro index 7bed916c36..973579c508 100644 --- a/tests/manual/windowmodality/modality.pro +++ b/tests/manual/windowmodality/modality.pro @@ -1,3 +1,3 @@ SOURCES = main.cpp FORMS = widget.ui dialog.ui -QT += widgets +QT += widgets printsupport diff --git a/tests/manual/windowmodality/widget.ui b/tests/manual/windowmodality/widget.ui index 63a6ae7130..26d218b79e 100644 --- a/tests/manual/windowmodality/widget.ui +++ b/tests/manual/windowmodality/widget.ui @@ -6,56 +6,231 @@ 0 0 - 519 - 207 + 622 + 462 Form - + Select the type of window to create: - - + + + + + 0 + 0 + + + + + 75 + true + + + + Top-level Windows + + + + + + + + 0 + 0 + + + + + 11 + + + + Note: Native Application Modal Dialogs use static API instead of exec() + + + + + + + Print Dialog + + + + + + + Window + + + + + + + Color Dialog + + + + + + + Font Dialog + + + + + + + Font Dialog + + + + + - Window Modal Dialog (no parent) + Font Dialog - - + + - Window Modal Dialog + Page Setup Dialog - - + + - Modeless Dialog (no parent) + Custom Dialog - - + + - Modeless Dialog + Page Setup Dialog - - + + + + Color Dialog + + + + + + + File Dialog + + + + + + + + 0 + 0 + + + + + 75 + true + + - Application Modal Dialog + Window Modal Dialogs - + + + + + 0 + 0 + + + + + 75 + true + + + + Modeless (Non-Modal) Dialogs + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Application Modal Dialogs + + + + + + + Window (Group Leader) + + + + + + + Print Dialog + + + + + + + + 0 + 0 + + + + + 11 + + + + Note: Window Modal Dialogs use open() + + + + + + + Color Dialog + + + + @@ -70,24 +245,34 @@ - - + + - Application Modal Dialog (no parent) + File Dialog - - + + - Window (Group Leader) + Custom Dialog - - + + - Window + Custom Dialog + + + + + + + Use this window as parent for newly created dialogs + + + true -- cgit v1.2.3