From d2e865146b3664d4301721e28682f3e69e89591a Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Thu, 30 Jan 2014 11:18:58 +0100 Subject: [PATCH] Added a new tool event: TA_UNDO_REDO, sent after undo/redo operation is issued. --- common/tool/tool_event.cpp | 1 + include/tool/tool_event.h | 5 ++++- include/wxPcbStruct.h | 4 ++-- pcbnew/board_undo_redo.cpp | 22 ++++++++++------------ pcbnew/tools/selection_tool.cpp | 6 ++++++ 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/common/tool/tool_event.cpp b/common/tool/tool_event.cpp index 481b8c1b95..07460f3571 100644 --- a/common/tool/tool_event.cpp +++ b/common/tool/tool_event.cpp @@ -91,6 +91,7 @@ const std::string TOOL_EVENT::Format() const { TA_CANCEL_TOOL, "cancel-tool" }, { TA_CONTEXT_MENU_UPDATE, "context-menu-update" }, { TA_CONTEXT_MENU_CHOICE, "context-menu-choice" }, + { TA_UNDO_REDO, "undo-redo" }, { TA_ACTION, "action" }, { 0, "" } }; diff --git a/include/tool/tool_event.h b/include/tool/tool_event.h index a2815035d2..9acc1f8f87 100644 --- a/include/tool/tool_event.h +++ b/include/tool/tool_event.h @@ -89,8 +89,11 @@ enum TOOL_ACTIONS // closed it without selecting anything. TA_CONTEXT_MENU_CHOICE = 0x10000, + // This event is sent *after* undo/redo command is finished. + TA_UNDO_REDO = 0x20000, + // Tool action (allows to control tools) - TA_ACTION = 0x20000, + TA_ACTION = 0x40000, TA_ANY = 0xffffffff }; diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index 0ce0ef4ac4..1b5bc4b299 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -704,7 +704,7 @@ public: * - Get an old version of the board from Redo list * @return none */ - void GetBoardFromRedoList( wxCommandEvent& event ); + void GetBoardFromRedoList( wxCommandEvent& aEvent ); /** * Function GetBoardFromUndoList @@ -713,7 +713,7 @@ public: * - Get an old version of the board from Undo list * @return none */ - void GetBoardFromUndoList( wxCommandEvent& event ); + void GetBoardFromUndoList( wxCommandEvent& aEvent ); /* Block operations: */ diff --git a/pcbnew/board_undo_redo.cpp b/pcbnew/board_undo_redo.cpp index 484b76fa05..3112bc5e27 100644 --- a/pcbnew/board_undo_redo.cpp +++ b/pcbnew/board_undo_redo.cpp @@ -621,16 +621,11 @@ void PCB_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRed } -void PCB_EDIT_FRAME::GetBoardFromUndoList( wxCommandEvent& event ) +void PCB_EDIT_FRAME::GetBoardFromUndoList( wxCommandEvent& aEvent ) { if( GetScreen()->GetUndoCommandCount() <= 0 ) return; - // Clear the selection, as it may be altered with undone items - SELECTION_TOOL* selectionTool = static_cast( m_toolManager->FindTool( - "pcbnew.InteractiveSelection" ) ); - selectionTool->ClearSelection(); - /* Get the old list */ PICKED_ITEMS_LIST* List = GetScreen()->PopCommandFromUndoList(); /* Undo the command */ @@ -640,21 +635,20 @@ void PCB_EDIT_FRAME::GetBoardFromUndoList( wxCommandEvent& event ) List->ReversePickersListOrder(); GetScreen()->PushCommandToRedoList( List ); + // Inform tools that undo has just occurred + TOOL_EVENT event( TC_MESSAGE, TA_UNDO_REDO, AS_GLOBAL ); + m_toolManager->ProcessEvent( event ); + OnModify(); m_canvas->Refresh(); } -void PCB_EDIT_FRAME::GetBoardFromRedoList( wxCommandEvent& event ) +void PCB_EDIT_FRAME::GetBoardFromRedoList( wxCommandEvent& aEvent ) { if( GetScreen()->GetRedoCommandCount() == 0 ) return; - // Clear the selection, as it may be altered with redone items - SELECTION_TOOL* selectionTool = static_cast( m_toolManager->FindTool( - "pcbnew.InteractiveSelection" ) ); - selectionTool->ClearSelection(); - /* Get the old list */ PICKED_ITEMS_LIST* List = GetScreen()->PopCommandFromRedoList(); @@ -665,6 +659,10 @@ void PCB_EDIT_FRAME::GetBoardFromRedoList( wxCommandEvent& event ) List->ReversePickersListOrder(); GetScreen()->PushCommandToUndoList( List ); + // Inform tools that redo has just occurred + TOOL_EVENT event( TC_MESSAGE, TA_UNDO_REDO, AS_GLOBAL ); + m_toolManager->ProcessEvent( event ); + OnModify(); m_canvas->Refresh(); } diff --git a/pcbnew/tools/selection_tool.cpp b/pcbnew/tools/selection_tool.cpp index 4d4d8e5404..324bb50032 100644 --- a/pcbnew/tools/selection_tool.cpp +++ b/pcbnew/tools/selection_tool.cpp @@ -100,6 +100,12 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent ) // This tool never exits } + else if( evt->Action() == TA_UNDO_REDO ) + { + // Clear the selection, as it may be altered with undone items + ClearSelection(); + } + // single click? Select single object else if( evt->IsClick( BUT_LEFT ) ) {