Re-factor frame pointer out of generator API.

This commit is contained in:
Jeff Young 2023-12-16 16:11:45 +00:00
parent ea3c87f243
commit 66a15f6acf
6 changed files with 138 additions and 151 deletions

View File

@ -57,6 +57,7 @@
#include <project/project_local_settings.h>
#include <ratsnest/ratsnest_data.h>
#include <reporter.h>
#include <tool/tool_manager.h>
#include <tool/selection_conditions.h>
#include <string_utils.h>
#include <core/thread_pool.h>

View File

@ -267,21 +267,16 @@ public:
BOARD_CONNECTED_ITEM* aStartItem,
LENGTH_TUNING_MODE aMode );
void EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit ) override;
void EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit ) override;
bool Update( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit ) override;
bool Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit ) override;
void EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit, const wxString& aCommitMsg = wxEmptyString,
int aCommitFlags = 0 ) override;
void EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit,
const wxString& aCommitMsg = wxEmptyString, int aCommitFlags = 0 ) override;
void EditRevert( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit ) override;
void EditRevert( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit ) override;
void Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit ) override;
void Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit ) override;
bool MakeEditPoints( std::shared_ptr<EDIT_POINTS> points ) const override;
@ -443,8 +438,8 @@ protected:
bool removeToBaseline( PNS::ROUTER* aRouter, int aLayer, SHAPE_LINE_CHAIN& aBaseLine );
bool resetToBaseline( PNS::ROUTER* aRouter, int aLayer, PCB_BASE_EDIT_FRAME* aFrame,
SHAPE_LINE_CHAIN& aBaseLine, bool aPrimary );
bool resetToBaseline( GENERATOR_TOOL* aTool, int aLayer, SHAPE_LINE_CHAIN& aBaseLine,
bool aPrimary );
SHAPE_LINE_CHAIN getRectShape() const;
@ -664,8 +659,7 @@ PCB_TUNING_PATTERN* PCB_TUNING_PATTERN::CreateNew( GENERATOR_TOOL* aTool,
return pattern;
}
void PCB_TUNING_PATTERN::EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard,
PCB_BASE_EDIT_FRAME* aFrame, BOARD_COMMIT* aCommit )
void PCB_TUNING_PATTERN::EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
{
if( aCommit )
{
@ -705,7 +699,7 @@ void PCB_TUNING_PATTERN::EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard,
&pnsItem, nullptr, layer, &constraint ) )
{
m_settings.SetTargetLength( constraint.m_Value );
aFrame->GetToolManager()->PostEvent( EVENTS::SelectedItemsModified );
aTool->GetManager()->PostEvent( EVENTS::SelectedItemsModified );
}
}
else
@ -719,7 +713,7 @@ void PCB_TUNING_PATTERN::EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard,
&pnsItem, &coupledItem, layer, &constraint ) )
{
m_settings.SetTargetLength( constraint.m_Value );
aFrame->GetToolManager()->PostEvent( EVENTS::SelectedItemsModified );
aTool->GetManager()->PostEvent( EVENTS::SelectedItemsModified );
}
}
else
@ -728,7 +722,7 @@ void PCB_TUNING_PATTERN::EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard,
&pnsItem, &coupledItem, layer, &constraint ) )
{
m_settings.m_targetSkew = constraint.m_Value;
aFrame->GetToolManager()->PostEvent( EVENTS::SelectedItemsModified );
aTool->GetManager()->PostEvent( EVENTS::SelectedItemsModified );
}
}
}
@ -973,8 +967,7 @@ bool PCB_TUNING_PATTERN::removeToBaseline( PNS::ROUTER* aRouter, int aLayer,
}
void PCB_TUNING_PATTERN::Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit )
void PCB_TUNING_PATTERN::Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
{
SetFlags( IN_EDIT );
@ -982,21 +975,19 @@ void PCB_TUNING_PATTERN::Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_
PNS::ROUTER* router = aTool->Router();
int layer = GetLayer();
int undoFlags = 0;
// Ungroup first so that undo works
if( !GetItems().empty() )
{
PCB_GENERATOR* group = this;
PICKED_ITEMS_LIST undoList;
PICKED_ITEMS_LIST ungroupList;
for( BOARD_ITEM* member : group->GetItems() )
undoList.PushItem( ITEM_PICKER( nullptr, member, UNDO_REDO::UNGROUP ) );
ungroupList.PushItem( ITEM_PICKER( nullptr, member, UNDO_REDO::UNGROUP ) );
group->RemoveAll();
aCommit->Stage( ungroupList );
aFrame->SaveCopyInUndoList( undoList, UNDO_REDO::UNGROUP );
undoFlags |= APPEND_UNDO;
group->GetItems().clear();
}
aCommit->Remove( this );
@ -1034,14 +1025,10 @@ void PCB_TUNING_PATTERN::Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_
}
for( BOARD_ITEM* item : routerAddedItems )
{
aCommit->Add( item );
}
aCommit->Push( "Remove Tuning Pattern", undoFlags );
undoFlags |= APPEND_UNDO;
}
aCommit->Push( "Remove Tuning Pattern" );
}
@ -1119,16 +1106,16 @@ bool PCB_TUNING_PATTERN::recoverBaseline( PNS::ROUTER* aRouter )
}
bool PCB_TUNING_PATTERN::resetToBaseline( PNS::ROUTER* aRouter, int aLayer,
PCB_BASE_EDIT_FRAME* aFrame, SHAPE_LINE_CHAIN& aBaseLine,
bool aPrimary )
bool PCB_TUNING_PATTERN::resetToBaseline( GENERATOR_TOOL* aTool, int aLayer,
SHAPE_LINE_CHAIN& aBaseLine, bool aPrimary )
{
PNS::NODE* world = aRouter->GetWorld();
VECTOR2I startSnapPoint, endSnapPoint;
KIGFX::VIEW* view = aTool->GetManager()->GetView();
PNS::ROUTER* router = aTool->Router();
PNS::NODE* world = router->GetWorld();
VECTOR2I startSnapPoint, endSnapPoint;
std::optional<PNS::LINE> pnsLine = getPNSLine( aBaseLine.CPoint( 0 ),
aBaseLine.CPoint( -1 ), aRouter, aLayer,
startSnapPoint, endSnapPoint );
std::optional<PNS::LINE> pnsLine = getPNSLine( aBaseLine.CPoint( 0 ), aBaseLine.CPoint( -1 ),
router, aLayer, startSnapPoint, endSnapPoint );
if( !pnsLine )
{
@ -1150,10 +1137,13 @@ bool PCB_TUNING_PATTERN::resetToBaseline( PNS::ROUTER* aRouter, int aLayer,
straightChain.Simplify();
}
for( PNS::LINKED_ITEM* pnsItem : pnsLine->Links() )
if( view )
{
if( BOARD_ITEM* item = pnsItem->Parent() )
aFrame->GetCanvas()->GetView()->Hide( item, true, true );
for( PNS::LINKED_ITEM* pnsItem : pnsLine->Links() )
{
if( BOARD_ITEM* item = pnsItem->Parent() )
view->Hide( item, true, true );
}
}
branch->Remove( *pnsLine );
@ -1194,14 +1184,13 @@ bool PCB_TUNING_PATTERN::resetToBaseline( PNS::ROUTER* aRouter, int aLayer,
}
}
aRouter->CommitRouting( branch );
router->CommitRouting( branch );
return true;
}
bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit )
bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
{
PNS::ROUTER* router = aTool->Router();
PNS_KICAD_IFACE* iface = aTool->GetInterface();
@ -1220,7 +1209,7 @@ bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_
}
else
{
if( resetToBaseline( router, layer, aFrame, *m_baseLine, true ) )
if( resetToBaseline( aTool, layer, *m_baseLine, true ) )
{
m_origin = m_baseLine->CPoint( 0 );
m_end = m_baseLine->CPoint( -1 );
@ -1233,7 +1222,7 @@ bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_
if( m_tuningMode == DIFF_PAIR )
{
if( !resetToBaseline( router, layer, aFrame, *m_baseLineCoupled, false ) )
if( !resetToBaseline( aTool, layer, *m_baseLineCoupled, false ) )
{
initBaseLines( router, layer, aBoard );
return false;
@ -1293,20 +1282,27 @@ bool PCB_TUNING_PATTERN::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_
default: statusMessage = _( "unknown" ); break;
}
m_tuningInfo.Printf( wxS( "%s (%s)" ),
aFrame->MessageTextFromValue( (double) placer->TuningResult() ),
statusMessage );
wxString result;
EDA_UNITS userUnits = EDA_UNITS::MILLIMETRES;
if( aTool->GetManager()->GetSettings() )
userUnits = static_cast<EDA_UNITS>( aTool->GetManager()->GetSettings()->m_System.units );
result = EDA_UNIT_UTILS::UI::MessageTextFromValue( pcbIUScale, userUnits,
(double) placer->TuningResult() );
m_tuningInfo.Printf( wxS( "%s (%s)" ), result, statusMessage );
return true;
}
void PCB_TUNING_PATTERN::EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard,
PCB_BASE_EDIT_FRAME* aFrame, BOARD_COMMIT* aCommit,
void PCB_TUNING_PATTERN::EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit,
const wxString& aCommitMsg, int aCommitFlags )
{
ClearFlags( IN_EDIT );
KIGFX::VIEW* view = aTool->GetManager()->GetView();
PNS::ROUTER* router = aTool->Router();
SHAPE_LINE_CHAIN bounds = getRectShape();
PICKED_ITEMS_LIST groupUndoList;
@ -1331,7 +1327,9 @@ void PCB_TUNING_PATTERN::EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard,
for( BOARD_ITEM* item : routerRemovedItems )
{
aFrame->GetCanvas()->GetView()->Hide( item, false );
if( view )
view->Hide( item, false );
aCommit->Remove( item );
}
@ -1350,26 +1348,26 @@ void PCB_TUNING_PATTERN::EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard,
aCommit->Stage( groupUndoList );
aCommit->Add( item );
}
if( aCommitMsg.IsEmpty() )
aCommit->Push( _( "Edit Tuning Pattern" ), aCommitFlags );
else
aCommit->Push( aCommitMsg, aCommitFlags );
aCommitFlags |= APPEND_UNDO;
}
if( aCommitMsg.IsEmpty() )
aCommit->Push( _( "Edit Tuning Pattern" ), aCommitFlags );
else
aCommit->Push( aCommitMsg, aCommitFlags );
}
void PCB_TUNING_PATTERN::EditRevert( GENERATOR_TOOL* aTool, BOARD* aBoard,
PCB_BASE_EDIT_FRAME* aFrame, BOARD_COMMIT* aCommit )
void PCB_TUNING_PATTERN::EditRevert( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
{
ClearFlags( IN_EDIT );
for( const GENERATOR_PNS_CHANGES& pnsCommit : aTool->GetRouterChanges() )
if( KIGFX::VIEW* view = aTool->GetManager()->GetView() )
{
for( BOARD_ITEM* item : pnsCommit.removedItems )
aFrame->GetCanvas()->GetView()->Hide( item, false );
for( const GENERATOR_PNS_CHANGES& pnsCommit : aTool->GetRouterChanges() )
{
for( BOARD_ITEM* item : pnsCommit.removedItems )
view->Hide( item, false );
}
}
aTool->Router()->StopRouting();
@ -1802,9 +1800,9 @@ void PCB_TUNING_PATTERN::ShowPropertiesDialog( PCB_BASE_EDIT_FRAME* aEditFrame )
m_settings = settings;
GENERATOR_TOOL* generatorTool = aEditFrame->GetToolManager()->GetTool<GENERATOR_TOOL>();
EditStart( generatorTool, GetBoard(), aEditFrame, &commit );
Update( generatorTool, GetBoard(), aEditFrame, &commit );
EditPush( generatorTool, GetBoard(), aEditFrame, &commit );
EditStart( generatorTool, GetBoard(), &commit );
Update( generatorTool, GetBoard(), &commit );
EditPush( generatorTool, GetBoard(), &commit );
}
}
@ -2059,8 +2057,8 @@ int DRAWING_TOOL::PlaceTuningPattern( const TOOL_EVENT& aEvent )
if( dummyPattern )
{
dummyPattern->EditStart( generatorTool, m_board, m_frame, nullptr );
dummyPattern->Update( generatorTool, m_board, m_frame, nullptr );
dummyPattern->EditStart( generatorTool, m_board, nullptr );
dummyPattern->Update( generatorTool, m_board, nullptr );
m_preview.FreeItems();
@ -2083,8 +2081,8 @@ int DRAWING_TOOL::PlaceTuningPattern( const TOOL_EVENT& aEvent )
{
if( m_tuningPattern && m_tuningPattern->GetPosition() != m_tuningPattern->GetEnd() )
{
m_tuningPattern->EditStart( generatorTool, m_board, m_frame, nullptr );
m_tuningPattern->Update( generatorTool, m_board, m_frame, nullptr );
m_tuningPattern->EditStart( generatorTool, m_board, nullptr );
m_tuningPattern->Update( generatorTool, m_board, nullptr );
m_preview.FreeItems();
@ -2111,7 +2109,7 @@ int DRAWING_TOOL::PlaceTuningPattern( const TOOL_EVENT& aEvent )
if( m_tuningPattern )
{
// First click already made; clean up tuning pattern preview
m_tuningPattern->EditRevert( generatorTool, m_board, m_frame, nullptr );
m_tuningPattern->EditRevert( generatorTool, m_board, nullptr );
delete m_tuningPattern;
m_tuningPattern = nullptr;
@ -2185,9 +2183,9 @@ int DRAWING_TOOL::PlaceTuningPattern( const TOOL_EVENT& aEvent )
// Second click; we're done
BOARD_COMMIT commit( m_frame );
m_tuningPattern->EditStart( generatorTool, m_board, m_frame, &commit );
m_tuningPattern->Update( generatorTool, m_board, m_frame, &commit );
m_tuningPattern->EditPush( generatorTool, m_board, m_frame, &commit, _( "Tune" ) );
m_tuningPattern->EditStart( generatorTool, m_board, &commit );
m_tuningPattern->Update( generatorTool, m_board, &commit );
m_tuningPattern->EditPush( generatorTool, m_board, &commit, _( "Tune" ) );
for( BOARD_ITEM* item : m_tuningPattern->GetItems() )
item->SetSelected();

View File

@ -488,45 +488,6 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
this );
Bind( EDA_EVT_CLOSE_NET_INSPECTOR_DIALOG, &PCB_EDIT_FRAME::onCloseNetInspectorDialog, this );
Bind( EDA_EVT_UNITS_CHANGED, &PCB_EDIT_FRAME::onUnitsChanged, this );
PROPERTY_MANAGER::Instance().RegisterListener( TYPE_HASH( BOARD_ITEM ),
[&]( INSPECTABLE* aItem, PROPERTY_BASE* aProperty, COMMIT* aCommit )
{
// Special case: propagate lock from generated items to parent generator
BOARD_ITEM* item = dynamic_cast<BOARD_ITEM*>( aItem );
if( item && aProperty->Name() == _HKI( "Locked" ) )
{
if( PCB_GENERATOR* generator = dynamic_cast<PCB_GENERATOR*>( item->GetParentGroup() ) )
{
if( aCommit->GetStatus( generator ) != CHT_MODIFY )
aCommit->Modify( generator );
// Must set generator to unlocked first or item->IsLocked() will just
// return the parent's locked state.
generator->SetLocked( false );
generator->SetLocked( item->IsLocked() );
}
}
} );
PROPERTY_MANAGER::Instance().RegisterListener( TYPE_HASH( PCB_GENERATOR ),
[&]( INSPECTABLE* aItem, PROPERTY_BASE* aProperty, COMMIT* aCommit )
{
// Special case: regenerator generators when their properties change
if( PCB_GENERATOR* generator = dynamic_cast<PCB_GENERATOR*>( aItem ) )
{
BOARD_COMMIT* commit = static_cast<BOARD_COMMIT*>( aCommit );
GENERATOR_TOOL* generatorTool = GetToolManager()->GetTool<GENERATOR_TOOL>();
generator->EditStart( generatorTool, GetBoard(), this, commit );
generator->Update( generatorTool, GetBoard(), this, commit );
generator->EditPush( generatorTool, GetBoard(), this, commit );
}
} );
m_acceptedExts.emplace( KiCadPcbFileExtension, &PCB_ACTIONS::ddAppendBoard );
m_acceptedExts.emplace( LegacyPcbFileExtension, &PCB_ACTIONS::ddAppendBoard );
DragAcceptFiles( true );

View File

@ -36,36 +36,32 @@ PCB_GENERATOR::~PCB_GENERATOR()
}
void PCB_GENERATOR::EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit )
void PCB_GENERATOR::EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
{
aCommit->Modify( this );
}
void PCB_GENERATOR::EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit, const wxString& aCommitMsg, int aCommitFlags )
void PCB_GENERATOR::EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit,
const wxString& aCommitMsg, int aCommitFlags )
{
aCommit->Push( aCommitMsg, aCommitFlags );
}
void PCB_GENERATOR::EditRevert( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit )
void PCB_GENERATOR::EditRevert( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
{
aCommit->Revert();
}
void PCB_GENERATOR::Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit )
void PCB_GENERATOR::Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
{
aCommit->Remove( this );
}
bool PCB_GENERATOR::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit )
bool PCB_GENERATOR::Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit )
{
return true;
}

View File

@ -47,21 +47,16 @@ public:
virtual ~PCB_GENERATOR();
virtual void EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit );
virtual void EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit );
virtual void EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit, const wxString& aCommitMsg = wxEmptyString,
int aCommitFlags = 0 );
virtual void EditPush( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit,
const wxString& aCommitMsg = wxEmptyString, int aCommitFlags = 0 );
virtual void EditRevert( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit );
virtual void EditRevert( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit );
virtual void Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit );
virtual void Remove( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit );
virtual bool Update( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit );
virtual bool Update( GENERATOR_TOOL* aTool, BOARD* aBoard, BOARD_COMMIT* aCommit );
#define STATUS_ITEMS_ONLY true

View File

@ -37,6 +37,42 @@ GENERATOR_TOOL::GENERATOR_TOOL() :
GENERATOR_TOOL_PNS_PROXY( "pcbnew.Generators" ),
m_mgrDialog( nullptr )
{
PROPERTY_MANAGER::Instance().RegisterListener( TYPE_HASH( BOARD_ITEM ),
[&]( INSPECTABLE* aItem, PROPERTY_BASE* aProperty, COMMIT* aCommit )
{
// Special case: propagate lock from generated items to parent generator
BOARD_ITEM* item = dynamic_cast<BOARD_ITEM*>( aItem );
if( item && aProperty->Name() == _HKI( "Locked" ) )
{
if( PCB_GENERATOR* generator = dynamic_cast<PCB_GENERATOR*>( item->GetParentGroup() ) )
{
if( aCommit->GetStatus( generator ) != CHT_MODIFY )
aCommit->Modify( generator );
// Must set generator to unlocked first or item->IsLocked() will just
// return the parent's locked state.
generator->SetLocked( false );
generator->SetLocked( item->IsLocked() );
}
}
} );
PROPERTY_MANAGER::Instance().RegisterListener( TYPE_HASH( PCB_GENERATOR ),
[&]( INSPECTABLE* aItem, PROPERTY_BASE* aProperty, COMMIT* aCommit )
{
// Special case: regenerator generators when their properties change
if( PCB_GENERATOR* generator = dynamic_cast<PCB_GENERATOR*>( aItem ) )
{
BOARD_COMMIT* commit = static_cast<BOARD_COMMIT*>( aCommit );
generator->EditStart( this, board(), commit );
generator->Update( this, board(), commit );
generator->EditPush( this, board(), commit );
}
} );
}
@ -143,9 +179,9 @@ int GENERATOR_TOOL::RegenerateAllOfType( const TOOL_EVENT& aEvent )
if( commitMsg.IsEmpty() )
commitMsg.Printf( _( "Update %s" ), generator->GetPluralName() );
generator->EditStart( this, board(), frame(), &commit );
generator->Update( this, board(), frame(), &commit );
generator->EditPush( this, board(), frame(), &commit, commitMsg, commitFlags );
generator->EditStart( this, board(), &commit );
generator->Update( this, board(), &commit );
generator->EditPush( this, board(), &commit, commitMsg, commitFlags );
commitFlags |= APPEND_UNDO;
}
@ -194,9 +230,9 @@ int GENERATOR_TOOL::RegenerateSelected( const TOOL_EVENT& aEvent )
for( PCB_GENERATOR* gen : generators )
{
gen->EditStart( this, board(), frame(), &commit );
gen->Update( this, board(), frame(), &commit );
gen->EditPush( this, board(), frame(), &commit, _( "Regenerate Selected" ), commitFlags );
gen->EditStart( this, board(), &commit );
gen->Update( this, board(), &commit );
gen->EditPush( this, board(), &commit, _( "Regenerate Selected" ), commitFlags );
commitFlags |= APPEND_UNDO;
}
@ -213,9 +249,9 @@ int GENERATOR_TOOL::RegenerateItem( const TOOL_EVENT& aEvent )
PCB_GENERATOR* gen = aEvent.Parameter<PCB_GENERATOR*>();
gen->EditStart( this, board(), frame(), &commit );
gen->Update( this, board(), frame(), &commit );
gen->EditPush( this, board(), frame(), &commit, _( "Regenerate Item" ), commitFlags );
gen->EditStart( this, board(), &commit );
gen->Update( this, board(), &commit );
gen->EditPush( this, board(), &commit, _( "Regenerate Item" ), commitFlags );
frame()->RefreshCanvas();
return 0;
@ -232,27 +268,27 @@ int GENERATOR_TOOL::GenEditAction( const TOOL_EVENT& aEvent )
if( aEvent.IsAction( &PCB_ACTIONS::genStartEdit ) )
{
gen->EditStart( this, board(), frame(), commit );
gen->EditStart( this, board(), commit );
}
else if( aEvent.IsAction( &PCB_ACTIONS::genUpdateEdit ) )
{
gen->Update( this, board(), frame(), commit );
gen->Update( this, board(), commit );
}
else if( aEvent.IsAction( &PCB_ACTIONS::genPushEdit ) )
{
gen->EditPush( this, board(), frame(), commit, wxEmptyString );
gen->EditPush( this, board(), commit, wxEmptyString );
wxASSERT( commit->Empty() );
}
else if( aEvent.IsAction( &PCB_ACTIONS::genRevertEdit ) )
{
gen->EditRevert( this, board(), frame(), commit );
gen->EditRevert( this, board(), commit );
wxASSERT( commit->Empty() );
}
else if( aEvent.IsAction( &PCB_ACTIONS::genRemove ) )
{
gen->Remove( this, board(), frame(), commit );
gen->Remove( this, board(), commit );
}
return 0;