| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | #ifndef INCLUDE_PLUGINMANAGER_H
 | 
					
						
							|  |  |  | #define INCLUDE_PLUGINMANAGER_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QObject>
 | 
					
						
							|  |  |  | #include <QDir>
 | 
					
						
							|  |  |  | #include "plugin/plugininterface.h"
 | 
					
						
							|  |  |  | #include "plugin/pluginapi.h"
 | 
					
						
							|  |  |  | #include "util/export.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class QAction; | 
					
						
							|  |  |  | class QComboBox; | 
					
						
							|  |  |  | class QPluginLoader; | 
					
						
							|  |  |  | class Preset; | 
					
						
							|  |  |  | class MainWindow; | 
					
						
							|  |  |  | class SampleSource; | 
					
						
							|  |  |  | class Message; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-30 01:26:51 +02:00
										 |  |  | class SDRANGEL_API PluginManager : public QObject { | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	Q_OBJECT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2015-08-09 04:09:05 +02:00
										 |  |  | 	struct Plugin | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 		QString filename; | 
					
						
							|  |  |  | 		QPluginLoader* loader; | 
					
						
							|  |  |  | 		PluginInterface* plugin; | 
					
						
							| 
									
										
										
										
											2015-08-09 04:09:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 		Plugin(const QString& _filename, QPluginLoader* pluginLoader, PluginInterface* _plugin) : | 
					
						
							|  |  |  | 			filename(_filename), | 
					
						
							|  |  |  | 			loader(pluginLoader), | 
					
						
							|  |  |  | 			plugin(_plugin) | 
					
						
							|  |  |  | 		{ } | 
					
						
							|  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2015-08-09 04:09:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	typedef QList<Plugin> Plugins; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	explicit PluginManager(MainWindow* mainWindow, DSPEngine* dspEngine, QObject* parent = NULL); | 
					
						
							|  |  |  | 	~PluginManager(); | 
					
						
							|  |  |  | 	void loadPlugins(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const Plugins& getPlugins() const { return m_plugins; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void registerChannel(const QString& channelName, PluginInterface* plugin, QAction* action); | 
					
						
							|  |  |  | 	void registerChannelInstance(const QString& channelName, PluginGUI* pluginGUI); | 
					
						
							|  |  |  | 	void addChannelRollup(QWidget* pluginGUI); | 
					
						
							|  |  |  | 	void removeChannelInstance(PluginGUI* pluginGUI); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void registerSampleSource(const QString& sourceName, PluginInterface* plugin); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void loadSettings(const Preset* preset); | 
					
						
							| 
									
										
										
										
											2015-07-19 02:07:40 +02:00
										 |  |  | 	void saveSettings(Preset* preset); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void freeAll(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-17 08:29:34 +02:00
										 |  |  | 	bool handleMessage(const Message& message); | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void updateSampleSourceDevices(); | 
					
						
							|  |  |  | 	void fillSampleSourceSelector(QComboBox* comboBox); | 
					
						
							|  |  |  | 	int selectSampleSource(int index); | 
					
						
							|  |  |  | 	int selectSampleSource(const QString& source); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  | 	struct ChannelRegistration { | 
					
						
							|  |  |  | 		QString m_channelName; | 
					
						
							|  |  |  | 		PluginInterface* m_plugin; | 
					
						
							|  |  |  | 		ChannelRegistration(const QString& channelName, PluginInterface* plugin) : | 
					
						
							|  |  |  | 			m_channelName(channelName), | 
					
						
							|  |  |  | 			m_plugin(plugin) | 
					
						
							|  |  |  | 		{ } | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 	typedef QList<ChannelRegistration> ChannelRegistrations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct ChannelInstanceRegistration { | 
					
						
							|  |  |  | 		QString m_channelName; | 
					
						
							|  |  |  | 		PluginGUI* m_gui; | 
					
						
							|  |  |  | 		ChannelInstanceRegistration() : | 
					
						
							|  |  |  | 			m_channelName(), | 
					
						
							|  |  |  | 			m_gui(NULL) | 
					
						
							|  |  |  | 		{ } | 
					
						
							|  |  |  | 		ChannelInstanceRegistration(const QString& channelName, PluginGUI* pluginGUI) : | 
					
						
							|  |  |  | 			m_channelName(channelName), | 
					
						
							|  |  |  | 			m_gui(pluginGUI) | 
					
						
							|  |  |  | 		{ } | 
					
						
							| 
									
										
										
										
											2015-07-19 02:07:40 +02:00
										 |  |  | 		bool operator<(const ChannelInstanceRegistration& other) const; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 	typedef QList<ChannelInstanceRegistration> ChannelInstanceRegistrations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct SampleSourceRegistration { | 
					
						
							|  |  |  | 		QString m_sourceName; | 
					
						
							|  |  |  | 		PluginInterface* m_plugin; | 
					
						
							|  |  |  | 		SampleSourceRegistration(const QString& sourceName, PluginInterface* plugin) : | 
					
						
							|  |  |  | 			m_sourceName(sourceName), | 
					
						
							|  |  |  | 			m_plugin(plugin) | 
					
						
							|  |  |  | 		{ } | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 	typedef QList<SampleSourceRegistration> SampleSourceRegistrations; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct SampleSourceDevice { | 
					
						
							|  |  |  | 		PluginInterface* m_plugin; | 
					
						
							|  |  |  | 		QString m_displayName; | 
					
						
							|  |  |  | 		QString m_sourceName; | 
					
						
							|  |  |  | 		QByteArray m_address; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		SampleSourceDevice(PluginInterface* plugin, const QString& displayName, const QString& sourceName, const QByteArray& address) : | 
					
						
							|  |  |  | 			m_plugin(plugin), | 
					
						
							|  |  |  | 			m_displayName(displayName), | 
					
						
							|  |  |  | 			m_sourceName(sourceName), | 
					
						
							|  |  |  | 			m_address(address) | 
					
						
							|  |  |  | 		{ } | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 	typedef QList<SampleSourceDevice> SampleSourceDevices; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	PluginAPI m_pluginAPI; | 
					
						
							|  |  |  | 	MainWindow* m_mainWindow; | 
					
						
							|  |  |  | 	DSPEngine* m_dspEngine; | 
					
						
							|  |  |  | 	Plugins m_plugins; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	ChannelRegistrations m_channelRegistrations; | 
					
						
							|  |  |  | 	ChannelInstanceRegistrations m_channelInstanceRegistrations; | 
					
						
							|  |  |  | 	SampleSourceRegistrations m_sampleSourceRegistrations; | 
					
						
							|  |  |  | 	SampleSourceDevices m_sampleSourceDevices; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-18 02:47:14 +02:00
										 |  |  | 	QString m_sampleSourceName; | 
					
						
							|  |  |  | 	PluginGUI* m_sampleSourcePluginGUI; | 
					
						
							| 
									
										
										
										
											2014-05-18 16:52:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	void loadPlugins(const QDir& dir); | 
					
						
							|  |  |  | 	void renameChannelInstances(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline bool operator<(const PluginManager::Plugin& a, const PluginManager::Plugin& b) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return a.plugin->getPluginDescriptor().displayedName < b.plugin->getPluginDescriptor().displayedName; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // INCLUDE_PLUGINMANAGER_H
 |