diff --git a/source/app/ModulesHandle.cpp b/source/app/ModulesHandle.cpp index 509bc70..ed56b16 100644 --- a/source/app/ModulesHandle.cpp +++ b/source/app/ModulesHandle.cpp @@ -38,7 +38,7 @@ ModulesHandle::ModulesHandle( QWidget * parent, QMdiArea *mdiArea ) : m_pcParent( parent ), m_pcMdiArea( mdiArea ), m_uiModulesCount( 0 ), - m_uiModuleSelected( -1 ) + m_iOptionSelected( INVALID_OPT ) { // configure class setParent( m_pcParent ); @@ -56,31 +56,38 @@ Void ModulesHandle::appendModule( PlaYUVerModuleIf* pIfModule ) m_uiModulesCount++; } -void ModulesHandle::selectModule( int index ) +Void ModulesHandle::selectModule( Int index ) { - m_uiModuleSelected = index; + m_iOptionSelected = index; } -SubWindowHandle* ModulesHandle::toggleSelectedModuleIf() +SubWindowHandle* ModulesHandle::processModuleHandlingOpt() { - PlaYUVerModuleIf* pcCurrModuleIf = NULL; - - if( m_uiModuleSelected >= 0 ) - pcCurrModuleIf = m_pcPlaYUVerModules.at( m_uiModuleSelected ); - m_uiModuleSelected = -1; - - if( !pcCurrModuleIf ) - return NULL; - - if( pcCurrModuleIf->m_pcAction->isChecked() ) + if( m_iOptionSelected >= 0 ) { - return enableModuleIf( pcCurrModuleIf ); + PlaYUVerModuleIf* pcCurrModuleIf = m_pcPlaYUVerModules.at( m_iOptionSelected ); + + if( pcCurrModuleIf->m_pcAction->isChecked() ) + { + return enableModuleIf( pcCurrModuleIf ); + } + else + { + destroyModuleIf( pcCurrModuleIf ); + return NULL; + } } else { - destroyModuleIf( pcCurrModuleIf ); - return NULL; + switch( m_iOptionSelected ) + { + case SWAP_FRAMES_OPT: + SubWindowHandle* pcSubWindow = qobject_cast( m_pcMdiArea->activeSubWindow() ); + pcSubWindow->swapModuleFrames(); + break; + } } + m_iOptionSelected = INVALID_OPT; return NULL; } @@ -116,18 +123,16 @@ SubWindowHandle* ModulesHandle::enableModuleIf( PlaYUVerModuleIf *pcCurrModuleIf pcCurrModuleIf->m_pcAction->setChecked( false ); return interfaceChild; } - windowName.append( " [" ); - windowName.append( pcCurrModuleIf->m_cModuleDef.m_pchModuleName ); - windowName.append( "]" ); + } else { windowName.append( pcSubWindow->userFriendlyCurrentFile() ); - windowName.append( " [" ); - windowName.append( pcCurrModuleIf->m_cModuleDef.m_pchModuleName ); - windowName.append( "]" ); pcCurrModuleIf->m_pcSubWindow[0] = pcSubWindow; } + windowName.append( " <" ); + windowName.append( pcCurrModuleIf->m_cModuleDef.m_pchModuleName ); + windowName.append( ">" ); pcCurrModuleIf->m_pcDisplaySubWindow = NULL; if( ( pcCurrModuleIf->m_cModuleDef.m_uiModuleRequirements & MODULE_REQUIRES_NEW_WINDOW ) || bShowModulesNewWindow ) @@ -212,6 +217,16 @@ Bool ModulesHandle::applyModuleIf( PlaYUVerModuleIf *pcCurrModuleIf, Bool isPlay return bRet; } +Void ModulesHandle::swapModulesWindowsIf( PlaYUVerModuleIf *pcCurrModuleIf ) +{ + if( pcCurrModuleIf->m_cModuleDef.m_uiNumberOfFrames == MODULE_REQUIRES_TWO_FRAMES ) + { + SubWindowHandle* auxWindowHandle = pcCurrModuleIf->m_pcSubWindow[0]; + pcCurrModuleIf->m_pcSubWindow[0] = pcCurrModuleIf->m_pcSubWindow[1]; + pcCurrModuleIf->m_pcSubWindow[1] = auxWindowHandle; + } +} + QMenu* ModulesHandle::createMenus( QMenuBar *MainAppMenuBar ) { PlaYUVerModuleIf* pcCurrModuleIf; @@ -225,8 +240,6 @@ QMenu* ModulesHandle::createMenus( QMenuBar *MainAppMenuBar ) m_pcModulesMenu = MainAppMenuBar->addMenu( "&Modules" ); -//m_arrayModulesActions.resize( m_uiModulesCount ); - for( Int i = 0; i < m_pcPlaYUVerModules.size(); i++ ) { pcCurrModuleIf = m_pcPlaYUVerModules.at( i ); @@ -269,10 +282,21 @@ QMenu* ModulesHandle::createMenus( QMenuBar *MainAppMenuBar ) m_arrayActions[FORCE_NEW_WINDOW_ACT] = new QAction( "Use New Window", parent() ); m_arrayActions[FORCE_NEW_WINDOW_ACT]->setStatusTip( "Show module result in a new window. Some modules already force this feature" ); m_arrayActions[FORCE_NEW_WINDOW_ACT]->setCheckable( true ); + m_arrayActions[FORCE_PLAYING_REFRESH_ACT] = new QAction( "Refresh while playing", parent() ); + m_arrayActions[FORCE_PLAYING_REFRESH_ACT]->setStatusTip( "Force module refreshing while playing" ); + m_arrayActions[FORCE_PLAYING_REFRESH_ACT]->setCheckable( true ); + + m_arrayActions[SWAP_FRAMES_ACT] = new QAction( "Swap frames", parent() ); + m_arrayActions[SWAP_FRAMES_ACT]->setStatusTip( "Swap Sub Window order" ); + connect( m_arrayActions[SWAP_FRAMES_ACT], SIGNAL( triggered() ), m_pcActionMapper, SLOT( map() ) ); + m_pcActionMapper->setMapping( m_arrayActions[SWAP_FRAMES_ACT], SWAP_FRAMES_OPT ); m_pcModulesMenu->addSeparator(); + m_pcModulesMenu->addAction( m_arrayActions[SWAP_FRAMES_ACT] ); m_pcModulesMenu->addAction( m_arrayActions[DISABLE_ALL_ACT] ); m_pcModulesMenu->addAction( m_arrayActions[FORCE_NEW_WINDOW_ACT] ); + //m_pcModulesMenu->addAction( m_arrayActions[FORCE_PLAYING_REFRESH_ACT] ); + return m_pcModulesMenu; } @@ -285,6 +309,7 @@ Void ModulesHandle::updateMenus( Bool hasSubWindow ) currModuleAction = m_arrayModulesActions.at( i ); currModuleAction->setEnabled( hasSubWindow ); } + m_arrayActions[SWAP_FRAMES_ACT]->setEnabled( hasSubWindow ); } } // NAMESPACE diff --git a/source/app/ModulesHandle.h b/source/app/ModulesHandle.h index c1a19c5..ca19ffd 100644 --- a/source/app/ModulesHandle.h +++ b/source/app/ModulesHandle.h @@ -53,16 +53,23 @@ public: QMenu* createMenus( QMenuBar* MainAppMenuBar ); Void updateMenus( Bool hasSubWindow ); - SubWindowHandle* toggleSelectedModuleIf(); + SubWindowHandle* processModuleHandlingOpt(); - static Bool applyModuleIf( PlaYUVerModuleIf* pcCurrModuleIf, Bool isPlaying = false ); static Void destroyModuleIf( PlaYUVerModuleIf* pcCurrModuleIf ); + static Bool applyModuleIf( PlaYUVerModuleIf* pcCurrModuleIf, Bool isPlaying = false ); + static Void swapModulesWindowsIf( PlaYUVerModuleIf *pcCurrModuleIf ); private: QWidget *m_pcParent; QMdiArea *m_pcMdiArea; UInt m_uiModulesCount; - Int m_uiModuleSelected; + Int m_iOptionSelected; + + enum + { + INVALID_OPT = -1, + SWAP_FRAMES_OPT = -2, + }; QMenu* m_pcModulesMenu; QList m_pcModulesSubMenuList; @@ -73,7 +80,9 @@ private: enum MODULES_ACTION_LIST { FORCE_NEW_WINDOW_ACT = 0, + FORCE_PLAYING_REFRESH_ACT, DISABLE_ALL_ACT, + SWAP_FRAMES_ACT, MODULES_TOTAL_ACT }; QVector m_arrayActions; diff --git a/source/app/SubWindowHandle.cpp b/source/app/SubWindowHandle.cpp index d41f674..b246623 100644 --- a/source/app/SubWindowHandle.cpp +++ b/source/app/SubWindowHandle.cpp @@ -135,6 +135,16 @@ Void SubWindowHandle::disableModule() } } +Void SubWindowHandle::swapModuleFrames() +{ + if( m_pcCurrentModule ) + { + ModulesHandle::swapModulesWindowsIf( m_pcCurrentModule ); + refreshFrame(); + } +} + + Void SubWindowHandle::setCurrFrame( PlaYUVerFrame* pcCurrFrame ) { m_pcCurrFrame = pcCurrFrame; @@ -143,18 +153,26 @@ Void SubWindowHandle::setCurrFrame( PlaYUVerFrame* pcCurrFrame ) Void SubWindowHandle::refreshFrame() { - Bool bSetFrame = true; + Bool bSetFrame = false; if( m_pCurrStream ) { m_pcCurrFrame = m_pCurrStream->getCurrFrame(); + bSetFrame = true; if( m_pcCurrentModule ) { bSetFrame = ModulesHandle::applyModuleIf( m_pcCurrentModule, m_bIsPlaying ); } - if( bSetFrame ) - { - m_cViewArea->setImage( m_pcCurrFrame ); - } + } + else + { + if( m_pcCurrentModule ) + { + bSetFrame = ModulesHandle::applyModuleIf( m_pcCurrentModule, m_bIsPlaying ); + } + } + if( bSetFrame ) + { + m_cViewArea->setImage( m_pcCurrFrame ); } } diff --git a/source/app/SubWindowHandle.h b/source/app/SubWindowHandle.h index ccf85ba..7183724 100644 --- a/source/app/SubWindowHandle.h +++ b/source/app/SubWindowHandle.h @@ -113,7 +113,7 @@ public: */ Void enableModule( PlaYUVerModuleIf* select_module ); Void disableModule(); - + Void swapModuleFrames(); /** * Show the image at its original size */ diff --git a/source/app/plaYUVerApp.cpp b/source/app/plaYUVerApp.cpp index aa18af0..c894b0f 100644 --- a/source/app/plaYUVerApp.cpp +++ b/source/app/plaYUVerApp.cpp @@ -228,10 +228,10 @@ Void plaYUVerApp::closeAll() // ----------------------- Modules Selection -------------------- -Void plaYUVerApp::selectModule( QAction *curr_action ) +Void plaYUVerApp::ModuleHandling( QAction *curr_action ) { m_pcFrameProperties->stopHistogram(); - SubWindowHandle *interfaceChild = m_pcModulesHandle->toggleSelectedModuleIf(); + SubWindowHandle *interfaceChild = m_pcModulesHandle->processModuleHandlingOpt(); if( interfaceChild ) { mdiArea->addSubWindow( interfaceChild ); @@ -1052,7 +1052,7 @@ Void plaYUVerApp::createMenus() m_arrayMenu[VIDEO_MENU]->addAction( m_arrayActions[VIDEO_LOCK_SELECTION_ACT] ); QMenu* modules_menu = m_pcModulesHandle->createMenus( menuBar() ); - connect( modules_menu, SIGNAL( triggered(QAction *) ), this, SLOT( selectModule(QAction *) ) ); + connect( modules_menu, SIGNAL( triggered(QAction *) ), this, SLOT( ModuleHandling(QAction *) ) ); m_arrayMenu[WINDOW_MENU] = menuBar()->addMenu( tr( "&Window" ) ); updateWindowMenu(); diff --git a/source/app/plaYUVerApp.h b/source/app/plaYUVerApp.h index 6b1eaba..7cfd846 100644 --- a/source/app/plaYUVerApp.h +++ b/source/app/plaYUVerApp.h @@ -74,7 +74,7 @@ private Q_SLOTS: void lockButtonEvent(); void videoSelectionButtonEvent(); - void selectModule( QAction * ); + void ModuleHandling( QAction * ); /** * Scale the image by a given factor