From bd0f3345a938b35ce6a12f6150373b0955b8dd12 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sun, 10 Jul 2011 15:24:15 -0500 Subject: Add Qt3 development HEAD version --- examples/toplevel/main.cpp | 9 + examples/toplevel/options.ui | 587 +++++++++++++++++++++++++++++++++++++++++ examples/toplevel/options.ui.h | 98 +++++++ examples/toplevel/toplevel.doc | 132 +++++++++ examples/toplevel/toplevel.pro | 14 + 5 files changed, 840 insertions(+) create mode 100644 examples/toplevel/main.cpp create mode 100644 examples/toplevel/options.ui create mode 100644 examples/toplevel/options.ui.h create mode 100644 examples/toplevel/toplevel.doc create mode 100644 examples/toplevel/toplevel.pro (limited to 'examples/toplevel') diff --git a/examples/toplevel/main.cpp b/examples/toplevel/main.cpp new file mode 100644 index 0000000..f50b9b1 --- /dev/null +++ b/examples/toplevel/main.cpp @@ -0,0 +1,9 @@ +#include +#include "options.h" + +int main( int argc, char ** argv ) +{ + QApplication a( argc, argv ); + OptionsDialog dlg; + return dlg.exec(); +} diff --git a/examples/toplevel/options.ui b/examples/toplevel/options.ui new file mode 100644 index 0000000..ef0573f --- /dev/null +++ b/examples/toplevel/options.ui @@ -0,0 +1,587 @@ + +OptionsDialog + + + OptionsDialog + + + + 0 + 0 + 371 + 482 + + + + Select Options + + + + unnamed + + + + layout5 + + + + unnamed + + + + layout4 + + + + unnamed + + + + bgBorder + + + &Border + + + true + + + true + + + Select different types of borders, or turn the border off. Windows without a border are ignored by the window manager. + + + + unnamed + + + + rbBorderNormal + + + &Normal + + + Alt+N + + + true + + + A normal border + + + Gives the window a normal, resizable border. The window should have a layout installed to handle the resizing gracefully. + + + + + rbBorderDialog + + + &Dialog + + + Alt+D + + + A thin dialog border + + + Gives the window a thin dialog border. Depending on the window manager the window will not be resizable. Use QWidget::setFixedSize() in addition to enforce a static size on all systems. + + + + + + + bgTitle + + + &Titlebar + + + true + + + true + + + Select different controls you want to see in the titlebar, or turn the titlebar off. Popup windows should not have a titlebar. + + + + unnamed + + + + cbTitleSystem + + + S&ystem Menu + + + Alt+Y + + + true + + + A window system menu. + + + Adds a window system menu. Many window managers require a system menu to be able to provide minimize or maximize controls. A system menu implies a close button. + + + + + cbTitleMinimize + + + Minimi&ze + + + Alt+Z + + + A minimize button + + + Adds a minimze button. This option requires a system menu on many window managers. + + + + + cbTitleMaximize + + + Ma&ximize + + + Alt+X + + + A maximize button + + + Adds a maximze button. This option requires a system menu on many window managers. + + + + + cbTitleContext + + + &What's This + + + Alt+W + + + A context help button + + + Adds a context help button. This option requires a system menu on many window managers, and often doesn't work together with minimize and maximize buttons. + + + + + + + + + layout3 + + + + unnamed + + + + bgBehavior + + + Behavior + + + true + + + Select different behaviors of the window in runtime. + + + + unnamed + + + + cbBehaviorTaskbar + + + Taskbar &Entry + + + Alt+E + + + Entry in the taskbar + + + Gives the window a separate task bar entry. + + + + + cbBehaviorStays + + + Stays on T&op + + + Alt+O + + + Stay on top of the desktop + + + Informs the window system that the window should stay on top of all other windows, including windows from other applications. This is not supported on all X11 window managers. + + + + + cbBehaviorPopup + + + false + + + &Popup + + + Alt+P + + + A popup window + + + Indicates that this widget is a popup window. Popup windows are modal, but close automatically when the mouse is clicked. + + + + + cbBehaviorTool + + + Too&l + + + Alt+L + + + A tool window + + + Makes the window a tool window. Tool windows often have a smaller titlebar and decoration, and don't activate automtically when displayed. Tool windows often cannot have their own taskbar entry. + + + + + cbBehaviorModal + + + &Modal + + + Alt+M + + + Show modal + + + The window is modal for the application, e.g. input for other windows are blocked by this window. + + + + + + + spacer2 + + + Vertical + + + Expanding + + + + 20 + 31 + + + + + + + + + + gbProperties + + + Properties + + + true + + + Set other properties of the window. + + + + unnamed + + + + leCaption + + + Caption + + + Window caption + + + The caption of the window. + + + + + layout2 + + + + unnamed + + + + leIcon + + + Icon file + + + Provide an image file. + + + + + tbPick + + + ... + + + Pick an icon + + + Select an image file. + + + + + + + slTransparency + + + 100 + + + 10 + + + Horizontal + + + Below + + + 10 + + + Window transparency + + + Set the transparency of the window. +A high value gives a high window transparency, e.g. it is less visible. + +Note that this attribute is not supported on many windowing systems and will have no effect. + + + + + textLabel3 + + + Transp&arency: + + + slTransparency + + + + + textLabel2 + + + &Icon: + + + leIcon + + + + + textLabel1 + + + &Caption: + + + leCaption + + + + + + + layout1 + + + + unnamed + + + + spacer1 + + + Horizontal + + + Expanding + + + + 70 + 21 + + + + + + pbApply + + + Apply + + + + + + true + + + Creates a new window with the selected flags, or modifies the visible window. + + + + + pbClose + + + Close + + + + + + Closes this dialog and exits the application. + + + + + + + + + pbClose + clicked() + OptionsDialog + close() + + + pbApply + clicked() + OptionsDialog + apply() + + + bgBorder + toggled(bool) + bgTitle + setEnabled(bool) + + + cbTitleSystem + toggled(bool) + cbTitleMinimize + setEnabled(bool) + + + cbTitleSystem + toggled(bool) + cbTitleMaximize + setEnabled(bool) + + + cbTitleSystem + toggled(bool) + cbTitleContext + setEnabled(bool) + + + bgTitle + toggled(bool) + cbBehaviorPopup + setDisabled(bool) + + + cbBehaviorPopup + toggled(bool) + bgTitle + setDisabled(bool) + + + tbPick + clicked() + OptionsDialog + pickIcon() + + + + qguardedptr.h + qvbox.h + qfiledialog.h + + + QGuardedPtr<QVBox> widget; + + + apply() + pickIcon() + + + diff --git a/examples/toplevel/options.ui.h b/examples/toplevel/options.ui.h new file mode 100644 index 0000000..d6a499b --- /dev/null +++ b/examples/toplevel/options.ui.h @@ -0,0 +1,98 @@ +void OptionsDialog::apply() +{ + QStringList flagList; + bool wstyle = false; + WFlags f = WDestructiveClose | WType_TopLevel | WStyle_Customize; + + if ( bgBorder->isChecked() ) { + if ( rbBorderNormal->isChecked() ) { + f |= WStyle_NormalBorder; + flagList += "WStyle_NormalBorder"; + wstyle = true; + } + else if ( rbBorderDialog->isChecked() ) { + f |= WStyle_DialogBorder; + flagList += "WStyle_DialogBorder"; + wstyle = true; + } + + if ( bgTitle->isChecked() ) { + f |= WStyle_Title; + flagList += "WStyle_Title"; + wstyle = true; + if ( cbTitleSystem->isChecked() ) { + f |= WStyle_SysMenu; + flagList += "WStyle_SysMenu"; + } + if ( cbTitleMinimize->isChecked() ) { + f |= WStyle_Minimize; + flagList += "WStyle_Minimize"; + } + if ( cbTitleMaximize->isChecked() ) { + f |= WStyle_Maximize; + flagList += "WStyle_Maximize"; + } + if ( cbTitleContext->isChecked() ) { + f |= WStyle_ContextHelp; + flagList += "WStyle_ContextHelp"; + } + } + } else { + f |= WStyle_NoBorder; + flagList += "WStyle_NoBorder"; + wstyle = true; + } + + QWidget *parent = this; + if ( cbBehaviorTaskbar->isChecked() ) { + parent = 0; + f |= WGroupLeader; + flagList += "WGroupLeader"; + } + if ( cbBehaviorStays->isChecked() ) { + f |= WStyle_StaysOnTop /*| WX11BypassWM*/; + flagList += "WStyle_StaysOnTop"; + wstyle = true; + } + if ( cbBehaviorPopup->isChecked() ) { + f |= WType_Popup; + flagList += "WType_Popup"; + } + if ( cbBehaviorModal->isChecked() ) { + f |= WShowModal; + flagList += "WShowModal"; + } + if ( cbBehaviorTool->isChecked() ) { + f |= WStyle_Tool; + flagList += "WStyle_Tool"; + wstyle = true; + } + + if (wstyle) + flagList.push_front("WStyle_Customize"); + + if ( !widget ) { + widget = new QVBox( parent, 0, f ); + widget->setMargin( 20 ); + QLabel *label = new QLabel(flagList.join(" | "), widget); + label->setTextFormat(RichText); + label->setAlignment(WordBreak); + QPushButton *okButton = new QPushButton( "Close", widget ); + connect( okButton, SIGNAL(clicked()), widget, SLOT(close()) ); + widget->move( pos() ); + } else { + widget->reparent( parent, f, widget->geometry().topLeft(), FALSE); + } + + widget->setCaption( leCaption->text() ); + widget->setIcon( leIcon->text() ); + widget->setWindowOpacity(double(slTransparency->maxValue() - slTransparency->value()) / 100); + + widget->show(); +} + +void OptionsDialog::pickIcon() +{ + QString filename = QFileDialog::getOpenFileName( QString::null, QString::null, this ); + leIcon->setText( filename ); +} diff --git a/examples/toplevel/toplevel.doc b/examples/toplevel/toplevel.doc new file mode 100644 index 0000000..4dbe1d9 --- /dev/null +++ b/examples/toplevel/toplevel.doc @@ -0,0 +1,132 @@ +/*! + \page toplevel-example.html + + \ingroup examples + \title Toplevel Widgets + + This example demonstrates the use of Qt's widget flags to provide + toplevel widgets with customized window decorations. + + It provides a graphical user interface for selecting different + options for widget decoration and behavior, and passes the + appropriate widget flags to the QWidget constructor. + QWidget::reparent() is used to change the widget flags at runtime. + + \warning Note that the interpretation and functionality of the + widget flags depends on the window manager used when running the + application. Many window managers do not support every possible flag + combination. + + The user interface providing the different options was created using + \link designer-manual.book Qt Designer\endlink. The different + options are explained in the user interface through the use of + tooltips and What's This help. Load the \c options.ui file into + \link designer-manual.book Qt Designer\endlink for more details. + + \quotefile toplevel/main.cpp + \printuntil } + + The main function creates and displays the dialog for the user + interface. Note that this dialog is modal. + + The code relevant for this example is in the \c options.ui.h + file. + + \quotefile toplevel/options.ui.h + \printuntil WFlags + + The \c apply() slot declares the widget flag variable \c f + and initializes it with the values + \list + \i \c WDestructiveClose - the widget will be automatically + destroyed when it is closed, + \i \c WType_TopLevel - the widget will be top level even if it + has a parent widget, and + \i \c WStyle_Customize - the flags override the default values + \endlist + Other flags are used depending on the options selected in the user + interface. + + \printto bgTitle->isChecked() + The window gets a normal or dialog border depending on the selected + option. + + \printto else + A titlebar with controls is provided if the appropriate options + have been checked. + + \printto QWidget *parent + If the window should not have a border it cannot have a titlebar. + Widgets that provide their own (e.g. themed) window decoration + should use this flag. + + \printto cbBehaviorStays + If a toplevel widget has a parent it will not have a taskbar + entry, and on most window managers it will always stay on + top of the parent widget. This is the standard behavior for + dialog boxes, especially if they are modeless, and for other + secondary toplevel widgets. + + To provide a taskbar entry the widget must have no parent, + in which case we need to use the \c WGroupLeader flag to + prevent blocking through the modal main dialog. Applications + that can have multiple toplevel windows open simultaneously + should use this combination. + + \printto cbBehaviorPopup + A toplevel widget can stay on top of the whole desktop if the + window manager supports this functionality. + \footnote Unfortunately some X11 window managers also require the \c + WX11BypassWM flag to be set in addition; but some other X11 window + managers will have problems if this flag is set. \endfootnote + + Widgets that display important or realtime information (i.e. IRC + clients) might benefit from using that flag. + + \printto cbBehaviorModal + A popup widget is a short lived modal widget that closes + automatically. Popup menus are a typical example for such widgets. + + \printto cbBehaviorTool + A modal widget blocks input to other toplevel widgets, unless + those are in a different modal group (see \c WGroupLeader). + Dialogs are often modal, and the QDialog class provides an easy API + to create and display them without the need to explicitly use this + flag. + + \printto !widget + A tool window will never have a task bar entry (even if it + has no parent widget), and often has a smaller window + decoration. Tool windows are frequently used instead of + modeless dialogs. + + \printto else + The widget is created if it has not been created yet, or if it was + closed (since we use the \c WDestructiveClose flag). Note that the + window is not visible yet. + \footnote The example uses QGuardedPtr to make sure that the + pointer is reset to zero when the widget object is destroyed + due to the \c WDestructiveClose flag. \endfootnote + + \printto setCaption + If the widget has already been created the reparent() function is + used to modify the widget's flags. The widget's geometry is not + changed, and the window is not shown again. + + \printuntil show() + Finally the higher level properties such as the window's caption and + icon are set. The window transparency is set according to the slider + value. Note that this will only have effect on systems that support + this attribute for toplevel window. + + \printuntil } + Finally the window is shown with the new attributes. + + To build the example go to the toplevel directory + (\c QTDIR/examples/toplevel) + \footnote + We use \c QTDIR to stand for the directory where Qt is installed. + \endfootnote + and run \c qmake to generate the makefile, then use the make tool to + build the library. +*/ diff --git a/examples/toplevel/toplevel.pro b/examples/toplevel/toplevel.pro new file mode 100644 index 0000000..aad16ca --- /dev/null +++ b/examples/toplevel/toplevel.pro @@ -0,0 +1,14 @@ +TEMPLATE = app +LANGUAGE = C++ + +CONFIG += qt warn_on release +unix { + UI_DIR = .ui + MOC_DIR = .moc + OBJECTS_DIR = .obj +} + +REQUIRES = full-config + +SOURCES += main.cpp +FORMS = options.ui -- cgit v1.2.3