NCL Composer  0.1.5
 All Classes Functions Variables Pages
PluginControl.h
1 /* Copyright (c) 2011 Telemidia/PUC-Rio.
2  * All rights reserved. This program and the accompanying materials
3  * are made available under the terms of the Eclipse Public License v1.0
4  * which accompanies this distribution, and is available at
5  * http://www.eclipse.org/legal/epl-v10.html
6  *
7  * Contributors:
8  * Telemidia/PUC-Rio - initial API and implementation
9  */
10 #ifndef PLUGINCONTROL_H
11 #define PLUGINCONTROL_H
12 
13 #include <QString>
14 #include <QObject>
15 #include <QDir>
16 #include <QPluginLoader>
17 #include <QObject>
18 #include <QMultiHash>
19 #include <QList>
20 #include <QHashIterator>
21 #include <QDebug>
22 
23 #include "../util/ComposerCoreControl_global.h"
24 
25 #include "MessageControl.h"
26 #include "LanguageControl.h"
27 using namespace composer::core;
28 
29 #include "../model/Project.h"
30 using namespace composer::core::model;
31 
32 #include "../util/Singleton.h"
33 using namespace composer::core::util;
34 
35 #include "../extensions/IDocumentParser.h"
36 #include "../extensions/ILanguageProfile.h"
37 #include "../extensions/IPluginFactory.h"
38 #include "../extensions/IPlugin.h"
39 using namespace composer::extension;
40 
41 namespace composer {
42  namespace core {
43 
52 class COMPOSERCORESHARED_EXPORT PluginControl : public QObject
53 {
54  Q_OBJECT
55  SINGLETON(PluginControl)
56 
57 private:
61  explicit PluginControl();
65  virtual ~PluginControl();
66  QHash <QString, IPluginFactory*> pluginFactories;
68  QMultiHash <LanguageType, QString> pluginsByType;
71  /* TC by DocumentID */
72  /* Is this right??
73  And when we have plugins that are not related to documents???
74  */
75  QHash <Project *, MessageControl*> messageControls;
77  QMultiHash<Project *, IPlugin*> pluginInstances;
80  QMultiHash<IPlugin*, IPluginFactory*> factoryByPlugin;
89  void launchNewPlugin(IPlugin *plugin, MessageControl *mControl);
90 
91 public:
92  void launchNewPlugin(IPluginFactory *factory, Project *project);
98  void loadPlugins(QString pluginsDirPath);
105  IPluginFactory* loadPlugin(QString fileName);
111  QList<IPluginFactory*> getLoadedPlugins();
118  bool releasePlugins(Project *doc);
125  MessageControl *getMessageControl(Project *project);
132  void connectParser(IDocumentParser *parser, MessageControl *mControl);
133 
134 
138  QList <IPlugin*> getPluginInstances(Project *project);
139  /* Should be private? */
140 
141 public slots:
147  void launchProject(Project *doc);
153  void savePluginsData(Project* project);
154 
155 private slots:
162  void sendBroadcastMessage(const char *slot, void *payload);
163 
164 signals:
171  void newProjectLaunchedAndCreated(QString documentdId, QString location);
177  void notifyError(QString);
185  void addPluginWidgetToWindow(IPluginFactory*, IPlugin*, QString documentId);
194  void addPluginWidgetToWindow(IPluginFactory*, IPlugin*, Project*, int n);
195 
196 };
197 
198 } } //end namespace
199 
200 #endif // PLUGINCONTROL_H