diff --git a/BasePlugin/PluginConnectionInterface.docu b/BasePlugin/PluginConnectionInterface.docu new file mode 100644 index 0000000000000000000000000000000000000000..1d1dc2ad3ef3c42748e4ac2056e1913127fc27e7 --- /dev/null +++ b/BasePlugin/PluginConnectionInterface.docu @@ -0,0 +1,77 @@ +/** \page pluginConnectionInterfacePage Plugin Connection Interface +\n +\image html PluginConnectionInterface.png +\n + +The PluginConnectionInterface allows to connect signals and slots across different OpenFlipper plugins. + +Usually you should implement the BaseInterface::pluginsInitialized() function from BaseInterface. In this function you can setup +your connections. Don't try to setup your connections earlier as the plugins you try to connect may not exist yet. + +\n + WARNING! Never connect SIGNALS and SLOTS which are already defined in other Interfaces!! WARNING! +\n +This might result in endless loops and breaks OpenFlippers control loops. You have to keep track +of your connections yourself. If you call slots which call updatedOject which in turn call your original +slot you get a loop and OpenFlipper is not responsible for your endless loops! Be careful! + +The following code shows a simple example to connect signals and slots. For the signal and slot definition +you have to use the common QT macros SIGNAL and SLOT. +\code +void ExamplePlugin::pluginsInitialized() +{ + // Use the QT macros to generate the signatures + emit crossPluginConnect(pluginA,SIGNAL(signalA(QString)),pluginB,SLOT(slotB(QString))); +} +\endcode + +The next example shows how to use a queued connection between two plugins: +\n +ExamplePlugin.hh: +\code +class ExamplePlugin: public QObject, BaseInterface, PluginConnectionInterface, [...] +{ + Q_OBJECT + Q_INTERFACES(BaseInterface) + Q_INTERFACES(PluginConnectionInterface) + [...] + +signals: + void crossPluginConnectQueued( QString, const char*, QString, const char*); + + /// example signal which can be used to group objects in datacontrol + void void dataControlGroupObjects(IdList, QString); + + [...] + void exampleFunction(); +} +\endcode + +ExamplePlugin.cc: +\code +[...] +void ExamplePlugin::pluginsInitialized() +{ + [...] + emit crossPluginConnectQueued("exampleplugin",SIGNAL(dataControlGroupObjects(IdList, QString)),"datacontrol",SLOT(groupObjects(IdList, QString))); +} + +void ExamplePlugin::exampleFunction() +{ + //do whatever you want, especially use the signals you want, but don't create loops + // e.g. emit a bazillion addEmptObject signals + [...] + // finally group them by emitting the connected signal + emit dataControlGroupObjects(ids, "fancy group name"); +} +\endcode + +To use the PluginConnectionInterface: + + +*/ diff --git a/BasePlugin/PluginConnectionInterface.hh b/BasePlugin/PluginConnectionInterface.hh index 51aaf17d1f702772778070a6ac032c91fee9cc43..8066409b600788ac932d062ba354ecaa4d5d73c7 100644 --- a/BasePlugin/PluginConnectionInterface.hh +++ b/BasePlugin/PluginConnectionInterface.hh @@ -107,84 +107,6 @@ class PluginConnectionInterface { }; -/** \page pluginConnectionInterfacePage Plugin Connection Interface -\n -\image html PluginConnectionInterface.png -\n - -The PluginConnectionInterface allows to connect signals and slots across different OpenFlipper plugins. - -Usually you should implement the BaseInterface::pluginsInitialized() function from BaseInterface. In this function you can setup -your connections. Don't try to setup your connections earlier as the plugins you try to connect may not exist yet. - -\n - WARNING! Never connect SIGNALS and SLOTS which are already defined in other Interfaces!! WARNING! -\n -This might result in endless loops and breaks OpenFlippers control loops. You have to keep track -of your connections yourself. If you call slots which call updatedOject which in turn call your original -slot you get a loop and OpenFlipper is not responsible for your endless loops! Be careful! - -The following code shows a simple example to connect signals and slots. For the signal and slot definition -you have to use the common QT macros SIGNAL and SLOT. -\code -void ExamplePlugin::pluginsInitialized() -{ - // Use the QT macros to generate the signatures - emit crossPluginConnect(pluginA,SIGNAL(signalA(QString)),pluginB,SLOT(slotB(QString))); -} -\endcode - -The next example shows how to use a queued connection between two plugins: -\n -ExamplePlugin.hh: -\code -class ExamplePlugin: public QObject, BaseInterface, PluginConnectionInterface, [...] -{ - Q_OBJECT - Q_INTERFACES(BaseInterface) - Q_INTERFACES(PluginConnectionInterface) - [...] - -signals: - void crossPluginConnectQueued( QString, const char*, QString, const char*); - - /// example signal which can be used to group objects in datacontrol - void void dataControlGroupObjects(IdList, QString); - - [...] - void exampleFunction(); -} -\endcode - -ExamplePlugin.cc: -\code -[...] -void ExamplePlugin::pluginsInitialized() -{ - [...] - emit crossPluginConnectQueued("exampleplugin",SIGNAL(dataControlGroupObjects(IdList, QString)),"datacontrol",SLOT(groupObjects(IdList, QString))); -} - -void ExamplePlugin::exampleFunction() -{ - //do whatever you want, especially use the signals you want, but don't create loops - // e.g. emit a bazillion addEmptObject signals - [...] - // finally group them by emitting the connected signal - emit dataControlGroupObjects(ids, "fancy group name"); -} -\endcode - -To use the PluginConnectionInterface: - - -*/ - Q_DECLARE_INTERFACE(PluginConnectionInterface,"OpenFlipper.PluginConnectionInterface/1.0")