summaryrefslogtreecommitdiffstats
path: root/kutils/kcmoduleproxy.h
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch)
tree5ac38a06f3dde268dc7927dc155896926aaf7012 /kutils/kcmoduleproxy.h
downloadtdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz
tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip
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
Diffstat (limited to 'kutils/kcmoduleproxy.h')
-rw-r--r--kutils/kcmoduleproxy.h357
1 files changed, 357 insertions, 0 deletions
diff --git a/kutils/kcmoduleproxy.h b/kutils/kcmoduleproxy.h
new file mode 100644
index 000000000..b785bbaca
--- /dev/null
+++ b/kutils/kcmoduleproxy.h
@@ -0,0 +1,357 @@
+/* This file is part of the KDE project
+ Copyright (C) 2003 Matthias Kretz <kretz@kde.org>
+ Copyright (C) 2004 Frans Englich <frans.englich@telia.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ 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 KCMODULEPROXY_H
+#define KCMODULEPROXY_H
+
+#include <qwidget.h>
+#include <qstringlist.h>
+
+#include <kservice.h>
+#include <kdelibs_export.h>
+
+class KAboutData;
+class KCModule;
+class KCModuleInfo;
+class KInstance;
+class KProcess;
+
+/**
+ * @ingroup kcmodule
+ *
+ * @brief Encapsulates a KCModule for embedding.
+ *
+ * KCModuleProxy is a wrapper for KCModule intended for cases where
+ * modules are to be displayed. It ensures layout is consistent, handles
+ * root/administrator modules and in general takes care of the details
+ * needed for making a module available in an interface. A KCModuleProxy
+ * can be treated as a QWidget, without worrying about the details specific
+ * for modules such as library loading. KCModuleProxy is not a sub class of KCModule
+ * but its API closely resembles KCModule's.\n
+ * Usually, an instance is created by passing one of the constructors a KService::Ptr,
+ * KCModuleInfo or simply the name of the module and then added to the layout as any
+ * other widget. \n
+ * When the user have changed the module, changed( bool ) as well as changed ( KCModuleProxy * )
+ * is emitted. KCModuleProxy does not take care of prompting for saving - if the object is deleted while
+ * changes is not saved the changes will be lost. changed() returns true if changes are unsaved. \n
+ * \n
+ * KCModuleProxy does not take care of authorization of KCModules. \n
+ * KCModuleProxy do lazy loading, meaning the library will not be loaded or
+ * any other initialization done before its show() function is called. This means
+ * modules will only be loaded when they are actually needed as well as it is possible to
+ * load many KCModuleProxy without any speed penalty.
+ *
+ * KCModuleProxy should be used in all cases where modules are embedded in order to
+ * promote code efficiency and usability consistency.
+ *
+ * @author Frans Englich <frans.englich@telia.com>
+ * @author Matthias Kretz <kretz@kde.org>
+ *
+ */
+class KUTILS_EXPORT KCModuleProxy : public QWidget
+{
+Q_OBJECT
+
+ friend class KCModuleProxyRootCommunicatorImpl;
+
+public:
+
+ /**
+ * Constructs a KCModuleProxy from a KCModuleInfo class.
+ *
+ * @param info The KCModuleInfo to construct the module from.
+ * @param withFallback If set to true and loading of the module fails,
+ * a alternative will be tried, resulting in the module appearing in its
+ * own window, if at all.
+ * The embedded module will be load()ed.
+ * @param parent the parent QWidget.
+ * @param name the module's name.
+ * @param args This is used in the implementation and is internal.
+ * Use the default.
+ */
+ KCModuleProxy( const KCModuleInfo & info, bool withFallback = true,
+ QWidget * parent = 0, const char * name = 0,
+ const QStringList & args = QStringList() );
+
+ /**
+ * Constructs a KCModuleProxy from a module's service name, which is
+ * equivalent to the desktop file for the kcm without the ".desktop" part.
+ * Otherwise equal to the one above.
+ *
+ * @param serviceName The module's service name to construct from.
+ * @param withFallback If set to true and loading of the module fails,
+ * a alternative will be tried, resulting in the module appearing in its
+ * own window, if at all.
+ * The embedded module will be load()ed.
+ * @param parent the parent QWidget.
+ * @param name the module's name.
+ * @param args This is used in the implementation and is internal.
+ * Use the default.
+ */
+ KCModuleProxy( const QString& serviceName, bool withFallback = true,
+ QWidget * parent = 0, const char * name = 0,
+ const QStringList & args = QStringList() );
+
+ /**
+ * Constructs a KCModuleProxy from KService. Otherwise equal to the one above.
+ *
+ * @param service The KService to construct from.
+ * @param withFallback If set to true and loading of the module fails,
+ * a alternative will be tried, resulting in the module appearing in its
+ * own window, if at all.
+ * The embedded module will be load()ed.
+ * @param parent the parent QWidget.
+ * @param name the module's name.
+ * @param args This is used in the implementation and is internal.
+ * Use the default.
+ */
+ KCModuleProxy( const KService::Ptr& service, bool withFallback = true,
+ QWidget * parent = 0, const char * name = 0,
+ const QStringList & args = QStringList() );
+
+ /**
+ * Default destructor
+ */
+ ~KCModuleProxy();
+
+ /**
+ * Calling it will cause the contained module to
+ * run its load() routine.
+ */
+ void load();
+
+ /**
+ * Calling it will cause the contained module to
+ * run its save() routine.
+ *
+ * If the module was not modified, it will not be asked
+ * to save.
+ */
+ void save();
+
+ /**
+ * @return the module's quickHelp();
+ */
+ QString quickHelp() const;
+
+ /**
+ * @return the module's aboutData()
+ */
+ const KAboutData * aboutData() const;
+
+ /**
+ * @return what buttons the module
+ * needs
+ */
+ int buttons() const;
+
+ /**
+ * @return The module's custom root
+ * message, if it has one
+ * @deprecated
+ */
+ QString rootOnlyMsg() const;
+ //KDE4 remove. There's a limit for convenience functions,
+ // this one's available via moduleInfo()-> and realModule()->
+
+ /**
+ * @return If the module is a root module.
+ * @deprecated
+ */
+ bool useRootOnlyMsg() const;
+ //KDE4 remove. There's a limit for convenience functions,
+ // this one's available via moduleInfo()-> and realModule()->
+
+ /**
+ * Returns the embedded KCModule's KInstance.
+ * @return The module's KInstance.
+ * @deprecated
+ */
+ KInstance * instance() const;
+ //KDE4 remove. There's a limit for convenience functions,
+ // this one's available via realModule()
+
+ /**
+ * @return true if the module is modified
+ * and needs to be saved.
+ */
+ bool changed() const;
+
+ /**
+ * Returns whether the module is running in root mode. A module is in root mode
+ * when runAsRoot() has been called. A session under root user will never reach
+ * root mode.
+ *
+ * @note realModule() will return null when the module is running in root mode.
+ *
+ * @return true if the module is running with root privileges
+ * @since 3.4
+ */
+ bool rootMode() const;
+
+ /**
+ * Access to the actual module. However, if the module is
+ * running in root mode, see rootMode(), this function returns
+ * a NULL pointer, since the module is in another process. It may also
+ * return NULL if anything goes wrong.
+ *
+ * @return the encapsulated module.
+ */
+ KCModule* realModule() const;
+
+ /**
+ * @return a KCModuleInfo for the encapsulated
+ * module
+ */
+ const KCModuleInfo& moduleInfo() const;
+
+ /**
+ * Returns the DCOP the module's DCOPClient
+ * and DCOPObject has(they are identical).
+ *
+ * @since 3.4
+ */
+ QCString dcopName() const;
+
+public slots:
+
+ /**
+ * Calling this will cause the module to be run in
+ * "administrator mode".
+ *
+ * @since 3.4
+ */
+ void runAsRoot();
+
+ /**
+ * Calling it will cause the contained module to
+ * load its default values.
+ */
+ void defaults();
+
+ /**
+ * Calling this, results in deleting the contained
+ * module, and unregistering from DCOP. A similar result is achieved
+ * by deleting the KCModuleProxy itself.
+ *
+ * @since 3.4
+ */
+ void deleteClient();
+
+signals:
+
+ /*
+ * This signal is emitted when the contained module is changed.
+ */
+ void changed( bool state );
+
+ /**
+ * This is emitted in the same situations as in the one above. Practical
+ * when several KCModuleProxys are loaded.
+ *
+ * @since 3.4
+ */
+ void changed( KCModuleProxy* mod );
+
+ /**
+ * When a module running with root privileges and exits, returns to normal mode, the
+ * childClosed() signal is emitted.
+ *
+ * @since 3.4
+ */
+ void childClosed();
+
+ /*
+ * This signal is relayed from the encapsulated module, and
+ * is equivalent to the module's own quickHelpChanged() signal.
+ *
+ * @since 3.4
+ */
+ void quickHelpChanged();
+
+protected:
+
+ /**
+ * Reimplemented for internal purposes. Makes sure the encapsulated
+ * module is loaded before the show event is taken care of.
+ */
+ void showEvent( QShowEvent * );
+
+ /**
+ * Internal intialization function, called by the constructors.
+ *
+ * @internal
+ * @since 3.4
+ */
+ void init( const KCModuleInfo& info );
+
+
+ /**
+ * Emits the quickHelpChanged signal.
+ * @since 3.4
+ */
+ void emitQuickHelpChanged();
+
+private slots:
+
+ /**
+ * Calls the function @p function of the root module's KCModuleProxy
+ * DCOP interface.
+ *
+ * @param function the function signature of the function to call.
+ * @since 3.4
+ */
+ void callRootModule( const QCString& function );
+
+ /**
+ * This is called when the module exits from root mode. It zeroes
+ * pointers, deletes the embed window, and so forth.
+ *
+ * @since 3.4
+ */
+ void rootExited();
+
+ /**
+ * Makes sure the proper variables is set and signals are emitted.
+ */
+ void moduleChanged( bool );
+
+ /**
+ * Zeroes d->kcm
+ */
+ void moduleDestroyed();
+
+ /**
+ * Gets called by DCOP when an application closes.
+ * Is used to (try to) reload a KCM which previously
+ * was loaded.
+ *
+ * @since 3.4
+ */
+ void applicationRemoved( const QCString& app );
+
+private:
+
+ class KCModuleProxyPrivate;
+ KCModuleProxyPrivate * d;
+};
+
+#endif // KCMODULEPROXY_H
+// vim: sw=4 ts=4 noet