KiCad PCB EDA Suite
SCH_MOVE_TOOL Class Reference

#include <sch_move_tool.h>

Inheritance diagram for SCH_MOVE_TOOL:
EE_TOOL_BASE< SCH_EDIT_FRAME > TOOL_INTERACTIVE TOOL_BASE

Public Types

enum  RESET_REASON { RUN, MODEL_RELOAD, GAL_SWITCH }
 Determine the reason of reset for a tool. More...
 

Public Member Functions

 SCH_MOVE_TOOL ()
 
 ~SCH_MOVE_TOOL () override
 
bool Init () override
 Init() is called once upon a registration of the tool. More...
 
int Main (const TOOL_EVENT &aEvent)
 Run an interactive move of the selected items, or the item under the cursor. More...
 
int AlignElements (const TOOL_EVENT &aEvent)
 Align selected elements to the grid. More...
 
void Reset (RESET_REASON aReason) override
 Bring the tool to a known, initial state. More...
 
void Activate ()
 Run the tool. More...
 
TOOL_MENUGetToolMenu ()
 
void SetContextMenu (ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
 Assign a context menu and tells when it should be activated. More...
 
void RunMainStack (std::function< void()> aFunc)
 Call a function using the main stack. More...
 
template<class T >
void Go (int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
 Define which state (aStateFunc) to go when a certain event arrives (aConditions). More...
 
TOOL_EVENTWait (const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
 Suspend execution of the tool until an event specified in aEventList arrives. More...
 
TOOL_TYPE GetType () const
 Return the type of the tool. More...
 
TOOL_ID GetId () const
 Return the unique identifier of the tool. More...
 
const std::string & GetName () const
 Return the name of the tool. More...
 
TOOL_MANAGERGetManager () const
 Return the instance of TOOL_MANAGER that takes care of the tool. More...
 
bool IsToolActive () const
 

Protected Member Functions

void updateItem (EDA_ITEM *aItem, bool aUpdateRTree) const
 Similar to getView()->Update(), but handles items that are redrawn by their parents and updating the SCH_SCREEN's RTree. More...
 
void saveCopyInUndoList (EDA_ITEM *aItem, UNDO_REDO aType, bool aAppend=false)
 
void attachManager (TOOL_MANAGER *aManager)
 Set the TOOL_MANAGER the tool will belong to. More...
 
KIGFX::VIEWgetView () const
 Returns the instance of #VIEW object used in the application. More...
 
KIGFX::VIEW_CONTROLSgetViewControls () const
 Return the instance of VIEW_CONTROLS object used in the application. More...
 
template<typename T >
T * getEditFrame () const
 Return the application window object, casted to requested user type. More...
 
template<typename T >
T * getModel () const
 Return the model object if it matches the requested type. More...
 

Protected Attributes

SCH_EDIT_FRAMEm_frame
 
KIGFX::SCH_VIEWm_view
 
EE_SELECTION_TOOLm_selectionTool
 
bool m_isSymbolEditor
 
TOOL_MENU m_menu
 The functions below are not yet implemented - their interface may change. More...
 
TOOL_TYPE m_type
 Unique identifier for the tool, assigned by a TOOL_MANAGER instance. More...
 
TOOL_ID m_toolId
 Name of the tool. More...
 
std::string m_toolName
 
TOOL_MANAGERm_toolMgr
 

Private Member Functions

void moveItem (EDA_ITEM *aItem, const VECTOR2I &aDelta)
 Find additional items for a drag operation. More...
 
void getConnectedDragItems (SCH_ITEM *aOriginalItem, const wxPoint &aPoint, EDA_ITEMS &aList)
 Set up handlers for various events. More...
 
void setTransitions () override
 This method is meant to be overridden in order to specify handlers for events. More...
 

Private Attributes

bool m_moveInProgress
 < Flag determining if anything is being dragged right now More...
 
bool m_isDrag
 Items (such as wires) which were added to the selection for a drag. More...
 
std::vector< KIIDm_dragAdditions
 Used for chaining commands. More...
 
VECTOR2I m_moveOffset
 Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point). More...
 
VECTOR2I m_cursor
 
boost::optional< VECTOR2Im_anchorPos
 
std::map< SCH_TEXT *, SPECIAL_CASE_LABEL_INFOm_specialCaseLabels
 

Detailed Description

Definition at line 50 of file sch_move_tool.h.

Member Enumeration Documentation

◆ RESET_REASON

enum TOOL_BASE::RESET_REASON
inherited

Determine the reason of reset for a tool.

Enumerator
RUN 

Tool is invoked after being inactive.

MODEL_RELOAD 

Model changes (required full reload)

GAL_SWITCH 

Rendering engine changes.

Definition at line 77 of file tool_base.h.

78  {
79  RUN,
80  MODEL_RELOAD,
81  GAL_SWITCH
82  };
Model changes (required full reload)
Definition: tool_base.h:80
Tool is invoked after being inactive.
Definition: tool_base.h:79
Rendering engine changes.
Definition: tool_base.h:81

Constructor & Destructor Documentation

◆ SCH_MOVE_TOOL()

SCH_MOVE_TOOL::SCH_MOVE_TOOL ( )

Definition at line 48 of file sch_move_tool.cpp.

48  :
49  EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveMove" ),
50  m_moveInProgress( false ),
51  m_isDrag( false ),
52  m_moveOffset( 0, 0 )
53 {
54 }
VECTOR2I m_moveOffset
Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point).
Definition: sch_move_tool.h:92
bool m_moveInProgress
< Flag determining if anything is being dragged right now
Definition: sch_move_tool.h:85
bool m_isDrag
Items (such as wires) which were added to the selection for a drag.
Definition: sch_move_tool.h:86

◆ ~SCH_MOVE_TOOL()

SCH_MOVE_TOOL::~SCH_MOVE_TOOL ( )
inlineoverride

Definition at line 54 of file sch_move_tool.h.

54 { }

Member Function Documentation

◆ Activate()

void TOOL_INTERACTIVE::Activate ( )
inherited

Run the tool.

After activation, the tool starts receiving events until it is finished.

Definition at line 51 of file tool_interactive.cpp.

52 {
54 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214
TOOL_ID m_toolId
Name of the tool.
Definition: tool_base.h:209
bool InvokeTool(TOOL_ID aToolId)
Call a tool by sending a tool activation event to tool of given ID.

References TOOL_MANAGER::InvokeTool(), TOOL_BASE::m_toolId, and TOOL_BASE::m_toolMgr.

Referenced by AUTOPLACE_TOOL::autoplace(), EDIT_TOOL::copyToClipboard(), SYMBOL_EDITOR_EDIT_TOOL::DeleteItemCursor(), PL_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), PCB_CONTROL::DeleteItemCursor(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::DrawArc(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::DrawLine(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::DrawRectangle(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), BOARD_EDITOR_CONTROL::DrillOrigin(), PAD_TOOL::EnumeratePads(), PCB_CONTROL::GridSetOrigin(), SCH_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), DRAWING_TOOL::InteractivePlaceWithPreview(), BOARD_INSPECTION_TOOL::LocalRatsnestTool(), PCB_PICKER_TOOL::Main(), PL_EDIT_TOOL::Main(), EE_POINT_EDITOR::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PL_POINT_EDITOR::Main(), Main(), PICKER_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), LIB_TREE::onContextMenu(), PCB_POINT_EDITOR::OnSelectionChange(), GROUP_TOOL::PickNewMember(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), BOARD_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), EDIT_TOOL::Remove(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), DRAWING_TOOL::SetAnchor(), DRC_TOOL::ShowDRCDialog(), SCH_DRAWING_TOOLS::SingleClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), and SCH_LINE_WIRE_BUS_TOOL::UnfoldBus().

◆ AlignElements()

int SCH_MOVE_TOOL::AlignElements ( const TOOL_EVENT aEvent)

Align selected elements to the grid.

Parameters
aEventcurrent event that activated the tool
Returns
0

Definition at line 819 of file sch_move_tool.cpp.

820 {
823  bool append_undo = false;
824 
825  auto doMoveItem =
826  [&]( EDA_ITEM* item, const VECTOR2I& delta )
827  {
828  saveCopyInUndoList( item, UNDO_REDO::CHANGED, append_undo );
829  append_undo = true;
830 
831  moveItem( item, delta );
832  item->ClearFlags( IS_MOVING );
833  updateItem( item, true );
834  };
835 
836  for( SCH_ITEM* it : m_frame->GetScreen()->Items() )
837  {
838  if( !it->IsSelected() )
839  it->ClearFlags( STARTPOINT | ENDPOINT );
840 
841  if( !selection.IsHover() && it->IsSelected() )
842  it->SetFlags( STARTPOINT | ENDPOINT );
843 
844  it->SetStoredPos( it->GetPosition() );
845 
846  if( it->Type() == SCH_SHEET_T )
847  {
848  for( SCH_SHEET_PIN* pin : static_cast<SCH_SHEET*>( it )->GetPins() )
849  pin->SetStoredPos( pin->GetPosition() );
850  }
851  }
852 
853  for( EDA_ITEM* item : selection )
854  {
855  if( item->Type() == SCH_LINE_T )
856  {
857  SCH_LINE* line = static_cast<SCH_LINE*>( item );
858  std::vector<int> flags{ STARTPOINT, ENDPOINT };
859  std::vector<wxPoint> pts{ line->GetStartPoint(), line->GetEndPoint() };
860 
861  for( int ii = 0; ii < 2; ++ii )
862  {
863  EDA_ITEMS drag_items{ item };
864  line->ClearFlags();
865  line->SetFlags( SELECTED );
866  line->SetFlags( flags[ii] );
867  getConnectedDragItems( line, pts[ii], drag_items );
868  std::set<EDA_ITEM*> unique_items( drag_items.begin(), drag_items.end() );
869 
870  VECTOR2I gridpt = grid.AlignGrid( pts[ii] ) - pts[ii];
871 
872  if( gridpt != VECTOR2I( 0, 0 ) )
873  {
874  for( EDA_ITEM* dragItem : unique_items )
875  {
876  if( dragItem->GetParent() && dragItem->GetParent()->IsSelected() )
877  continue;
878 
879  doMoveItem( dragItem, gridpt );
880  }
881  }
882  }
883  }
884  else if( item->Type() == SCH_FIELD_T )
885  {
886  VECTOR2I gridpt = grid.AlignGrid( item->GetPosition() ) - item->GetPosition();
887 
888  if( gridpt != VECTOR2I( 0, 0 ) )
889  doMoveItem( item, gridpt );
890  }
891  else if( item->Type() == SCH_SHEET_T )
892  {
893  SCH_SHEET* sheet = static_cast<SCH_SHEET*>( item );
894  VECTOR2I topRight = sheet->GetPosition();
895  VECTOR2I bottomRight = topRight + sheet->GetSize();
896  VECTOR2I tl_gridpt = grid.AlignGrid( topRight ) - topRight;
897  VECTOR2I br_gridpt = grid.AlignGrid( bottomRight ) - bottomRight;
898 
899  if( tl_gridpt != VECTOR2I( 0, 0 ) || br_gridpt != VECTOR2I( 0, 0 ) )
900  {
901  doMoveItem( sheet, tl_gridpt );
902 
903  VECTOR2I newSize = (VECTOR2I) sheet->GetSize() - tl_gridpt + br_gridpt;
904  sheet->SetSize( wxSize( newSize.x, newSize.y ) );
905  updateItem( sheet, true );
906 
907  for( SCH_SHEET_PIN* pin : sheet->GetPins() )
908  {
909  VECTOR2I gridpt;
910 
911  if( pin->GetSide() == SHEET_SIDE::TOP || pin->GetSide() == SHEET_SIDE::LEFT )
912  gridpt = tl_gridpt;
913  else
914  gridpt = br_gridpt;
915 
916  if( gridpt != VECTOR2I( 0, 0 ) )
917  {
918  EDA_ITEMS drag_items;
919  getConnectedDragItems( pin, pin->GetConnectionPoints()[0], drag_items );
920 
921  doMoveItem( pin, gridpt );
922 
923  for( EDA_ITEM* dragItem : drag_items )
924  {
925  if( dragItem->GetParent() && dragItem->GetParent()->IsSelected() )
926  continue;
927 
928  doMoveItem( dragItem, gridpt );
929  }
930  }
931  }
932  }
933  }
934  else
935  {
936  std::vector<wxPoint> connections;
937  EDA_ITEMS drag_items{ item };
938  connections = static_cast<SCH_ITEM*>( item )->GetConnectionPoints();
939 
940  for( const wxPoint& point : connections )
941  getConnectedDragItems( static_cast<SCH_ITEM*>( item ), point, drag_items );
942 
943  std::map<VECTOR2I, int> shifts;
944  VECTOR2I most_common( 0, 0 );
945  int max_count = 0;
946 
947  for( const wxPoint& conn : connections )
948  {
949  VECTOR2I gridpt = grid.AlignGrid( conn ) - conn;
950 
951  shifts[gridpt]++;
952 
953  if( shifts[gridpt] > max_count )
954  {
955  most_common = gridpt;
956  max_count = shifts[most_common];
957  }
958  }
959 
960  if( most_common != VECTOR2I( 0, 0 ) )
961  {
962  for( EDA_ITEM* dragItem : drag_items )
963  {
964  if( dragItem->GetParent() && dragItem->GetParent()->IsSelected() )
965  continue;
966 
967  doMoveItem( dragItem, most_common );
968  }
969  }
970  }
971  }
972 
975  m_toolMgr->RunAction( EE_ACTIONS::addNeededJunctions, true, &selection );
976 
979 
980  m_frame->OnModify();
981  return 0;
982 }
bool IsHover() const
Definition: selection.h:74
#define STARTPOINT
When a line is selected, these flags indicate which.
void RecalculateConnections(SCH_CLEANUP_FLAGS aCleanupFlags)
Generate the connection data for the entire schematic hierarchy.
wxPoint GetStartPoint() const
Definition: sch_line.h:90
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:152
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:143
#define ENDPOINT
ends. (Used to support dragging.)
virtual wxPoint GetPosition() const
Definition: eda_item.h:251
static const KICAD_T MovableItems[]
Definition: ee_collectors.h:44
VECTOR2< int > VECTOR2I
Definition: vector2d.h:622
EE_SELECTION & RequestSelection(const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Return either an existing selection (filtered), or the selection at the current cursor if the existin...
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
static TOOL_ACTION trimOverlappingWires
Definition: ee_actions.h:76
#define IS_MOVING
Item being moved.
void TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
void saveCopyInUndoList(EDA_ITEM *aItem, UNDO_REDO aType, bool aAppend=false)
Definition: ee_tool_base.h:134
void getConnectedDragItems(SCH_ITEM *aOriginalItem, const wxPoint &aPoint, EDA_ITEMS &aList)
Set up handlers for various events.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:153
EE_SELECTION_TOOL * m_selectionTool
Definition: ee_tool_base.h:179
#define SELECTED
static const TOOL_EVENT SelectedItemsMoved
Used to inform tools that the selection should temporarily be non-editable.
Definition: actions.h:208
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet_pin.h:65
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
Definition: eda_item.h:506
static TOOL_ACTION addNeededJunctions
Definition: ee_actions.h:75
wxPoint GetPosition() const override
Definition: sch_sheet.h:379
void updateItem(EDA_ITEM *aItem, bool aUpdateRTree) const
Similar to getView()->Update(), but handles items that are redrawn by their parents and updating the ...
Definition: ee_tool_base.h:103
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:54
void SetSize(const wxSize &aSize)
Definition: sch_sheet.h:105
std::vector< SCH_SHEET_PIN * > & GetPins()
Definition: sch_sheet.h:183
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
wxSize GetSize() const
Definition: sch_sheet.h:104
void moveItem(EDA_ITEM *aItem, const VECTOR2I &aDelta)
Find additional items for a drag operation.
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:110
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:99
constexpr int delta
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...
void PostEvent(const TOOL_EVENT &aEvent)
Put an event to the event queue to be processed at the end of event processing cycle.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:182
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:112
wxPoint GetEndPoint() const
Definition: sch_line.h:93

References EE_ACTIONS::addNeededJunctions, CHANGED, EDA_ITEM::ClearFlags(), delta, ENDPOINT, getConnectedDragItems(), SCH_LINE::GetEndPoint(), SCH_SHEET::GetPins(), EDA_ITEM::GetPosition(), SCH_SHEET::GetPosition(), SCH_EDIT_FRAME::GetScreen(), SCH_SHEET::GetSize(), SCH_LINE::GetStartPoint(), grid, IS_MOVING, SELECTION::IsHover(), SCH_SCREEN::Items(), LEFT, LOCAL_CLEANUP, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_selectionTool, TOOL_BASE::m_toolMgr, EE_COLLECTOR::MovableItems, moveItem(), SCH_EDIT_FRAME::OnModify(), pin, TOOL_MANAGER::PostEvent(), SCH_EDIT_FRAME::RecalculateConnections(), EE_SELECTION_TOOL::RequestSelection(), TOOL_MANAGER::RunAction(), EE_TOOL_BASE< SCH_EDIT_FRAME >::saveCopyInUndoList(), SCH_FIELD_T, SCH_LINE_T, SCH_SHEET_T, SELECTED, EVENTS::SelectedItemsMoved, EDA_ITEM::SetFlags(), SCH_SHEET::SetSize(), STARTPOINT, SCH_EDIT_FRAME::TestDanglingEnds(), TOP, EE_ACTIONS::trimOverlappingWires, EDA_ITEM::Type(), EE_TOOL_BASE< SCH_EDIT_FRAME >::updateItem(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by setTransitions().

◆ attachManager()

void TOOL_BASE::attachManager ( TOOL_MANAGER aManager)
protectedinherited

Set the TOOL_MANAGER the tool will belong to.

Called by TOOL_MANAGER::RegisterTool()

Definition at line 60 of file tool_base.cpp.

61 {
62  m_toolMgr = aManager;
63 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214

References TOOL_BASE::m_toolMgr.

Referenced by TOOL_MANAGER::RegisterTool().

◆ getConnectedDragItems()

void SCH_MOVE_TOOL::getConnectedDragItems ( SCH_ITEM aOriginalItem,
const wxPoint &  aPoint,
EDA_ITEMS aList 
)
private

Set up handlers for various events.

Definition at line 541 of file sch_move_tool.cpp.

543 {
544  EE_RTREE& items = m_frame->GetScreen()->Items();
545  EE_RTREE::EE_TYPE itemsOverlapping = items.Overlapping( aOriginalItem->GetBoundingBox() );
546  bool ptHasUnselectedJunction = false;
547 
548  for( SCH_ITEM* item : itemsOverlapping )
549  {
550  if( item->Type() == SCH_JUNCTION_T && item->IsConnected( aPoint ) && !item->IsSelected() )
551  {
552  ptHasUnselectedJunction = true;
553  break;
554  }
555  }
556 
557  for( SCH_ITEM* test : itemsOverlapping )
558  {
559  if( test == aOriginalItem || test->IsSelected() || !test->CanConnect( aOriginalItem ) )
560  continue;
561 
562  KICAD_T testType = test->Type();
563 
564  switch( testType )
565  {
566  case SCH_LINE_T:
567  {
568  // Select the connected end of wires/bus connections that don't have an unselected
569  // junction isolating them from the drag
570  if( ptHasUnselectedJunction )
571  break;
572 
573  SCH_LINE* line = static_cast<SCH_LINE*>( test );
574 
575  if( line->GetStartPoint() == aPoint )
576  {
577  if( !line->HasFlag(TEMP_SELECTED ) )
578  aList.push_back( line );
579 
581  }
582  else if( line->GetEndPoint() == aPoint )
583  {
584  if( !line->HasFlag(TEMP_SELECTED ) )
585  aList.push_back( line );
586 
587  line->SetFlags(ENDPOINT | TEMP_SELECTED );
588  }
589  else
590  {
591  break;
592  }
593 
594  // Since only one end is going to move, the movement vector of any labels attached
595  // to it is scaled by the proportion of the line length the label is from the moving
596  // end.
597  for( SCH_ITEM* item : itemsOverlapping )
598  {
599  if( item->Type() == SCH_LABEL_T )
600  {
601  SCH_TEXT* label = static_cast<SCH_TEXT*>( item );
602 
603  if( label->IsSelected() )
604  continue; // These will be moved on their own because they're selected
605 
606  if( label->HasFlag( TEMP_SELECTED ) )
607  continue;
608 
609  if( label->CanConnect( line ) && line->HitTest( label->GetPosition(), 1 ) )
610  {
611  label->SetFlags( TEMP_SELECTED );
612  aList.push_back( label );
613 
615  info.attachedLine = line;
616  info.originalLabelPos = label->GetPosition();
617  m_specialCaseLabels[label] = info;
618  }
619  }
620  }
621 
622  break;
623  }
624 
625  case SCH_SHEET_T:
626  case SCH_SYMBOL_T:
627  case SCH_JUNCTION_T:
628  if( test->IsConnected( aPoint ) )
629  {
630  // Add a new wire between the symbol or junction and the selected item so
631  // the selected item can be dragged.
632  SCH_LINE* newWire = nullptr;
633 
634  if( test->GetLayer() == LAYER_BUS_JUNCTION ||
635  aOriginalItem->GetLayer() == LAYER_BUS )
636  {
637  newWire = new SCH_LINE( aPoint, LAYER_BUS );
638  }
639  else
640  newWire = new SCH_LINE( aPoint, LAYER_WIRE );
641 
642  newWire->SetFlags( IS_NEW );
643  m_frame->AddToScreen( newWire, m_frame->GetScreen() );
644 
645  newWire->SetFlags( TEMP_SELECTED | STARTPOINT );
646  aList.push_back( newWire );
647  }
648  break;
649 
650  case SCH_NO_CONNECT_T:
651  // Select no-connects that are connected to items being moved.
652  if( !test->HasFlag( TEMP_SELECTED ) && test->IsConnected( aPoint ) )
653  {
654  aList.push_back( test );
655  test->SetFlags( TEMP_SELECTED );
656  }
657 
658  break;
659 
660  case SCH_LABEL_T:
661  case SCH_GLOBAL_LABEL_T:
662  case SCH_HIER_LABEL_T:
663  // Performance optimization:
664  if( test->HasFlag( TEMP_SELECTED ) )
665  break;
666 
667  // Select labels that are connected to a wire (or bus) being moved.
668  if( aOriginalItem->Type() == SCH_LINE_T && test->CanConnect( aOriginalItem ) )
669  {
670  SCH_TEXT* label = static_cast<SCH_TEXT*>( test );
671  SCH_LINE* line = static_cast<SCH_LINE*>( aOriginalItem );
672  bool oneEndFixed = !line->HasFlag( STARTPOINT ) || !line->HasFlag( ENDPOINT );
673 
674  if( line->HitTest( label->GetTextPos(), 1 ) )
675  {
676  label->SetFlags( TEMP_SELECTED );
677  aList.push_back( label );
678 
679  if( oneEndFixed )
680  {
682  info.attachedLine = line;
683  info.originalLabelPos = label->GetPosition();
684  m_specialCaseLabels[ label ] = info;
685  }
686  }
687  }
688 
689  break;
690 
692  case SCH_BUS_BUS_ENTRY_T:
693  // Performance optimization:
694  if( test->HasFlag( TEMP_SELECTED ) )
695  break;
696 
697  // Select bus entries that are connected to a bus being moved.
698  if( aOriginalItem->Type() == SCH_LINE_T && test->CanConnect( aOriginalItem ) )
699  {
700  SCH_LINE* line = static_cast<SCH_LINE*>( aOriginalItem );
701  bool oneEndFixed = !line->HasFlag( STARTPOINT ) || !line->HasFlag( ENDPOINT );
702 
703  if( oneEndFixed )
704  {
705  // This is only going to end in tears, so don't go there
706  continue;
707  }
708 
709  for( wxPoint& point : test->GetConnectionPoints() )
710  {
711  if( line->HitTest( point, 1 ) )
712  {
713  test->SetFlags( TEMP_SELECTED );
714  aList.push_back( test );
715 
716  // A bus entry needs its wire & label as well
717  std::vector<wxPoint> ends = test->GetConnectionPoints();
718  wxPoint otherEnd;
719 
720  if( ends[0] == point )
721  otherEnd = ends[1];
722  else
723  otherEnd = ends[0];
724 
725  getConnectedDragItems( test, otherEnd, aList );
726 
727  // No need to test the other end of the bus entry
728  break;
729  }
730  }
731  }
732 
733  break;
734 
735  default:
736  break;
737  }
738  }
739 }
#define STARTPOINT
When a line is selected, these flags indicate which.
wxPoint GetStartPoint() const
Definition: sch_line.h:90
bool IsSelected() const
Definition: eda_item.h:122
#define IS_NEW
New item, just created.
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
Definition: eda_item.h:155
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:152
Implements an R-tree for fast spatial and type indexing of schematic items.
Definition: sch_rtree.h:40
#define ENDPOINT
ends. (Used to support dragging.)
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
bool HitTest(const wxPoint &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
Definition: sch_line.cpp:833
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
virtual bool CanConnect(const SCH_ITEM *aItem) const
Definition: sch_item.h:344
std::map< SCH_TEXT *, SPECIAL_CASE_LABEL_INFO > m_specialCaseLabels
void getConnectedDragItems(SCH_ITEM *aOriginalItem, const wxPoint &aPoint, EDA_ITEMS &aList)
Set up handlers for various events.
wxPoint GetPosition() const override
Definition: sch_text.h:241
EE_TYPE Overlapping(const EDA_RECT &aRect) const
Definition: sch_rtree.h:235
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition: sch_item.h:259
#define TEMP_SELECTED
flag indicating that the structure has already selected
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:110
The EE_TYPE struct provides a type-specific auto-range iterator to the RTree.
Definition: sch_rtree.h:192
const wxPoint & GetTextPos() const
Definition: eda_text.h:268
virtual const EDA_RECT GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
Definition: eda_item.cpp:75
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:182
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:112
wxPoint GetEndPoint() const
Definition: sch_line.h:93

References SCH_BASE_FRAME::AddToScreen(), SCH_ITEM::CanConnect(), ENDPOINT, EDA_ITEM::GetBoundingBox(), SCH_LINE::GetEndPoint(), SCH_ITEM::GetLayer(), SCH_TEXT::GetPosition(), SCH_EDIT_FRAME::GetScreen(), SCH_LINE::GetStartPoint(), EDA_TEXT::GetTextPos(), EDA_ITEM::HasFlag(), SCH_LINE::HitTest(), info, IS_NEW, EDA_ITEM::IsSelected(), SCH_SCREEN::Items(), LAYER_BUS, LAYER_BUS_JUNCTION, LAYER_WIRE, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, m_specialCaseLabels, EE_RTREE::Overlapping(), SCH_BUS_BUS_ENTRY_T, SCH_BUS_WIRE_ENTRY_T, SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, SCH_JUNCTION_T, SCH_LABEL_T, SCH_LINE_T, SCH_NO_CONNECT_T, SCH_SHEET_T, SCH_SYMBOL_T, EDA_ITEM::SetFlags(), STARTPOINT, TEMP_SELECTED, and EDA_ITEM::Type().

Referenced by AlignElements(), and Main().

◆ getEditFrame()

template<typename T >
T* TOOL_BASE::getEditFrame ( ) const
inlineprotectedinherited

Return the application window object, casted to requested user type.

Definition at line 184 of file tool_base.h.

185  {
186 #if !defined( QA_TEST ) // Dynamic casts give the linker a seizure in the test framework
187  wxASSERT( dynamic_cast<T*>( getToolHolderInt() ) );
188 #endif
189  return static_cast<T*>( getToolHolderInt() );
190  }
TOOLS_HOLDER * getToolHolderInt() const
Definition: tool_base.cpp:48

References TOOL_BASE::getToolHolderInt().

Referenced by ZONE_CREATE_HELPER::createNewZone().

◆ GetId()

TOOL_ID TOOL_BASE::GetId ( ) const
inlineinherited

Return the unique identifier of the tool.

The identifier is set by an instance of TOOL_MANAGER.

Returns
Identifier of the tool.

Definition at line 120 of file tool_base.h.

121  {
122  return m_toolId;
123  }
TOOL_ID m_toolId
Name of the tool.
Definition: tool_base.h:209

References TOOL_BASE::m_toolId.

Referenced by TOOL_MANAGER::finishTool(), TOOL_MANAGER::InitTools(), TOOL_MANAGER::isActive(), TOOL_MANAGER::RegisterTool(), ACTION_MANAGER::RunHotKey(), TOOL_MANAGER::runTool(), TOOL_MANAGER::saveViewControls(), and TOOL_MANAGER::ShutdownTool().

◆ GetManager()

TOOL_MANAGER* TOOL_BASE::GetManager ( ) const
inlineinherited

Return the instance of TOOL_MANAGER that takes care of the tool.

Returns
Instance of the TOOL_MANAGER or NULL if there is no associated tool manager.

Definition at line 143 of file tool_base.h.

144  {
145  return m_toolMgr;
146  }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214

References TOOL_BASE::m_toolMgr.

Referenced by BOARD_COMMIT::BOARD_COMMIT(), ZONE_CREATE_HELPER::commitZone(), ZONE_CREATE_HELPER::createNewZone(), PCB_TOOL_BASE::doInteractiveItemPlacement(), ACTION_MENU::getToolManager(), LIB_TREE::onContextMenu(), ZONE_CREATE_HELPER::OnFirstPoint(), ACTION_MENU::OnMenuEvent(), and ZONE_CREATE_HELPER::performZoneCutout().

◆ getModel()

template<typename T >
T* TOOL_BASE::getModel ( ) const
inlineprotectedinherited

Return the model object if it matches the requested type.

Store the type of the tool.

Definition at line 196 of file tool_base.h.

References TOOL_BASE::getModelInt().

Referenced by ZONE_CREATE_HELPER::commitZone(), and ZONE_CREATE_HELPER::createZoneFromExisting().

◆ GetName()

const std::string& TOOL_BASE::GetName ( void  ) const
inlineinherited

Return the name of the tool.

Tool names are expected to obey the format: application.ToolName (eg. pcbnew.InteractiveSelection).

Returns
The name of the tool.

Definition at line 133 of file tool_base.h.

134  {
135  return m_toolName;
136  }
std::string m_toolName
Definition: tool_base.h:213

References TOOL_BASE::m_toolName.

Referenced by TOOL_MANAGER::dispatchInternal(), TOOL_MANAGER::InitTools(), TOOL_MANAGER::invokeTool(), TOOL_MANAGER::RegisterTool(), and TOOL_MANAGER::runTool().

◆ GetToolMenu()

◆ GetType()

TOOL_TYPE TOOL_BASE::GetType ( ) const
inlineinherited

Return the type of the tool.

Returns
The type of the tool.

Definition at line 108 of file tool_base.h.

109  {
110  return m_type;
111  }
TOOL_TYPE m_type
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:206

References TOOL_BASE::m_type.

Referenced by TOOL_MANAGER::finishTool(), TOOL_MANAGER::InvokeTool(), TOOL_MANAGER::ResetTools(), TOOL_MANAGER::runTool(), and TOOL_MANAGER::ShutdownTool().

◆ getView()

KIGFX::VIEW * TOOL_BASE::getView ( ) const
protectedinherited

Returns the instance of #VIEW object used in the application.

It allows tools to draw.

Returns
The instance of VIEW.

Definition at line 36 of file tool_base.cpp.

37 {
38  return m_toolMgr->GetView();
39 }
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:283
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214

References TOOL_MANAGER::GetView(), and TOOL_BASE::m_toolMgr.

Referenced by EE_POINT_EDITOR::addCornerCondition(), ALIGN_DISTRIBUTE_TOOL::AlignLeft(), ALIGN_DISTRIBUTE_TOOL::AlignRight(), COMMON_TOOLS::CenterContents(), SCH_EDIT_TOOL::ChangeTextType(), EE_INSPECTION_TOOL::CheckSymbol(), GERBVIEW_CONTROL::ClearAllLayers(), PL_SELECTION_TOOL::ClearSelection(), EE_SELECTION_TOOL::ClearSelection(), EE_SELECTION_TOOL::CollectHits(), SCH_LINE_WIRE_BUS_TOOL::computeBreakPoint(), COMMON_TOOLS::CursorControl(), PL_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), PCB_CONTROL::DeleteItemCursor(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PL_EDIT_TOOL::DoDelete(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), PL_SELECTION_TOOL::doSelectionMenu(), EE_SELECTION_TOOL::doSelectionMenu(), PCB_SELECTION_TOOL::doSelectionMenu(), COMMON_TOOLS::doZoomFit(), COMMON_TOOLS::doZoomInOut(), COMMON_TOOLS::doZoomToPreset(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), SCH_LINE_WIRE_BUS_TOOL::DrawSegments(), PL_DRAWING_TOOLS::DrawShape(), DRAWING_TOOL::DrawZone(), BOARD_EDITOR_CONTROL::DrillOrigin(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), PAD_TOOL::EnumeratePads(), SCH_EDITOR_CONTROL::FindSymbolAndItem(), EE_SELECTION_TOOL::GetNode(), ROUTER_TOOL::getStartLayer(), PCB_CONTROL::GridResetOrigin(), PCB_CONTROL::GridSetOrigin(), ROUTER_TOOL::handleCommonEvents(), PL_SELECTION_TOOL::highlight(), EE_SELECTION_TOOL::highlight(), PCB_SELECTION_TOOL::highlight(), GERBVIEW_CONTROL::HighlightControl(), PNS::TOOL_BASE::highlightNet(), BOARD_INSPECTION_TOOL::highlightNet(), PCB_SELECTION_TOOL::hitTestDistance(), SCH_EDIT_TOOL::Init(), EDIT_TOOL::Init(), ROUTER_TOOL::InlineDrag(), PCB_PICKER_TOOL::Main(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), Main(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), PL_EDIT_TOOL::moveItem(), moveItem(), COMMON_TOOLS::OnGridChanged(), PCB_POINT_EDITOR::OnSelectionChange(), COMMON_TOOLS::PanControl(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), PL_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), ROUTER_TOOL::performRouting(), PNS::TOOL_BASE::pickSingleItem(), BOARD_EDITOR_CONTROL::PlaceFootprint(), PL_DRAWING_TOOLS::PlaceItem(), BOARD_EDITOR_CONTROL::PlaceTarget(), ROUTER_TOOL::prepareInteractive(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), EDIT_TOOL::Remove(), BOARD_EDITOR_CONTROL::Reset(), PNS::TOOL_BASE::Reset(), PCB_CONTROL::Reset(), GERBVIEW_SELECTION_TOOL::Reset(), DRAWING_TOOL::Reset(), EE_SELECTION_TOOL::Reset(), PCB_SELECTION_TOOL::Reset(), EE_TOOL_BASE< SCH_BASE_FRAME >::Reset(), SCH_EDIT_TOOL::Rotate(), GERBVIEW_SELECTION_TOOL::select(), GERBVIEW_SELECTION_TOOL::selectable(), PCB_SELECTION_TOOL::Selectable(), PCB_SELECTION_TOOL::SelectAll(), EE_SELECTION_TOOL::SelectAll(), PL_SELECTION_TOOL::selectionContains(), EE_SELECTION_TOOL::selectionContains(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), PL_SELECTION_TOOL::SelectPoint(), ZOOM_TOOL::selectRegion(), GERBVIEW_SELECTION_TOOL::selectVisually(), DRAWING_TOOL::SetAnchor(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_EDITOR_CONTROL::ToggleHiddenFields(), SCH_EDITOR_CONTROL::ToggleHiddenPins(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), PL_SELECTION_TOOL::unhighlight(), EE_SELECTION_TOOL::unhighlight(), PCB_SELECTION_TOOL::unhighlight(), GERBVIEW_SELECTION_TOOL::unselect(), GERBVIEW_SELECTION_TOOL::unselectVisually(), EE_POINT_EDITOR::updateEditedPoint(), PL_POINT_EDITOR::updateEditedPoint(), PCB_POINT_EDITOR::updateEditedPoint(), SCH_EDITOR_CONTROL::UpdateFind(), PL_POINT_EDITOR::updateItem(), PCB_POINT_EDITOR::updateItem(), EE_TOOL_BASE< SCH_BASE_FRAME >::updateItem(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), EE_POINT_EDITOR::updatePoints(), PL_POINT_EDITOR::updatePoints(), PCB_POINT_EDITOR::updatePoints(), PCB_SELECTION_TOOL::updateSelection(), PNS::TOOL_BASE::updateStartItem(), PCB_VIEWER_TOOLS::view(), PCB_TOOL_BASE::view(), PCB_SELECTION_TOOL::zoomFitSelection(), EE_SELECTION_TOOL::~EE_SELECTION_TOOL(), GERBVIEW_SELECTION_TOOL::~GERBVIEW_SELECTION_TOOL(), and PCB_SELECTION_TOOL::~PCB_SELECTION_TOOL().

◆ getViewControls()

KIGFX::VIEW_CONTROLS * TOOL_BASE::getViewControls ( ) const
protectedinherited

Return the instance of VIEW_CONTROLS object used in the application.

It allows tools to read & modify user input and its settings (eg. show cursor, enable snapping to grid, etc.).

Returns
The instance of VIEW_CONTROLS.

Definition at line 42 of file tool_base.cpp.

43 {
44  return m_toolMgr->GetViewControls();
45 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214
KIGFX::VIEW_CONTROLS * GetViewControls() const
Definition: tool_manager.h:285

References TOOL_MANAGER::GetViewControls(), and TOOL_BASE::m_toolMgr.

Referenced by EE_POINT_EDITOR::addCorner(), PCB_POINT_EDITOR::addCorner(), EE_POINT_EDITOR::addCornerCondition(), SCH_EDITOR_CONTROL::AssignNetclass(), SCH_EDIT_TOOL::BreakWire(), PCB_TOOL_BASE::controls(), EDIT_TOOL::copyToClipboard(), SCH_DRAWING_TOOLS::createSheetPin(), COMMON_TOOLS::CursorControl(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), EDIT_TOOL::doMoveSelection(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), COMMON_TOOLS::doZoomToPreset(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawLine(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::DrawRectangle(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), PAD_TOOL::EnumeratePads(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), SCH_DRAWING_TOOLS::GetCanvasFreeAreaPixels(), BOARD_INSPECTION_TOOL::HighlightNet(), SCH_EDITOR_CONTROL::HighlightNet(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), SCH_EDIT_TOOL::Init(), EDIT_TOOL::Init(), PCB_PICKER_TOOL::Main(), EE_POINT_EDITOR::Main(), PL_EDIT_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PL_POINT_EDITOR::Main(), Main(), EE_SELECTION_TOOL::Main(), PICKER_TOOL::Main(), ROUTER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), COMMON_TOOLS::OnGridChanged(), PCB_POINT_EDITOR::OnSelectionChange(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), ROUTER_TOOL::performDragging(), LENGTH_TUNER_TOOL::performTuning(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), PCB_CONTROL::placeBoardItems(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), BOARD_EDITOR_CONTROL::PlaceTarget(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), EDIT_TOOL::Remove(), SCH_EDIT_TOOL::RepeatDrawItem(), PL_SELECTION_TOOL::RequestSelection(), EE_SELECTION_TOOL::RequestSelection(), PCB_POINT_EDITOR::Reset(), DRAWING_TOOL::Reset(), COMMON_TOOLS::ResetLocalCoords(), GERBVIEW_SELECTION_TOOL::selectCursor(), PCB_SELECTION_TOOL::selectCursor(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::SelectNode(), ZOOM_TOOL::selectRegion(), ALIGN_DISTRIBUTE_TOOL::selectTarget(), PCB_PICKER_TOOL::setControls(), PICKER_TOOL::setControls(), PL_POINT_EDITOR::setEditedPoint(), EE_POINT_EDITOR::setEditedPoint(), PCB_POINT_EDITOR::setEditedPoint(), SCH_DRAWING_TOOLS::SingleClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), EE_POINT_EDITOR::updateEditedPoint(), PL_POINT_EDITOR::updateEditedPoint(), PCB_POINT_EDITOR::updateEditedPoint(), PCB_POINT_EDITOR::updateItem(), PL_EDIT_TOOL::updateModificationPoint(), and COMMON_TOOLS::ZoomCenter().

◆ Go()

template<class T >
void TOOL_INTERACTIVE::Go ( int(T::*)(const TOOL_EVENT &)  aStateFunc,
const TOOL_EVENT_LIST aConditions = TOOL_EVENTTC_ANYTA_ANY ) 
)
inherited

Define which state (aStateFunc) to go when a certain event arrives (aConditions).

No conditions means any event.

Definition at line 147 of file tool_interactive.h.

149 {
150  TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
151 
152  goInternal( sptr, aConditions );
153 }
std::function< int(const TOOL_EVENT &)> TOOL_STATE_FUNC
Definition: tool_base.h:58
void goInternal(TOOL_STATE_FUNC &aState, const TOOL_EVENT_LIST &aConditions)

References TOOL_INTERACTIVE::goInternal().

Referenced by AUTOPLACE_TOOL::setTransitions(), ZOOM_TOOL::setTransitions(), LENGTH_TUNER_TOOL::setTransitions(), BOARD_REANNOTATE_TOOL::setTransitions(), GERBVIEW_INSPECTION_TOOL::setTransitions(), PCB_PICKER_TOOL::setTransitions(), SCH_NAVIGATE_TOOL::setTransitions(), SYMBOL_EDITOR_PIN_TOOL::setTransitions(), SYMBOL_EDITOR_MOVE_TOOL::setTransitions(), PL_DRAWING_TOOLS::setTransitions(), EE_POINT_EDITOR::setTransitions(), PL_POINT_EDITOR::setTransitions(), ROUTER_TOOL::setTransitions(), SCRIPTING_TOOL::setTransitions(), COMMON_CONTROL::setTransitions(), KICAD_MANAGER_CONTROL::setTransitions(), CONVERT_TOOL::setTransitions(), SYMBOL_EDITOR_DRAWING_TOOLS::setTransitions(), ZONE_FILLER_TOOL::setTransitions(), PCB_VIEWER_TOOLS::setTransitions(), MICROWAVE_TOOL::setTransitions(), EE_INSPECTION_TOOL::setTransitions(), PCB_POINT_EDITOR::setTransitions(), GERBVIEW_CONTROL::setTransitions(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::setTransitions(), PAD_TOOL::setTransitions(), GLOBAL_EDIT_TOOL::setTransitions(), GROUP_TOOL::setTransitions(), PL_EDITOR_CONTROL::setTransitions(), SYMBOL_EDITOR_EDIT_TOOL::setTransitions(), SYMBOL_EDITOR_CONTROL::setTransitions(), PL_EDIT_TOOL::setTransitions(), POSITION_RELATIVE_TOOL::setTransitions(), GERBVIEW_SELECTION_TOOL::setTransitions(), SCH_DRAWING_TOOLS::setTransitions(), setTransitions(), SCH_EDIT_TOOL::setTransitions(), FOOTPRINT_EDITOR_CONTROL::setTransitions(), ALIGN_DISTRIBUTE_TOOL::setTransitions(), COMMON_TOOLS::setTransitions(), DRC_TOOL::setTransitions(), EDA_3D_CONTROLLER::setTransitions(), PCB_CONTROL::setTransitions(), CVPCB_ASSOCIATION_TOOL::setTransitions(), SCH_LINE_WIRE_BUS_TOOL::setTransitions(), CVPCB_CONTROL::setTransitions(), BOARD_INSPECTION_TOOL::setTransitions(), BOARD_EDITOR_CONTROL::setTransitions(), PICKER_TOOL::setTransitions(), EDIT_TOOL::setTransitions(), PCB_SELECTION_TOOL::setTransitions(), PL_SELECTION_TOOL::setTransitions(), DRAWING_TOOL::setTransitions(), SCH_EDITOR_CONTROL::setTransitions(), and EE_SELECTION_TOOL::setTransitions().

◆ Init()

bool SCH_MOVE_TOOL::Init ( )
overridevirtual

Init() is called once upon a registration of the tool.

Returns
True if the initialization went fine, false - otherwise.

Reimplemented from TOOL_BASE.

Definition at line 57 of file sch_move_tool.cpp.

58 {
60 
61  auto moveCondition =
62  []( const SELECTION& aSel )
63  {
64  if( aSel.Empty() || SELECTION_CONDITIONS::OnlyType( SCH_MARKER_T )( aSel ) )
65  return false;
66 
68  return false;
69 
70  return true;
71  };
72 
73  // Add move actions to the selection tool menu
74  //
76 
77  selToolMenu.AddItem( EE_ACTIONS::move, moveCondition, 150 );
78  selToolMenu.AddItem( EE_ACTIONS::drag, moveCondition, 150 );
79  selToolMenu.AddItem( EE_ACTIONS::alignToGrid, moveCondition, 150 );
80 
81  return true;
82 }
CONDITIONAL_MENU & GetMenu()
Definition: tool_menu.cpp:46
TOOL_MENU & GetToolMenu()
static TOOL_ACTION alignToGrid
Definition: ee_actions.h:111
bool Init() override
Init() is called once upon a registration of the tool.
Definition: ee_tool_base.h:66
EE_SELECTION_TOOL * m_selectionTool
Definition: ee_tool_base.h:179
static bool IsDrawingLineWireOrBus(const SELECTION &aSelection)
static TOOL_ACTION drag
Definition: ee_actions.h:115
static SELECTION_CONDITION OnlyType(KICAD_T aType)
Create a functor that tests if the selected items are only of given type.
static TOOL_ACTION move
Definition: ee_actions.h:114
void AddItem(const TOOL_ACTION &aAction, const SELECTION_CONDITION &aCondition, int aOrder=ANY_ORDER)
Add a menu entry to run a TOOL_ACTION on selected items.

References CONDITIONAL_MENU::AddItem(), EE_ACTIONS::alignToGrid, EE_ACTIONS::drag, TOOL_MENU::GetMenu(), TOOL_INTERACTIVE::GetToolMenu(), EE_TOOL_BASE< T >::Init(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingLineWireOrBus(), EE_TOOL_BASE< SCH_EDIT_FRAME >::m_selectionTool, EE_ACTIONS::move, SELECTION_CONDITIONS::OnlyType(), and SCH_MARKER_T.

◆ IsToolActive()

bool TOOL_BASE::IsToolActive ( ) const
inherited

Definition at line 31 of file tool_base.cpp.

32 {
33  return m_toolMgr->IsToolActive( m_toolId );
34 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214
TOOL_ID m_toolId
Name of the tool.
Definition: tool_base.h:209
bool IsToolActive(TOOL_ID aId) const
Return true if a tool with given id is active (executing)

References TOOL_MANAGER::IsToolActive(), TOOL_BASE::m_toolId, and TOOL_BASE::m_toolMgr.

Referenced by EDIT_TOOL::Drag(), ROUTER_TOOL::handleLayerSwitch(), EDIT_TOOL::isRouterActive(), PCB_SELECTION_TOOL::Main(), BOARD_EDITOR_CONTROL::TrackWidthDec(), and BOARD_EDITOR_CONTROL::TrackWidthInc().

◆ Main()

int SCH_MOVE_TOOL::Main ( const TOOL_EVENT aEvent)

Run an interactive move of the selected items, or the item under the cursor.

Definition at line 85 of file sch_move_tool.cpp.

86 {
87  EESCHEMA_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>();
90  bool wasDragging = m_moveInProgress && m_isDrag;
92 
93  m_anchorPos.reset();
94 
95  if( aEvent.IsAction( &EE_ACTIONS::move ) )
96  m_isDrag = false;
97  else if( aEvent.IsAction( &EE_ACTIONS::drag ) )
98  m_isDrag = true;
99  else if( aEvent.IsAction( &EE_ACTIONS::moveActivate ) )
100  m_isDrag = !cfg->m_Input.drag_is_move;
101  else
102  return 0;
103 
104  if( m_moveInProgress )
105  {
106  if( m_isDrag != wasDragging )
107  {
109 
110  if( sel && !sel->IsNew() )
111  {
112  // Reset the selected items so we can start again with the current m_isDrag
113  // state.
117  m_moveInProgress = false;
118  controls->SetAutoPan( false );
119 
120  // And give it a kick so it doesn't have to wait for the first mouse movement
121  // to refresh.
123  }
124  }
125 
126  return 0;
127  }
128 
129  // Be sure that there is at least one item that we can move. If there's no selection try
130  // looking for the stuff under mouse cursor (i.e. Kicad old-style hover selection).
132  bool unselect = selection.IsHover();
133 
134  // Keep an original copy of the starting points for cleanup after the move
135  std::vector<DANGLING_END_ITEM> internalPoints;
136 
137  Activate();
138  // Must be done after Activate() so that it gets set into the correct context
139  controls->ShowCursor( true );
140 
141  std::string tool = aEvent.GetCommandStr().get();
142  m_frame->PushTool( tool );
143 
144  if( selection.Empty() )
145  {
146  // Note that it's important to go through push/pop even when the selection is empty.
147  // This keeps other tools from having to special-case an empty move.
148  m_frame->PopTool( tool );
149  return 0;
150  }
151 
152  bool restore_state = false;
153  bool chain_commands = false;
154  TOOL_EVENT* evt = const_cast<TOOL_EVENT*>( &aEvent );
155  VECTOR2I prevPos;
156  int snapLayer = UNDEFINED_LAYER;
157 
158  m_cursor = controls->GetCursorPosition();
159 
160  // Main loop: keep receiving events
161  do
162  {
164  grid.SetSnap( !evt->Modifier( MD_SHIFT ) );
165  grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
166 
169  || evt->IsAction( &EE_ACTIONS::move )
170  || evt->IsAction( &EE_ACTIONS::drag )
171  || evt->IsMotion()
172  || evt->IsDrag( BUT_LEFT )
173  || evt->IsAction( &ACTIONS::refreshPreview ) )
174  {
175  if( !m_moveInProgress ) // Prepare to start moving/dragging
176  {
177  SCH_ITEM* sch_item = (SCH_ITEM*) selection.Front();
178  bool appendUndo =
179  params ? params->appendToLastUndo : ( sch_item && sch_item->IsNew() );
180  bool placingNewItems =
181  params ? params->placingNewItems : ( sch_item && sch_item->IsNew() );
182 
183 
184  //------------------------------------------------------------------------
185  // Setup a drag or a move
186  //
187  m_dragAdditions.clear();
188  m_specialCaseLabels.clear();
189  internalPoints.clear();
190 
191  for( SCH_ITEM* it : m_frame->GetScreen()->Items() )
192  {
193  it->ClearFlags( TEMP_SELECTED );
194 
195  if( !it->IsSelected() )
196  it->ClearFlags( STARTPOINT | ENDPOINT );
197 
198  if( !selection.IsHover() && it->IsSelected() )
199  it->SetFlags( STARTPOINT | ENDPOINT );
200  }
201 
202  if( m_isDrag )
203  {
204  EDA_ITEMS connectedDragItems;
205 
206  // Add connections to the selection for a drag.
207  //
208  for( EDA_ITEM* edaItem : selection )
209  {
210  SCH_ITEM* item = static_cast<SCH_ITEM*>( edaItem );
211  std::vector<wxPoint> connections;
212 
213  if( item->Type() == SCH_LINE_T )
214  static_cast<SCH_LINE*>( item )->GetSelectedPoints( connections );
215  else
216  connections = item->GetConnectionPoints();
217 
218  for( wxPoint point : connections )
219  getConnectedDragItems( item, point, connectedDragItems );
220  }
221 
222  for( EDA_ITEM* item : connectedDragItems )
223  {
224  m_dragAdditions.push_back( item->m_Uuid );
226  }
227  }
228  else
229  {
230  // Mark the edges of the block with dangling flags for a move.
231  for( EDA_ITEM* item : selection )
232  static_cast<SCH_ITEM*>( item )->GetEndPoints( internalPoints );
233 
234  for( EDA_ITEM* item : selection )
235  static_cast<SCH_ITEM*>( item )->UpdateDanglingState( internalPoints );
236  }
237  // Generic setup
238  //
239  for( EDA_ITEM* item : selection )
240  {
241  if( static_cast<SCH_ITEM*>( item )->IsConnectable() )
242  {
243  if( snapLayer == LAYER_GRAPHICS )
244  snapLayer = LAYER_ANY;
245  else
246  snapLayer = LAYER_CONNECTABLE;
247  }
248  else
249  {
250  if( snapLayer == LAYER_CONNECTABLE )
251  snapLayer = LAYER_ANY;
252  else
253  snapLayer = LAYER_GRAPHICS;
254  }
255 
256  if( item->IsNew() )
257  {
258  if( item->HasFlag( TEMP_SELECTED ) && m_isDrag )
259  {
260  // Item was added in getConnectedDragItems
261  saveCopyInUndoList( (SCH_ITEM*) item, UNDO_REDO::NEWITEM, appendUndo );
262  appendUndo = true;
263  }
264  else
265  {
266  // Item was added in a previous command (and saved to undo by
267  // that command)
268  }
269  }
270  else if( item->GetParent() && item->GetParent()->IsSelected() )
271  {
272  // Item will be (or has been) saved to undo by parent
273  }
274  else
275  {
276  saveCopyInUndoList( (SCH_ITEM*) item, UNDO_REDO::CHANGED, appendUndo );
277  appendUndo = true;
278  }
279 
280  SCH_ITEM* schItem = (SCH_ITEM*) item;
281  schItem->SetStoredPos( schItem->GetPosition() );
282  }
283 
284  // Set up the starting position and move/drag offset
285  //
286  m_cursor = controls->GetCursorPosition();
287 
288  if( evt->IsAction( &EE_ACTIONS::restartMove ) )
289  {
290  wxASSERT_MSG( m_anchorPos, wxT( "Should be already set from previous cmd" ) );
291  }
292  else if( placingNewItems )
293  {
294  m_anchorPos = selection.GetReferencePoint();
295  }
296 
297  if( m_anchorPos )
298  {
299  VECTOR2I delta = m_cursor - (*m_anchorPos);
300  bool isPasted = false;
301 
302  // Drag items to the current cursor position
303  for( EDA_ITEM* item : selection )
304  {
305  // Don't double move pins, fields, etc.
306  if( item->GetParent() && item->GetParent()->IsSelected() )
307  continue;
308 
309  moveItem( item, delta );
310  updateItem( item, false );
311 
312  isPasted |= ( item->GetFlags() & IS_PASTED ) != 0;
313  item->ClearFlags( IS_PASTED );
314  }
315 
316  // The first time pasted items are moved we need to store
317  // the position of the cursor so that rotate while moving
318  // works as expected (instead of around the original anchor
319  // point
320  if( isPasted )
321  selection.SetReferencePoint( m_cursor );
322 
324  }
325  // For some items, moving the cursor to anchor is not good (for instance large
326  // hierarchical sheets or symbols can have the anchor outside the view)
327  else if( selection.Size() == 1 && !sch_item->IsMovableFromAnchorPoint() )
328  {
331  }
332  else
333  {
334  if( m_frame->GetMoveWarpsCursor() )
335  {
336  // User wants to warp the mouse
337  m_cursor = grid.BestDragOrigin( m_cursor, snapLayer, selection );
338  selection.SetReferencePoint( m_cursor );
339  }
340  else
341  {
342  // User does not want to warp the mouse
344  }
345  }
346 
347  controls->SetCursorPosition( m_cursor, false );
349 
350  prevPos = m_cursor;
351  controls->SetAutoPan( true );
352  m_moveInProgress = true;
353  }
354 
355  //------------------------------------------------------------------------
356  // Follow the mouse
357  //
358  m_cursor = grid.BestSnapAnchor( controls->GetCursorPosition( false ),
359  snapLayer, selection );
360 
361  VECTOR2I delta( m_cursor - prevPos );
363 
364  m_moveOffset += delta;
365  prevPos = m_cursor;
366 
367  for( EDA_ITEM* item : selection )
368  {
369  // Don't double move pins, fields, etc.
370  if( item->GetParent() && item->GetParent()->IsSelected() )
371  continue;
372 
373  moveItem( item, delta );
374  updateItem( item, false );
375  }
376 
377  if( selection.HasReferencePoint() )
378  selection.SetReferencePoint( selection.GetReferencePoint() + delta );
379 
381  }
382  //------------------------------------------------------------------------
383  // Handle cancel
384  //
385  else if( evt->IsCancelInteractive() || evt->IsActivate() )
386  {
387  if( evt->IsCancelInteractive() )
388  m_frame->GetInfoBar()->Dismiss();
389 
390  if( m_moveInProgress )
391  {
392  if( evt->IsActivate() )
393  {
394  // Allowing other tools to activate during a move runs the risk of race
395  // conditions in which we try to spool up both event loops at once.
396 
397  if( m_isDrag )
398  m_frame->ShowInfoBarMsg( _( "Press <ESC> to cancel drag." ) );
399  else
400  m_frame->ShowInfoBarMsg( _( "Press <ESC> to cancel move." ) );
401 
402  evt->SetPassEvent( false );
403  continue;
404  }
405 
406  evt->SetPassEvent( false );
407  restore_state = true;
408  }
409 
410  break;
411  }
412  //------------------------------------------------------------------------
413  // Handle TOOL_ACTION special cases
414  //
415  else if( evt->Action() == TA_UNDO_REDO_PRE )
416  {
417  unselect = true;
418  break;
419  }
420  else if( evt->IsAction( &ACTIONS::doDelete ) )
421  {
422  evt->SetPassEvent();
423  // Exit on a delete; there will no longer be anything to drag.
424  break;
425  }
426  else if( evt->IsAction( &ACTIONS::duplicate ) )
427  {
428  if( selection.Front()->IsNew() )
429  {
430  // This doesn't really make sense; we'll just end up dragging a stack of
431  // objects so we ignore the duplicate and just carry on.
432  continue;
433  }
434 
435  // Move original back and exit. The duplicate will run in its own loop.
436  restore_state = true;
437  unselect = false;
438  chain_commands = true;
439  break;
440  }
441  else if( evt->Action() == TA_CHOICE_MENU_CHOICE )
442  {
443  if( evt->GetCommandId().get() >= ID_POPUP_SCH_SELECT_UNIT_CMP
445  {
446  SCH_SYMBOL* symbol = dynamic_cast<SCH_SYMBOL*>( selection.Front() );
447  int unit = evt->GetCommandId().get() - ID_POPUP_SCH_SELECT_UNIT_CMP;
448 
449  if( symbol )
450  {
451  m_frame->SelectUnit( symbol, unit );
453  }
454  }
455  }
456  else if( evt->IsAction( &EE_ACTIONS::highlightNet )
458  {
459  // These don't make any sense during a move. Eat them.
460  }
461  //------------------------------------------------------------------------
462  // Handle context menu
463  //
464  else if( evt->IsClick( BUT_RIGHT ) )
465  {
467  }
468  //------------------------------------------------------------------------
469  // Handle drop
470  //
471  else if( evt->IsMouseUp( BUT_LEFT )
472  || evt->IsClick( BUT_LEFT )
473  || evt->IsDblClick( BUT_LEFT ) )
474  {
475  break; // Finish
476  }
477  else
478  {
479  evt->SetPassEvent();
480  }
481 
482  controls->SetAutoPan( m_moveInProgress );
483 
484  } while( ( evt = Wait() ) ); //Should be assignment not equality test
485 
486  controls->ForceCursorPosition( false );
487  controls->ShowCursor( false );
488  controls->SetAutoPan( false );
489 
490  if( !chain_commands )
491  m_moveOffset = { 0, 0 };
492 
493  m_anchorPos.reset();
494 
495  for( EDA_ITEM* item : selection )
496  item->ClearEditFlags();
497 
498  if( restore_state )
499  {
502  }
503  else
504  {
505  // One last update after exiting loop (for slower stuff, such as updating SCREEN's RTree).
506  for( EDA_ITEM* item : selection )
507  updateItem( item, true );
508 
509  EE_SELECTION selectionCopy( selection );
511 
512  // If we move items away from a junction, we _may_ want to add a junction there
513  // to denote the state.
514  for( const DANGLING_END_ITEM& it : internalPoints )
515  {
516  if( m_frame->GetScreen()->IsExplicitJunctionNeeded( it.GetPosition()) )
517  m_frame->AddJunction( m_frame->GetScreen(), it.GetPosition(), true, false );
518  }
519 
520  m_toolMgr->RunAction( EE_ACTIONS::trimOverlappingWires, true, &selectionCopy );
521  m_toolMgr->RunAction( EE_ACTIONS::addNeededJunctions, true, &selectionCopy );
522 
525 
526  m_frame->OnModify();
527  }
528 
529  if( unselect )
531  else
532  m_selectionTool->RebuildSelection(); // Schematic cleanup might have merged lines, etc.
533 
534  m_dragAdditions.clear();
535  m_moveInProgress = false;
536  m_frame->PopTool( tool );
537  return 0;
538 }
static TOOL_ACTION moveActivate
Definition: ee_actions.h:113
OPT< int > GetCommandId() const
Definition: tool_event.h:455
TOOL_MENU m_menu
The functions below are not yet implemented - their interface may change.
bool IsHover() const
Definition: selection.h:74
#define STARTPOINT
When a line is selected, these flags indicate which.
void SetCurrentCursor(KICURSOR aCursor)
Set the current cursor shape for this panel.
void SetPassEvent(bool aPass=true)
Returns if it this event has a valid position (true for mouse events and context-menu or hotkey-based...
Definition: tool_event.h:236
TOOL_EVENT * Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Suspend execution of the tool until an event specified in aEventList arrives.
virtual std::vector< wxPoint > GetConnectionPoints() const
Add all the connection points for this item to aPoints.
Definition: sch_item.h:364
void RecalculateConnections(SCH_CLEANUP_FLAGS aCleanupFlags)
Generate the connection data for the entire schematic hierarchy.
bool IsSelected() const
Definition: eda_item.h:122
static TOOL_ACTION doDelete
Definition: actions.h:72
VECTOR2I m_cursor
Definition: sch_move_tool.h:96
TOOL_ACTIONS Action() const
These give a tool a method of informing the TOOL_MANAGER that a particular event should be passed on ...
Definition: tool_event.h:230
bool IsClick(int aButtonMask=BUT_ANY) const
Definition: tool_event.cpp:199
VECTOR2I m_moveOffset
Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point).
Definition: sch_move_tool.h:92
static TOOL_ACTION restartMove
Definition: ee_actions.h:199
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214
std::vector< KIID > m_dragAdditions
Used for chaining commands.
Definition: sch_move_tool.h:89
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
Definition: eda_item.h:155
virtual void PushTool(const std::string &actionName)
NB: the definition of "tool" is different at the user level.
bool IsMotion() const
Definition: tool_event.h:300
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:143
#define ENDPOINT
ends. (Used to support dragging.)
void SelectUnit(SCH_SYMBOL *aSymbol, int aUnit)
Definition: picksymbol.cpp:211
bool m_moveInProgress
< Flag determining if anything is being dragged right now
Definition: sch_move_tool.h:85
virtual wxPoint GetPosition() const
Definition: eda_item.h:251
static const KICAD_T MovableItems[]
Definition: ee_collectors.h:44
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:106
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
Definition: actions.h:205
bool IsCancelInteractive() const
Indicate the event should restart/end an ongoing interactive tool's event loop (eg esc key,...
Definition: tool_event.cpp:211
bool IsNew() const
Definition: eda_item.h:118
bool IsAction(const TOOL_ACTION *aAction) const
Test if the event contains an action issued upon activation of the given TOOL_ACTION.
Definition: tool_event.cpp:88
SCH_JUNCTION * AddJunction(SCH_SCREEN *aScreen, const wxPoint &aPos, bool aAppendToUndo, bool aFinal=true)
EE_SELECTION & GetSelection()
Return the set of currently selected items.
EE_SELECTION & RequestSelection(const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Return either an existing selection (filtered), or the selection at the current cursor if the existin...
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void ShowInfoBarMsg(const wxString &aMsg, bool aShowCloseButton=false)
Show the WX_INFOBAR displayed on the top of the canvas with a message and an info icon on the left of...
static TOOL_ACTION trimOverlappingWires
Definition: ee_actions.h:76
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
Definition: infobar.cpp:175
bool IsDrag(int aButtonMask=BUT_ANY) const
Definition: tool_event.h:285
#define IS_PASTED
Modifier on IS_NEW which indicates it came from clipboard.
void TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
virtual bool IsMovableFromAnchorPoint() const
Definition: sch_item.h:220
std::map< SCH_TEXT *, SPECIAL_CASE_LABEL_INFO > m_specialCaseLabels
void saveCopyInUndoList(EDA_ITEM *aItem, UNDO_REDO aType, bool aAppend=false)
Definition: ee_tool_base.h:134
bool IsDblClick(int aButtonMask=BUT_ANY) const
Definition: tool_event.cpp:205
virtual void PopTool(const std::string &actionName)
boost::optional< VECTOR2I > m_anchorPos
Definition: sch_move_tool.h:98
static TOOL_ACTION explicitCrossProbe
Definition: ee_actions.h:200
T Parameter() const
Return a non-standard parameter assigned to the event.
Definition: tool_event.h:432
void getConnectedDragItems(SCH_ITEM *aOriginalItem, const wxPoint &aPoint, EDA_ITEMS &aList)
Set up handlers for various events.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
Generic, UI-independent tool event.
Definition: tool_event.h:152
EDA_ITEM * GetParent() const
Definition: eda_item.h:114
An interface for classes handling user events controlling the view behavior such as zooming,...
#define _(s)
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:153
EE_SELECTION_TOOL * m_selectionTool
Definition: ee_tool_base.h:179
static const TOOL_EVENT SelectedItemsMoved
Used to inform tools that the selection should temporarily be non-editable.
Definition: actions.h:208
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
Definition: eda_item.h:506
bool DisableGridSnapping() const
Definition: tool_event.h:341
static TOOL_ACTION clearSelection
Clears the current selection.
Definition: ee_actions.h:56
static TOOL_ACTION addNeededJunctions
Definition: ee_actions.h:75
bool IsMouseUp(int aButtonMask=BUT_ANY) const
Definition: tool_event.h:295
KIGFX::VIEW * getView() const
Returns the instance of #VIEW object used in the application.
Definition: tool_base.cpp:36
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:98
void updateItem(EDA_ITEM *aItem, bool aUpdateRTree) const
Similar to getView()->Update(), but handles items that are redrawn by their parents and updating the ...
Definition: ee_tool_base.h:103
EDA_ITEM_FLAGS GetFlags() const
Definition: eda_item.h:154
const KIID m_Uuid
Definition: eda_item.h:474
int Modifier(int aMask=MD_MODIFIER_MASK) const
Definition: tool_event.h:336
bool IsExplicitJunctionNeeded(const wxPoint &aPosition) const
Indicates that a junction dot is necessary at the given location, and does not yet exist.
Definition: sch_screen.cpp:423
OPT< std::string > GetCommandStr() const
Definition: tool_event.h:460
bool IsActivate() const
Definition: tool_event.h:315
Schematic symbol object.
Definition: sch_symbol.h:78
int AddItemToSel(const TOOL_EVENT &aEvent)
#define TEMP_SELECTED
flag indicating that the structure has already selected
void moveItem(EDA_ITEM *aItem, const VECTOR2I &aDelta)
Find additional items for a drag operation.
static TOOL_ACTION drag
Definition: ee_actions.h:115
void RollbackSchematicFromUndo()
Perform an undo of the last edit WITHOUT logging a corresponding redo.
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:110
void RebuildSelection()
Rebuild the selection from the EDA_ITEMs' selection flags.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:99
bool GetMoveWarpsCursor() const
Indicate that a move operation should warp the mouse pointer to the origin of the move object.
Definition: tools_holder.h:141
void Activate()
Run the tool.
WX_INFOBAR * GetInfoBar()
constexpr int delta
static TOOL_ACTION move
Definition: ee_actions.h:114
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...
Helper class used to store the state of schematic items that can be connected to other schematic item...
Definition: sch_item.h:79
static TOOL_ACTION highlightNet
Definition: ee_actions.h:220
KIGFX::VIEW_CONTROLS * getViewControls() const
Return the instance of VIEW_CONTROLS object used in the application.
Definition: tool_base.cpp:42
#define QUIET_MODE
void ClearEditFlags()
Definition: eda_item.h:171
int RemoveItemsFromSel(const TOOL_EVENT &aEvent)
void PostEvent(const TOOL_EVENT &aEvent)
Put an event to the event queue to be processed at the end of event processing cycle.
void SetStoredPos(const wxPoint &aPos)
Definition: sch_item.h:223
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:182
void ShowContextMenu(SELECTION &aSelection)
Helper function to set and immediately show a CONDITIONAL_MENU in concert with the given SELECTION.
Definition: tool_menu.cpp:59
static TOOL_ACTION duplicate
Definition: actions.h:71
static TOOL_ACTION refreshPreview
Definition: actions.h:106
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
EDA_ITEM * Front() const
Definition: selection.h:145
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:112
bool m_isDrag
Items (such as wires) which were added to the selection for a drag.
Definition: sch_move_tool.h:86

References _, TOOL_EVENT::Action(), TOOL_INTERACTIVE::Activate(), EE_SELECTION_TOOL::AddItemToSel(), SCH_EDIT_FRAME::AddJunction(), EE_ACTIONS::addNeededJunctions, SCH_MOVE_TOOL_PARAMS::appendToLastUndo, BUT_LEFT, BUT_RIGHT, CHANGED, EE_ACTIONS::clearSelection, delta, TOOL_EVENT::DisableGridSnapping(), WX_INFOBAR::Dismiss(), ACTIONS::doDelete, EE_ACTIONS::drag, EESCHEMA_SETTINGS::INPUT::drag_is_move, ACTIONS::duplicate, SELECTION::Empty(), ENDPOINT, EE_ACTIONS::explicitCrossProbe, SELECTION::Front(), SCH_BASE_FRAME::GetCanvas(), TOOL_EVENT::GetCommandId(), TOOL_EVENT::GetCommandStr(), getConnectedDragItems(), SCH_ITEM::GetConnectionPoints(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), EDA_BASE_FRAME::GetInfoBar(), TOOLS_HOLDER::GetMoveWarpsCursor(), EDA_ITEM::GetPosition(), SCH_EDIT_FRAME::GetScreen(), EE_SELECTION_TOOL::GetSelection(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), grid, EE_ACTIONS::highlightNet, ID_POPUP_SCH_SELECT_UNIT_CMP, ID_POPUP_SCH_SELECT_UNIT_SYM_MAX, IS_PASTED, TOOL_EVENT::IsAction(), TOOL_EVENT::IsActivate(), TOOL_EVENT::IsCancelInteractive(), TOOL_EVENT::IsClick(), TOOL_EVENT::IsDblClick(), TOOL_EVENT::IsDrag(), SCH_SCREEN::IsExplicitJunctionNeeded(), SELECTION::IsHover(), TOOL_EVENT::IsMotion(), TOOL_EVENT::IsMouseUp(), SCH_ITEM::IsMovableFromAnchorPoint(), EDA_ITEM::IsNew(), SCH_SCREEN::Items(), LAYER_ANY, LAYER_CONNECTABLE, LAYER_GRAPHICS, LOCAL_CLEANUP, m_anchorPos, m_cursor, m_dragAdditions, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, EESCHEMA_SETTINGS::m_Input, m_isDrag, TOOL_INTERACTIVE::m_menu, m_moveInProgress, m_moveOffset, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_selectionTool, m_specialCaseLabels, TOOL_BASE::m_toolMgr, MD_SHIFT, TOOL_EVENT::Modifier(), EE_COLLECTOR::MovableItems, EE_ACTIONS::move, EE_ACTIONS::moveActivate, moveItem(), MOVING, NEWITEM, SCH_EDIT_FRAME::OnModify(), TOOL_EVENT::Parameter(), Pgm(), SCH_MOVE_TOOL_PARAMS::placingNewItems, TOOLS_HOLDER::PopTool(), TOOL_MANAGER::PostEvent(), TOOLS_HOLDER::PushTool(), QUIET_MODE, EE_SELECTION_TOOL::RebuildSelection(), SCH_EDIT_FRAME::RecalculateConnections(), ACTIONS::refreshPreview, EE_SELECTION_TOOL::RemoveItemsFromSel(), EE_SELECTION_TOOL::RequestSelection(), EE_ACTIONS::restartMove, SCH_EDIT_FRAME::RollbackSchematicFromUndo(), TOOL_MANAGER::RunAction(), EE_TOOL_BASE< SCH_EDIT_FRAME >::saveCopyInUndoList(), SCH_LINE_T, EVENTS::SelectedItemsModified, EVENTS::SelectedItemsMoved, SCH_EDIT_FRAME::SelectUnit(), EDA_DRAW_PANEL_GAL::SetCurrentCursor(), TOOL_EVENT::SetPassEvent(), SCH_ITEM::SetStoredPos(), TOOL_MENU::ShowContextMenu(), EDA_BASE_FRAME::ShowInfoBarMsg(), STARTPOINT, TA_CHOICE_MENU_CHOICE, TA_UNDO_REDO_PRE, TEMP_SELECTED, SCH_EDIT_FRAME::TestDanglingEnds(), EE_ACTIONS::trimOverlappingWires, EDA_ITEM::Type(), UNDEFINED_LAYER, EE_TOOL_BASE< SCH_EDIT_FRAME >::updateItem(), and TOOL_INTERACTIVE::Wait().

Referenced by setTransitions().

◆ moveItem()

void SCH_MOVE_TOOL::moveItem ( EDA_ITEM aItem,
const VECTOR2I aDelta 
)
private

Find additional items for a drag operation.

Connected items with no wire are included (as there is no wire to adjust for the drag). Connected wires are included with any un-connected ends flagged (STARTPOINT or ENDPOINT).

Definition at line 742 of file sch_move_tool.cpp.

743 {
744  switch( aItem->Type() )
745  {
746  case SCH_LINE_T:
747  {
748  SCH_LINE* line = static_cast<SCH_LINE*>( aItem );
749 
750  if( aItem->HasFlag( STARTPOINT ) )
751  line->MoveStart( (wxPoint) aDelta );
752 
753  if( aItem->HasFlag( ENDPOINT ) )
754  line->MoveEnd( (wxPoint) aDelta );
755 
756  break;
757  }
758 
759  case SCH_PIN_T:
760  case SCH_FIELD_T:
761  {
762  SCH_ITEM* parent = (SCH_ITEM*) aItem->GetParent();
763  wxPoint delta( aDelta );
764 
765  if( parent && parent->Type() == SCH_SYMBOL_T )
766  {
767  SCH_SYMBOL* symbol = (SCH_SYMBOL*) aItem->GetParent();
768  TRANSFORM transform = symbol->GetTransform().InverseTransform();
769 
770  delta = transform.TransformCoordinate( delta );
771  }
772 
773  static_cast<SCH_ITEM*>( aItem )->Move( delta );
774 
775  // If we're moving a field with respect to its parent then it's no longer auto-placed
776  if( aItem->Type() == SCH_FIELD_T && parent && !parent->IsSelected() )
777  parent->ClearFieldsAutoplaced();
778 
779  break;
780  }
781 
782  case SCH_SHEET_PIN_T:
783  {
784  SCH_SHEET_PIN* pin = (SCH_SHEET_PIN*) aItem;
785 
786  pin->SetStoredPos( pin->GetStoredPos() + (wxPoint) aDelta );
787  pin->ConstrainOnEdge( pin->GetStoredPos() );
788  break;
789  }
790 
791  case SCH_LABEL_T:
792  {
793  SCH_TEXT* label = static_cast<SCH_TEXT*>( aItem );
794 
795  if( m_specialCaseLabels.count( label ) )
796  {
798  SEG currentLine( info.attachedLine->GetStartPoint(), info.attachedLine->GetEndPoint() );
799  label->SetPosition( (wxPoint) currentLine.NearestPoint( info.originalLabelPos ) );
800  }
801  else
802  {
803  label->Move( (wxPoint) aDelta );
804  }
805 
806  break;
807  }
808 
809  default:
810  static_cast<SCH_ITEM*>( aItem )->Move( (wxPoint) aDelta );
811  break;
812  }
813 
814  getView()->Hide( aItem, false );
815  aItem->SetFlags( IS_MOVING );
816 }
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Temporarily hide the item in the view (e.g.
Definition: view.cpp:1537
#define STARTPOINT
When a line is selected, these flags indicate which.
bool IsSelected() const
Definition: eda_item.h:122
void MoveStart(const wxPoint &aMoveVector)
Definition: sch_line.cpp:144
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
Definition: eda_item.h:155
TRANSFORM InverseTransform() const
Calculate the Inverse mirror/rotation transform.
Definition: transform.cpp:57
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:152
#define ENDPOINT
ends. (Used to support dragging.)
TRANSFORM & GetTransform()
Definition: sch_symbol.h:232
wxPoint TransformCoordinate(const wxPoint &aPoint) const
Calculate a new coordinate according to the mirror/rotation transform.
Definition: transform.cpp:42
for transforming drawing coordinates for a wxDC device context.
Definition: transform.h:45
void Move(const wxPoint &aMoveVector) override
Move the item by aMoveVector to a new position.
Definition: sch_text.h:201
#define IS_MOVING
Item being moved.
std::map< SCH_TEXT *, SPECIAL_CASE_LABEL_INFO > m_specialCaseLabels
void ClearFieldsAutoplaced()
Definition: sch_item.h:427
EDA_ITEM * GetParent() const
Definition: eda_item.h:114
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet_pin.h:65
KIGFX::VIEW * getView() const
Returns the instance of #VIEW object used in the application.
Definition: tool_base.cpp:36
Definition: seg.h:40
Schematic symbol object.
Definition: sch_symbol.h:78
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
void MoveEnd(const wxPoint &aMoveVector)
Definition: sch_line.cpp:154
constexpr int delta
void SetPosition(const wxPoint &aPosition) override
Definition: sch_text.h:242
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:182
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:112

References SCH_ITEM::ClearFieldsAutoplaced(), delta, ENDPOINT, EDA_ITEM::GetParent(), SCH_SYMBOL::GetTransform(), TOOL_BASE::getView(), EDA_ITEM::HasFlag(), KIGFX::VIEW::Hide(), info, TRANSFORM::InverseTransform(), IS_MOVING, EDA_ITEM::IsSelected(), m_specialCaseLabels, SCH_TEXT::Move(), SCH_LINE::MoveEnd(), SCH_LINE::MoveStart(), pin, SCH_FIELD_T, SCH_LABEL_T, SCH_LINE_T, SCH_PIN_T, SCH_SHEET_PIN_T, SCH_SYMBOL_T, EDA_ITEM::SetFlags(), SCH_TEXT::SetPosition(), STARTPOINT, TRANSFORM::TransformCoordinate(), and EDA_ITEM::Type().

Referenced by AlignElements(), and Main().

◆ Reset()

void EE_TOOL_BASE< SCH_EDIT_FRAME >::Reset ( RESET_REASON  aReason)
inlineoverridevirtualinherited

Bring the tool to a known, initial state.

If the tool claimed anything from the model or the view, it must release it when its reset.

Parameters
aReasoncontains information about the reason of tool reset.

Implements TOOL_BASE.

Definition at line 86 of file ee_tool_base.h.

87  {
88  if( aReason == MODEL_RELOAD )
89  {
90  // Init variables used by every drawing tool
91  m_frame = getEditFrame<T>();
92  m_isSymbolEditor = dynamic_cast<SYMBOL_EDIT_FRAME*>( m_frame ) != nullptr;
93  }
94 
95  m_view = static_cast<KIGFX::SCH_VIEW*>( getView() );
96  }
Model changes (required full reload)
Definition: tool_base.h:80
KIGFX::VIEW * getView() const
Returns the instance of #VIEW object used in the application.
Definition: tool_base.cpp:36

◆ RunMainStack()

void TOOL_INTERACTIVE::RunMainStack ( std::function< void()>  aFunc)
inherited

Call a function using the main stack.

Parameters
aFuncis the function to be calls.

Definition at line 87 of file tool_interactive.cpp.

88 {
89  m_toolMgr->RunMainStack( this, std::move( aFunc ) );
90 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214
void RunMainStack(TOOL_BASE *aTool, std::function< void()> aFunc)

References TOOL_BASE::m_toolMgr, and TOOL_MANAGER::RunMainStack().

Referenced by DRAWING_TOOL::PlaceText().

◆ saveCopyInUndoList()

void EE_TOOL_BASE< SCH_EDIT_FRAME >::saveCopyInUndoList ( EDA_ITEM aItem,
UNDO_REDO  aType,
bool  aAppend = false 
)
inlineprotectedinherited

Definition at line 134 of file ee_tool_base.h.

135  {
136  wxASSERT( aItem );
137 
138  KICAD_T itemType = aItem->Type();
139  bool selected = aItem->IsSelected();
140 
141  // IS_SELECTED flag should not be set on undo items which were added for
142  // a drag operation.
143  if( selected && aItem->HasFlag( TEMP_SELECTED ) )
144  aItem->ClearSelected();
145 
146  if( m_isSymbolEditor )
147  {
148  SYMBOL_EDIT_FRAME* editFrame = dynamic_cast<SYMBOL_EDIT_FRAME*>( m_frame );
149  wxASSERT( editFrame );
150 
151  editFrame->SaveCopyInUndoList( static_cast<LIB_ITEM*>( aItem ), aType, aAppend );
152  }
153  else
154  {
155  SCH_EDIT_FRAME* editFrame = dynamic_cast<SCH_EDIT_FRAME*>( m_frame );
156  wxASSERT( editFrame );
157 
158  if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
159  {
160  editFrame->SaveCopyInUndoList( editFrame->GetScreen(),
161  static_cast<SCH_ITEM*>( aItem->GetParent() ),
162  UNDO_REDO::CHANGED, aAppend );
163  }
164  else
165  {
166  editFrame->SaveCopyInUndoList( editFrame->GetScreen(),
167  static_cast<SCH_ITEM*>( aItem ),
168  aType, aAppend );
169  }
170  }
171 
172  if( selected && aItem->HasFlag( TEMP_SELECTED ) )
173  aItem->SetSelected();
174  }
bool IsSelected() const
Definition: eda_item.h:122
void ClearSelected()
Definition: eda_item.h:131
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
Definition: eda_item.h:155
Schematic editor (Eeschema) main window.
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void SetSelected()
Definition: eda_item.h:128
void SaveCopyInUndoList(EDA_ITEM *aItem, UNDO_REDO aUndoType=UNDO_REDO::LIBEDIT, bool aAppend=false)
Create a copy of the current symbol, and save it in the undo list.
EDA_ITEM * GetParent() const
Definition: eda_item.h:114
#define TEMP_SELECTED
flag indicating that the structure has already selected
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend)
Create a copy of the current schematic item, and put it in the undo list.
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:112
The symbol library editor main window.

◆ SetContextMenu()

void TOOL_INTERACTIVE::SetContextMenu ( ACTION_MENU aMenu,
CONTEXT_MENU_TRIGGER  aTrigger = CMENU_BUTTON 
)
inherited

Assign a context menu and tells when it should be activated.

Parameters
aMenuis the menu to be assigned.
aTriggerdetermines conditions upon which the context menu is activated.

Definition at line 76 of file tool_interactive.cpp.

77 {
78  if( aMenu )
79  aMenu->SetTool( this );
80  else
81  aTrigger = CMENU_OFF;
82 
83  m_toolMgr->ScheduleContextMenu( this, aMenu, aTrigger );
84 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214
void SetTool(TOOL_INTERACTIVE *aTool)
Set a tool that is the creator of the menu.
void ScheduleContextMenu(TOOL_BASE *aTool, ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger)
Set behavior of the tool's context popup menu.

References CMENU_OFF, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ScheduleContextMenu(), and ACTION_MENU::SetTool().

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PL_SELECTION_TOOL::doSelectionMenu(), EE_SELECTION_TOOL::doSelectionMenu(), PCB_SELECTION_TOOL::doSelectionMenu(), TOOL_MENU::ShowContextMenu(), and SCH_LINE_WIRE_BUS_TOOL::UnfoldBus().

◆ setTransitions()

void SCH_MOVE_TOOL::setTransitions ( )
overrideprivatevirtual

This method is meant to be overridden in order to specify handlers for events.

It is called every time tool is reset or finished.

Implements TOOL_INTERACTIVE.

Definition at line 985 of file sch_move_tool.cpp.

986 {
988  Go( &SCH_MOVE_TOOL::Main, EE_ACTIONS::move.MakeEvent() );
989  Go( &SCH_MOVE_TOOL::Main, EE_ACTIONS::drag.MakeEvent() );
991 }
static TOOL_ACTION moveActivate
Definition: ee_actions.h:113
int Main(const TOOL_EVENT &aEvent)
Run an interactive move of the selected items, or the item under the cursor.
static TOOL_ACTION alignToGrid
Definition: ee_actions.h:111
void Go(int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
Define which state (aStateFunc) to go when a certain event arrives (aConditions).
int AlignElements(const TOOL_EVENT &aEvent)
Align selected elements to the grid.
static TOOL_ACTION drag
Definition: ee_actions.h:115
static TOOL_ACTION move
Definition: ee_actions.h:114

References AlignElements(), EE_ACTIONS::alignToGrid, EE_ACTIONS::drag, TOOL_INTERACTIVE::Go(), Main(), EE_ACTIONS::move, and EE_ACTIONS::moveActivate.

◆ updateItem()

void EE_TOOL_BASE< SCH_EDIT_FRAME >::updateItem ( EDA_ITEM aItem,
bool  aUpdateRTree 
) const
inlineprotectedinherited

Similar to getView()->Update(), but handles items that are redrawn by their parents and updating the SCH_SCREEN's RTree.

Similar to m_frame->SaveCopyInUndoList(), but handles items that are owned by their parents.

Definition at line 103 of file ee_tool_base.h.

◆ Wait()

TOOL_EVENT * TOOL_INTERACTIVE::Wait ( const TOOL_EVENT_LIST aEventList = TOOL_EVENTTC_ANYTA_ANY ))
inherited

Suspend execution of the tool until an event specified in aEventList arrives.

No parameters means waiting for any event.

Definition at line 57 of file tool_interactive.cpp.

58 {
59  return m_toolMgr->ScheduleWait( this, aEventList );
60 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:214
TOOL_EVENT * ScheduleWait(TOOL_BASE *aTool, const TOOL_EVENT_LIST &aConditions)
Pause execution of a given tool until one or more events matching aConditions arrives.

References TOOL_BASE::m_toolMgr, and TOOL_MANAGER::ScheduleWait().

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), PL_SELECTION_TOOL::doSelectionMenu(), EE_SELECTION_TOOL::doSelectionMenu(), PCB_SELECTION_TOOL::doSelectionMenu(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), PAD_TOOL::EnumeratePads(), ROUTER_TOOL::InlineDrag(), DRAWING_TOOL::InteractivePlaceWithPreview(), ZOOM_TOOL::Main(), PCB_PICKER_TOOL::Main(), EE_POINT_EDITOR::Main(), PL_EDIT_TOOL::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), CVPCB_CONTROL::Main(), PL_POINT_EDITOR::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PL_SELECTION_TOOL::Main(), EDA_3D_CONTROLLER::Main(), Main(), GERBVIEW_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::Main(), PCB_SELECTION_TOOL::Main(), PICKER_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), PCB_POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), GROUP_TOOL::PickNewMember(), EDIT_TOOL::pickReferencePoint(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), BOARD_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), PCB_SELECTION_TOOL::selectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), ZOOM_TOOL::selectRegion(), DRAWING_TOOL::SetAnchor(), SCH_DRAWING_TOOLS::SingleClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), and SCH_LINE_WIRE_BUS_TOOL::UnfoldBus().

Member Data Documentation

◆ m_anchorPos

boost::optional<VECTOR2I> SCH_MOVE_TOOL::m_anchorPos
private

Definition at line 98 of file sch_move_tool.h.

Referenced by Main().

◆ m_cursor

VECTOR2I SCH_MOVE_TOOL::m_cursor
private

Definition at line 96 of file sch_move_tool.h.

Referenced by Main().

◆ m_dragAdditions

std::vector<KIID> SCH_MOVE_TOOL::m_dragAdditions
private

Used for chaining commands.

Definition at line 89 of file sch_move_tool.h.

Referenced by Main().

◆ m_frame

SCH_EDIT_FRAME * EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame
protectedinherited

Definition at line 177 of file ee_tool_base.h.

◆ m_isDrag

bool SCH_MOVE_TOOL::m_isDrag
private

Items (such as wires) which were added to the selection for a drag.

Definition at line 86 of file sch_move_tool.h.

Referenced by Main().

◆ m_isSymbolEditor

bool EE_TOOL_BASE< SCH_EDIT_FRAME >::m_isSymbolEditor
protectedinherited

Definition at line 180 of file ee_tool_base.h.

◆ m_menu

TOOL_MENU TOOL_INTERACTIVE::m_menu
protectedinherited

The functions below are not yet implemented - their interface may change.

Definition at line 125 of file tool_interactive.h.

Referenced by SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), PAD_TOOL::EnumeratePads(), TOOL_INTERACTIVE::GetToolMenu(), ROUTER_TOOL::Init(), LENGTH_TUNER_TOOL::Init(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Init(), PL_EDIT_TOOL::Init(), SCH_EDIT_TOOL::Init(), PAD_TOOL::Init(), PL_DRAWING_TOOLS::Init(), SYMBOL_EDITOR_DRAWING_TOOLS::Init(), SYMBOL_EDITOR_CONTROL::Init(), PCB_VIEWER_TOOLS::Init(), FOOTPRINT_EDITOR_CONTROL::Init(), PL_SELECTION_TOOL::Init(), SCH_DRAWING_TOOLS::Init(), BOARD_EDITOR_CONTROL::Init(), GERBVIEW_SELECTION_TOOL::Init(), EDA_3D_CONTROLLER::Init(), DRAWING_TOOL::Init(), EE_SELECTION_TOOL::Init(), EE_TOOL_BASE< SCH_BASE_FRAME >::Init(), PCB_SELECTION_TOOL::Init(), SCH_LINE_WIRE_BUS_TOOL::Init(), PCB_TOOL_BASE::Init(), PICKER_TOOL::Init(), DRAWING_TOOL::InteractivePlaceWithPreview(), PCB_PICKER_TOOL::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), PL_EDIT_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), EDA_3D_CONTROLLER::Main(), PL_SELECTION_TOOL::Main(), Main(), GERBVIEW_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::Main(), PCB_SELECTION_TOOL::Main(), PICKER_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), SYMBOL_EDITOR_DRAWING_TOOLS::PlaceAnchor(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), BOARD_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), DRAWING_TOOL::SetAnchor(), SCH_DRAWING_TOOLS::SingleClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ m_moveInProgress

bool SCH_MOVE_TOOL::m_moveInProgress
private

< Flag determining if anything is being dragged right now

Definition at line 85 of file sch_move_tool.h.

Referenced by Main().

◆ m_moveOffset

VECTOR2I SCH_MOVE_TOOL::m_moveOffset
private

Last cursor position (needed for getModificationPoint() to avoid changes of edit reference point).

Definition at line 92 of file sch_move_tool.h.

Referenced by Main().

◆ m_selectionTool

EE_SELECTION_TOOL* EE_TOOL_BASE< SCH_EDIT_FRAME >::m_selectionTool
protectedinherited

Definition at line 179 of file ee_tool_base.h.

◆ m_specialCaseLabels

std::map<SCH_TEXT*, SPECIAL_CASE_LABEL_INFO> SCH_MOVE_TOOL::m_specialCaseLabels
private

Definition at line 102 of file sch_move_tool.h.

Referenced by getConnectedDragItems(), Main(), and moveItem().

◆ m_toolId

TOOL_ID TOOL_BASE::m_toolId
protectedinherited

Name of the tool.

Names are expected to obey the format application.ToolName (eg. pcbnew.InteractiveSelection).

Definition at line 209 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), TOOL_BASE::GetId(), and TOOL_BASE::IsToolActive().

◆ m_toolMgr

TOOL_MANAGER* TOOL_BASE::m_toolMgr
protectedinherited

Definition at line 214 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), PL_SELECTION_TOOL::AddItemsToSel(), EE_SELECTION_TOOL::AddItemsToSel(), PL_SELECTION_TOOL::AddItemToSel(), PCB_SELECTION_TOOL::AddItemToSel(), EE_SELECTION_TOOL::AddItemToSel(), AlignElements(), SCH_EDITOR_CONTROL::AssignNetclass(), CVPCB_ASSOCIATION_TOOL::Associate(), TOOL_BASE::attachManager(), SCH_EDIT_TOOL::AutoplaceFields(), SCH_EDIT_TOOL::BreakWire(), BOARD_INSPECTION_TOOL::calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), SCH_EDIT_TOOL::ChangeTextType(), EDIT_TOOL::ChangeTrackWidth(), SCH_EDIT_TOOL::CleanupSheetPins(), GERBVIEW_CONTROL::ClearAllLayers(), BOARD_INSPECTION_TOOL::ClearHighlight(), SCH_EDITOR_CONTROL::ClearHighlight(), PL_SELECTION_TOOL::ClearSelection(), PCB_SELECTION_TOOL::ClearSelection(), GERBVIEW_SELECTION_TOOL::clearSelection(), EE_SELECTION_TOOL::ClearSelection(), SCH_EDIT_TOOL::ConvertDeMorgan(), PL_EDIT_TOOL::Copy(), SYMBOL_EDITOR_EDIT_TOOL::Copy(), PAD_TOOL::copyPadSettings(), EDIT_TOOL::copyToClipboard(), EDIT_TOOL::CreateArray(), MICROWAVE_TOOL::createInductorBetween(), DRC_TOOL::CrossProbe(), BOARD_INSPECTION_TOOL::CrossProbePcbToSch(), COMMON_TOOLS::CursorControl(), SCH_EDITOR_CONTROL::Cut(), SYMBOL_EDITOR_EDIT_TOOL::DeleteItemCursor(), PL_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), PCB_CONTROL::DeleteItemCursor(), SCH_EDITOR_CONTROL::doCopy(), SCH_EDITOR_CONTROL::doCrossProbeSchToPcb(), SYMBOL_EDITOR_EDIT_TOOL::DoDelete(), SCH_EDIT_TOOL::DoDelete(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), BOARD_INSPECTION_TOOL::doHideNet(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), COMMON_TOOLS::doZoomInOut(), COMMON_TOOLS::doZoomToPreset(), EDIT_TOOL::Drag(), DRAWING_TOOL::DrawArc(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::DrawRectangle(), DRAWING_TOOL::drawSegment(), SCH_LINE_WIRE_BUS_TOOL::DrawSegments(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), BOARD_EDITOR_CONTROL::DrillOrigin(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), EDIT_TOOL::Duplicate(), SCH_EDIT_TOOL::EditField(), SCH_EDIT_TOOL::editFieldText(), BOARD_EDITOR_CONTROL::EditFpInFpEditor(), PAD_TOOL::EditPad(), SYMBOL_EDITOR_EDIT_TOOL::editShapeProperties(), SYMBOL_EDITOR_EDIT_TOOL::editSymbolProperties(), SCH_EDITOR_CONTROL::EditWithSymbolEditor(), GROUP_TOOL::EnterGroup(), SCH_NAVIGATE_TOOL::EnterSheet(), SCH_EDITOR_CONTROL::EnterSheet(), PAD_TOOL::EnumeratePads(), EE_INSPECTION_TOOL::ExcludeMarker(), PCB_SELECTION_TOOL::expandConnection(), PAD_TOOL::explodePad(), PCB_SELECTION_TOOL::filterSelection(), PCB_SELECTION_TOOL::FindItem(), SCH_EDITOR_CONTROL::FindSymbolAndItem(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), EDIT_TOOL::Flip(), EDIT_TOOL::GetAndPlace(), TOOL_BASE::GetManager(), TOOL_BASE::getModelInt(), DRAWING_TOOL::getSourceZoneForAction(), TOOL_BASE::getToolHolderInt(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), TOOL_INTERACTIVE::goInternal(), COMMON_TOOLS::GridNext(), COMMON_TOOLS::GridPreset(), COMMON_TOOLS::GridPrev(), PCB_CONTROL::GridSetOrigin(), GROUP_TOOL::Group(), GERBVIEW_CONTROL::HighlightControl(), BOARD_INSPECTION_TOOL::HighlightItem(), BOARD_INSPECTION_TOOL::HighlightNet(), SCH_EDITOR_CONTROL::HighlightNet(), BOARD_INSPECTION_TOOL::highlightNet(), SCH_EDITOR_CONTROL::HighlightNetCursor(), PL_EDIT_TOOL::ImportDrawingSheetContent(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), BOARD_REANNOTATE_TOOL::Init(), SYMBOL_EDITOR_EDIT_TOOL::Init(), PL_EDIT_TOOL::Init(), SCH_EDIT_TOOL::Init(), GROUP_TOOL::Init(), PAD_TOOL::Init(), CONVERT_TOOL::Init(), PL_DRAWING_TOOLS::Init(), SYMBOL_EDITOR_CONTROL::Init(), GLOBAL_EDIT_TOOL::Init(), PL_POINT_EDITOR::Init(), BOARD_INSPECTION_TOOL::Init(), ALIGN_DISTRIBUTE_TOOL::Init(), PCB_POINT_EDITOR::Init(), BOARD_EDITOR_CONTROL::Init(), POSITION_RELATIVE_TOOL::Init(), EE_TOOL_BASE< SCH_BASE_FRAME >::Init(), EDIT_TOOL::Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), BOARD_INSPECTION_TOOL::InspectClearance(), BOARD_INSPECTION_TOOL::InspectConstraints(), DRAWING_TOOL::InteractivePlaceWithPreview(), EDIT_TOOL::invokeInlineRouter(), EDIT_TOOL::isRouterActive(), TOOL_BASE::IsToolActive(), GROUP_TOOL::LeaveGroup(), SCH_NAVIGATE_TOOL::LeaveSheet(), SCH_EDITOR_CONTROL::LeaveSheet(), COMMON_CONTROL::ListHotKeys(), BOARD_INSPECTION_TOOL::LocalRatsnestTool(), PCB_PICKER_TOOL::Main(), PL_EDIT_TOOL::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), CVPCB_CONTROL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PL_SELECTION_TOOL::Main(), EDA_3D_CONTROLLER::Main(), Main(), GERBVIEW_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::Main(), PCB_SELECTION_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), PCB_VIEWER_TOOLS::MeasureTool(), SYMBOL_EDITOR_EDIT_TOOL::Mirror(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::Mirror(), BOARD_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::MoveExact(), SYMBOL_EDITOR_CONTROL::OnDeMorgan(), PL_SELECTION_TOOL::onDisambiguationExpire(), EE_SELECTION_TOOL::onDisambiguationExpire(), PCB_SELECTION_TOOL::onDisambiguationExpire(), COMMON_TOOLS::OnGridChanged(), PCB_POINT_EDITOR::OnSelectionChange(), PL_EDIT_TOOL::Paste(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), PAD_TOOL::pastePadProperties(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), GROUP_TOOL::PickNewMember(), EDIT_TOOL::pickReferencePoint(), SYMBOL_EDITOR_EDIT_TOOL::PinTable(), PCB_CONTROL::placeBoardItems(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), SCH_DRAWING_TOOLS::PlaceSymbol(), BOARD_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), PCB_CONTROL::Print(), GERBVIEW_CONTROL::Print(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), EE_SELECTION_TOOL::RebuildSelection(), PAD_TOOL::recombinePad(), SYMBOL_EDITOR_EDIT_TOOL::Redo(), SCH_EDITOR_CONTROL::Redo(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), EDIT_TOOL::Remove(), PCB_POINT_EDITOR::removeCorner(), GROUP_TOOL::RemoveFromGroup(), PL_SELECTION_TOOL::RemoveItemFromSel(), EE_SELECTION_TOOL::RemoveItemFromSel(), PCB_SELECTION_TOOL::RemoveItemFromSel(), PL_SELECTION_TOOL::RemoveItemsFromSel(), EE_SELECTION_TOOL::RemoveItemsFromSel(), SCH_EDIT_TOOL::RepeatDrawItem(), SYMBOL_EDITOR_DRAWING_TOOLS::RepeatDrawItem(), EE_SELECTION_TOOL::RequestSelection(), PCB_SELECTION_TOOL::RequestSelection(), PAD_TOOL::Reset(), COMMON_TOOLS::Reset(), PNS::TOOL_BASE::Reset(), EDA_3D_CONTROLLER::Reset(), COMMON_TOOLS::ResetLocalCoords(), TOOL_INTERACTIVE::resetTransitions(), SYMBOL_EDITOR_EDIT_TOOL::Rotate(), SCH_EDIT_TOOL::Rotate(), EDIT_TOOL::Rotate(), TOOL_INTERACTIVE::RunMainStack(), DRC_TOOL::RunTests(), EE_SELECTION_TOOL::Selectable(), EE_SELECTION_TOOL::SelectConnection(), PCB_TOOL_BASE::selection(), COMMON_TOOLS::SelectionTool(), GERBVIEW_SELECTION_TOOL::SelectItem(), GERBVIEW_SELECTION_TOOL::SelectItems(), PCB_SELECTION_TOOL::SelectItems(), PL_SELECTION_TOOL::selectMultiple(), EE_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectNet(), PL_SELECTION_TOOL::SelectPoint(), GERBVIEW_SELECTION_TOOL::selectPoint(), EE_SELECTION_TOOL::selectPoint(), PCB_SELECTION_TOOL::selectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), PCB_SELECTION_TOOL::selectSameSheet(), PCB_SELECTION_TOOL::selectSheetContents(), DRAWING_TOOL::SetAnchor(), TOOL_INTERACTIVE::SetContextMenu(), EDA_3D_CONTROLLER::SetMaterial(), DRC_TOOL::ShowDRCDialog(), SCH_DRAWING_TOOLS::SingleClickPlace(), EDA_3D_CONTROLLER::ToggleVisibility(), BOARD_EDITOR_CONTROL::TrackWidthDec(), BOARD_EDITOR_CONTROL::TrackWidthInc(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), SYMBOL_EDITOR_EDIT_TOOL::Undo(), SCH_EDITOR_CONTROL::Undo(), GROUP_TOOL::Ungroup(), GERBVIEW_SELECTION_TOOL::UnselectItem(), GERBVIEW_SELECTION_TOOL::UnselectItems(), PCB_SELECTION_TOOL::UnselectItems(), PNS::TOOL_BASE::updateEndItem(), EE_INSPECTION_TOOL::UpdateMessagePanel(), GERBVIEW_CONTROL::UpdateMessagePanel(), PL_EDITOR_CONTROL::UpdateMessagePanel(), PCB_CONTROL::UpdateMessagePanel(), EDIT_TOOL::updateModificationPoint(), EE_POINT_EDITOR::updateParentItem(), BOARD_INSPECTION_TOOL::UpdateSelectionRatsnest(), PNS::TOOL_BASE::updateStartItem(), BOARD_EDITOR_CONTROL::ViaSizeDec(), BOARD_EDITOR_CONTROL::ViaSizeInc(), TOOL_INTERACTIVE::Wait(), BOARD_EDITOR_CONTROL::ZoneDuplicate(), and BOARD_EDITOR_CONTROL::ZoneMerge().

◆ m_toolName

std::string TOOL_BASE::m_toolName
protectedinherited

Definition at line 213 of file tool_base.h.

Referenced by TOOL_BASE::GetName().

◆ m_type

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

Unique identifier for the tool, assigned by a TOOL_MANAGER instance.

Definition at line 206 of file tool_base.h.

Referenced by TOOL_BASE::GetType(), and BOARD_COMMIT::Push().

◆ m_view

KIGFX::SCH_VIEW* EE_TOOL_BASE< SCH_EDIT_FRAME >::m_view
protectedinherited

Definition at line 178 of file ee_tool_base.h.


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