Commit 1617f15b authored by Maciej Suminski's avatar Maciej Suminski

FOOTPRINT_EDIT_FRAME undo buffer handles operations done with GAL editor.

parent 7ade7db0
...@@ -2,8 +2,11 @@ ...@@ -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>
...@@ -50,31 +53,52 @@ void FOOTPRINT_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsLi ...@@ -50,31 +53,52 @@ 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();
module = (MODULE *)wrapper.GetItem(); module = (MODULE*) wrapper.GetItem();
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 );
...@@ -83,27 +107,39 @@ void FOOTPRINT_EDIT_FRAME::GetComponentFromRedoList( wxCommandEvent& event ) ...@@ -83,27 +107,39 @@ 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();
module = (MODULE *)wrapper.GetItem(); module = (MODULE*) wrapper.GetItem();
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 );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment