KiCad PCB EDA Suite
SELECTION_TOOL Class Reference

Class SELECTION_TOOL. More...

#include <selection_tool.h>

Inheritance diagram for SELECTION_TOOL:
PCB_TOOL TOOL_INTERACTIVE TOOL_BASE

Classes

class  PRIV
 Private implementation of firewalled private data. More...
 

Public Types

enum  RESET_REASON { RUN, MODEL_RELOAD, GAL_SWITCH }
 

Determines the reason of reset for a tool

More...
 

Public Member Functions

 SELECTION_TOOL ()
 
 ~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 Main (const TOOL_EVENT &aEvent)
 Function Main() More...
 
SELECTIONGetSelection ()
 Function GetSelection() More...
 
SELECTIONRequestSelection (int aFlags=SELECTION_DEFAULT)
 Function RequestSelection() More...
 
TOOL_MENUGetToolMenu ()
 
SELECTION_LOCK_FLAGS CheckLock ()
 

Checks if the user has agreed to modify locked items for the given selection.

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

Select a single item under cursor event handler.

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

Clear current selection event handler.

More...
 
bool SanitizeSelection ()
 

Makes sure a group selection does not contain items that would cause conflicts when moving/rotating together (e.g.

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

Item selection event handler.

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

Item unselection event handler.

More...
 
void SetTransitions () override
 

Sets up handlers for various events.

More...
 
void zoomFitSelection (void)
 

Zooms the screen to center and fit the current selection.

More...
 
void SetEditModules (bool aEnabled)
 Function SetEditModules() More...
 
bool EditingModules () const
 
void Activate ()
 Function Activate() Runs the tool. More...
 
void SetContextMenu (CONTEXT_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...
 
OPT_TOOL_EVENT Wait (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...
 
TOOL_SETTINGSGetSettings ()
 

Static Public Attributes

static const TOOL_EVENT SelectedEvent
 

Event sent after an item is selected.

More...
 
static const TOOL_EVENT UnselectedEvent
 

Event sent after an item is unselected.

More...
 
static const TOOL_EVENT ClearedEvent
 

Event sent after selection is cleared.

More...
 

Protected Types

using ITEM_CREATOR = std::function< std::unique_ptr< BOARD_ITEM >(const TOOL_EVENT &aEvt) >
 Callable that returns a new board item. More...
 

Protected Member Functions

void doInteractiveItemPlacement (ITEM_CREATOR aItemCreator, const wxString &aCommitMessage)
 Helper function for performing a common interactive idiom: wait for a left click, place an item there (perhaps with a dialog or other user interaction), then have it move with the mouse and respond to rotate/flip, etc. More...
 
KIGFX::VIEWview () const
 
PCB_EDIT_FRAMEframe () const
 
BOARDboard () const
 
const TOOL_EVENT evActivate (std::string aToolName="")
 functions below are not yet implemented - their interface may change More...
 
const TOOL_EVENT evCommand (int aCommandId=-1)
 
const TOOL_EVENT evCommand (std::string aCommandStr="")
 
const TOOL_EVENT evMotion ()
 
const TOOL_EVENT evClick (int aButton=BUT_ANY)
 
const TOOL_EVENT evDrag (int aButton=BUT_ANY)
 
const TOOL_EVENT evButtonUp (int aButton=BUT_ANY)
 
const TOOL_EVENT evButtonDown (int aButton=BUT_ANY)
 
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

bool m_editModules
 
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
 
TOOL_SETTINGS m_toolSettings
 

Private Member Functions

bool selectPoint (const VECTOR2I &aWhere, bool aOnDrag=false)
 Function selectPoint() Selects an item pointed by the parameter aWhere. More...
 
bool selectCursor (bool aSelectAlways=false)
 Function selectCursor() Selects an item under the cursor unless there is something already selected or aSelectAlways is true. More...
 
bool selectMultiple ()
 Function selectMultiple() Handles drawing a selection box that allows to select many items at the same time. More...
 
int selectConnection (const TOOL_EVENT &aEvent)
 

Selects a trivial connection (between two junctions) of items in selection

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

Selects items with a continuous copper connection to items in selection

More...
 
int selectNet (const TOOL_EVENT &aEvent)
 Selects all copper connections belonging to the same net(s) as the items in the selection. More...
 
void selectAllItemsConnectedToTrack (TRACK &aSourceTrack)
 Selects all items connected by copper tracks to the given TRACK. More...
 
void selectAllItemsConnectedToItem (BOARD_CONNECTED_ITEM &aSourceItem)
 Selects all items connected (by copper) to the given item. More...
 
void selectAllItemsOnNet (int aNetCode)
 Selects all items with the given net code. More...
 
void selectAllItemsOnSheet (wxString &aSheetpath)
 Selects all items with the given sheet timestamp name (the sheet path) More...
 
int selectOnSheetFromEeschema (const TOOL_EVENT &aEvent)
 

Selects all modules belonging to same sheet, from Eeschema, using crossprobing

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

Selects all modules belonging to same hierarchical sheet as the selected footprint.

More...
 
void findCallback (BOARD_ITEM *aItem)
 

Find dialog callback.

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

Find an item.

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

Find an item and start moving.

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

Invoke filter dialog and modify current selection

More...
 
void clearSelection ()
 Function clearSelection() Clears the current selection. More...
 
BOARD_ITEMdisambiguationMenu (GENERAL_COLLECTOR *aItems)
 Function disambiguationMenu() Handles the menu that allows to select one of many items in case there is more than one item at the selected point (. More...
 
BOARD_ITEMpickSmallestComponent (GENERAL_COLLECTOR *aCollector)
 Function pickSmallestComponent() Allows to find the smallest (in terms of bounding box area) item from the list. More...
 
void toggleSelection (BOARD_ITEM *aItem)
 Function toggleSelection() Changes selection status of a given item. More...
 
bool selectable (const BOARD_ITEM *aItem) const
 Function selectable() Checks conditions for an item to be selected. More...
 
bool modifiable (const BOARD_ITEM *aItem) const
 Function modifiable() Checks if an item might be modified. More...
 
void select (BOARD_ITEM *aItem)
 Function select() Takes necessary action mark an item as selected. More...
 
void unselect (BOARD_ITEM *aItem)
 Function unselect() Takes necessary action mark an item as unselected. More...
 
void selectVisually (BOARD_ITEM *aItem)
 Function selectVisually() Marks item as selected, but does not add it to the ITEMS_PICKED_LIST. More...
 
void unselectVisually (BOARD_ITEM *aItem)
 Function unselectVisually() Marks item as selected, but does not add it to the ITEMS_PICKED_LIST. More...
 
bool selectionContains (const VECTOR2I &aPoint) const
 Function selectionContains() Checks if the given point is placed within any of selected items' bounding box. More...
 
void guessSelectionCandidates (GENERAL_COLLECTOR &aCollector) const
 Function guessSelectionCandidates() Tries to guess best selection candidates in case multiple items are clicked, by doing some braindead heuristics. More...
 
int updateSelection (const TOOL_EVENT &aEvent)
 Event handler to update the selection VIEW_ITEM. More...
 

Private Attributes

PCB_BASE_FRAMEm_frame
 Pointer to the parent frame. More...
 
SELECTION m_selection
 Current state of selection. More...
 
bool m_additive
 Flag saying if items should be added to the current selection or rather replace it. More...
 
bool m_multiple
 Flag saying if multiple selection mode is active. More...
 
bool m_locked
 Can other tools modify locked items. More...
 
TOOL_MENU m_menu
 Menu model displayed by the tool. More...
 
std::unique_ptr< PRIVm_priv
 

Detailed Description

Class SELECTION_TOOL.

Our sample selection tool: currently supports:

  • pick single objects (click LMB)
  • add objects to existing selection (Shift+LMB)
  • draw selection box (drag LMB)
  • handles MODULEs properly (i.e. selects either MODULE or its PADs, TEXTs, etc.)
  • takes into account high-contrast & layer visibility settings
  • invokes InteractiveEdit tool when user starts to drag selected items

Definition at line 61 of file selection_tool.h.

Member Typedef Documentation

using PCB_TOOL::ITEM_CREATOR = std::function< std::unique_ptr< BOARD_ITEM >( const TOOL_EVENT& aEvt ) >
protectedinherited

Callable that returns a new board item.

The event that triggered it is provided, so you can check modifier keys, position, etc, if required

Definition at line 91 of file pcb_tool.h.

Member Enumeration Documentation

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

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

Constructor & Destructor Documentation

SELECTION_TOOL::SELECTION_TOOL ( )

Definition at line 167 of file selection_tool.cpp.

167  :
168  PCB_TOOL( "pcbnew.InteractiveSelection" ),
169  m_frame( NULL ), m_additive( false ), m_multiple( false ),
170  m_locked( true ), m_menu( *this ),
171  m_priv( std::make_unique<PRIV>() )
172 {
173 
174 }
std::unique_ptr< PRIV > m_priv
bool m_multiple
Flag saying if multiple selection mode is active.
bool m_additive
Flag saying if items should be added to the current selection or rather replace it.
PCB_TOOL(TOOL_ID aId, const std::string &aName)
Constructor.
Definition: pcb_tool.h:52
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
TOOL_MENU m_menu
Menu model displayed by the tool.
bool m_locked
Can other tools modify locked items.
SELECTION_TOOL::~SELECTION_TOOL ( )

Definition at line 177 of file selection_tool.cpp.

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

178 {
179  getView()->Remove( &m_selection );
180 }
void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:341
SELECTION m_selection
Current state of selection.
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30

Member Function Documentation

void TOOL_INTERACTIVE::Activate ( )
inherited

Function Activate() Runs the tool.

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

Definition at line 49 of file tool_interactive.cpp.

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

Referenced by MODULE_EDITOR_TOOLS::CopyItems(), PCBNEW_CONTROL::DeleteItemCursor(), PCB_TOOL::doInteractiveItemPlacement(), ROUTER_TOOL::DpDimensionsDialog(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::drawZone(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), PCBNEW_CONTROL::GridSetOrigin(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::InlineDrag(), EDIT_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), MODULE_EDITOR_TOOLS::PasteItems(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), MODULE_EDITOR_TOOLS::PlacePad(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), DRAWING_TOOL::SetAnchor(), and ROUTER_TOOL::SettingsDialog().

50 {
52 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:215
bool InvokeTool(TOOL_ID aToolId)
Function InvokeTool() Calls a tool by sending a tool activation event to tool of given ID...
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 54 of file tool_base.cpp.

References TOOL_BASE::m_toolMgr, TOOL_BASE::m_toolSettings, and TOOL_BASE::TOOL_SETTINGS.

Referenced by TOOL_MANAGER::RegisterTool().

55 {
56  m_toolMgr = aManager;
57  m_toolSettings = TOOL_SETTINGS( this );
58 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:221
friend class TOOL_SETTINGS
Definition: tool_base.h:160
SELECTION_LOCK_FLAGS SELECTION_TOOL::CheckLock ( )

Checks if the user has agreed to modify locked items for the given selection.

Definition at line 561 of file selection_tool.cpp.

References IsOK(), PCB_TOOL::m_editModules, m_frame, m_locked, m_selection, PCB_MODULE_EDGE_T, PCB_MODULE_T, PCB_MODULE_TEXT_T, SELECTION_LOCK_OVERRIDE, SELECTION_LOCKED, and SELECTION_UNLOCKED.

Referenced by CursorSelection(), EDIT_TOOL::Flip(), EDIT_TOOL::Main(), EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), EDIT_TOOL::Remove(), and EDIT_TOOL::Rotate().

562 {
563  if( !m_locked || m_editModules )
564  return SELECTION_UNLOCKED;
565 
566  bool containsLocked = false;
567 
568  // Check if the selection contains locked items
569  for( const auto& item : m_selection )
570  {
571  switch( item->Type() )
572  {
573  case PCB_MODULE_T:
574  if( static_cast<MODULE*>( item )->IsLocked() )
575  containsLocked = true;
576  break;
577 
578  case PCB_MODULE_EDGE_T:
579  case PCB_MODULE_TEXT_T:
580  if( static_cast<MODULE*>( item->GetParent() )->IsLocked() )
581  containsLocked = true;
582  break;
583 
584  default: // suppress warnings
585  break;
586  }
587  }
588 
589  if( containsLocked )
590  {
591  if( IsOK( m_frame, _( "Selection contains locked items. Do you want to continue?" ) ) )
592  {
593  m_locked = false;
595  }
596  else
597  return SELECTION_LOCKED;
598  }
599 
600  m_locked = false;
601 
602  return SELECTION_UNLOCKED;
603 }
class EDGE_MODULE, a footprint edge
Definition: typeinfo.h:106
class MODULE, a footprint
Definition: typeinfo.h:101
SELECTION m_selection
Current state of selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
bool m_editModules
Definition: pcb_tool.h:112
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:105
bool m_locked
Can other tools modify locked items.
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Function IsOK displays a yes/no dialog with aMessage and returns the user response.
Definition: confirm.cpp:111
int SELECTION_TOOL::ClearSelection ( const TOOL_EVENT aEvent)

Clear current selection event handler.

Definition at line 628 of file selection_tool.cpp.

References clearSelection().

Referenced by SetTransitions().

629 {
630  clearSelection();
631 
632  return 0;
633 }
void clearSelection()
Function clearSelection() Clears the current selection.
void SELECTION_TOOL::clearSelection ( )
private

Function clearSelection() Clears the current selection.

Definition at line 1125 of file selection_tool.cpp.

References ClearedEvent, SELECTION::Empty(), m_frame, m_locked, m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), PCB_BASE_FRAME::SetCurItem(), and unselectVisually().

Referenced by ClearSelection(), CursorSelection(), filterSelection(), findCallback(), findMove(), Main(), Reset(), selectCursor(), selectMultiple(), selectOnSheetFromEeschema(), selectPoint(), selectSameSheet(), and toggleSelection().

1126 {
1127  if( m_selection.Empty() )
1128  return;
1129 
1130  for( auto item : m_selection )
1131  unselectVisually( static_cast<BOARD_ITEM*>( item ) );
1132 
1133  m_selection.Clear();
1134 
1135  m_frame->SetCurItem( NULL );
1136  m_locked = true;
1137 
1138  // Inform other potentially interested tools
1140 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:106
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
void SetCurItem(BOARD_ITEM *aItem, bool aDisplayInfo=true)
Function SetCurItem sets the currently selected item and displays it in the MsgPanel.
void unselectVisually(BOARD_ITEM *aItem)
Function unselectVisually() Marks item as selected, but does not add it to the ITEMS_PICKED_LIST.
static const TOOL_EVENT ClearedEvent
Event sent after selection is cleared.
SELECTION m_selection
Current state of selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
bool m_locked
Can other tools modify locked items.
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
int SELECTION_TOOL::CursorSelection ( const TOOL_EVENT aEvent)

Select a single item under cursor event handler.

Definition at line 606 of file selection_tool.cpp.

References CheckLock(), clearSelection(), SELECTION::Empty(), m_selection, TOOL_EVENT::Parameter(), SanitizeSelection(), selectCursor(), and SELECTION_LOCKED.

Referenced by SetTransitions().

607 {
608  bool sanitize = (bool) aEvent.Parameter<intptr_t>();
609 
610  if( m_selection.Empty() ) // Try to find an item that could be modified
611  {
612  selectCursor( true );
613 
614  if( CheckLock() == SELECTION_LOCKED )
615  {
616  clearSelection();
617  return 0;
618  }
619  }
620 
621  if( sanitize )
623 
624  return 0;
625 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:106
bool selectCursor(bool aSelectAlways=false)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
SELECTION_LOCK_FLAGS CheckLock()
Checks if the user has agreed to modify locked items for the given selection.
SELECTION m_selection
Current state of selection.
void clearSelection()
Function clearSelection() Clears the current selection.
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:373
bool SanitizeSelection()
Makes sure a group selection does not contain items that would cause conflicts when moving/rotating t...
BOARD_ITEM * SELECTION_TOOL::disambiguationMenu ( GENERAL_COLLECTOR aItems)
private

Function disambiguationMenu() Handles the menu that allows to select one of many items in case there is more than one item at the selected point (.

See also
selectCursor()).
Parameters
aItemscontains list of items that are displayed to the user.

Definition at line 1143 of file selection_tool.cpp.

References KIGFX::VIEW::Add(), CONTEXT_MENU::Add(), EDA_ITEM::ClearBrightened(), CMENU_NOW, CONTEXT_MENU::DisplayTitle(), KIGFX::GEOMETRY, COLLECTOR::GetCount(), EDA_ITEM::GetSelectMenuText(), TOOL_BASE::getView(), EDA_ITEM::IsBrightened(), KIGFX::VIEW::MarkTargetDirty(), min, KIGFX::VIEW::Remove(), EDA_ITEM::SetBrightened(), TOOL_INTERACTIVE::SetContextMenu(), BRIGHT_BOX::SetItem(), CONTEXT_MENU::SetTitle(), KIGFX::VIEW::SetVisible(), TA_CONTEXT_MENU_CHOICE, TA_CONTEXT_MENU_UPDATE, KIGFX::TARGET_OVERLAY, KIGFX::VIEW::Update(), and TOOL_INTERACTIVE::Wait().

Referenced by selectPoint().

1144 {
1145  BOARD_ITEM* current = NULL;
1146  PCB_BRIGHT_BOX brightBox;
1147  CONTEXT_MENU menu;
1148 
1149  getView()->Add( &brightBox );
1150 
1151  int limit = std::min( 10, aCollector->GetCount() );
1152 
1153  for( int i = 0; i < limit; ++i )
1154  {
1155  wxString text;
1156  BOARD_ITEM* item = ( *aCollector )[i];
1157  text = item->GetSelectMenuText();
1158  menu.Add( text, i + 1 );
1159  }
1160 
1161  menu.SetTitle( _( "Clarify selection" ) );
1162  menu.DisplayTitle( true );
1163  SetContextMenu( &menu, CMENU_NOW );
1164 
1165  while( OPT_TOOL_EVENT evt = Wait() )
1166  {
1167  if( evt->Action() == TA_CONTEXT_MENU_UPDATE )
1168  {
1169  if( current )
1170  current->ClearBrightened();
1171 
1172  int id = *evt->GetCommandId();
1173 
1174  // User has pointed an item, so show it in a different way
1175  if( id > 0 && id <= limit )
1176  {
1177  current = ( *aCollector )[id - 1];
1178  current->SetBrightened();
1179  }
1180  else
1181  {
1182  current = NULL;
1183  }
1184  }
1185  else if( evt->Action() == TA_CONTEXT_MENU_CHOICE )
1186  {
1187  boost::optional<int> id = evt->GetCommandId();
1188 
1189  // User has selected an item, so this one will be returned
1190  if( id && ( *id > 0 ) )
1191  current = ( *aCollector )[*id - 1];
1192  else
1193  current = NULL;
1194 
1195  break;
1196  }
1197 
1198  // Draw a mark to show which item is available to be selected
1199  if( current && current->IsBrightened() )
1200  {
1201  brightBox.SetItem( current );
1202  getView()->SetVisible( &brightBox, true );
1203 // getView()->Hide( &brightBox, false );
1204  getView()->Update( &brightBox, KIGFX::GEOMETRY );
1206  }
1207  }
1208 
1209  getView()->Remove( &brightBox );
1210 
1211 
1212  return current;
1213 }
bool IsBrightened() const
Definition: base_struct.h:224
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
Class CONTEXT_MENU.
Definition: context_menu.h:44
void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:341
void SetBrightened()
Definition: base_struct.h:229
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual wxString GetSelectMenuText() const
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
wxMenuItem * Add(const wxString &aLabel, int aId, const BITMAP_OPAQUE *aIcon=NULL)
Function Add() Adds an entry to the menu.
void ClearBrightened()
Definition: base_struct.h:233
void SetItem(EDA_ITEM *aItem)
Definition: bright_box.cpp:61
void MarkTargetDirty(int aTarget)
Function MarkTargetDirty() Sets or clears target 'dirty' flag.
Definition: view.h:575
void SetContextMenu(CONTEXT_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
Function SetContextMenu()
Items that may change while the view stays the same (noncached)
Definition: definitions.h:43
void Update(VIEW_ITEM *aItem)
Function Update() For dynamic VIEWs, informs the associated VIEW that the graphical representation of...
Definition: view.cpp:1379
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
Class PCB_BRIGHT_BOX.
void SetTitle(const wxString &aTitle) override
Function SetTitle() Sets title for the context menu.
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Function SetVisible() Sets the item visibility.
Definition: view.cpp:1331
void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:311
void DisplayTitle(bool aDisplay=true)
Function DisplayTitle() Decides whether a title for a pop up menu should be displayed.
#define min(a, b)
Definition: auxiliary.h:85
Color has changed.
Definition: view_item.h:57
void PCB_TOOL::doInteractiveItemPlacement ( ITEM_CREATOR  aItemCreator,
const wxString &  aCommitMessage 
)
protectedinherited

Helper function for performing a common interactive idiom: wait for a left click, place an item there (perhaps with a dialog or other user interaction), then have it move with the mouse and respond to rotate/flip, etc.

More complex interactive processes are not supported here, you should implement a customised event loop for those.

Parameters
aItemCreatorthe callable that will attempt to create the item
aCommitMessagethe message used on a successful commit

Definition at line 39 of file pcb_tool.cpp.

References TOOL_INTERACTIVE::Activate(), KIGFX::VIEW_GROUP::Add(), SELECTION::Add(), COMMIT::Add(), KIGFX::VIEW::Add(), BUT_LEFT, KIGFX::VIEW_CONTROLS::CaptureCursor(), SELECTION::Clear(), dyn_cast(), PCB_ACTIONS::flip, PCB_TOOL::frame(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_EVT_UTILS::GetEventRotationAngle(), TOOL_BASE::GetManager(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), TOOL_EVT_UTILS::IsCancelInteractive(), TOOL_EVT_UTILS::IsRotateToolEvt(), PCB_MODULE_T, BOARD_COMMIT::Push(), KIGFX::VIEW_GROUP::Remove(), SELECTION::Remove(), KIGFX::VIEW::Remove(), TOOL_MANAGER::RunAction(), MODULE::RunOnChildren(), PCB_ACTIONS::selectionClear, KIGFX::VIEW_CONTROLS::SetAutoPan(), KIGFX::VIEW_CONTROLS::SetSnapping(), KIGFX::VIEW_CONTROLS::ShowCursor(), TC_COMMAND, KIGFX::VIEW::Update(), PCB_TOOL::view(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by MICROWAVE_TOOL::addMicrowaveFootprint().

41 {
42  using namespace std::placeholders;
43 
44  KIGFX::VIEW& view = *getView();
46  auto& frame = *getEditFrame<PCB_EDIT_FRAME>();
47 
48  std::unique_ptr<BOARD_ITEM> newItem;
49 
50  Activate();
51 
52  BOARD_COMMIT commit( &frame );
53 
55 
56  // do not capture or auto-pan until we start placing an item
57  controls.ShowCursor( true );
58  controls.SetSnapping( true );
59 
60  // Add a VIEW_GROUP that serves as a preview for the new item
61  SELECTION preview;
62  view.Add( &preview );
63 
64  // Main loop: keep receiving events
65  while( OPT_TOOL_EVENT evt = Wait() )
66  {
67  VECTOR2I cursorPos = controls.GetCursorPosition();
68 
70  {
71  if( newItem )
72  {
73  // Delete the old item and have another try
74  newItem = nullptr;
75 
76  preview.Clear();
77 
78  controls.SetAutoPan( false );
79  controls.CaptureCursor( false );
80  controls.ShowCursor( true );
81  }
82  else
83  {
84  break;
85  }
86 
87  if( evt->IsActivate() ) // now finish unconditionally
88  break;
89  }
90 
91  else if( evt->IsClick( BUT_LEFT ) )
92  {
93  if( !newItem )
94  {
95  // create the item if possible
96  newItem = aItemCreator( *evt );
97 
98  // no item created, so wait for another click
99  if( !newItem )
100  continue;
101 
102  controls.CaptureCursor( true );
103  controls.SetAutoPan( true );
104 
105  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
106 
107  preview.Add( newItem.get() );
108 
109  if( newItem->Type() == PCB_MODULE_T )
110  {
111  auto module = dyn_cast<MODULE*>( newItem.get() );
112 
113  // modules have more drawable parts
114  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Add, &preview, _1 ) );
115  }
116  }
117  else
118  {
119  newItem->ClearFlags();
120  preview.Remove( newItem.get() );
121 
122  if( newItem->Type() == PCB_MODULE_T )
123  {
124  auto module = dyn_cast<MODULE*>( newItem.get() );
125  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Remove, &preview, _1 ) );
126  }
127 
128  commit.Add( newItem.release() );
129  commit.Push( aCommitMessage );
130 
131  controls.CaptureCursor( false );
132  controls.SetAutoPan( false );
133  controls.ShowCursor( true );
134  }
135  }
136 
137  else if( newItem && evt->Category() == TC_COMMAND )
138  {
139  /*
140  * Handle any events that can affect the item as we move
141  * it around, eg rotate and flip
142  */
143 
144  if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) )
145  {
146  const auto rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle(
147  frame, *evt );
148  newItem->Rotate( newItem->GetPosition(), rotationAngle );
149  view.Update( &preview );
150  }
151  else if( evt->IsAction( &PCB_ACTIONS::flip ) )
152  {
153  newItem->Flip( newItem->GetPosition() );
154  view.Update( &preview );
155  }
156  }
157 
158  else if( newItem && evt->IsMotion() )
159  {
160  // track the cursor
161  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
162 
163  // Show a preview of the item
164  view.Update( &preview );
165  }
166  }
167 
168  view.Remove( &preview );
169 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
KIGFX::VIEW * view() const
Definition: pcb_tool.h:108
void RunOnChildren(std::function< void(BOARD_ITEM *)> aFunction)
Function RunOnChildren.
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:81
void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:341
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
bool IsRotateToolEvt(const TOOL_EVENT &aEvt)
Function isRotateToolEvt()
Casted dyn_cast(From aObject)
Function dyn_cast()
Definition: typeinfo.h:73
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:71
class MODULE, a footprint
Definition: typeinfo.h:101
virtual VECTOR2D GetCursorPosition() const =0
Function GetCursorPosition() Returns the current cursor position in world coordinates.
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:109
Class VIEW_CONTROLS is an interface for classes handling user events controlling the view behaviour (...
Definition: view_controls.h:94
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes an item from the group.
Definition: view_group.cpp:61
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void Add(VIEW_ITEM *aItem)
Function Add() Adds an item to the group.
Definition: view_group.cpp:55
void Update(VIEW_ITEM *aItem)
Function Update() For dynamic VIEWs, informs the associated VIEW that the graphical representation of...
Definition: view.cpp:1379
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:36
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:90
TOOL_MANAGER * GetManager() const
Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool...
Definition: tool_base.h:144
void Activate()
Function Activate() Runs the tool.
void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:311
Class VIEW.
Definition: view.h:58
int GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvt)
Function getEventRotationAngle()
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:76
bool PCB_TOOL::EditingModules ( ) const
inlineinherited

Definition at line 78 of file pcb_tool.h.

References PCB_TOOL::m_editModules.

Referenced by BOARD_COMMIT::BOARD_COMMIT(), PAD_TOOL::Init(), and EDIT_TOOL::MeasureTool().

79  {
80  return m_editModules;
81  }
bool m_editModules
Definition: pcb_tool.h:112
const TOOL_EVENT TOOL_INTERACTIVE::evActivate ( std::string  aToolName = "")
protectedinherited

functions below are not yet implemented - their interface may change

const TOOL_EVENT TOOL_INTERACTIVE::evButtonDown ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evButtonUp ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evClick ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evCommand ( int  aCommandId = -1)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evCommand ( std::string  aCommandStr = "")
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evDrag ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evMotion ( )
protectedinherited
int SELECTION_TOOL::filterSelection ( const TOOL_EVENT aEvent)
private

Invoke filter dialog and modify current selection

Definition at line 1090 of file selection_tool.cpp.

References PCB_TOOL::board(), clearSelection(), getFilteredLayerSet(), SELECTION::GetItems(), itemIsIncludedByFilter(), m_frame, m_priv, m_selection, and select().

Referenced by SetTransitions().

1091 {
1092  auto& opts = m_priv->m_filterOpts;
1093  DIALOG_BLOCK_OPTIONS dlg( m_frame, opts, false, _( "Filter selection" ) );
1094 
1095  const int cmd = dlg.ShowModal();
1096 
1097  if( cmd != wxID_OK )
1098  return 0;
1099 
1100  const auto& board = *getModel<BOARD>();
1101  const auto layerMask = getFilteredLayerSet( opts );
1102 
1103  // copy current selection
1104  auto selection = m_selection.GetItems();
1105 
1106  // clear current selection
1107  clearSelection();
1108 
1109  // copy selection items from the saved selection
1110  // according to the dialog options
1111  for( auto i : selection )
1112  {
1113  auto item = static_cast<BOARD_ITEM*>( i );
1114  bool include = itemIsIncludedByFilter( *item, board, layerMask, opts );
1115 
1116  if( include )
1117  {
1118  select( item );
1119  }
1120  }
1121  return 0;
1122 }
std::unique_ptr< PRIV > m_priv
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
const std::set< EDA_ITEM * > GetItems() const
Definition: selection.h:117
SELECTION m_selection
Current state of selection.
void clearSelection()
Function clearSelection() Clears the current selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
static bool itemIsIncludedByFilter(const BOARD_ITEM &aItem, const BOARD &aBoard, const LSET &aTechnlLayerMask, const DIALOG_BLOCK_OPTIONS::OPTIONS &aBlockOpts)
Function itemIsIncludedByFilter()
static LSET getFilteredLayerSet(const DIALOG_BLOCK_OPTIONS::OPTIONS &blockOpts)
Gets the technical layers that are part of the given selection opts.
BOARD * board() const
Definition: pcb_tool.h:110
int SELECTION_TOOL::find ( const TOOL_EVENT aEvent)
private

Find an item.

Definition at line 962 of file selection_tool.cpp.

References DIALOG_FIND::EnableWarp(), findCallback(), m_frame, and DIALOG_FIND::SetCallback().

Referenced by SetTransitions().

963 {
964  DIALOG_FIND dlg( m_frame );
965  dlg.EnableWarp( false );
966  dlg.SetCallback( std::bind( &SELECTION_TOOL::findCallback, this, _1 ) );
967  dlg.ShowModal();
968 
969  return 0;
970 }
void findCallback(BOARD_ITEM *aItem)
Find dialog callback.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
void SELECTION_TOOL::findCallback ( BOARD_ITEM aItem)
private

Find dialog callback.

Definition at line 943 of file selection_tool.cpp.

References clearSelection(), EDA_DRAW_PANEL_GAL::ForceRefresh(), EDA_ITEM::GetBoundingBox(), EDA_DRAW_FRAME::GetGalCanvas(), EDA_RECT::GetOrigin(), EDA_RECT::GetSize(), TOOL_BASE::getView(), m_frame, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), select(), SelectedEvent, and KIGFX::VIEW::SetViewport().

Referenced by find().

944 {
945  clearSelection();
946 
947  if( aItem )
948  {
949  select( aItem );
950  EDA_RECT bbox = aItem->GetBoundingBox();
951  BOX2D viewport( VECTOR2D( bbox.GetOrigin() ), VECTOR2D( bbox.GetSize() ) );
952  getView()->SetViewport( viewport );
953 
954  // Inform other potentially interested tools
956  }
957 
959 }
virtual const EDA_RECT GetBoundingBox() const
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
void ForceRefresh()
Function ForceRefresh() Forces a redraw.
void SetViewport(const BOX2D &aViewport)
Function SetViewport() Sets the visible area of the VIEW.
Definition: view.cpp:513
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
Class BOX2 handles a 2-D bounding box, built on top of an origin point and size vector, both of templated class Vec.
Definition: box2.h:41
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
const wxPoint & GetOrigin() const
VECTOR2< double > VECTOR2D
Definition: vector2d.h:589
void clearSelection()
Function clearSelection() Clears the current selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
Class EDA_RECT handles the component boundary box.
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:803
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
const wxSize & GetSize() const
int SELECTION_TOOL::findMove ( const TOOL_EVENT aEvent)
private

Find an item and start moving.

Definition at line 973 of file selection_tool.cpp.

References clearSelection(), KIGFX::VIEW_CONTROLS::ForceCursorPosition(), PCB_BASE_FRAME::GetFootprintFromBoardByReference(), MODULE::GetPosition(), TOOL_BASE::getViewControls(), TOOL_MANAGER::InvokeTool(), m_frame, TOOL_BASE::m_toolMgr, and toggleSelection().

Referenced by SetTransitions().

974 {
976 
977  if( module )
978  {
979  clearSelection();
980  toggleSelection( module );
981 
982  // Place event on module origin first, so the generic anchor snap
983  // doesn't just choose the closest pin for us
984  // Don't warp the view - we want the component to
985  // "teleport" to cursor, not move to the components position
986  getViewControls()->ForceCursorPosition( true, module->GetPosition() );
987 
988  // pick the component up and start moving
989  m_toolMgr->InvokeTool( "pcbnew.InteractiveEdit" );
990  }
991 
992  return 0;
993 }
const wxPoint & GetPosition() const override
Definition: class_module.h:144
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
bool InvokeTool(TOOL_ID aToolId)
Function InvokeTool() Calls a tool by sending a tool activation event to tool of given ID...
void toggleSelection(BOARD_ITEM *aItem)
Function toggleSelection() Changes selection status of a given item.
void clearSelection()
Function clearSelection() Clears the current selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Function ForceCursorPosition() Places the cursor immediately at a given point.
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:36
MODULE * GetFootprintFromBoardByReference()
Function GetFootprintFromBoardByReference.
Definition: modules.cpp:60
template<typename T >
T* TOOL_BASE::getEditFrame ( ) const
inlineprotectedinherited

Function getEditFrame()

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

Definition at line 193 of file tool_base.h.

References TOOL_BASE::getEditFrameInt().

Referenced by ZONE_CREATE_HELPER::commitZone(), ZONE_CREATE_HELPER::createNewZone(), TOOL_SETTINGS::getConfigBase(), and ZONE_CREATE_HELPER::performZoneCutout().

194  {
195  return static_cast<T*>( getEditFrameInt() );
196  }
T
enum T contains all this lexer's tokens.
wxWindow * getEditFrameInt() const
Definition: tool_base.cpp:42
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 122 of file tool_base.h.

References TOOL_BASE::m_toolId.

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

123  {
124  return m_toolId;
125  }
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:215
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 144 of file tool_base.h.

References TOOL_BASE::m_toolMgr.

Referenced by BOARD_COMMIT::BOARD_COMMIT(), PCB_TOOL::doInteractiveItemPlacement(), CONTEXT_MENU::getToolManager(), EDIT_TOOL::MeasureTool(), and CONTEXT_MENU::onMenuEvent().

145  {
146  return m_toolMgr;
147  }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
template<typename T >
T* TOOL_BASE::getModel ( ) const
inlineprotectedinherited

Function getModel()

Returns the model object if it matches the requested type.

Definition at line 204 of file tool_base.h.

References TOOL_BASE::getModelInt().

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

205  {
206  EDA_ITEM* m = getModelInt();
207 
208  return static_cast<T*>( m );
209  }
T
enum T contains all this lexer's tokens.
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:151
EDA_ITEM * getModelInt() const
Definition: tool_base.cpp:48
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 133 of file tool_base.h.

References TOOL_BASE::m_toolName.

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

134  {
135  return m_toolName;
136  }
std::string m_toolName
Name of the tool.
Definition: tool_base.h:219
TOOL_SETTINGS & TOOL_BASE::GetSettings ( )
inherited

Definition at line 72 of file tool_base.cpp.

References TOOL_BASE::m_toolSettings.

Referenced by ROUTER_TOOL::Init(), selectable(), and ROUTER_TOOL::~ROUTER_TOOL().

73 {
74  return m_toolSettings;
75 }
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:221
TOOL_MENU& SELECTION_TOOL::GetToolMenu ( )
inline

Definition at line 96 of file selection_tool.h.

References m_menu.

Referenced by PLACEMENT_TOOL::Init(), PAD_TOOL::Init(), POINT_EDITOR::Init(), PCB_EDITOR_CONTROL::Init(), and EDIT_TOOL::Init().

97  {
98  return m_menu;
99  }
TOOL_MENU m_menu
Menu model displayed by the tool.
TOOL_TYPE TOOL_BASE::GetType ( ) const
inlineinherited

Function GetType() Returns the type of the tool.

Returns
The type of the tool.

Definition at line 111 of file tool_base.h.

References TOOL_BASE::m_type.

Referenced by TOOL_MANAGER::InvokeTool(), and TOOL_MANAGER::runTool().

112  {
113  return m_type;
114  }
TOOL_TYPE m_type
Stores the type of the tool.
Definition: tool_base.h:212
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 30 of file tool_base.cpp.

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

Referenced by PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), PCBNEW_CONTROL::CursorControl(), disambiguationMenu(), PCB_TOOL::doInteractiveItemPlacement(), MICROWAVE_TOOL::drawMicrowaveInductor(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), findCallback(), ROUTER_TOOL::getStartLayer(), PCBNEW_CONTROL::GridSetOrigin(), PCBNEW_CONTROL::HighContrastMode(), PNS::TOOL_BASE::highlightNet(), PCB_EDITOR_CONTROL::HighlightNet(), PCBNEW_CONTROL::LayerAlphaDec(), PCBNEW_CONTROL::LayerAlphaInc(), EDIT_TOOL::Main(), EDIT_TOOL::MeasureTool(), MODULE_EDITOR_TOOLS::ModuleEdgeOutlines(), MODULE_EDITOR_TOOLS::ModuleTextOutlines(), EDIT_TOOL::MoveExact(), POINT_EDITOR::OnSelectionChange(), PCBNEW_CONTROL::PadDisplayMode(), PCBNEW_CONTROL::PanControl(), PNS::TOOL_BASE::pickSingleItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), PCB_EDITOR_CONTROL::Reset(), PCBNEW_CONTROL::Reset(), MODULE_EDITOR_TOOLS::Reset(), PNS::TOOL_BASE::Reset(), DRAWING_TOOL::Reset(), Reset(), selectable(), selectionContains(), selectMultiple(), ZOOM_TOOL::selectRegion(), PCBNEW_CONTROL::TrackDisplayMode(), POINT_EDITOR::updateEditedPoint(), PNS::TOOL_BASE::updateEndItem(), COMMON_TOOLS::updateGrid(), PCBNEW_CONTROL::updateGrid(), POINT_EDITOR::updatePoints(), updateSelection(), PNS::TOOL_BASE::updateStartItem(), PCBNEW_CONTROL::ViaDisplayMode(), PCB_TOOL::view(), PCBNEW_CONTROL::ZoneDisplayMode(), PCB_EDITOR_CONTROL::ZoneFill(), PCB_EDITOR_CONTROL::ZoneFillAll(), PCB_EDITOR_CONTROL::ZoneUnfill(), PCB_EDITOR_CONTROL::ZoneUnfillAll(), COMMON_TOOLS::ZoomFitScreen(), zoomFitSelection(), COMMON_TOOLS::ZoomInOutCenter(), and ~SELECTION_TOOL().

31 {
32  return m_toolMgr->GetView();
33 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:243
KIGFX::VIEW_CONTROLS * TOOL_BASE::getViewControls ( ) const
protectedinherited
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 122 of file tool_interactive.h.

References TOOL_INTERACTIVE::goInternal().

Referenced by LENGTH_TUNER_TOOL::Reset(), ZOOM_TOOL::SetTransitions(), LENGTH_TUNER_TOOL::SetTransitions(), ROUTER_TOOL::SetTransitions(), PAD_TOOL::SetTransitions(), MICROWAVE_TOOL::SetTransitions(), POINT_EDITOR::SetTransitions(), COMMON_TOOLS::SetTransitions(), PLACEMENT_TOOL::SetTransitions(), PCBNEW_CONTROL::SetTransitions(), MODULE_EDITOR_TOOLS::SetTransitions(), PICKER_TOOL::SetTransitions(), PCB_EDITOR_CONTROL::SetTransitions(), SetTransitions(), EDIT_TOOL::SetTransitions(), and DRAWING_TOOL::SetTransitions().

124 {
125  TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
126 
127  goInternal( sptr, aConditions );
128 }
std::function< int(const TOOL_EVENT &)> TOOL_STATE_FUNC
Definition: tool_base.h:59
void goInternal(TOOL_STATE_FUNC &aState, const TOOL_EVENT_LIST &aConditions)
void SELECTION_TOOL::guessSelectionCandidates ( GENERAL_COLLECTOR aCollector) const
private

Function guessSelectionCandidates() Tries to guess best selection candidates in case multiple items are clicked, by doing some braindead heuristics.

Parameters
aCollectoris the collector that has a list of items to be queried.

Definition at line 1539 of file selection_tool.cpp.

References COLLECTOR::Append(), B_SilkS, calcArea(), calcCommonArea(), calcMaxArea(), calcMinArea(), calcRatio(), COLLECTOR::CountType(), COLLECTOR::Empty(), F_SilkS, PCB_BASE_FRAME::GetActiveLayer(), COLLECTOR::GetCount(), BOARD_ITEM::GetLayer(), m_frame, max, min, mod, PCB_LINE_T, PCB_MODULE_T, PCB_MODULE_TEXT_T, PCB_PAD_T, PCB_TEXT_T, PCB_TRACE_T, PCB_VIA_T, COLLECTOR::Remove(), and EDA_ITEM::Type().

Referenced by selectPoint().

1540 {
1541  std::set<BOARD_ITEM*> rejected;
1542 
1543  const double footprintAreaRatio = 0.2;
1544  const double modulePadMinCoverRatio = 0.45;
1545  const double padViaAreaRatio = 0.5;
1546  const double trackViaLengthRatio = 2.0;
1547  const double trackTrackLengthRatio = 0.3;
1548  const double textToFeatureMinRatio = 0.2;
1549  const double textToFootprintMinRatio = 0.4;
1550  // If the common area of two compared items is above the following threshold, they cannot
1551  // be rejected (it means they overlap and it might be hard to pick one by selecting
1552  // its unique area).
1553  const double commonAreaRatio = 0.6;
1554 
1555  PCB_LAYER_ID actLayer = m_frame->GetActiveLayer();
1556 
1557  LSET silkLayers( 2, B_SilkS, F_SilkS );
1558 
1559  if( silkLayers[actLayer] )
1560  {
1561  std::set<BOARD_ITEM*> preferred;
1562 
1563  for( int i = 0; i < aCollector.GetCount(); ++i )
1564  {
1565  BOARD_ITEM* item = aCollector[i];
1566  KICAD_T type = item->Type();
1567 
1568  if( ( type == PCB_MODULE_TEXT_T || type == PCB_TEXT_T || type == PCB_LINE_T )
1569  && silkLayers[item->GetLayer()] )
1570  {
1571  preferred.insert( item );
1572  }
1573  }
1574 
1575  if( preferred.size() != 0 )
1576  {
1577  aCollector.Empty();
1578 
1579  for( BOARD_ITEM* item : preferred )
1580  aCollector.Append( item );
1581  return;
1582  }
1583  }
1584 
1585  if( aCollector.CountType( PCB_MODULE_TEXT_T ) > 0 )
1586  {
1587  for( int i = 0; i < aCollector.GetCount(); ++i )
1588  {
1589  if( TEXTE_MODULE* txt = dyn_cast<TEXTE_MODULE*>( aCollector[i] ) )
1590  {
1591  double textArea = calcArea( txt );
1592 
1593  for( int j = 0; j < aCollector.GetCount(); ++j )
1594  {
1595  if( i == j )
1596  continue;
1597 
1598  BOARD_ITEM* item = aCollector[j];
1599  double itemArea = calcArea( item );
1600  double areaRatio = calcRatio( textArea, itemArea );
1601  double commonArea = calcCommonArea( txt, item );
1602  double itemCommonRatio = calcRatio( commonArea, itemArea );
1603  double txtCommonRatio = calcRatio( commonArea, textArea );
1604 
1605  if( item->Type() == PCB_MODULE_T && areaRatio < textToFootprintMinRatio &&
1606  itemCommonRatio < commonAreaRatio )
1607  rejected.insert( item );
1608 
1609  switch( item->Type() )
1610  {
1611  case PCB_TRACE_T:
1612  case PCB_PAD_T:
1613  case PCB_LINE_T:
1614  case PCB_VIA_T:
1615  case PCB_MODULE_T:
1616  if( areaRatio > textToFeatureMinRatio && txtCommonRatio < commonAreaRatio )
1617  rejected.insert( txt );
1618  break;
1619  default:
1620  break;
1621  }
1622  }
1623  }
1624  }
1625  }
1626 
1627  if( aCollector.CountType( PCB_MODULE_T ) > 0 )
1628  {
1629  double minArea = calcMinArea( aCollector, PCB_MODULE_T );
1630  double maxArea = calcMaxArea( aCollector, PCB_MODULE_T );
1631 
1632  if( calcRatio( minArea, maxArea ) <= footprintAreaRatio )
1633  {
1634  for( int i = 0; i < aCollector.GetCount(); ++i )
1635  {
1636  if( MODULE* mod = dyn_cast<MODULE*>( aCollector[i] ) )
1637  {
1638  double normalizedArea = calcRatio( calcArea( mod ), maxArea );
1639 
1640  if( normalizedArea > footprintAreaRatio )
1641  rejected.insert( mod );
1642  }
1643  }
1644  }
1645  }
1646 
1647  if( aCollector.CountType( PCB_PAD_T ) > 0 )
1648  {
1649  for( int i = 0; i < aCollector.GetCount(); ++i )
1650  {
1651  if( D_PAD* pad = dyn_cast<D_PAD*>( aCollector[i] ) )
1652  {
1653  double ratio = pad->GetParent()->PadCoverageRatio();
1654 
1655  if( ratio < modulePadMinCoverRatio )
1656  rejected.insert( pad->GetParent() );
1657  }
1658  }
1659  }
1660 
1661  if( aCollector.CountType( PCB_VIA_T ) > 0 )
1662  {
1663  for( int i = 0; i < aCollector.GetCount(); ++i )
1664  {
1665  if( VIA* via = dyn_cast<VIA*>( aCollector[i] ) )
1666  {
1667  double viaArea = calcArea( via );
1668 
1669  for( int j = 0; j < aCollector.GetCount(); ++j )
1670  {
1671  if( i == j )
1672  continue;
1673 
1674  BOARD_ITEM* item = aCollector[j];
1675  double areaRatio = calcRatio( viaArea, calcArea( item ) );
1676 
1677  if( item->Type() == PCB_MODULE_T && areaRatio < modulePadMinCoverRatio )
1678  rejected.insert( item );
1679 
1680  if( item->Type() == PCB_PAD_T && areaRatio < padViaAreaRatio )
1681  rejected.insert( item );
1682 
1683  if( TRACK* track = dyn_cast<TRACK*>( item ) )
1684  {
1685  if( track->GetNetCode() != via->GetNetCode() )
1686  continue;
1687 
1688  double lenRatio = (double) ( track->GetLength() + track->GetWidth() ) /
1689  (double) via->GetWidth();
1690 
1691  if( lenRatio > trackViaLengthRatio )
1692  rejected.insert( track );
1693  }
1694  }
1695  }
1696  }
1697  }
1698 
1699  int nTracks = aCollector.CountType( PCB_TRACE_T );
1700 
1701  if( nTracks > 0 )
1702  {
1703  double maxLength = 0.0;
1704  double minLength = std::numeric_limits<double>::max();
1705  double maxArea = 0.0;
1706  const TRACK* maxTrack = nullptr;
1707 
1708  for( int i = 0; i < aCollector.GetCount(); ++i )
1709  {
1710  if( TRACK* track = dyn_cast<TRACK*>( aCollector[i] ) )
1711  {
1712  maxLength = std::max( track->GetLength(), maxLength );
1713  maxLength = std::max( (double) track->GetWidth(), maxLength );
1714 
1715  minLength = std::min( std::max( track->GetLength(), (double) track->GetWidth() ), minLength );
1716 
1717  double area = track->GetLength() * track->GetWidth();
1718 
1719  if( area > maxArea )
1720  {
1721  maxArea = area;
1722  maxTrack = track;
1723  }
1724  }
1725  }
1726 
1727  if( maxLength > 0.0 && minLength / maxLength < trackTrackLengthRatio && nTracks > 1 )
1728  {
1729  for( int i = 0; i < aCollector.GetCount(); ++i )
1730  {
1731  if( TRACK* track = dyn_cast<TRACK*>( aCollector[i] ) )
1732  {
1733  double ratio = std::max( (double) track->GetWidth(), track->GetLength() ) / maxLength;
1734 
1735  if( ratio > trackTrackLengthRatio )
1736  rejected.insert( track );
1737  }
1738  }
1739  }
1740 
1741  for( int j = 0; j < aCollector.GetCount(); ++j )
1742  {
1743  if( MODULE* mod = dyn_cast<MODULE*>( aCollector[j] ) )
1744  {
1745  double ratio = calcRatio( maxArea, mod->GetFootprintRect().GetArea() );
1746 
1747  if( ratio < modulePadMinCoverRatio && calcCommonArea( maxTrack, mod ) < commonAreaRatio )
1748  rejected.insert( mod );
1749  }
1750  }
1751  }
1752 
1753  if( (unsigned) aCollector.GetCount() > rejected.size() ) // do not remove everything
1754  {
1755  for( BOARD_ITEM* item : rejected )
1756  {
1757  aCollector.Remove( item );
1758  }
1759  }
1760 }
void Empty()
Function Empty sets the list to empty.
int GetCount() const
Function GetCount returns the number of objects in the list.
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
static double calcCommonArea(const BOARD_ITEM *aItem, const BOARD_ITEM *aOther)
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
class TEXTE_PCB, text on a layer
Definition: typeinfo.h:104
class D_PAD, a pad in a footprint
Definition: typeinfo.h:102
int CountType(KICAD_T aType)
Function CountType counts the number of items matching aType.
static double calcArea(const BOARD_ITEM *aItem)
void Remove(int aIndex)
Function Remove removes the item at aIndex (first position is 0);.
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:90
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:107
void Append(EDA_ITEM *item)
Function Append adds an item to the end of the list.
class MODULE, a footprint
Definition: typeinfo.h:101
PCB_LAYER_ID
A quick note on layer IDs:
Class LSET is a set of PCB_LAYER_IDs.
static double calcMaxArea(GENERAL_COLLECTOR &aCollector, KICAD_T aType)
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:105
PCB_LAYER_ID GetLayer() const
Function GetLayer returns the primary layer this item is on.
#define max(a, b)
Definition: auxiliary.h:86
double calcRatio(double a, double b)
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:108
class DRAWSEGMENT, a segment not on copper layers
Definition: typeinfo.h:103
virtual PCB_LAYER_ID GetActiveLayer() const
Function GetActiveLayer returns the active layer.
#define mod(a, n)
Definition: greymap.cpp:24
#define min(a, b)
Definition: auxiliary.h:85
static double calcMinArea(GENERAL_COLLECTOR &aCollector, KICAD_T aType)
bool 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 183 of file selection_tool.cpp.

References CONDITIONAL_MENU::AddMenu(), TOOL_MENU::AddStandardSubMenus(), TOOL_MENU::AddSubMenu(), TOOL_MENU::GetMenu(), m_menu, and SELECTION_CONDITIONS::NotEmpty().

184 {
185  auto selectMenu = std::make_shared<SELECT_MENU>();
186  selectMenu->SetTool( this );
187  m_menu.AddSubMenu( selectMenu );
188 
189  auto& menu = m_menu.GetMenu();
190 
191  menu.AddMenu( selectMenu.get(), false, SELECTION_CONDITIONS::NotEmpty );
192  // only show separator if there is a Select menu to show above it
193  menu.AddSeparator( SELECTION_CONDITIONS::NotEmpty, 1000 );
194 
195  m_menu.AddStandardSubMenus( *getEditFrame<PCB_BASE_FRAME>() );
196 
197  return true;
198 }
CONDITIONAL_MENU & GetMenu()
Function GetMenu.
Definition: tool_menu.cpp:49
void AddSubMenu(std::shared_ptr< CONTEXT_MENU > aSubMenu)
Function CreateSubMenu.
Definition: tool_menu.cpp:55
static bool NotEmpty(const SELECTION &aSelection)
Function NotEmpty Tests if there are any items selected.
void AddStandardSubMenus(EDA_DRAW_FRAME &aFrame)
Function CreateBasicMenu.
Definition: tool_menu.cpp:95
TOOL_MENU m_menu
Menu model displayed by the tool.
void AddMenu(CONTEXT_MENU *aMenu, bool aExpand=false, const SELECTION_CONDITION &aCondition=SELECTION_CONDITIONS::ShowAlways, int aOrder=ANY_ORDER)
Function AddMenu()
int SELECTION_TOOL::Main ( const TOOL_EVENT aEvent)

Function Main()

The main loop.

Definition at line 224 of file selection_tool.cpp.

References BUT_LEFT, BUT_RIGHT, clearSelection(), TOOL_MENU::CloseContextMenu(), SELECTION::Empty(), PCB_ACTIONS::highlightNet, TOOL_MANAGER::InvokeTool(), m_additive, PCB_TOOL::m_editModules, m_menu, m_selection, TOOL_BASE::m_toolMgr, MD_CTRL, MD_SHIFT, PCB_ACTIONS::properties, TOOL_MANAGER::RunAction(), selectCursor(), selectionContains(), selectMultiple(), selectPoint(), TOOL_MENU::ShowContextMenu(), TA_CONTEXT_MENU_CLOSED, TA_UNDO_REDO_PRE, and TOOL_INTERACTIVE::Wait().

Referenced by SetTransitions().

225 {
226  // Main loop: keep receiving events
227  while( OPT_TOOL_EVENT evt = Wait() )
228  {
229  // Should selected items be added to the current selection or
230  // become the new selection (discarding previously selected items)
231  m_additive = evt->Modifier( MD_SHIFT );
232 
233  // single click? Select single object
234  if( evt->IsClick( BUT_LEFT ) )
235  {
236  if( evt->Modifier( MD_CTRL ) && !m_editModules )
237  {
239  }
240  else
241  {
242  if( !m_additive )
243  clearSelection();
244 
245  selectPoint( evt->Position() );
246  }
247  }
248 
249  // right click? if there is any object - show the context menu
250  else if( evt->IsClick( BUT_RIGHT ) )
251  {
252  bool emptySelection = m_selection.Empty();
253 
254  if( emptySelection )
255  selectPoint( evt->Position() );
256 
258  }
259 
260  // double click? Display the properties window
261  else if( evt->IsDblClick( BUT_LEFT ) )
262  {
263  if( m_selection.Empty() )
264  selectPoint( evt->Position() );
265 
267  }
268 
269  // drag with LMB? Select multiple objects (or at least draw a selection box) or drag them
270  else if( evt->IsDrag( BUT_LEFT ) )
271  {
272  if( m_additive )
273  {
274  selectMultiple();
275  }
276  else if( m_selection.Empty() )
277  {
278  // There is nothing selected, so try to select something
279  if( !selectCursor() )
280  {
281  // If nothings has been selected or user wants to select more
282  // draw the selection box
283  selectMultiple();
284  }
285  else
286  {
287  m_toolMgr->InvokeTool( "pcbnew.InteractiveEdit" );
288  }
289  }
290 
291  else
292  {
293  // Check if dragging has started within any of selected items bounding box
294  if( selectionContains( evt->Position() ) )
295  {
296  // Yes -> run the move tool and wait till it finishes
297  m_toolMgr->InvokeTool( "pcbnew.InteractiveEdit" );
298  }
299  else
300  {
301  // No -> clear the selection list
302  clearSelection();
303  }
304  }
305  }
306 
307  else if( evt->IsCancel() || evt->Action() == TA_UNDO_REDO_PRE )
308  {
309  clearSelection();
310  }
311 
312  else if( evt->Action() == TA_CONTEXT_MENU_CLOSED )
313  {
314  m_menu.CloseContextMenu( evt );
315  }
316  }
317 
318  // This tool is supposed to be active forever
319  assert( false );
320 
321  return 0;
322 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:106
bool selectCursor(bool aSelectAlways=false)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
bool m_additive
Flag saying if items should be added to the current selection or rather replace it.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
static TOOL_ACTION properties
Activation of the edit tool.
Definition: pcb_actions.h:96
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
bool InvokeTool(TOOL_ID aToolId)
Function InvokeTool() Calls a tool by sending a tool activation event to tool of given ID...
bool selectMultiple()
Function selectMultiple() Handles drawing a selection box that allows to select many items at the sam...
SELECTION m_selection
Current state of selection.
void clearSelection()
Function clearSelection() Clears the current selection.
TOOL_MENU m_menu
Menu model displayed by the tool.
bool selectPoint(const VECTOR2I &aWhere, bool aOnDrag=false)
Function selectPoint() Selects an item pointed by the parameter aWhere.
bool m_editModules
Definition: pcb_tool.h:112
void CloseContextMenu(OPT_TOOL_EVENT &evt)
Function CloseContextMenu.
Definition: tool_menu.cpp:82
static TOOL_ACTION highlightNet
Definition: pcb_actions.h:342
bool selectionContains(const VECTOR2I &aPoint) const
Function selectionContains() Checks if the given point is placed within any of selected items' boundi...
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
bool SELECTION_TOOL::modifiable ( const BOARD_ITEM aItem) const
private

Function modifiable() Checks if an item might be modified.

This function is used to filter out items from the selection when it is passed to other tools.

Returns
True if the item fulfills conditions to be modified.
BOARD_ITEM * SELECTION_TOOL::pickSmallestComponent ( GENERAL_COLLECTOR aCollector)
private

Function pickSmallestComponent() Allows to find the smallest (in terms of bounding box area) item from the list.

Parameters
aCollectorcontaines the list of items.

Definition at line 1216 of file selection_tool.cpp.

References MODULE::GetBoundingBox(), COLLECTOR::GetCount(), EDA_RECT::GetHeight(), GENERAL_COLLECTOR::GetPrimaryCount(), EDA_RECT::GetWidth(), min, and PCB_MODULE_T.

1217 {
1218  int count = aCollector->GetPrimaryCount(); // try to use preferred layer
1219 
1220  if( 0 == count )
1221  count = aCollector->GetCount();
1222 
1223  for( int i = 0; i < count; ++i )
1224  {
1225  if( ( *aCollector )[i]->Type() != PCB_MODULE_T )
1226  return NULL;
1227  }
1228 
1229  // All are modules, now find smallest MODULE
1230  int minDim = 0x7FFFFFFF;
1231  int minNdx = 0;
1232 
1233  for( int i = 0; i < count; ++i )
1234  {
1235  MODULE* module = (MODULE*) ( *aCollector )[i];
1236 
1237  int lx = module->GetBoundingBox().GetWidth();
1238  int ly = module->GetBoundingBox().GetHeight();
1239 
1240  int lmin = std::min( lx, ly );
1241 
1242  if( lmin < minDim )
1243  {
1244  minDim = lmin;
1245  minNdx = i;
1246  }
1247  }
1248 
1249  return (*aCollector)[minNdx];
1250 }
int GetCount() const
Function GetCount returns the number of objects in the list.
int GetHeight() const
class MODULE, a footprint
Definition: typeinfo.h:101
const EDA_RECT GetBoundingBox() const override
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
int GetPrimaryCount()
Function GetPrimaryCount.
Definition: collectors.h:344
int GetWidth() const
#define min(a, b)
Definition: auxiliary.h:85
SELECTION & SELECTION_TOOL::RequestSelection ( int  aFlags = SELECTION_DEFAULT)

Function RequestSelection()

Returns the current selection set, filtered according to aFlags. If the set is empty, performs the legacy-style hover selection.

Definition at line 331 of file selection_tool.cpp.

References SELECTION::Empty(), SELECTION::GetSize(), m_selection, TOOL_BASE::m_toolMgr, PCB_MARKER_T, TOOL_MANAGER::RunAction(), SanitizeSelection(), SELECTION_EDITABLE, SELECTION_SANITIZE_PADS, PCB_ACTIONS::selectionCursor, SELECTION::SetIsHover(), EDA_ITEM::Type(), and unselect().

Referenced by EDIT_TOOL::CreateArray(), EDIT_TOOL::Duplicate(), EDIT_TOOL::editFootprintInFpEditor(), EDIT_TOOL::ExchangeFootprints(), EDIT_TOOL::Flip(), EDIT_TOOL::Main(), EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), EDIT_TOOL::Properties(), EDIT_TOOL::Remove(), and EDIT_TOOL::Rotate().

332 {
333  if ( m_selection.Empty() )
334  {
336  m_selection.SetIsHover( true );
337  }
338  else
339  {
340  m_selection.SetIsHover( false );
341  }
342 
343  // Be careful with iterators: items can be removed from list
344  // that invalidate iterators.
345  for( unsigned ii = 0; ii < m_selection.GetSize(); ii++ )
346  {
347  EDA_ITEM* item = m_selection[ii];
348 
349  if( ( aFlags & SELECTION_EDITABLE ) && item->Type() == PCB_MARKER_T )
350  {
351  unselect( static_cast<BOARD_ITEM *>( item ) );
352  }
353  }
354 
355  if ( aFlags & SELECTION_SANITIZE_PADS )
357 
358  return m_selection;
359 }
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:106
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
void SetIsHover(bool aIsHover)
Definition: selection.h:61
SELECTION m_selection
Current state of selection.
virtual unsigned int GetSize() const override
Function GetSize() Returns the number of stored items.
Definition: selection.h:86
class MARKER_PCB, a marker used to show something
Definition: typeinfo.h:111
void unselect(BOARD_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:151
bool SanitizeSelection()
Makes sure a group selection does not contain items that would cause conflicts when moving/rotating t...
static TOOL_ACTION selectionCursor
Select a single item under the cursor position.
Definition: pcb_actions.h:50
void 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 201 of file selection_tool.cpp.

References KIGFX::VIEW::Add(), SELECTION::Clear(), clearSelection(), KIGFX::VIEW::GetPainter(), KIGFX::PAINTER::GetSettings(), TOOL_BASE::getView(), m_frame, m_locked, m_selection, TOOL_BASE::MODEL_RELOAD, KIGFX::VIEW::Remove(), and KIGFX::RENDER_SETTINGS::SetHighlight().

202 {
203  m_frame = getEditFrame<PCB_BASE_FRAME>();
204  m_locked = true;
205 
206  if( aReason == TOOL_BASE::MODEL_RELOAD )
207  {
208  // Remove pointers to the selected items from containers
209  // without changing their properties (as they are already deleted
210  // while a new board is loaded)
211  m_selection.Clear();
212  getView()->GetPainter()->GetSettings()->SetHighlight( false );
213  }
214  else
215  // Restore previous properties of selected items and remove them from containers
216  clearSelection();
217 
218  // Reinsert the VIEW_GROUP, in case it was removed from the VIEW
219  getView()->Remove( &m_selection );
220  getView()->Add( &m_selection );
221 }
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:81
Model changes (required full reload)
Definition: tool_base.h:83
void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:341
SELECTION m_selection
Current state of selection.
void clearSelection()
Function clearSelection() Clears the current selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:196
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
bool m_locked
Can other tools modify locked items.
void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:311
void SetHighlight(bool aEnabled, int aNetcode=-1)
Function SetHighlight Turns on/off highlighting - it may be done for the active layer or the specifie...
Definition: painter.h:139
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 78 of file tool_interactive.cpp.

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

Referenced by DRAWING_TOOL::PlaceText().

79 {
80  m_toolMgr->RunMainStack( this, std::move( aFunc ) );
81 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
void RunMainStack(TOOL_BASE *aTool, std::function< void()> aFunc)
bool SELECTION_TOOL::SanitizeSelection ( )

Makes sure a group selection does not contain items that would cause conflicts when moving/rotating together (e.g.

a footprint and one of the same footprint's pads)

Definition at line 1771 of file selection_tool.cpp.

References MODULE::IsLocked(), EDA_ITEM::IsSelected(), PCB_TOOL::m_editModules, m_selection, TOOL_BASE::m_toolMgr, mod, MODULE::PadsLocked(), PCB_PAD_T, TOOL_MANAGER::ProcessEvent(), select(), SelectedEvent, unselect(), and UnselectedEvent.

Referenced by CursorSelection(), deleteItem(), and RequestSelection().

1772 {
1773  std::set<BOARD_ITEM*> rejected;
1774  std::set<BOARD_ITEM*> added;
1775 
1776  if( !m_editModules )
1777  {
1778  for( auto i : m_selection )
1779  {
1780  auto item = static_cast<BOARD_ITEM*>( i );
1781  if( item->Type() == PCB_PAD_T )
1782  {
1783  MODULE* mod = static_cast<MODULE*>( item->GetParent() );
1784 
1785  // case 1: module (or its pads) are locked
1786  if( mod && ( mod->PadsLocked() || mod->IsLocked() ) )
1787  {
1788  rejected.insert( item );
1789 
1790  if( !mod->IsLocked() && !mod->IsSelected() )
1791  added.insert( mod );
1792  }
1793 
1794  // case 2: multi-item selection contains both the module and its pads - remove the pads
1795  if( mod && m_selection.Contains( mod ) )
1796  rejected.insert( item );
1797  }
1798  }
1799  }
1800 
1801  if( !rejected.empty() )
1802  {
1803  for( BOARD_ITEM* item : rejected )
1804  unselect( item );
1805 
1806  // Inform other potentially interested tools
1808  }
1809 
1810  if( !added.empty() )
1811  {
1812  for( BOARD_ITEM* item : added )
1813  select( item );
1814 
1815  // Inform other potentially interested tools
1817  }
1818 
1819  return true;
1820 }
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
bool IsSelected() const
Definition: base_struct.h:221
class D_PAD, a pad in a footprint
Definition: typeinfo.h:102
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
bool PadsLocked() const
Definition: class_module.h:260
SELECTION m_selection
Current state of selection.
static const TOOL_EVENT UnselectedEvent
Event sent after an item is unselected.
bool IsLocked() const override
Function IsLocked.
Definition: class_module.h:224
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
bool m_editModules
Definition: pcb_tool.h:112
void unselect(BOARD_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
#define mod(a, n)
Definition: greymap.cpp:24
void SELECTION_TOOL::select ( BOARD_ITEM aItem)
private

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

Parameters
aItemis an item to be selected.

Definition at line 1348 of file selection_tool.cpp.

References SELECTION::Add(), SELECTION::Contains(), BOARD_ITEM::GetParent(), EDA_ITEM::IsSelected(), m_frame, m_selection, PCB_PAD_T, selectVisually(), PCB_BASE_FRAME::SetCurItem(), SELECTION::Size(), and EDA_ITEM::Type().

Referenced by filterSelection(), findCallback(), SanitizeSelection(), selectAllItemsConnectedToItem(), selectAllItemsConnectedToTrack(), selectAllItemsOnNet(), selectAllItemsOnSheet(), SelectItem(), selectMultiple(), and toggleSelection().

1349 {
1350  if( aItem->IsSelected() )
1351  {
1352  return;
1353  }
1354 
1355  if( aItem->Type() == PCB_PAD_T )
1356  {
1357  MODULE* module = static_cast<MODULE*>( aItem->GetParent() );
1358 
1359  if( m_selection.Contains( module ) )
1360  return;
1361  }
1362 
1363  m_selection.Add( aItem );
1364  selectVisually( aItem );
1365 
1366 
1367  if( m_selection.Size() == 1 )
1368  {
1369  // Set as the current item, so the information about selection is displayed
1370  m_frame->SetCurItem( aItem, true );
1371  }
1372  else if( m_selection.Size() == 2 ) // Check only for 2, so it will not be
1373  { // called for every next selected item
1374  // If multiple items are selected, do not show the information about the selected item
1375  m_frame->SetCurItem( NULL, true );
1376  }
1377 }
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
BOARD_ITEM_CONTAINER * GetParent() const
bool Contains(EDA_ITEM *aItem) const
Definition: selection.h:100
void SetCurItem(BOARD_ITEM *aItem, bool aDisplayInfo=true)
Function SetCurItem sets the currently selected item and displays it in the MsgPanel.
bool IsSelected() const
Definition: base_struct.h:221
class D_PAD, a pad in a footprint
Definition: typeinfo.h:102
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:71
SELECTION m_selection
Current state of selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
void selectVisually(BOARD_ITEM *aItem)
Function selectVisually() Marks item as selected, but does not add it to the ITEMS_PICKED_LIST.
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
bool SELECTION_TOOL::selectable ( const BOARD_ITEM aItem) const
private

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

Returns
True if the item fulfills conditions to be selected.

Definition at line 1253 of file selection_tool.cpp.

References B_Cu, PCB_TOOL::board(), F_Cu, KIGFX::RENDER_SETTINGS::GetHighContrast(), BOARD_ITEM::GetLayer(), KIGFX::VIEW::GetPainter(), TOOL_BASE::GetSettings(), KIGFX::PAINTER::GetSettings(), TOOL_BASE::getView(), BOARD::IsElementVisible(), BOARD::IsLayerVisible(), MODULE::IsLocked(), BOARD_ITEM::IsOnLayer(), KIGFX::VIEW::IsVisible(), LAYER_MOD_BK, LAYER_MOD_FR, PCB_TOOL::m_editModules, m_multiple, mod, NOT_USED, PCB_MODULE_EDGE_T, PCB_MODULE_T, PCB_MODULE_TEXT_T, PCB_PAD_T, PCB_VIA_T, EDA_ITEM::Type(), TYPE_NOT_INIT, PCB_TOOL::view(), KIGFX::VIEW::VIEW_MAX_LAYERS, and BOARD_ITEM::ViewGetLayers().

Referenced by selectMultiple(), selectPoint(), and toggleSelection().

1254 {
1255  // Is high contrast mode enabled?
1256  bool highContrast = getView()->GetPainter()->GetSettings()->GetHighContrast();
1257 
1258  if( highContrast )
1259  {
1260  bool onActive = false; // Is the item on any of active layers?
1261  int layers[KIGFX::VIEW::VIEW_MAX_LAYERS], layers_count;
1262 
1263  // Filter out items that do not belong to active layers
1264  const std::set<unsigned int>& activeLayers = getView()->GetPainter()->
1265  GetSettings()->GetActiveLayers();
1266  aItem->ViewGetLayers( layers, layers_count );
1267 
1268  for( int i = 0; i < layers_count; ++i )
1269  {
1270  if( activeLayers.count( layers[i] ) > 0 ) // Item is on at least one of the active layers
1271  {
1272  onActive = true;
1273  break;
1274  }
1275  }
1276 
1277  if( !onActive ) // We do not want to select items that are in the background
1278  return false;
1279  }
1280 
1281  switch( aItem->Type() )
1282  {
1283  case PCB_VIA_T:
1284  {
1285  // For vias it is enough if only one of layers is visible
1286  PCB_LAYER_ID top, bottom;
1287 
1288  static_cast<const VIA*>( aItem )->LayerPair( &top, &bottom );
1289 
1290  return board()->IsLayerVisible( top ) || board()->IsLayerVisible( bottom );
1291  }
1292  break;
1293 
1294  case PCB_MODULE_T:
1295  if( aItem->IsOnLayer( F_Cu ) && board()->IsElementVisible( LAYER_MOD_FR ) )
1296  return !m_editModules;
1297 
1298  if( aItem->IsOnLayer( B_Cu ) && board()->IsElementVisible( LAYER_MOD_BK ) )
1299  return !m_editModules;
1300 
1301  return false;
1302 
1303  break;
1304 
1305  case PCB_MODULE_TEXT_T:
1306  if( m_multiple && !m_editModules )
1307  return false;
1308 
1309  return view()->IsVisible( aItem ) && board()->IsLayerVisible( aItem->GetLayer() );
1310 
1311  case PCB_MODULE_EDGE_T:
1312  case PCB_PAD_T:
1313  {
1314  // Multiple selection is only allowed in modedit mode
1315  // In pcbnew, you have to select subparts of modules
1316  // one-by-one, rather than with a drag selection.
1317  // This is so you can pick up items under an (unlocked)
1318  // module without also moving the module's sub-parts.
1319  if( m_multiple && !m_editModules )
1320  return false;
1321 
1322  // When editing modules, it's allowed to select them, even when
1323  // locked, since you already have to explicitly activate the
1324  // module editor to get to this stage
1325  if ( !m_editModules )
1326  {
1327  MODULE* mod = static_cast<const D_PAD*>( aItem )->GetParent();
1328  if( mod && mod->IsLocked() )
1329  return false;
1330  }
1331 
1332  break;
1333  }
1334 
1335  // These are not selectable
1336  case NOT_USED:
1337  case TYPE_NOT_INIT:
1338  return false;
1339 
1340  default: // Suppress warnings
1341  break;
1342  }
1343 
1344  // All other items are selected only if the layer on which they exist is visible
1345  return board()->IsLayerVisible( aItem->GetLayer() );
1346 }
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
KIGFX::VIEW * view() const
Definition: pcb_tool.h:108
bool IsElementVisible(GAL_LAYER_ID LAYER_aPCB) const
Function IsElementVisible tests whether a given element category is visible.
bool GetHighContrast() const
Function GetHighContrast Returns information about high contrast display mode.
Definition: painter.h:160
virtual bool IsOnLayer(PCB_LAYER_ID aLayer) const
Function IsOnLayer tests to see if this object is on the given layer.
bool m_multiple
Flag saying if multiple selection mode is active.
the 3d code uses this value
Definition: typeinfo.h:92
virtual void ViewGetLayers(int aLayers[], int &aCount) const override
show modules on back
class D_PAD, a pad in a footprint
Definition: typeinfo.h:102
class EDGE_MODULE, a footprint edge
Definition: typeinfo.h:106
show modules on front
class MODULE, a footprint
Definition: typeinfo.h:101
PCB_LAYER_ID
A quick note on layer IDs:
static const int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:640
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:196
TOOL_SETTINGS & GetSettings()
Definition: tool_base.cpp:72
bool IsLocked() const override
Function IsLocked.
Definition: class_module.h:224
bool m_editModules
Definition: pcb_tool.h:112
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:105
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
PCB_LAYER_ID GetLayer() const
Function GetLayer returns the primary layer this item is on.
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:108
bool IsVisible(const VIEW_ITEM *aItem) const
Function IsVisible() Returns information if the item is visible (or not).
Definition: view.cpp:1371
#define mod(a, n)
Definition: greymap.cpp:24
bool IsLayerVisible(PCB_LAYER_ID aLayer) const
Function IsLayerVisible is a proxy function that calls the correspondent function in m_BoardSettings ...
Definition: class_board.h:440
BOARD * board() const
Definition: pcb_tool.h:110
void SELECTION_TOOL::selectAllItemsConnectedToItem ( BOARD_CONNECTED_ITEM aSourceItem)
private

Selects all items connected (by copper) to the given item.

Definition at line 737 of file selection_tool.cpp.

References RN_DATA::GetConnectedItems(), RN_TRACKS, RN_VIAS, and select().

Referenced by selectCopper().

738 {
739  RN_DATA* ratsnest = getModel<BOARD>()->GetRatsnest();
740  std::list<BOARD_CONNECTED_ITEM*> itemsList;
741  ratsnest->GetConnectedItems( &aSourceItem, itemsList, (RN_ITEM_TYPE)( RN_TRACKS | RN_VIAS ) );
742 
743  for( BOARD_CONNECTED_ITEM* i : itemsList )
744  select( i );
745 }
Class RN_DATA.
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
RN_ITEM_TYPE
Types of items that are handled by the class
Definition: ratsnest_data.h:53
void GetConnectedItems(const BOARD_CONNECTED_ITEM *aItem, std::list< BOARD_CONNECTED_ITEM * > &aOutput, RN_ITEM_TYPE aTypes=RN_ALL) const
Function GetConnectedItems() Adds items that are connected together to a list.
void SELECTION_TOOL::selectAllItemsConnectedToTrack ( TRACK aSourceTrack)
private

Selects all items connected by copper tracks to the given TRACK.

Definition at line 723 of file selection_tool.cpp.

References PCB_TOOL::board(), BOARD::MarkTrace(), TRACK::Next(), and select().

Referenced by selectConnection().

724 {
725  int segmentCount;
726  TRACK* trackList = board()->MarkTrace( &aSourceTrack, &segmentCount,
727  nullptr, nullptr, true );
728 
729  for( int i = 0; i < segmentCount; ++i )
730  {
731  select( trackList );
732  trackList = trackList->Next();
733  }
734 }
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
TRACK * MarkTrace(TRACK *aTrace, int *aCount, double *aTraceLength, double *aInPackageLength, bool aReorder)
Function MarkTrace marks a chain of trace segments, connected to aTrace.
TRACK * Next() const
Definition: class_track.h:98
BOARD * board() const
Definition: pcb_tool.h:110
void SELECTION_TOOL::selectAllItemsOnNet ( int  aNetCode)
private

Selects all items with the given net code.

Definition at line 748 of file selection_tool.cpp.

References RN_DATA::GetNetItems(), RN_TRACKS, RN_VIAS, and select().

Referenced by selectNet().

749 {
750  RN_DATA* ratsnest = getModel<BOARD>()->GetRatsnest();
751  std::list<BOARD_CONNECTED_ITEM*> itemsList;
752 
753  ratsnest->GetNetItems( aNetCode, itemsList, (RN_ITEM_TYPE)( RN_TRACKS | RN_VIAS ) );
754 
755  for( BOARD_CONNECTED_ITEM* i : itemsList )
756  select( i );
757 }
Class RN_DATA.
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
void GetNetItems(int aNetCode, std::list< BOARD_CONNECTED_ITEM * > &aOutput, RN_ITEM_TYPE aTypes=RN_ALL) const
Function GetNetItems() Adds all items that belong to a certain net to a list.
RN_ITEM_TYPE
Types of items that are handled by the class
Definition: ratsnest_data.h:53
void SELECTION_TOOL::selectAllItemsOnSheet ( wxString &  aSheetpath)
private

Selects all items with the given sheet timestamp name (the sheet path)

Definition at line 788 of file selection_tool.cpp.

References PCB_TOOL::board(), DLIST< T >::GetFirst(), RN_DATA::GetNetItems(), BOARD::m_Modules, MODULE::Next(), D_PAD::Next(), RN_PADS, RN_TRACKS, RN_VIAS, and select().

Referenced by selectOnSheetFromEeschema(), and selectSameSheet().

789 {
790  auto modules = board()->m_Modules.GetFirst();
791  std::list<MODULE*> modList;
792 
793  // store all modules that are on that sheet
794  for( MODULE* mitem = modules; mitem; mitem = mitem->Next() )
795  {
796  if( mitem != NULL && mitem->GetPath().Contains( aSheetpath ) )
797  {
798  modList.push_back( mitem );
799  }
800  }
801 
802  //Generate a list of all pads, and of all nets they belong to.
803  std::list<int> netcodeList;
804  for( MODULE* mmod : modList )
805  {
806  for( D_PAD* pad = mmod->Pads().GetFirst(); pad; pad = pad->Next() )
807  {
808  if( pad->IsConnected() )
809  {
810  netcodeList.push_back( pad->GetNetCode() );
811  }
812  }
813  }
814 
815  // remove all duplicates
816  netcodeList.sort();
817  netcodeList.unique();
818 
819  // now we need to find all modules that are connected to each of these nets
820  // then we need to determine if these modules are in the list of modules
821  // belonging to this sheet ( modList )
822  RN_DATA* ratsnest = getModel<BOARD>()->GetRatsnest();
823  std::list<int> removeCodeList;
824  for( int netCode : netcodeList )
825  {
826  std::list<BOARD_CONNECTED_ITEM*> netPads;
827  ratsnest->GetNetItems( netCode, netPads, (RN_ITEM_TYPE)( RN_PADS ) );
828  for( BOARD_CONNECTED_ITEM* mitem : netPads )
829  {
830  bool found = ( std::find( modList.begin(), modList.end(), mitem->GetParent() ) != modList.end() );
831  if( !found )
832  {
833  // if we cannot find the module of the pad in the modList
834  // then we can assume that that module is not located in the same
835  // schematic, therefore invalidate this netcode.
836  removeCodeList.push_back( netCode );
837  break;
838  }
839  }
840  }
841 
842  // remove all duplicates
843  removeCodeList.sort();
844  removeCodeList.unique();
845 
846  for( int removeCode : removeCodeList )
847  {
848  netcodeList.remove( removeCode );
849  }
850 
851  std::list<BOARD_CONNECTED_ITEM*> localConnectionList;
852  for( int netCode : netcodeList )
853  {
854  ratsnest->GetNetItems( netCode, localConnectionList, (RN_ITEM_TYPE)( RN_TRACKS | RN_VIAS ) );
855  }
856 
857  for( BOARD_ITEM* i : modList )
858  {
859  if( i != NULL )
860  select( i );
861  }
862  for( BOARD_CONNECTED_ITEM* i : localConnectionList )
863  {
864  if( i != NULL )
865  select( i );
866  }
867 }
Class RN_DATA.
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
MODULE * Next() const
Definition: class_module.h:100
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
void GetNetItems(int aNetCode, std::list< BOARD_CONNECTED_ITEM * > &aOutput, RN_ITEM_TYPE aTypes=RN_ALL) const
Function GetNetItems() Adds all items that belong to a certain net to a list.
T * GetFirst() const
Function GetFirst returns the first T* in the list without removing it, or NULL if the list is empty...
Definition: dlist.h:163
D_PAD * Next() const
Definition: class_pad.h:106
RN_ITEM_TYPE
Types of items that are handled by the class
Definition: ratsnest_data.h:53
DLIST< MODULE > m_Modules
Definition: class_board.h:243
BOARD * board() const
Definition: pcb_tool.h:110
int SELECTION_TOOL::selectConnection ( const TOOL_EVENT aEvent)
private

Selects a trivial connection (between two junctions) of items in selection

Definition at line 669 of file selection_tool.cpp.

References SELECTION::GetItems(), m_selection, TOOL_BASE::m_toolMgr, PCB_TRACE_T, PCB_VIA_T, TOOL_MANAGER::ProcessEvent(), selectAllItemsConnectedToTrack(), selectCursor(), SelectedEvent, and SELECTION::Size().

Referenced by SetTransitions().

670 {
671  if( !selectCursor() )
672  return 0;
673 
674  // copy the selection, since we're going to iterate and modify
675  auto selection = m_selection.GetItems();
676 
677  for( auto item : selection )
678  {
679  // only TRACK items can be checked for trivial connections
680  if( item->Type() == PCB_TRACE_T || item->Type() == PCB_VIA_T )
681  {
682  TRACK& trackItem = static_cast<TRACK&>( *item );
683  selectAllItemsConnectedToTrack( trackItem );
684  }
685  }
686 
687  // Inform other potentially interested tools
688  if( m_selection.Size() > 0 )
690 
691  return 0;
692 }
bool selectCursor(bool aSelectAlways=false)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:107
const std::set< EDA_ITEM * > GetItems() const
Definition: selection.h:117
SELECTION m_selection
Current state of selection.
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
void selectAllItemsConnectedToTrack(TRACK &aSourceTrack)
Selects all items connected by copper tracks to the given TRACK.
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:108
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
int SELECTION_TOOL::selectCopper ( const TOOL_EVENT aEvent)
private

Selects items with a continuous copper connection to items in selection

Definition at line 695 of file selection_tool.cpp.

References SELECTION::GetItems(), m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), selectAllItemsConnectedToItem(), selectCursor(), SelectedEvent, and SELECTION::Size().

Referenced by SetTransitions().

696 {
697  if( !selectCursor() )
698  return 0;
699 
700  // copy the selection, since we're going to iterate and modify
701  auto selection = m_selection.GetItems();
702 
703  for( auto i : selection )
704  {
705  auto item = static_cast<BOARD_ITEM*>( i );
706  // only connected items can be traversed in the ratsnest
707  if( item->IsConnected() )
708  {
709  auto& connItem = static_cast<BOARD_CONNECTED_ITEM&>( *item );
710 
711  selectAllItemsConnectedToItem( connItem );
712  }
713  }
714 
715  // Inform other potentially interested tools
716  if( m_selection.Size() > 0 )
718 
719  return 0;
720 }
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
bool selectCursor(bool aSelectAlways=false)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
const std::set< EDA_ITEM * > GetItems() const
Definition: selection.h:117
SELECTION m_selection
Current state of selection.
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
void selectAllItemsConnectedToItem(BOARD_CONNECTED_ITEM &aSourceItem)
Selects all items connected (by copper) to the given item.
bool SELECTION_TOOL::selectCursor ( bool  aSelectAlways = false)
private

Function selectCursor() Selects an item under the cursor unless there is something already selected or aSelectAlways is true.

Parameters
aSelectAlwaysforces to select an item even if there is an item already selected.
Returns
true if eventually there is an item selected, false otherwise.

Definition at line 454 of file selection_tool.cpp.

References clearSelection(), SELECTION::Empty(), TOOL_BASE::getViewControls(), m_selection, and selectPoint().

Referenced by CursorSelection(), Main(), selectConnection(), selectCopper(), selectNet(), and selectSameSheet().

455 {
456  if( aSelectAlways || m_selection.Empty() )
457  {
458  clearSelection();
459  selectPoint( getViewControls()->GetCursorPosition() );
460  }
461 
462  return !m_selection.Empty();
463 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:106
SELECTION m_selection
Current state of selection.
void clearSelection()
Function clearSelection() Clears the current selection.
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:36
bool selectPoint(const VECTOR2I &aWhere, bool aOnDrag=false)
Function selectPoint() Selects an item pointed by the parameter aWhere.
bool SELECTION_TOOL::selectionContains ( const VECTOR2I aPoint) const
private

Function selectionContains() Checks if the given point is placed within any of selected items' bounding box.

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

Definition at line 1444 of file selection_tool.cpp.

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

1445 {
1446  const unsigned GRIP_MARGIN = 20;
1447  VECTOR2D margin = getView()->ToWorld( VECTOR2D( GRIP_MARGIN, GRIP_MARGIN ), false );
1448 
1449  // Check if the point is located within any of the currently selected items bounding boxes
1450  for( auto item : m_selection )
1451  {
1452  BOX2I itemBox = item->ViewBBox();
1453  itemBox.Inflate( margin.x, margin.y ); // Give some margin for gripping an item
1454 
1455  if( itemBox.Contains( aPoint ) )
1456  return true;
1457  }
1458 
1459  return false;
1460 }
bool Contains(const Vec &aPoint) const
Function Contains.
Definition: box2.h:139
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:440
VECTOR2< double > VECTOR2D
Definition: vector2d.h:589
SELECTION m_selection
Current state of selection.
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:266
int SELECTION_TOOL::SelectItem ( const TOOL_EVENT aEvent)

Item selection event handler.

Definition at line 635 of file selection_tool.cpp.

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

Referenced by SetTransitions().

636 {
637  // Check if there is an item to be selected
638  BOARD_ITEM* item = aEvent.Parameter<BOARD_ITEM*>();
639 
640  if( item )
641  {
642  select( item );
643 
644  // Inform other potentially interested tools
646  }
647 
648  return 0;
649 }
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:373
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
bool SELECTION_TOOL::selectMultiple ( )
private

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

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

Definition at line 466 of file selection_tool.cpp.

References KIGFX::VIEW::Add(), BUT_LEFT, clearSelection(), BOX2< Vec >::Contains(), SELECTION::Empty(), SELECTION::Front(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), EDA_ITEM::IsSelected(), m_additive, m_frame, m_multiple, m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), KIGFX::VIEW::Query(), KIGFX::VIEW::Remove(), select(), selectable(), SelectedEvent, KIGFX::VIEW_CONTROLS::SetAutoPan(), PCB_BASE_FRAME::SetCurItem(), KIGFX::PREVIEW::SELECTION_AREA::SetEnd(), KIGFX::PREVIEW::SELECTION_AREA::SetOrigin(), KIGFX::VIEW::SetVisible(), SELECTION::Size(), KIGFX::VIEW::Update(), PCB_TOOL::view(), KIGFX::PREVIEW::SELECTION_AREA::ViewBBox(), EDA_ITEM::ViewBBox(), and TOOL_INTERACTIVE::Wait().

Referenced by Main().

467 {
468  bool cancelled = false; // Was the tool cancelled while it was running?
469  m_multiple = true; // Multiple selection mode is active
470  KIGFX::VIEW* view = getView();
471  getViewControls()->SetAutoPan( true );
472 
474  view->Add( &area );
475 
476  while( OPT_TOOL_EVENT evt = Wait() )
477  {
478  if( evt->IsCancel() )
479  {
480  cancelled = true;
481  break;
482  }
483 
484  if( evt->IsDrag( BUT_LEFT ) )
485  {
486  if( !m_additive )
487  clearSelection();
488 
489  // Start drawing a selection box
490  area.SetOrigin( evt->DragOrigin() );
491  area.SetEnd( evt->Position() );
492  view->SetVisible( &area, true );
493  view->Update( &area );
494  }
495 
496  if( evt->IsMouseUp( BUT_LEFT ) )
497  {
498  // End drawing the selection box
499  view->SetVisible( &area, false );
500 
501  // Mark items within the selection box as selected
502  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
503  BOX2I selectionBox = area.ViewBBox();
504  view->Query( selectionBox, selectedItems ); // Get the list of selected items
505 
506  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR>::iterator it, it_end;
507 
508  for( it = selectedItems.begin(), it_end = selectedItems.end(); it != it_end; ++it )
509  {
510  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( it->first );
511 
512  // Add only those items that are visible and fully within the selection box
513  if( !item->IsSelected() && selectable( item ) &&
514  selectionBox.Contains( item->ViewBBox() ) )
515  {
516  select( item );
517  }
518  }
519 
520  if( m_selection.Size() == 1 )
521  m_frame->SetCurItem( static_cast<BOARD_ITEM*>( m_selection.Front() ) );
522  else
523  m_frame->SetCurItem( NULL );
524 
525  // Inform other potentially interested tools
526  if( !m_selection.Empty() )
528 
529  break; // Stop waiting for events
530  }
531  }
532 
533  // Stop drawing the selection box
534  view->Remove( &area );
535  m_multiple = false; // Multiple selection mode is inactive
536  getViewControls()->SetAutoPan( false );
537 
538  return cancelled;
539 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:106
KIGFX::VIEW * view() const
Definition: pcb_tool.h:108
void SetEnd(VECTOR2I aEnd)
Set the current end of the rectangle (the corner that moves with the cursor.
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:417
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
bool m_multiple
Flag saying if multiple selection mode is active.
void SetOrigin(VECTOR2I aOrigin)
Set the origin of the rectange (the fixed corner)
bool m_additive
Flag saying if items should be added to the current selection or rather replace it.
bool Contains(const Vec &aPoint) const
Function Contains.
Definition: box2.h:139
EDA_ITEM * Front() const
Definition: selection.h:144
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:341
void SetCurItem(BOARD_ITEM *aItem, bool aDisplayInfo=true)
Function SetCurItem sets the currently selected item and displays it in the MsgPanel.
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
bool IsSelected() const
Definition: base_struct.h:221
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
bool selectable(const BOARD_ITEM *aItem) const
Function selectable() Checks conditions for an item to be selected.
const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers. ...
SELECTION m_selection
Current state of selection.
void clearSelection()
Function clearSelection() Clears the current selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
void Update(VIEW_ITEM *aItem)
Function Update() For dynamic VIEWs, informs the associated VIEW that the graphical representation of...
Definition: view.cpp:1379
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:36
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Function SetVisible() Sets the item visibility.
Definition: view.cpp:1331
Class SELECTION_AREA.
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:311
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
Class VIEW.
Definition: view.h:58
virtual const BOX2I ViewBBox() const override
int SELECTION_TOOL::selectNet ( const TOOL_EVENT aEvent)
private

Selects all copper connections belonging to the same net(s) as the items in the selection.

Definition at line 760 of file selection_tool.cpp.

References SELECTION::GetItems(), m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), selectAllItemsOnNet(), selectCursor(), SelectedEvent, and SELECTION::Size().

Referenced by SetTransitions().

761 {
762  if( !selectCursor() )
763  return 0;
764 
765  // copy the selection, since we're going to iterate and modify
766  auto selection = m_selection.GetItems();
767 
768  for( auto i : selection )
769  {
770  auto item = static_cast<BOARD_ITEM*>( i );
771  // only connected items get a net code
772  if( item->IsConnected() )
773  {
774  auto& connItem = static_cast<BOARD_CONNECTED_ITEM&>( *item );
775 
776  selectAllItemsOnNet( connItem.GetNetCode() );
777  }
778  }
779 
780  // Inform other potentially interested tools
781  if( m_selection.Size() > 0 )
783 
784  return 0;
785 }
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
bool selectCursor(bool aSelectAlways=false)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
Class BOARD_CONNECTED_ITEM is a base class derived from BOARD_ITEM for items that can be connected an...
const std::set< EDA_ITEM * > GetItems() const
Definition: selection.h:117
void selectAllItemsOnNet(int aNetCode)
Selects all items with the given net code.
SELECTION m_selection
Current state of selection.
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
int SELECTION_TOOL::selectOnSheetFromEeschema ( const TOOL_EVENT aEvent)
private

Selects all modules belonging to same sheet, from Eeschema, using crossprobing

Definition at line 892 of file selection_tool.cpp.

References clearSelection(), m_selection, TOOL_BASE::m_toolMgr, TOOL_EVENT::Parameter(), TOOL_MANAGER::ProcessEvent(), selectAllItemsOnSheet(), SelectedEvent, SELECTION::Size(), and zoomFitSelection().

Referenced by SetTransitions().

893 {
894  clearSelection();
895  wxString* sheetpath = aEvent.Parameter<wxString*>();
896 
897  selectAllItemsOnSheet( *sheetpath );
898 
900 
901  if( m_selection.Size() > 0 )
903 
904 
905  return 0;
906 }
void zoomFitSelection(void)
Zooms the screen to center and fit the current selection.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
void selectAllItemsOnSheet(wxString &aSheetpath)
Selects all items with the given sheet timestamp name (the sheet path)
SELECTION m_selection
Current state of selection.
void clearSelection()
Function clearSelection() Clears the current selection.
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:373
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
bool SELECTION_TOOL::selectPoint ( const VECTOR2I aWhere,
bool  aOnDrag = false 
)
private

Function selectPoint() Selects an item pointed by the parameter aWhere.

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

Parameters
aWhereis the place where the item should be selected.
aAllowDisambiguationdecides what to do in case of disambiguation. If true, then a menu is shown, otherise function finishes without selecting anything.
Returns
True if an item was selected, false otherwise.

Definition at line 390 of file selection_tool.cpp.

References GENERAL_COLLECTOR::AllBoardItems, PCB_TOOL::board(), BUT_LEFT, clearSelection(), GENERAL_COLLECTOR::Collect(), disambiguationMenu(), PCB_BASE_FRAME::GetCollectorsGuide(), COLLECTOR::GetCount(), guessSelectionCandidates(), m_additive, PCB_TOOL::m_editModules, m_frame, GENERAL_COLLECTOR::ModuleItems, COLLECTOR::Remove(), selectable(), TA_MOUSE_UP, TC_ANY, toggleSelection(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Main(), and selectCursor().

391 {
392  BOARD_ITEM* item;
394  GENERAL_COLLECTOR collector;
395 
396  collector.Collect( board(),
398  wxPoint( aWhere.x, aWhere.y ), guide );
399 
400  bool anyCollected = collector.GetCount() != 0;
401 
402  // Remove unselectable items
403  for( int i = collector.GetCount() - 1; i >= 0; --i )
404  {
405  if( !selectable( collector[i] ) || ( aOnDrag && collector[i]->IsLocked() ) )
406  collector.Remove( i );
407  }
408 
409  switch( collector.GetCount() )
410  {
411  case 0:
412  if( !m_additive && anyCollected )
413  clearSelection();
414 
415  return false;
416 
417  case 1:
418  toggleSelection( collector[0] );
419 
420  return true;
421 
422  default:
423  // Apply some ugly heuristics to avoid disambiguation menus whenever possible
424  guessSelectionCandidates( collector );
425 
426  // Let's see if there is still disambiguation in selection..
427  if( collector.GetCount() == 1 )
428  {
429  toggleSelection( collector[0] );
430 
431  return true;
432  }
433  else if( collector.GetCount() > 1 )
434  {
435  if( aOnDrag )
437 
438  item = disambiguationMenu( &collector );
439 
440  if( item )
441  {
442  toggleSelection( item );
443 
444  return true;
445  }
446  }
447  break;
448  }
449 
450  return false;
451 }
int GetCount() const
Function GetCount returns the number of objects in the list.
static const KICAD_T AllBoardItems[]
A scan list for all editable board items, like PcbGeneralLocateAndDisplay()
Definition: collectors.h:241
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
void Collect(BOARD_ITEM *aItem, const KICAD_T aScanList[], const wxPoint &aRefPos, const COLLECTORS_GUIDE &aGuide)
Function Collect scans a BOARD_ITEM using this class's Inspector method, which does the collection...
Definition: collectors.cpp:447
void guessSelectionCandidates(GENERAL_COLLECTOR &aCollector) const
Function guessSelectionCandidates() Tries to guess best selection candidates in case multiple items a...
bool m_additive
Flag saying if items should be added to the current selection or rather replace it.
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
void Remove(int aIndex)
Function Remove removes the item at aIndex (first position is 0);.
GENERAL_COLLECTORS_GUIDE GetCollectorsGuide()
Function GetCollectorsGuide.
bool selectable(const BOARD_ITEM *aItem) const
Function selectable() Checks conditions for an item to be selected.
void toggleSelection(BOARD_ITEM *aItem)
Function toggleSelection() Changes selection status of a given item.
Class TOOL_EVENT.
Definition: tool_event.h:162
BOARD_ITEM * disambiguationMenu(GENERAL_COLLECTOR *aItems)
Function disambiguationMenu() Handles the menu that allows to select one of many items in case there ...
void clearSelection()
Function clearSelection() Clears the current selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
bool m_editModules
Definition: pcb_tool.h:112
static const KICAD_T ModuleItems[]
A scan list for primary module items.
Definition: collectors.h:288
Class GENERAL_COLLECTOR is intended for use when the right click button is pressed, or when the plain "arrow" tool is in effect.
Definition: collectors.h:211
Class GENERAL_COLLECTORS_GUIDE is a general implementation of a COLLECTORS_GUIDE. ...
Definition: collectors.h:378
BOARD * board() const
Definition: pcb_tool.h:110
int SELECTION_TOOL::selectSameSheet ( const TOOL_EVENT aEvent)
private

Selects all modules belonging to same hierarchical sheet as the selected footprint.

Definition at line 909 of file selection_tool.cpp.

References clearSelection(), SELECTION::Front(), m_selection, TOOL_BASE::m_toolMgr, mod, PCB_MODULE_T, TOOL_MANAGER::ProcessEvent(), selectAllItemsOnSheet(), selectCursor(), SelectedEvent, and SELECTION::Size().

Referenced by SetTransitions().

910 {
911  if( !selectCursor( true ) )
912  return 0;
913 
914  // this function currently only supports modules since they are only
915  // on one sheet.
916  auto item = m_selection.Front();
917 
918  if( !item )
919  return 0;
920 
921  if( item->Type() != PCB_MODULE_T )
922  return 0;
923 
924  auto mod = dynamic_cast<MODULE*>( item );
925 
926  clearSelection();
927 
928  // get the lowest subsheet name for this.
929  wxString sheetPath = mod->GetPath();
930  sheetPath = sheetPath.BeforeLast( '/' );
931  sheetPath = sheetPath.AfterLast( '/' );
932 
933  selectAllItemsOnSheet( sheetPath );
934 
935  // Inform other potentially interested tools
936  if( m_selection.Size() > 0 )
938 
939  return 0;
940 }
bool selectCursor(bool aSelectAlways=false)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
EDA_ITEM * Front() const
Definition: selection.h:144
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
class MODULE, a footprint
Definition: typeinfo.h:101
void selectAllItemsOnSheet(wxString &aSheetpath)
Selects all items with the given sheet timestamp name (the sheet path)
SELECTION m_selection
Current state of selection.
void clearSelection()
Function clearSelection() Clears the current selection.
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
int Size() const
Returns the number of selected parts.
Definition: selection.h:112
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
#define mod(a, n)
Definition: greymap.cpp:24
void SELECTION_TOOL::selectVisually ( BOARD_ITEM aItem)
private

Function selectVisually() Marks item as selected, but does not add it to the ITEMS_PICKED_LIST.

Parameters
aItemis an item to be be marked.

Definition at line 1396 of file selection_tool.cpp.

References KIGFX::GEOMETRY, KIGFX::VIEW::Hide(), m_selection, PCB_MODULE_T, EDA_ITEM::SetSelected(), EDA_ITEM::Type(), KIGFX::VIEW::Update(), and PCB_TOOL::view().

Referenced by select().

1397 {
1398  // Hide the original item, so it is shown only on overlay
1399  aItem->SetSelected();
1400  view()->Hide( aItem, true );
1401  view()->Update( aItem, KIGFX::GEOMETRY );
1402 
1403  // Modules are treated in a special way - when they are selected, we have to
1404  // unselect all the parts that make the module, not the module itself
1405 
1406  if( aItem->Type() == PCB_MODULE_T )
1407  {
1408  static_cast<MODULE*>( aItem )->RunOnChildren( [&] ( BOARD_ITEM* item )
1409  {
1410  item->SetSelected();
1411  view()->Hide( item, true );
1412  view()->Update( item, KIGFX::GEOMETRY );
1413  } );
1414  }
1415 
1416  view()->Update( &m_selection );
1417 }
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Function Hide() Temporarily hides the item in the view (e.g.
Definition: view.cpp:1352
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
KIGFX::VIEW * view() const
Definition: pcb_tool.h:108
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
class MODULE, a footprint
Definition: typeinfo.h:101
void SetSelected()
Definition: base_struct.h:227
SELECTION m_selection
Current state of selection.
void Update(VIEW_ITEM *aItem)
Function Update() For dynamic VIEWs, informs the associated VIEW that the graphical representation of...
Definition: view.cpp:1379
Color has changed.
Definition: view_item.h:57
void TOOL_INTERACTIVE::SetContextMenu ( CONTEXT_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 67 of file tool_interactive.cpp.

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

Referenced by disambiguationMenu(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), and TOOL_MENU::ShowContextMenu().

68 {
69  if( aMenu )
70  aMenu->SetTool( this );
71  else
72  aTrigger = CMENU_OFF;
73 
74  m_toolMgr->ScheduleContextMenu( this, aMenu, aTrigger );
75 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
void ScheduleContextMenu(TOOL_BASE *aTool, CONTEXT_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger)
Sets behaviour of the tool's context popup menu.
void SetTool(TOOL_INTERACTIVE *aTool)
Function SetTool() Sets a tool that is the creator of the menu.
void PCB_TOOL::SetEditModules ( bool  aEnabled)
inlineinherited

Function SetEditModules()

Toggles edit module mode. When enabled, one may select parts of modules individually (graphics, pads, etc.), so they can be modified.

Parameters
aEnableddecides if the mode should be enabled.

Definition at line 73 of file pcb_tool.h.

References PCB_TOOL::m_editModules.

74  {
75  m_editModules = aEnabled;
76  }
bool m_editModules
Definition: pcb_tool.h:112
void SELECTION_TOOL::SetTransitions ( )
overridevirtual

Sets up handlers for various events.

Reimplemented from TOOL_BASE.

Definition at line 542 of file selection_tool.cpp.

References ClearSelection(), CursorSelection(), PCB_ACTIONS::filterSelection, filterSelection(), find(), PCB_ACTIONS::find, findMove(), PCB_ACTIONS::findMove, TOOL_INTERACTIVE::Go(), Main(), PCB_ACTIONS::selectConnection, selectConnection(), PCB_ACTIONS::selectCopper, selectCopper(), PCB_ACTIONS::selectionActivate, PCB_ACTIONS::selectionClear, PCB_ACTIONS::selectionCursor, PCB_ACTIONS::selectionModified, PCB_ACTIONS::selectItem, SelectItem(), PCB_ACTIONS::selectNet, selectNet(), PCB_ACTIONS::selectOnSheetFromEeschema, selectOnSheetFromEeschema(), PCB_ACTIONS::selectSameSheet, selectSameSheet(), PCB_ACTIONS::unselectItem, UnselectItem(), and updateSelection().

543 {
549  Go( &SELECTION_TOOL::find, PCB_ACTIONS::find.MakeEvent() );
558 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
static TOOL_ACTION selectionActivate
Activation of the selection tool.
Definition: pcb_actions.h:47
int UnselectItem(const TOOL_EVENT &aEvent)
Item unselection event handler.
int Main(const TOOL_EVENT &aEvent)
Function Main()
int selectSameSheet(const TOOL_EVENT &aEvent)
Selects all modules belonging to same hierarchical sheet as the selected footprint.
static TOOL_ACTION unselectItem
Unselects an item (specified as the event parameter).
Definition: pcb_actions.h:59
static TOOL_ACTION selectNet
Selects all connections belonging to a single net.
Definition: pcb_actions.h:68
int find(const TOOL_EVENT &aEvent)
Find an item.
int findMove(const TOOL_EVENT &aEvent)
Find an item and start moving.
static TOOL_ACTION selectConnection
Selects a connection between junctions.
Definition: pcb_actions.h:62
int selectConnection(const TOOL_EVENT &aEvent)
Selects a trivial connection (between two junctions) of items in selection
void Go(int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
Function Go()
static TOOL_ACTION selectionModified
Modified selection notification.
Definition: pcb_actions.h:99
int selectCopper(const TOOL_EVENT &aEvent)
Selects items with a continuous copper connection to items in selection
int filterSelection(const TOOL_EVENT &aEvent)
Invoke filter dialog and modify current selection
static TOOL_ACTION find
Find an item.
Definition: pcb_actions.h:351
int updateSelection(const TOOL_EVENT &aEvent)
Event handler to update the selection VIEW_ITEM.
int ClearSelection(const TOOL_EVENT &aEvent)
Clear current selection event handler.
int selectOnSheetFromEeschema(const TOOL_EVENT &aEvent)
Selects all modules belonging to same sheet, from Eeschema, using crossprobing
static TOOL_ACTION selectCopper
Selects whole copper connection.
Definition: pcb_actions.h:65
int SelectItem(const TOOL_EVENT &aEvent)
Item selection event handler.
int selectNet(const TOOL_EVENT &aEvent)
Selects all copper connections belonging to the same net(s) as the items in the selection.
static TOOL_ACTION filterSelection
Filters the items in the current selection (invokes dialog)
Definition: pcb_actions.h:77
static TOOL_ACTION selectOnSheetFromEeschema
Selects all components on sheet from Eeschema crossprobing.
Definition: pcb_actions.h:71
static TOOL_ACTION selectItem
Selects an item (specified as the event parameter).
Definition: pcb_actions.h:56
static TOOL_ACTION findMove
Find an item and start moving.
Definition: pcb_actions.h:354
int CursorSelection(const TOOL_EVENT &aEvent)
Select a single item under cursor event handler.
static TOOL_ACTION selectionCursor
Select a single item under the cursor position.
Definition: pcb_actions.h:50
static TOOL_ACTION selectSameSheet
Selects all components on the same sheet as the selected footprint.
Definition: pcb_actions.h:74
void SELECTION_TOOL::toggleSelection ( BOARD_ITEM aItem)
private

Function toggleSelection() Changes selection status of a given item.

Parameters
aItemis the item to have selection status changed.

Definition at line 362 of file selection_tool.cpp.

References clearSelection(), EDA_DRAW_PANEL_GAL::ForceRefresh(), EDA_DRAW_FRAME::GetGalCanvas(), EDA_ITEM::IsSelected(), m_additive, m_frame, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), select(), selectable(), SelectedEvent, unselect(), and UnselectedEvent.

Referenced by findMove(), and selectPoint().

363 {
364  if( aItem->IsSelected() )
365  {
366  unselect( aItem );
367 
368  // Inform other potentially interested tools
370  }
371  else
372  {
373  if( !m_additive )
374  clearSelection();
375 
376  // Prevent selection of invisible or inactive items
377  if( selectable( aItem ) )
378  {
379  select( aItem );
380 
381  // Inform other potentially interested tools
383  }
384  }
385 
387 }
void ForceRefresh()
Function ForceRefresh() Forces a redraw.
bool m_additive
Flag saying if items should be added to the current selection or rather replace it.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
bool IsSelected() const
Definition: base_struct.h:221
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
bool selectable(const BOARD_ITEM *aItem) const
Function selectable() Checks conditions for an item to be selected.
void clearSelection()
Function clearSelection() Clears the current selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
static const TOOL_EVENT UnselectedEvent
Event sent after an item is unselected.
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
void unselect(BOARD_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:803
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
void SELECTION_TOOL::unselect ( BOARD_ITEM aItem)
private

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

Parameters
aItemis an item to be unselected.

Definition at line 1380 of file selection_tool.cpp.

References SELECTION::Empty(), EDA_ITEM::IsSelected(), m_frame, m_locked, m_selection, SELECTION::Remove(), PCB_BASE_FRAME::SetCurItem(), and unselectVisually().

Referenced by RequestSelection(), SanitizeSelection(), toggleSelection(), and UnselectItem().

1381 {
1382  if( !aItem->IsSelected() )
1383  return;
1384 
1385  m_selection.Remove( aItem );
1386  unselectVisually( aItem );
1387 
1388  if( m_selection.Empty() )
1389  {
1390  m_frame->SetCurItem( NULL );
1391  m_locked = true;
1392  }
1393 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:106
void SetCurItem(BOARD_ITEM *aItem, bool aDisplayInfo=true)
Function SetCurItem sets the currently selected item and displays it in the MsgPanel.
bool IsSelected() const
Definition: base_struct.h:221
void unselectVisually(BOARD_ITEM *aItem)
Function unselectVisually() Marks item as selected, but does not add it to the ITEMS_PICKED_LIST.
SELECTION m_selection
Current state of selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
bool m_locked
Can other tools modify locked items.
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:76
int SELECTION_TOOL::UnselectItem ( const TOOL_EVENT aEvent)

Item unselection event handler.

Definition at line 652 of file selection_tool.cpp.

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

Referenced by SetTransitions().

653 {
654  // Check if there is an item to be selected
655  BOARD_ITEM* item = aEvent.Parameter<BOARD_ITEM*>();
656 
657  if( item )
658  {
659  unselect( item );
660 
661  // Inform other potentially interested tools
663  }
664 
665  return 0;
666 }
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
static const TOOL_EVENT UnselectedEvent
Event sent after an item is unselected.
T Parameter() const
Function Parameter() Returns a non-standard parameter assigned to the event.
Definition: tool_event.h:373
void unselect(BOARD_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
void ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
void SELECTION_TOOL::unselectVisually ( BOARD_ITEM aItem)
private

Function unselectVisually() Marks item as selected, but does not add it to the ITEMS_PICKED_LIST.

Parameters
aItemis an item to be be marked.

Definition at line 1420 of file selection_tool.cpp.

References KIGFX::ALL, EDA_ITEM::ClearSelected(), KIGFX::VIEW::Hide(), m_selection, PCB_MODULE_T, EDA_ITEM::Type(), KIGFX::VIEW::Update(), and PCB_TOOL::view().

Referenced by clearSelection(), and unselect().

1421 {
1422  // Restore original item visibility
1423  aItem->ClearSelected();
1424  view()->Hide( aItem, false );
1425  view()->Update( aItem, KIGFX::ALL );
1426 
1427  // Modules are treated in a special way - when they are selected, we have to
1428  // unselect all the parts that make the module, not the module itself
1429 
1430  if( aItem->Type() == PCB_MODULE_T )
1431  {
1432  static_cast<MODULE*>( aItem )->RunOnChildren( [&] ( BOARD_ITEM* item )
1433  {
1434  item->ClearSelected();
1435  view()->Hide( item, false );
1436  view()->Update( item, KIGFX::ALL );
1437  });
1438  }
1439 
1440  view()->Update( &m_selection );
1441 }
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Function Hide() Temporarily hides the item in the view (e.g.
Definition: view.cpp:1352
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
KIGFX::VIEW * view() const
Definition: pcb_tool.h:108
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
void ClearSelected()
Definition: base_struct.h:231
Layers have changed.
Definition: view_item.h:59
class MODULE, a footprint
Definition: typeinfo.h:101
SELECTION m_selection
Current state of selection.
void Update(VIEW_ITEM *aItem)
Function Update() For dynamic VIEWs, informs the associated VIEW that the graphical representation of...
Definition: view.cpp:1379
int SELECTION_TOOL::updateSelection ( const TOOL_EVENT aEvent)
private

Event handler to update the selection VIEW_ITEM.

Definition at line 1763 of file selection_tool.cpp.

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

Referenced by SetTransitions().

1764 {
1765  getView()->Update( &m_selection );
1766 
1767  return 0;
1768 }
SELECTION m_selection
Current state of selection.
void Update(VIEW_ITEM *aItem)
Function Update() For dynamic VIEWs, informs the associated VIEW that the graphical representation of...
Definition: view.cpp:1379
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
OPT_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 55 of file tool_interactive.cpp.

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

Referenced by MODULE_EDITOR_TOOLS::CopyItems(), PCBNEW_CONTROL::DeleteItemCursor(), disambiguationMenu(), PCB_TOOL::doInteractiveItemPlacement(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), PCBNEW_CONTROL::GridSetOrigin(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::InlineDrag(), ZOOM_TOOL::Main(), PICKER_TOOL::Main(), EDIT_TOOL::Main(), Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), MODULE_EDITOR_TOOLS::PasteItems(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), MODULE_EDITOR_TOOLS::PlacePad(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), DRAWING_TOOL::runPolygonEventLoop(), selectMultiple(), selectPoint(), ZOOM_TOOL::selectRegion(), and DRAWING_TOOL::SetAnchor().

56 {
57  return m_toolMgr->ScheduleWait( this, aEventList );
58 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:220
boost::optional< 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.
void SELECTION_TOOL::zoomFitSelection ( void  )

Zooms the screen to center and fit the current selection.

Definition at line 869 of file selection_tool.cpp.

References KIGFX::VIEW::Add(), EDA_DRAW_PANEL_GAL::ForceRefresh(), EDA_DRAW_FRAME::GetGalCanvas(), KIGFX::VIEW::GetScale(), TOOL_BASE::getView(), m_frame, m_selection, max, scale, KIGFX::VIEW::SetCenter(), KIGFX::VIEW::SetScale(), KIGFX::VIEW::ToWorld(), PCB_TOOL::view(), SELECTION::ViewBBox(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by selectOnSheetFromEeschema().

870 {
871  //Should recalculate the view to zoom in on the selection
872  auto selectionBox = m_selection.ViewBBox();
873  auto canvas = m_frame->GetGalCanvas();
874  auto view = getView();
875 
876  VECTOR2D screenSize = view->ToWorld( canvas->GetClientSize(), false );
877 
878  if( !( selectionBox.GetWidth() == 0 ) || !( selectionBox.GetHeight() == 0 ) )
879  {
880  VECTOR2D vsize = selectionBox.GetSize();
881  double scale = view->GetScale() / std::max( fabs( vsize.x / screenSize.x ),
882  fabs( vsize.y / screenSize.y ) );
883  view->SetScale( scale );
884  view->SetCenter( selectionBox.Centre() );
885  view->Add( &m_selection );
886  }
887 
889 }
KIGFX::VIEW * view() const
Definition: pcb_tool.h:108
void ForceRefresh()
Function ForceRefresh() Forces a redraw.
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:440
void SetScale(double aScale)
Function SetScale() Sets the scaling factor.
Definition: view.h:247
const BOX2I ViewBBox() const override
Function ViewBBox() Returns the bounding box for all stored items covering all its layers...
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:564
SELECTION m_selection
Current state of selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:30
const int scale
#define max(a, b)
Definition: auxiliary.h:86
double GetScale() const
Function GetScale()
Definition: view.h:265
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:803
void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:311

Member Data Documentation

const TOOL_EVENT SELECTION_TOOL::ClearedEvent
static

Event sent after selection is cleared.

Definition at line 127 of file selection_tool.h.

Referenced by clearSelection(), and POINT_EDITOR::OnSelectionChange().

bool SELECTION_TOOL::m_additive
private

Flag saying if items should be added to the current selection or rather replace it.

Definition at line 324 of file selection_tool.h.

Referenced by Main(), selectMultiple(), selectPoint(), and toggleSelection().

bool SELECTION_TOOL::m_locked
private

Can other tools modify locked items.

Definition at line 330 of file selection_tool.h.

Referenced by CheckLock(), clearSelection(), Reset(), and unselect().

TOOL_MENU SELECTION_TOOL::m_menu
private

Menu model displayed by the tool.

Definition at line 333 of file selection_tool.h.

Referenced by GetToolMenu(), Init(), and Main().

bool SELECTION_TOOL::m_multiple
private

Flag saying if multiple selection mode is active.

Definition at line 327 of file selection_tool.h.

Referenced by selectable(), and selectMultiple().

std::unique_ptr<PRIV> SELECTION_TOOL::m_priv
private

Definition at line 336 of file selection_tool.h.

Referenced by filterSelection().

TOOL_ID TOOL_BASE::m_toolId
protectedinherited

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

Definition at line 215 of file tool_base.h.

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

TOOL_MANAGER* TOOL_BASE::m_toolMgr
protectedinherited

Definition at line 220 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), PCBNEW_CONTROL::AppendBoard(), PAD_TOOL::applyPadSettings(), TOOL_BASE::attachManager(), clearSelection(), MODULE_EDITOR_TOOLS::CopyItems(), PAD_TOOL::copyPadSettings(), PCB_EDITOR_CONTROL::CrossProbePcbToSch(), PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), PCBNEW_CONTROL::CursorControl(), ROUTER_TOOL::CustomTrackWidthDialog(), PCBNEW_CONTROL::DeleteItemCursor(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::drawZone(), PCB_EDITOR_CONTROL::DrillOrigin(), EDIT_TOOL::Duplicate(), EDIT_TOOL::editFootprintInFpEditor(), MODULE_EDITOR_TOOLS::EnumeratePads(), EDIT_TOOL::ExchangeFootprints(), findCallback(), findMove(), EDIT_TOOL::Flip(), TOOL_BASE::getEditFrameInt(), TOOL_BASE::GetManager(), TOOL_BASE::getModelInt(), EDIT_TOOL::getModificationPoint(), DRAWING_TOOL::getSourceZoneForAction(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), TOOL_INTERACTIVE::goInternal(), PCBNEW_CONTROL::GridSetOrigin(), PCB_EDITOR_CONTROL::HighlightNet(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::Init(), PLACEMENT_TOOL::Init(), PAD_TOOL::Init(), POINT_EDITOR::Init(), PCB_EDITOR_CONTROL::Init(), EDIT_TOOL::Init(), ROUTER_TOOL::InlineDrag(), EDIT_TOOL::invokeInlineRouter(), ZOOM_TOOL::Main(), PICKER_TOOL::Main(), EDIT_TOOL::Main(), Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), EDIT_TOOL::Mirror(), PCB_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::MoveExact(), POINT_EDITOR::OnSelectionChange(), MODULE_EDITOR_TOOLS::PasteItems(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), MODULE_EDITOR_TOOLS::PlacePad(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), EDIT_TOOL::Remove(), RequestSelection(), EDIT_TOOL::Rotate(), TOOL_INTERACTIVE::RunMainStack(), SanitizeSelection(), selectConnection(), selectCopper(), SelectItem(), selectMultiple(), selectNet(), selectOnSheetFromEeschema(), selectSameSheet(), TOOL_INTERACTIVE::SetContextMenu(), toggleSelection(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), UnselectItem(), PCB_EDITOR_CONTROL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), TOOL_INTERACTIVE::Wait(), PCB_EDITOR_CONTROL::ZoneDuplicate(), PCB_EDITOR_CONTROL::ZoneFill(), PCB_EDITOR_CONTROL::ZoneMerge(), and PCB_EDITOR_CONTROL::ZoneUnfill().

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

Referenced by TOOL_BASE::GetName().

TOOL_SETTINGS TOOL_BASE::m_toolSettings
protectedinherited

Definition at line 221 of file tool_base.h.

Referenced by TOOL_BASE::attachManager(), and TOOL_BASE::GetSettings().

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

Stores the type of the tool.

Definition at line 212 of file tool_base.h.

Referenced by TOOL_BASE::GetType().

const TOOL_EVENT SELECTION_TOOL::UnselectedEvent
static

Event sent after an item is unselected.

Definition at line 124 of file selection_tool.h.

Referenced by POINT_EDITOR::OnSelectionChange(), SanitizeSelection(), POINT_EDITOR::SetTransitions(), toggleSelection(), and UnselectItem().


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