Loading common/tool/tool_manager.cpp +23 −5 Original line number Original line Diff line number Diff line Loading @@ -78,6 +78,16 @@ struct TOOL_MANAGER::TOOL_STATE /// List of possible transitions (ie. association of events and functions that are executed /// List of possible transitions (ie. association of events and functions that are executed /// upon the event reception /// upon the event reception std::vector<TRANSITION> transitions; std::vector<TRANSITION> transitions; bool operator==( const TOOL_MANAGER::TOOL_STATE& aRhs ) const { return ( aRhs.theTool == this->theTool ); } bool operator!=( const TOOL_MANAGER::TOOL_STATE& aRhs ) const { return ( aRhs.theTool != this->theTool ); } }; }; Loading Loading @@ -262,7 +272,7 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent ) st->wakeupEvent = aEvent; st->wakeupEvent = aEvent; st->pendingWait = false; st->pendingWait = false; st->waitEvents.clear(); st->waitEvents.clear(); if( !st->cofunc->Resume() ) if( st->cofunc && !st->cofunc->Resume() ) { { // The couroutine has finished // The couroutine has finished finishTool( st ); finishTool( st ); Loading Loading @@ -327,12 +337,20 @@ bool TOOL_MANAGER::dispatchActivation( TOOL_EVENT& aEvent ) void TOOL_MANAGER::finishTool( TOOL_STATE* aState ) void TOOL_MANAGER::finishTool( TOOL_STATE* aState ) { { wxASSERT( m_activeTools.front() == aState->theTool->GetId() ); // Find the tool to be deactivated std::deque<TOOL_ID>::iterator it, it_end; for( it = m_activeTools.begin(), it_end = m_activeTools.end(); it != it_end; ++it ) { if( aState == m_toolIdIndex[*it] ) break; } // Deactivate the most recent tool and remove it from the active tools queue if( it != m_activeTools.end() ) aState->idle = true; m_activeTools.erase( it ); m_activeTools.erase( m_activeTools.begin() ); else wxLogWarning( wxT( "Tried to finish not active tool" ) ); aState->idle = true; delete aState->cofunc; delete aState->cofunc; aState->cofunc = NULL; aState->cofunc = NULL; } } Loading Loading
common/tool/tool_manager.cpp +23 −5 Original line number Original line Diff line number Diff line Loading @@ -78,6 +78,16 @@ struct TOOL_MANAGER::TOOL_STATE /// List of possible transitions (ie. association of events and functions that are executed /// List of possible transitions (ie. association of events and functions that are executed /// upon the event reception /// upon the event reception std::vector<TRANSITION> transitions; std::vector<TRANSITION> transitions; bool operator==( const TOOL_MANAGER::TOOL_STATE& aRhs ) const { return ( aRhs.theTool == this->theTool ); } bool operator!=( const TOOL_MANAGER::TOOL_STATE& aRhs ) const { return ( aRhs.theTool != this->theTool ); } }; }; Loading Loading @@ -262,7 +272,7 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent ) st->wakeupEvent = aEvent; st->wakeupEvent = aEvent; st->pendingWait = false; st->pendingWait = false; st->waitEvents.clear(); st->waitEvents.clear(); if( !st->cofunc->Resume() ) if( st->cofunc && !st->cofunc->Resume() ) { { // The couroutine has finished // The couroutine has finished finishTool( st ); finishTool( st ); Loading Loading @@ -327,12 +337,20 @@ bool TOOL_MANAGER::dispatchActivation( TOOL_EVENT& aEvent ) void TOOL_MANAGER::finishTool( TOOL_STATE* aState ) void TOOL_MANAGER::finishTool( TOOL_STATE* aState ) { { wxASSERT( m_activeTools.front() == aState->theTool->GetId() ); // Find the tool to be deactivated std::deque<TOOL_ID>::iterator it, it_end; for( it = m_activeTools.begin(), it_end = m_activeTools.end(); it != it_end; ++it ) { if( aState == m_toolIdIndex[*it] ) break; } // Deactivate the most recent tool and remove it from the active tools queue if( it != m_activeTools.end() ) aState->idle = true; m_activeTools.erase( it ); m_activeTools.erase( m_activeTools.begin() ); else wxLogWarning( wxT( "Tried to finish not active tool" ) ); aState->idle = true; delete aState->cofunc; delete aState->cofunc; aState->cofunc = NULL; aState->cofunc = NULL; } } Loading