Commit 419a7f42 authored by Sebastian Eichelbaum's avatar Sebastian Eichelbaum

[CHANGE] - added new combiner which is used for adding and finding compatible modules in the GUI

parent 67c7be29
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
#include "../../common/WColor.h" #include "../../common/WColor.h"
#include "../../common/WPreferences.h" #include "../../common/WPreferences.h"
#include "../../kernel/WKernel.h" #include "../../kernel/WKernel.h"
#include "../../kernel/WModuleProjectFileCombiner.h" #include "../../kernel/combiner/WModuleProjectFileCombiner.h"
#include "../../modules/data/WMData.h" #include "../../modules/data/WMData.h"
#include "../../modules/navSlices/WMNavSlices.h" #include "../../modules/navSlices/WMNavSlices.h"
...@@ -447,11 +447,6 @@ boost::signals2::signal1< void, std::vector< std::string > >* WMainWindow::getLo ...@@ -447,11 +447,6 @@ boost::signals2::signal1< void, std::vector< std::string > >* WMainWindow::getLo
return &m_loaderSignal; return &m_loaderSignal;
} }
boost::signals2::signal2< void, boost::shared_ptr< WModule >, boost::shared_ptr< WModule > >* WMainWindow::getModuleButtonSignal()
{
return &m_moduleButtonSignal;
}
WIconManager* WMainWindow::getIconManager() WIconManager* WMainWindow::getIconManager()
{ {
return &m_iconManager; return &m_iconManager;
...@@ -594,12 +589,6 @@ void WMainWindow::closeCustomDockWidget( std::string title ) ...@@ -594,12 +589,6 @@ void WMainWindow::closeCustomDockWidget( std::string title )
//m_customDockWidgetsLock.unlock(); //m_customDockWidgetsLock.unlock();
} }
void WMainWindow::slotActivateModule( QString module )
{
// TODO(schurade): do we really need the signal? Why can't we use the kernel directly?
m_moduleButtonSignal( getDatasetBrowser()->getSelectedModule(), WModuleFactory::getModuleFactory()->getPrototypeByName( module.toStdString() ) );
}
void WMainWindow::newRoi() void WMainWindow::newRoi()
{ {
// do nothing if we can not get // do nothing if we can not get
......
...@@ -101,13 +101,6 @@ public: ...@@ -101,13 +101,6 @@ public:
*/ */
boost::signals2::signal1< void, std::vector< std::string > >* getLoaderSignal(); boost::signals2::signal1< void, std::vector< std::string > >* getLoaderSignal();
/**
* Returns the signal emitted by those module buttons in the compatibility tab.
*
* \return the signal.
*/
boost::signals2::signal2< void, boost::shared_ptr< WModule >, boost::shared_ptr< WModule > >* getModuleButtonSignal();
/** /**
* Searches for a custom dock widget with a given name and returns it, if * Searches for a custom dock widget with a given name and returns it, if
* found. * found.
...@@ -170,12 +163,6 @@ public slots: ...@@ -170,12 +163,6 @@ public slots:
*/ */
void openAboutDialog(); void openAboutDialog();
/**
* get called when a module button
* \param module name of teh module
*/
void slotActivateModule( QString module );
/** /**
* gets called when the button new roi is pressed * gets called when the button new roi is pressed
*/ */
...@@ -227,11 +214,6 @@ private: ...@@ -227,11 +214,6 @@ private:
boost::signals2::signal1< void, std::vector< std::string > > m_loaderSignal; //!< boost signal for open file dialog boost::signals2::signal1< void, std::vector< std::string > > m_loaderSignal; //!< boost signal for open file dialog
/**
* boost signal object
*/
boost::signals2::signal2< void, boost::shared_ptr< WModule >, boost::shared_ptr< WModule > > m_moduleButtonSignal;
/** /**
* Combine a module with a prototype only if the module is available. Else, nothing happens. * Combine a module with a prototype only if the module is available. Else, nothing happens.
* *
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#include "../../common/WIOTools.h" #include "../../common/WIOTools.h"
#include "../../graphicsEngine/WGraphicsEngine.h" #include "../../graphicsEngine/WGraphicsEngine.h"
#include "../../kernel/WKernel.h" #include "../../kernel/WKernel.h"
#include "../../kernel/WModuleProjectFileCombiner.h" #include "../../kernel/combiner/WModuleProjectFileCombiner.h"
#include "../../dataHandler/WDataHandler.h" #include "../../dataHandler/WDataHandler.h"
#include "../../dataHandler/WSubject.h" #include "../../dataHandler/WSubject.h"
#include "WOpenCustomDockWidgetEvent.h" #include "WOpenCustomDockWidgetEvent.h"
...@@ -142,8 +142,6 @@ int WQt4Gui::run() ...@@ -142,8 +142,6 @@ int WQt4Gui::run()
getLoadButtonSignal()->connect( boost::bind( &WKernel::loadDataSets, m_kernel, _1 ) ); getLoadButtonSignal()->connect( boost::bind( &WKernel::loadDataSets, m_kernel, _1 ) );
#endif #endif
m_mainWindow->getModuleButtonSignal()->connect( boost::bind( &WKernel::applyModule, m_kernel, _1, _2 ) );
WCondition::t_ConditionNotifierType newDatasetSignal = boost::bind( &WQt4Gui::slotUpdateTextureSorter, this ); WCondition::t_ConditionNotifierType newDatasetSignal = boost::bind( &WQt4Gui::slotUpdateTextureSorter, this );
WDataHandler::getDefaultSubject()->getListChangeCondition()->subscribeSignal( newDatasetSignal ); WDataHandler::getDefaultSubject()->getListChangeCondition()->subscribeSignal( newDatasetSignal );
......
...@@ -453,12 +453,13 @@ void WQtDatasetBrowser::buildPropTab( boost::shared_ptr< WProperties > props ) ...@@ -453,12 +453,13 @@ void WQtDatasetBrowser::buildPropTab( boost::shared_ptr< WProperties > props )
void WQtDatasetBrowser::createCompatibleButtons( boost::shared_ptr< WModule >module ) void WQtDatasetBrowser::createCompatibleButtons( boost::shared_ptr< WModule >module )
{ {
// every module may have compatibles: create ribbon menu entry // every module may have compatibles: create ribbon menu entry
std::set< boost::shared_ptr< WModule > > comps = WModuleFactory::getModuleFactory()->getCompatiblePrototypes( module ); std::set< boost::shared_ptr< WApplyPrototypeCombiner > > comps = WModuleFactory::getModuleFactory()->getCompatiblePrototypes( module );
for ( std::set< boost::shared_ptr< WModule > >::iterator iter = comps.begin(); iter != comps.end(); ++iter )
for ( std::set< boost::shared_ptr< WApplyPrototypeCombiner > >::iterator iter = comps.begin(); iter != comps.end(); ++iter )
{ {
if( !m_moduleWhiteList.empty() ) if( !m_moduleWhiteList.empty() )
{ {
const std::string tmpName = ( *iter )->getName(); const std::string tmpName = ( *iter )->getTargetPrototype()->getName();
if( std::find( m_moduleWhiteList.begin(), m_moduleWhiteList.end(), tmpName ) == m_moduleWhiteList.end() ) if( std::find( m_moduleWhiteList.begin(), m_moduleWhiteList.end(), tmpName ) == m_moduleWhiteList.end() )
{ {
continue; //do nothing for modules that are not in white list continue; //do nothing for modules that are not in white list
...@@ -468,13 +469,13 @@ void WQtDatasetBrowser::createCompatibleButtons( boost::shared_ptr< WModule >mod ...@@ -468,13 +469,13 @@ void WQtDatasetBrowser::createCompatibleButtons( boost::shared_ptr< WModule >mod
QString buttonText = ""; QString buttonText = "";
if( m_showToolBarText ) if( m_showToolBarText )
{ {
buttonText = ( *iter )->getName().c_str(); buttonText = ( *iter )->getTargetPrototype()->getName().c_str();
} }
WQtPushButton* button = m_mainWindow->getCompatiblesToolBar()->addPushButton( QString( ( *iter )->getName().c_str() ), WQtPushButton* button = m_mainWindow->getCompatiblesToolBar()->addPushButton( QString( ( *iter )->getTargetPrototype()->getName().c_str() ),
m_mainWindow->getIconManager()->getIcon( ( *iter )->getName().c_str() ), buttonText ); m_mainWindow->getIconManager()->getIcon( ( *iter )->getTargetPrototype()->getName().c_str() ), buttonText );
button->setToolTip( ( *iter )->getName().c_str() ); button->setToolTip( ( *iter )->getTargetPrototype()->getName().c_str() );
connect( button, SIGNAL( pushButtonPressed( QString ) ), m_mainWindow, SLOT( slotActivateModule( QString ) ) ); //connect( button, SIGNAL( pushButtonPressed( QString ) ), m_mainWindow, SLOT( slotActivateModule( QString ) ) );
} }
} }
......
...@@ -52,9 +52,5 @@ QString WQtPushButton::getName() ...@@ -52,9 +52,5 @@ QString WQtPushButton::getName()
void WQtPushButton::emitPressed() void WQtPushButton::emitPressed()
{ {
emit pushButtonPressed( m_name ); emit pushButtonPressed( m_name );
// Strangely we need the inverted isChecked here.
// I think this is the case as the change of the checked flag happens after the call of this function.
emit pushButtonToggled( m_name, !this->isChecked() );
} }
...@@ -84,14 +84,6 @@ signals: ...@@ -84,14 +84,6 @@ signals:
* \param name the name of the button. * \param name the name of the button.
*/ */
void pushButtonPressed( QString name ); void pushButtonPressed( QString name );
/**
* Signals whenever the button got toggled.
*
* \param name the name of the button.
* \param value true if toggled.
*/
void pushButtonToggled( QString name, bool value );
}; };
#endif // WQTPUSHBUTTON_H #endif // WQTPUSHBUTTON_H
...@@ -2,10 +2,10 @@ FILE( GLOB KERNEL_SRC "*.cpp" "*.h" ) ...@@ -2,10 +2,10 @@ FILE( GLOB KERNEL_SRC "*.cpp" "*.h" )
FILE( GLOB_RECURSE MODULES_SRC "../modules/*.cpp" "../modules/*.h" ) FILE( GLOB_RECURSE MODULES_SRC "../modules/*.cpp" "../modules/*.h" )
ADD_SUBDIRECTORY( exceptions )
FILE( GLOB KERNEL_EXCEPTIONS_SRC "exceptions/*.cpp" "exceptions/*.h" ) FILE( GLOB KERNEL_EXCEPTIONS_SRC "exceptions/*.cpp" "exceptions/*.h" )
FILE( GLOB KERNEL_COMBINER_SRC "combiner/*.cpp" "combiner/*.h" )
ADD_LIBRARY( kernel ${KERNEL_SRC} ${MODULES_SRC} ${KERNEL_EXCEPTIONS_SRC} ) ADD_LIBRARY( kernel ${KERNEL_SRC} ${MODULES_SRC} ${KERNEL_EXCEPTIONS_SRC} ${KERNEL_COMBINER_SRC} )
TARGET_LINK_LIBRARIES( kernel common dataHandler ge ${OPENSCENEGRAPH_LIBRARIES} ) TARGET_LINK_LIBRARIES( kernel common dataHandler ge ${OPENSCENEGRAPH_LIBRARIES} )
......
...@@ -46,7 +46,6 @@ ...@@ -46,7 +46,6 @@
#include "WKernel.h" #include "WKernel.h"
#include "WModule.h" #include "WModule.h"
#include "WModuleFactory.h" #include "WModuleFactory.h"
#include "WModuleProjectFileCombiner.h"
/** /**
* Used for program wide access to the kernel. * Used for program wide access to the kernel.
......
...@@ -271,11 +271,6 @@ const t_GenericSignalHandlerType WModule::getSignalHandler( MODULE_CONNECTOR_SIG ...@@ -271,11 +271,6 @@ const t_GenericSignalHandlerType WModule::getSignalHandler( MODULE_CONNECTOR_SIG
} }
} }
std::set< boost::shared_ptr< WModule > > WModule::getCompatibles()
{
return WModuleFactory::getModuleFactory()->getCompatiblePrototypes( shared_from_this() );
}
const WBoolFlag& WModule::isInitialized() const const WBoolFlag& WModule::isInitialized() const
{ {
return m_initialized; return m_initialized;
......
...@@ -205,13 +205,6 @@ public: ...@@ -205,13 +205,6 @@ public:
*/ */
virtual boost::signals2::connection subscribeSignal( MODULE_SIGNAL signal, t_ModuleErrorSignalHandlerType notifier ); virtual boost::signals2::connection subscribeSignal( MODULE_SIGNAL signal, t_ModuleErrorSignalHandlerType notifier );
/**
* Returns a set of prototypes compatible with this module's connectors.
*
* \return set of prototypes.
*/
virtual std::set< boost::shared_ptr< WModule > > getCompatibles();
/** /**
* Gets the modules base progress. This is actually a progress combiner, which bundles all progresses. * Gets the modules base progress. This is actually a progress combiner, which bundles all progresses.
* *
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
#include "WModuleFactory.h" #include "WModuleFactory.h"
#include "exceptions/WPrototypeNotUnique.h" #include "exceptions/WPrototypeNotUnique.h"
#include "exceptions/WPrototypeUnknown.h" #include "exceptions/WPrototypeUnknown.h"
#include "combiner/WApplyPrototypeCombiner.h"
// factory instance as singleton // factory instance as singleton
boost::shared_ptr< WModuleFactory > WModuleFactory::m_instance = boost::shared_ptr< WModuleFactory >(); boost::shared_ptr< WModuleFactory > WModuleFactory::m_instance = boost::shared_ptr< WModuleFactory >();
...@@ -211,9 +212,9 @@ const boost::shared_ptr< WModule > WModuleFactory::getPrototypeByInstance( boost ...@@ -211,9 +212,9 @@ const boost::shared_ptr< WModule > WModuleFactory::getPrototypeByInstance( boost
return getPrototypeByName( instance->getName() ); return getPrototypeByName( instance->getName() );
} }
std::set< boost::shared_ptr< WModule > > WModuleFactory::getCompatiblePrototypes( boost::shared_ptr< WModule > module ) std::set< boost::shared_ptr< WApplyPrototypeCombiner > > WModuleFactory::getCompatiblePrototypes( boost::shared_ptr< WModule > module )
{ {
std::set< boost::shared_ptr < WModule > > compatibles; std::set< boost::shared_ptr < WApplyPrototypeCombiner > > compatibles;
// for this a read lock is sufficient // for this a read lock is sufficient
boost::shared_lock< boost::shared_mutex > slock = boost::shared_lock< boost::shared_mutex >( m_prototypesLock ); boost::shared_lock< boost::shared_mutex > slock = boost::shared_lock< boost::shared_mutex >( m_prototypesLock );
...@@ -221,14 +222,14 @@ std::set< boost::shared_ptr< WModule > > WModuleFactory::getCompatiblePrototypes ...@@ -221,14 +222,14 @@ std::set< boost::shared_ptr< WModule > > WModuleFactory::getCompatiblePrototypes
// get offered outputs // get offered outputs
std::set<boost::shared_ptr<WModuleOutputConnector> > cons = module->getOutputConnectors(); std::set<boost::shared_ptr<WModuleOutputConnector> > cons = module->getOutputConnectors();
// First add all modules with no input connector. // First, add all modules with no input connector.
for( std::set< boost::shared_ptr< WModule > >::iterator listIter = m_prototypes.begin(); listIter != m_prototypes.end(); ++listIter ) for( std::set< boost::shared_ptr< WModule > >::iterator listIter = m_prototypes.begin(); listIter != m_prototypes.end(); ++listIter )
{ {
// get connectors of this prototype // get connectors of this prototype
std::set<boost::shared_ptr<WModuleInputConnector> > pcons = ( *listIter )->getInputConnectors(); std::set<boost::shared_ptr<WModuleInputConnector> > pcons = ( *listIter )->getInputConnectors();
if( pcons.size() == 0 ) if( pcons.size() == 0 )
{ {
compatibles.insert( *listIter ); compatibles.insert( boost::shared_ptr< WApplyPrototypeCombiner >( new WApplyPrototypeCombiner( module, "", *listIter, "" ) ) );
} }
} }
...@@ -239,8 +240,6 @@ std::set< boost::shared_ptr< WModule > > WModuleFactory::getCompatiblePrototypes ...@@ -239,8 +240,6 @@ std::set< boost::shared_ptr< WModule > > WModuleFactory::getCompatiblePrototypes
return compatibles; return compatibles;
} }
// TODO(ebaum): see ticket #178 for this
if ( cons.size() > 1 ) if ( cons.size() > 1 )
{ {
wlog::warn( "ModuleFactory" ) << "Can not find compatibles for " << module->getName() << " module (more than 1 output connector). Using " wlog::warn( "ModuleFactory" ) << "Can not find compatibles for " << module->getName() << " module (more than 1 output connector). Using "
...@@ -270,7 +269,10 @@ std::set< boost::shared_ptr< WModule > > WModuleFactory::getCompatiblePrototypes ...@@ -270,7 +269,10 @@ std::set< boost::shared_ptr< WModule > > WModuleFactory::getCompatiblePrototypes
if( ( *cons.begin() )->connectable( *pcons.begin() ) && ( *pcons.begin() )->connectable( *cons.begin() ) ) if( ( *cons.begin() )->connectable( *pcons.begin() ) && ( *pcons.begin() )->connectable( *cons.begin() ) )
{ {
// it is compatible -> add to list // it is compatible -> add to list
compatibles.insert( *listIter );
compatibles.insert( boost::shared_ptr< WApplyPrototypeCombiner >(
new WApplyPrototypeCombiner( module, ( *cons.begin() )->getName(), *listIter, ( *pcons.begin() )->getName() ) )
);
} }
} }
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <boost/thread.hpp> #include <boost/thread.hpp>
#include "../modules/data/WMData.h" // this is the ONLY module with a special meaning. Every one knowing the factory also knows this #include "../modules/data/WMData.h" // this is the ONLY module with a special meaning. Every one knowing the factory also knows this
#include "combiner/WApplyPrototypeCombiner.h"
#include "WModule.h" #include "WModule.h"
/** /**
...@@ -114,13 +115,13 @@ public: ...@@ -114,13 +115,13 @@ public:
static bool isA( boost::shared_ptr< WModule > module ); static bool isA( boost::shared_ptr< WModule > module );
/** /**
* Returns a set of modules compatible with the specified one. * Returns a set of module combiners with module combinations compatible with the specified one.
* *
* \param module the module to find prototype for. * \param module the module to find the compatibles for.
* *
* \return set of compatible prototypes. * \return set of compatible combiners.
*/ */
std::set< boost::shared_ptr< WModule > > getCompatiblePrototypes( boost::shared_ptr< WModule > module ); std::set< boost::shared_ptr< WApplyPrototypeCombiner > > getCompatiblePrototypes( boost::shared_ptr< WModule > module );
/** /**
* This method uses a newly created instance of WModule and initializes it properly. After using this method, the module is * This method uses a newly created instance of WModule and initializes it properly. After using this method, the module is
......
//---------------------------------------------------------------------------
//
// Project: OpenWalnut ( http://www.openwalnut.org )
//
// Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
// For more information see http://www.openwalnut.org/copying
//
// This file is part of OpenWalnut.
//
// OpenWalnut is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// OpenWalnut is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
//
//---------------------------------------------------------------------------
#include <iostream>
#include <map>
#include <list>
#include <string>
#include <utility>
#include <boost/regex.hpp>
#include <boost/lexical_cast.hpp>
#include "../WKernel.h"
#include "../WModuleCombiner.h"
#include "../WModuleFactory.h"
#include "../WModuleConnector.h"
#include "../WModule.h"
#include "../WModuleInputConnector.h"
#include "../WModuleOutputConnector.h"
#include "../exceptions/WModuleConnectorNotFound.h"
#include "../../common/WLogger.h"
#include "WApplyPrototypeCombiner.h"
WApplyPrototypeCombiner::WApplyPrototypeCombiner( boost::shared_ptr< WModuleContainer > target,
boost::shared_ptr< WModule > srcModule, std::string srcConnector,
boost::shared_ptr< WModule > prototype, std::string targetConnector ):
WModuleCombiner( target ),
m_srcModule( srcModule ),
m_srcConnector( srcConnector ),
m_targetPrototype( prototype ),
m_targetConnector( targetConnector )
{
}
WApplyPrototypeCombiner::WApplyPrototypeCombiner( boost::shared_ptr< WModule > srcModule, std::string srcConnector,
boost::shared_ptr< WModule > prototype, std::string targetConnector ):
WModuleCombiner( WKernel::getRunningKernel()->getRootContainer() ),
m_srcModule( srcModule ),
m_srcConnector( srcConnector ),
m_targetPrototype( prototype ),
m_targetConnector( targetConnector )
{
}
WApplyPrototypeCombiner::~WApplyPrototypeCombiner()
{
// cleanup
}
boost::shared_ptr< WModule > WApplyPrototypeCombiner::getSrcModule() const
{
return m_srcModule;
}
std::string WApplyPrototypeCombiner::getSrcConnector() const
{
return m_srcConnector;
}
boost::shared_ptr< WModule > WApplyPrototypeCombiner::getTargetPrototype() const
{
return m_targetPrototype;
}
std::string WApplyPrototypeCombiner::getTargetConnector() const
{
return m_targetConnector;
}
void WApplyPrototypeCombiner::apply()
{
// create module instance
boost::shared_ptr< WModule > targetModule = WModuleFactory::getModuleFactory()->create( m_targetPrototype );
// add the target module to the container
m_container->add( targetModule );
// NOTE: here, we assume the src module already to be in the container. If not, connect will fail with an exception -> so no need for a
// separate exception here
// wait
m_srcModule->isReadyOrCrashed().wait();
if ( m_srcModule->isCrashed()() )
{
wlog::error( "Prototype Combiner" ) << "The source module \"" << m_srcModule->getName() << "\" has crashed. Abort.";
return;
}
targetModule->isReadyOrCrashed().wait();
if ( targetModule->isCrashed()() )
{
wlog::error( "Prototype Combiner" ) << "The target module \"" << targetModule->getName() << "\" has crashed. Abort.";
return;
}
// if the target connector is an empty string -> do not connect, just add
if ( m_targetConnector.empty() )
{
return;
}
// and connect them finally:
targetModule->getInputConnector( m_targetConnector )->connect( m_srcModule->getOutputConnector( m_srcConnector ) );
}
//---------------------------------------------------------------------------
//
// Project: OpenWalnut ( http://www.openwalnut.org )
//
// Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
// For more information see http://www.openwalnut.org/copying
//
// This file is part of OpenWalnut.
//
// OpenWalnut is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// OpenWalnut is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
//
//---------------------------------------------------------------------------
#ifndef WAPPLYPROTOTYPECOMBINER_H
#define WAPPLYPROTOTYPECOMBINER_H
#include <list>
#include <map>
#include <string>
#include <utility>
#include <boost/shared_ptr.hpp>
#include "../WModule.h"
#include "../WModuleCombiner.h"
/**
* This class combines an existing module with an specified prototype. The connections to use must be explicitly known.
*/
class WApplyPrototypeCombiner: public WModuleCombiner
{
public:
/**
* Creates a combiner which sets up the specified modules and prototype combination.
*
* \param target the target container
* \param srcModule the module whose output should be connected with the prototypes input
* \param srcConnector the output connector of the module
* \param prototype the prototype to use for connecting the module with
* \param targetConnector the input connector of the prototype to connect with srcConnector.
*/
WApplyPrototypeCombiner( boost::shared_ptr< WModuleContainer > target,
boost::shared_ptr< WModule > srcModule, std::string srcConnector,
boost::shared_ptr< WModule > prototype, std::string targetConnector );
/**
* Creates a combiner which sets up the specified modules and prototype combination. This constructor automatically uses the kernel's root
* container as target container.
*
* \param srcModule the module whose output should be connected with the prototypes input
* \param srcConnector the output connector of the module
* \param prototype the prototype to use for connecting the module with
* \param targetConnector the input connector of the prototype to connect with srcConnector.
*/
WApplyPrototypeCombiner( boost::shared_ptr< WModule > srcModule, std::string srcConnector,
boost::shared_ptr< WModule > prototype, std::string targetConnector );
/**
* Destructor.
*/
virtual ~WApplyPrototypeCombiner();
/**
* Apply the internal module structure to the target container. Be aware, that this operation might take some time, as modules can be
* connected only if they are "ready", which, at least with WMData modules, might take some time. It applies the loaded project file.
*/
virtual void apply();
/**
* Gets the source module. This module's output connector is connected with the target.
*
* \return the source module.
*/
boost::shared_ptr< WModule > getSrcModule() const;
/**
* The output connector of m_srcModule to connect with m_targetConnector.
*
* \return the source module's output connector.
*/
std::string getSrcConnector() const;
/**
* The module prototype to connect with m_srcMdodule.
*
* \return the target module prototype.
*/
boost::shared_ptr< WModule > getTargetPrototype() const;
/**
* The input connector the target module to connect with m_srcConnector.