From ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kutils/kcmultidialog.h | 284 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 kutils/kcmultidialog.h (limited to 'kutils/kcmultidialog.h') diff --git a/kutils/kcmultidialog.h b/kutils/kcmultidialog.h new file mode 100644 index 000000000..8461c5643 --- /dev/null +++ b/kutils/kcmultidialog.h @@ -0,0 +1,284 @@ +/* + Copyright (c) 2000 Matthias Elter + Copyright (c) 2003 Daniel Molkentin + Copyright (c) 2003 Matthias Kretz + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + +*/ + +#ifndef KCMULTIDIALOG_H +#define KCMULTIDIALOG_H + +#include + +#include +#include +#include + +class KCModuleProxy; +class KCModuleInfo; + +/** + * @ingroup kcmodule + * @short A method that offers a KDialogBase containing arbitrary + * KControl Modules. + * + * @author Matthias Elter , Daniel Molkentin + * @since 3.2 + */ +class KUTILS_EXPORT KCMultiDialog : public KDialogBase +{ + Q_OBJECT + +public: + /** + * Constructs a new KCMultiDialog + * + * @param parent The parent widget + * @param name The widget name + * @param modal If you pass true here, the dialog will be modal + **/ + KCMultiDialog( QWidget *parent=0, const char *name=0, bool modal=false ); + + /** + * Construct a personalized KCMultiDialog. + * + * @param dialogFace You can use TreeList, Tabbed, Plain, Swallow or + * IconList. + * @param caption The dialog caption. Do not specify the application name + * here. The class will take care of that. + * @param parent Parent of the dialog. + * @param name Dialog name (for internal use only). + * @param modal Controls dialog modality. If @p false, the rest of the + * program interface (example: other dialogs) is accessible while + * the dialog is open. + */ + KCMultiDialog( int dialogFace, const QString & caption, QWidget * parent = 0, + const char * name = 0, bool modal = false ); + + + /** + * Constructor for the predefined layout mode where you specify the + * kind of layout (face) and also add buttons. Note that the User1 button + * of KDialogBase is already used to provide a "Reset" button so only + * two more buttons are available to users of KCMultiDialog. When clicked + * they trigger slotUser2() and slotUser3(). + * + * @note If any root modules are added to the dialog when this constructor is + * used, it will not be able to run them with root privileges. Since that will + * render them useless, it is a good idea to use another constructor. In KDE 4 + * the argument @p user3 will be removed. + * + * @param dialogFace You can use TreeList, Tabbed, Plain, Swallow or + * IconList. + * @param user2 User button2 text item. + * @param user3 User button3 text item. + * @param buttonMask Specifies which buttons will be visible. If zero + * (0) no extra buttons will be added. You can only use the User2 and + * User3 buttons. The User1 button is already used internally. See + * KDialogBase for more information on this. + * @param caption The dialog caption. Do not specify the application name + * here. The class will take care of that. + * @param parent Parent of the dialog. + * @param name Dialog name (for internal use only). + * @param modal Controls dialog modality. If @p false, the rest of the + * program interface (example: other dialogs) is accessible while + * the dialog is open. + */ + KCMultiDialog( int dialogFace, const KGuiItem &user2, + const KGuiItem &user3=KGuiItem(), int buttonMask=User2, + const QString &caption=i18n("Configure"), QWidget *parent=0, + const char *name=0, bool modal=false ) KDE_DEPRECATED; + // KDE4 remove the user3 argument, and instead initialize it to KStdGuiItem::adminMode. + + /** + * Destructor + **/ + virtual ~KCMultiDialog(); + + /** + * Add a module. + * + * @param module Specify the name of the module that is to be added + * to the list of modules the dialog will show. + * + * @param withfallback Try harder to load the module. Might result + * in the module appearing outside the dialog. + **/ + void addModule(const QString& module, bool withfallback=true); + + /** + * Add a module. + * + * @param moduleinfo Pass a KCModuleInfo object which will be + * used for creating the module. It will be added + * to the list of modules the dialog will show. + * + * @param parentmodulenames The names of the modules that should appear as + * parents in the TreeList. Look at the + * KDialogBase::addPage documentation for more info + * on this. + * + * @param withfallback Try harder to load the module. Might result + * in the module appearing outside the dialog. + **/ + void addModule(const KCModuleInfo& moduleinfo, QStringList + parentmodulenames = QStringList(), bool withfallback=false); + + /** + * Remove all modules from the dialog. + */ + void removeAllModules(); + + /** + * @internal + * Re-implemented for internal reasons. + */ + void show(); + +signals: + /** + * Emitted after all KCModules have been told to save their configuration. + * + * The applyClicked and okClicked signals are emitted before the + * configuration is saved. + */ + void configCommitted(); + + /** + * Emitted after the KCModules have been told to save their configuration. + * It is emitted once for every instance the KCMs that were changed belong + * to. + * + * You can make use of this if you have more than one component in your + * application. instanceName tells you the instance that has to reload its + * configuration. + * + * The applyClicked and okClicked signals are emitted before the + * configuration is saved. + * + * @param instanceName The name of the instance that needs to reload its + * configuration. + */ + void configCommitted( const QCString & instanceName ); + +protected slots: + /** + * This slot is called when the user presses the "Default" Button. + * You can reimplement it if needed. + * + * @note Make sure you call the original implementation. + **/ + virtual void slotDefault(); + + /** + * This slot is called when the user presses the "Reset" Button. + * You can reimplement it if needed. + * + * @note Make sure you call the original implementation. + */ + virtual void slotUser1(); + + /** + * This slot is called when the user presses the "Apply" Button. + * You can reimplement it if needed. + * + * @note Make sure you call the original implementation. + **/ + virtual void slotApply(); + + /** + * This slot is called when the user presses the "OK" Button. + * You can reimplement it if needed. + * + * @note Make sure you call the original implementation. + **/ + virtual void slotOk(); + + /** + * This slot is called when the user presses the "Help" Button. + * It reads the DocPath field of the currently selected KControl + * module's .desktop file to find the path to the documentation, + * which it then attempts to load. + * + * You can reimplement this slot if needed. + * + * @note Make sure you call the original implementation. + **/ + virtual void slotHelp(); + +private slots: + + void slotAboutToShow(QWidget *); + + void clientChanged(bool state); + + /** + * Called when entering root mode, and disables + * the Admin Mode button such that the user doesn't do it + * twice. + * + * @since 3.4 + */ + void disableRModeButton(); + + /** + * Called when the current module exits from root + * mode. Enables the Administrator Mode button, again. + * + * @since 3.4 + */ + void rootExit(); + + /** + * + * Called when the dialog is hidden. It unregisters the modules, + * such that they don't hinder the same modules to be opened in + * another application. + * + * @since 3.4 + */ + void dialogClosed(); + +private: + + void init(); + void apply(); + + struct CreatedModule + { + KCModuleProxy * kcm; + KService::Ptr service; + /* KDE 4 Move to Private class */ + }; + typedef QValueList ModuleList; + ModuleList m_modules; + + typedef QMap OrphanMap; + OrphanMap m_orphanModules; + + QPtrDict moduleParentComponents; + QString _docPath; + int dialogface; + + class KCMultiDialogPrivate; + KCMultiDialogPrivate *d; +}; + +#endif //KCMULTIDIALOG_H + +// vim: sw=4 sts=4 et -- cgit v1.2.1