kradioapp.h

Go to the documentation of this file.
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

Generated on Tue Jun 2 19:19:57 2009 for kradio4 by  doxygen 1.5.8