diff --git a/app/ModulesHandle.cpp b/app/ModulesHandle.cpp index 27d1885..45fcd8f 100644 --- a/app/ModulesHandle.cpp +++ b/app/ModulesHandle.cpp @@ -385,7 +385,7 @@ Void ModulesHandle::enableModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf ) } } - applyModuleIf( pcCurrModuleIf, false ); + applyModuleIf( pcCurrModuleIf, false, true ); QCoreApplication::processEvents(); if( pcModuleSubWindow ) @@ -400,40 +400,7 @@ Void ModulesHandle::destroyModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf ) { if( pcCurrModuleIf ) { - if( pcCurrModuleIf->m_pcModuleDock ) - { - pcCurrModuleIf->m_pcModuleDock->close(); - pcCurrModuleIf->m_pcModuleDock = NULL; - } - if( pcCurrModuleIf->m_pcDockWidget ) - { - pcCurrModuleIf->m_pcDockWidget->close(); - pcCurrModuleIf->m_pcDockWidget = NULL; - } - if( pcCurrModuleIf->m_pcDisplaySubWindow ) - pcCurrModuleIf->m_pcDisplaySubWindow->closeSubWindow(); - pcCurrModuleIf->m_pcDisplaySubWindow = NULL; - - for( Int i = 0; i < MAX_NUMBER_FRAMES; i++ ) - { - if( pcCurrModuleIf->m_pcSubWindow[i] ) - { - pcCurrModuleIf->m_pcSubWindow[i]->disableModule( pcCurrModuleIf ); - pcCurrModuleIf->m_pcSubWindow[i] = NULL; - } - } - if( pcCurrModuleIf->m_pcModuleStream ) - { - pcCurrModuleIf->m_pcModuleStream->close(); - delete pcCurrModuleIf->m_pcModuleStream; - pcCurrModuleIf->m_pcModuleStream = NULL; - } - if( pcCurrModuleIf->m_pcModule ) - { - pcCurrModuleIf->m_pcModule->destroy(); - pcCurrModuleIf->m_pcModule->Delete(); - pcCurrModuleIf->m_pcModule = NULL; - } + pcCurrModuleIf->destroy(); } } @@ -462,10 +429,10 @@ Bool ModulesHandle::applyModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf, Bool isP { #ifdef PLAYUVER_THREADED_MODULES if( !disableThreads ) - pcCurrModuleIf->start(); + pcCurrModuleIf->start(); else #endif - pcCurrModuleIf->run(); + pcCurrModuleIf->run(); if( pcCurrModuleIf->m_pcDisplaySubWindow || pcCurrModuleIf->m_pcModule->m_iModuleType == FRAME_MEASUREMENT_MODULE ) { @@ -560,29 +527,26 @@ Void ModulesHandle::applyAllModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf ) } } -Bool ModulesHandle::showModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf, PlaYUVerFrame* processedFrame ) +Void ModulesHandle::showModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf ) { - Bool bRet = false; - //if( processedFrame ) + switch( pcCurrModuleIf->m_pcModule->m_iModuleType ) { + case FRAME_PROCESSING_MODULE: if( pcCurrModuleIf->m_pcDisplaySubWindow ) { - pcCurrModuleIf->m_pcDisplaySubWindow->setCurrFrame( processedFrame ); - bRet = true; + pcCurrModuleIf->m_pcDisplaySubWindow->setCurrFrame( pcCurrModuleIf->m_pcProcessedFrame ); + pcCurrModuleIf->m_pcDisplaySubWindow->clearWindowBusy(); } else { - pcCurrModuleIf->m_pcSubWindow[0]->setCurrFrame( processedFrame ); + pcCurrModuleIf->m_pcSubWindow[0]->setCurrFrame( pcCurrModuleIf->m_pcProcessedFrame ); + pcCurrModuleIf->m_pcSubWindow[0]->clearWindowBusy(); } + break; + case FRAME_MEASUREMENT_MODULE: + pcCurrModuleIf->m_pcModuleDock->setModulueReturnValue( pcCurrModuleIf->m_dMeasurementResult ); + break; } - return bRet; -} - -Bool ModulesHandle::showModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf, Double moduleResult ) -{ - Bool bRet = false; - pcCurrModuleIf->m_pcModuleDock->setModulueReturnValue( moduleResult ); - return bRet; } Void ModulesHandle::swapModulesWindowsIf( PlaYUVerAppModuleIf *pcCurrModuleIf ) @@ -605,15 +569,7 @@ Void ModulesHandle::customEvent( QEvent *event ) PlaYUVerAppModuleIf::EventData *eventData = ( PlaYUVerAppModuleIf::EventData* )event; if( eventData->m_bSuccess ) { - switch( eventData->m_pcModule->m_pcModule->m_iModuleType ) - { - case FRAME_PROCESSING_MODULE: - showModuleIf( eventData->m_pcModule, eventData->m_pcModule->m_pcProcessedFrame ); - break; - case FRAME_MEASUREMENT_MODULE: - showModuleIf( eventData->m_pcModule, eventData->m_pcModule->m_dMeasurementResult ); - break; - } + showModuleIf( eventData->m_pcModule ); } } diff --git a/app/ModulesHandle.h b/app/ModulesHandle.h index 498a281..768552a 100644 --- a/app/ModulesHandle.h +++ b/app/ModulesHandle.h @@ -65,8 +65,7 @@ public: static Void destroyModuleIf( PlaYUVerAppModuleIf* pcCurrModuleIf ); static Bool applyModuleIf( PlaYUVerAppModuleIf* pcCurrModuleIf, Bool isPlaying = false, Bool disableThreads = false ); - static Bool showModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf, PlaYUVerFrame* processedFrame ); - static Bool showModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf, Double moduleResult ); + static Void showModuleIf( PlaYUVerAppModuleIf *pcCurrModuleIf ); private: QWidget* m_pcParent; diff --git a/app/PlaYUVerAppModuleIf.cpp b/app/PlaYUVerAppModuleIf.cpp index 1732cf9..a8cecd7 100644 --- a/app/PlaYUVerAppModuleIf.cpp +++ b/app/PlaYUVerAppModuleIf.cpp @@ -30,6 +30,7 @@ namespace plaYUVer { PlaYUVerAppModuleIf::PlaYUVerAppModuleIf( QObject* parent, QAction* action, PlaYUVerModuleIf* module ) : + m_bIsRunning( false ), m_pcModuleAction( action ), m_pcModule( module ), m_pcDisplaySubWindow( NULL ), @@ -46,11 +47,11 @@ PlaYUVerAppModuleIf::PlaYUVerAppModuleIf( QObject* parent, QAction* action, PlaY } } -void PlaYUVerAppModuleIf::run() +Void PlaYUVerAppModuleIf::run() { - - m_pcProcessedFrame = NULL; - m_dMeasurementResult = 0; + m_bIsRunning = true; +// m_pcProcessedFrame = NULL; +// m_dMeasurementResult = 0; std::vector apcFrameList; for( UInt i = 0; i < m_pcModule->m_uiNumberOfFrames; i++ ) @@ -84,15 +85,58 @@ void PlaYUVerAppModuleIf::run() { return; } - postProgress( true ); + m_bIsRunning = false; + EventData *eventData = new EventData( true, this ); + if( parent() ) + QCoreApplication::postEvent( parent(), eventData ); return; } -Void PlaYUVerAppModuleIf::postProgress( Bool success ) +Void PlaYUVerAppModuleIf::destroy() { - EventData *eventData = new EventData( success, this ); - if( parent() ) - QCoreApplication::postEvent( parent(), eventData ); + if( m_bIsRunning ) + { + QApplication::setOverrideCursor( Qt::WaitCursor ); + while( m_bIsRunning ) + { + } + QApplication::restoreOverrideCursor(); + } + if( m_pcModuleDock ) + { + m_pcModuleDock->close(); + m_pcModuleDock = NULL; + } + if( m_pcDockWidget ) + { + m_pcDockWidget->close(); + m_pcDockWidget = NULL; + } + if( m_pcDisplaySubWindow ) + m_pcDisplaySubWindow->closeSubWindow(); + m_pcDisplaySubWindow = NULL; + + for( Int i = 0; i < MAX_NUMBER_FRAMES; i++ ) + { + if( m_pcSubWindow[i] ) + { + m_pcSubWindow[i]->disableModule( this ); + m_pcSubWindow[i] = NULL; + } + } + if( m_pcModuleStream ) + { + m_pcModuleStream->close(); + delete m_pcModuleStream; + m_pcModuleStream = NULL; + } + if( m_pcModule ) + { + m_pcModule->destroy(); + m_pcModule->Delete(); + m_pcModule = NULL; + } + } } // NAMESPACE diff --git a/app/PlaYUVerAppModuleIf.h b/app/PlaYUVerAppModuleIf.h index 8ea117a..ada2167 100644 --- a/app/PlaYUVerAppModuleIf.h +++ b/app/PlaYUVerAppModuleIf.h @@ -40,13 +40,15 @@ class QAction; namespace plaYUVer { +#define PLAYUVER_THREADED_MODULES + class VideoSubWindow; class PlaYUVerAppModuleIf #ifdef PLAYUVER_THREADED_MODULES : public QThread #else - : public QObject +: public QObject #endif { friend class ModulesHandle; @@ -55,6 +57,8 @@ class PlaYUVerAppModuleIf private: + Bool m_bIsRunning; + QAction* m_pcModuleAction; PlaYUVerModuleIf* m_pcModule; @@ -69,7 +73,6 @@ private: PlaYUVerFrame* m_pcProcessedFrame; Double m_dMeasurementResult; - Void postProgress( Bool success ); public: class EventData: public QEvent { @@ -98,6 +101,7 @@ public: return arraySubWindows; } + Void destroy(); protected: virtual void run(); }; diff --git a/app/PlaYUVerSubWindowHandle.cpp b/app/PlaYUVerSubWindowHandle.cpp index f377814..1f31a0a 100644 --- a/app/PlaYUVerSubWindowHandle.cpp +++ b/app/PlaYUVerSubWindowHandle.cpp @@ -250,6 +250,7 @@ Void PlaYUVerSubWindowHandle::removeSubWindow( Int windowIdx ) PlaYUVerMdiSubWindow* mdiSubWindow = m_apcMdiSubWindowList.at( windowIdx ); m_apcMdiSubWindowList.removeAt( windowIdx ); m_pcMdiArea->removeSubWindow( m_apcSubWindowList.at( windowIdx ) ); + m_apcSubWindowList.at( windowIdx )->close(); mdiSubWindow->close(); m_apcSubWindowList.removeAt( windowIdx ); } diff --git a/app/VideoSubWindow.cpp b/app/VideoSubWindow.cpp index bedf3d7..d14a32a 100644 --- a/app/VideoSubWindow.cpp +++ b/app/VideoSubWindow.cpp @@ -128,6 +128,7 @@ protected: VideoSubWindow::VideoSubWindow( enum VideoSubWindowCategories category, QWidget * parent ) : SubWindowAbstract( parent, SubWindowAbstract::VIDEO_SUBWINDOW | category ), + m_bWindowBusy( false ), m_pCurrStream( NULL ), m_pcCurrFrame( NULL ), m_pcCurrentDisplayModule( NULL ), @@ -511,6 +512,7 @@ Void VideoSubWindow::refreshFrameOperation() } if( m_pcCurrentDisplayModule ) { + m_bWindowBusy = true; ModulesHandle::applyModuleIf( m_pcCurrentDisplayModule, m_bIsPlaying ); bSetFrame = false; } @@ -520,6 +522,7 @@ Void VideoSubWindow::refreshFrameOperation() } for( Int i = 0; i < m_apcCurrentModule.size(); i++ ) { + m_bWindowBusy = true; ModulesHandle::applyModuleIf( m_apcCurrentModule.at( i ), m_bIsPlaying ); } } diff --git a/app/VideoSubWindow.h b/app/VideoSubWindow.h index 9959f43..1a86bd5 100644 --- a/app/VideoSubWindow.h +++ b/app/VideoSubWindow.h @@ -67,6 +67,8 @@ Q_OBJECT private: + Bool m_bWindowBusy; + QScrollArea* m_pcScrollArea; QPoint m_cLastScroll; QPoint m_cCurrScroll; @@ -250,6 +252,11 @@ public: return getCategory() | SubWindowAbstract::MODULE_SUBWINDOW; } + Void clearWindowBusy() + { + m_bWindowBusy = false; + } + protected: Void resizeEvent( QResizeEvent* event ); //void closeEvent( QCloseEvent *event );