Fix crash in PCBNew undo from uninitialized variable.
This commit is contained in:
parent
718ad77891
commit
ce4c4c9409
|
@ -398,12 +398,11 @@ void PCB_BASE_EDIT_FRAME::RestoreCopyFromRedoList( wxCommandEvent& aEvent )
|
||||||
|
|
||||||
|
|
||||||
void PCB_BASE_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRedoCommand,
|
void PCB_BASE_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool aRedoCommand,
|
||||||
bool aRebuildRatsnet )
|
bool aRebuildRatsnet )
|
||||||
{
|
{
|
||||||
BOARD_ITEM* item;
|
bool not_found = false;
|
||||||
bool not_found = false;
|
bool reBuild_ratsnest = false;
|
||||||
bool reBuild_ratsnest = false;
|
bool deep_reBuild_ratsnest = false; // true later if pointers must be rebuilt
|
||||||
bool deep_reBuild_ratsnest = false; // true later if pointers must be rebuilt
|
|
||||||
|
|
||||||
auto view = GetGalCanvas()->GetView();
|
auto view = GetGalCanvas()->GetView();
|
||||||
auto connectivity = GetBoard()->GetConnectivity();
|
auto connectivity = GetBoard()->GetConnectivity();
|
||||||
|
@ -438,7 +437,7 @@ void PCB_BASE_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool
|
||||||
|
|
||||||
build_item_list = false;
|
build_item_list = false;
|
||||||
|
|
||||||
if( !TestForExistingItem( GetBoard(), item ) )
|
if( !TestForExistingItem( GetBoard(), (BOARD_ITEM*) eda_item ) )
|
||||||
{
|
{
|
||||||
// Checking if it ever happens
|
// Checking if it ever happens
|
||||||
wxASSERT_MSG( false, "Item in the undo buffer does not exist" );
|
wxASSERT_MSG( false, "Item in the undo buffer does not exist" );
|
||||||
|
@ -453,7 +452,7 @@ void PCB_BASE_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// see if we must rebuild ratsnets and pointers lists
|
// see if we must rebuild ratsnets and pointers lists
|
||||||
switch( item->Type() )
|
switch( eda_item->Type() )
|
||||||
{
|
{
|
||||||
case PCB_MODULE_T:
|
case PCB_MODULE_T:
|
||||||
deep_reBuild_ratsnest = true; // Pointers on pads can be invalid
|
deep_reBuild_ratsnest = true; // Pointers on pads can be invalid
|
||||||
|
@ -480,62 +479,76 @@ void PCB_BASE_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList, bool
|
||||||
{
|
{
|
||||||
case UR_CHANGED: /* Exchange old and new data for each item */
|
case UR_CHANGED: /* Exchange old and new data for each item */
|
||||||
{
|
{
|
||||||
|
BOARD_ITEM* item = (BOARD_ITEM*) item;
|
||||||
BOARD_ITEM* image = (BOARD_ITEM*) aList->GetPickedItemLink( ii );
|
BOARD_ITEM* image = (BOARD_ITEM*) aList->GetPickedItemLink( ii );
|
||||||
|
|
||||||
// Remove all pads/drawings/texts, as they become invalid
|
// Remove all pads/drawings/texts, as they become invalid
|
||||||
// for the VIEW after SwapData() called for modules
|
// for the VIEW after SwapData() called for modules
|
||||||
view->Remove( item );
|
view->Remove( eda_item );
|
||||||
connectivity->Remove( item );
|
connectivity->Remove( item );
|
||||||
|
|
||||||
SwapItemData( item, image );
|
SwapItemData( item, image );
|
||||||
|
|
||||||
view->Add( item );
|
view->Add( eda_item );
|
||||||
connectivity->Add( item );
|
connectivity->Add( item );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UR_NEW: /* new items are deleted */
|
case UR_NEW: /* new items are deleted */
|
||||||
aList->SetPickedItemStatus( UR_DELETED, ii );
|
aList->SetPickedItemStatus( UR_DELETED, ii );
|
||||||
GetModel()->Remove( item );
|
GetModel()->Remove( (BOARD_ITEM*) eda_item );
|
||||||
view->Remove( item );
|
view->Remove( eda_item );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UR_DELETED: /* deleted items are put in List, as new items */
|
case UR_DELETED: /* deleted items are put in List, as new items */
|
||||||
aList->SetPickedItemStatus( UR_NEW, ii );
|
aList->SetPickedItemStatus( UR_NEW, ii );
|
||||||
GetModel()->Add( item );
|
GetModel()->Add( (BOARD_ITEM*) eda_item );
|
||||||
view->Add( item );
|
view->Add( eda_item );
|
||||||
build_item_list = true;
|
build_item_list = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UR_MOVED:
|
case UR_MOVED:
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = (BOARD_ITEM*) item;
|
||||||
item->Move( aRedoCommand ? aList->m_TransformPoint : -aList->m_TransformPoint );
|
item->Move( aRedoCommand ? aList->m_TransformPoint : -aList->m_TransformPoint );
|
||||||
view->Update( item, KIGFX::GEOMETRY );
|
view->Update( item, KIGFX::GEOMETRY );
|
||||||
connectivity->Update( item );
|
connectivity->Update( item );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UR_ROTATED:
|
case UR_ROTATED:
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = (BOARD_ITEM*) item;
|
||||||
item->Rotate( aList->m_TransformPoint,
|
item->Rotate( aList->m_TransformPoint,
|
||||||
aRedoCommand ? m_rotationAngle : -m_rotationAngle );
|
aRedoCommand ? m_rotationAngle : -m_rotationAngle );
|
||||||
view->Update( item, KIGFX::GEOMETRY );
|
view->Update( item, KIGFX::GEOMETRY );
|
||||||
connectivity->Update( item );
|
connectivity->Update( item );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UR_ROTATED_CLOCKWISE:
|
case UR_ROTATED_CLOCKWISE:
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = (BOARD_ITEM*) item;
|
||||||
item->Rotate( aList->m_TransformPoint,
|
item->Rotate( aList->m_TransformPoint,
|
||||||
aRedoCommand ? -m_rotationAngle : m_rotationAngle );
|
aRedoCommand ? -m_rotationAngle : m_rotationAngle );
|
||||||
view->Update( item, KIGFX::GEOMETRY );
|
view->Update( item, KIGFX::GEOMETRY );
|
||||||
connectivity->Update( item );
|
connectivity->Update( item );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UR_FLIPPED:
|
case UR_FLIPPED:
|
||||||
|
{
|
||||||
|
BOARD_ITEM* item = (BOARD_ITEM*) item;
|
||||||
item->Flip( aList->m_TransformPoint );
|
item->Flip( aList->m_TransformPoint );
|
||||||
view->Update( item, KIGFX::LAYERS );
|
view->Update( item, KIGFX::LAYERS );
|
||||||
connectivity->Update( item );
|
connectivity->Update( item );
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UR_DRILLORIGIN:
|
case UR_DRILLORIGIN:
|
||||||
case UR_GRIDORIGIN:
|
case UR_GRIDORIGIN:
|
||||||
{
|
{
|
||||||
|
BOARD_ITEM* item = (BOARD_ITEM*) item;
|
||||||
BOARD_ITEM* image = (BOARD_ITEM*) aList->GetPickedItemLink( ii );
|
BOARD_ITEM* image = (BOARD_ITEM*) aList->GetPickedItemLink( ii );
|
||||||
VECTOR2D origin = image->GetPosition();
|
VECTOR2D origin = image->GetPosition();
|
||||||
image->SetPosition( item->GetPosition() );
|
image->SetPosition( item->GetPosition() );
|
||||||
|
|
Loading…
Reference in New Issue