kradio4
r778
|
00001 /*************************************************************************** 00002 kradioapp.h - description 00003 ------------------- 00004 begin : Sa Feb 9 2002 00005 copyright : (C) 2002 by Klas Kalass / Martin Witte / Frank Schwanz 00006 email : klas.kalass@gmx.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_KRADIOAPP_H 00019 #define KRADIO_KRADIOAPP_H 00020 00021 #ifdef HAVE_CONFIG_H 00022 #include <config.h> 00023 #endif 00024 00025 #include <QtCore/QMap> 00026 00027 #include <kconfig.h> 00028 #include <kapplication.h> 00029 #include <klibrary.h> 00030 00031 //#include <kaboutapplication.h> 00032 #include "pluginmanager.h" 00033 #include "pluginbase.h" 00034 00035 class KLibrary; 00036 00037 // class KRadioAbout : public PluginBase 00038 // { 00039 // public: 00040 // KRadioAbout(const QString &name) : PluginBase(name, "KRadio Application") {} 00041 // 00042 // virtual QString pluginClassName() const { return "KRadioAbout"; } 00043 // 00044 // virtual ConfigPageInfo createConfigurationPage () { return ConfigPageInfo(); } 00045 // // virtual AboutPageInfo createAboutPage (); 00046 // 00047 // virtual void saveState ( KConfigGroup &) const {} 00048 // virtual void restoreState (const KConfigGroup &) {} 00049 // }; 00050 00051 00052 00053 00054 typedef PluginBase *(*t_kradio_plugin_init_func)(const QString & cls, const QString &instanceID, const QString &obj); 00055 typedef void (*t_kradio_plugin_info_func)(QMap<QString, QString> &); 00056 typedef void (*t_kradio_plugin_libload_func)(); 00057 typedef void (*t_kradio_plugin_libunload_func)(); 00058 #ifdef KRADIO_ENABLE_FIXMES 00059 #warning "FIXME: switch to KPluginFactory stuff" 00060 #endif 00061 struct PluginLibraryInfo { 00062 KLibrary library; 00063 QMap<QString,QString> plugins; 00064 t_kradio_plugin_init_func init_func; 00065 t_kradio_plugin_info_func info_func; 00066 t_kradio_plugin_libload_func libload_func; 00067 t_kradio_plugin_libunload_func libunload_func; 00068 00069 PluginLibraryInfo() : library(NULL), init_func(NULL), info_func(NULL), libload_func(NULL), libunload_func(NULL) {} 00070 PluginLibraryInfo(const QString &libname); 00071 PluginLibraryInfo (const PluginLibraryInfo &); 00072 PluginLibraryInfo &operator = (const PluginLibraryInfo &); 00073 bool valid() { return init_func && info_func && library.isLoaded() && libload_func && libunload_func; } 00074 00075 private: 00076 // disable copy constructor 00077 }; 00078 00079 00080 struct PluginClassInfo { 00081 QString class_name; 00082 QString description; 00083 t_kradio_plugin_init_func create_function; 00084 00085 PluginClassInfo() : create_function(NULL) {} 00086 PluginClassInfo(const QString &_name, const QString &descr, t_kradio_plugin_init_func init_func) 00087 : class_name(_name), description(descr), create_function(init_func) {} 00088 PluginBase *CreateInstance(const QString &instanceID, const QString &obj_name) { return create_function ? create_function(class_name, instanceID, obj_name) : NULL; } 00089 }; 00090 00091 00092 class KRadioApp : public KApplication 00093 { 00094 Q_OBJECT 00095 public: 00096 KRadioApp(); 00097 virtual ~KRadioApp(); 00098 00099 virtual void saveState (KConfig *c); 00100 virtual void restoreState (KConfig *c); 00101 00102 virtual PluginManager *createNewInstance(const QString &name); 00103 00104 virtual void LoadLibrary (const QString &library); 00105 virtual void UnloadLibrary (const QString &library); 00106 virtual PluginBase *CreatePlugin (PluginManager *manager, const QString &instanceID, const QString &pclass, const QString &object_name); 00107 00108 virtual const QMap<QString, PluginLibraryInfo> &getPluginLibraries() const { return m_PluginLibraries; } 00109 virtual const QMap<QString, PluginClassInfo> &getPluginClasses() const { return m_PluginInfos; } 00110 00111 virtual void startPlugins(); 00112 00113 virtual bool quitting() const { return m_quitting; } 00114 00115 protected slots: 00116 00117 #ifdef KRADIO_ENABLE_FIXMES 00118 #warning: FIXME: implement qsessionmanagement stuff 00119 #endif 00120 virtual void saveState( QSessionManager& sm ) { KApplication::saveState(sm); } 00121 virtual void saveState(); 00122 virtual void slotAboutToQuit(); 00123 00124 protected: 00125 00126 QMap<QString, PluginManager*> m_Instances; 00127 QMap<QString, PluginLibraryInfo> m_PluginLibraries; 00128 QMap<QString, PluginClassInfo> m_PluginInfos; 00129 00130 bool m_quitting; 00131 }; 00132 00133 00134 #endif