Loading pcbnew/modedit_undo_redo.cpp +47 −11 Original line number Original line Diff line number Diff line Loading @@ -2,8 +2,11 @@ /* library editor: undo and redo functions */ /* library editor: undo and redo functions */ /********************************************/ /********************************************/ #include <boost/bind.hpp> #include <fctsys.h> #include <fctsys.h> #include <class_drawpanel.h> #include <class_drawpanel.h> #include <class_draw_panel_gal.h> #include <tool/tool_manager.h> #include <wxPcbStruct.h> #include <wxPcbStruct.h> #include <class_board.h> #include <class_board.h> Loading Loading @@ -50,23 +53,39 @@ void FOOTPRINT_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsLi UNDO_REDO_T aTypeCommand, UNDO_REDO_T aTypeCommand, const wxPoint& aTransformPoint ) const wxPoint& aTransformPoint ) { { // Currently unused in modedit, because the module itself is saved for each change assert( aItemsList.GetPickedItem( 0 )->GetParent()->Type() == PCB_MODULE_T ); wxMessageBox( wxT( "SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList..) not yet in use" ) ); MODULE* owner = static_cast<MODULE*>( aItemsList.GetPickedItem( 0 )->GetParent() ); #ifndef NDEBUG // All items should have the same parent (MODULE) to make undo/redo entry valid for( unsigned int i = 0; i < aItemsList.GetCount(); ++i ) assert( aItemsList.GetPickedItem( i )->GetParent() == owner ); #endif /* not NDEBUG */ SaveCopyInUndoList( owner, aTypeCommand, aTransformPoint ); } } void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event ) void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& aEvent ) { { if( GetScreen()->GetRedoCommandCount() <= 0 ) if( GetScreen()->GetRedoCommandCount() <= 0 ) return; return; // Inform tools that undo command was issued TOOL_EVENT event( TC_MESSAGE, TA_UNDO_REDO, AS_GLOBAL ); m_toolManager->ProcessEvent( event ); // Save current module state in undo list // Save current module state in undo list PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); MODULE* module = GetBoard()->m_Modules.PopFront(); MODULE* module = GetBoard()->m_Modules.PopFront(); ITEM_PICKER wrapper( module, UR_MODEDIT ); ITEM_PICKER wrapper( module, UR_MODEDIT ); KIGFX::VIEW* view = GetGalCanvas()->GetView(); lastcmd->PushItem( wrapper ); lastcmd->PushItem( wrapper ); GetScreen()->PushCommandToUndoList( lastcmd ); GetScreen()->PushCommandToUndoList( lastcmd ); view->Remove( module ); module->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) ); // Retrieve last module state from undo list // Retrieve last module state from undo list lastcmd = GetScreen()->PopCommandFromRedoList(); lastcmd = GetScreen()->PopCommandFromRedoList(); wrapper = lastcmd->PopItem(); wrapper = lastcmd->PopItem(); Loading @@ -74,7 +93,12 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event ) delete lastcmd; delete lastcmd; if( module ) if( module ) { GetBoard()->Add( module ); GetBoard()->Add( module ); GetGalCanvas()->GetView()->Add( module ); module->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) ); module->ViewUpdate(); } SetCurItem( NULL ); SetCurItem( NULL ); Loading @@ -83,18 +107,26 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event ) } } void FOOTPRINT_EDIT_FRAME::GetComponentFromUndoList( wxCommandEvent& event ) void FOOTPRINT_EDIT_FRAME::GetComponentFromUndoList( wxCommandEvent& aEvent ) { { if( GetScreen()->GetUndoCommandCount() <= 0 ) if( GetScreen()->GetUndoCommandCount() <= 0 ) return; return; // Inform tools that undo command was issued TOOL_EVENT event( TC_MESSAGE, TA_UNDO_REDO, AS_GLOBAL ); m_toolManager->ProcessEvent( event ); // Save current module state in redo list // Save current module state in redo list PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); MODULE* module = GetBoard()->m_Modules.PopFront(); MODULE* module = GetBoard()->m_Modules.PopFront(); ITEM_PICKER wrapper( module, UR_MODEDIT ); ITEM_PICKER wrapper( module, UR_MODEDIT ); KIGFX::VIEW* view = GetGalCanvas()->GetView(); lastcmd->PushItem( wrapper ); lastcmd->PushItem( wrapper ); GetScreen()->PushCommandToRedoList( lastcmd ); GetScreen()->PushCommandToRedoList( lastcmd ); view->Remove( module ); module->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) ); // Retrieve last module state from undo list // Retrieve last module state from undo list lastcmd = GetScreen()->PopCommandFromUndoList(); lastcmd = GetScreen()->PopCommandFromUndoList(); wrapper = lastcmd->PopItem(); wrapper = lastcmd->PopItem(); Loading @@ -102,8 +134,12 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromUndoList( wxCommandEvent& event ) delete lastcmd; delete lastcmd; if( module ) if( module ) { GetBoard()->Add( module, ADD_APPEND ); GetBoard()->Add( module, ADD_APPEND ); view->Add( module ); module->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) ); module->ViewUpdate(); } SetCurItem( NULL ); SetCurItem( NULL ); Loading Loading
pcbnew/modedit_undo_redo.cpp +47 −11 Original line number Original line Diff line number Diff line Loading @@ -2,8 +2,11 @@ /* library editor: undo and redo functions */ /* library editor: undo and redo functions */ /********************************************/ /********************************************/ #include <boost/bind.hpp> #include <fctsys.h> #include <fctsys.h> #include <class_drawpanel.h> #include <class_drawpanel.h> #include <class_draw_panel_gal.h> #include <tool/tool_manager.h> #include <wxPcbStruct.h> #include <wxPcbStruct.h> #include <class_board.h> #include <class_board.h> Loading Loading @@ -50,23 +53,39 @@ void FOOTPRINT_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsLi UNDO_REDO_T aTypeCommand, UNDO_REDO_T aTypeCommand, const wxPoint& aTransformPoint ) const wxPoint& aTransformPoint ) { { // Currently unused in modedit, because the module itself is saved for each change assert( aItemsList.GetPickedItem( 0 )->GetParent()->Type() == PCB_MODULE_T ); wxMessageBox( wxT( "SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList..) not yet in use" ) ); MODULE* owner = static_cast<MODULE*>( aItemsList.GetPickedItem( 0 )->GetParent() ); #ifndef NDEBUG // All items should have the same parent (MODULE) to make undo/redo entry valid for( unsigned int i = 0; i < aItemsList.GetCount(); ++i ) assert( aItemsList.GetPickedItem( i )->GetParent() == owner ); #endif /* not NDEBUG */ SaveCopyInUndoList( owner, aTypeCommand, aTransformPoint ); } } void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event ) void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& aEvent ) { { if( GetScreen()->GetRedoCommandCount() <= 0 ) if( GetScreen()->GetRedoCommandCount() <= 0 ) return; return; // Inform tools that undo command was issued TOOL_EVENT event( TC_MESSAGE, TA_UNDO_REDO, AS_GLOBAL ); m_toolManager->ProcessEvent( event ); // Save current module state in undo list // Save current module state in undo list PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); MODULE* module = GetBoard()->m_Modules.PopFront(); MODULE* module = GetBoard()->m_Modules.PopFront(); ITEM_PICKER wrapper( module, UR_MODEDIT ); ITEM_PICKER wrapper( module, UR_MODEDIT ); KIGFX::VIEW* view = GetGalCanvas()->GetView(); lastcmd->PushItem( wrapper ); lastcmd->PushItem( wrapper ); GetScreen()->PushCommandToUndoList( lastcmd ); GetScreen()->PushCommandToUndoList( lastcmd ); view->Remove( module ); module->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) ); // Retrieve last module state from undo list // Retrieve last module state from undo list lastcmd = GetScreen()->PopCommandFromRedoList(); lastcmd = GetScreen()->PopCommandFromRedoList(); wrapper = lastcmd->PopItem(); wrapper = lastcmd->PopItem(); Loading @@ -74,7 +93,12 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event ) delete lastcmd; delete lastcmd; if( module ) if( module ) { GetBoard()->Add( module ); GetBoard()->Add( module ); GetGalCanvas()->GetView()->Add( module ); module->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) ); module->ViewUpdate(); } SetCurItem( NULL ); SetCurItem( NULL ); Loading @@ -83,18 +107,26 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event ) } } void FOOTPRINT_EDIT_FRAME::GetComponentFromUndoList( wxCommandEvent& event ) void FOOTPRINT_EDIT_FRAME::GetComponentFromUndoList( wxCommandEvent& aEvent ) { { if( GetScreen()->GetUndoCommandCount() <= 0 ) if( GetScreen()->GetUndoCommandCount() <= 0 ) return; return; // Inform tools that undo command was issued TOOL_EVENT event( TC_MESSAGE, TA_UNDO_REDO, AS_GLOBAL ); m_toolManager->ProcessEvent( event ); // Save current module state in redo list // Save current module state in redo list PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST(); MODULE* module = GetBoard()->m_Modules.PopFront(); MODULE* module = GetBoard()->m_Modules.PopFront(); ITEM_PICKER wrapper( module, UR_MODEDIT ); ITEM_PICKER wrapper( module, UR_MODEDIT ); KIGFX::VIEW* view = GetGalCanvas()->GetView(); lastcmd->PushItem( wrapper ); lastcmd->PushItem( wrapper ); GetScreen()->PushCommandToRedoList( lastcmd ); GetScreen()->PushCommandToRedoList( lastcmd ); view->Remove( module ); module->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) ); // Retrieve last module state from undo list // Retrieve last module state from undo list lastcmd = GetScreen()->PopCommandFromUndoList(); lastcmd = GetScreen()->PopCommandFromUndoList(); wrapper = lastcmd->PopItem(); wrapper = lastcmd->PopItem(); Loading @@ -102,8 +134,12 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromUndoList( wxCommandEvent& event ) delete lastcmd; delete lastcmd; if( module ) if( module ) { GetBoard()->Add( module, ADD_APPEND ); GetBoard()->Add( module, ADD_APPEND ); view->Add( module ); module->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) ); module->ViewUpdate(); } SetCurItem( NULL ); SetCurItem( NULL ); Loading