kradio4
r778
|
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