kradio4  r778
pluginmanager.h
Go to the documentation of this file.
00001 /***************************************************************************
00002                           pluginmanager.h  -  description
00003                              -------------------
00004     begin                : Mon Apr 28 2003
00005     copyright            : (C) 2003 by Martin Witte
00006     email                : emw-kradio@nocabal.de
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #ifndef KRADIO_PLUGINMANAGER_INTERFACES_H
00019 #define KRADIO_PLUGINMANAGER_INTERFACES_H
00020 
00021 #ifdef HAVE_CONFIG_H
00022 #include <config.h>
00023 #endif
00024 
00025 #include <QtCore/QString>
00026 #include <QtCore/QMap>
00027 
00028 #include "pluginbase.h"
00029 
00030 class PluginBase;
00031 class WidgetPluginBase;
00032 class PluginConfigurationDialog;
00033 class PluginManagerConfiguration;
00034 class QWidget;
00035 class KConfig;
00036 class QFrame;
00037 // class KAboutDialog;
00038 class KPageDialog;
00039 class KPageWidgetItem;
00040 
00041 struct ConfigPageInfo;
00042 class QMenu;
00043 class KMenu;
00044 class KRadioApp;
00045 
00046 
00047 class KDE_EXPORT PluginManager : public QObject
00048 {
00049 Q_OBJECT
00050 public :
00051              PluginManager(const QString &name,
00052                            KRadioApp *app,
00053                            const QString &configDialogTitle,
00054                            const QString &aboutTitle);
00055     virtual ~PluginManager();
00056 
00057     const QString        instanceName() const { return m_Name; }
00058 
00059     // Library Functions
00060 
00061     void                 noticeLibrariesChanged();
00062     void                 unloadPlugins(const QString &class_name);
00063 
00064     // managing plugins
00065 
00066     const PluginList    &plugins() const { return m_plugins; }
00067     void                 addWidgetPluginMenuItems(QMenu *menu) const;
00068     //void                 updateWidgetPluginMenuItem(WidgetPluginBase *p, QMenu *menu, QMap<WidgetPluginBase *,int> &map, bool shown) const;
00069 
00070     PluginBase          *getPluginByName(const QString &name) const;
00071 
00072     // after insert, pluginManager is responsible for deletion
00073     void                 insertPlugin(PluginBase *);
00074 
00075     // remove and delete plugin
00076     void                 deletePlugin(PluginBase *);
00077     void                 deletePluginByName(const QString &name) { deletePlugin(getPluginByName(name)); }
00078 
00079     // remove plugin, afterwards pluginManager is no longer responsible for deletion
00080     void                 removePlugin(PluginBase *);
00081     void                 removePluginByName(const QString &name) { removePlugin(getPluginByName(name)); }
00082 
00083     // operations on all plugins
00084 
00085     virtual void         saveState                  (KConfig *) const;
00086     virtual void         restoreState               (KConfig *);
00087     virtual void         restorePluginInstanceState (PluginBase *p, KConfig *c) const;
00088 
00089     virtual void         startPlugins();
00090 
00091     // configuration dialog handling
00092 
00093     virtual PluginConfigurationDialog *getConfigDialog();
00094 //     virtual KPageDialog               *getAboutDialog();
00095     virtual bool                       showsProgressBar() const { return m_showProgressBar; }
00096     virtual void                       showProgressBar(bool b) { m_showProgressBar = b; }
00097 
00098     virtual void                       noticeWidgetPluginShown(WidgetPluginBase *p, bool shown);
00099     virtual void                       noticePluginRenamed(PluginBase *p, const QString &name);
00100 
00101 
00102     virtual KMenu                     *getPluginHideShowMenu();
00103 
00104 
00105 protected :
00106     virtual void                       createConfigDialog(const QString &title = QString::null);
00107 //     virtual void                       createAboutDialog (const QString &title = QString::null);
00108 
00109     virtual KPageWidgetItem           *addConfigurationPage (PluginBase *forWhom,
00110                                                              const ConfigPageInfo    &info);
00111 //     virtual KPageWidgetItem           *addAboutPage         (PluginBase *forWhom,
00112 //                                                              const AboutPageInfo     &info);
00113     virtual void                       setConfigPageNameEtc(PluginBase *p);
00114 
00115 
00116     virtual void         updatePluginHideShowMenu();
00117     virtual void         notifyPluginsChanged();
00118 
00119 protected slots:
00120 
00121     virtual void         slotConfigOK();
00122     virtual void         slotDesktopChanged(int d);
00123 
00124 
00125 public slots:
00126     virtual void         aboutToQuit();
00127     virtual void         slotShowAllWidgetPlugins();
00128     virtual void         slotHideAllWidgetPlugins();
00129     virtual void         slotRestoreAllWidgetPlugins();
00130     virtual void         slotHideRestoreAllWidgetPlugins();
00131 
00132 signals:
00133 
00134             void         sigConfigOK();
00135 
00136 private:
00137     virtual KPageWidgetItem      *addConfigurationPage (const ConfigPageInfo    &info);
00138     ConfigPageInfo                createOwnConfigurationPage();
00139 
00140     // PluginManager's data & types ;)
00141 protected:
00142     typedef QMap<PluginBase*, KPageWidgetItem*>             QPlugin2ConfigPageMap;
00143     typedef QMap<PluginBase*, KPageWidgetItem*>::iterator   QPlugin2ConfigPageMapIterator;
00144     typedef QMap<PluginBase*, QWidget*>                     QPlugin2WidgetMap;
00145     typedef QMap<PluginBase*, QWidget*>::iterator           QPlugin2WidgetMapIterator;
00146     typedef QMap<PluginBase*, ConfigPageInfo>               QPlugin2ConfigPageInfoMap;
00147     typedef QMap<PluginBase*, ConfigPageInfo>::iterator     QPlugin2ConfigPageInfoMapIterator;
00148 
00149     QString      m_Name;
00150     KRadioApp   *m_Application;
00151 
00152     PluginList   m_plugins;
00153     bool         m_showProgressBar;
00154 
00155     QPlugin2ConfigPageMap       m_configPageFrames;
00156     QPlugin2WidgetMap           m_configPages;
00157     QPlugin2ConfigPageInfoMap   m_configPageInfos;
00158 
00159 //     QPlugin2ConfigPageMap       m_aboutPageFrames;
00160 //     QPlugin2WidgetMap           m_aboutPages;
00161 
00162     PluginConfigurationDialog  *m_configDialog;
00163     QString                     m_configDialogID;
00164     PluginManagerConfiguration *m_pluginManagerConfiguration;
00165 //     KPageDialog                *m_aboutDialog;
00166     QString                     m_configDialogTitle;
00167 //     QString                     m_aboutDialogTitle;
00168 
00169     KMenu                      *m_widgetPluginHideShowMenu;
00170     QMap<QString, bool>         m_widgetsShownCache;
00171 };
00172 
00173 
00174 
00175 
00176 #endif
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines