plugin.h 4.78 KB
Newer Older
1
2
3
#ifndef _PLUGIN_H_
#define _PLUGIN_H_

Pierre Kraemer's avatar
Pierre Kraemer committed
4
5
#include <QtPlugin>
#include <QAction>
6

7
#include "types.h"
8

Pierre Kraemer's avatar
Pierre Kraemer committed
9
10
11
12
13
14
namespace CGoGN
{

namespace SCHNApps
{

15
16
class Window;

Pierre Kraemer's avatar
Pierre Kraemer committed
17
class Plugin : public QObject
18
{
19
public:
Pierre Kraemer's avatar
Pierre Kraemer committed
20
	Plugin();
Pierre Kraemer's avatar
Pierre Kraemer committed
21
22
23
24
25
26
27
28
29
30
31
	virtual ~Plugin();

	const QString& getName() { return m_name; }
	void setName(const QString& name) { m_name = name; }

	const QString& getFilePath() { return m_filePath; }
	void setFilePath(const QString& f) { m_filePath = f; }

	Window* getWindow() { return m_window; }
	void setWindow(Window* w) { m_window = w; }

Pierre Kraemer's avatar
Pierre Kraemer committed
32
33
	bool isUsed() const { return !l_views.empty(); }

34
	bool getProvidesRendering() { return b_providesRendering; }
35
	void setProvidesRendering(bool b) {	b_providesRendering = b; }
36

37
38
39
	virtual bool enable() = 0;
	virtual void disable() = 0;

40
	virtual void redraw(View* view) = 0;
Pierre Kraemer's avatar
Pierre Kraemer committed
41

42
43
44
45
46
47
48
	virtual void keyPress(View* view, int key) = 0;
	virtual void keyRelease(View* view, int key) = 0;
	virtual void mousePress(View* view, int button, int x, int y) = 0;
	virtual void mouseRelease(View* view, int button, int x, int y) = 0;
	virtual void mouseMove(View* view, int buttons, int x, int y) = 0;
	virtual void wheelEvent(View* view, int delta, int x, int y) = 0;

49
50
	virtual void viewLinked(View* view) = 0;
	virtual void viewUnlinked(View* view) = 0;
51
	virtual void currentViewChanged(View* view) = 0;
Pierre Kraemer's avatar
Pierre Kraemer committed
52

53
54
55
	virtual void mapLinked(View* view, MapHandlerGen* m) = 0;
	virtual void mapUnlinked(View* view, MapHandlerGen* m) = 0;

Pierre Kraemer's avatar
Pierre Kraemer committed
56
	/*********************************************************
Pierre Kraemer's avatar
Pierre Kraemer committed
57
	 * MANAGE LINKED VIEWS
Pierre Kraemer's avatar
Pierre Kraemer committed
58
59
	 *********************************************************/

60
	void linkView(View* view);
Pierre Kraemer's avatar
Pierre Kraemer committed
61
	void unlinkView(View* view);
62
63
	const QList<View*>& getLinkedViews() const { return l_views; }
	bool isLinkedToView(View* view) const { return l_views.contains(view); }
Pierre Kraemer's avatar
Pierre Kraemer committed
64

65
66
67
68
69
70
	/*********************************************************
	 * MANAGE SHADERS
	 *********************************************************/

	void registerShader(Utils::GLSLShader* shader);
	void unregisterShader(Utils::GLSLShader* shader);
71
	const QList<Utils::GLSLShader*> getShaders() const { return l_shaders; }
72

Pierre Kraemer's avatar
Pierre Kraemer committed
73
74
75
	/*********************************************************
	 * MANAGE DOCK TABS
	 *********************************************************/
Pierre Kraemer's avatar
Pierre Kraemer committed
76

Pierre Kraemer's avatar
Pierre Kraemer committed
77
78
	bool addTabInDock(QWidget* tabWidget, const QString& tabText);
	void removeTabInDock(QWidget* tabWidget);
79
	const QList<QWidget*>& getTabWidgets() const { return l_tabWidgets; }
Pierre Kraemer's avatar
Pierre Kraemer committed
80
81
82
83

	/*********************************************************
	 * MANAGE MENU ACTIONS
	 *********************************************************/
Pierre Kraemer's avatar
Pierre Kraemer committed
84

Pierre Kraemer's avatar
Pierre Kraemer committed
85
86
87
88
89
90
	bool addMenuAction(const QString& menuPath, QAction* action);
	void removeMenuAction(QAction* action);

	/*********************************************************
	 * MANAGE TOOLBAR ACTIONS
	 *********************************************************/
Pierre Kraemer's avatar
Pierre Kraemer committed
91

Pierre Kraemer's avatar
Pierre Kraemer committed
92
93
	bool addToolbarAction(QAction* action);
	void removeToolbarAction(QAction* action);
94

Pierre Kraemer's avatar
Pierre Kraemer committed
95
96
97
98
protected:
	QString m_name;
	QString m_filePath;
	Window* m_window;
99

100
101
	bool b_providesRendering;

Pierre Kraemer's avatar
Pierre Kraemer committed
102
	QList<View*> l_views;
Pierre Kraemer's avatar
Pierre Kraemer committed
103
104
105
	QList<QWidget*> l_tabWidgets;
	QList<QAction*> l_menuActions;
	QList<QAction*> l_toolbarActions;
106

107
108
	QList<Utils::GLSLShader*> l_shaders;

Pierre Kraemer's avatar
Pierre Kraemer committed
109
110
//	QList<Plugin*> l_dependencies;
//	QList<Plugin*> l_dependantPlugins;
111

Pierre Kraemer's avatar
Pierre Kraemer committed
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
	void addDependantPlugin(Plugin* p) { l_dependantPlugins.push_back(p); }
	void removeDependantPlugin(Plugin* p) { l_dependantPlugins.removeAll(p); }
	void removeAllDependantPlugins() { l_dependantPlugins.clear(); }
	bool hasDependantPlugins() { return !l_dependantPlugins.isEmpty(); }
	QStringList getDependantPluginNames()
	{
		QStringList l;
		for(QList<Plugin*>::iterator it = l_dependantPlugins.begin(); it != l_dependantPlugins.end(); ++it)
			l.push_back((*it)->getName());
		return l;
	}

	Plugin* addDependency(QString dependency)
	{
		Plugin* plugin;
		if((plugin = m_window->checkPluginDependency(dependency, this)))
		{
			l_dependencies.push_back(plugin);
			return plugin;
		}
		else
			return NULL;
	}

	template<typename T>
	T* getDependency(QString dependency)
	{
		return (T*)(this->addDependency(dependency));
	}

	virtual void removeDependencyLink(Plugin* p)
	{
		p->removeDependantPlugin(this);
		l_dependencies.removeAll(p);
	}
	virtual void removeAllDependencyLinks()
	{
		foreach(Plugin* p, l_dependencies)
			p->removeDependantPlugin(this);
		l_dependencies.clear();
	}
	void removeDependantLink(Plugin* p)
	{
		int i = l_dependantPlugins.indexOf(p);
		if(i >= 0)
			p->removeDependencyLink(this);
	}
	void removeAllDependantLinks()
	{
		foreach(Plugin* p, l_dependantPlugins)
			p->removeDependencyLink(this);
	}

	virtual void unloadDependantPlugins()
	{
		while(!l_dependantPlugins.empty())
		{
			if(l_dependantPlugins.back())
				m_window->unloadPlugin(l_dependantPlugins.back()->getName());
		}
	}
Pierre Kraemer's avatar
Pierre Kraemer committed
174
*/
175
176
};

Pierre Kraemer's avatar
Pierre Kraemer committed
177
178
179
180
181
} // namespace SCHNApps

} // namespace CGoGN

Q_DECLARE_INTERFACE(CGoGN::SCHNApps::Plugin, "CGoGN.SCHNapps.Plugin")
182
183

#endif