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...
 
void OnIdle (wxIdleEvent &aEvent)
 
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() This overload of SelectPoint will create an EE_COLLECTOR and collect hits at location aWhere before calling the primary SelectPoint method. 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 collectHits (EE_COLLECTOR &aCollector, const VECTOR2I &aWhere, const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
 Function CollectHits() Selects one or more items at the location given by parameter aWhere. More...
 
void narrowSelection (EE_COLLECTOR &collector, const VECTOR2I &aWhere, bool aCheckLocked)
 Applies rules to narrow the collection down to selectable objects, and then heuristics to try and narrow it to a single object. More...
 
bool selectPoint (EE_COLLECTOR &aCollector, EDA_ITEM **aItem=nullptr, bool *aSelectionCancelledFlag=nullptr, bool aAdd=false, bool aSubtract=false, bool aExclusiveOr=false)
 Function SelectPoint() This is the primary SelectPoint method that will prompt the user with a menu to disambiguate multiple selections and then finish by adding, subtracting or toggling the item(s) to the actual selection group. More...
 
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
 
KICURSOR m_nonModifiedCursor
 
bool m_isSymbolEditor
 
bool m_isLibView
 
int m_unit
 
int m_convert
 

Detailed Description

Definition at line 54 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 ),
109  m_isSymbolEditor( false ),
110  m_isLibView( false ),
111  m_unit( 0 ),
112  m_convert( 0 )
113 {
114  m_selection.Clear();
115 }
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:94
TOOL_INTERACTIVE(TOOL_ID aId, const std::string &aName)
Constructor.
SCH_BASE_FRAME * m_frame
EE_SELECTION m_selection

References ARROW, SELECTION::Clear(), and m_selection.

◆ ~EE_SELECTION_TOOL()

EE_SELECTION_TOOL::~EE_SELECTION_TOOL ( )

Definition at line 118 of file ee_selection_tool.cpp.

119 {
120  getView()->Remove( &m_selection );
121 }
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:357
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(), LIB_MOVE_TOOL::Main(), PL_POINT_EDITOR::Main(), SCH_MOVE_TOOL::Main(), PCBNEW_PICKER_TOOL::Main(), PICKER_TOOL::Main(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), LIB_TREE::onContextMenu(), POINT_EDITOR::OnSelectionChange(), GROUP_TOOL::PickNewMember(), 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 1225 of file ee_selection_tool.cpp.

1226 {
1227  AddItemsToSel( aEvent.Parameter<EDA_ITEMS*>(), false );
1228  m_selection.SetIsHover( false );
1229  return 0;
1230 }
int AddItemsToSel(const TOOL_EVENT &aEvent)
void SetIsHover(bool aIsHover)
Definition: selection.h:65
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:435
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
Definition: eda_item.h:576
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 1233 of file ee_selection_tool.cpp.

1234 {
1235  if( aList )
1236  {
1237  for( EDA_ITEM* item : *aList )
1238  select( item );
1239 
1240  // Inform other potentially interested tools
1241  if( !aQuietMode )
1243  }
1244 }
static const TOOL_EVENT SelectedEvent
Definition: actions.h:208
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: eda_item.h:148

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 1212 of file ee_selection_tool.cpp.

1213 {
1214  if( aItem )
1215  {
1216  select( aItem );
1217 
1218  // Inform other potentially interested tools
1219  if( !aQuietMode )
1221  }
1222 }
static const TOOL_EVENT SelectedEvent
Definition: actions.h:208
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 1290 of file ee_selection_tool.cpp.

1291 {
1292  highlight( aItem, BRIGHTENED );
1293 }
#define BRIGHTENED
item is drawn with a bright contour
Definition: eda_item.h:129
void highlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function highlight() Highlights the item visually.

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 1302 of file ee_selection_tool.cpp.

1303 {
1304  ClearSelection();
1305 
1306  return 0;
1307 }

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 1563 of file ee_selection_tool.cpp.

1564 {
1565  if( m_selection.Empty() )
1566  return;
1567 
1568  while( m_selection.GetSize() )
1570 
1571  getView()->Update( &m_selection );
1572 
1573  m_selection.SetIsHover( false );
1575 
1576  // Inform other potentially interested tools
1578 }
void ClearReferencePoint()
Definition: selection.h:267
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
void SetIsHover(bool aIsHover)
Definition: selection.h:65
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
#define SELECTED
Definition: eda_item.h:113
static const TOOL_EVENT ClearedEvent
Definition: actions.h:210
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:120
virtual unsigned int GetSize() const override
Function GetSize() Returns the number of stored items.
Definition: selection.h:99
EDA_ITEM is a base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:148
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:201
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1513

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().

◆ collectHits()

bool EE_SELECTION_TOOL::collectHits ( EE_COLLECTOR aCollector,
const VECTOR2I aWhere,
const KICAD_T aFilterList = EE_COLLECTOR::AllItems 
)
private

Function CollectHits() Selects one or more items at the location given by parameter aWhere.

This method does not attempt to disambiguate multiple items and is simply "collecting"

Parameters
aCollectoris the collector object that will store found item(s)
aWhereis the place where the item should be selected.
aFilterListis a list of items that are acceptable for collection
aCheckLockedindicates if locked items should be excluded.

Definition at line 621 of file ee_selection_tool.cpp.

623 {
624  aCollector.m_Threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
625 
626  if( m_isSymbolEditor )
627  {
628  LIB_PART* part = static_cast<SYMBOL_EDIT_FRAME*>( m_frame )->GetCurPart();
629 
630  if( !part )
631  return false;
632 
633  aCollector.Collect( part->GetDrawItems(), aFilterList, (wxPoint) aWhere, m_unit,
634  m_convert );
635  }
636  else
637  {
638  aCollector.Collect( m_frame->GetScreen(), aFilterList, (wxPoint) aWhere, m_unit,
639  m_convert );
640  }
641 
642  return aCollector.GetCount() > 0;
643 }
int m_Threshold
Definition: collector.h:66
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
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:104
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
Define a library symbol object.
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
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(), LIB_PART::GetDrawItems(), SCH_BASE_FRAME::GetScreen(), TOOL_BASE::getView(), HITTEST_THRESHOLD_PIXELS, KiROUND(), m_convert, m_frame, m_isSymbolEditor, COLLECTOR::m_Threshold, and m_unit.

Referenced by Main(), and SelectPoint().

◆ 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 1363 of file ee_selection_tool.cpp.

1364 {
1365  EDA_ITEM* current = nullptr;
1366  bool selectAll = false;
1367  bool expandSelection = false;
1368 
1369  do
1370  {
1372  if( expandSelection )
1373  aCollector->Combine();
1374 
1375  expandSelection = false;
1376 
1377  int limit = std::min( 9, aCollector->GetCount() );
1378  ACTION_MENU menu( true );
1379 
1380  for( int i = 0; i < limit; ++i )
1381  {
1382  wxString text;
1383  EDA_ITEM* item = ( *aCollector )[i];
1384  text = item->GetSelectMenuText( m_frame->GetUserUnits() );
1385 
1386  wxString menuText = wxString::Format( "&%d. %s\t%d", i + 1, text, i + 1 );
1387  menu.Add( menuText, i + 1, item->GetMenuImage() );
1388  }
1389 
1390  menu.AppendSeparator();
1391  menu.Add( _( "Select &All\tA" ), limit + 1, net_highlight_schematic_xpm );
1392 
1393  if( !expandSelection && aCollector->HasAdditionalItems() )
1394  menu.Add( _( "&Expand Selection\tE" ), limit + 2, nullptr );
1395 
1396  if( aCollector->m_MenuTitle.Length() )
1397  {
1398  menu.SetTitle( aCollector->m_MenuTitle );
1399  menu.SetIcon( info_xpm );
1400  menu.DisplayTitle( true );
1401  }
1402  else
1403  {
1404  menu.DisplayTitle( false );
1405  }
1406 
1407  SetContextMenu( &menu, CMENU_NOW );
1408 
1409  while( TOOL_EVENT* evt = Wait() )
1410  {
1411  if( evt->Action() == TA_CHOICE_MENU_UPDATE )
1412  {
1413  if( selectAll )
1414  {
1415  for( int i = 0; i < aCollector->GetCount(); ++i )
1416  unhighlight( ( *aCollector )[i], BRIGHTENED );
1417  }
1418  else if( current )
1419  {
1420  unhighlight( current, BRIGHTENED );
1421  }
1422 
1423  int id = *evt->GetCommandId();
1424 
1425  // User has pointed an item, so show it in a different way
1426  if( id > 0 && id <= limit )
1427  {
1428  current = ( *aCollector )[id - 1];
1429  highlight( current, BRIGHTENED );
1430  }
1431  else
1432  {
1433  current = nullptr;
1434  }
1435 
1436  // User has pointed on the "Select All" option
1437  if( id == limit + 1 )
1438  {
1439  for( int i = 0; i < aCollector->GetCount(); ++i )
1440  highlight( ( *aCollector )[i], BRIGHTENED );
1441  selectAll = true;
1442  }
1443  else
1444  {
1445  selectAll = false;
1446  }
1447  }
1448  else if( evt->Action() == TA_CHOICE_MENU_CHOICE )
1449  {
1450  if( selectAll )
1451  {
1452  for( int i = 0; i < aCollector->GetCount(); ++i )
1453  unhighlight( ( *aCollector )[i], BRIGHTENED );
1454  }
1455  else if( current )
1456  unhighlight( current, BRIGHTENED );
1457 
1458  OPT<int> id = evt->GetCommandId();
1459 
1460  // User has selected the "Select All" option
1461  if( id == limit + 1 )
1462  {
1463  selectAll = true;
1464  current = nullptr;
1465  }
1466  // User has selected an item, so this one will be returned
1467  else if( id && ( *id > 0 ) && ( *id <= limit ) )
1468  {
1469  selectAll = false;
1470  current = ( *aCollector )[*id - 1];
1471  }
1472  else
1473  {
1474  selectAll = false;
1475  current = nullptr;
1476  }
1477  }
1478  else if( evt->Action() == TA_CHOICE_MENU_CLOSED )
1479  {
1480  break;
1481  }
1482 
1483  getView()->UpdateItems();
1484  m_frame->GetCanvas()->Refresh();
1485  }
1486  } while( expandSelection );
1487 
1488  if( selectAll )
1489  return true;
1490  else if( current )
1491  {
1492  unhighlight( current, BRIGHTENED );
1493 
1494  getView()->UpdateItems();
1495  m_frame->GetCanvas()->Refresh();
1496 
1497  aCollector->Empty();
1498  aCollector->Append( current );
1499  return true;
1500  }
1501 
1502  return false;
1503 }
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()
#define BRIGHTENED
item is drawn with a bright contour
Definition: eda_item.h:129
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]
void UpdateItems()
Function UpdateItems() Iterates through the list of items that asked for updating and updates them.
Definition: view.cpp:1394
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, const CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
#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...
Definition: eda_item.cpp:123
EDA_ITEM is a base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:148
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.
Definition: eda_item.cpp:221
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: eda_item.h:148

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 1149 of file ee_selection_tool.cpp.

1150 {
1151  EE_COLLECTOR collector;
1152 
1153  //TODO(snh): Reimplement after exposing KNN interface
1154  int thresholdMax = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
1155 
1156  for( int threshold : { 0, thresholdMax/2, thresholdMax } )
1157  {
1158  collector.m_Threshold = threshold;
1159  collector.Collect( m_frame->GetScreen(), nodeTypes, (wxPoint) aPosition );
1160 
1161  if( collector.GetCount() > 0 )
1162  break;
1163  }
1164 
1165  return collector.GetCount() ? collector[ 0 ] : nullptr;
1166 }
int m_Threshold
Definition: collector.h:66
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:104
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:290
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::CheckSymbol(), PL_SELECTION_TOOL::ClearSelection(), ClearSelection(), collectHits(), 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(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::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(), 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(), PL_POINT_EDITOR::updateItem(), POINT_EDITOR::updateItem(), EE_TOOL_BASE< SCH_BASE_FRAME >::updateItem(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), EE_POINT_EDITOR::updateParentItem(), EE_POINT_EDITOR::updatePoints(), PL_POINT_EDITOR::updatePoints(), POINT_EDITOR::updatePoints(), SELECTION_TOOL::updateSelection(), PNS::TOOL_BASE::updateStartItem(), 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:292

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(), EDIT_TOOL::copyToClipboard(), SCH_DRAWING_TOOLS::createSheetPin(), COMMON_TOOLS::CursorControl(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), EDIT_TOOL::doMoveSelection(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), COMMON_TOOLS::doZoomToPreset(), 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(), LIB_MOVE_TOOL::Main(), PL_POINT_EDITOR::Main(), SCH_MOVE_TOOL::Main(), PCBNEW_PICKER_TOOL::Main(), PICKER_TOOL::Main(), ROUTER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::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(), 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 ZOOM_TOOL::setTransitions(), AUTOPLACE_TOOL::setTransitions(), LENGTH_TUNER_TOOL::setTransitions(), PCB_REANNOTATE_TOOL::setTransitions(), GERBVIEW_INSPECTION_TOOL::setTransitions(), ROUTER_TOOL::setTransitions(), LIB_PIN_TOOL::setTransitions(), SCH_NAVIGATE_TOOL::setTransitions(), LIB_MOVE_TOOL::setTransitions(), PL_DRAWING_TOOLS::setTransitions(), EE_POINT_EDITOR::setTransitions(), PL_POINT_EDITOR::setTransitions(), COMMON_CONTROL::setTransitions(), ZONE_FILLER_TOOL::setTransitions(), EE_INSPECTION_TOOL::setTransitions(), KICAD_MANAGER_CONTROL::setTransitions(), CONVERT_TOOL::setTransitions(), DRC_TOOL::setTransitions(), PCB_VIEWER_TOOLS::setTransitions(), POINT_EDITOR::setTransitions(), LIB_DRAWING_TOOLS::setTransitions(), MICROWAVE_TOOL::setTransitions(), GLOBAL_EDIT_TOOL::setTransitions(), GERBVIEW_CONTROL::setTransitions(), PAD_TOOL::setTransitions(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::setTransitions(), SCH_MOVE_TOOL::setTransitions(), GROUP_TOOL::setTransitions(), PL_EDITOR_CONTROL::setTransitions(), LIB_CONTROL::setTransitions(), LIB_EDIT_TOOL::setTransitions(), SCH_DRAWING_TOOLS::setTransitions(), PL_EDIT_TOOL::setTransitions(), FOOTPRINT_EDITOR_TOOLS::setTransitions(), GERBVIEW_SELECTION_TOOL::setTransitions(), SCH_EDIT_TOOL::setTransitions(), POSITION_RELATIVE_TOOL::setTransitions(), PCBNEW_CONTROL::setTransitions(), EDA_3D_CONTROLLER::setTransitions(), ALIGN_DISTRIBUTE_TOOL::setTransitions(), COMMON_TOOLS::setTransitions(), CVPCB_CONTROL::setTransitions(), CVPCB_ASSOCIATION_TOOL::setTransitions(), SCH_LINE_WIRE_BUS_TOOL::setTransitions(), PCBNEW_PICKER_TOOL::setTransitions(), PICKER_TOOL::setTransitions(), PCB_INSPECTION_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 812 of file ee_selection_tool.cpp.

813 {
814  // There are certain parent/child and enclosure combinations that can be handled
815  // automatically.
816 
817  // Prefer exact hits to sloppy ones
818  int exactHits = 0;
819 
820  for( int i = collector.GetCount() - 1; i >= 0; --i )
821  {
822  EDA_ITEM* item = collector[ i ];
823 
824  if( item->HitTest( (wxPoint) aPos, 0 ) )
825  exactHits++;
826  }
827 
828  if( exactHits > 0 && exactHits < collector.GetCount() )
829  {
830  for( int i = collector.GetCount() - 1; i >= 0; --i )
831  {
832  EDA_ITEM* item = collector[ i ];
833 
834  if( !item->HitTest( (wxPoint) aPos, 0 ) )
835  collector.Transfer( item );
836  }
837  }
838 
839  // Prefer a non-sheet to a sheet
840  for( int i = 0; collector.GetCount() == 2 && i < 2; ++i )
841  {
842  EDA_ITEM* item = collector[ i ];
843  EDA_ITEM* other = collector[ ( i + 1 ) % 2 ];
844 
845  if( item->Type() != SCH_SHEET_T && other->Type() == SCH_SHEET_T )
846  collector.Transfer( other );
847  }
848 
849  // Prefer a symbol to a pin or the opposite, when both a symbol and a pin are selected
850  // We need to be able to select only a pin:
851  // - to display its characteristics (especially if an ERC is attached to the pin)
852  // - for cross probing, to select the corresponding pad.
853  // Note also the case happens only in schematic editor. In symbol editor, the symbol
854  // itself is never selected
855  for( int i = 0; collector.GetCount() == 2 && i < 2; ++i )
856  {
857  SCH_ITEM* item = collector[i];
858  SCH_ITEM* other = collector[( i + 1 ) % 2];
859 
860  if( item->Type() == SCH_COMPONENT_T && other->Type() == SCH_PIN_T )
861  {
862  // Make sure we aren't clicking on the pin anchor itself, only the rest of the
863  // pin should select the symbol with this setting
864  // To avoid conflict with the auto-start wires option
865  EE_GRID_HELPER grid( m_toolMgr );
866  wxPoint cursorPos = wxPoint( grid.BestSnapAnchor( aPos, nullptr ) );
867 
869  && !other->IsPointClickableAnchor( cursorPos ) )
870  {
871  collector.Transfer( other );
872  }
873  else
874  {
875  collector.Transfer( item );
876  }
877  }
878  }
879 
880  // Prefer a field to a symbol
881  for( int i = 0; collector.GetCount() == 2 && i < 2; ++i )
882  {
883  EDA_ITEM* item = collector[ i ];
884  EDA_ITEM* other = collector[ ( i + 1 ) % 2 ];
885 
886  if( item->Type() == SCH_FIELD_T && other->Type() == SCH_COMPONENT_T )
887  collector.Transfer( other );
888  }
889 
890  // No need for multiple wires at a single point; if there's a junction select that;
891  // otherwise any of the wires will do
892  bool junction = false;
893  bool wiresOnly = true;
894 
895  for( EDA_ITEM* item : collector )
896  {
897  if( item->Type() == SCH_JUNCTION_T )
898  junction = true;
899  else if( item->Type() != SCH_LINE_T )
900  wiresOnly = false;
901  }
902 
903  if( wiresOnly )
904  {
905  for( int j = collector.GetCount() - 1; j >= 0; --j )
906  {
907  if( junction && collector[ j ]->Type() != SCH_JUNCTION_T )
908  collector.Transfer( j );
909  else if( !junction && j > 0 )
910  collector.Transfer( j );
911  }
912  }
913 
914  // Construct a tight box (1/2 height and width) around the center of the closest item.
915  // All items which exist at least partly outside this box have sufficient other areas
916  // for selection and can be dropped.
917  EDA_ITEM* closest = nullptr;
918  int closestDist = INT_MAX;
919 
920  for( EDA_ITEM* item : collector )
921  {
922  int dist = EuclideanNorm( item->GetBoundingBox().GetCenter() - (wxPoint) aPos );
923 
924  if( dist < closestDist )
925  {
926  closestDist = dist;
927  closest = item;
928  }
929  }
930 
931  if( closest ) // Don't try and get a tight bbox if nothing is near the mouse pointer
932  {
933  EDA_RECT tightBox = closest->GetBoundingBox();
934  tightBox.Inflate( -tightBox.GetWidth() / 4, -tightBox.GetHeight() / 4 );
935 
936  for( int i = collector.GetCount() - 1; i >= 0; --i )
937  {
938  EDA_ITEM* item = collector[i];
939 
940  if( item == closest )
941  continue;
942 
943  if( !item->HitTest( tightBox, true ) )
944  collector.Transfer( item );
945  }
946  }
947 }
double EuclideanNorm(const wxPoint &vector)
Euclidean norm of a 2D vector.
Definition: trigo.h:134
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
int GetWidth() const
Definition: eda_rect.h:119
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: eda_item.h:295
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:104
void Transfer(int aIndex)
Moves the item at aIndex (first position is 0) to the backup list.
Definition: collector.h:175
int GetHeight() const
Definition: eda_rect.h:120
virtual bool IsPointClickableAnchor(const wxPoint &aPos) const
Definition: sch_item.h:388
SCH_BASE_FRAME * m_frame
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: eda_item.h:148
virtual const EDA_RECT GetBoundingBox() const
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes.
Definition: eda_item.cpp:89
const wxPoint GetCenter() const
Definition: eda_rect.h:117
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:194
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
Definition: eda_rect.cpp:363
KICAD_T Type() const
Function Type()
Definition: eda_item.h:181

References EE_GRID_HELPER::BestSnapAnchor(), SCH_BASE_FRAME::eeconfig(), EuclideanNorm(), EDA_ITEM::GetBoundingBox(), COLLECTOR::GetCount(), EDA_RECT::GetHeight(), EDA_RECT::GetWidth(), EDA_ITEM::HitTest(), EDA_RECT::Inflate(), SCH_ITEM::IsPointClickableAnchor(), m_frame, m_isSymbolEditor, EESCHEMA_SETTINGS::m_Selection, TOOL_BASE::m_toolMgr, 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 narrowSelection().

◆ 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 1593 of file ee_selection_tool.cpp.

1594 {
1595  KICAD_T itemType = aItem->Type();
1596 
1597  if( aMode == SELECTED )
1598  aItem->SetSelected();
1599  else if( aMode == BRIGHTENED )
1600  aItem->SetBrightened();
1601 
1602  if( aGroup )
1603  aGroup->Add( aItem );
1604 
1605  // Highlight pins and fields. (All the other component children are currently only
1606  // represented in the LIB_PART and will inherit the settings of the parent component.)
1607  if( SCH_ITEM* sch_item = dynamic_cast<SCH_ITEM*>( aItem ) )
1608  {
1609  sch_item->RunOnChildren(
1610  [&]( SCH_ITEM* aChild )
1611  {
1612  if( aMode == SELECTED )
1613  aChild->SetSelected();
1614  else if( aMode == BRIGHTENED )
1615  aChild->SetSelected();
1616  } );
1617  }
1618 
1619  if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
1620  getView()->Update( aItem->GetParent() );
1621  else
1622  getView()->Update( aItem );
1623 }
void SetBrightened()
Definition: eda_item.h:197
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:75
#define BRIGHTENED
item is drawn with a bright contour
Definition: eda_item.h:129
void SetSelected()
Definition: eda_item.h:196
#define SELECTED
Definition: eda_item.h:113
EDA_ITEM * GetParent() const
Definition: eda_item.h:183
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:194
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1513
KICAD_T Type() const
Function Type()
Definition: eda_item.h:181

References SELECTION::Add(), BRIGHTENED, EDA_ITEM::GetParent(), TOOL_BASE::getView(), SCH_FIELD_T, SCH_PIN_T, SCH_SHEET_PIN_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 127 of file ee_selection_tool.cpp.

128 {
129  m_frame = getEditFrame<SCH_BASE_FRAME>();
130 
131  LIB_VIEW_FRAME* libViewFrame = dynamic_cast<LIB_VIEW_FRAME*>( m_frame );
132  SYMBOL_EDIT_FRAME* symbolEditorFrame = dynamic_cast<SYMBOL_EDIT_FRAME*>( m_frame );
133 
134  if( symbolEditorFrame )
135  {
136  m_isSymbolEditor = true;
137  m_unit = symbolEditorFrame->GetUnit();
138  m_convert = symbolEditorFrame->GetConvert();
139  }
140  else
141  {
142  m_isLibView = libViewFrame != nullptr;
143  }
144 
145  static KICAD_T wireOrBusTypes[] = { SCH_LINE_LOCATE_WIRE_T, SCH_LINE_LOCATE_BUS_T, EOT };
146  static KICAD_T connectedTypes[] = { SCH_LINE_LOCATE_WIRE_T, SCH_LINE_LOCATE_BUS_T,
149 
150  auto wireSelection = E_C::MoreThan( 0 ) && E_C::OnlyType( SCH_LINE_LOCATE_WIRE_T );
151  auto busSelection = E_C::MoreThan( 0 ) && E_C::OnlyType( SCH_LINE_LOCATE_BUS_T );
152  auto wireOrBusSelection = E_C::MoreThan( 0 ) && E_C::OnlyTypes( wireOrBusTypes );
153  auto connectedSelection = E_C::MoreThan( 0 ) && E_C::OnlyTypes( connectedTypes );
154  auto sheetSelection = E_C::Count( 1 ) && E_C::OnlyType( SCH_SHEET_T );
155 
156  auto schEditCondition =
157  [this] ( const SELECTION& aSel )
158  {
159  return !m_isSymbolEditor && !m_isLibView;
160  };
161 
162  auto belowRootSheetCondition =
163  [&]( const SELECTION& aSel )
164  {
165  SCH_EDIT_FRAME* schEditFrame = dynamic_cast<SCH_EDIT_FRAME*>( m_frame );
166 
167  return ( schEditFrame&&
168  schEditFrame->GetCurrentSheet().Last() !=
169  &schEditFrame->Schematic().Root() );
170  };
171 
172  auto havePartCondition =
173  [&]( const SELECTION& sel )
174  {
175  return m_isSymbolEditor && static_cast<SYMBOL_EDIT_FRAME*>( m_frame )->GetCurPart();
176  };
177 
178  auto& menu = m_menu.GetMenu();
179 
180  menu.AddItem( EE_ACTIONS::enterSheet, sheetSelection && EE_CONDITIONS::Idle, 1 );
181  menu.AddItem( EE_ACTIONS::explicitCrossProbe, sheetSelection && EE_CONDITIONS::Idle, 1 );
182  menu.AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition, 1 );
183 
184  menu.AddSeparator( 100 );
185  menu.AddItem( EE_ACTIONS::drawWire, schEditCondition && EE_CONDITIONS::Empty, 100 );
186  menu.AddItem( EE_ACTIONS::drawBus, schEditCondition && EE_CONDITIONS::Empty, 100 );
187 
188  menu.AddSeparator( 100 );
190 
191  menu.AddSeparator( 100 );
193 
194  menu.AddSeparator( 200 );
195  menu.AddItem( EE_ACTIONS::selectConnection, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
196  menu.AddItem( EE_ACTIONS::placeJunction, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
197  menu.AddItem( EE_ACTIONS::placeLabel, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
198  menu.AddItem( EE_ACTIONS::placeGlobalLabel, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
199  menu.AddItem( EE_ACTIONS::placeHierLabel, wireOrBusSelection && EE_CONDITIONS::Idle, 250 );
200  menu.AddItem( EE_ACTIONS::breakWire, wireSelection && EE_CONDITIONS::Idle, 250 );
201  menu.AddItem( EE_ACTIONS::breakBus, busSelection && EE_CONDITIONS::Idle, 250 );
202  menu.AddItem( EE_ACTIONS::importSheetPin, sheetSelection && EE_CONDITIONS::Idle, 250 );
203  menu.AddItem( EE_ACTIONS::assignNetclass, connectedSelection && EE_CONDITIONS::Idle, 250 );
204  menu.AddItem( EE_ACTIONS::editPageNumber, E_C::Empty || sheetSelection, 250 );
205 
206  menu.AddSeparator( 400 );
207  menu.AddItem( EE_ACTIONS::symbolProperties, havePartCondition && EE_CONDITIONS::Empty, 400 );
208  menu.AddItem( EE_ACTIONS::pinTable, havePartCondition && EE_CONDITIONS::Empty, 400 );
209 
210  menu.AddSeparator( 1000 );
212 
213  return true;
214 }
static TOOL_ACTION editPageNumber
Definition: ee_actions.h:155
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
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
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
static TOOL_ACTION drawWire
Definition: ee_actions.h:79
static TOOL_ACTION explicitCrossProbe
Definition: ee_actions.h:198
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:102
SCH_BASE_FRAME * m_frame
static TOOL_ACTION assignNetclass
Definition: ee_actions.h:152
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
The symbol library editor main window.

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, EE_ACTIONS::editPageNumber, SELECTION_CONDITIONS::Empty(), EE_ACTIONS::enterSheet, EOT, EE_ACTIONS::explicitCrossProbe, EE_ACTIONS::finishBus, EE_ACTIONS::finishWire, SYMBOL_EDIT_FRAME::GetConvert(), SCH_EDIT_FRAME::GetCurrentSheet(), TOOL_MENU::GetMenu(), SYMBOL_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_isLibView, m_isSymbolEditor, 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 300 of file ee_selection_tool.cpp.

301 {
303 
304  KIID lastRolloverItem = niluuid;
305 
306  // Main loop: keep receiving events
307  while( TOOL_EVENT* evt = Wait() )
308  {
309  bool displayWireCursor = false;
310  KIID rolloverItem = niluuid;
312 
313  if( evt->Modifier( MD_SHIFT ) && evt->Modifier( MD_CTRL ) )
314  m_subtractive = true;
315  else if( evt->Modifier( MD_SHIFT ) )
316  m_additive = true;
317  else if( evt->Modifier( MD_CTRL ) )
318  m_exclusive_or = true;
319 
320  bool modifier_enabled = m_subtractive || m_additive || m_exclusive_or;
321 
322  // Is the user requesting that the selection list include all possible
323  // items without removing less likely selection candidates
324  m_skip_heuristics = !!evt->Modifier( MD_ALT );
325 
326  EE_GRID_HELPER grid( m_toolMgr );
327 
328  // Single click? Select single object
329  if( evt->IsClick( BUT_LEFT ) )
330  {
331  if( SCH_EDIT_FRAME* schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
332  schframe->FocusOnItem( nullptr );
333 
334  EE_COLLECTOR collector;
335  bool continueSelect = true;
336 
337  // Collect items at the clicked location (doesn't select them yet)
338  if( collectHits( collector, evt->Position() ) )
339  {
340  narrowSelection( collector, evt->Position(), false );
341 
342  if( collector.GetCount() == 1 && !m_isSymbolEditor && !modifier_enabled )
343  {
344  // Check if we want to auto start wires
345  VECTOR2I snappedCursorPos = grid.BestSnapAnchor( evt->Position(), nullptr );
346 
348  && collector[0]->IsPointClickableAnchor( (wxPoint) snappedCursorPos ) )
349  {
351  auto* params = newEvt->Parameter<DRAW_SEGMENT_EVENT_PARAMS*>();
352  auto* newParams = new DRAW_SEGMENT_EVENT_PARAMS();
353 
354  *newParams= *params;
355  newParams->quitOnDraw = true;
356  newEvt->SetParameter( newParams );
357 
358  newEvt->SetMousePosition( snappedCursorPos );
359  m_toolMgr->ProcessEvent( *newEvt );
360  continueSelect = false;
361  }
362  else if( collector[0]->IsHypertext() )
363  {
364  collector[0]->DoHypertextMenu( m_frame );
365  continueSelect = false;
366  }
367  }
368  }
369 
370  if( continueSelect )
371  {
372  // If we didn't click on an anchor, we perform a normal select, pass in the
373  // items we previously collected
374  selectPoint( collector, nullptr, nullptr, m_additive, m_subtractive,
375  m_exclusive_or );
376  }
377  }
378  else if( evt->IsClick( BUT_RIGHT ) )
379  {
380  // right click? if there is any object - show the context menu
381  bool selectionCancelled = false;
382 
383  if( m_selection.Empty() ||
384  !m_selection.GetBoundingBox().Contains( (wxPoint) evt->Position() ) )
385  {
386  ClearSelection();
387  SelectPoint( evt->Position(), EE_COLLECTOR::AllItems, nullptr,
388  &selectionCancelled );
389  m_selection.SetIsHover( true );
390  }
391 
392  if( !selectionCancelled )
394  }
395  else if( evt->IsDblClick( BUT_LEFT ) )
396  {
397  // double click? Display the properties window
398  if( auto schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
399  schframe->FocusOnItem( nullptr );
400 
401  if( m_selection.Empty() )
402  SelectPoint( evt->Position() );
403 
404  EDA_ITEM* item = m_selection.Front();
405 
406  if( item && item->Type() == SCH_SHEET_T )
408  else
410  }
411  else if( evt->IsDblClick( BUT_MIDDLE ) )
412  {
413  // Middle double click? Do zoom to fit or zoom to objects
414  if( m_exclusive_or ) // Is CTRL key down?
416  else
418  }
419  else if( evt->IsDrag( BUT_LEFT ) )
420  {
421  // drag with LMB? Select multiple objects (or at least draw a selection box) or
422  // drag them
423  if( auto schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
424  schframe->FocusOnItem( nullptr );
425 
426  if( modifier_enabled || ( m_selection.Empty() && m_frame->GetDragSelects() ) )
427  {
428  selectMultiple();
429  }
430  else
431  {
432  // selection is empty? try to start dragging the item under the point where drag
433  // started
436  else if( m_selection.Empty() )
438 
439  // Check if dragging has started within any of selected items bounding box
440  if( selectionContains( evt->Position() ) )
441  {
442  // Yes -> run the move tool and wait till it finishes
443  if( m_isSymbolEditor )
444  {
445  auto libFrame = dynamic_cast<SYMBOL_EDIT_FRAME*>( m_frame );
446 
447  // Cannot move any derived symbol elements for now.
448  if( libFrame && libFrame->GetCurPart() && libFrame->GetCurPart()->IsRoot() )
449  m_toolMgr->InvokeTool( "eeschema.SymbolMoveTool" );
450  }
451  else
452  {
453  m_toolMgr->InvokeTool( "eeschema.InteractiveMove" );
454  }
455  }
456  else
457  {
458  // No -> drag a selection box
459  selectMultiple();
460  }
461  }
462  }
463  else if( evt->Category() == TC_COMMAND && evt->Action() == TA_CHOICE_MENU_CHOICE )
464  {
465  // context sub-menu selection? Handle unit selection or bus unfolding
466  if( evt->GetCommandId().get() >= ID_POPUP_SCH_SELECT_UNIT_CMP
467  && evt->GetCommandId().get() <= ID_POPUP_SCH_SELECT_UNIT_CMP_MAX )
468  {
469  SCH_COMPONENT* component = dynamic_cast<SCH_COMPONENT*>( m_selection.Front() );
470  int unit = evt->GetCommandId().get() - ID_POPUP_SCH_SELECT_UNIT_CMP;
471 
472  if( component )
473  static_cast<SCH_EDIT_FRAME*>( m_frame )->SelectUnit( component, unit );
474  }
475  else if( evt->GetCommandId().get() >= ID_POPUP_SCH_UNFOLD_BUS
476  && evt->GetCommandId().get() <= ID_POPUP_SCH_UNFOLD_BUS_END )
477  {
478  wxString* net = new wxString( *evt->Parameter<wxString*>() );
480  }
481 
482  }
483  else if( evt->IsCancelInteractive() )
484  {
485  if( auto schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
486  schframe->FocusOnItem( nullptr );
487 
488  ClearSelection();
489  }
490  else if( evt->Action() == TA_UNDO_REDO_PRE )
491  {
492  if( auto schframe = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
493  schframe->FocusOnItem( nullptr );
494 
495  ClearSelection();
496  }
497  else if( evt->IsMotion() && !m_isSymbolEditor && m_frame->ToolStackIsEmpty() )
498  {
499  EE_COLLECTOR collector;
500 
501  // We are checking if we should display a pencil when hovering over anchors
502  // for "auto starting" wires when clicked
503  if( collectHits( collector, evt->Position() ) )
504  {
505  narrowSelection( collector, evt->Position(), false );
506 
507  if( collector.GetCount() == 1 && !modifier_enabled )
508  {
509  VECTOR2I snappedCursorPos = grid.BestSnapAnchor( evt->Position(), nullptr );
510 
512  && collector[0]->IsPointClickableAnchor( (wxPoint) snappedCursorPos ) )
513  {
514  displayWireCursor = true;
515  }
516  else if( collector[0]->IsHypertext()
517  && !collector[0]->IsSelected()
519  {
520  rolloverItem = collector[0]->m_Uuid;
521  }
522  }
523  }
524  }
525  else
526  {
527  evt->SetPassEvent();
528  }
529 
530  if( rolloverItem != lastRolloverItem )
531  {
532  EDA_ITEM* item = m_frame->GetItem( lastRolloverItem );
533 
534  if( item )
535  {
536  item->ClearFlags( IS_ROLLOVER );
537  lastRolloverItem = niluuid;
538 
539  if( item->Type() == SCH_FIELD_T )
540  m_frame->GetCanvas()->GetView()->Update( item->GetParent() );
541  else
542  m_frame->GetCanvas()->GetView()->Update( item );
543  }
544 
545  item = m_frame->GetItem( rolloverItem );
546 
547  if( item )
548  {
549  item->SetFlags( IS_ROLLOVER );
550  lastRolloverItem = rolloverItem;
551 
552  if( item->Type() == SCH_FIELD_T )
553  m_frame->GetCanvas()->GetView()->Update( item->GetParent() );
554  else
555  m_frame->GetCanvas()->GetView()->Update( item );
556  }
557  }
558 
559  if( m_frame->ToolStackIsEmpty() )
560  {
561  if( displayWireCursor )
562  {
564  }
565  else if( rolloverItem != niluuid )
566  {
568  }
569  else if( !m_selection.Empty() && !m_frame->GetDragSelects() && evt->HasPosition()
570  && selectionContains( evt->Position() ) ) //move/drag option prediction
571  {
573  }
574  else
575  {
577  }
578  }
579  }
580 
581  // Shutting down; clear the selection
582  m_selection.Clear();
583 
584  return 0;
585 }
KIGFX::SCH_VIEW * GetView() const override
Function GetView() Returns a pointer to the VIEW instance used in the panel.
static TOOL_ACTION properties
Definition: ee_actions.h:121
virtual EDA_ITEM * GetItem(const KIID &aId)
Fetch an item by KIID.
TOOL_MENU m_menu
functions below are not yet implemented - their interface may change
bool selectionContains(const VECTOR2I &aPoint) const
Function selectionContains()
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:94
KIID niluuid(0)
TOOL_EVENT * Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
bool collectHits(EE_COLLECTOR &aCollector, const VECTOR2I &aWhere, const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Function CollectHits() Selects one or more items at the location given by parameter aWhere.
EDA_RECT GetBoundingBox() const override
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
static TOOL_ACTION zoomFitScreen
Definition: actions.h:94
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:141
EE_COLLECTOR.
Definition: ee_collectors.h:42
Schematic editor (Eeschema) main window.
#define IS_ROLLOVER
Rollover active. Used for hyperlink highlighting.
Definition: eda_item.h:128
static TOOL_ACTION zoomFitObjects
Definition: actions.h:95
bool Contains(const wxPoint &aPoint) const
Function Contains.
Definition: eda_rect.cpp:57
bool InvokeTool(TOOL_ID aToolId)
Function InvokeTool() Calls a tool by sending a tool activation event to tool of given ID.
void SetCurrentCursor(KICURSOR cursor)
Function SetCurrentCursor Set the current cursor shape for this panel.
void SetIsHover(bool aIsHover)
Definition: selection.h:65
const KICAD_T movableSymbolItems[]
EESCHEMA_SETTINGS * eeconfig() const
EE_SELECTION & RequestSelection(const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Function RequestSelection()
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:104
Definition: kiid.h:44
bool selectPoint(EE_COLLECTOR &aCollector, EDA_ITEM **aItem=nullptr, bool *aSelectionCancelledFlag=nullptr, bool aAdd=false, bool aSubtract=false, bool aExclusiveOr=false)
Function SelectPoint() This is the primary SelectPoint method that will prompt the user with a menu t...
void narrowSelection(EE_COLLECTOR &collector, const VECTOR2I &aWhere, bool aCheckLocked)
Applies rules to narrow the collection down to selectable objects, and then heuristics to try and nar...
void SetFlags(STATUS_FLAGS aMask)
Definition: eda_item.h:220
static TOOL_ACTION drawWire
Definition: ee_actions.h:79
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:435
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:136
EDA_ITEM * GetParent() const
Definition: eda_item.h:183
bool GetDragSelects() const
Indicates that a drag should draw a selection rectangle, even when started over an item.
Definition: tools_holder.h:153
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:120
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() This overload of SelectPoint will create an EE_COLLECTOR and collect hits at l...
SCH_BASE_FRAME * m_frame
static const KICAD_T AllItems[]
Definition: ee_collectors.h:45
TOOL_EVENT MakeEvent() const
Returns the event associated with the action (i.e.
Definition: tool_action.h:113
Schematic symbol object.
Definition: sch_component.h:79
EDA_ITEM is a base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:148
static TOOL_ACTION enterSheet
Definition: ee_actions.h:184
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:221
EE_SELECTION m_selection
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:59
EDA_ITEM * Front() const
Definition: selection.h:201
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1513
const KICAD_T movableSchematicItems[]
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:556
KICAD_T Type() const
Function Type()
Definition: eda_item.h:181

References EE_COLLECTOR::AllItems, ARROW, EESCHEMA_SETTINGS::DRAWING::auto_start_wires, EE_GRID_HELPER::BestSnapAnchor(), BUT_LEFT, BUT_MIDDLE, BUT_RIGHT, SELECTION::Clear(), EDA_ITEM::ClearFlags(), ClearSelection(), collectHits(), EDA_RECT::Contains(), EE_ACTIONS::drawWire, SCH_BASE_FRAME::eeconfig(), SELECTION::Empty(), EE_ACTIONS::enterSheet, SELECTION::Front(), EE_SELECTION::GetBoundingBox(), SCH_BASE_FRAME::GetCanvas(), COLLECTOR::GetCount(), TOOLS_HOLDER::GetDragSelects(), EDA_DRAW_FRAME::GetItem(), EDA_ITEM::GetParent(), SCH_DRAW_PANEL::GetView(), HAND, 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(), IS_ROLLOVER, LINE_WIRE_ADD, m_additive, EESCHEMA_SETTINGS::m_Drawing, m_exclusive_or, m_frame, m_isSymbolEditor, TOOL_INTERACTIVE::m_menu, m_nonModifiedCursor, m_selection, m_skip_heuristics, m_subtractive, TOOL_BASE::m_toolMgr, TOOL_ACTION::MakeEvent(), MD_ALT, MD_CTRL, MD_SHIFT, movableSchematicItems, movableSymbolItems, MOVING, narrowSelection(), niluuid, TOOL_EVENT::Parameter(), TOOL_MANAGER::ProcessEvent(), EE_ACTIONS::properties, DRAW_SEGMENT_EVENT_PARAMS::quitOnDraw, RequestSelection(), TOOL_MANAGER::RunAction(), SCH_FIELD_T, SCH_SHEET_T, selectionContains(), selectMultiple(), SelectPoint(), selectPoint(), EDA_DRAW_PANEL_GAL::SetCurrentCursor(), EDA_ITEM::SetFlags(), SELECTION::SetIsHover(), TOOL_MENU::ShowContextMenu(), TA_CHOICE_MENU_CHOICE, TA_UNDO_REDO_PRE, TC_COMMAND, TOOLS_HOLDER::ToolStackIsEmpty(), EDA_ITEM::Type(), EE_ACTIONS::unfoldBus, KIGFX::VIEW::Update(), TOOL_INTERACTIVE::Wait(), ACTIONS::zoomFitObjects, and ACTIONS::zoomFitScreen.

Referenced by setTransitions().

◆ narrowSelection()

void EE_SELECTION_TOOL::narrowSelection ( EE_COLLECTOR collector,
const VECTOR2I aWhere,
bool  aCheckLocked 
)
private

Applies rules to narrow the collection down to selectable objects, and then heuristics to try and narrow it to a single object.

Parameters
collector
aWhere
aCheckLocked

Definition at line 646 of file ee_selection_tool.cpp.

648 {
649  for( int i = collector.GetCount() - 1; i >= 0; --i )
650  {
651  if( !Selectable( collector[i] ) )
652  {
653  collector.Remove( i );
654  continue;
655  }
656 
657  if( aCheckLocked && collector[i]->IsLocked() )
658  {
659  collector.Remove( i );
660  continue;
661  }
662 
663  // SelectPoint, unlike other selection routines, can select line ends
664  if( collector[i]->Type() == SCH_LINE_T )
665  {
666  SCH_LINE* line = (SCH_LINE*) collector[i];
667  line->ClearFlags( STARTPOINT | ENDPOINT );
668 
669  if( HitTestPoints( line->GetStartPoint(), (wxPoint) aWhere, collector.m_Threshold ) )
670  line->SetFlags( STARTPOINT );
671  else if( HitTestPoints( line->GetEndPoint(), (wxPoint) aWhere, collector.m_Threshold ) )
672  line->SetFlags( ENDPOINT );
673  else
674  line->SetFlags( STARTPOINT | ENDPOINT );
675  }
676  }
677 
678  // Apply some ugly heuristics to avoid disambiguation menus whenever possible
679  if( collector.GetCount() > 1 && !m_skip_heuristics )
680  {
681  GuessSelectionCandidates( collector, aWhere );
682  }
683 }
int m_Threshold
Definition: collector.h:66
wxPoint GetStartPoint() const
Definition: sch_line.h:94
bool Selectable(const EDA_ITEM *aItem, bool checkVisibilityOnly=false) const
Function Selectable() Checks conditions for an item to be selected.
void Remove(int aIndex)
Function Remove removes the item at aIndex (first position is 0);.
Definition: collector.h:133
void GuessSelectionCandidates(EE_COLLECTOR &collector, const VECTOR2I &aPos)
Apply heuristics to try and determine a single object when multiple are found under the cursor.
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:104
void SetFlags(STATUS_FLAGS aMask)
Definition: eda_item.h:220
#define STARTPOINT
When a line is selected, these flags indicate which.
Definition: eda_item.h:111
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
bool HitTestPoints(const wxPoint &pointA, const wxPoint &pointB, double threshold)
Test, if two points are near each other.
Definition: trigo.h:172
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:221
#define ENDPOINT
ends. (Used to support dragging.)
Definition: eda_item.h:112
wxPoint GetEndPoint() const
Definition: sch_line.h:97

References EDA_ITEM::ClearFlags(), ENDPOINT, COLLECTOR::GetCount(), SCH_LINE::GetEndPoint(), SCH_LINE::GetStartPoint(), GuessSelectionCandidates(), HitTestPoints(), m_skip_heuristics, COLLECTOR::m_Threshold, COLLECTOR::Remove(), SCH_LINE_T, Selectable(), EDA_ITEM::SetFlags(), and STARTPOINT.

Referenced by Main(), and SelectPoint().

◆ OnIdle()

void EE_SELECTION_TOOL::OnIdle ( wxIdleEvent &  aEvent)

Definition at line 588 of file ee_selection_tool.cpp.

589 {
590  if( m_frame->ToolStackIsEmpty() )
591  {
592  wxMouseState keyboardState = wxGetMouseState();
593 
595 
596  if( keyboardState.ShiftDown() && keyboardState.ControlDown() )
597  m_subtractive = true;
598  else if( keyboardState.ShiftDown() )
599  m_additive = true;
600  else if( keyboardState.ControlDown() )
601  m_exclusive_or = true;
602 
603  if( m_additive )
605  else if( m_subtractive )
607  else if( m_exclusive_or )
609  else
611  }
612 }
void SetCurrentCursor(KICURSOR cursor)
Function SetCurrentCursor Set the current cursor shape for this panel.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
bool ToolStackIsEmpty()
Definition: tools_holder.h:136
SCH_BASE_FRAME * m_frame

References ADD, SCH_BASE_FRAME::GetCanvas(), m_additive, m_exclusive_or, m_frame, m_nonModifiedCursor, m_subtractive, EDA_DRAW_PANEL_GAL::SetCurrentCursor(), SUBTRACT, TOOLS_HOLDER::ToolStackIsEmpty(), and XOR.

Referenced by SCH_BASE_FRAME::SCH_BASE_FRAME().

◆ 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 1310 of file ee_selection_tool.cpp.

1311 {
1312  m_selection.Clear();
1313 
1314  if( m_isSymbolEditor )
1315  {
1316  LIB_PART* start = static_cast<SYMBOL_EDIT_FRAME*>( m_frame )->GetCurPart();
1317 
1318  for( LIB_ITEM& item : start->GetDrawItems() )
1319  {
1320  if( item.IsSelected() )
1321  select( static_cast<EDA_ITEM*>( &item ) );
1322  }
1323  }
1324  else
1325  {
1326  for( SCH_ITEM* item : m_frame->GetScreen()->Items() )
1327  {
1328  // If the field and component are selected, only use the component
1329  if( item->IsSelected() )
1330  {
1331  select( item );
1332  }
1333  else
1334  {
1335  item->RunOnChildren(
1336  [&]( SCH_ITEM* aChild )
1337  {
1338  if( aChild->IsSelected() )
1339  select( aChild );
1340  } );
1341  }
1342  }
1343  }
1344 
1346 
1347  // Inform other potentially interested tools
1349 }
static const TOOL_EVENT SelectedEvent
Definition: actions.h:208
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:94
bool IsSelected() const
Definition: eda_item.h:191
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:62
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.
SCH_BASE_FRAME * m_frame
EE_RTREE & Items()
Definition: sch_screen.h:159
EE_SELECTION m_selection
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:194

References SELECTION::Clear(), LIB_PART::GetDrawItems(), SCH_BASE_FRAME::GetScreen(), EDA_ITEM::IsSelected(), SCH_SCREEN::Items(), m_frame, m_isSymbolEditor, m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), 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(), SYMBOL_EDIT_FRAME::RollbackSymbolFromUndo(), LIB_EDIT_TOOL::Undo(), and SCH_EDITOR_CONTROL::Undo().

◆ RemoveItemFromSel() [1/2]

int EE_SELECTION_TOOL::RemoveItemFromSel ( const TOOL_EVENT aEvent)

Definition at line 1247 of file ee_selection_tool.cpp.

1248 {
1249  RemoveItemFromSel( aEvent.Parameter<EDA_ITEM*>() );
1250  m_selection.SetIsHover( false );
1251  return 0;
1252 }
void SetIsHover(bool aIsHover)
Definition: selection.h:65
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: eda_item.h:148
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 1255 of file ee_selection_tool.cpp.

1256 {
1257  if( aItem )
1258  {
1259  unselect( aItem );
1260 
1261  // Inform other potentially interested tools
1262  if( !aQuietMode )
1264  }
1265 }
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:209
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 1268 of file ee_selection_tool.cpp.

1269 {
1270  RemoveItemsFromSel( aEvent.Parameter<EDA_ITEMS*>(), false );
1271  m_selection.SetIsHover( false );
1272  return 0;
1273 }
void SetIsHover(bool aIsHover)
Definition: selection.h:65
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:435
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
Definition: eda_item.h:576
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 1276 of file ee_selection_tool.cpp.

1277 {
1278  if( aList )
1279  {
1280  for( EDA_ITEM* item : *aList )
1281  unselect( item );
1282 
1283  // Inform other potentially interested tools
1284  if( !aQuietMode )
1286  }
1287 }
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:209
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: eda_item.h:148

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 950 of file ee_selection_tool.cpp.

951 {
952  if( m_selection.Empty() )
953  {
954  VECTOR2D cursorPos = getViewControls()->GetCursorPosition( true );
955 
956  ClearSelection();
957  SelectPoint( cursorPos, aFilterList );
958  m_selection.SetIsHover( true );
960  }
961  else // Trim an existing selection by aFilterList
962  {
963  for( int i = (int) m_selection.GetSize() - 1; i >= 0; --i )
964  {
965  EDA_ITEM* item = (EDA_ITEM*) m_selection.GetItem( i );
966 
967  if( !item->IsType( aFilterList ) )
968  {
969  unselect( item );
971  }
972  }
973  }
974 
976 
977  return m_selection;
978 }
void ClearReferencePoint()
Definition: selection.h:267
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:209
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
void SetIsHover(bool aIsHover)
Definition: selection.h:65
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: eda_item.h:250
virtual KIGFX::VIEW_ITEM * GetItem(unsigned int aIdx) const override
Definition: selection.h:104
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:120
virtual unsigned int GetSize() const override
Function GetSize() Returns the number of stored items.
Definition: selection.h:99
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() This overload of SelectPoint will create an EE_COLLECTOR and collect hits at l...
EDA_ITEM is a base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:148
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_EDIT_TOOL::EditPageNumber(), SCH_EDITOR_CONTROL::EditWithLibEdit(), SCH_NAVIGATE_TOOL::EnterSheet(), 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(), 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 217 of file ee_selection_tool.cpp.

218 {
219  m_frame = getEditFrame<SCH_BASE_FRAME>();
220 
221  if( aReason == TOOL_BASE::MODEL_RELOAD )
222  {
223  // Remove pointers to the selected items from containers without changing their
224  // properties (as they are already deleted while a new sheet is loaded)
225  m_selection.Clear();
226  getView()->GetPainter()->GetSettings()->SetHighlight( false );
227 
228  SYMBOL_EDIT_FRAME* libEditFrame = dynamic_cast<SYMBOL_EDIT_FRAME*>( m_frame );
229  LIB_VIEW_FRAME* libViewFrame = dynamic_cast<LIB_VIEW_FRAME*>( m_frame );
230 
231  if( libEditFrame )
232  {
233  m_isSymbolEditor = true;
234  m_unit = libEditFrame->GetUnit();
235  m_convert = libEditFrame->GetConvert();
236  }
237  else
238  m_isLibView = libViewFrame != nullptr;
239  }
240  else
241  // Restore previous properties of selected items and remove them from containers
242  ClearSelection();
243 
244  // Reinsert the VIEW_GROUP, in case it was removed from the VIEW
245  getView()->Remove( &m_selection );
246  getView()->Add( &m_selection );
247 }
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:94
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:357
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:201
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.
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:327
EE_SELECTION m_selection
The symbol library editor main window.

References KIGFX::VIEW::Add(), SELECTION::Clear(), ClearSelection(), SYMBOL_EDIT_FRAME::GetConvert(), KIGFX::VIEW::GetPainter(), KIGFX::PAINTER::GetSettings(), SYMBOL_EDIT_FRAME::GetUnit(), TOOL_BASE::getView(), m_convert, m_frame, m_isLibView, m_isSymbolEditor, 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 1581 of file ee_selection_tool.cpp.

1582 {
1583  highlight( aItem, SELECTED, &m_selection );
1584 }
void highlight(EDA_ITEM *aItem, int aHighlightMode, EE_SELECTION *aGroup=nullptr)
Function highlight() Highlights the item visually.
#define SELECTED
Definition: eda_item.h:113
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 1506 of file ee_selection_tool.cpp.

1507 {
1508  // NOTE: in the future this is where Eeschema layer/itemtype visibility will be handled
1509  SYMBOL_EDIT_FRAME* symEditFrame = dynamic_cast< SYMBOL_EDIT_FRAME* >( m_frame );
1510 
1511  // Do not allow selection of anything except fields when the current symbol in the symbol
1512  // editor is a derived symbol.
1513  if( symEditFrame && symEditFrame->GetCurPart() && symEditFrame->GetCurPart()->IsAlias()
1514  && aItem->Type() != LIB_FIELD_T )
1515  return false;
1516 
1517  switch( aItem->Type() )
1518  {
1519  case SCH_PIN_T:
1520  if( !static_cast<const SCH_PIN*>( aItem )->IsVisible() && !m_frame->GetShowAllPins() )
1521  return false;
1522  break;
1523 
1524  case LIB_PART_T: // In symbol_editor we do not want to select the symbol itself.
1525  return false;
1526 
1527  case LIB_FIELD_T: // LIB_FIELD object can always be edited.
1528  break;
1529 
1530  case LIB_ARC_T:
1531  case LIB_CIRCLE_T:
1532  case LIB_TEXT_T:
1533  case LIB_RECTANGLE_T:
1534  case LIB_POLYLINE_T:
1535  case LIB_BEZIER_T:
1536  case LIB_PIN_T:
1537  {
1538  if( symEditFrame )
1539  {
1540  LIB_ITEM* lib_item = (LIB_ITEM*) aItem;
1541 
1542  if( lib_item->GetUnit() && lib_item->GetUnit() != symEditFrame->GetUnit() )
1543  return false;
1544 
1545  if( lib_item->GetConvert() && lib_item->GetConvert() != symEditFrame->GetConvert() )
1546  return false;
1547  }
1548 
1549  break;
1550  }
1551 
1552  case SCH_MARKER_T: // Always selectable
1553  return true;
1554 
1555  default: // Suppress warnings
1556  break;
1557  }
1558 
1559  return true;
1560 }
The base class for drawable items used by schematic library components.
Definition: lib_item.h:62
int GetUnit() const
Definition: lib_item.h:296
int GetConvert() const
Definition: lib_item.h:299
LIB_PART * GetCurPart()
Return the current part being edited or NULL if none selected.
virtual bool GetShowAllPins() const
Allow some frames to show/hide hidden pins.
SCH_BASE_FRAME * m_frame
bool IsAlias() const
KICAD_T Type() const
Function Type()
Definition: eda_item.h:181
The symbol library editor main window.

References SYMBOL_EDIT_FRAME::GetConvert(), LIB_ITEM::GetConvert(), SYMBOL_EDIT_FRAME::GetCurPart(), SCH_BASE_FRAME::GetShowAllPins(), SYMBOL_EDIT_FRAME::GetUnit(), LIB_ITEM::GetUnit(), LIB_PART::IsAlias(), 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(), narrowSelection(), SelectAll(), and selectMultiple().

◆ SelectAll()

int EE_SELECTION_TOOL::SelectAll ( const TOOL_EVENT aEvent)

Select all visible items in sheet

Definition at line 766 of file ee_selection_tool.cpp.

767 {
768  m_multiple = true; // Multiple selection mode is active
769  KIGFX::VIEW* view = getView();
770 
771  // hold all visible items
772  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
773  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> sheetPins;
774 
775  // Filter the view items based on the selection box
776  BOX2I selectionBox;
777 
778  selectionBox.SetMaximum();
779  view->Query( selectionBox, selectedItems ); // Get the list of selected items
780 
781  // Sheet pins aren't in the view; add them by hand
782  for( KIGFX::VIEW::LAYER_ITEM_PAIR& pair : selectedItems )
783  {
784  SCH_SHEET* sheet = dynamic_cast<SCH_SHEET*>( pair.first );
785 
786  if( sheet )
787  {
788  int layer = pair.second;
789 
790  for( SCH_SHEET_PIN* pin : sheet->GetPins() )
791  sheetPins.emplace_back( KIGFX::VIEW::LAYER_ITEM_PAIR( pin, layer ) );
792  }
793  }
794 
795  selectedItems.insert( selectedItems.end(), sheetPins.begin(), sheetPins.end() );
796 
797  for( auto& item_pair : selectedItems )
798  {
799  if( EDA_ITEM* item = dynamic_cast<EDA_ITEM*>( item_pair.first ) )
800  {
801  if( Selectable( item ) )
802  select( item );
803  }
804  }
805 
806  m_multiple = false;
807 
808  return 0;
809 }
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:85
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:219
std::vector< SCH_SHEET_PIN * > & GetPins()
Definition: sch_sheet.h:364
std::pair< VIEW_ITEM *, int > LAYER_ITEM_PAIR
Definition: view.h:68
EDA_ITEM is a base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:148
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:433
VIEW.
Definition: view.h:63

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 1179 of file ee_selection_tool.cpp.

1180 {
1181  static KICAD_T wiresAndBuses[] = { SCH_LINE_LOCATE_WIRE_T, SCH_LINE_LOCATE_BUS_T, EOT };
1182 
1183  RequestSelection( wiresAndBuses );
1184 
1185  if( m_selection.Empty() )
1186  return 0;
1187 
1188  SCH_LINE* line = (SCH_LINE*) m_selection.Front();
1189  EDA_ITEMS items;
1190 
1192  auto conns = m_frame->GetScreen()->MarkConnections( line );
1193 
1194  for( auto item : conns )
1195  select( item );
1196 
1197  if( m_selection.GetSize() > 1 )
1199 
1200  return 0;
1201 }
static const TOOL_EVENT SelectedEvent
Definition: actions.h:208
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: eda_item.h:576
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:120
virtual unsigned int GetSize() const override
Function GetSize() Returns the number of stored items.
Definition: selection.h:99
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:832
EE_SELECTION m_selection
EDA_ITEM * Front() const
Definition: selection.h:201
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:326

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 126 of file ee_selection_tool.h.

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

References highlight(), and SELECTED.

Referenced by 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 1659 of file ee_selection_tool.cpp.

1660 {
1661  const unsigned GRIP_MARGIN = 20;
1662  VECTOR2I margin = getView()->ToWorld( VECTOR2I( GRIP_MARGIN, GRIP_MARGIN ), false );
1663 
1664  // Check if the point is located within any of the currently selected items bounding boxes
1665  for( auto item : m_selection )
1666  {
1667  BOX2I itemBox = item->ViewBBox();
1668  itemBox.Inflate( margin.x, margin.y ); // Give some margin for gripping an item
1669 
1670  if( itemBox.Contains( aPoint ) )
1671  return true;
1672  }
1673 
1674  return false;
1675 }
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:456
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 1352 of file ee_selection_tool.cpp.

1353 {
1354  EE_COLLECTOR* collector = aEvent.Parameter<EE_COLLECTOR*>();
1355 
1356  if( !doSelectionMenu( collector ) )
1357  collector->m_MenuCancelled = true;
1358 
1359  return 0;
1360 }
EE_COLLECTOR.
Definition: ee_collectors.h:42
bool m_MenuCancelled
Definition: collector.h:69
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 997 of file ee_selection_tool.cpp.

998 {
999  bool cancelled = false; // Was the tool canceled while it was running?
1000  m_multiple = true; // Multiple selection mode is active
1001  KIGFX::VIEW* view = getView();
1002 
1004  view->Add( &area );
1005 
1006  while( TOOL_EVENT* evt = Wait() )
1007  {
1008  int width = area.GetEnd().x - area.GetOrigin().x;
1009 
1010  /* Selection mode depends on direction of drag-selection:
1011  * Left > Right : Select objects that are fully enclosed by selection
1012  * Right > Left : Select objects that are crossed by selection
1013  */
1014  bool windowSelection = width >= 0;
1015 
1016  if( view->IsMirroredX() )
1017  windowSelection = !windowSelection;
1018 
1020  windowSelection ? KICURSOR::SELECT_WINDOW : KICURSOR::SELECT_LASSO );
1021 
1022  if( evt->IsCancelInteractive() || evt->IsActivate() )
1023  {
1024  cancelled = true;
1025  break;
1026  }
1027 
1028  if( evt->IsDrag( BUT_LEFT ) )
1029  {
1030  if( !m_additive && !m_subtractive && !m_exclusive_or )
1031  ClearSelection();
1032 
1033  // Start drawing a selection box
1034  area.SetOrigin( evt->DragOrigin() );
1035  area.SetEnd( evt->Position() );
1036  area.SetAdditive( m_additive );
1037  area.SetSubtractive( m_subtractive );
1039 
1040  view->SetVisible( &area, true );
1041  view->Update( &area );
1042  getViewControls()->SetAutoPan( true );
1043  }
1044 
1045  if( evt->IsMouseUp( BUT_LEFT ) )
1046  {
1047  getViewControls()->SetAutoPan( false );
1048 
1049  // End drawing the selection box
1050  view->SetVisible( &area, false );
1051 
1052  // Mark items within the selection box as selected
1053  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
1054  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> sheetPins;
1055 
1056  // Filter the view items based on the selection box
1057  BOX2I selectionBox = area.ViewBBox();
1058  view->Query( selectionBox, selectedItems ); // Get the list of selected items
1059 
1060  // Sheet pins aren't in the view; add them by hand
1061  for( KIGFX::VIEW::LAYER_ITEM_PAIR& pair : selectedItems )
1062  {
1063  SCH_SHEET* sheet = dynamic_cast<SCH_SHEET*>( pair.first );
1064 
1065  if( sheet )
1066  {
1067  int layer = pair.second;
1068 
1069  for( SCH_SHEET_PIN* pin : sheet->GetPins() )
1070  sheetPins.emplace_back( KIGFX::VIEW::LAYER_ITEM_PAIR( pin, layer ) );
1071  }
1072  }
1073 
1074  selectedItems.insert( selectedItems.end(), sheetPins.begin(), sheetPins.end() );
1075 
1076  int height = area.GetEnd().y - area.GetOrigin().y;
1077 
1078  bool anyAdded = false;
1079  bool anySubtracted = false;
1080 
1081  // Construct an EDA_RECT to determine EDA_ITEM selection
1082  EDA_RECT selectionRect( (wxPoint) area.GetOrigin(), wxSize( width, height ) );
1083 
1084  selectionRect.Normalize();
1085 
1086  for( KIGFX::VIEW::LAYER_ITEM_PAIR& pair : selectedItems )
1087  {
1088  EDA_ITEM* item = dynamic_cast<EDA_ITEM*>( pair.first );
1089 
1090  if( item && Selectable( item ) && item->HitTest( selectionRect, windowSelection ) )
1091  {
1092  if( m_subtractive || ( m_exclusive_or && item->IsSelected() ) )
1093  {
1094  unselect( item );
1095  anySubtracted = true;
1096  }
1097  else
1098  {
1099  select( item );
1100  item->SetFlags( STARTPOINT | ENDPOINT );
1101  anyAdded = true;
1102  }
1103  }
1104  }
1105 
1106  m_selection.SetIsHover( false );
1107 
1108  // Inform other potentially interested tools
1109  if( anyAdded )
1111 
1112  if( anySubtracted )
1114 
1115  break; // Stop waiting for events
1116  }
1117  }
1118 
1119  getViewControls()->SetAutoPan( false );
1120 
1121  // Stop drawing the selection box
1122  view->Remove( &area );
1123  m_multiple = false; // Multiple selection mode is inactive
1124 
1125  if( !cancelled )
1127 
1128  return cancelled;
1129 }
void ClearReferencePoint()
Definition: selection.h:267
static const TOOL_EVENT SelectedEvent
Definition: actions.h:208
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: eda_item.h:191
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:209
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:357
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 SetCurrentCursor(KICURSOR cursor)
Function SetCurrentCursor Set the current cursor shape for this panel.
void SetIsHover(bool aIsHover)
Definition: selection.h:65
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: eda_item.h:295
void SetFlags(STATUS_FLAGS aMask)
Definition: eda_item.h:220
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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 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:85
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:219
bool IsMirroredX() const
Function IsMirroredX() Returns true if view is flipped across the X axis.
Definition: view.h:232
void SetSubtractive(bool aSubtractive)
std::vector< SCH_SHEET_PIN * > & GetPins()
Definition: sch_sheet.h:364
void Normalize()
Function Normalize ensures that the height ant width are positive.
Definition: eda_rect.cpp:35
void unselect(EDA_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
#define STARTPOINT
When a line is selected, these flags indicate which.
Definition: eda_item.h:111
SCH_BASE_FRAME * m_frame
std::pair< VIEW_ITEM *, int > LAYER_ITEM_PAIR
Definition: view.h:68
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: eda_item.h:148
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1459
#define ENDPOINT
ends. (Used to support dragging.)
Definition: eda_item.h:112
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:327
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:433
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:42
VIEW.
Definition: view.h:63
EE_SELECTION m_selection
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1513

References KIGFX::VIEW::Add(), BUT_LEFT, SELECTION::ClearReferencePoint(), ClearSelection(), ENDPOINT, SCH_BASE_FRAME::GetCanvas(), 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_frame, m_multiple, m_selection, m_subtractive, TOOL_BASE::m_toolMgr, EDA_RECT::Normalize(), TOOL_MANAGER::ProcessEvent(), KIGFX::VIEW::Query(), KIGFX::VIEW::Remove(), select(), SELECT_LASSO, SELECT_WINDOW, Selectable(), EVENTS::SelectedEvent, KIGFX::PREVIEW::SELECTION_AREA::SetAdditive(), KIGFX::VIEW_CONTROLS::SetAutoPan(), EDA_DRAW_PANEL_GAL::SetCurrentCursor(), 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 1169 of file ee_selection_tool.cpp.

1170 {
1171  VECTOR2I cursorPos = getViewControls()->GetCursorPosition( !aEvent.Modifier( MD_ALT ) );
1172 
1173  SelectPoint( cursorPos, nodeTypes );
1174 
1175  return 0;
1176 }
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() This overload of SelectPoint will create an EE_COLLECTOR and collect hits at l...
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() This overload of SelectPoint will create an EE_COLLECTOR and collect hits at location aWhere before calling the primary SelectPoint method.

Parameters
aWhereis the location where the item(s) should be collected
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.
aAddindicates if found item(s) should be added to the selection
aSubtractindicates if found item(s) should be subtracted from the selection
aExclusiveOrindicates if found item(s) should be toggle in the selection

Definition at line 750 of file ee_selection_tool.cpp.

754 {
755  EE_COLLECTOR collector;
756 
757  if( !collectHits( collector, aWhere, aFilterList ) )
758  return false;
759 
760  narrowSelection( collector, aWhere, aCheckLocked );
761 
762  return selectPoint( collector, aItem, aSelectionCancelledFlag, aAdd, aSubtract, aExclusiveOr );
763 }
bool collectHits(EE_COLLECTOR &aCollector, const VECTOR2I &aWhere, const KICAD_T *aFilterList=EE_COLLECTOR::AllItems)
Function CollectHits() Selects one or more items at the location given by parameter aWhere.
EE_COLLECTOR.
Definition: ee_collectors.h:42
bool selectPoint(EE_COLLECTOR &aCollector, EDA_ITEM **aItem=nullptr, bool *aSelectionCancelledFlag=nullptr, bool aAdd=false, bool aSubtract=false, bool aExclusiveOr=false)
Function SelectPoint() This is the primary SelectPoint method that will prompt the user with a menu t...
void narrowSelection(EE_COLLECTOR &collector, const VECTOR2I &aWhere, bool aCheckLocked)
Applies rules to narrow the collection down to selectable objects, and then heuristics to try and nar...

References collectHits(), narrowSelection(), and selectPoint().

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

◆ selectPoint()

bool EE_SELECTION_TOOL::selectPoint ( EE_COLLECTOR aCollector,
EDA_ITEM **  aItem = nullptr,
bool *  aSelectionCancelledFlag = nullptr,
bool  aAdd = false,
bool  aSubtract = false,
bool  aExclusiveOr = false 
)
private

Function SelectPoint() This is the primary SelectPoint method that will prompt the user with a menu to disambiguate multiple selections and then finish by adding, subtracting or toggling the item(s) to the actual selection group.

Parameters
aCollectoris an EE_COLLECTOR that already has collected items
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).
aAddindicates if found item(s) should be added to the selection
aSubtractindicates if found item(s) should be subtracted from the selection
aExclusiveOrindicates if found item(s) should be toggle in the selection

Definition at line 686 of file ee_selection_tool.cpp.

689 {
691 
692  // If still more than one item we're going to have to ask the user.
693  if( aCollector.GetCount() > 1 )
694  {
695  aCollector.m_MenuTitle = wxEmptyString;
696  // Must call selectionMenu via RunAction() to avoid event-loop contention
697  m_toolMgr->RunAction( EE_ACTIONS::selectionMenu, true, &aCollector );
698 
699  if( aCollector.m_MenuCancelled )
700  {
701  if( aSelectionCancelledFlag )
702  *aSelectionCancelledFlag = true;
703 
704  return false;
705  }
706  }
707 
708  if( !aAdd && !aSubtract && !aExclusiveOr )
709  ClearSelection();
710 
711  bool anyAdded = false;
712  bool anySubtracted = false;
713 
714  if( aCollector.GetCount() > 0 )
715  {
716  for( int i = 0; i < aCollector.GetCount(); ++i )
717  {
718  if( aSubtract || ( aExclusiveOr && aCollector[i]->IsSelected() ) )
719  {
720  unselect( aCollector[i] );
721  anySubtracted = true;
722  }
723  else
724  {
725  select( aCollector[i] );
726  anyAdded = true;
727  }
728  }
729  }
730 
731  if( anyAdded )
732  {
734 
735  if( aItem && aCollector.GetCount() == 1 )
736  *aItem = aCollector[0];
737 
738  return true;
739  }
740  else if( anySubtracted )
741  {
743  return true;
744  }
745 
746  return false;
747 }
void ClearReferencePoint()
Definition: selection.h:267
static const TOOL_EVENT SelectedEvent
Definition: actions.h:208
static const TOOL_EVENT UnselectedEvent
Definition: actions.h:209
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:219
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:141
void select(EDA_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
bool m_MenuCancelled
Definition: collector.h:69
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:104
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
wxString m_MenuTitle
Definition: collector.h:68
void unselect(EDA_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
static TOOL_ACTION selectionMenu
Runs a selection menu to select from a list of items.
Definition: ee_actions.h:67
EE_SELECTION m_selection

References SELECTION::ClearReferencePoint(), ClearSelection(), COLLECTOR::GetCount(), COLLECTOR::m_MenuCancelled, COLLECTOR::m_MenuTitle, m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), TOOL_MANAGER::RunAction(), select(), EVENTS::SelectedEvent, EE_ACTIONS::selectionMenu, unselect(), and EVENTS::UnselectedEvent.

Referenced by Main(), and SelectPoint().

◆ 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(), 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 1678 of file ee_selection_tool.cpp.

1679 {
1681 
1686 
1692 
1694 }
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:167
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 1296 of file ee_selection_tool.cpp.

1297 {
1298  unhighlight( aItem, BRIGHTENED );
1299 }
#define BRIGHTENED
item is drawn with a bright contour
Definition: eda_item.h:129
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 1626 of file ee_selection_tool.cpp.

1627 {
1628  KICAD_T itemType = aItem->Type();
1629 
1630  if( aMode == SELECTED )
1631  aItem->ClearSelected();
1632  else if( aMode == BRIGHTENED )
1633  aItem->ClearBrightened();
1634 
1635  if( aGroup )
1636  aGroup->Remove( aItem );
1637 
1638  // Unhighlight pins and fields. (All the other component children are currently only
1639  // represented in the LIB_PART.)
1640  if( SCH_ITEM* sch_item = dynamic_cast<SCH_ITEM*>( aItem ) )
1641  {
1642  sch_item->RunOnChildren(
1643  [&]( SCH_ITEM* aChild )
1644  {
1645  if( aMode == SELECTED )
1646  aChild->ClearSelected();
1647  else if( aMode == BRIGHTENED )
1648  aChild->ClearBrightened();
1649  } );
1650  }
1651 
1652  if( itemType == SCH_PIN_T || itemType == SCH_FIELD_T || itemType == SCH_SHEET_PIN_T )
1653  getView()->Update( aItem->GetParent() );
1654  else
1655  getView()->Update( aItem );
1656 }
void ClearSelected()
Definition: eda_item.h:199
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: eda_item.h:200
#define BRIGHTENED
item is drawn with a bright contour
Definition: eda_item.h:129
#define SELECTED
Definition: eda_item.h:113
EDA_ITEM * GetParent() const
Definition: eda_item.h:183
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:36
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:194
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1513
KICAD_T Type() const
Function Type()
Definition: eda_item.h:181
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:86

References BRIGHTENED, EDA_ITEM::ClearBrightened(), EDA_ITEM::ClearSelected(), EDA_ITEM::GetParent(), TOOL_BASE::getView(), SELECTION::Remove(), SCH_FIELD_T, SCH_PIN_T, SCH_SHEET_PIN_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 1587 of file ee_selection_tool.cpp.

1588 {
1589  unhighlight( aItem, SELECTED, &m_selection );
1590 }
#define SELECTED
Definition: eda_item.h:113
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 250 of file ee_selection_tool.cpp.

251 {
252  ACTION_MENU* actionMenu = aEvent.Parameter<ACTION_MENU*>();
253  CONDITIONAL_MENU* conditionalMenu = dynamic_cast<CONDITIONAL_MENU*>( actionMenu );
254 
255  if( conditionalMenu )
256  conditionalMenu->Evaluate( m_selection );
257 
258  if( actionMenu )
259  actionMenu->UpdateAll();
260 
261  return 0;
262 }
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 981 of file ee_selection_tool.cpp.

982 {
983  VECTOR2I refP( 0, 0 );
984 
985  if( m_selection.Size() > 0 )
986  {
987  if( m_isSymbolEditor )
988  refP = static_cast<LIB_ITEM*>( m_selection.GetTopLeftItem() )->GetPosition();
989  else
990  refP = static_cast<SCH_ITEM*>( m_selection.GetTopLeftItem() )->GetPosition();
991  }
992 
994 }
void SetReferencePoint(const VECTOR2I &aP)
Definition: selection.h:262
EDA_ITEM * GetTopLeftItem(bool onlyModules=false) const override
int Size() const
Returns the number of selected parts.
Definition: selection.h:126
EE_SELECTION m_selection

References EE_SELECTION::GetTopLeftItem(), m_isSymbolEditor, 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(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), GROUP_TOOL::PickNewMember(), 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 286 of file ee_selection_tool.h.

Referenced by Main(), OnIdle(), and selectMultiple().

◆ m_convert

int EE_SELECTION_TOOL::m_convert
private

Definition at line 299 of file ee_selection_tool.h.

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

◆ m_exclusive_or

bool EE_SELECTION_TOOL::m_exclusive_or
private

Definition at line 288 of file ee_selection_tool.h.

Referenced by Main(), OnIdle(), and selectMultiple().

◆ m_frame

◆ m_isLibView

bool EE_SELECTION_TOOL::m_isLibView
private

Definition at line 297 of file ee_selection_tool.h.

Referenced by Init(), and Reset().

◆ m_isSymbolEditor

bool EE_SELECTION_TOOL::m_isSymbolEditor
private

◆ 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(), ROUTER_TOOL::Init(), LENGTH_TUNER_TOOL::Init(), PL_EDIT_TOOL::Init(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Init(), SCH_EDIT_TOOL::Init(), PICKER_TOOL::Init(), LIB_CONTROL::Init(), LIB_DRAWING_TOOLS::Init(), FOOTPRINT_EDITOR_TOOLS::Init(), PCB_VIEWER_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(), ROUTER_TOOL::MainLoop(), LENGTH_TUNER_TOOL::MainLoop(), GERBVIEW_INSPECTION_TOOL::MeasureTool(), PCB_VIEWER_TOOLS::MeasureTool(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), 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 289 of file ee_selection_tool.h.

Referenced by SelectAll(), and selectMultiple().

◆ m_nonModifiedCursor

KICURSOR EE_SELECTION_TOOL::m_nonModifiedCursor
private

Definition at line 294 of file ee_selection_tool.h.

Referenced by Main(), and OnIdle().

◆ m_selection

◆ m_skip_heuristics

bool EE_SELECTION_TOOL::m_skip_heuristics
private

Definition at line 290 of file ee_selection_tool.h.

Referenced by Main(), and narrowSelection().

◆ m_subtractive

bool EE_SELECTION_TOOL::m_subtractive
private

Definition at line 287 of file ee_selection_tool.h.

Referenced by Main(), OnIdle(), 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(), SELECTION_TOOL::AddItemToSel(), 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(), GERBVIEW_CONTROL::ClearAllLayers(), 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(), EDIT_TOOL::copyToClipboard(), 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(), SCH_LINE_WIRE_BUS_TOOL::DrawSegments(), 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(), GROUP_TOOL::EnterGroup(), SCH_NAVIGATE_TOOL::EnterSheet(), 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(), GROUP_TOOL::Group(), GuessSelectionCandidates(), 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(), GROUP_TOOL::Init(), CONVERT_TOOL::Init(), GLOBAL_EDIT_TOOL::Init(), LIB_CONTROL::Init(), PAD_TOOL::Init(), ALIGN_DISTRIBUTE_TOOL::Init(), PL_DRAWING_TOOLS::Init(), PL_POINT_EDITOR::Init(), PCB_EDITOR_CONTROL::Init(), POINT_EDITOR::Init(), POSITION_RELATIVE_TOOL::Init(), PCB_INSPECTION_TOOL::Init(), EE_TOOL_BASE< SCH_BASE_FRAME >::Init(), EDIT_TOOL::Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), PCB_INSPECTION_TOOL::InspectClearance(), PCB_INSPECTION_TOOL::InspectConstraints(), EDIT_TOOL::invokeInlineRouter(), EDIT_TOOL::isInteractiveDragEnabled(), EDIT_TOOL::isRouterActive(), TOOL_BASE::IsToolActive(), GROUP_TOOL::LeaveGroup(), SCH_NAVIGATE_TOOL::LeaveSheet(), SCH_EDITOR_CONTROL::LeaveSheet(), COMMON_CONTROL::ListHotKeys(), PCB_INSPECTION_TOOL::LocalRatsnestTool(), PL_EDIT_TOOL::Main(), CVPCB_CONTROL::Main(), LIB_MOVE_TOOL::Main(), CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main(), SCH_MOVE_TOOL::Main(), PCBNEW_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(), 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(), GROUP_TOOL::PickNewMember(), 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(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), GERBVIEW_CONTROL::ReloadAllLayers(), EDIT_TOOL::Remove(), POINT_EDITOR::removeCorner(), GROUP_TOOL::RemoveFromGroup(), 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(), GROUP_TOOL::Ungroup(), 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 298 of file ee_selection_tool.h.

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


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