KiCad PCB EDA Suite
EE_SELECTION_TOOL Class Reference

#include <ee_selection_tool.h>

Inheritance diagram for EE_SELECTION_TOOL:
TOOL_INTERACTIVE TOOL_BASE

Public Types

enum  RESET_REASON { RUN, MODEL_RELOAD, GAL_SWITCH }
 

Determines the reason of reset for a tool

More...
 

Public Member Functions

 EE_SELECTION_TOOL ()
 
 ~EE_SELECTION_TOOL ()
 
bool Init () override
 Function Init() Init() is called once upon a registration of the tool. More...
 
void Reset (RESET_REASON aReason) override
 Function Reset() Brings the tool to a known, initial state. More...
 
int UpdateMenu (const TOOL_EVENT &aEvent)
 
int Main (const TOOL_EVENT &aEvent)
 Function Main() More...
 
EE_SELECTIONGetSelection ()
 Function GetSelection() More...
 
EE_SELECTIONRequestSelection (const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
 Function RequestSelection() More...
 
bool SelectPoint (const VECTOR2I &aWhere, const KICAD_T *aFilterList=EE_COLLECTOR::AllItems, EDA_ITEM **aItem=nullptr, bool *aSelectionCancelledFlag=nullptr, bool aCheckLocked=false, bool aAdd=false, bool aSubtract=false, bool aExclusiveOr=false)
 Function SelectPoint() Selects one or all items pointed by the parameter aWhere. More...
 
int AddItemToSel (const TOOL_EVENT &aEvent)
 
void AddItemToSel (EDA_ITEM *aItem, bool aQuietMode=false)
 
int AddItemsToSel (const TOOL_EVENT &aEvent)
 
void AddItemsToSel (EDA_ITEMS *aList, bool aQuietMode=false)
 
int RemoveItemFromSel (const TOOL_EVENT &aEvent)
 
void RemoveItemFromSel (EDA_ITEM *aItem, bool aQuietMode=false)
 
int RemoveItemsFromSel (const TOOL_EVENT &aEvent)
 
void RemoveItemsFromSel (EDA_ITEMS *aList, bool aQuietMode=false)
 
void BrightenItem (EDA_ITEM *aItem)
 
void UnbrightenItem (EDA_ITEM *aItem)
 
void SelectHighlightItem (EDA_ITEM *aItem)
 
EDA_ITEMGetNode (VECTOR2I aPosition)
 

Find (but don't select) node under cursor

More...
 
int SelectNode (const TOOL_EVENT &aEvent)
 

Select node under cursor

More...
 
int SelectConnection (const TOOL_EVENT &aEvent)
 

If node selected then expand to connection, otherwise select connection under cursor

More...
 
int ClearSelection (const TOOL_EVENT &aEvent)
 

Clear current selection event handler.

More...
 
int SelectAll (const TOOL_EVENT &aEvent)
 

Select all visible items in sheet

More...
 
void ClearSelection ()
 
bool Selectable (const EDA_ITEM *aItem, bool checkVisibilityOnly=false) const
 Function Selectable() Checks conditions for an item to be selected. More...
 
void GuessSelectionCandidates (EE_COLLECTOR &collector, const VECTOR2I &aPos)
 Apply heuristics to try and determine a single object when multiple are found under the cursor. More...
 
int SelectionMenu (const TOOL_EVENT &aEvent)
 Function SelectionMenu() Shows a popup menu to trim the COLLECTOR passed as aEvent's parameter down to a single item. More...
 
void RebuildSelection ()
 Rebuilds the selection from the EDA_ITEMs' selection flags. More...
 
void Activate ()
 Function Activate() Runs the tool. More...
 
TOOL_MENUGetToolMenu ()
 
void SetContextMenu (ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
 Function SetContextMenu() More...
 
void RunMainStack (std::function< void()> aFunc)
 Function RunMainStack() More...
 
template<class T >
void Go (int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
 Function Go() More...
 
TOOL_EVENTWait (const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
 Function Wait() More...
 
TOOL_TYPE GetType () const
 Function GetType() Returns the type of the tool. More...
 
TOOL_ID GetId () const
 Function GetId() Returns the unique identifier of the tool. More...
 
const std::string & GetName () const
 Function GetName() Returns the name of the tool. More...
 
TOOL_MANAGERGetManager () const
 Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool. More...
 
bool IsToolActive () const
 

Protected Member Functions

void attachManager (TOOL_MANAGER *aManager)
 Function attachManager() More...
 
KIGFX::VIEWgetView () const
 Function getView() More...
 
KIGFX::VIEW_CONTROLSgetViewControls () const
 Function getViewControls() More...
 
template<typename T >
T * getEditFrame () const
 Function getEditFrame() More...
 
template<typename T >
T * getModel () const
 Function getModel() More...
 

Protected Attributes

TOOL_MENU m_menu
 functions below are not yet implemented - their interface may change More...
 
TOOL_TYPE m_type
 

Stores the type of the tool.

More...
 
TOOL_ID m_toolId
 

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

More...
 
std::string m_toolName
 

Name of the tool.

More...
 
TOOL_MANAGERm_toolMgr
 

Private Member Functions

bool selectMultiple ()
 Function selectMultiple() Handles drawing a selection box that allows one to select many items at the same time. More...
 
bool doSelectionMenu (EE_COLLECTOR *aItems)
 Allows the selection of a single item from a list via pop-up menu. More...
 
void select (EDA_ITEM *aItem)
 Function select() Takes necessary action mark an item as selected. More...
 
void unselect (EDA_ITEM *aItem)
 Function unselect() Takes necessary action mark an item as unselected. More...
 
void highlight (EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
 Function highlight() Highlights the item visually. More...
 
void unhighlight (EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
 Function unhighlight() Unhighlights the item visually. More...
 
void updateReferencePoint ()
 Sets the reference point to the anchor of the top-left item. More...
 
bool selectionContains (const VECTOR2I &aPoint) const
 Function selectionContains() More...
 
void setTransitions () override
 

Sets up handlers for various events.

More...
 

Private Attributes

SCH_BASE_FRAMEm_frame
 
EE_SELECTION m_selection
 
bool m_additive
 
bool m_subtractive
 
bool m_exclusive_or
 
bool m_multiple
 
bool m_skip_heuristics
 
bool m_isLibEdit
 
bool m_isLibView
 
int m_unit
 
int m_convert
 

Detailed Description

Definition at line 53 of file ee_selection_tool.h.

Member Enumeration Documentation

◆ RESET_REASON

enum TOOL_BASE::RESET_REASON
inherited

Determines 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 79 of file tool_base.h.

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

Constructor & Destructor Documentation

◆ EE_SELECTION_TOOL()

EE_SELECTION_TOOL::EE_SELECTION_TOOL ( )

Definition at line 100 of file ee_selection_tool.cpp.

100  :
101  TOOL_INTERACTIVE( "eeschema.InteractiveSelection" ),
102  m_frame( nullptr ),
103  m_additive( false ),
104  m_subtractive( false ),
105  m_exclusive_or( false ),
106  m_multiple( false ),
107  m_skip_heuristics( false ),
108  m_isLibEdit( false ),
109  m_isLibView( false ),
110  m_unit( 0 ),
111  m_convert( 0 )
112 {
113  m_selection.Clear();
114 }
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:95
TOOL_INTERACTIVE(TOOL_ID aId, const std::string &aName)
Constructor.
SCH_BASE_FRAME * m_frame
EE_SELECTION m_selection

References SELECTION::Clear(), and m_selection.

◆ ~EE_SELECTION_TOOL()

EE_SELECTION_TOOL::~EE_SELECTION_TOOL ( )

Definition at line 117 of file ee_selection_tool.cpp.

118 {
119  getView()->Remove( &m_selection );
120 }
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:375
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
EE_SELECTION m_selection

References TOOL_BASE::getView(), m_selection, and KIGFX::VIEW::Remove().

Member Function Documentation

◆ Activate()

void TOOL_INTERACTIVE::Activate ( )
inherited

Function Activate() Runs 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:219
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:214
bool InvokeTool(TOOL_ID aToolId)
Function InvokeTool() Calls 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(), LIB_EDIT_TOOL::DeleteItemCursor(), PL_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), PCBNEW_CONTROL::DeleteItemCursor(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), DRAWING_TOOL::DrawArc(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::DrawLine(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::DrawRectangle(), LIB_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), PCB_EDITOR_CONTROL::DrillOrigin(), PAD_TOOL::EnumeratePads(), PCBNEW_CONTROL::GridSetOrigin(), SCH_EDITOR_CONTROL::HighlightNetCursor(), PCB_INSPECTION_TOOL::HighlightNetTool(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), PCB_INSPECTION_TOOL::LocalRatsnestTool(), PL_EDIT_TOOL::Main(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), LIB_MOVE_TOOL::Main(), SCH_MOVE_TOOL::Main(), PCBNEW_PICKER_TOOL::Main(), PICKER_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), PCB_VIEWER_TOOLS::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), LIB_TREE::onContextMenu(), POINT_EDITOR::OnSelectionChange(), LIB_DRAWING_TOOLS::PlaceAnchor(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), EDIT_TOOL::Remove(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), DRAWING_TOOL::SetAnchor(), DRC_TOOL::ShowDRCDialog(), SCH_DRAWING_TOOLS::SingleClickPlace(), LIB_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), and SCH_LINE_WIRE_BUS_TOOL::UnfoldBus().

◆ AddItemsToSel() [1/2]

int EE_SELECTION_TOOL::AddItemsToSel ( const TOOL_EVENT aEvent)

Definition at line 975 of file ee_selection_tool.cpp.

976 {
977  AddItemsToSel( aEvent.Parameter<EDA_ITEMS*>(), false );
978  m_selection.SetIsHover( false );
979  return 0;
980 }
int AddItemsToSel(const TOOL_EVENT &aEvent)
void SetIsHover(bool aIsHover)
Definition: selection.h:66
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
Definition: base_struct.h:588
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:435
EE_SELECTION m_selection

References m_selection, TOOL_EVENT::Parameter(), and SELECTION::SetIsHover().

Referenced by SCH_MOVE_TOOL::Main(), and setTransitions().

◆ AddItemsToSel() [2/2]

void EE_SELECTION_TOOL::AddItemsToSel ( EDA_ITEMS aList,
bool  aQuietMode = false 
)

Definition at line 983 of file ee_selection_tool.cpp.

984 {
985  if( aList )
986  {
987  for( EDA_ITEM* item : *aList )
988  select( item );
989 
990  // Inform other potentially interested tools
991  if( !aQuietMode )
993  }
994 }
static const TOOL_EVENT SelectedEvent
Definition: actions.h:206
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
void select(EDA_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159

References TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), select(), and EVENTS::SelectedEvent.

◆ AddItemToSel() [1/2]

int EE_SELECTION_TOOL::AddItemToSel ( const TOOL_EVENT aEvent)

◆ AddItemToSel() [2/2]

void EE_SELECTION_TOOL::AddItemToSel ( EDA_ITEM aItem,
bool  aQuietMode = false 
)

Definition at line 962 of file ee_selection_tool.cpp.

963 {
964  if( aItem )
965  {
966  select( aItem );
967 
968  // Inform other potentially interested tools
969  if( !aQuietMode )
971  }
972 }
static const TOOL_EVENT SelectedEvent
Definition: actions.h:206
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
void select(EDA_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).

References TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), select(), and EVENTS::SelectedEvent.

◆ attachManager()

void TOOL_BASE::attachManager ( TOOL_MANAGER aManager)
protectedinherited

Function attachManager()

Sets 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:219

References TOOL_BASE::m_toolMgr.

Referenced by TOOL_MANAGER::RegisterTool().

◆ BrightenItem()

void EE_SELECTION_TOOL::BrightenItem ( EDA_ITEM aItem)

Definition at line 1040 of file ee_selection_tool.cpp.

1041 {
1042  highlight( aItem, BRIGHTENED );
1043 }
void highlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function highlight() Highlights the item visually.
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:139

References BRIGHTENED, and highlight().

Referenced by LIB_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), and SCH_EDITOR_CONTROL::UpdateFind().

◆ ClearSelection() [1/2]

int EE_SELECTION_TOOL::ClearSelection ( const TOOL_EVENT aEvent)

Clear current selection event handler.

Definition at line 1052 of file ee_selection_tool.cpp.

1053 {
1054  ClearSelection();
1055 
1056  return 0;
1057 }

References ClearSelection().

Referenced by SCH_EDITOR_CONTROL::AssignNetclass(), SCH_EDITOR_CONTROL::FindNext(), LIB_EDIT_TOOL::Paste(), SCH_DRAWING_TOOLS::PlaceComponent(), and SCH_EDITOR_CONTROL::UpdateFind().

◆ ClearSelection() [2/2]

void EE_SELECTION_TOOL::ClearSelection ( )

Definition at line 1325 of file ee_selection_tool.cpp.

1326 {
1327  if( m_selection.Empty() )
1328  return;
1329 
1330  while( m_selection.GetSize() )
1332 
1333  getView()->Update( &m_selection );
1334 
1335  m_selection.SetIsHover( false );
1337 
1338  // Inform other potentially interested tools
1340 }
void ClearReferencePoint()
Definition: selection.h:250
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
void SetIsHover(bool aIsHover)
Definition: selection.h:66
#define SELECTED
Definition: base_struct.h:124
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
static const TOOL_EVENT ClearedEvent
Definition: actions.h:208
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1531
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:121
virtual unsigned int GetSize() const override
Function GetSize() Returns the number of stored items.
Definition: selection.h:100
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159
EE_SELECTION m_selection
void unhighlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function unhighlight() Unhighlights the item visually.
EDA_ITEM * Front() const
Definition: selection.h:184

References EVENTS::ClearedEvent, SELECTION::ClearReferencePoint(), SELECTION::Empty(), SELECTION::Front(), SELECTION::GetSize(), TOOL_BASE::getView(), m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), SELECTED, SELECTION::SetIsHover(), unhighlight(), and KIGFX::VIEW::Update().

Referenced by ClearSelection(), Main(), RequestSelection(), Reset(), selectMultiple(), SelectPoint(), and setTransitions().

◆ doSelectionMenu()

bool EE_SELECTION_TOOL::doSelectionMenu ( EE_COLLECTOR aItems)
private

Allows the selection of a single item from a list via pop-up menu.

The items are highlighted on the canvas when hovered in the menu. The collector is trimmed to the picked item.

Returns
true if an item was picked

The user has requested the full, non-limited list of selection items

Definition at line 1131 of file ee_selection_tool.cpp.

1132 {
1133  EDA_ITEM* current = nullptr;
1134  bool selectAll = false;
1135  bool expandSelection = false;
1136 
1137  do
1138  {
1140  if( expandSelection )
1141  aCollector->Combine();
1142 
1143  expandSelection = false;
1144 
1145  int limit = std::min( 9, aCollector->GetCount() );
1146  ACTION_MENU menu( true );
1147 
1148  for( int i = 0; i < limit; ++i )
1149  {
1150  wxString text;
1151  EDA_ITEM* item = ( *aCollector )[i];
1152  text = item->GetSelectMenuText( m_frame->GetUserUnits() );
1153 
1154  wxString menuText = wxString::Format( "&%d. %s\t%d", i + 1, text, i + 1 );
1155  menu.Add( menuText, i + 1, item->GetMenuImage() );
1156  }
1157 
1158  menu.AppendSeparator();
1159  menu.Add( _( "Select &All\tA" ), limit + 1, net_highlight_schematic_xpm );
1160 
1161  if( !expandSelection && aCollector->HasAdditionalItems() )
1162  menu.Add( _( "&Expand Selection\tE" ), limit + 2, nullptr );
1163 
1164  if( aCollector->m_MenuTitle.Length() )
1165  {
1166  menu.SetTitle( aCollector->m_MenuTitle );
1167  menu.SetIcon( info_xpm );
1168  menu.DisplayTitle( true );
1169  }
1170  else
1171  {
1172  menu.DisplayTitle( false );
1173  }
1174 
1175  SetContextMenu( &menu, CMENU_NOW );
1176 
1177  while( TOOL_EVENT* evt = Wait() )
1178  {
1179  if( evt->Action() == TA_CHOICE_MENU_UPDATE )
1180  {
1181  if( selectAll )
1182  {
1183  for( int i = 0; i < aCollector->GetCount(); ++i )
1184  unhighlight( ( *aCollector )[i], BRIGHTENED );
1185  }
1186  else if( current )
1187  {
1188  unhighlight( current, BRIGHTENED );
1189  }
1190 
1191  int id = *evt->GetCommandId();
1192 
1193  // User has pointed an item, so show it in a different way
1194  if( id > 0 && id <= limit )
1195  {
1196  current = ( *aCollector )[id - 1];
1197  highlight( current, BRIGHTENED );
1198  }
1199  else
1200  {
1201  current = nullptr;
1202  }
1203 
1204  // User has pointed on the "Select All" option
1205  if( id == limit + 1 )
1206  {
1207  for( int i = 0; i < aCollector->GetCount(); ++i )
1208  highlight( ( *aCollector )[i], BRIGHTENED );
1209  selectAll = true;
1210  }
1211  else
1212  {
1213  selectAll = false;
1214  }
1215  }
1216  else if( evt->Action() == TA_CHOICE_MENU_CHOICE )
1217  {
1218  if( selectAll )
1219  {
1220  for( int i = 0; i < aCollector->GetCount(); ++i )
1221  unhighlight( ( *aCollector )[i], BRIGHTENED );
1222  }
1223  else if( current )
1224  unhighlight( current, BRIGHTENED );
1225 
1226  OPT<int> id = evt->GetCommandId();
1227 
1228  // User has selected the "Select All" option
1229  if( id == limit + 1 )
1230  {
1231  selectAll = true;
1232  current = nullptr;
1233  }
1234  // User has selected an item, so this one will be returned
1235  else if( id && ( *id > 0 ) && ( *id <= limit ) )
1236  {
1237  selectAll = false;
1238  current = ( *aCollector )[*id - 1];
1239  }
1240  else
1241  {
1242  selectAll = false;
1243  current = nullptr;
1244  }
1245  }
1246  else if( evt->Action() == TA_CHOICE_MENU_CLOSED )
1247  {
1248  break;
1249  }
1250 
1251  getView()->UpdateItems();
1252  m_frame->GetCanvas()->Refresh();
1253  }
1254  } while( expandSelection );
1255 
1256  if( selectAll )
1257  return true;
1258  else if( current )
1259  {
1260  unhighlight( current, BRIGHTENED );
1261 
1262  getView()->UpdateItems();
1263  m_frame->GetCanvas()->Refresh();
1264 
1265  aCollector->Empty();
1266  aCollector->Append( current );
1267  return true;
1268  }
1269 
1270  return false;
1271 }
TOOL_EVENT * Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
Defines the structure of a menu based on ACTIONs.
Definition: action_menu.h:43
void SetContextMenu(ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
Function SetContextMenu()
void highlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function highlight() Highlights the item visually.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
TOOL_EVENT.
Definition: tool_event.h:171
const BITMAP_OPAQUE net_highlight_schematic_xpm[1]
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:139
void UpdateItems()
Function UpdateItems() Iterates through the list of items that asked for updating and updates them.
Definition: view.cpp:1412
const BITMAP_OPAQUE info_xpm[1]
Definition: info.cpp:75
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:201
#define _(s)
Definition: 3d_actions.cpp:33
SCH_BASE_FRAME * m_frame
virtual wxString GetSelectMenuText(EDA_UNITS aUnits) const
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159
boost::optional< T > OPT
Definition: optional.h:7
virtual BITMAP_DEF GetMenuImage() const
Function GetMenuImage returns a pointer to an image to be used in menus.
void unhighlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function unhighlight() Unhighlights the item visually.
EDA_UNITS GetUserUnits() const
Return the user units currently in use.

References _, COLLECTOR::Append(), BRIGHTENED, CMENU_NOW, COLLECTOR::Combine(), COLLECTOR::Empty(), Format(), SCH_BASE_FRAME::GetCanvas(), COLLECTOR::GetCount(), EDA_ITEM::GetMenuImage(), EDA_ITEM::GetSelectMenuText(), EDA_BASE_FRAME::GetUserUnits(), TOOL_BASE::getView(), COLLECTOR::HasAdditionalItems(), highlight(), info_xpm, m_frame, COLLECTOR::m_MenuTitle, net_highlight_schematic_xpm, EDA_DRAW_PANEL_GAL::Refresh(), TOOL_INTERACTIVE::SetContextMenu(), TA_CHOICE_MENU_CHOICE, TA_CHOICE_MENU_CLOSED, TA_CHOICE_MENU_UPDATE, unhighlight(), KIGFX::VIEW::UpdateItems(), and TOOL_INTERACTIVE::Wait().

Referenced by SelectionMenu().

◆ getEditFrame()

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

Function getEditFrame()

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

Definition at line 187 of file tool_base.h.

188  {
189 #if !defined( QA_TEST ) // Dynamic casts give the linker a siezure in the test framework
190  wxASSERT( dynamic_cast<T*>( getToolHolderInt() ) );
191 #endif
192  return static_cast<T*>( getToolHolderInt() );
193  }
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

Function GetId() Returns the unique identifier of the tool.

The identifier is set by an instance of TOOL_MANAGER.

Returns
Identifier of the tool.

Definition at line 121 of file tool_base.h.

122  {
123  return m_toolId;
124  }
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:214

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

Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool.

Returns
Instance of the TOOL_MANAGER. If there is no TOOL_MANAGER associated, it returns NULL.

Definition at line 143 of file tool_base.h.

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

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

Function getModel()

Returns the model object if it matches the requested type.

Definition at line 201 of file tool_base.h.

202  {
203  EDA_ITEM* m = getModelInt();
204 #if !defined( QA_TEST ) // Dynamic casts give the linker a siezure in the test framework
205  wxASSERT( dynamic_cast<T*>( m ) );
206 #endif
207  return static_cast<T*>( m );
208  }
EDA_ITEM * getModelInt() const
Definition: tool_base.cpp:54
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159

References TOOL_BASE::getModelInt().

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

◆ GetName()

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

Function GetName() Returns 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 132 of file tool_base.h.

133  {
134  return m_toolName;
135  }
std::string m_toolName
Name of the tool.
Definition: tool_base.h:218

References TOOL_BASE::m_toolName.

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

◆ GetNode()

EDA_ITEM * EE_SELECTION_TOOL::GetNode ( VECTOR2I  aPosition)

Find (but don't select) node under cursor

Definition at line 899 of file ee_selection_tool.cpp.

900 {
901  EE_COLLECTOR collector;
902 
903  //TODO(snh): Reimplement after exposing KNN interface
904  int thresholdMax = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
905 
906  for( int threshold : { 0, thresholdMax/2, thresholdMax } )
907  {
908  collector.m_Threshold = threshold;
909  collector.Collect( m_frame->GetScreen(), nodeTypes, (wxPoint) aPosition );
910 
911  if( collector.GetCount() > 0 )
912  break;
913  }
914 
915  return collector.GetCount() ? collector[ 0 ] : nullptr;
916 }
int m_Threshold
Definition: collector.h:67
void Collect(SCH_SCREEN *aScreen, const KICAD_T aFilterList[], const wxPoint &aPos, int aUnit=0, int aConvert=0)
Function Collect scans a EDA_ITEM using this class's Inspector method, which does the collection.
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
#define HITTEST_THRESHOLD_PIXELS
EE_COLLECTOR.
Definition: ee_collectors.h:42
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:101
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
static KICAD_T nodeTypes[]
SCH_BASE_FRAME * m_frame
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:68

References EE_COLLECTOR::Collect(), COLLECTOR::GetCount(), SCH_BASE_FRAME::GetScreen(), TOOL_BASE::getView(), HITTEST_THRESHOLD_PIXELS, KiROUND(), m_frame, COLLECTOR::m_Threshold, and nodeTypes.

◆ GetSelection()

◆ GetToolMenu()

◆ GetType()

TOOL_TYPE TOOL_BASE::GetType ( ) const
inlineinherited

Function GetType() Returns the type of the tool.

Returns
The type of the tool.

Definition at line 110 of file tool_base.h.

111  {
112  return m_type;
113  }
TOOL_TYPE m_type
Stores the type of the tool.
Definition: tool_base.h:211

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

Function getView()

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:289
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219

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::checkPart(), PL_SELECTION_TOOL::ClearSelection(), ClearSelection(), SCH_LINE_WIRE_BUS_TOOL::computeBreakPoint(), COMMON_TOOLS::CursorControl(), LIB_EDIT_TOOL::DeleteItemCursor(), PL_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), PCBNEW_CONTROL::DeleteItemCursor(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PL_EDIT_TOOL::DoDelete(), PL_SELECTION_TOOL::doSelectionMenu(), doSelectionMenu(), SELECTION_TOOL::doSelectionMenu(), COMMON_TOOLS::doZoomFit(), COMMON_TOOLS::doZoomInOut(), COMMON_TOOLS::doZoomToPreset(), MICROWAVE_TOOL::drawMicrowaveInductor(), PL_DRAWING_TOOLS::DrawShape(), PCB_EDITOR_CONTROL::DrillOrigin(), LIB_EDIT_TOOL::Duplicate(), PAD_TOOL::EnumeratePads(), SCH_EDITOR_CONTROL::FindComponentAndItem(), GetNode(), ROUTER_TOOL::getStartLayer(), PCBNEW_CONTROL::GridResetOrigin(), PCBNEW_CONTROL::GridSetOrigin(), SELECTION_TOOL::GuessSelectionCandidates(), PL_SELECTION_TOOL::highlight(), highlight(), SELECTION_TOOL::highlight(), GERBVIEW_CONTROL::HighlightControl(), PNS::TOOL_BASE::highlightNet(), PCB_INSPECTION_TOOL::highlightNet(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), PCB_VIEWER_TOOLS::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), SCH_MOVE_TOOL::moveItem(), PL_EDIT_TOOL::moveItem(), COMMON_TOOLS::OnGridChanged(), POINT_EDITOR::OnSelectionChange(), COMMON_TOOLS::PanControl(), LIB_EDIT_TOOL::Paste(), PL_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), PNS::TOOL_BASE::pickSingleItem(), PL_DRAWING_TOOLS::PlaceItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), EDIT_TOOL::Remove(), PCB_EDITOR_CONTROL::Reset(), PNS::TOOL_BASE::Reset(), PCBNEW_CONTROL::Reset(), GERBVIEW_SELECTION_TOOL::Reset(), DRAWING_TOOL::Reset(), Reset(), SELECTION_TOOL::Reset(), EE_TOOL_BASE< SCH_BASE_FRAME >::Reset(), SCH_EDIT_TOOL::Rotate(), GERBVIEW_SELECTION_TOOL::select(), GERBVIEW_SELECTION_TOOL::selectable(), SELECTION_TOOL::Selectable(), SELECTION_TOOL::SelectAll(), SelectAll(), PL_SELECTION_TOOL::selectionContains(), selectionContains(), SELECTION_TOOL::selectionContains(), PL_SELECTION_TOOL::selectMultiple(), selectMultiple(), SELECTION_TOOL::selectMultiple(), PL_SELECTION_TOOL::SelectPoint(), SelectPoint(), ZOOM_TOOL::selectRegion(), GERBVIEW_SELECTION_TOOL::selectVisually(), SCH_EDITOR_CONTROL::ToggleHiddenFields(), SCH_EDITOR_CONTROL::ToggleHiddenPins(), PL_SELECTION_TOOL::unhighlight(), unhighlight(), SELECTION_TOOL::unhighlight(), GERBVIEW_SELECTION_TOOL::unselect(), GERBVIEW_SELECTION_TOOL::unselectVisually(), EE_POINT_EDITOR::updateEditedPoint(), PL_POINT_EDITOR::updateEditedPoint(), POINT_EDITOR::updateEditedPoint(), SCH_EDITOR_CONTROL::UpdateFind(), EE_POINT_EDITOR::updateItem(), PL_POINT_EDITOR::updateItem(), POINT_EDITOR::updateItem(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), EE_POINT_EDITOR::updatePoints(), PL_POINT_EDITOR::updatePoints(), POINT_EDITOR::updatePoints(), SELECTION_TOOL::updateSelection(), PNS::TOOL_BASE::updateStartItem(), EE_TOOL_BASE< SCH_BASE_FRAME >::updateView(), PCB_VIEWER_TOOLS::view(), PCB_TOOL_BASE::view(), SELECTION_TOOL::zoomFitSelection(), ~EE_SELECTION_TOOL(), GERBVIEW_SELECTION_TOOL::~GERBVIEW_SELECTION_TOOL(), and SELECTION_TOOL::~SELECTION_TOOL().

◆ getViewControls()

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

Function getViewControls()

Returns 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:219
KIGFX::VIEW_CONTROLS * GetViewControls() const
Definition: tool_manager.h:291

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

Referenced by EE_POINT_EDITOR::addCorner(), POINT_EDITOR::addCorner(), EE_POINT_EDITOR::addCornerCondition(), SCH_EDITOR_CONTROL::AssignNetclass(), SCH_EDIT_TOOL::BreakWire(), PCB_TOOL_BASE::controls(), COMMON_TOOLS::CursorControl(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), EDIT_TOOL::doMoveSelection(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), COMMON_TOOLS::doZoomToPreset(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawLine(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::DrawRectangle(), SCH_LINE_WIRE_BUS_TOOL::DrawSegments(), LIB_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), LIB_EDIT_TOOL::Duplicate(), PAD_TOOL::EnumeratePads(), SCH_LINE_WIRE_BUS_TOOL::finishSegments(), PCB_INSPECTION_TOOL::HighlightNet(), SCH_EDITOR_CONTROL::HighlightNet(), PCB_INSPECTION_TOOL::HighlightNetTool(), FOOTPRINT_EDITOR_TOOLS::ImportFootprint(), PL_EDIT_TOOL::Main(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), LIB_MOVE_TOOL::Main(), SCH_MOVE_TOOL::Main(), PCBNEW_PICKER_TOOL::Main(), PICKER_TOOL::Main(), ROUTER_TOOL::MainLoop(), PCB_VIEWER_TOOLS::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), COMMON_TOOLS::OnGridChanged(), POINT_EDITOR::OnSelectionChange(), LIB_EDIT_TOOL::Paste(), ROUTER_TOOL::performDragging(), LENGTH_TUNER_TOOL::performTuning(), LIB_DRAWING_TOOLS::PlaceAnchor(), PCBNEW_CONTROL::placeBoardItems(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), PL_DRAWING_TOOLS::PlaceItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), EDIT_TOOL::Remove(), SCH_EDIT_TOOL::RepeatDrawItem(), PL_SELECTION_TOOL::RequestSelection(), RequestSelection(), POINT_EDITOR::Reset(), DRAWING_TOOL::Reset(), COMMON_TOOLS::ResetLocalCoords(), GERBVIEW_SELECTION_TOOL::selectCursor(), SELECTION_TOOL::selectCursor(), PL_SELECTION_TOOL::selectMultiple(), selectMultiple(), SELECTION_TOOL::selectMultiple(), SelectNode(), ZOOM_TOOL::selectRegion(), ALIGN_DISTRIBUTE_TOOL::selectTarget(), PICKER_TOOL::setControls(), PCBNEW_PICKER_TOOL::setControls(), EE_POINT_EDITOR::setEditedPoint(), PL_POINT_EDITOR::setEditedPoint(), POINT_EDITOR::setEditedPoint(), SCH_DRAWING_TOOLS::SingleClickPlace(), LIB_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), EE_POINT_EDITOR::updateEditedPoint(), PL_POINT_EDITOR::updateEditedPoint(), POINT_EDITOR::updateEditedPoint(), POINT_EDITOR::updateItem(), LIB_MOVE_TOOL::updateModificationPoint(), PL_EDIT_TOOL::updateModificationPoint(), 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

Function Go()

Defines which state (aStateFunc) to go when a certain event arrives (aConditions). No conditions means any event.

Definition at line 129 of file tool_interactive.h.

131 {
132  TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
133 
134  goInternal( sptr, aConditions );
135 }
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 LENGTH_TUNER_TOOL::setTransitions(), ZOOM_TOOL::setTransitions(), AUTOPLACE_TOOL::setTransitions(), PCB_REANNOTATE_TOOL::setTransitions(), ROUTER_TOOL::setTransitions(), LIB_PIN_TOOL::setTransitions(), EE_INSPECTION_TOOL::setTransitions(), PL_DRAWING_TOOLS::setTransitions(), EE_POINT_EDITOR::setTransitions(), PL_POINT_EDITOR::setTransitions(), COMMON_CONTROL::setTransitions(), ZONE_FILLER_TOOL::setTransitions(), LIB_MOVE_TOOL::setTransitions(), KICAD_MANAGER_CONTROL::setTransitions(), CONVERT_TOOL::setTransitions(), DRC_TOOL::setTransitions(), POINT_EDITOR::setTransitions(), LIB_DRAWING_TOOLS::setTransitions(), MICROWAVE_TOOL::setTransitions(), PCB_VIEWER_TOOLS::setTransitions(), GLOBAL_EDIT_TOOL::setTransitions(), GERBVIEW_CONTROL::setTransitions(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::setTransitions(), SCH_DRAWING_TOOLS::setTransitions(), SCH_MOVE_TOOL::setTransitions(), PL_EDITOR_CONTROL::setTransitions(), LIB_CONTROL::setTransitions(), LIB_EDIT_TOOL::setTransitions(), PL_EDIT_TOOL::setTransitions(), PAD_TOOL::setTransitions(), FOOTPRINT_EDITOR_TOOLS::setTransitions(), SCH_EDIT_TOOL::setTransitions(), POSITION_RELATIVE_TOOL::setTransitions(), GERBVIEW_SELECTION_TOOL::setTransitions(), PCBNEW_CONTROL::setTransitions(), EDA_3D_CONTROLLER::setTransitions(), ALIGN_DISTRIBUTE_TOOL::setTransitions(), COMMON_TOOLS::setTransitions(), SCH_LINE_WIRE_BUS_TOOL::setTransitions(), CVPCB_CONTROL::setTransitions(), PCB_INSPECTION_TOOL::setTransitions(), CVPCB_ASSOCIATION_TOOL::setTransitions(), PCBNEW_PICKER_TOOL::setTransitions(), PICKER_TOOL::setTransitions(), PCB_EDITOR_CONTROL::setTransitions(), DRAWING_TOOL::setTransitions(), EDIT_TOOL::setTransitions(), SELECTION_TOOL::setTransitions(), PL_SELECTION_TOOL::setTransitions(), SCH_EDITOR_CONTROL::setTransitions(), and setTransitions().

◆ GuessSelectionCandidates()

void EE_SELECTION_TOOL::GuessSelectionCandidates ( EE_COLLECTOR collector,
const VECTOR2I aPos 
)

Apply heuristics to try and determine a single object when multiple are found under the cursor.

Definition at line 612 of file ee_selection_tool.cpp.

613 {
614  // There are certain parent/child and enclosure combinations that can be handled
615  // automatically.
616 
617  // Prefer exact hits to sloppy ones
618  int exactHits = 0;
619 
620  for( int i = collector.GetCount() - 1; i >= 0; --i )
621  {
622  EDA_ITEM* item = collector[ i ];
623 
624  if( item->HitTest( (wxPoint) aPos, 0 ) )
625  exactHits++;
626  }
627 
628  if( exactHits > 0 && exactHits < collector.GetCount() )
629  {
630  for( int i = collector.GetCount() - 1; i >= 0; --i )
631  {
632  EDA_ITEM* item = collector[ i ];
633 
634  if( !item->HitTest( (wxPoint) aPos, 0 ) )
635  collector.Transfer( item );
636  }
637  }
638 
639  // Prefer a non-sheet to a sheet
640  for( int i = 0; collector.GetCount() == 2 && i < 2; ++i )
641  {
642  EDA_ITEM* item = collector[ i ];
643  EDA_ITEM* other = collector[ ( i + 1 ) % 2 ];
644 
645  if( item->Type() != SCH_SHEET_T && other->Type() == SCH_SHEET_T )
646  collector.Transfer( other );
647  }
648 
649  // Prefer a symbol to a pin or the opposite, when both a symbol and a pin are selected
650  // We need to be able to select only a pin:
651  // - to display its characteristics (especially if an ERC is attached to the pin)
652  // - for cross probing, to select the corresponding pad.
653  // Note also the case happens only in schematic editor. In symbol editor, the symbol
654  // itself is never selected
655  for( int i = 0; collector.GetCount() == 2 && i < 2; ++i )
656  {
657  EDA_ITEM* item = collector[ i ];
658  EDA_ITEM* other = collector[ ( i + 1 ) % 2 ];
659 
660  if( item->Type() == SCH_COMPONENT_T && other->Type() == SCH_PIN_T )
661  {
663  collector.Transfer( other );
664  else
665  collector.Transfer( item );
666  }
667  }
668 
669  // Prefer a field to a symbol
670  for( int i = 0; collector.GetCount() == 2 && i < 2; ++i )
671  {
672  EDA_ITEM* item = collector[ i ];
673  EDA_ITEM* other = collector[ ( i + 1 ) % 2 ];
674 
675  if( item->Type() == SCH_FIELD_T && other->Type() == SCH_COMPONENT_T )
676  collector.Transfer( other );
677  }
678 
679  // No need for multiple wires at a single point; if there's a junction select that;
680  // otherwise any of the wires will do
681  bool junction = false;
682  bool wiresOnly = true;
683 
684  for( EDA_ITEM* item : collector )
685  {
686  if( item->Type() == SCH_JUNCTION_T )
687  junction = true;
688  else if( item->Type() != SCH_LINE_T )
689  wiresOnly = false;
690  }
691 
692  if( wiresOnly )
693  {
694  for( int j = collector.GetCount() - 1; j >= 0; --j )
695  {
696  if( junction && collector[ j ]->Type() != SCH_JUNCTION_T )
697  collector.Transfer( j );
698  else if( !junction && j > 0 )
699  collector.Transfer( j );
700  }
701  }
702 }
EESCHEMA_SETTINGS * eeconfig() const
virtual bool HitTest(const wxPoint &aPosition, int aAccuracy=0) const
Function HitTest tests if aPosition is contained within or on the bounding box of an item.
Definition: base_struct.h:307
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:101
void Transfer(int aIndex)
Moves the item at aIndex (first position is 0) to the backup list.
Definition: collector.h:174
SCH_BASE_FRAME * m_frame
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159
KICAD_T Type() const
Function Type()
Definition: base_struct.h:193

References SCH_BASE_FRAME::eeconfig(), COLLECTOR::GetCount(), EDA_ITEM::HitTest(), m_frame, m_isLibEdit, EESCHEMA_SETTINGS::m_Selection, SCH_COMPONENT_T, SCH_FIELD_T, SCH_JUNCTION_T, SCH_LINE_T, SCH_PIN_T, SCH_SHEET_T, EESCHEMA_SETTINGS::SELECTION::select_pin_selects_symbol, COLLECTOR::Transfer(), and EDA_ITEM::Type().

Referenced by LIB_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), and SelectPoint().

◆ highlight()

void EE_SELECTION_TOOL::highlight ( EDA_ITEM aItem,
int  aHighlightMode,
EE_SELECTION aGroup = nullptr 
)
private

Function highlight() Highlights the item visually.

Parameters
aItemis an item to be be highlighted.
aHighlightModeshould be either SELECTED or BRIGHTENED
aGroupis the group to add the item to in the BRIGHTENED mode.

Definition at line 1355 of file ee_selection_tool.cpp.

1356 {
1357  KICAD_T itemType = aItem->Type();
1358 
1359  if( aMode == SELECTED )
1360  aItem->SetSelected();
1361  else if( aMode == BRIGHTENED )
1362  aItem->SetBrightened();
1363 
1364  if( aGroup )
1365  aGroup->Add( aItem );
1366 
1367  // Highlight pins and fields. (All the other component children are currently only
1368  // represented in the LIB_PART and will inherit the settings of the parent component.)
1369  if( itemType == SCH_COMPONENT_T )
1370  {
1371  for( SCH_PIN* pin : static_cast<SCH_COMPONENT*>( aItem )->GetPins() )
1372  {
1373  if( aMode == SELECTED )
1374  pin->SetSelected();
1375  else if( aMode == BRIGHTENED )
1376  pin->SetBrightened();
1377  }
1378 
1379  for( SCH_FIELD& field : static_cast<SCH_COMPONENT*>( aItem )->GetFields() )
1380  {
1381  if( aMode == SELECTED )
1382  field.SetSelected();
1383  else if( aMode == BRIGHTENED )
1384  field.SetBrightened();
1385  }
1386  }
1387  else if( itemType == SCH_SHEET_T )
1388  {
1389  for( SCH_FIELD& field : static_cast<SCH_SHEET*>( aItem )->GetFields() )
1390  {
1391  if( aMode == SELECTED )
1392  field.SetSelected();
1393  else if( aMode == BRIGHTENED )
1394  field.SetBrightened();
1395  }
1396 
1397  for( SCH_SHEET_PIN* pin : static_cast<SCH_SHEET*>( aItem )->GetPins() )
1398  {
1399  if( aMode == SELECTED )
1400  pin->SetSelected();
1401  else if( aMode == BRIGHTENED )
1402  pin->SetBrightened();
1403  }
1404  }
1405 
1406  if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
1407  getView()->Update( aItem->GetParent() );
1408  else
1409  getView()->Update( aItem );
1410 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
void SetBrightened()
Definition: base_struct.h:209
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:76
#define SELECTED
Definition: base_struct.h:124
void SetSelected()
Definition: base_struct.h:208
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:139
EDA_ITEM * GetParent() const
Definition: base_struct.h:195
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet.h:84
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1531
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
KICAD_T Type() const
Function Type()
Definition: base_struct.h:193

References SELECTION::Add(), BRIGHTENED, EDA_ITEM::GetParent(), TOOL_BASE::getView(), SCH_COMPONENT_T, SCH_FIELD_T, SCH_PIN_T, SCH_SHEET_PIN_T, SCH_SHEET_T, SELECTED, EDA_ITEM::SetBrightened(), EDA_ITEM::SetSelected(), EDA_ITEM::Type(), and KIGFX::VIEW::Update().

Referenced by BrightenItem(), doSelectionMenu(), select(), and SelectHighlightItem().

◆ Init()

bool EE_SELECTION_TOOL::Init ( )
overridevirtual

Function Init() 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 124 of file ee_selection_tool.cpp.

125 {
126  m_frame = getEditFrame<SCH_BASE_FRAME>();
127 
128  LIB_VIEW_FRAME* libViewFrame = dynamic_cast<LIB_VIEW_FRAME*>( m_frame );
129  LIB_EDIT_FRAME* libEditFrame = dynamic_cast<LIB_EDIT_FRAME*>( m_frame );
130 
131  if( libEditFrame )
132  {
133  m_isLibEdit = true;
134  m_unit = libEditFrame->GetUnit();
135  m_convert = libEditFrame->GetConvert();
136  }
137  else
138  m_isLibView = libViewFrame != nullptr;
139 
140 
141  static KICAD_T wireOrBusTypes[] = { SCH_LINE_LOCATE_WIRE_T, SCH_LINE_LOCATE_BUS_T, EOT };
142  static KICAD_T connectedTypes[] = { SCH_LINE_LOCATE_WIRE_T, SCH_LINE_LOCATE_BUS_T,
145 
146  auto wireSelection = E_C::MoreThan( 0 ) && E_C::OnlyType( SCH_LINE_LOCATE_WIRE_T );
147  auto busSelection = E_C::MoreThan( 0 ) && E_C::OnlyType( SCH_LINE_LOCATE_BUS_T );
148  auto wireOrBusSelection = E_C::MoreThan( 0 ) && E_C::OnlyTypes( wireOrBusTypes );
149  auto connectedSelection = E_C::MoreThan( 0 ) && E_C::OnlyTypes( connectedTypes );
150  auto sheetSelection = E_C::Count( 1 ) && E_C::OnlyType( SCH_SHEET_T );
151 
152  auto schEditCondition =
153  [this] ( const SELECTION& aSel )
154  {
155 
156  return !m_isLibEdit && !m_isLibView;
157  };
158 
159  auto belowRootSheetCondition =
160  [&]( const SELECTION& aSel )
161  {
162  SCH_EDIT_FRAME* schEditFrame = dynamic_cast<SCH_EDIT_FRAME*>( m_frame );
163 
164  return ( schEditFrame&&
165  schEditFrame->GetCurrentSheet().Last() !=
166  &schEditFrame->Schematic().Root() );
167  };
168 
169  auto havePartCondition =
170  [&]( const SELECTION& sel )
171  {
172  return m_isLibEdit && static_cast<LIB_EDIT_FRAME*>( m_frame )->GetCurPart();
173  };
174 
175  auto& menu = m_menu.GetMenu();
176 
177  menu.AddItem( EE_ACTIONS::enterSheet, sheetSelection && EE_CONDITIONS::Idle, 1 );
178  menu.AddItem( EE_ACTIONS::explicitCrossProbe, sheetSelection && EE_CONDITIONS::Idle, 1 );
179  menu.AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition, 1 );
180 
181  menu.AddSeparator( 100 );
182  menu.AddItem( EE_ACTIONS::drawWire, schEditCondition && EE_CONDITIONS::Empty, 100 );
183  menu.AddItem( EE_ACTIONS::drawBus, schEditCondition && EE_CONDITIONS::Empty, 100 );
184 
185  menu.AddSeparator( 100 );
187 
188  menu.AddSeparator( 100 );
190 
191  menu.AddSeparator( 200 );
192  menu.AddItem( EE_ACTIONS::selectConnection, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
193  menu.AddItem( EE_ACTIONS::placeJunction, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
194  menu.AddItem( EE_ACTIONS::placeLabel, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
195  menu.AddItem( EE_ACTIONS::placeGlobalLabel, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
196  menu.AddItem( EE_ACTIONS::placeHierLabel, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
197  menu.AddItem( EE_ACTIONS::breakWire, wireSelection && EE_CONDITIONS::Idle, 250 );
198  menu.AddItem( EE_ACTIONS::breakBus, busSelection && EE_CONDITIONS::Idle, 250 );
199  menu.AddItem( EE_ACTIONS::importSheetPin, sheetSelection && EE_CONDITIONS::Idle, 250 );
200  menu.AddItem( EE_ACTIONS::assignNetclass, connectedSelection && EE_CONDITIONS::Idle, 250 );
201 
202  menu.AddSeparator( 400 );
203  menu.AddItem( EE_ACTIONS::symbolProperties, havePartCondition && EE_CONDITIONS::Empty, 400 );
204  menu.AddItem( EE_ACTIONS::pinTable, havePartCondition && EE_CONDITIONS::Empty, 400 );
205 
206  menu.AddSeparator( 1000 );
208 
209  return true;
210 }
static TOOL_ACTION pinTable
Definition: ee_actions.h:146
void AddStandardSubMenus(TOOL_MENU &aMenu)
Function CreateBasicMenu.
TOOL_MENU m_menu
functions below are not yet implemented - their interface may change
static bool IsDrawingWire(const SELECTION &aSelection)
static TOOL_ACTION breakBus
Definition: ee_actions.h:135
int GetConvert() const
SCH_SHEET * Last() const
Function Last returns a pointer to the last sheet of the list One can see the others sheet as the "pa...
static SELECTION_CONDITION MoreThan(int aNumber)
Creates a functor that tests if the number of selected items is greater than the value given as param...
static bool Idle(const SELECTION &aSelection)
Tests if there no items selected or being edited.
static SELECTION_CONDITION OnlyTypes(const KICAD_T aTypes[])
Creates a functor that tests if the selected items are only of given types.
CONDITIONAL_MENU & GetMenu()
Function GetMenu.
Definition: tool_menu.cpp:46
static TOOL_ACTION placeHierLabel
Definition: ee_actions.h:87
static TOOL_ACTION placeJunction
Definition: ee_actions.h:83
static TOOL_ACTION selectConnection
If current selection is a wire or bus, expand to entire connection.
Definition: ee_actions.h:53
Schematic editor (Eeschema) main window.
static SELECTION_CONDITION Count(int aNumber)
Creates a functor that tests if the number of selected items is equal to the value given as parameter...
Symbol library viewer main window.
search types array terminator (End Of Types)
Definition: typeinfo.h:82
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
static TOOL_ACTION breakWire
Definition: ee_actions.h:134
static TOOL_ACTION leaveSheet
Definition: ee_actions.h:185
int GetUnit() const
static TOOL_ACTION drawWire
Definition: ee_actions.h:79
static TOOL_ACTION explicitCrossProbe
Definition: ee_actions.h:197
static TOOL_ACTION symbolProperties
Definition: ee_actions.h:145
SCHEMATIC & Schematic() const
static TOOL_ACTION importSheetPin
Definition: ee_actions.h:90
static bool IsDrawingBus(const SELECTION &aSelection)
static TOOL_ACTION drawBus
Definition: ee_actions.h:80
static TOOL_ACTION placeLabel
Definition: ee_actions.h:85
SCH_SHEET & Root() const
Definition: schematic.h:94
The symbol library editor main window.
SCH_BASE_FRAME * m_frame
static TOOL_ACTION assignNetclass
Definition: ee_actions.h:153
static SELECTION_CONDITION OnlyType(KICAD_T aType)
Creates a functor that tests if the selected items are only of given type.
static bool Empty(const SELECTION &aSelection)
Tests if there are no items selected.
static TOOL_ACTION enterSheet
Definition: ee_actions.h:184
SCH_SHEET_PATH & GetCurrentSheet() const
static TOOL_ACTION placeGlobalLabel
Definition: ee_actions.h:86
static TOOL_ACTION finishBus
Definition: ee_actions.h:96
void AddItem(const TOOL_ACTION &aAction, const SELECTION_CONDITION &aCondition, int aOrder=ANY_ORDER)
Adds a menu entry to run a TOOL_ACTION on selected items.
static TOOL_ACTION finishWire
Definition: ee_actions.h:95

References CONDITIONAL_MENU::AddItem(), EDA_DRAW_FRAME::AddStandardSubMenus(), EE_ACTIONS::assignNetclass, EE_ACTIONS::breakBus, EE_ACTIONS::breakWire, SELECTION_CONDITIONS::Count(), EE_ACTIONS::drawBus, EE_ACTIONS::drawWire, SELECTION_CONDITIONS::Empty(), EE_ACTIONS::enterSheet, EOT, EE_ACTIONS::explicitCrossProbe, EE_ACTIONS::finishBus, EE_ACTIONS::finishWire, LIB_EDIT_FRAME::GetConvert(), SCH_EDIT_FRAME::GetCurrentSheet(), TOOL_MENU::GetMenu(), LIB_EDIT_FRAME::GetUnit(), SELECTION_CONDITIONS::Idle(), EE_ACTIONS::importSheetPin, SCH_LINE_WIRE_BUS_TOOL::IsDrawingBus(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingWire(), SCH_SHEET_PATH::Last(), EE_ACTIONS::leaveSheet, m_convert, m_frame, m_isLibEdit, m_isLibView, TOOL_INTERACTIVE::m_menu, m_unit, SELECTION_CONDITIONS::MoreThan(), SELECTION_CONDITIONS::OnlyType(), SELECTION_CONDITIONS::OnlyTypes(), EE_ACTIONS::pinTable, EE_ACTIONS::placeGlobalLabel, EE_ACTIONS::placeHierLabel, EE_ACTIONS::placeJunction, EE_ACTIONS::placeLabel, SCHEMATIC::Root(), SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, SCH_LABEL_T, SCH_LINE_LOCATE_BUS_T, SCH_LINE_LOCATE_WIRE_T, SCH_PIN_T, SCH_SHEET_PIN_T, SCH_SHEET_T, SCH_EDIT_FRAME::Schematic(), EE_ACTIONS::selectConnection, and EE_ACTIONS::symbolProperties.

◆ 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:219
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:214
bool IsToolActive(TOOL_ID aId) const
Function IsToolActive() Returns 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::isRouterActive(), and ROUTER_TOOL::onViaCommand().

◆ Main()

int EE_SELECTION_TOOL::Main ( const TOOL_EVENT aEvent)

Function Main()

The main loop.

Definition at line 296 of file ee_selection_tool.cpp.

297 {
298 
299  // Main loop: keep receiving events
300  while( TOOL_EVENT* evt = Wait() )
301  {
302  if( m_frame->ToolStackIsEmpty() )
303  m_frame->GetCanvas()->SetCurrentCursor( wxCURSOR_ARROW );
304 
306 
307  if( evt->Modifier( MD_SHIFT ) && evt->Modifier( MD_CTRL ) )
308  m_subtractive = true;
309  else if( evt->Modifier( MD_SHIFT ) )
310  m_additive = true;
311  else if( evt->Modifier( MD_CTRL ) )
312  m_exclusive_or = true;
313 
314  // Is the user requesting that the selection list include all possible
315  // items without removing less likely selection candidates
316  m_skip_heuristics = !!evt->Modifier( MD_ALT );
317 
318  // Single click? Select single object
319  if( evt->IsClick( BUT_LEFT ) )
320  {
321  if( auto schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
322  schframe->FocusOnItem( nullptr );
323 
324  SelectPoint( evt->Position(), EE_COLLECTOR::AllItems, nullptr, nullptr, false,
326  }
327 
328  // right click? if there is any object - show the context menu
329  else if( evt->IsClick( BUT_RIGHT ) )
330  {
331  bool selectionCancelled = false;
332 
333  if( m_selection.Empty() ||
334  !m_selection.GetBoundingBox().Contains( wxPoint( evt->Position() ) ) )
335  {
336  ClearSelection();
337  SelectPoint( evt->Position(), EE_COLLECTOR::AllItems, nullptr,
338  &selectionCancelled );
339  m_selection.SetIsHover( true );
340  }
341 
342  if( !selectionCancelled )
344  }
345 
346  // double click? Display the properties window
347  else if( evt->IsDblClick( BUT_LEFT ) )
348  {
349  if( auto schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
350  schframe->FocusOnItem( nullptr );
351 
352  if( m_selection.Empty() )
353  SelectPoint( evt->Position());
354 
355  EDA_ITEM* item = m_selection.Front();
356 
357  if( item && item->Type() == SCH_SHEET_T )
359  else
361  }
362 
363  // drag with LMB? Select multiple objects (or at least draw a selection box) or drag them
364  else if( evt->IsDrag( BUT_LEFT ) )
365  {
366  if( auto schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
367  schframe->FocusOnItem( nullptr );
368 
370  {
371  selectMultiple();
372  }
373  else
374  {
375  // selection is empty? try to start dragging the item under the point where drag
376  // started
377  if( m_isLibEdit && m_selection.Empty() )
379  else if( m_selection.Empty() )
381 
382  // Check if dragging has started within any of selected items bounding box
383  if( selectionContains( evt->Position() ) )
384  {
385  // Yes -> run the move tool and wait till it finishes
386  if( m_isLibEdit )
387  m_toolMgr->InvokeTool( "eeschema.SymbolMoveTool" );
388  else
389  m_toolMgr->InvokeTool( "eeschema.InteractiveMove" );
390  }
391  else
392  {
393  // No -> drag a selection box
394  selectMultiple();
395  }
396  }
397  }
398 
399  // context sub-menu selection? Handle unit selection or bus unfolding
400  else if( evt->Category() == TC_COMMAND && evt->Action() == TA_CHOICE_MENU_CHOICE )
401  {
402  if( evt->GetCommandId().get() >= ID_POPUP_SCH_SELECT_UNIT_CMP
403  && evt->GetCommandId().get() <= ID_POPUP_SCH_SELECT_UNIT_CMP_MAX )
404  {
405  SCH_COMPONENT* component = dynamic_cast<SCH_COMPONENT*>( m_selection.Front() );
406  int unit = evt->GetCommandId().get() - ID_POPUP_SCH_SELECT_UNIT_CMP;
407 
408  if( component )
409  static_cast<SCH_EDIT_FRAME*>( m_frame )->SelectUnit( component, unit );
410  }
411  else if( evt->GetCommandId().get() >= ID_POPUP_SCH_UNFOLD_BUS
412  && evt->GetCommandId().get() <= ID_POPUP_SCH_UNFOLD_BUS_END )
413  {
414  wxString* net = new wxString( *evt->Parameter<wxString*>() );
416  }
417 
418  }
419 
420  else if( evt->IsCancelInteractive() )
421  {
422  if( auto schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
423  schframe->FocusOnItem( nullptr );
424 
425  ClearSelection();
426  }
427 
428  else if( evt->Action() == TA_UNDO_REDO_PRE )
429  {
430  if( auto schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
431  schframe->FocusOnItem( nullptr );
432 
433  ClearSelection();
434  }
435 
436  else
437  evt->SetPassEvent();
438  }
439 
440  return 0;
441 }
static TOOL_ACTION properties
Definition: ee_actions.h:121
TOOL_MENU m_menu
functions below are not yet implemented - their interface may change
bool selectionContains(const VECTOR2I &aPoint) const
Function selectionContains()
TOOL_EVENT * Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
void SetCurrentCursor(wxStockCursor aStockCursorID)
Function SetCurrentCursor Set the current cursor shape for this panel.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
bool selectMultiple()
Function selectMultiple() Handles drawing a selection box that allows one to select many items at the...
static TOOL_ACTION unfoldBus
Definition: ee_actions.h:81
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:140
bool Contains(const wxPoint &aPoint) const
Function Contains.
bool InvokeTool(TOOL_ID aToolId)
Function InvokeTool() Calls a tool by sending a tool activation event to tool of given ID.
void SetIsHover(bool aIsHover)
Definition: selection.h:66
const KICAD_T movableSymbolItems[]
EE_SELECTION & RequestSelection(const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Function RequestSelection()
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
TOOL_EVENT.
Definition: tool_event.h:171
bool ToolStackIsEmpty()
Definition: tools_holder.h:117
bool GetDragSelects() const
Indicates that a drag should draw a selection rectangle, even when started over an item.
Definition: tools_holder.h:134
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:121
bool SelectPoint(const VECTOR2I &aWhere, const KICAD_T *aFilterList=EE_COLLECTOR::AllItems, EDA_ITEM **aItem=nullptr, bool *aSelectionCancelledFlag=nullptr, bool aCheckLocked=false, bool aAdd=false, bool aSubtract=false, bool aExclusiveOr=false)
Function SelectPoint() Selects one or all items pointed by the parameter aWhere.
SCH_BASE_FRAME * m_frame
static const KICAD_T AllItems[]
Definition: ee_collectors.h:45
Schematic symbol object.
Definition: sch_component.h:80
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159
static TOOL_ACTION enterSheet
Definition: ee_actions.h:184
EE_SELECTION m_selection
EDA_RECT GetBoundingBox() const
Definition: selection.h:156
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:59
EDA_ITEM * Front() const
Definition: selection.h:184
const KICAD_T movableSchematicItems[]
KICAD_T Type() const
Function Type()
Definition: base_struct.h:193

References EE_COLLECTOR::AllItems, BUT_LEFT, BUT_RIGHT, ClearSelection(), EDA_RECT::Contains(), SELECTION::Empty(), EE_ACTIONS::enterSheet, SELECTION::Front(), SELECTION::GetBoundingBox(), SCH_BASE_FRAME::GetCanvas(), TOOLS_HOLDER::GetDragSelects(), ID_POPUP_SCH_SELECT_UNIT_CMP, ID_POPUP_SCH_SELECT_UNIT_CMP_MAX, ID_POPUP_SCH_UNFOLD_BUS, ID_POPUP_SCH_UNFOLD_BUS_END, TOOL_MANAGER::InvokeTool(), m_additive, m_exclusive_or, m_frame, m_isLibEdit, TOOL_INTERACTIVE::m_menu, m_selection, m_skip_heuristics, m_subtractive, TOOL_BASE::m_toolMgr, MD_ALT, MD_CTRL, MD_SHIFT, movableSchematicItems, movableSymbolItems, EE_ACTIONS::properties, RequestSelection(), TOOL_MANAGER::RunAction(), SCH_SHEET_T, selectionContains(), selectMultiple(), SelectPoint(), EDA_DRAW_PANEL_GAL::SetCurrentCursor(), SELECTION::SetIsHover(), TOOL_MENU::ShowContextMenu(), TA_CHOICE_MENU_CHOICE, TA_UNDO_REDO_PRE, TC_COMMAND, TOOLS_HOLDER::ToolStackIsEmpty(), EDA_ITEM::Type(), EE_ACTIONS::unfoldBus, and TOOL_INTERACTIVE::Wait().

Referenced by setTransitions().

◆ RebuildSelection()

void EE_SELECTION_TOOL::RebuildSelection ( )

Rebuilds the selection from the EDA_ITEMs' selection flags.

Commonly called after rolling back an undo state to make sure there aren't any stale pointers.

Definition at line 1060 of file ee_selection_tool.cpp.

1061 {
1062  m_selection.Clear();
1063 
1064  if( m_isLibEdit )
1065  {
1066  LIB_PART* start = static_cast<LIB_EDIT_FRAME*>( m_frame )->GetCurPart();
1067 
1068  for( LIB_ITEM& item : start->GetDrawItems() )
1069  {
1070  if( item.IsSelected() )
1071  select( static_cast<EDA_ITEM*>( &item ) );
1072  }
1073  }
1074  else
1075  {
1076  for( auto item : m_frame->GetScreen()->Items() )
1077  {
1078  // If the field and component are selected, only use the component
1079  if( item->IsSelected() )
1080  {
1081  select( item );
1082  }
1083  else
1084  {
1085  if( item->Type() == SCH_COMPONENT_T )
1086  {
1087  for( SCH_FIELD& field : static_cast<SCH_COMPONENT*>( item )->GetFields() )
1088  {
1089  if( field.IsSelected() )
1090  select( &field );
1091  }
1092  }
1093 
1094  if( item->Type() == SCH_SHEET_T )
1095  {
1096  for( SCH_FIELD& field : static_cast<SCH_SHEET*>( item )->GetFields() )
1097  {
1098  if( field.IsSelected() )
1099  select( &field );
1100  }
1101 
1102  for( SCH_SHEET_PIN* pin : static_cast<SCH_SHEET*>( item )->GetPins() )
1103  {
1104  if( pin->IsSelected() )
1105  select( pin );
1106  }
1107  }
1108 
1109  }
1110  }
1111  }
1112 
1114 
1115  // Inform other potentially interested tools
1117 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
static const TOOL_EVENT SelectedEvent
Definition: actions.h:206
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:95
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void select(EDA_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
The base class for drawable items used by schematic library components.
Definition: lib_item.h:61
void updateReferencePoint()
Sets the reference point to the anchor of the top-left item.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
Define a library symbol object.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet.h:84
SCH_BASE_FRAME * m_frame
EE_RTREE & Items()
Definition: sch_screen.h:158
EE_SELECTION m_selection

References SELECTION::Clear(), LIB_PART::GetDrawItems(), SCH_BASE_FRAME::GetScreen(), SCH_SCREEN::Items(), m_frame, m_isLibEdit, m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), SCH_COMPONENT_T, SCH_SHEET_T, select(), EVENTS::SelectedEvent, and updateReferencePoint().

Referenced by SCH_MOVE_TOOL::Main(), LIB_EDIT_TOOL::Paste(), SCH_EDIT_FRAME::PutDataInPreviousState(), LIB_EDIT_TOOL::Redo(), SCH_EDITOR_CONTROL::Redo(), LIB_EDIT_FRAME::RollbackPartFromUndo(), LIB_EDIT_TOOL::Undo(), and SCH_EDITOR_CONTROL::Undo().

◆ RemoveItemFromSel() [1/2]

int EE_SELECTION_TOOL::RemoveItemFromSel ( const TOOL_EVENT aEvent)

Definition at line 997 of file ee_selection_tool.cpp.

998 {
999  RemoveItemFromSel( aEvent.Parameter<EDA_ITEM*>() );
1000  m_selection.SetIsHover( false );
1001  return 0;
1002 }
void SetIsHover(bool aIsHover)
Definition: selection.h:66
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:435
int RemoveItemFromSel(const TOOL_EVENT &aEvent)
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159
EE_SELECTION m_selection

References m_selection, TOOL_EVENT::Parameter(), and SELECTION::SetIsHover().

Referenced by SCH_EDIT_FRAME::DeleteJunction(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), SCH_EDIT_FRAME::SchematicCleanUp(), and setTransitions().

◆ RemoveItemFromSel() [2/2]

void EE_SELECTION_TOOL::RemoveItemFromSel ( EDA_ITEM aItem,
bool  aQuietMode = false 
)

Definition at line 1005 of file ee_selection_tool.cpp.

1006 {
1007  if( aItem )
1008  {
1009  unselect( aItem );
1010 
1011  // Inform other potentially interested tools
1012  if( !aQuietMode )
1014  }
1015 }
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:207
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
void unselect(EDA_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.

References TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), unselect(), and EVENTS::UnselectedEvent.

◆ RemoveItemsFromSel() [1/2]

int EE_SELECTION_TOOL::RemoveItemsFromSel ( const TOOL_EVENT aEvent)

Definition at line 1018 of file ee_selection_tool.cpp.

1019 {
1020  RemoveItemsFromSel( aEvent.Parameter<EDA_ITEMS*>(), false );
1021  m_selection.SetIsHover( false );
1022  return 0;
1023 }
void SetIsHover(bool aIsHover)
Definition: selection.h:66
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
Definition: base_struct.h:588
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:435
int RemoveItemsFromSel(const TOOL_EVENT &aEvent)
EE_SELECTION m_selection

References m_selection, TOOL_EVENT::Parameter(), and SELECTION::SetIsHover().

Referenced by SCH_MOVE_TOOL::Main(), and setTransitions().

◆ RemoveItemsFromSel() [2/2]

void EE_SELECTION_TOOL::RemoveItemsFromSel ( EDA_ITEMS aList,
bool  aQuietMode = false 
)

Definition at line 1026 of file ee_selection_tool.cpp.

1027 {
1028  if( aList )
1029  {
1030  for( EDA_ITEM* item : *aList )
1031  unselect( item );
1032 
1033  // Inform other potentially interested tools
1034  if( !aQuietMode )
1036  }
1037 }
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:207
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
void unselect(EDA_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159

References TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), unselect(), and EVENTS::UnselectedEvent.

◆ RequestSelection()

EE_SELECTION & EE_SELECTION_TOOL::RequestSelection ( const KICAD_T aFilterList = EE_COLLECTOR::AllItems)

Function RequestSelection()

Returns either an existing selection (filtered), or the selection at the current cursor if the existing selection is empty.

Definition at line 705 of file ee_selection_tool.cpp.

706 {
707  if( m_selection.Empty() )
708  {
709  VECTOR2D cursorPos = getViewControls()->GetCursorPosition( true );
710 
711  ClearSelection();
712  SelectPoint( cursorPos, aFilterList );
713  m_selection.SetIsHover( true );
715  }
716  else // Trim an existing selection by aFilterList
717  {
718  for( int i = (int) m_selection.GetSize() - 1; i >= 0; --i )
719  {
720  EDA_ITEM* item = (EDA_ITEM*) m_selection.GetItem( i );
721 
722  if( !item->IsType( aFilterList ) )
723  {
724  unselect( item );
726  }
727  }
728  }
729 
731 
732  return m_selection;
733 }
void ClearReferencePoint()
Definition: selection.h:250
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:207
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
void SetIsHover(bool aIsHover)
Definition: selection.h:66
void updateReferencePoint()
Sets the reference point to the anchor of the top-left item.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
virtual bool IsType(const KICAD_T aScanTypes[]) const
Function IsType Checks whether the item is one of the listed types.
Definition: base_struct.h:262
virtual KIGFX::VIEW_ITEM * GetItem(unsigned int aIdx) const override
Definition: selection.h:105
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:121
virtual unsigned int GetSize() const override
Function GetSize() Returns the number of stored items.
Definition: selection.h:100
void unselect(EDA_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
bool SelectPoint(const VECTOR2I &aWhere, const KICAD_T *aFilterList=EE_COLLECTOR::AllItems, EDA_ITEM **aItem=nullptr, bool *aSelectionCancelledFlag=nullptr, bool aCheckLocked=false, bool aAdd=false, bool aSubtract=false, bool aExclusiveOr=false)
Function SelectPoint() Selects one or all items pointed by the parameter aWhere.
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:42
EE_SELECTION m_selection
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.

References SELECTION::ClearReferencePoint(), ClearSelection(), SELECTION::Empty(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), SELECTION::GetItem(), SELECTION::GetSize(), TOOL_BASE::getViewControls(), EDA_ITEM::IsType(), m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), SelectPoint(), SELECTION::SetIsHover(), unselect(), EVENTS::UnselectedEvent, and updateReferencePoint().

Referenced by SCH_MOVE_TOOL::AlignElements(), SCH_EDIT_TOOL::AutoplaceFields(), SCH_EDIT_TOOL::ChangeSymbols(), SCH_EDIT_TOOL::ChangeTextType(), SCH_EDIT_TOOL::CleanupSheetPins(), SCH_EDIT_TOOL::ConvertDeMorgan(), LIB_EDIT_TOOL::Copy(), SCH_EDITOR_CONTROL::doCopy(), SCH_EDITOR_CONTROL::doCrossProbeSchToPcb(), LIB_EDIT_TOOL::DoDelete(), SCH_EDIT_TOOL::DoDelete(), LIB_EDIT_TOOL::Duplicate(), SCH_EDIT_TOOL::Duplicate(), SCH_EDIT_TOOL::EditField(), SCH_EDITOR_CONTROL::EditWithLibEdit(), SCH_EDITOR_CONTROL::EnterSheet(), LIB_MOVE_TOOL::Main(), SCH_MOVE_TOOL::Main(), Main(), LIB_EDIT_TOOL::Mirror(), SCH_EDIT_TOOL::Mirror(), LIB_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::RefreshSymbolFromLibrary(), LIB_EDIT_TOOL::Rotate(), SCH_EDIT_TOOL::Rotate(), SelectConnection(), EE_INSPECTION_TOOL::ShowDatasheet(), BUS_UNFOLD_MENU::update(), and SCH_EDIT_FRAME::UpdateSymbolFromEditor().

◆ Reset()

void EE_SELECTION_TOOL::Reset ( RESET_REASON  aReason)
overridevirtual

Function Reset() Brings 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 213 of file ee_selection_tool.cpp.

214 {
215  m_frame = getEditFrame<SCH_BASE_FRAME>();
216 
217  if( aReason == TOOL_BASE::MODEL_RELOAD )
218  {
219  // Remove pointers to the selected items from containers without changing their
220  // properties (as they are already deleted while a new sheet is loaded)
221  m_selection.Clear();
222  getView()->GetPainter()->GetSettings()->SetHighlight( false );
223 
224  LIB_EDIT_FRAME* libEditFrame = dynamic_cast<LIB_EDIT_FRAME*>( m_frame );
225  LIB_VIEW_FRAME* libViewFrame = dynamic_cast<LIB_VIEW_FRAME*>( m_frame );
226 
227  if( libEditFrame )
228  {
229  m_isLibEdit = true;
230  m_unit = libEditFrame->GetUnit();
231  m_convert = libEditFrame->GetConvert();
232  }
233  else
234  m_isLibView = libViewFrame != nullptr;
235  }
236  else
237  // Restore previous properties of selected items and remove them from containers
238  ClearSelection();
239 
240  // Reinsert the VIEW_GROUP, in case it was removed from the VIEW
241  getView()->Remove( &m_selection );
242  getView()->Add( &m_selection );
243 }
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:95
int GetConvert() const
Model changes (required full reload)
Definition: tool_base.h:82
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:375
Symbol library viewer main window.
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:199
int GetUnit() const
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
virtual RENDER_SETTINGS * GetSettings()=0
Function GetAdapter Returns pointer to current settings that are going to be used when drawing items.
The symbol library editor main window.
void SetHighlight(bool aEnabled, int aNetcode=-1, bool aMulti=false)
Function SetHighlight Turns on/off highlighting - it may be done for the active layer or the specifie...
SCH_BASE_FRAME * m_frame
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:345
EE_SELECTION m_selection

References KIGFX::VIEW::Add(), SELECTION::Clear(), ClearSelection(), LIB_EDIT_FRAME::GetConvert(), KIGFX::VIEW::GetPainter(), KIGFX::PAINTER::GetSettings(), LIB_EDIT_FRAME::GetUnit(), TOOL_BASE::getView(), m_convert, m_frame, m_isLibEdit, m_isLibView, m_selection, m_unit, TOOL_BASE::MODEL_RELOAD, KIGFX::VIEW::Remove(), and KIGFX::RENDER_SETTINGS::SetHighlight().

◆ RunMainStack()

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

Function RunMainStack()

Calls 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:219
void RunMainStack(TOOL_BASE *aTool, std::function< void()> aFunc)

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

Referenced by DRAWING_TOOL::PlaceText().

◆ select()

void EE_SELECTION_TOOL::select ( EDA_ITEM aItem)
private

Function select() Takes necessary action mark an item as selected.

Parameters
aItemis an item to be selected.

Definition at line 1343 of file ee_selection_tool.cpp.

1344 {
1345  highlight( aItem, SELECTED, &m_selection );
1346 }
#define SELECTED
Definition: base_struct.h:124
void highlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function highlight() Highlights the item visually.
EE_SELECTION m_selection

References highlight(), m_selection, and SELECTED.

Referenced by AddItemsToSel(), AddItemToSel(), RebuildSelection(), SelectAll(), SelectConnection(), selectMultiple(), and SelectPoint().

◆ Selectable()

bool EE_SELECTION_TOOL::Selectable ( const EDA_ITEM aItem,
bool  checkVisibilityOnly = false 
) const

Function Selectable() Checks conditions for an item to be selected.

Returns
True if the item fulfills conditions to be selected.

Definition at line 1274 of file ee_selection_tool.cpp.

1275 {
1276  // NOTE: in the future this is where eeschema layer/itemtype visibility will be handled
1277  LIB_EDIT_FRAME* symbeditFrame = dynamic_cast< LIB_EDIT_FRAME* >( m_frame );
1278 
1279  switch( aItem->Type() )
1280  {
1281  case SCH_PIN_T:
1282  if( !static_cast<const SCH_PIN*>( aItem )->IsVisible() && !m_frame->GetShowAllPins() )
1283  return false;
1284  break;
1285 
1286  case LIB_PART_T: // In libedit we do not want to select the symbol itself.
1287  return false;
1288 
1289  case LIB_FIELD_T: // LIB_FIELD object can always be edited.
1290  break;
1291 
1292  case LIB_ARC_T:
1293  case LIB_CIRCLE_T:
1294  case LIB_TEXT_T:
1295  case LIB_RECTANGLE_T:
1296  case LIB_POLYLINE_T:
1297  case LIB_BEZIER_T:
1298  case LIB_PIN_T:
1299  {
1300  if( symbeditFrame )
1301  {
1302  LIB_ITEM* lib_item = (LIB_ITEM*) aItem;
1303 
1304  if( lib_item->GetUnit() && lib_item->GetUnit() != symbeditFrame->GetUnit() )
1305  return false;
1306 
1307  if( lib_item->GetConvert() && lib_item->GetConvert() != symbeditFrame->GetConvert() )
1308  return false;
1309  }
1310 
1311  break;
1312  }
1313 
1314  case SCH_MARKER_T: // Always selectable
1315  return true;
1316 
1317  default: // Suppress warnings
1318  break;
1319  }
1320 
1321  return true;
1322 }
int GetConvert() const
The base class for drawable items used by schematic library components.
Definition: lib_item.h:61
int GetUnit() const
Definition: lib_item.h:295
int GetUnit() const
int GetConvert() const
Definition: lib_item.h:298
The symbol library editor main window.
virtual bool GetShowAllPins() const
Allow some frames to show/hide hidden pins.
SCH_BASE_FRAME * m_frame
KICAD_T Type() const
Function Type()
Definition: base_struct.h:193

References LIB_EDIT_FRAME::GetConvert(), LIB_ITEM::GetConvert(), SCH_BASE_FRAME::GetShowAllPins(), LIB_EDIT_FRAME::GetUnit(), LIB_ITEM::GetUnit(), LIB_ARC_T, LIB_BEZIER_T, LIB_CIRCLE_T, LIB_FIELD_T, LIB_PART_T, LIB_PIN_T, LIB_POLYLINE_T, LIB_RECTANGLE_T, LIB_TEXT_T, m_frame, SCH_MARKER_T, SCH_PIN_T, and EDA_ITEM::Type().

Referenced by LIB_EDIT_TOOL::DeleteItemCursor(), SelectAll(), selectMultiple(), and SelectPoint().

◆ SelectAll()

int EE_SELECTION_TOOL::SelectAll ( const TOOL_EVENT aEvent)

Select all visible items in sheet

Definition at line 566 of file ee_selection_tool.cpp.

567 {
568  m_multiple = true; // Multiple selection mode is active
569  KIGFX::VIEW* view = getView();
570 
571  // hold all visible items
572  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
573  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> sheetPins;
574 
575  // Filter the view items based on the selection box
576  BOX2I selectionBox;
577 
578  selectionBox.SetMaximum();
579  view->Query( selectionBox, selectedItems ); // Get the list of selected items
580 
581  // Sheet pins aren't in the view; add them by hand
582  for( KIGFX::VIEW::LAYER_ITEM_PAIR& pair : selectedItems )
583  {
584  SCH_SHEET* sheet = dynamic_cast<SCH_SHEET*>( pair.first );
585 
586  if( sheet )
587  {
588  int layer = pair.second;
589 
590  for( SCH_SHEET_PIN* pin : sheet->GetPins() )
591  sheetPins.emplace_back( KIGFX::VIEW::LAYER_ITEM_PAIR( pin, layer ) );
592  }
593  }
594 
595  selectedItems.insert( selectedItems.end(), sheetPins.begin(), sheetPins.end() );
596 
597  for( auto& item_pair : selectedItems )
598  {
599  if( EDA_ITEM* item = dynamic_cast<EDA_ITEM*>( item_pair.first ) )
600  {
601  if( Selectable( item ) )
602  select( item );
603  }
604  }
605 
606  m_multiple = false;
607 
608  return 0;
609 }
bool Selectable(const EDA_ITEM *aItem, bool checkVisibilityOnly=false) const
Function Selectable() Checks conditions for an item to be selected.
void select(EDA_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
void SetMaximum()
Definition: box2.h:73
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet.h:84
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:216
std::vector< SCH_SHEET_PIN * > & GetPins()
Definition: sch_sheet.h:362
std::pair< VIEW_ITEM *, int > LAYER_ITEM_PAIR
Definition: view.h:66
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159
virtual int Query(const BOX2I &aRect, std::vector< LAYER_ITEM_PAIR > &aResult) const
Function Query() Finds all visible items that touch or are within the rectangle aRect.
Definition: view.cpp:451
VIEW.
Definition: view.h:61

References SCH_SHEET::GetPins(), TOOL_BASE::getView(), m_multiple, KIGFX::VIEW::Query(), select(), Selectable(), and BOX2< Vec >::SetMaximum().

Referenced by setTransitions().

◆ SelectConnection()

int EE_SELECTION_TOOL::SelectConnection ( const TOOL_EVENT aEvent)

If node selected then expand to connection, otherwise select connection under cursor

Definition at line 929 of file ee_selection_tool.cpp.

930 {
931  static KICAD_T wiresAndBuses[] = { SCH_LINE_LOCATE_WIRE_T, SCH_LINE_LOCATE_BUS_T, EOT };
932 
933  RequestSelection( wiresAndBuses );
934 
935  if( m_selection.Empty() )
936  return 0;
937 
938  SCH_LINE* line = (SCH_LINE*) m_selection.Front();
939  EDA_ITEMS items;
940 
942  auto conns = m_frame->GetScreen()->MarkConnections( line );
943 
944  for( auto item : conns )
945  select( item );
946 
947  if( m_selection.GetSize() > 1 )
949 
950  return 0;
951 }
static const TOOL_EVENT SelectedEvent
Definition: actions.h:206
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void select(EDA_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
search types array terminator (End Of Types)
Definition: typeinfo.h:82
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
EE_SELECTION & RequestSelection(const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Function RequestSelection()
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
Definition: base_struct.h:588
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:121
virtual unsigned int GetSize() const override
Function GetSize() Returns the number of stored items.
Definition: selection.h:100
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
SCH_BASE_FRAME * m_frame
void ClearDrawingState()
Clear the state flags of all the items in the screen.
Definition: sch_screen.cpp:834
EE_SELECTION m_selection
EDA_ITEM * Front() const
Definition: selection.h:184
std::set< SCH_ITEM * > MarkConnections(SCH_LINE *aSegment)
Return all wires and junctions connected to aSegment which are not connected any component pin.
Definition: sch_screen.cpp:328

References SCH_SCREEN::ClearDrawingState(), SELECTION::Empty(), EOT, SELECTION::Front(), SCH_BASE_FRAME::GetScreen(), SELECTION::GetSize(), m_frame, m_selection, TOOL_BASE::m_toolMgr, SCH_SCREEN::MarkConnections(), TOOL_MANAGER::ProcessEvent(), RequestSelection(), SCH_LINE_LOCATE_BUS_T, SCH_LINE_LOCATE_WIRE_T, select(), and EVENTS::SelectedEvent.

Referenced by setTransitions().

◆ SelectHighlightItem()

void EE_SELECTION_TOOL::SelectHighlightItem ( EDA_ITEM aItem)
inline

Definition at line 119 of file ee_selection_tool.h.

119 { highlight( aItem, SELECTED ); }
#define SELECTED
Definition: base_struct.h:124
void highlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function highlight() Highlights the item visually.

References highlight(), and SELECTED.

Referenced by SCH_EDIT_TOOL::RefreshSymbolFromLibrary(), and SCH_EDIT_FRAME::UpdateSymbolFromEditor().

◆ selectionContains()

bool EE_SELECTION_TOOL::selectionContains ( const VECTOR2I aPoint) const
private

Function selectionContains()

Returns
True if the given point is contained in any of selected items' bounding box.

Definition at line 1471 of file ee_selection_tool.cpp.

1472 {
1473  const unsigned GRIP_MARGIN = 20;
1474  VECTOR2I margin = getView()->ToWorld( VECTOR2I( GRIP_MARGIN, GRIP_MARGIN ), false );
1475 
1476  // Check if the point is located within any of the currently selected items bounding boxes
1477  for( auto item : m_selection )
1478  {
1479  BOX2I itemBox = item->ViewBBox();
1480  itemBox.Inflate( margin.x, margin.y ); // Give some margin for gripping an item
1481 
1482  if( itemBox.Contains( aPoint ) )
1483  return true;
1484  }
1485 
1486  return false;
1487 }
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Function ToWorld() Converts a screen space point/vector to a point/vector in world space coordinates.
Definition: view.cpp:474
VECTOR2< int > VECTOR2I
Definition: vector2d.h:594
bool Contains(const Vec &aPoint) const
Function Contains.
Definition: box2.h:151
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:302
EE_SELECTION m_selection

References BOX2< Vec >::Contains(), TOOL_BASE::getView(), BOX2< Vec >::Inflate(), m_selection, KIGFX::VIEW::ToWorld(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Main().

◆ SelectionMenu()

int EE_SELECTION_TOOL::SelectionMenu ( const TOOL_EVENT aEvent)

Function SelectionMenu() Shows a popup menu to trim the COLLECTOR passed as aEvent's parameter down to a single item.

NOTE: this routine DOES NOT modify the selection.

Definition at line 1120 of file ee_selection_tool.cpp.

1121 {
1122  EE_COLLECTOR* collector = aEvent.Parameter<EE_COLLECTOR*>();
1123 
1124  if( !doSelectionMenu( collector ) )
1125  collector->m_MenuCancelled = true;
1126 
1127  return 0;
1128 }
EE_COLLECTOR.
Definition: ee_collectors.h:42
bool m_MenuCancelled
Definition: collector.h:70
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:435
bool doSelectionMenu(EE_COLLECTOR *aItems)
Allows the selection of a single item from a list via pop-up menu.

References doSelectionMenu(), COLLECTOR::m_MenuCancelled, and TOOL_EVENT::Parameter().

Referenced by setTransitions().

◆ selectMultiple()

bool EE_SELECTION_TOOL::selectMultiple ( )
private

Function selectMultiple() Handles drawing a selection box that allows one to select many items at the same time.

Returns
true if the function was cancelled (i.e. CancelEvent was received).

Definition at line 752 of file ee_selection_tool.cpp.

753 {
754  bool cancelled = false; // Was the tool cancelled while it was running?
755  m_multiple = true; // Multiple selection mode is active
756  KIGFX::VIEW* view = getView();
757 
759  view->Add( &area );
760 
761  while( TOOL_EVENT* evt = Wait() )
762  {
763  if( evt->IsCancelInteractive() || evt->IsActivate() )
764  {
765  cancelled = true;
766  break;
767  }
768 
769  if( evt->IsDrag( BUT_LEFT ) )
770  {
772  ClearSelection();
773 
774  // Start drawing a selection box
775  area.SetOrigin( evt->DragOrigin() );
776  area.SetEnd( evt->Position() );
777  area.SetAdditive( m_additive );
780 
781  view->SetVisible( &area, true );
782  view->Update( &area );
783  getViewControls()->SetAutoPan( true );
784  }
785 
786  if( evt->IsMouseUp( BUT_LEFT ) )
787  {
788  getViewControls()->SetAutoPan( false );
789 
790  // End drawing the selection box
791  view->SetVisible( &area, false );
792 
793  // Mark items within the selection box as selected
794  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
795  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> sheetPins;
796 
797  // Filter the view items based on the selection box
798  BOX2I selectionBox = area.ViewBBox();
799  view->Query( selectionBox, selectedItems ); // Get the list of selected items
800 
801  // Sheet pins aren't in the view; add them by hand
802  for( KIGFX::VIEW::LAYER_ITEM_PAIR& pair : selectedItems )
803  {
804  SCH_SHEET* sheet = dynamic_cast<SCH_SHEET*>( pair.first );
805 
806  if( sheet )
807  {
808  int layer = pair.second;
809 
810  for( SCH_SHEET_PIN* pin : sheet->GetPins() )
811  sheetPins.emplace_back( KIGFX::VIEW::LAYER_ITEM_PAIR( pin, layer ) );
812  }
813  }
814 
815  selectedItems.insert( selectedItems.end(), sheetPins.begin(), sheetPins.end() );
816 
817  int width = area.GetEnd().x - area.GetOrigin().x;
818  int height = area.GetEnd().y - area.GetOrigin().y;
819 
820  /* Selection mode depends on direction of drag-selection:
821  * Left > Right : Select objects that are fully enclosed by selection
822  * Right > Left : Select objects that are crossed by selection
823  */
824  bool windowSelection = width >= 0;
825  bool anyAdded = false;
826  bool anySubtracted = false;
827 
828  if( view->IsMirroredX() )
829  windowSelection = !windowSelection;
830 
831  // Construct an EDA_RECT to determine EDA_ITEM selection
832  EDA_RECT selectionRect( (wxPoint) area.GetOrigin(), wxSize( width, height ) );
833 
834  selectionRect.Normalize();
835 
836  for( KIGFX::VIEW::LAYER_ITEM_PAIR& pair : selectedItems )
837  {
838  EDA_ITEM* item = dynamic_cast<EDA_ITEM*>( pair.first );
839 
840  if( item && Selectable( item ) && item->HitTest( selectionRect, windowSelection ) )
841  {
842  if( m_subtractive || ( m_exclusive_or && item->IsSelected() ) )
843  {
844  unselect( item );
845  anySubtracted = true;
846  }
847  else
848  {
849  select( item );
850  item->SetFlags( STARTPOINT | ENDPOINT );
851  anyAdded = true;
852  }
853  }
854  }
855 
856  m_selection.SetIsHover( false );
857 
858  // Inform other potentially interested tools
859  if( anyAdded )
861 
862  if( anySubtracted )
864 
865  break; // Stop waiting for events
866  }
867  }
868 
869  getViewControls()->SetAutoPan( false );
870 
871  // Stop drawing the selection box
872  view->Remove( &area );
873  m_multiple = false; // Multiple selection mode is inactive
874 
875  if( !cancelled )
877 
878  return cancelled;
879 }
void ClearReferencePoint()
Definition: selection.h:250
static const TOOL_EVENT SelectedEvent
Definition: actions.h:206
void SetEnd(VECTOR2I aEnd)
Set the current end of the rectangle (the corner that moves with the cursor.
TOOL_EVENT * Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
bool IsSelected() const
Definition: base_struct.h:203
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:207
void SetOrigin(VECTOR2I aOrigin)
Set the origin of the rectange (the fixed corner)
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:375
void SetExclusiveOr(bool aExclusiveOr)
bool Selectable(const EDA_ITEM *aItem, bool checkVisibilityOnly=false) const
Function Selectable() Checks conditions for an item to be selected.
void select(EDA_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
void SetIsHover(bool aIsHover)
Definition: selection.h:66
void SetAdditive(bool aAdditive)
virtual bool HitTest(const wxPoint &aPosition, int aAccuracy=0) const
Function HitTest tests if aPosition is contained within or on the bounding box of an item.
Definition: base_struct.h:307
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:232
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
TOOL_EVENT.
Definition: tool_event.h:171
const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet.h:84
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1531
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:216
bool IsMirroredX() const
Function IsMirroredX() Returns true if view is flipped across the X axis.
Definition: view.h:230
void SetSubtractive(bool aSubtractive)
std::vector< SCH_SHEET_PIN * > & GetPins()
Definition: sch_sheet.h:362
void Normalize()
Function Normalize ensures that the height ant width are positive.
void unselect(EDA_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
std::pair< VIEW_ITEM *, int > LAYER_ITEM_PAIR
Definition: view.h:66
#define ENDPOINT
ends. (Used to support dragging.)
Definition: base_struct.h:123
EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boards.
Definition: base_struct.h:159
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1477
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:345
virtual int Query(const BOX2I &aRect, std::vector< LAYER_ITEM_PAIR > &aResult) const
Function Query() Finds all visible items that touch or are within the rectangle aRect.
Definition: view.cpp:451
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:42
VIEW.
Definition: view.h:61
EE_SELECTION m_selection
#define STARTPOINT
When a line is selected, these flags indicate which.
Definition: base_struct.h:122

References KIGFX::VIEW::Add(), BUT_LEFT, SELECTION::ClearReferencePoint(), ClearSelection(), ENDPOINT, KIGFX::PREVIEW::SELECTION_AREA::GetEnd(), KIGFX::PREVIEW::SELECTION_AREA::GetOrigin(), SCH_SHEET::GetPins(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), EDA_ITEM::HitTest(), KIGFX::VIEW::IsMirroredX(), EDA_ITEM::IsSelected(), m_additive, m_exclusive_or, m_multiple, m_selection, m_subtractive, TOOL_BASE::m_toolMgr, EDA_RECT::Normalize(), TOOL_MANAGER::ProcessEvent(), KIGFX::VIEW::Query(), KIGFX::VIEW::Remove(), select(), Selectable(), EVENTS::SelectedEvent, KIGFX::PREVIEW::SELECTION_AREA::SetAdditive(), KIGFX::VIEW_CONTROLS::SetAutoPan(), KIGFX::PREVIEW::SELECTION_AREA::SetEnd(), KIGFX::PREVIEW::SELECTION_AREA::SetExclusiveOr(), EDA_ITEM::SetFlags(), SELECTION::SetIsHover(), KIGFX::PREVIEW::SELECTION_AREA::SetOrigin(), KIGFX::PREVIEW::SELECTION_AREA::SetSubtractive(), KIGFX::VIEW::SetVisible(), STARTPOINT, unselect(), EVENTS::UnselectedEvent, KIGFX::VIEW::Update(), KIGFX::PREVIEW::SELECTION_AREA::ViewBBox(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Main().

◆ SelectNode()

int EE_SELECTION_TOOL::SelectNode ( const TOOL_EVENT aEvent)

Select node under cursor

Definition at line 919 of file ee_selection_tool.cpp.

920 {
921  VECTOR2I cursorPos = getViewControls()->GetCursorPosition( !aEvent.Modifier( MD_ALT ) );
922 
923  SelectPoint( cursorPos, nodeTypes );
924 
925  return 0;
926 }
int Modifier(int aMask=MD_MODIFIER_MASK) const
Returns information about key modifiers state (Ctrl, Alt, etc.)
Definition: tool_event.h:342
static KICAD_T nodeTypes[]
bool SelectPoint(const VECTOR2I &aWhere, const KICAD_T *aFilterList=EE_COLLECTOR::AllItems, EDA_ITEM **aItem=nullptr, bool *aSelectionCancelledFlag=nullptr, bool aCheckLocked=false, bool aAdd=false, bool aSubtract=false, bool aExclusiveOr=false)
Function SelectPoint() Selects one or all items pointed by the parameter aWhere.
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:42
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.

References KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_BASE::getViewControls(), MD_ALT, TOOL_EVENT::Modifier(), nodeTypes, and SelectPoint().

Referenced by setTransitions().

◆ SelectPoint()

bool EE_SELECTION_TOOL::SelectPoint ( const VECTOR2I aWhere,
const KICAD_T aFilterList = EE_COLLECTOR::AllItems,
EDA_ITEM **  aItem = nullptr,
bool *  aSelectionCancelledFlag = nullptr,
bool  aCheckLocked = false,
bool  aAdd = false,
bool  aSubtract = false,
bool  aExclusiveOr = false 
)

Function SelectPoint() Selects one or all items pointed by the parameter aWhere.

If there is more than one item at that place, there is a menu displayed that allows one to choose the item or all of them.

Parameters
aWhereis the place where the item should be selected.
aItemis set to the newly selected item if only one was selected, otherwise is unchanged.
aSelectionCancelledFlagallows the function to inform its caller that a selection was cancelled (for instance, by clicking outside of the disambiguation menu).
aCheckLockedindicates if locked items should be excluded.

Definition at line 450 of file ee_selection_tool.cpp.

453 {
454  EE_COLLECTOR collector;
455 
456  collector.m_Threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
457 
458  if( m_isLibEdit )
459  {
460  auto part = static_cast<LIB_EDIT_FRAME*>( m_frame )->GetCurPart();
461 
462  if( !part )
463  return false;
464 
465  collector.Collect( part->GetDrawItems(), aFilterList, (wxPoint) aWhere, m_unit, m_convert );
466  }
467  else
468  collector.Collect( m_frame->GetScreen(), aFilterList, (wxPoint) aWhere, m_unit, m_convert );
469 
470  // Post-process collected items
471  for( int i = collector.GetCount() - 1; i >= 0; --i )
472  {
473  if( !Selectable( collector[ i ] ) )
474  {
475  collector.Remove( i );
476  continue;
477  }
478 
479  if( aCheckLocked && collector[ i ]->IsLocked() )
480  {
481  collector.Remove( i );
482  continue;
483  }
484 
485  // SelectPoint, unlike other selection routines, can select line ends
486  if( collector[ i ]->Type() == SCH_LINE_T )
487  {
488  SCH_LINE* line = (SCH_LINE*) collector[ i ];
489  line->ClearFlags( STARTPOINT | ENDPOINT );
490 
491  if( HitTestPoints( line->GetStartPoint(), (wxPoint) aWhere, collector.m_Threshold ) )
492  line->SetFlags( STARTPOINT );
493  else if (HitTestPoints( line->GetEndPoint(), (wxPoint) aWhere, collector.m_Threshold ) )
494  line->SetFlags( ENDPOINT );
495  else
496  line->SetFlags( STARTPOINT | ENDPOINT );
497  }
498  }
499 
501 
502  // Apply some ugly heuristics to avoid disambiguation menus whenever possible
503  if( collector.GetCount() > 1 && !m_skip_heuristics )
504  {
505  GuessSelectionCandidates( collector, aWhere );
506  }
507 
508  // If still more than one item we're going to have to ask the user.
509  if( collector.GetCount() > 1 )
510  {
511  collector.m_MenuTitle = wxEmptyString;
512  // Must call selectionMenu via RunAction() to avoid event-loop contention
513  m_toolMgr->RunAction( EE_ACTIONS::selectionMenu, true, &collector );
514 
515  if( collector.m_MenuCancelled )
516  {
517  if( aSelectionCancelledFlag )
518  *aSelectionCancelledFlag = true;
519 
520  return false;
521  }
522  }
523 
524  if( !aAdd && !aSubtract && !aExclusiveOr )
525  ClearSelection();
526 
527  bool anyAdded = false;
528  bool anySubtracted = false;
529 
530  if( collector.GetCount() > 0 )
531  {
532  for( int i = 0; i < collector.GetCount(); ++i )
533  {
534  if( aSubtract || ( aExclusiveOr && collector[i]->IsSelected() ) )
535  {
536  unselect( collector[i] );
537  anySubtracted = true;
538  }
539  else
540  {
541  select( collector[i] );
542  anyAdded = true;
543  }
544  }
545  }
546 
547  if( anyAdded )
548  {
550 
551  if( aItem && collector.GetCount() == 1 )
552  *aItem = collector[0];
553 
554  return true;
555  }
556  else if( anySubtracted )
557  {
559  return true;
560  }
561 
562  return false;
563 }
void ClearReferencePoint()
Definition: selection.h:250
static const TOOL_EVENT SelectedEvent
Definition: actions.h:206
int m_Threshold
Definition: collector.h:67
wxPoint GetStartPoint() const
Definition: sch_line.h:94
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:207
void Collect(SCH_SCREEN *aScreen, const KICAD_T aFilterList[], const wxPoint &aPos, int aUnit=0, int aConvert=0)
Function Collect scans a EDA_ITEM using this class's Inspector method, which does the collection.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
#define HITTEST_THRESHOLD_PIXELS
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:140
EE_COLLECTOR.
Definition: ee_collectors.h:42
bool Selectable(const EDA_ITEM *aItem, bool checkVisibilityOnly=false) const
Function Selectable() Checks conditions for an item to be selected.
void select(EDA_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
void Remove(int aIndex)
Function Remove removes the item at aIndex (first position is 0);.
Definition: collector.h:130
void GuessSelectionCandidates(EE_COLLECTOR &collector, const VECTOR2I &aPos)
Apply heuristics to try and determine a single object when multiple are found under the cursor.
bool m_MenuCancelled
Definition: collector.h:70
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:101
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:232
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
wxString m_MenuTitle
Definition: collector.h:69
void unselect(EDA_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
SCH_BASE_FRAME * m_frame
bool HitTestPoints(const wxPoint &pointA, const wxPoint &pointB, double threshold)
Test, if two points are near each other.
Definition: trigo.h:171
static TOOL_ACTION selectionMenu
Runs a selection menu to select from a list of items.
Definition: ee_actions.h:67
#define ENDPOINT
ends. (Used to support dragging.)
Definition: base_struct.h:123
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:68
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:233
EE_SELECTION m_selection
#define STARTPOINT
When a line is selected, these flags indicate which.
Definition: base_struct.h:122
wxPoint GetEndPoint() const
Definition: sch_line.h:97

References EDA_ITEM::ClearFlags(), SELECTION::ClearReferencePoint(), ClearSelection(), EE_COLLECTOR::Collect(), ENDPOINT, COLLECTOR::GetCount(), SCH_LINE::GetEndPoint(), SCH_BASE_FRAME::GetScreen(), SCH_LINE::GetStartPoint(), TOOL_BASE::getView(), GuessSelectionCandidates(), HITTEST_THRESHOLD_PIXELS, HitTestPoints(), KiROUND(), m_convert, m_frame, m_isLibEdit, COLLECTOR::m_MenuCancelled, COLLECTOR::m_MenuTitle, m_selection, m_skip_heuristics, COLLECTOR::m_Threshold, TOOL_BASE::m_toolMgr, m_unit, TOOL_MANAGER::ProcessEvent(), COLLECTOR::Remove(), TOOL_MANAGER::RunAction(), SCH_LINE_T, select(), Selectable(), EVENTS::SelectedEvent, EE_ACTIONS::selectionMenu, EDA_ITEM::SetFlags(), STARTPOINT, unselect(), and EVENTS::UnselectedEvent.

Referenced by Main(), RequestSelection(), SelectNode(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ SetContextMenu()

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

Function SetContextMenu()

Assigns 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:219
void SetTool(TOOL_INTERACTIVE *aTool)
Sets a tool that is the creator of the menu.
void ScheduleContextMenu(TOOL_BASE *aTool, ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger)
Sets behaviour 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(), doSelectionMenu(), SELECTION_TOOL::doSelectionMenu(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), TOOL_MENU::ShowContextMenu(), and SCH_LINE_WIRE_BUS_TOOL::UnfoldBus().

◆ setTransitions()

void EE_SELECTION_TOOL::setTransitions ( )
overrideprivatevirtual

Sets up handlers for various events.

Implements TOOL_INTERACTIVE.

Definition at line 1490 of file ee_selection_tool.cpp.

1491 {
1493 
1498 
1504 
1506 }
int UpdateMenu(const TOOL_EVENT &aEvent)
int SelectAll(const TOOL_EVENT &aEvent)
Select all visible items in sheet
static TOOL_ACTION addItemsToSel
Selects a list of items (specified as the event parameter)
Definition: ee_actions.h:63
static TOOL_ACTION selectConnection
If current selection is a wire or bus, expand to entire connection.
Definition: ee_actions.h:53
int AddItemsToSel(const TOOL_EVENT &aEvent)
static TOOL_ACTION removeItemsFromSel
Definition: ee_actions.h:64
void Go(int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
Function Go()
static TOOL_ACTION removeItemFromSel
Definition: ee_actions.h:60
int SelectNode(const TOOL_EVENT &aEvent)
Select node under cursor
static TOOL_ACTION addItemToSel
Selects an item (specified as the event parameter).
Definition: ee_actions.h:59
int SelectConnection(const TOOL_EVENT &aEvent)
If node selected then expand to connection, otherwise select connection under cursor
static TOOL_ACTION selectionActivate
Activation of the selection tool.
Definition: ee_actions.h:46
static TOOL_ACTION clearSelection
Clears the current selection.
Definition: ee_actions.h:56
static TOOL_ACTION updateMenu
Definition: actions.h:165
int RemoveItemFromSel(const TOOL_EVENT &aEvent)
int AddItemToSel(const TOOL_EVENT &aEvent)
int SelectionMenu(const TOOL_EVENT &aEvent)
Function SelectionMenu() Shows a popup menu to trim the COLLECTOR passed as aEvent's parameter down t...
static TOOL_ACTION selectionMenu
Runs a selection menu to select from a list of items.
Definition: ee_actions.h:67
static TOOL_ACTION selectNode
Select the junction, wire or bus segment under the cursor.
Definition: ee_actions.h:49
int RemoveItemsFromSel(const TOOL_EVENT &aEvent)
static TOOL_ACTION selectAll
Definition: actions.h:73
int Main(const TOOL_EVENT &aEvent)
Function Main()

References EE_ACTIONS::addItemsToSel, AddItemsToSel(), EE_ACTIONS::addItemToSel, AddItemToSel(), EE_ACTIONS::clearSelection, ClearSelection(), TOOL_INTERACTIVE::Go(), Main(), EE_ACTIONS::removeItemFromSel, RemoveItemFromSel(), EE_ACTIONS::removeItemsFromSel, RemoveItemsFromSel(), ACTIONS::selectAll, SelectAll(), EE_ACTIONS::selectConnection, SelectConnection(), EE_ACTIONS::selectionActivate, EE_ACTIONS::selectionMenu, SelectionMenu(), EE_ACTIONS::selectNode, SelectNode(), UpdateMenu(), and ACTIONS::updateMenu.

◆ UnbrightenItem()

void EE_SELECTION_TOOL::UnbrightenItem ( EDA_ITEM aItem)

Definition at line 1046 of file ee_selection_tool.cpp.

1047 {
1048  unhighlight( aItem, BRIGHTENED );
1049 }
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:139
void unhighlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function unhighlight() Unhighlights the item visually.

References BRIGHTENED, and unhighlight().

Referenced by LIB_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), and SCH_EDITOR_CONTROL::UpdateFind().

◆ unhighlight()

void EE_SELECTION_TOOL::unhighlight ( EDA_ITEM aItem,
int  aHighlightMode,
EE_SELECTION aGroup = nullptr 
)
private

Function unhighlight() Unhighlights the item visually.

Parameters
aItemis an item to be be highlighted.
aHighlightModeshould be either SELECTED or BRIGHTENED
aGroupis the group to remove the item from.

Definition at line 1413 of file ee_selection_tool.cpp.

1414 {
1415  KICAD_T itemType = aItem->Type();
1416 
1417  if( aMode == SELECTED )
1418  aItem->ClearSelected();
1419  else if( aMode == BRIGHTENED )
1420  aItem->ClearBrightened();
1421 
1422  if( aGroup )
1423  aGroup->Remove( aItem );
1424 
1425  // Unhighlight pins and fields. (All the other component children are currently only
1426  // represented in the LIB_PART.)
1427  if( itemType == SCH_COMPONENT_T )
1428  {
1429  for( SCH_PIN* pin : static_cast<SCH_COMPONENT*>( aItem )->GetPins() )
1430  {
1431  if( aMode == SELECTED )
1432  pin->ClearSelected();
1433  else if( aMode == BRIGHTENED )
1434  pin->ClearBrightened();
1435  }
1436 
1437  for( SCH_FIELD& field : static_cast<SCH_COMPONENT*>( aItem )->GetFields() )
1438  {
1439  if( aMode == SELECTED )
1440  field.ClearSelected();
1441  else if( aMode == BRIGHTENED )
1442  field.ClearBrightened();
1443  }
1444  }
1445  else if( itemType == SCH_SHEET_T )
1446  {
1447  for( SCH_FIELD& field : static_cast<SCH_SHEET*>( aItem )->GetFields() )
1448  {
1449  if( aMode == SELECTED )
1450  field.ClearSelected();
1451  else if( aMode == BRIGHTENED )
1452  field.ClearBrightened();
1453  }
1454 
1455  for( SCH_SHEET_PIN* pin : static_cast<SCH_SHEET*>( aItem )->GetPins() )
1456  {
1457  if( aMode == SELECTED )
1458  pin->ClearSelected();
1459  else if( aMode == BRIGHTENED )
1460  pin->ClearBrightened();
1461  }
1462  }
1463 
1464  if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
1465  getView()->Update( aItem->GetParent() );
1466  else
1467  getView()->Update( aItem );
1468 }
SCH_FIELD instances are attached to a component and provide a place for the component's value,...
Definition: sch_field.h:52
void ClearSelected()
Definition: base_struct.h:211
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
void ClearBrightened()
Definition: base_struct.h:212
#define SELECTED
Definition: base_struct.h:124
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:139
EDA_ITEM * GetParent() const
Definition: base_struct.h:195
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet.h:84
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1531
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
KICAD_T Type() const
Function Type()
Definition: base_struct.h:193
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:87

References BRIGHTENED, EDA_ITEM::ClearBrightened(), EDA_ITEM::ClearSelected(), EDA_ITEM::GetParent(), TOOL_BASE::getView(), SELECTION::Remove(), SCH_COMPONENT_T, SCH_FIELD_T, SCH_PIN_T, SCH_SHEET_PIN_T, SCH_SHEET_T, SELECTED, EDA_ITEM::Type(), and KIGFX::VIEW::Update().

Referenced by ClearSelection(), doSelectionMenu(), UnbrightenItem(), and unselect().

◆ unselect()

void EE_SELECTION_TOOL::unselect ( EDA_ITEM aItem)
private

Function unselect() Takes necessary action mark an item as unselected.

Parameters
aItemis an item to be unselected.

Definition at line 1349 of file ee_selection_tool.cpp.

1350 {
1351  unhighlight( aItem, SELECTED, &m_selection );
1352 }
#define SELECTED
Definition: base_struct.h:124
EE_SELECTION m_selection
void unhighlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function unhighlight() Unhighlights the item visually.

References m_selection, SELECTED, and unhighlight().

Referenced by RemoveItemFromSel(), RemoveItemsFromSel(), RequestSelection(), selectMultiple(), and SelectPoint().

◆ UpdateMenu()

int EE_SELECTION_TOOL::UpdateMenu ( const TOOL_EVENT aEvent)

Definition at line 246 of file ee_selection_tool.cpp.

247 {
248  ACTION_MENU* actionMenu = aEvent.Parameter<ACTION_MENU*>();
249  CONDITIONAL_MENU* conditionalMenu = dynamic_cast<CONDITIONAL_MENU*>( actionMenu );
250 
251  if( conditionalMenu )
252  conditionalMenu->Evaluate( m_selection );
253 
254  if( actionMenu )
255  actionMenu->UpdateAll();
256 
257  return 0;
258 }
Defines the structure of a menu based on ACTIONs.
Definition: action_menu.h:43
void UpdateAll()
Runs update handlers for the menu and its submenus.
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:435
EE_SELECTION m_selection

References m_selection, TOOL_EVENT::Parameter(), and ACTION_MENU::UpdateAll().

Referenced by setTransitions().

◆ updateReferencePoint()

void EE_SELECTION_TOOL::updateReferencePoint ( )
private

Sets the reference point to the anchor of the top-left item.

Definition at line 736 of file ee_selection_tool.cpp.

737 {
738  VECTOR2I refP( 0, 0 );
739 
740  if( m_selection.Size() > 0 )
741  {
742  if( m_isLibEdit )
743  refP = static_cast<LIB_ITEM*>( m_selection.GetTopLeftItem() )->GetPosition();
744  else
745  refP = static_cast<SCH_ITEM*>( m_selection.GetTopLeftItem() )->GetPosition();
746  }
747 
749 }
void SetReferencePoint(const VECTOR2I &aP)
Definition: selection.h:245
EDA_ITEM * GetTopLeftItem(bool onlyModules=false) const override
int Size() const
Returns the number of selected parts.
Definition: selection.h:127
EE_SELECTION m_selection

References EE_SELECTION::GetTopLeftItem(), m_isLibEdit, m_selection, SELECTION::SetReferencePoint(), and SELECTION::Size().

Referenced by RebuildSelection(), and RequestSelection().

◆ Wait()

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

Function Wait()

Suspends 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:219
TOOL_EVENT * ScheduleWait(TOOL_BASE *aTool, const TOOL_EVENT_LIST &aConditions)
Pauses 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(), doSelectionMenu(), SELECTION_TOOL::doSelectionMenu(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), LIB_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), PAD_TOOL::EnumeratePads(), ROUTER_TOOL::InlineDrag(), ZOOM_TOOL::Main(), PL_EDIT_TOOL::Main(), CVPCB_CONTROL::Main(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), LIB_MOVE_TOOL::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), SCH_MOVE_TOOL::Main(), PCBNEW_PICKER_TOOL::Main(), EDA_3D_CONTROLLER::Main(), PICKER_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), PL_SELECTION_TOOL::Main(), Main(), SELECTION_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), PCB_VIEWER_TOOLS::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), EDIT_TOOL::pickReferencePoint(), LIB_DRAWING_TOOLS::PlaceAnchor(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), EDIT_TOOL::Remove(), PL_SELECTION_TOOL::selectMultiple(), selectMultiple(), SELECTION_TOOL::selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), SELECTION_TOOL::selectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), ZOOM_TOOL::selectRegion(), DRAWING_TOOL::SetAnchor(), SCH_DRAWING_TOOLS::SingleClickPlace(), LIB_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), and SCH_LINE_WIRE_BUS_TOOL::UnfoldBus().

Member Data Documentation

◆ m_additive

bool EE_SELECTION_TOOL::m_additive
private

Definition at line 236 of file ee_selection_tool.h.

Referenced by Main(), and selectMultiple().

◆ m_convert

int EE_SELECTION_TOOL::m_convert
private

Definition at line 245 of file ee_selection_tool.h.

Referenced by Init(), Reset(), and SelectPoint().

◆ m_exclusive_or

bool EE_SELECTION_TOOL::m_exclusive_or
private

Definition at line 238 of file ee_selection_tool.h.

Referenced by Main(), and selectMultiple().

◆ m_frame

◆ m_isLibEdit

bool EE_SELECTION_TOOL::m_isLibEdit
private

◆ m_isLibView

bool EE_SELECTION_TOOL::m_isLibView
private

Definition at line 243 of file ee_selection_tool.h.

Referenced by Init(), and Reset().

◆ m_menu

TOOL_MENU TOOL_INTERACTIVE::m_menu
protectedinherited

functions below are not yet implemented - their interface may change

Definition at line 108 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(), LIB_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), PAD_TOOL::EnumeratePads(), TOOL_INTERACTIVE::GetToolMenu(), PICKER_TOOL::Init(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Init(), PL_EDIT_TOOL::Init(), SCH_EDIT_TOOL::Init(), LIB_CONTROL::Init(), LIB_DRAWING_TOOLS::Init(), PCB_VIEWER_TOOLS::Init(), FOOTPRINT_EDITOR_TOOLS::Init(), PL_DRAWING_TOOLS::Init(), PCB_EDITOR_CONTROL::Init(), SCH_DRAWING_TOOLS::Init(), EDA_3D_CONTROLLER::Init(), GERBVIEW_SELECTION_TOOL::Init(), PL_SELECTION_TOOL::Init(), DRAWING_TOOL::Init(), Init(), EE_TOOL_BASE< SCH_BASE_FRAME >::Init(), SELECTION_TOOL::Init(), SCH_LINE_WIRE_BUS_TOOL::Init(), PCB_TOOL_BASE::Init(), PL_EDIT_TOOL::Main(), LIB_MOVE_TOOL::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), SCH_MOVE_TOOL::Main(), PCBNEW_PICKER_TOOL::Main(), EDA_3D_CONTROLLER::Main(), PICKER_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), PL_SELECTION_TOOL::Main(), Main(), SELECTION_TOOL::Main(), PCB_VIEWER_TOOLS::MeasureTool(), GERBVIEW_SELECTION_TOOL::MeasureTool(), LIB_DRAWING_TOOLS::PlaceAnchor(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), DRAWING_TOOL::SetAnchor(), SCH_DRAWING_TOOLS::SingleClickPlace(), LIB_DRAWING_TOOLS::TwoClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ m_multiple

bool EE_SELECTION_TOOL::m_multiple
private

Definition at line 239 of file ee_selection_tool.h.

Referenced by SelectAll(), and selectMultiple().

◆ m_selection

◆ m_skip_heuristics

bool EE_SELECTION_TOOL::m_skip_heuristics
private

Definition at line 240 of file ee_selection_tool.h.

Referenced by Main(), and SelectPoint().

◆ m_subtractive

bool EE_SELECTION_TOOL::m_subtractive
private

Definition at line 237 of file ee_selection_tool.h.

Referenced by Main(), and selectMultiple().

◆ m_toolId

TOOL_ID TOOL_BASE::m_toolId
protectedinherited

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

Definition at line 214 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 219 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), PL_SELECTION_TOOL::AddItemsToSel(), AddItemsToSel(), PL_SELECTION_TOOL::AddItemToSel(), AddItemToSel(), SELECTION_TOOL::AddItemToSel(), SCH_MOVE_TOOL::AlignElements(), SCH_EDITOR_CONTROL::AssignNetclass(), CVPCB_ASSOCIATION_TOOL::Associate(), TOOL_BASE::attachManager(), SCH_EDIT_TOOL::AutoplaceFields(), PCB_INSPECTION_TOOL::calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), SCH_EDIT_TOOL::ChangeTextType(), EDIT_TOOL::ChangeTrackWidth(), SCH_EDIT_TOOL::CleanupSheetPins(), PCB_INSPECTION_TOOL::ClearHighlight(), SCH_EDITOR_CONTROL::ClearHighlight(), SELECTION_TOOL::ClearSelection(), PL_SELECTION_TOOL::ClearSelection(), GERBVIEW_SELECTION_TOOL::clearSelection(), ClearSelection(), SCH_EDIT_TOOL::ConvertDeMorgan(), LIB_EDIT_TOOL::Copy(), PL_EDIT_TOOL::Copy(), PAD_TOOL::copyPadSettings(), MICROWAVE_TOOL::createInductorBetween(), PCB_INSPECTION_TOOL::CrossProbePcbToSch(), COMMON_TOOLS::CursorControl(), SCH_EDITOR_CONTROL::Cut(), LIB_EDIT_TOOL::DeleteItemCursor(), PL_EDIT_TOOL::DeleteItemCursor(), SCH_EDIT_TOOL::DeleteItemCursor(), PCBNEW_CONTROL::DeleteItemCursor(), SCH_EDITOR_CONTROL::doCopy(), SCH_EDITOR_CONTROL::doCrossProbeSchToPcb(), LIB_EDIT_TOOL::DoDelete(), SCH_EDIT_TOOL::DoDelete(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), PCB_INSPECTION_TOOL::doHideNet(), PCB_TOOL_BASE::doInteractiveItemPlacement(), EDIT_TOOL::doMoveSelection(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), COMMON_TOOLS::doZoomInOut(), COMMON_TOOLS::doZoomToPreset(), DRAWING_TOOL::DrawArc(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::DrawRectangle(), DRAWING_TOOL::drawSegment(), LIB_DRAWING_TOOLS::DrawShape(), PL_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawZone(), PCB_EDITOR_CONTROL::DrillOrigin(), LIB_EDIT_TOOL::Duplicate(), SCH_EDIT_TOOL::Duplicate(), EDIT_TOOL::Duplicate(), SCH_EDIT_TOOL::EditField(), SCH_EDIT_TOOL::editFieldText(), PCB_EDITOR_CONTROL::EditFpInFpEditor(), LIB_EDIT_TOOL::editGraphicProperties(), PAD_TOOL::EditPad(), LIB_EDIT_TOOL::editSymbolProperties(), SCH_EDITOR_CONTROL::EditWithLibEdit(), SCH_EDITOR_CONTROL::EnterSheet(), PAD_TOOL::EnumeratePads(), GLOBAL_EDIT_TOOL::ExchangeFootprints(), SELECTION_TOOL::expandConnection(), PAD_TOOL::explodePad(), SELECTION_TOOL::filterSelection(), SELECTION_TOOL::findCallback(), SCH_EDITOR_CONTROL::FindComponentAndItem(), POINT_EDITOR::finishItem(), 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(), PCBNEW_CONTROL::GridSetOrigin(), PCB_EDITOR_CONTROL::GroupEnterSelected(), PCB_EDITOR_CONTROL::GroupFlattenSelected(), PCB_EDITOR_CONTROL::GroupLeave(), PCB_EDITOR_CONTROL::GroupMergeSelected(), PCB_EDITOR_CONTROL::GroupRemoveItemsSelected(), PCB_EDITOR_CONTROL::GroupSelected(), GERBVIEW_CONTROL::HighlightControl(), PCB_INSPECTION_TOOL::HighlightItem(), PCB_INSPECTION_TOOL::HighlightNet(), SCH_EDITOR_CONTROL::HighlightNet(), PCB_INSPECTION_TOOL::highlightNet(), SCH_EDITOR_CONTROL::HighlightNetCursor(), PCB_INSPECTION_TOOL::HighlightNetTool(), FOOTPRINT_EDITOR_TOOLS::ImportFootprint(), PL_EDIT_TOOL::ImportWorksheetContent(), LIB_EDIT_TOOL::Init(), PL_EDIT_TOOL::Init(), SCH_EDIT_TOOL::Init(), CONVERT_TOOL::Init(), GLOBAL_EDIT_TOOL::Init(), LIB_CONTROL::Init(), PAD_TOOL::Init(), PCB_INSPECTION_TOOL::Init(), ALIGN_DISTRIBUTE_TOOL::Init(), PL_DRAWING_TOOLS::Init(), PL_POINT_EDITOR::Init(), POINT_EDITOR::Init(), PCB_EDITOR_CONTROL::Init(), POSITION_RELATIVE_TOOL::Init(), EE_TOOL_BASE< SCH_BASE_FRAME >::Init(), EDIT_TOOL::Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), PCB_INSPECTION_TOOL::InspectClearance(), EDIT_TOOL::invokeInlineRouter(), EDIT_TOOL::isInteractiveDragEnabled(), EDIT_TOOL::isRouterActive(), TOOL_BASE::IsToolActive(), SCH_EDITOR_CONTROL::LeaveSheet(), COMMON_CONTROL::ListHotKeys(), PCB_INSPECTION_TOOL::LocalRatsnestTool(), PL_EDIT_TOOL::Main(), CVPCB_CONTROL::Main(), LIB_MOVE_TOOL::Main(), SCH_MOVE_TOOL::Main(), PCBNEW_PICKER_TOOL::Main(), PL_SELECTION_TOOL::Main(), Main(), SELECTION_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), PCB_VIEWER_TOOLS::MeasureTool(), LIB_EDIT_TOOL::Mirror(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::Mirror(), PCB_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::MoveExact(), LIB_CONTROL::OnDeMorgan(), COMMON_TOOLS::OnGridChanged(), POINT_EDITOR::OnSelectionChange(), LIB_EDIT_TOOL::Paste(), PL_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), PAD_TOOL::pastePadProperties(), EDIT_TOOL::pickReferencePoint(), LIB_EDIT_TOOL::PinTable(), PCBNEW_CONTROL::placeBoardItems(), SCH_DRAWING_TOOLS::PlaceComponent(), SCH_DRAWING_TOOLS::PlaceImage(), DRAWING_TOOL::PlaceImportedGraphics(), PL_DRAWING_TOOLS::PlaceItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), PCBNEW_CONTROL::Print(), GERBVIEW_CONTROL::Print(), LIB_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), RebuildSelection(), LIB_EDIT_TOOL::Redo(), SCH_EDITOR_CONTROL::Redo(), SCH_EDIT_TOOL::RefreshSymbolFromLibrary(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), EDIT_TOOL::Remove(), POINT_EDITOR::removeCorner(), PL_SELECTION_TOOL::RemoveItemFromSel(), RemoveItemFromSel(), SELECTION_TOOL::RemoveItemFromSel(), PL_SELECTION_TOOL::RemoveItemsFromSel(), RemoveItemsFromSel(), SCH_EDIT_TOOL::RepeatDrawItem(), LIB_DRAWING_TOOLS::RepeatDrawItem(), RequestSelection(), SELECTION_TOOL::RequestSelection(), COMMON_TOOLS::Reset(), PNS::TOOL_BASE::Reset(), EDA_3D_CONTROLLER::Reset(), COMMON_TOOLS::ResetLocalCoords(), TOOL_INTERACTIVE::resetTransitions(), LIB_EDIT_TOOL::Rotate(), SCH_EDIT_TOOL::Rotate(), EDIT_TOOL::Rotate(), TOOL_INTERACTIVE::RunMainStack(), DRC_TOOL::RunTests(), SelectConnection(), PCB_TOOL_BASE::selection(), COMMON_TOOLS::SelectionTool(), GERBVIEW_SELECTION_TOOL::SelectItem(), GERBVIEW_SELECTION_TOOL::SelectItems(), SELECTION_TOOL::SelectItems(), PL_SELECTION_TOOL::selectMultiple(), selectMultiple(), SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectNet(), PL_SELECTION_TOOL::SelectPoint(), GERBVIEW_SELECTION_TOOL::selectPoint(), SelectPoint(), SELECTION_TOOL::selectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), SELECTION_TOOL::selectSameSheet(), SELECTION_TOOL::selectSheetContents(), DRAWING_TOOL::SetAnchor(), TOOL_INTERACTIVE::SetContextMenu(), EDA_3D_CONTROLLER::SetMaterial(), DRC_TOOL::ShowDRCDialog(), SCH_DRAWING_TOOLS::SingleClickPlace(), EDA_3D_CONTROLLER::ToggleVisibility(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), LIB_DRAWING_TOOLS::TwoClickPlace(), SCH_DRAWING_TOOLS::TwoClickPlace(), LIB_EDIT_TOOL::Undo(), SCH_EDITOR_CONTROL::Undo(), PCB_EDITOR_CONTROL::UngroupSelected(), GERBVIEW_SELECTION_TOOL::UnselectItem(), GERBVIEW_SELECTION_TOOL::UnselectItems(), SELECTION_TOOL::UnselectItems(), PNS::TOOL_BASE::updateEndItem(), EE_INSPECTION_TOOL::UpdateMessagePanel(), GERBVIEW_CONTROL::UpdateMessagePanel(), PL_EDITOR_CONTROL::UpdateMessagePanel(), PCBNEW_CONTROL::UpdateMessagePanel(), PCB_INSPECTION_TOOL::UpdateSelectionRatsnest(), PNS::TOOL_BASE::updateStartItem(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), TOOL_INTERACTIVE::Wait(), PCB_EDITOR_CONTROL::ZoneDuplicate(), and PCB_EDITOR_CONTROL::ZoneMerge().

◆ m_toolName

std::string TOOL_BASE::m_toolName
protectedinherited

Name of the tool.

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

Definition at line 218 of file tool_base.h.

Referenced by TOOL_BASE::GetName().

◆ m_type

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

Stores the type of the tool.

Definition at line 211 of file tool_base.h.

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

◆ m_unit

int EE_SELECTION_TOOL::m_unit
private

Definition at line 244 of file ee_selection_tool.h.

Referenced by Init(), Reset(), and SelectPoint().


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