KiCad PCB EDA Suite
BOARD_COMMIT Class Reference

#include <board_commit.h>

Inheritance diagram for BOARD_COMMIT:
COMMIT

Public Member Functions

 BOARD_COMMIT (EDA_DRAW_FRAME *aFrame)
 
 BOARD_COMMIT (PCB_TOOL_BASE *aTool)
 
virtual ~BOARD_COMMIT ()
 
virtual void Push (const wxString &aMessage=wxT("A commit"), bool aCreateUndoEntry=true, bool aSetDirtyBit=true) override
 Revert the commit by restoring the modified items state. More...
 
virtual void Revert () override
 
COMMITStage (EDA_ITEM *aItem, CHANGE_TYPE aChangeType) override
 
COMMITStage (std::vector< EDA_ITEM * > &container, CHANGE_TYPE aChangeType) override
 
COMMITStage (const PICKED_ITEMS_LIST &aItems, UNDO_REDO aModFlag=UNDO_REDO::UNSPECIFIED) override
 Execute the changes. More...
 
void SetResolveNetConflicts (bool aResolve=true)
 Sets a flag that will cause Push() to resolve net conflicts on track/via clusters instead of the default behavior which is to skip updating track/via clusters that have conflicts. More...
 
COMMITAdd (EDA_ITEM *aItem)
 Notify observers that aItem has been added. More...
 
COMMITAdded (EDA_ITEM *aItem)
 Remove a new item from the model. More...
 
COMMITRemove (EDA_ITEM *aItem)
 Notify observers that aItem has been removed. More...
 
COMMITRemoved (EDA_ITEM *aItem)
 Modify a given item in the model. More...
 
COMMITModify (EDA_ITEM *aItem)
 Create an undo entry for an item that has been already modified. More...
 
COMMITModified (EDA_ITEM *aItem, EDA_ITEM *aCopy)
 
template<class Range >
COMMITStageItems (const Range &aRange, CHANGE_TYPE aChangeType)
 Add a change of the item aItem of type aChangeType to the change list. More...
 
bool Empty () const
 Returns status of an item. More...
 
int GetStatus (EDA_ITEM *aItem)
 

Protected Member Functions

void clear ()
 
COMMITcreateModified (EDA_ITEM *aItem, EDA_ITEM *aCopy, int aExtraFlags=0)
 
virtual void makeEntry (EDA_ITEM *aItem, CHANGE_TYPE aType, EDA_ITEM *aCopy=nullptr)
 
COMMIT_LINEfindEntry (EDA_ITEM *aItem)
 Search for an entry describing change for a particular item. More...
 
CHANGE_TYPE convert (UNDO_REDO aType) const
 

Protected Attributes

std::set< EDA_ITEM * > m_changedItems
 
std::vector< COMMIT_LINEm_changes
 

Private Member Functions

virtual EDA_ITEMparentObject (EDA_ITEM *aItem) const override
 

Private Attributes

TOOL_MANAGERm_toolMgr
 
bool m_isFootprintEditor
 
bool m_resolveNetConflicts
 

Detailed Description

Definition at line 37 of file board_commit.h.

Constructor & Destructor Documentation

◆ BOARD_COMMIT() [1/2]

BOARD_COMMIT::BOARD_COMMIT ( EDA_DRAW_FRAME aFrame)

Definition at line 49 of file board_commit.cpp.

49  :
50  m_resolveNetConflicts( false )
51 {
52  m_toolMgr = aFrame->GetToolManager();
54 }
bool m_isFootprintEditor
Definition: board_commit.h:69
TOOL_MANAGER * m_toolMgr
Definition: board_commit.h:68
bool m_resolveNetConflicts
Definition: board_commit.h:70
bool IsType(FRAME_T aType) const
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:54

References FRAME_FOOTPRINT_EDITOR, TOOLS_HOLDER::GetToolManager(), EDA_BASE_FRAME::IsType(), m_isFootprintEditor, and m_toolMgr.

◆ BOARD_COMMIT() [2/2]

BOARD_COMMIT::BOARD_COMMIT ( PCB_TOOL_BASE aTool)

Definition at line 41 of file board_commit.cpp.

41  :
42  m_resolveNetConflicts( false )
43 {
44  m_toolMgr = aTool->GetManager();
46 }
bool m_isFootprintEditor
Definition: board_commit.h:69
TOOL_MANAGER * m_toolMgr
Definition: board_commit.h:68
TOOL_MANAGER * GetManager() const
Return the instance of TOOL_MANAGER that takes care of the tool.
Definition: tool_base.h:143
bool m_resolveNetConflicts
Definition: board_commit.h:70
bool IsFootprintEditor() const

References TOOL_BASE::GetManager(), PCB_TOOL_BASE::IsFootprintEditor(), m_isFootprintEditor, and m_toolMgr.

◆ ~BOARD_COMMIT()

BOARD_COMMIT::~BOARD_COMMIT ( )
virtual

Definition at line 57 of file board_commit.cpp.

58 {
59 }

Member Function Documentation

◆ Add()

◆ Added()

COMMIT& COMMIT::Added ( EDA_ITEM aItem)
inlineinherited

Remove a new item from the model.

Definition at line 84 of file commit.h.

References CHT_ADD, CHT_DONE, and COMMIT::Stage().

Referenced by PCB_EDIT_FRAME::RunActionPlugin().

◆ clear()

void COMMIT::clear ( )
inlineprotectedinherited

Definition at line 157 of file commit.h.

158  {
159  m_changedItems.clear();
160  m_changes.clear();
161  }
std::set< EDA_ITEM * > m_changedItems
Definition: commit.h:178
std::vector< COMMIT_LINE > m_changes
Definition: commit.h:179

References COMMIT::m_changedItems, and COMMIT::m_changes.

Referenced by Push(), and Revert().

◆ convert()

CHANGE_TYPE COMMIT::convert ( UNDO_REDO  aType) const
protectedinherited

Definition at line 200 of file commit.cpp.

201 {
202  switch( aType )
203  {
204  case UNDO_REDO::NEWITEM:
205  return CHT_ADD;
206 
207  case UNDO_REDO::DELETED:
208  return CHT_REMOVE;
209 
210  default:
211  assert( false );
213 
214  case UNDO_REDO::CHANGED:
215  return CHT_MODIFY;
216  }
217 }
Definition: commit.h:40
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83

References CHANGED, CHT_ADD, CHT_MODIFY, CHT_REMOVE, DELETED, KI_FALLTHROUGH, and NEWITEM.

Referenced by COMMIT::Stage().

◆ createModified()

COMMIT & COMMIT::createModified ( EDA_ITEM aItem,
EDA_ITEM aCopy,
int  aExtraFlags = 0 
)
protectedinherited

Definition at line 148 of file commit.cpp.

149 {
150  EDA_ITEM* parent = parentObject( aItem );
151  auto entryIt = m_changedItems.find( parent );
152 
153  if( entryIt != m_changedItems.end() )
154  {
155  delete aCopy;
156  return *this; // item has been already modified once
157  }
158 
159  makeEntry( parent, CHT_MODIFY | aExtraFlags, aCopy );
160 
161  return *this;
162 }
virtual void makeEntry(EDA_ITEM *aItem, CHANGE_TYPE aType, EDA_ITEM *aCopy=nullptr)
Definition: commit.cpp:165
std::set< EDA_ITEM * > m_changedItems
Definition: commit.h:178
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:100
virtual EDA_ITEM * parentObject(EDA_ITEM *aItem) const =0

References CHT_MODIFY, COMMIT::m_changedItems, COMMIT::makeEntry(), and COMMIT::parentObject().

Referenced by COMMIT::Modified(), and COMMIT::Stage().

◆ Empty()

bool COMMIT::Empty ( ) const
inlineinherited

Returns status of an item.

Definition at line 140 of file commit.h.

References COMMIT::m_changes.

Referenced by DIALOG_CLEANUP_GRAPHICS::doCleanup(), DIALOG_CLEANUP_TRACKS_AND_VIAS::doCleanup(), and Push().

◆ findEntry()

COMMIT::COMMIT_LINE * COMMIT::findEntry ( EDA_ITEM aItem)
protectedinherited

Search for an entry describing change for a particular item.

Returns
null if there is no related entry.

Definition at line 188 of file commit.cpp.

189 {
190  for( COMMIT_LINE& change : m_changes )
191  {
192  if( change.m_item == aItem )
193  return &change;
194  }
195 
196  return nullptr;
197 }
std::vector< COMMIT_LINE > m_changes
Definition: commit.h:179

References COMMIT::m_changes.

Referenced by COMMIT::GetStatus().

◆ GetStatus()

int COMMIT::GetStatus ( EDA_ITEM aItem)
inherited

Definition at line 130 of file commit.cpp.

131 {
132  COMMIT_LINE* entry = findEntry( parentObject( aItem ) );
133 
134  return entry ? entry->m_type : 0;
135 }
COMMIT_LINE * findEntry(EDA_ITEM *aItem)
Search for an entry describing change for a particular item.
Definition: commit.cpp:188
virtual EDA_ITEM * parentObject(EDA_ITEM *aItem) const =0

References COMMIT::findEntry(), COMMIT::COMMIT_LINE::m_type, and COMMIT::parentObject().

Referenced by BOARD_NETLIST_UPDATER::updateComponentPadConnections(), and BOARD_NETLIST_UPDATER::updateFootprintParameters().

◆ makeEntry()

void COMMIT::makeEntry ( EDA_ITEM aItem,
CHANGE_TYPE  aType,
EDA_ITEM aCopy = nullptr 
)
protectedvirtualinherited

Definition at line 165 of file commit.cpp.

166 {
167  // Expect an item copy if it is going to be modified
168  wxASSERT( !!aCopy == ( ( aType & CHT_TYPE ) == CHT_MODIFY ) );
169 
170  if( m_changedItems.find( aItem ) != m_changedItems.end() )
171  {
172  eraseIf( m_changes, [aItem] ( const COMMIT_LINE& aEnt ) {
173  return aEnt.m_item == aItem;
174  } );
175  }
176 
177  COMMIT_LINE ent;
178 
179  ent.m_item = aItem;
180  ent.m_type = aType;
181  ent.m_copy = aCopy;
182 
183  m_changedItems.insert( aItem );
184  m_changes.push_back( ent );
185 }
Flag to indicate the change is already applied, just notify observers (not compatible with CHT_MODIFY...
Definition: commit.h:43
void eraseIf(Container &c, F &&f)
Definition: commit.cpp:139
std::set< EDA_ITEM * > m_changedItems
Definition: commit.h:178
std::vector< COMMIT_LINE > m_changes
Definition: commit.h:179

References CHT_MODIFY, CHT_TYPE, eraseIf(), COMMIT::m_changedItems, COMMIT::m_changes, COMMIT::COMMIT_LINE::m_copy, COMMIT::COMMIT_LINE::m_item, and COMMIT::COMMIT_LINE::m_type.

Referenced by COMMIT::createModified(), and COMMIT::Stage().

◆ Modified()

COMMIT& COMMIT::Modified ( EDA_ITEM aItem,
EDA_ITEM aCopy 
)
inlineinherited

Definition at line 110 of file commit.h.

111  {
112  return createModified( aItem, aCopy );
113  }
COMMIT & createModified(EDA_ITEM *aItem, EDA_ITEM *aCopy, int aExtraFlags=0)
Definition: commit.cpp:148

References COMMIT::createModified().

Referenced by COMMIT::Stage(), BOARD_NETLIST_UPDATER::updateComponentPadConnections(), and BOARD_NETLIST_UPDATER::updateFootprintParameters().

◆ Modify()

COMMIT& COMMIT::Modify ( EDA_ITEM aItem)
inlineinherited

Create an undo entry for an item that has been already modified.

Requires a copy done before the modification.

Definition at line 103 of file commit.h.

References CHT_MODIFY, and COMMIT::Stage().

Referenced by PCB_POINT_EDITOR::addCorner(), AR_AUTOPLACER::AutoplaceFootprints(), doPushPadProperties(), DRAWING_TOOL::DrawVia(), PAD_TOOL::EnumeratePads(), PAD_TOOL::explodePad(), ZONE_FILLER::Fill(), ARRAY_CREATOR::Invoke(), TRACKS_CLEANER::mergeCollinearSegments(), mergeZones(), BOARD_EDITOR_CONTROL::modifyLockSelected(), FOOTPRINT_EDIT_FRAME::OnEditItemRequest(), PAD_TOOL::pastePadProperties(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), CN_CONNECTIVITY_ALGO::propagateConnections(), DIALOG_BOARD_REANNOTATE::ReannotateBoard(), PAD_TOOL::recombinePad(), PCB_POINT_EDITOR::removeCorner(), GROUP_TOOL::RemoveFromGroup(), DRAWING_TOOL::SetAnchor(), BOARD_EDITOR_CONTROL::TrackWidthDec(), BOARD_EDITOR_CONTROL::TrackWidthInc(), DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow(), DIALOG_UNUSED_PAD_LAYERS::TransferDataFromWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataFromWindow(), DIALOG_GROUP_PROPERTIES::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), BOARD_NETLIST_UPDATER::updateCopperZoneNets(), BOARD_EDITOR_CONTROL::ViaSizeDec(), BOARD_EDITOR_CONTROL::ViaSizeInc(), ZONE_FILLER_TOOL::ZoneUnfill(), and ZONE_FILLER_TOOL::ZoneUnfillAll().

◆ parentObject()

EDA_ITEM * BOARD_COMMIT::parentObject ( EDA_ITEM aItem) const
overrideprivatevirtual

Implements COMMIT.

Definition at line 409 of file board_commit.cpp.

410 {
411  switch( aItem->Type() )
412  {
413  case PCB_PAD_T:
414  case PCB_FP_SHAPE_T:
415  case PCB_FP_TEXT_T:
416  case PCB_FP_ZONE_T:
417  return aItem->GetParent();
418 
419  case PCB_ZONE_T:
420  wxASSERT( !dynamic_cast<FOOTPRINT*>( aItem->GetParent() ) );
421  return aItem;
422 
423  default:
424  break;
425  }
426 
427  return aItem;
428 }
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
class PAD, a pad in a footprint
Definition: typeinfo.h:89
EDA_ITEM * GetParent() const
Definition: eda_item.h:115
class ZONE, a copper pour area
Definition: typeinfo.h:105
class ZONE, managed by a footprint
Definition: typeinfo.h:94
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:113

References EDA_ITEM::GetParent(), PCB_FP_SHAPE_T, PCB_FP_TEXT_T, PCB_FP_ZONE_T, PCB_PAD_T, PCB_ZONE_T, and EDA_ITEM::Type().

◆ Push()

void BOARD_COMMIT::Push ( const wxString &  aMessage = wxT("A commit"),
bool  aCreateUndoEntry = true,
bool  aSetDirtyBit = true 
)
overridevirtual

Revert the commit by restoring the modified items state.

Implements COMMIT.

Definition at line 90 of file board_commit.cpp.

91 {
92  // Objects potentially interested in changes:
93  PICKED_ITEMS_LIST undoList;
94  KIGFX::VIEW* view = m_toolMgr->GetView();
95  BOARD* board = (BOARD*) m_toolMgr->GetModel();
97  auto connectivity = board->GetConnectivity();
98  std::set<EDA_ITEM*> savedModules;
100  bool itemsDeselected = false;
101 
102  std::vector<BOARD_ITEM*> bulkAddedItems;
103  std::vector<BOARD_ITEM*> bulkRemovedItems;
104  std::vector<BOARD_ITEM*> itemsChanged;
105 
106  if( Empty() )
107  return;
108 
109  for( COMMIT_LINE& ent : m_changes )
110  {
111  int changeType = ent.m_type & CHT_TYPE;
112  int changeFlags = ent.m_type & CHT_FLAGS;
113  BOARD_ITEM* boardItem = static_cast<BOARD_ITEM*>( ent.m_item );
114 
115  // Module items need to be saved in the undo buffer before modification
116  if( m_isFootprintEditor )
117  {
118  // Be sure that we are storing a footprint
119  if( ent.m_item->Type() != PCB_FOOTPRINT_T )
120  ent.m_item = ent.m_item->GetParent();
121 
122  // We have not saved the footprint yet, so let's create an entry
123  if( savedModules.count( ent.m_item ) == 0 )
124  {
125  if( !ent.m_copy )
126  {
127  wxASSERT( changeType != CHT_MODIFY ); // too late to make a copy..
128  ent.m_copy = ent.m_item->Clone();
129  }
130 
131  wxASSERT( ent.m_item->Type() == PCB_FOOTPRINT_T );
132  wxASSERT( ent.m_copy->Type() == PCB_FOOTPRINT_T );
133 
134  if( aCreateUndoEntry )
135  {
136  ITEM_PICKER itemWrapper( nullptr, ent.m_item, UNDO_REDO::CHANGED );
137  itemWrapper.SetLink( ent.m_copy );
138  undoList.PushItem( itemWrapper );
139  frame->SaveCopyInUndoList( undoList, UNDO_REDO::CHANGED );
140  }
141 
142  savedModules.insert( ent.m_item );
143  static_cast<FOOTPRINT*>( ent.m_item )->SetLastEditTime();
144  }
145  }
146 
147  switch( changeType )
148  {
149  case CHT_ADD:
150  {
151  if( m_isFootprintEditor )
152  {
153  // footprints inside footprints are not supported yet
154  wxASSERT( boardItem->Type() != PCB_FOOTPRINT_T );
155 
156  boardItem->SetParent( board->Footprints().front() );
157 
158  if( !( changeFlags & CHT_DONE ) )
159  board->Footprints().front()->Add( boardItem );
160  }
161  else if( boardItem->Type() == PCB_PAD_T ||
162  boardItem->Type() == PCB_FP_TEXT_T ||
163  boardItem->Type() == PCB_FP_SHAPE_T ||
164  boardItem->Type() == PCB_FP_ZONE_T )
165  {
166  wxASSERT( boardItem->GetParent() &&
167  boardItem->GetParent()->Type() == PCB_FOOTPRINT_T );
168  }
169  else
170  {
171  if( aCreateUndoEntry )
172  undoList.PushItem( ITEM_PICKER( nullptr, boardItem, UNDO_REDO::NEWITEM ) );
173 
174  if( !( changeFlags & CHT_DONE ) )
175  {
176  board->Add( boardItem, ADD_MODE::BULK_INSERT ); // handles connectivity
177  bulkAddedItems.push_back( boardItem );
178  }
179  }
180 
181  if( boardItem->Type() != PCB_NETINFO_T )
182  view->Add( boardItem );
183 
184  break;
185  }
186 
187  case CHT_REMOVE:
188  {
189  PCB_GROUP* parentGroup = boardItem->GetParentGroup();
190 
191  if( !m_isFootprintEditor && aCreateUndoEntry )
192  undoList.PushItem( ITEM_PICKER( nullptr, boardItem, UNDO_REDO::DELETED ) );
193 
194  if( boardItem->IsSelected() )
195  {
196  selTool->RemoveItemFromSel( boardItem, true /* quiet mode */ );
197  itemsDeselected = true;
198  }
199 
200  switch( boardItem->Type() )
201  {
202  // Footprint items
203  case PCB_PAD_T:
204  case PCB_FP_SHAPE_T:
205  case PCB_FP_TEXT_T:
206  case PCB_FP_ZONE_T:
207  // This level can only handle footprint children in the footprint editor as
208  // only in that case has the entire footprint (and all its children) already
209  // been saved for undo.
210  wxASSERT( m_isFootprintEditor );
211 
212  if( boardItem->Type() == PCB_FP_TEXT_T )
213  {
214  FP_TEXT* text = static_cast<FP_TEXT*>( boardItem );
215 
216  // don't allow deletion of Reference or Value
217  if( text->GetType() != FP_TEXT::TEXT_is_DIVERS )
218  break;
219  }
220 
221  if( parentGroup && !( parentGroup->GetFlags() & STRUCT_DELETED ) )
222  parentGroup->RemoveItem( boardItem );
223 
224  view->Remove( boardItem );
225 
226  if( !( changeFlags & CHT_DONE ) )
227  {
228  FOOTPRINT* footprint = static_cast<FOOTPRINT*>( boardItem->GetParent() );
229  wxASSERT( footprint && footprint->Type() == PCB_FOOTPRINT_T );
230  footprint->Delete( boardItem );
231  }
232 
233  break;
234 
235  // Board items
236  case PCB_SHAPE_T: // a shape (normally not on copper layers)
237  case PCB_TEXT_T: // a text on a layer
238  case PCB_TRACE_T: // a track segment (segment on a copper layer)
239  case PCB_ARC_T: // an arced track segment (segment on a copper layer)
240  case PCB_VIA_T: // a via (like track segment on a copper layer)
241  case PCB_DIM_ALIGNED_T: // a dimension (graphic item)
242  case PCB_DIM_CENTER_T:
244  case PCB_DIM_LEADER_T: // a leader dimension
245  case PCB_TARGET_T: // a target (graphic item)
246  case PCB_MARKER_T: // a marker used to show something
247  case PCB_ZONE_T:
248  view->Remove( boardItem );
249 
250  if( !( changeFlags & CHT_DONE ) )
251  {
252  board->Remove( boardItem, REMOVE_MODE::BULK );
253  bulkRemovedItems.push_back( boardItem );
254  }
255 
256  break;
257 
258  case PCB_FOOTPRINT_T:
259  {
260  // No support for nested footprints (yet)
261  wxASSERT( !m_isFootprintEditor );
262 
263  FOOTPRINT* footprint = static_cast<FOOTPRINT*>( boardItem );
264  view->Remove( footprint );
265  footprint->ClearFlags();
266 
267  if( !( changeFlags & CHT_DONE ) )
268  {
269  board->Remove( footprint, REMOVE_MODE::BULK ); // handles connectivity
270  bulkRemovedItems.push_back( footprint );
271  }
272  }
273  break;
274 
275  case PCB_GROUP_T:
276  view->Remove( boardItem );
277 
278  if( !( changeFlags & CHT_DONE ) )
279  {
280  if( m_isFootprintEditor )
281  board->GetFirstFootprint()->Remove( boardItem );
282  else
283  {
284  board->Remove( boardItem, REMOVE_MODE::BULK );
285  bulkRemovedItems.push_back( boardItem );
286  }
287  }
288  break;
289 
290  // Metadata items
291  case PCB_NETINFO_T:
292  board->Remove( boardItem, REMOVE_MODE::BULK );
293  bulkRemovedItems.push_back( boardItem );
294  break;
295 
296  default: // other types do not need to (or should not) be handled
297  wxASSERT( false );
298  break;
299  }
300 
301  break;
302  }
303 
304  case CHT_MODIFY:
305  {
306  if( !m_isFootprintEditor && aCreateUndoEntry )
307  {
308  ITEM_PICKER itemWrapper( nullptr, boardItem, UNDO_REDO::CHANGED );
309  wxASSERT( ent.m_copy );
310  itemWrapper.SetLink( ent.m_copy );
311  undoList.PushItem( itemWrapper );
312  }
313 
314  if( ent.m_copy )
315  connectivity->MarkItemNetAsDirty( static_cast<BOARD_ITEM*>( ent.m_copy ) );
316 
317  connectivity->Update( boardItem );
318  view->Update( boardItem );
319 
320  if( m_isFootprintEditor )
321  {
322  static_cast<FOOTPRINT*>( boardItem )->RunOnChildren(
323  [&]( BOARD_ITEM* aChild )
324  {
325  view->Update( aChild );
326  });
327  }
328 
329  itemsChanged.push_back( boardItem );
330 
331  // if no undo entry is needed, the copy would create a memory leak
332  if( !aCreateUndoEntry )
333  delete ent.m_copy;
334 
335  break;
336  }
337 
338  default:
339  wxASSERT( false );
340  break;
341  }
342  }
343 
344  if( bulkAddedItems.size() > 0 )
345  board->FinalizeBulkAdd( bulkAddedItems );
346 
347  if( bulkRemovedItems.size() > 0 )
348  board->FinalizeBulkRemove( bulkRemovedItems );
349 
350  if( itemsChanged.size() > 0 )
351  board->OnItemsChanged( itemsChanged );
352 
353  if( !m_isFootprintEditor )
354  {
355  size_t num_changes = m_changes.size();
356 
358  connectivity->PropagateNets( this, PROPAGATE_MODE::RESOLVE_CONFLICTS );
359 
360  connectivity->RecalculateRatsnest( this );
361  connectivity->ClearDynamicRatsnest();
362  frame->GetCanvas()->RedrawRatsnest();
363 
364  if( m_changes.size() > num_changes )
365  {
366  for( size_t i = num_changes; i < m_changes.size(); ++i )
367  {
368  COMMIT_LINE& ent = m_changes[i];
369 
370  // This should only be modifications from the connectivity algo
371  wxASSERT( ( ent.m_type & CHT_TYPE ) == CHT_MODIFY );
372 
373  auto boardItem = static_cast<BOARD_ITEM*>( ent.m_item );
374 
375  if( aCreateUndoEntry )
376  {
377  ITEM_PICKER itemWrapper( nullptr, boardItem, UNDO_REDO::CHANGED );
378  wxASSERT( ent.m_copy );
379  itemWrapper.SetLink( ent.m_copy );
380  undoList.PushItem( itemWrapper );
381  }
382  else
383  {
384  delete ent.m_copy;
385  }
386 
387  view->Update( boardItem );
388  }
389  }
390  }
391 
392  if( !m_isFootprintEditor && aCreateUndoEntry )
393  frame->SaveCopyInUndoList( undoList, UNDO_REDO::UNSPECIFIED );
394 
396 
397  if( itemsDeselected )
399 
400  if( aSetDirtyBit )
401  frame->OnModify();
402  else
403  frame->Update3DView( true, frame->GetDisplayOptions().m_Live3DRefresh );
404 
405  clear();
406 }
PCB_GROUP * GetParentGroup() const
Definition: board_item.h:91
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:283
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
Definition: typeinfo.h:100
class PCB_DIM_LEADER, a leader dimension (graphic item)
Definition: typeinfo.h:101
void clear()
Definition: commit.h:157
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
bool IsSelected() const
Definition: eda_item.h:123
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:200
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
class PCB_GROUP, a set of BOARD_ITEMs
Definition: typeinfo.h:108
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:50
class PCB_DIM_CENTER, a center point marking (graphic item)
Definition: typeinfo.h:102
Flag to indicate the change is already applied, just notify observers (not compatible with CHT_MODIFY...
Definition: commit.h:43
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
Definition: commit.h:40
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
Definition: view.cpp:352
void Remove(BOARD_ITEM *aItem, REMOVE_MODE aMode=REMOVE_MODE::NORMAL) override
Removes an item from the container.
Definition: footprint.cpp:525
bool m_isFootprintEditor
Definition: board_commit.h:69
class PCB_TEXT, text on a layer
Definition: typeinfo.h:91
class PCB_ARC, an arc track segment on a copper layer
Definition: typeinfo.h:97
void PushItem(const ITEM_PICKER &aItem)
Push aItem to the top of the list.
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
class PAD, a pad in a footprint
Definition: typeinfo.h:89
TOOL_MANAGER * m_toolMgr
Definition: board_commit.h:68
const PCB_DISPLAY_OPTIONS & GetDisplayOptions() const
Display options control the way tracks, vias, outlines and other things are shown (for instance solid...
EDA_ITEM * GetModel() const
Definition: tool_manager.h:290
Clusters with conflicting drivers are not updated (default)
void RedrawRatsnest()
Return the bounding box of the view that should be used if model is not valid.
virtual void SetParent(EDA_ITEM *aParent)
Definition: eda_item.h:116
class PCB_TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
void FinalizeBulkRemove(std::vector< BOARD_ITEM * > &aRemovedItems)
Must be used if Remove() is used using a BULK_x REMOVE_MODE to generate a change event for listeners.
Definition: board.cpp:702
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT) override
Adds an item to the container.
Definition: board.cpp:606
bool m_resolveNetConflicts
Definition: board_commit.h:70
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
Definition: board.h:317
TOOL_TYPE m_type
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:206
FOOTPRINTS & Footprints()
Definition: board.h:233
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Return a list of missing connections between components/tracks.
Definition: board.h:344
void OnItemsChanged(std::vector< BOARD_ITEM * > &aItems)
Notify the board and its listeners that an item on the board has been modified in some way.
Definition: board.cpp:2093
#define STRUCT_DELETED
flag indication structures to be erased
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:154
bool RemoveItem(BOARD_ITEM *aItem)
Remove item from group.
Definition: pcb_group.cpp:50
class ZONE, a copper pour area
Definition: typeinfo.h:105
A holder to handle information on schematic or board items.
bool Empty() const
Returns status of an item.
Definition: commit.h:140
class PCB_TARGET, a target (graphic item)
Definition: typeinfo.h:104
EDA_ITEM_FLAGS GetFlags() const
Definition: eda_item.h:155
class FOOTPRINT, a footprint
Definition: typeinfo.h:88
void FinalizeBulkAdd(std::vector< BOARD_ITEM * > &aNewItems)
Must be used if Add() is used using a BULK_x ADD_MODE to generate a change event for listeners.
Definition: board.cpp:696
TOOLS_HOLDER * GetToolHolder() const
Definition: tool_manager.h:294
virtual void OnModify()
Must be called after a change in order to set the "modify" flag of the current screen and update the ...
class PCB_MARKER, a marker used to show something
Definition: typeinfo.h:98
Global action (toolbar/main menu event, global shortcut)
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
bool m_Live3DRefresh
If true, 3D viewer will redraw on every modification operation.
virtual void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.
class NETINFO_ITEM, a description of a net
Definition: typeinfo.h:107
std::vector< COMMIT_LINE > m_changes
Definition: commit.h:179
class ZONE, managed by a footprint
Definition: typeinfo.h:94
The selection tool: currently supports:
void Remove(BOARD_ITEM *aBoardItem, REMOVE_MODE aMode=REMOVE_MODE::NORMAL) override
Removes an item from the container.
Definition: board.cpp:708
virtual void SaveCopyInUndoList(EDA_ITEM *aItemToCopy, UNDO_REDO aTypeCommand)=0
Create a new entry in undo list of commands.
virtual void Delete(BOARD_ITEM *aItem)
Removes an item from the container and deletes it.
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
Definition: typeinfo.h:103
class PCB_VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:322
void RemoveItemFromSel(BOARD_ITEM *aItem, bool aQuietMode=false)
Multiple item unselection event handler.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition: view.h:67
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:166
void PostEvent(const TOOL_EVENT &aEvent)
Put an event to the event queue to be processed at the end of event processing cycle.
class PCB_SHAPE, a segment not on copper layers
Definition: typeinfo.h:90
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
Definition: view.cpp:1504
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:113

References KIGFX::VIEW::Add(), BOARD::Add(), AS_GLOBAL, BULK, BULK_INSERT, CHANGED, CHT_ADD, CHT_DONE, CHT_FLAGS, CHT_MODIFY, CHT_REMOVE, CHT_TYPE, COMMIT::clear(), EDA_ITEM::ClearFlags(), BOARD_ITEM_CONTAINER::Delete(), DELETED, COMMIT::Empty(), BOARD::FinalizeBulkAdd(), BOARD::FinalizeBulkRemove(), BOARD::Footprints(), PCB_BASE_FRAME::GetCanvas(), BOARD::GetConnectivity(), PCB_BASE_FRAME::GetDisplayOptions(), BOARD::GetFirstFootprint(), EDA_ITEM::GetFlags(), TOOL_MANAGER::GetModel(), BOARD_ITEM::GetParent(), BOARD_ITEM::GetParentGroup(), TOOL_MANAGER::GetTool(), TOOL_MANAGER::GetToolHolder(), TOOL_MANAGER::GetView(), EDA_ITEM::IsSelected(), COMMIT::m_changes, COMMIT::COMMIT_LINE::m_copy, m_isFootprintEditor, COMMIT::COMMIT_LINE::m_item, PCB_DISPLAY_OPTIONS::m_Live3DRefresh, m_resolveNetConflicts, m_toolMgr, COMMIT::COMMIT_LINE::m_type, TOOL_BASE::m_type, NEWITEM, BOARD::OnItemsChanged(), PCB_BASE_FRAME::OnModify(), PCB_ARC_T, PCB_DIM_ALIGNED_T, PCB_DIM_CENTER_T, PCB_DIM_LEADER_T, PCB_DIM_ORTHOGONAL_T, PCB_FOOTPRINT_T, PCB_FP_SHAPE_T, PCB_FP_TEXT_T, PCB_FP_ZONE_T, PCB_GROUP_T, PCB_MARKER_T, PCB_NETINFO_T, PCB_PAD_T, PCB_SHAPE_T, PCB_TARGET_T, PCB_TEXT_T, PCB_TRACE_T, PCB_VIA_T, PCB_ZONE_T, TOOL_MANAGER::PostEvent(), PICKED_ITEMS_LIST::PushItem(), PCB_DRAW_PANEL_GAL::RedrawRatsnest(), KIGFX::VIEW::Remove(), FOOTPRINT::Remove(), BOARD::Remove(), PCB_GROUP::RemoveItem(), PCB_SELECTION_TOOL::RemoveItemFromSel(), RESOLVE_CONFLICTS, PCB_BASE_FRAME::SaveCopyInUndoList(), ITEM_PICKER::SetLink(), EDA_ITEM::SetParent(), STRUCT_DELETED, TA_MODEL_CHANGE, TC_MESSAGE, text, FP_TEXT::TEXT_is_DIVERS, EDA_ITEM::Type(), EVENTS::UnselectedEvent, UNSPECIFIED, KIGFX::VIEW::Update(), and PCB_BASE_FRAME::Update3DView().

Referenced by PCB_POINT_EDITOR::addCorner(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), AUTOPLACE_TOOL::autoplace(), ZONE_FILLER_TOOL::CheckAllZones(), ZONE_CREATE_HELPER::commitZone(), MICROWAVE_TOOL::createInductorBetween(), ALIGN_DISTRIBUTE_TOOL::DistributeHorizontally(), ALIGN_DISTRIBUTE_TOOL::DistributeVertically(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), DIALOG_CLEANUP_TRACKS_AND_VIAS::doCleanup(), DIALOG_CLEANUP_GRAPHICS::doCleanup(), DIALOG_GLOBAL_DELETION::doGlobalDeletions(), PCB_TOOL_BASE::doInteractiveItemPlacement(), DRAWING_TOOL::DrawArc(), DRAWING_TOOL::DrawBoardCharacteristics(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::DrawLine(), DRAWING_TOOL::DrawRectangle(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::DrawSpecificationStackup(), PCB_EDIT_FRAME::Edit_Zone_Params(), PAD_TOOL::EnumeratePads(), PAD_TOOL::explodePad(), ZONE_FILLER_TOOL::FillAllZones(), DRAWING_TOOL::InteractivePlaceWithPreview(), ARRAY_CREATOR::Invoke(), CONVERT_TOOL::LinesToPoly(), BOARD_EDITOR_CONTROL::modifyLockSelected(), FOOTPRINT_EDIT_FRAME::OnEditItemRequest(), DIALOG_EXCHANGE_FOOTPRINTS::OnOKClicked(), PCB_POINT_EDITOR::OnSelectionChange(), PAD_TOOL::pastePadProperties(), ZONE_CREATE_HELPER::performZoneCutout(), BOARD_EDITOR_CONTROL::PlaceFootprint(), DRAWING_TOOL::PlaceImportedGraphics(), DRAWING_TOOL::PlaceText(), CONVERT_TOOL::PolyToLines(), PAD_TOOL::pushPadSettings(), DIALOG_BOARD_REANNOTATE::ReannotateBoard(), PAD_TOOL::recombinePad(), PCB_POINT_EDITOR::removeCorner(), GROUP_TOOL::RemoveFromGroup(), PCB_EDIT_FRAME::ResolveDRCExclusions(), PCB_EDIT_FRAME::RunActionPlugin(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), CONVERT_TOOL::SegmentToArc(), DRAWING_TOOL::SetAnchor(), BOARD_EDITOR_CONTROL::TrackWidthDec(), BOARD_EDITOR_CONTROL::TrackWidthInc(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_GROUP_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), BOARD_NETLIST_UPDATER::UpdateNetlist(), BOARD_EDITOR_CONTROL::ViaSizeDec(), BOARD_EDITOR_CONTROL::ViaSizeInc(), BOARD_EDITOR_CONTROL::ZoneDuplicate(), ZONE_FILLER_TOOL::ZoneFill(), BOARD_EDITOR_CONTROL::ZoneMerge(), ZONE_FILLER_TOOL::ZoneUnfill(), and ZONE_FILLER_TOOL::ZoneUnfillAll().

◆ Remove()

◆ Removed()

COMMIT& COMMIT::Removed ( EDA_ITEM aItem)
inlineinherited

◆ Revert()

void BOARD_COMMIT::Revert ( )
overridevirtual

Implements COMMIT.

Definition at line 431 of file board_commit.cpp.

432 {
433  PICKED_ITEMS_LIST undoList;
434  KIGFX::VIEW* view = m_toolMgr->GetView();
435  BOARD* board = (BOARD*) m_toolMgr->GetModel();
436  auto connectivity = board->GetConnectivity();
437 
438  std::vector<BOARD_ITEM*> bulkAddedItems;
439  std::vector<BOARD_ITEM*> bulkRemovedItems;
440  std::vector<BOARD_ITEM*> itemsChanged;
441 
442  for( auto it = m_changes.rbegin(); it != m_changes.rend(); ++it )
443  {
444  COMMIT_LINE& ent = *it;
445  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( ent.m_item );
446  BOARD_ITEM* copy = static_cast<BOARD_ITEM*>( ent.m_copy );
447  int changeType = ent.m_type & CHT_TYPE;
448  int changeFlags = ent.m_type & CHT_FLAGS;
449 
450  switch( changeType )
451  {
452  case CHT_ADD:
453  if( !( changeFlags & CHT_DONE ) )
454  break;
455 
456  view->Remove( item );
457  connectivity->Remove( item );
458  board->Remove( item, REMOVE_MODE::BULK );
459  bulkRemovedItems.push_back( item );
460  break;
461 
462  case CHT_REMOVE:
463  if( !( changeFlags & CHT_DONE ) )
464  break;
465 
466  view->Add( item );
467  connectivity->Add( item );
468  board->Add( item, ADD_MODE::INSERT );
469  bulkAddedItems.push_back( item );
470  break;
471 
472  case CHT_MODIFY:
473  {
474  view->Remove( item );
475  connectivity->Remove( item );
476 
477  item->SwapData( copy );
478 
479  view->Add( item );
480  connectivity->Add( item );
481  board->OnItemChanged( item );
482  itemsChanged.push_back( item );
483 
484  delete copy;
485  break;
486  }
487 
488  default:
489  wxASSERT( false );
490  break;
491  }
492  }
493 
494  if( bulkAddedItems.size() > 0 )
495  board->FinalizeBulkAdd( bulkAddedItems );
496 
497  if( bulkRemovedItems.size() > 0 )
498  board->FinalizeBulkRemove( bulkRemovedItems );
499 
500  if( itemsChanged.size() > 0 )
501  board->OnItemsChanged( itemsChanged );
502 
503  if ( !m_isFootprintEditor )
504  connectivity->RecalculateRatsnest();
505 
507  selTool->RebuildSelection();
508 
509  clear();
510 }
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:283
void clear()
Definition: commit.h:157
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
Flag to indicate the change is already applied, just notify observers (not compatible with CHT_MODIFY...
Definition: commit.h:43
Definition: commit.h:40
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
Definition: view.cpp:352
bool m_isFootprintEditor
Definition: board_commit.h:69
TOOL_MANAGER * m_toolMgr
Definition: board_commit.h:68
EDA_ITEM * GetModel() const
Definition: tool_manager.h:290
void FinalizeBulkRemove(std::vector< BOARD_ITEM * > &aRemovedItems)
Must be used if Remove() is used using a BULK_x REMOVE_MODE to generate a change event for listeners.
Definition: board.cpp:702
void RebuildSelection()
Rebuild the selection from the EDA_ITEMs' selection flags.
virtual void SwapData(BOARD_ITEM *aImage)
Swap data between aItem and aImage.
Definition: board_item.cpp:128
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT) override
Adds an item to the container.
Definition: board.cpp:606
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Return a list of missing connections between components/tracks.
Definition: board.h:344
void OnItemsChanged(std::vector< BOARD_ITEM * > &aItems)
Notify the board and its listeners that an item on the board has been modified in some way.
Definition: board.cpp:2093
A holder to handle information on schematic or board items.
void FinalizeBulkAdd(std::vector< BOARD_ITEM * > &aNewItems)
Must be used if Add() is used using a BULK_x ADD_MODE to generate a change event for listeners.
Definition: board.cpp:696
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
std::vector< COMMIT_LINE > m_changes
Definition: commit.h:179
The selection tool: currently supports:
void OnItemChanged(BOARD_ITEM *aItem)
Notify the board and its listeners that an item on the board has been modified in some way.
Definition: board.cpp:2087
void Remove(BOARD_ITEM *aBoardItem, REMOVE_MODE aMode=REMOVE_MODE::NORMAL) override
Removes an item from the container.
Definition: board.cpp:708
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
Definition: view.cpp:322
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition: view.h:67

References KIGFX::VIEW::Add(), BOARD::Add(), BULK, CHT_ADD, CHT_DONE, CHT_FLAGS, CHT_MODIFY, CHT_REMOVE, CHT_TYPE, COMMIT::clear(), copy, BOARD::FinalizeBulkAdd(), BOARD::FinalizeBulkRemove(), BOARD::GetConnectivity(), TOOL_MANAGER::GetModel(), TOOL_MANAGER::GetTool(), TOOL_MANAGER::GetView(), INSERT, COMMIT::m_changes, COMMIT::COMMIT_LINE::m_copy, m_isFootprintEditor, COMMIT::COMMIT_LINE::m_item, m_toolMgr, COMMIT::COMMIT_LINE::m_type, BOARD::OnItemChanged(), BOARD::OnItemsChanged(), PCB_SELECTION_TOOL::RebuildSelection(), KIGFX::VIEW::Remove(), BOARD::Remove(), and BOARD_ITEM::SwapData().

Referenced by AUTOPLACE_TOOL::autoplace(), ZONE_FILLER_TOOL::CheckAllZones(), PAD_TOOL::EnumeratePads(), ZONE_FILLER_TOOL::FillAllZones(), PCB_POINT_EDITOR::OnSelectionChange(), BOARD_EDITOR_CONTROL::PlaceFootprint(), and ZONE_FILLER_TOOL::ZoneFill().

◆ SetResolveNetConflicts()

void BOARD_COMMIT::SetResolveNetConflicts ( bool  aResolve = true)
inline

Sets a flag that will cause Push() to resolve net conflicts on track/via clusters instead of the default behavior which is to skip updating track/via clusters that have conflicts.

This is used in the netlist updater to update any clusters that were changed due to pad nets changing, but should not be used for other changes as you typically don't want to change track/via nets due to temporary conflicts created by board editing operations.

Parameters
aResolveis true if this commit should resolve conflicting track/via net assignments

Definition at line 62 of file board_commit.h.

62 { m_resolveNetConflicts = aResolve; }
bool m_resolveNetConflicts
Definition: board_commit.h:70

References m_resolveNetConflicts.

Referenced by BOARD_NETLIST_UPDATER::UpdateNetlist().

◆ Stage() [1/3]

COMMIT & BOARD_COMMIT::Stage ( EDA_ITEM aItem,
CHANGE_TYPE  aChangeType 
)
overridevirtual

Reimplemented from COMMIT.

Definition at line 62 of file board_commit.cpp.

63 {
64  // if aItem belongs a footprint, the full footprint will be saved
65  // because undo/redo does not handle "sub items" modifications
66  if( aItem && aItem->Type() != PCB_FOOTPRINT_T && aChangeType == CHT_MODIFY )
67  {
68  EDA_ITEM* item = aItem->GetParent();
69 
70  if( item && item->Type() == PCB_FOOTPRINT_T ) // means aItem belongs a footprint
71  aItem = item;
72  }
73 
74  return COMMIT::Stage( aItem, aChangeType );
75 }
virtual COMMIT & Stage(EDA_ITEM *aItem, CHANGE_TYPE aChangeType)
Definition: commit.cpp:47
EDA_ITEM * GetParent() const
Definition: eda_item.h:115
class FOOTPRINT, a footprint
Definition: typeinfo.h:88
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:100
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:113

References CHT_MODIFY, EDA_ITEM::GetParent(), PCB_FOOTPRINT_T, COMMIT::Stage(), and EDA_ITEM::Type().

Referenced by ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersVertically(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsVertically(), and PCB_EDIT_FRAME::Edit_Zone_Params().

◆ Stage() [2/3]

COMMIT & BOARD_COMMIT::Stage ( std::vector< EDA_ITEM * > &  container,
CHANGE_TYPE  aChangeType 
)
overridevirtual

Reimplemented from COMMIT.

Definition at line 78 of file board_commit.cpp.

79 {
80  return COMMIT::Stage( container, aChangeType );
81 }
virtual COMMIT & Stage(EDA_ITEM *aItem, CHANGE_TYPE aChangeType)
Definition: commit.cpp:47

References COMMIT::Stage().

◆ Stage() [3/3]

COMMIT & BOARD_COMMIT::Stage ( const PICKED_ITEMS_LIST aItems,
UNDO_REDO  aModFlag = UNDO_REDO::UNSPECIFIED 
)
overridevirtual

Execute the changes.

Reimplemented from COMMIT.

Definition at line 84 of file board_commit.cpp.

85 {
86  return COMMIT::Stage( aItems, aModFlag );
87 }
virtual COMMIT & Stage(EDA_ITEM *aItem, CHANGE_TYPE aChangeType)
Definition: commit.cpp:47

References COMMIT::Stage().

◆ StageItems()

template<class Range >
COMMIT& COMMIT::StageItems ( const Range &  aRange,
CHANGE_TYPE  aChangeType 
)
inlineinherited

Add a change of the item aItem of type aChangeType to the change list.

Definition at line 117 of file commit.h.

References COMMIT::Stage().

Referenced by PCB_POINT_EDITOR::OnSelectionChange().

Member Data Documentation

◆ m_changedItems

std::set<EDA_ITEM*> COMMIT::m_changedItems
protectedinherited

Definition at line 178 of file commit.h.

Referenced by COMMIT::clear(), COMMIT::createModified(), COMMIT::makeEntry(), and COMMIT::Stage().

◆ m_changes

std::vector<COMMIT_LINE> COMMIT::m_changes
protectedinherited

◆ m_isFootprintEditor

bool BOARD_COMMIT::m_isFootprintEditor
private

Definition at line 69 of file board_commit.h.

Referenced by BOARD_COMMIT(), Push(), and Revert().

◆ m_resolveNetConflicts

bool BOARD_COMMIT::m_resolveNetConflicts
private

Definition at line 70 of file board_commit.h.

Referenced by Push(), and SetResolveNetConflicts().

◆ m_toolMgr

TOOL_MANAGER* BOARD_COMMIT::m_toolMgr
private

Definition at line 68 of file board_commit.h.

Referenced by BOARD_COMMIT(), Push(), and Revert().


The documentation for this class was generated from the following files: