-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathpluginmanager.h
More file actions
131 lines (126 loc) · 3.95 KB
/
pluginmanager.h
File metadata and controls
131 lines (126 loc) · 3.95 KB
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
#ifndef PLUGINMANAGER_H
#define PLUGINMANAGER_H
#include <QDir>
#include <QHash>
#include <QPointer>
#include <QTranslator>
#include <QDomDocument>
#include <QApplication>
#include <QPluginLoader>
#include <QSessionManager>
#include <definitions/plugininitorders.h>
#include <definitions/commandline.h>
#include <definitions/actiongroups.h>
#include <definitions/menuicons.h>
#include <definitions/resources.h>
#include <definitions/version.h>
#include <definitions/stylesheets.h>
#include <interfaces/ipluginmanager.h>
#include <interfaces/imainwindow.h>
#include <interfaces/itraymanager.h>
#include <interfaces/ivcard.h>
#include <interfaces/iaccountmanager.h>
#include <utils/widgetmanager.h>
#include <utils/stylestorage.h>
#include <utils/action.h>
#include "setuppluginsdialog.h"
#include "aboutbox.h"
#include "commentdialog.h"
enum ShutdownKind {
SK_START,
SK_WORK,
SK_QUIT,
SK_RESTART
};
struct PluginItem
{
IPlugin *plugin;
IPluginInfo *info;
QPluginLoader *loader;
QTranslator *translator;
};
class PluginManager :
public QObject,
public IPluginManager
{
Q_OBJECT
Q_INTERFACES(IPluginManager)
public:
PluginManager(QApplication *AParent);
~PluginManager();
virtual QObject *instance() { return this; }
virtual QString version() const;
virtual QString revision() const;
virtual QDateTime revisionDate() const;
virtual bool isShutingDown() const;
virtual QString homePath() const;
virtual void setHomePath(const QString &APath);
virtual void setLocale(QLocale::Language ALanguage, QLocale::Country ACountry);
virtual IPlugin* pluginInstance(const QUuid &AUuid) const;
virtual QList<IPlugin *> pluginInterface(const QString &AInterface = QString::null) const;
virtual const IPluginInfo *pluginInfo(const QUuid &AUuid) const;
virtual QList<QUuid> pluginDependencesOn(const QUuid &AUuid) const;
virtual QList<QUuid> pluginDependencesFor(const QUuid &AUuid) const;
virtual void showFeedbackDialog();
public slots:
virtual void quit();
virtual void restart();
virtual void delayShutdown();
virtual void continueShutdown();
virtual void shutdownRequested();
signals:
void aboutToQuit();
void shutdownStarted();
public slots:
void showMainWindow();
protected:
void loadSettings();
void saveSettings();
void loadPlugins();
bool initPlugins();
void startPlugins();
protected:
void startShutdown();
void finishShutdown();
void closeTopLevelWidgets();
protected:
void removePluginItem(const QUuid &AUuid, const QString &AError);
void unloadPlugin(const QUuid &AUuid, const QString &AError = QString::null);
bool checkDependences(const QUuid AUuid) const;
bool checkConflicts(const QUuid AUuid) const;
QList<QUuid> getConflicts(const QUuid AUuid) const;
void loadCoreTranslations(const QDir &ADir, const QString &ALocaleName);
protected:
bool isPluginEnabled(const QString &AFile) const;
QDomElement savePluginInfo(const QString &AFile, const IPluginInfo *AInfo);
void savePluginError(const QString &AFile, const QString &AEror);
void removePluginsInfo(const QStringList &ACurFiles);
void createMenuActions();
protected slots:
void onApplicationAboutToQuit();
void onApplicationCommitDataRequested(QSessionManager &AManager);
void onShowSetupPluginsDialog(bool);
void onSetupPluginsDialogAccepted();
void onShowAboutBoxDialog();
void onShowCommentsDialog();
void onMessageBoxButtonClicked(QAbstractButton *AButton);
void onShutdownTimerTimeout();
private:
QPointer<AboutBox> FAboutDialog;
QPointer<CommentDialog> FCommentDialog;
QPointer<SetupPluginsDialog> FPluginsDialog;
private:
int FShutdownKind;
int FShutdownDelayCount;
QTimer FShutdownTimer;
private:
QString FDataPath;
QDomDocument FPluginsSetup;
QTranslator *FQtTranslator;
QTranslator *FUtilsTranslator;
QTranslator *FLoaderTranslator;
QList<QString> FBlockedPlugins;
QHash<QUuid, PluginItem> FPluginItems;
mutable QMultiHash<QString, IPlugin *> FPlugins;
};
#endif