diff --git a/CMakeLists.txt b/CMakeLists.txt index 4114040..4ab9297 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,11 +70,12 @@ INCLUDE( cmake/LibFFmpeg.cmake ) # PlaYUVer modules build ###################################################################################### SET( MODULES_DIR ${SRC_DIR}/modules ) +INCLUDE_DIRECTORIES( ${MODULES_DIR} ) FILE( GLOB ModuleCMakeFiles cmake/Module*.cmake ) INCLUDE( ${ModuleCMakeFiles} ) ###################################################################################### -# Create config.h +# Main config.h ###################################################################################### CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h ) @@ -83,7 +84,7 @@ CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_D ###################################################################################### ADD_EXECUTABLE( ${PROJECT_NAME} ${SOURCES_FILES} ${HEADERS_MOC_FILES} ${FORMS_HEADERS_FILES} ${RESOURCES_RCC_FILES} ) -TARGET_LINK_LIBRARIES( ${PROJECT_NAME} ${LINKER_LIBS} ) +TARGET_LINK_LIBRARIES( ${PROJECT_NAME} ${MODULES_LIBS} ${LINKER_LIBS} ) IF( NOT USE_QT4) QT5_USE_MODULES( ${PROJECT_NAME} ${CURR_QT_MODULES} ) diff --git a/cmake/CMakeMacros.cmake b/cmake/CMakeMacros.cmake index 3b381f6..bd11e8c 100644 --- a/cmake/CMakeMacros.cmake +++ b/cmake/CMakeMacros.cmake @@ -94,4 +94,13 @@ function(status text) else() message(STATUS "${text}") endif() -endfunction() \ No newline at end of file +endfunction() + + +macro(ADD_MODULE name files ) + set(__modulename "Module${name}") + add_library( ${__modulename} ${files} ) + set(MODULES_LIBS ${MODULES_LIBS} ${__modulename}) + ADD_DEFINITIONS( -DUSE_${name} ) + unset(__modulename) +endmacro() \ No newline at end of file diff --git a/source/ModulesHandle.cpp b/source/ModulesHandle.cpp index c516c0e..b3d2ddf 100644 --- a/source/ModulesHandle.cpp +++ b/source/ModulesHandle.cpp @@ -24,14 +24,18 @@ #include #include "ModulesHandle.h" - +#include "FilterFrame.h" namespace plaYUVer { -ModulesHandle::ModulesHandle() +ModulesHandle::ModulesHandle( QWidget * parent ) { + setParent( parent ); + m_uiModulesCount = 0; + // Register Modules + REGISTER_MODULE( FilterFrame ); } ModulesHandle::~ModulesHandle() @@ -39,11 +43,37 @@ ModulesHandle::~ModulesHandle() } -Void ModulesHandle::createMenus( QMenuBar *MainAppMenuBar ) +Void ModulesHandle::appendModule( PlaYUVerModuleIf* pIfModule ) { - MainAppMenuBar->addMenu( "&Modules" ); + m_pcPlaYUVerModules.append( pIfModule ); + m_uiModulesCount++; + } +Void ModulesHandle::createMenus( QMenuBar *MainAppMenuBar ) +{ + PlaYUVerModuleIf* currModuleIf; + QAction* currAction; + + m_pcModulesMenu = MainAppMenuBar->addMenu( "&Modules" ); + + //m_arrayModulesActions.resize( m_uiModulesCount ); + + for( Int i = 0; i < m_pcPlaYUVerModules.size(); i++ ) + { + + currModuleIf = m_pcPlaYUVerModules.at( i ); + + currAction = new QAction( tr( currModuleIf->m_pchModuleName ), parent() ); + currAction->setStatusTip( tr( currModuleIf->m_pchModuleTooltip ) ); + + m_arrayModulesActions.append( currAction ); + + m_pcModulesMenu->addAction( currAction ); + } + + //MainAppMenuBar-> +} } // NAMESPACE - + diff --git a/source/ModulesHandle.h b/source/ModulesHandle.h index 1fa3d61..5506561 100644 --- a/source/ModulesHandle.h +++ b/source/ModulesHandle.h @@ -37,24 +37,39 @@ #endif #include "TypeDef.h" +#include "PlaYUVerModuleIf.h" namespace plaYUVer { -class ModulesHandle -{ +#define REGISTER_MODULE(X) \ + { \ + if( USE_##X ) \ + { \ + X *pMod = new X(); \ + appendModule( pMod ); \ + } \ + } +class ModulesHandle : public QObject +{ + Q_OBJECT public: - ModulesHandle(); + ModulesHandle( QWidget * parent = 0 ); ~ModulesHandle(); Void createMenus( QMenuBar *MainAppMenuBar ); private: - + QMenu* m_pcModulesMenu; + UInt m_uiModulesCount; + QList m_pcPlaYUVerModules; + QVector m_arrayModulesActions; + + Void appendModule( PlaYUVerModuleIf* ); }; } // NAMESPACE #endif // __MODULESHANDLE_H__ - + diff --git a/source/modules/PlaYUVerModuleIf.h b/source/modules/PlaYUVerModuleIf.h index cd3555b..00be23c 100644 --- a/source/modules/PlaYUVerModuleIf.h +++ b/source/modules/PlaYUVerModuleIf.h @@ -32,23 +32,65 @@ #include "TypeDef.h" #include "PlaYUVerFrame.h" +class QImage; + namespace plaYUVer { +#define REGISTER_MODULE_NAME( type, name, tooltip ) \ + m_pchModuleType = type; \ + m_pchModuleName = name; \ + m_pchModuleTooltip = tooltip; + + class PlaYUVerModuleIf { public: - virtual Void create(); + PlaYUVerModuleIf() : + m_pchModuleType( NULL ), m_pchModuleName( NULL ), m_pchModuleTooltip( NULL ) + { + } + virtual ~PlaYUVerModuleIf() + { + } - virtual Void process(); - virtual PlaYUVerFrame* process( PlaYUVerFrame* InputFrame ); + const Char* m_pchModuleType; + const Char* m_pchModuleName; + const Char* m_pchModuleTooltip; - virtual Void close(); + virtual Void create() + { + } + + virtual Void create( QImage* ) + { + } + + virtual Void create( PlaYUVerFrame* ) + { + } + + virtual Void process() + { + } + + virtual QImage* process( QImage* ) + { + return NULL; + } + + virtual PlaYUVerFrame* process( PlaYUVerFrame* ) + { + return NULL; + } + + virtual Void destroy() + { + } - virtual ~PlaYUVerModuleIf() {} }; } // NAMESPACE #endif // __PLAYUVERMODULESIF_H__ - + diff --git a/source/plaYUVerApp.cpp b/source/plaYUVerApp.cpp index 0290c13..06bd797 100644 --- a/source/plaYUVerApp.cpp +++ b/source/plaYUVerApp.cpp @@ -51,6 +51,8 @@ plaYUVerApp::plaYUVerApp() mapperWindow = new QSignalMapper( this ); connect( mapperWindow, SIGNAL( mapped(QWidget*) ), this, SLOT( setActiveSubWindow(QWidget*) ) ); + m_pcModulesHandle = new ModulesHandle(this); + createActions(); createMenus(); createToolBars();