summaryrefslogtreecommitdiffstats
path: root/kradio3/src/include/pluginmanager.h
blob: b52c8f27a6ea70c6a4b86c9af567e2fa68fb51b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/***************************************************************************
                          pluginmanager.h  -  description
                             -------------------
    begin                : Mon Apr 28 2003
    copyright            : (C) 2003 by Martin Witte
    email                : [email protected]
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef KRADIO_PLUGINMANAGER_INTERFACES_H
#define KRADIO_PLUGINMANAGER_INTERFACES_H

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <qstring.h>
#include <qptrdict.h>

#include "plugins.h"

class PluginBase;
class WidgetPluginBase;
class PluginConfigurationDialog;
class PluginManagerConfiguration;
class QWidget;
class KConfig;
class QFrame;
class KAboutDialog;
class KDialogBase;

struct ConfigPageInfo;
class QMenuData;
class KRadioApp;


class PluginManager : public QObject
{
Q_OBJECT
public :
             PluginManager(const QString &name,
                           KRadioApp *app,
                           const QString &configDialogTitle,
                           const QString &aboutTitle);
    virtual ~PluginManager();

    // Library Functions

    void                 noticeLibrariesChanged();
    void                 unloadPlugins(const QString &class_name);

    // managing plugins

    const PluginList    &plugins() const { return m_plugins; }
    void                 addWidgetPluginMenuItems(QMenuData *menu, QMap<WidgetPluginBase *,int> &map) const;
    void                 updateWidgetPluginMenuItem(WidgetPluginBase *p, QMenuData *menu, QMap<WidgetPluginBase *,int> &map, bool shown) const;

    PluginBase          *getPluginByName(const QString &name) const;

    // after insert, pluginManager is responsible for deletion
    void                 insertPlugin(PluginBase *);

    // remove and delete plugin
    void                 deletePlugin(PluginBase *);
    void                 deletePluginByName(const QString &name) { deletePlugin(getPluginByName(name)); }

    // remove plugin, afterwards pluginManager is no longer responsible for deletion
    void                 removePlugin(PluginBase *);
    void                 removePluginByName(const QString &name) { removePlugin(getPluginByName(name)); }

    // operations on all plugins

    virtual void         saveState    (KConfig *) const;
    virtual void         restoreState (KConfig *);
    virtual void         startPlugins();

    // configuration dialog handling

    virtual PluginConfigurationDialog *getConfigDialog();
    virtual KDialogBase               *getAboutDialog();
    virtual bool                       showsProgressBar() const { return m_showProgressBar; }
    virtual void                       showProgressBar(bool b) { m_showProgressBar = b; }

    virtual void         noticeWidgetPluginShown(WidgetPluginBase *p, bool shown);

protected :
    virtual void         createConfigDialog(const QString &title = QString::null);
    virtual void         createAboutDialog (const QString &title = QString::null);

    virtual void         addConfigurationPage (PluginBase *forWhom,
                                               const ConfigPageInfo    &info);
    virtual void         addAboutPage         (PluginBase *forWhom,
                                               const AboutPageInfo     &info);

protected slots:

    virtual void         slotConfigOK();

public slots:
    virtual void         aboutToQuit();

signals:

    virtual void         sigConfigOK();

private:
    virtual QFrame      *addConfigurationPage (const ConfigPageInfo    &info);
    ConfigPageInfo       createOwnConfigurationPage();

    // PluginManager's data & types ;)
protected:
    typedef QPtrDict<QFrame>               QFrameDict;
    typedef QPtrDictIterator<QFrame>       QFrameDictIterator;
    typedef QPtrDict<QWidget>              QWidgetDict;
    typedef QPtrDictIterator<QWidget>      QWidgetDictIterator;

    QString      m_Name;
    KRadioApp   *m_Application;

    PluginList   m_plugins;
    bool         m_showProgressBar;

    QFrameDict   m_configPageFrames;
    QWidgetDict  m_configPages;

    QFrameDict   m_aboutPageFrames;
    QWidgetDict  m_aboutPages;

    PluginConfigurationDialog *m_configDialog;
    PluginManagerConfiguration*m_pluginManagerConfiguration;
    KDialogBase               *m_aboutDialog;
    QString                    m_configDialogTitle;
    QString                    m_aboutDialogTitle;
};




#endif