FOOTPRINT_EDIT_FRAME undo buffer handles operations done with GAL editor.
This commit is contained in:
parent
7ade7db078
commit
1617f15b51
|
@ -2,8 +2,11 @@
|
|||
/* library editor: undo and redo functions */
|
||||
/********************************************/
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <fctsys.h>
|
||||
#include <class_drawpanel.h>
|
||||
#include <class_draw_panel_gal.h>
|
||||
#include <tool/tool_manager.h>
|
||||
#include <wxPcbStruct.h>
|
||||
|
||||
#include <class_board.h>
|
||||
|
@ -50,31 +53,52 @@ void FOOTPRINT_EDIT_FRAME::SaveCopyInUndoList( const PICKED_ITEMS_LIST& aItemsLi
|
|||
UNDO_REDO_T aTypeCommand,
|
||||
const wxPoint& aTransformPoint )
|
||||
{
|
||||
// Currently unused in modedit, because the module itself is saved for each change
|
||||
wxMessageBox( wxT( "SaveCopyInUndoList( PICKED_ITEMS_LIST& aItemsList..) not yet in use" ) );
|
||||
assert( aItemsList.GetPickedItem( 0 )->GetParent()->Type() == PCB_MODULE_T );
|
||||
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 )
|
||||
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
|
||||
PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();
|
||||
MODULE * module = GetBoard()->m_Modules.PopFront();
|
||||
ITEM_PICKER wrapper( module, UR_MODEDIT );
|
||||
MODULE* module = GetBoard()->m_Modules.PopFront();
|
||||
ITEM_PICKER wrapper( module, UR_MODEDIT );
|
||||
KIGFX::VIEW* view = GetGalCanvas()->GetView();
|
||||
lastcmd->PushItem( wrapper );
|
||||
GetScreen()->PushCommandToUndoList( lastcmd );
|
||||
|
||||
view->Remove( module );
|
||||
module->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) );
|
||||
|
||||
// Retrieve last module state from undo list
|
||||
lastcmd = GetScreen()->PopCommandFromRedoList();
|
||||
wrapper = lastcmd->PopItem();
|
||||
module = (MODULE *)wrapper.GetItem();
|
||||
module = (MODULE*) wrapper.GetItem();
|
||||
delete lastcmd;
|
||||
|
||||
if( module )
|
||||
{
|
||||
GetBoard()->Add( module );
|
||||
GetGalCanvas()->GetView()->Add( module );
|
||||
module->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) );
|
||||
module->ViewUpdate();
|
||||
}
|
||||
|
||||
SetCurItem( NULL );
|
||||
|
||||
|
@ -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 )
|
||||
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
|
||||
PICKED_ITEMS_LIST* lastcmd = new PICKED_ITEMS_LIST();
|
||||
MODULE * module = GetBoard()->m_Modules.PopFront();
|
||||
ITEM_PICKER wrapper( module, UR_MODEDIT );
|
||||
MODULE* module = GetBoard()->m_Modules.PopFront();
|
||||
ITEM_PICKER wrapper( module, UR_MODEDIT );
|
||||
KIGFX::VIEW* view = GetGalCanvas()->GetView();
|
||||
lastcmd->PushItem( wrapper );
|
||||
GetScreen()->PushCommandToRedoList( lastcmd );
|
||||
|
||||
view->Remove( module );
|
||||
module->RunOnChildren( boost::bind( &KIGFX::VIEW::Remove, view, _1 ) );
|
||||
|
||||
// Retrieve last module state from undo list
|
||||
lastcmd = GetScreen()->PopCommandFromUndoList();
|
||||
wrapper = lastcmd->PopItem();
|
||||
module = (MODULE *)wrapper.GetItem();
|
||||
module = (MODULE*) wrapper.GetItem();
|
||||
delete lastcmd;
|
||||
|
||||
if( module )
|
||||
{
|
||||
GetBoard()->Add( module, ADD_APPEND );
|
||||
|
||||
view->Add( module );
|
||||
module->RunOnChildren( boost::bind( &KIGFX::VIEW::Add, view, _1 ) );
|
||||
module->ViewUpdate();
|
||||
}
|
||||
|
||||
SetCurItem( NULL );
|
||||
|
||||
|
|
Loading…
Reference in New Issue