Modified InvokeTool(), so besides resetting the tool, it also send an ActivateTool event.

Added generation of CancelTool event upon ESC key press.
Minor bugfix.
This commit is contained in:
Maciej Suminski 2013-08-22 15:07:34 +02:00
parent 1057d5a5be
commit 875c0f7062
2 changed files with 21 additions and 8 deletions

View File

@ -237,9 +237,16 @@ void TOOL_DISPATCHER::DispatchWxEvent( wxEvent& aEvent )
int mods = decodeModifiers( ke );
if( type == wxEVT_KEY_UP )
evt = TOOL_EVENT( TC_Keyboard, TA_KeyUp, key | mods );
{
if( key == WXK_ESCAPE )
evt = TOOL_EVENT( TC_Command, TA_CancelTool );
else
evt = TOOL_EVENT( TC_Keyboard, TA_KeyUp, key | mods );
}
else
{
evt = TOOL_EVENT( TC_Keyboard, TA_KeyDown, key | mods );
}
}
if( evt )
@ -263,8 +270,5 @@ void TOOL_DISPATCHER::DispatchWxCommand( wxCommandEvent &aEvent )
}
if( activateTool )
{
TOOL_EVENT evt( TC_Command, TA_ActivateTool, toolName );
m_toolMgr->ProcessEvent( evt );
}
m_toolMgr->InvokeTool( toolName );
}

View File

@ -98,6 +98,9 @@ void TOOL_MANAGER::InvokeTool( TOOL_ID aToolId )
if( tool && tool->GetType() == TOOL_Interactive )
static_cast<TOOL_INTERACTIVE*>( tool )->Reset();
TOOL_EVENT evt( TC_Command, TA_ActivateTool, tool->GetName() );
ProcessEvent( evt );
}
@ -105,8 +108,8 @@ void TOOL_MANAGER::InvokeTool( const std::string& aName )
{
TOOL_BASE* tool = FindTool( aName );
if( tool && tool->GetType() == TOOL_Interactive )
static_cast<TOOL_INTERACTIVE*>( tool )->Reset();
if( tool )
InvokeTool( tool->GetId() );
}
@ -169,7 +172,10 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent )
st->waitEvents.clear();
st->cofunc->Resume();
if( !st->cofunc->Running() )
{
delete st->cofunc;
st->cofunc = NULL;
}
}
}
else
@ -194,7 +200,10 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent )
st->cofunc->Call( aEvent );
if( !st->cofunc->Running() )
{
delete st->cofunc;
st->cofunc = NULL;
}
}
}
}
@ -218,7 +227,7 @@ bool TOOL_MANAGER::ProcessEvent( TOOL_EVENT& aEvent )
st->contextMenuTrigger = CMENU_OFF;
GetEditFrame()->PopupMenu( st->contextMenu->GetMenu() );
TOOL_EVENT evt ( TC_Command, TA_ContextMenuChoice );
TOOL_EVENT evt( TC_Command, TA_ContextMenuChoice );
dispatchInternal( evt );
break;