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, CLIENT_SELECTION_FILTER aClientFilter=NULL)
 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 SelectItems (const TOOL_EVENT &aEvent)
 

Multiple item selection event handler

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

Item unselection event handler.

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

Multiple 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 ()
 
bool IsToolActive () const
 

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

enum  INTERACTIVE_PLACEMENT_OPTIONS {
  IPO_ROTATE = 1, IPO_FLIP = 2, IPO_PROPERTIES = 4, IPO_SINGLE_CLICK = 8,
  IPO_REPEAT = 16
}
 

Protected Member Functions

void doInteractiveItemPlacement (INTERACTIVE_PLACER_BASE *aPlacer, const wxString &aCommitMessage, int aOptions=IPO_ROTATE|IPO_FLIP|IPO_REPEAT)
 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::PCB_VIEWview () const
 
KIGFX::VIEW_CONTROLScontrols () const
 
PCB_EDIT_FRAMEframe () const
 
BOARDboard () const
 
MODULEmodule () const
 
PCB_DISPLAY_OPTIONSdisplayOptions () const
 
PCB_DRAW_PANEL_GALcanvas () const
 
const SELECTIONselection () const
 
SELECTIONselection ()
 
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, bool *aSelectionCancelledFlag=NULL, CLIENT_SELECTION_FILTER aClientFilter=NULL)
 Function selectPoint() Selects an item pointed by the parameter aWhere. More...
 
bool selectCursor (bool aSelectAlways=false, CLIENT_SELECTION_FILTER aClientFilter=NULL)
 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 expandSelectedConnection (const TOOL_EVENT &aEvent)
 

Expands the current selection to select a connection between two junctions

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 one 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...
 
const GENERAL_COLLECTORS_GUIDE getCollectorsGuide () const
 

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_subtractive
 Flag saying if items should be removed from the current selection. 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 63 of file pcbnew/tools/selection_tool.h.

Member Enumeration Documentation

enum PCB_TOOL::INTERACTIVE_PLACEMENT_OPTIONS
protectedinherited
Enumerator
IPO_ROTATE 
IPO_FLIP 
IPO_PROPERTIES 
IPO_SINGLE_CLICK 
IPO_REPEAT 

Definition at line 105 of file pcb_tool.h.

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 186 of file pcbnew/tools/selection_tool.cpp.

186  :
187  PCB_TOOL( "pcbnew.InteractiveSelection" ),
188  m_frame( NULL ),
189  m_additive( false ),
190  m_subtractive( false ),
191  m_multiple( false ),
192  m_locked( true ),
193  m_menu( *this ),
194  m_priv( std::make_unique<PRIV>() )
195 {
196 
197 }
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:70
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
TOOL_MENU m_menu
Menu model displayed by the tool.
bool m_subtractive
Flag saying if items should be removed from the current selection.
bool m_locked
Can other tools modify locked items.
SELECTION_TOOL::~SELECTION_TOOL ( )

Definition at line 200 of file pcbnew/tools/selection_tool.cpp.

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

201 {
202  getView()->Remove( &m_selection );
203 }
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:364
SELECTION m_selection
Current state of selection.
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35

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 EDIT_TOOL::copyToClipboard(), 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(), GERBVIEW_SELECTION_TOOL::MeasureTool(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), EDIT_TOOL::pickCopyReferencePoint(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), DRAWING_TOOL::SetAnchor(), ROUTER_TOOL::SettingsDialog(), and PCB_EDITOR_CONTROL::ShowLocalRatsnest().

50 {
52 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:210
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 59 of file tool_base.cpp.

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

Referenced by TOOL_MANAGER::RegisterTool().

60 {
61  m_toolMgr = aManager;
62  m_toolSettings = TOOL_SETTINGS( this );
63 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:216
friend class TOOL_SETTINGS
Definition: tool_base.h:155
BOARD* PCB_TOOL::board ( ) const
inlineprotectedinherited

Definition at line 136 of file pcb_tool.h.

Referenced by PCBNEW_CONTROL::AppendBoard(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), EDIT_TOOL::changeTrackWidthOnClick(), EDIT_TOOL::copyToClipboard(), MICROWAVE_TOOL::createInductorBetween(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), ROUTER_TOOL::CustomTrackWidthDialog(), PCB_TOOL::doInteractiveItemPlacement(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::drawSegment(), MODULE_EDITOR_TOOLS::EnumeratePads(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), filterSelection(), POINT_EDITOR::finishItem(), getCollectorsGuide(), ROUTER_TOOL::getNetclassDimensions(), PCBNEW_CONTROL::GraphicDisplayMode(), PAD_TOOL::haveFootprints(), highlightNet(), PCBNEW_CONTROL::LayerNext(), PCBNEW_CONTROL::LayerPrev(), ROUTER_TOOL::mainLoop(), PCBNEW_CONTROL::ModuleEdgeOutlines(), PCBNEW_CONTROL::ModuleTextOutlines(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::onTrackViaSizeChanged(), ROUTER_TOOL::onViaCommand(), PCBNEW_CONTROL::PadDisplayMode(), PCBNEW_CONTROL::PasteItemsFromClipboard(), PCBNEW_CONTROL::placeBoardItems(), MODULE_EDITOR_TOOLS::PlacePad(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), ROUTER_TOOL::prepareInteractive(), PCBNEW_CONTROL::Reset(), PNS::TOOL_BASE::Reset(), selectable(), selectAllItemsConnectedToItem(), selectAllItemsConnectedToTrack(), selectAllItemsOnNet(), selectAllItemsOnSheet(), selectPoint(), PCBNEW_CONTROL::TrackDisplayMode(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), PCBNEW_CONTROL::ViaDisplayMode(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), PCBNEW_CONTROL::ZoneDisplayMode(), ZONE_FILLER_TOOL::ZoneFill(), ZONE_FILLER_TOOL::ZoneFillAll(), PCB_EDITOR_CONTROL::ZoneMerge(), and ZONE_FILLER_TOOL::ZoneUnfillAll().

136 { return getModel<BOARD>(); }
PCB_DRAW_PANEL_GAL * PCB_TOOL::canvas ( ) const
protectedinherited

Definition at line 214 of file pcb_tool.cpp.

References PCB_TOOL::frame(), and EDA_DRAW_FRAME::GetGalCanvas().

Referenced by PCBNEW_CONTROL::GraphicDisplayMode(), PCBNEW_CONTROL::HighContrastMode(), PCBNEW_CONTROL::ModuleEdgeOutlines(), PCBNEW_CONTROL::ModuleTextOutlines(), PCBNEW_CONTROL::PadDisplayMode(), PCBNEW_CONTROL::TrackDisplayMode(), PCBNEW_CONTROL::ViaDisplayMode(), PCBNEW_CONTROL::ZoneDisplayMode(), and zoomFitSelection().

215 {
216  return static_cast<PCB_DRAW_PANEL_GAL*>( frame()->GetGalCanvas() );
217 }
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:135
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:895
SELECTION_LOCK_FLAGS SELECTION_TOOL::CheckLock ( )

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

Definition at line 683 of file pcbnew/tools/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(), ALIGN_DISTRIBUTE_TOOL::DistributeHorizontally(), ALIGN_DISTRIBUTE_TOOL::DistributeVertically(), EDIT_TOOL::Flip(), EDIT_TOOL::Main(), EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), POSITION_RELATIVE_TOOL::PositionRelative(), EDIT_TOOL::Remove(), and EDIT_TOOL::Rotate().

684 {
685  if( !m_locked || m_editModules )
686  return SELECTION_UNLOCKED;
687 
688  bool containsLocked = false;
689 
690  // Check if the selection contains locked items
691  for( const auto& item : m_selection )
692  {
693  switch( item->Type() )
694  {
695  case PCB_MODULE_T:
696  if( static_cast<MODULE*>( item )->IsLocked() )
697  containsLocked = true;
698  break;
699 
700  case PCB_MODULE_EDGE_T:
701  case PCB_MODULE_TEXT_T:
702  if( static_cast<MODULE*>( item->GetParent() )->IsLocked() )
703  containsLocked = true;
704  break;
705 
706  default: // suppress warnings
707  break;
708  }
709  }
710 
711  if( containsLocked )
712  {
713  if( IsOK( m_frame, _( "Selection contains locked items. Do you want to continue?" ) ) )
714  {
715  m_locked = false;
717  }
718  else
719  return SELECTION_LOCKED;
720  }
721 
722  return SELECTION_UNLOCKED;
723 }
class EDGE_MODULE, a footprint edge
Definition: typeinfo.h:94
class MODULE, a footprint
Definition: typeinfo.h:89
SELECTION m_selection
Current state of selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
bool m_editModules
Definition: pcb_tool.h:143
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:93
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:233
int SELECTION_TOOL::ClearSelection ( const TOOL_EVENT aEvent)

Clear current selection event handler.

Definition at line 745 of file pcbnew/tools/selection_tool.cpp.

References clearSelection().

Referenced by setTransitions().

746 {
747  clearSelection();
748 
749  return 0;
750 }
void clearSelection()
Function clearSelection() Clears the current selection.
void SELECTION_TOOL::clearSelection ( )
private

Function clearSelection() Clears the current selection.

Definition at line 1348 of file pcbnew/tools/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(), selectOnSheetFromEeschema(), selectPoint(), selectSameSheet(), and toggleSelection().

1349 {
1350  if( m_selection.Empty() )
1351  return;
1352 
1353  for( auto item : m_selection )
1354  unselectVisually( static_cast<BOARD_ITEM*>( item ) );
1355 
1356  m_selection.Clear();
1357  m_selection.SetIsHover( false );
1358  m_selection.ClearReferencePoint();
1359 
1360  if( m_frame )
1361  {
1362  m_frame->SetCurItem( NULL );
1363  }
1364 
1365  m_locked = true;
1366 
1367  // Inform other potentially interested tools
1369 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:109
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
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.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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.
int SELECTION_TOOL::CursorSelection ( const TOOL_EVENT aEvent)

Select a single item under cursor event handler.

Definition at line 726 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

727 {
729 
730  if( m_selection.Empty() ) // Try to find an item that could be modified
731  {
732  selectCursor( true, aClientFilter );
733 
734  if( CheckLock() == SELECTION_LOCKED )
735  {
736  clearSelection();
737  return 0;
738  }
739  }
740 
741  return 0;
742 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:109
SELECTION_LOCK_FLAGS CheckLock()
Checks if the user has agreed to modify locked items for the given selection.
void(* CLIENT_SELECTION_FILTER)(const VECTOR2I &, GENERAL_COLLECTOR &)
bool selectCursor(bool aSelectAlways=false, CLIENT_SELECTION_FILTER aClientFilter=NULL)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
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:378
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 1372 of file pcbnew/tools/selection_tool.cpp.

References KIGFX::VIEW_GROUP::Add(), CONTEXT_MENU::Add(), KIGFX::VIEW::Add(), EDA_ITEM::ClearBrightened(), CMENU_NOW, CONTEXT_MENU::DisplayTitle(), Format(), COLLECTOR::GetCount(), EDA_ITEM::GetMenuImage(), EDA_ITEM::GetSelectMenuText(), TOOL_BASE::getView(), KIGFX::VIEW::Hide(), i, LAYER_GP_OVERLAY, KIGFX::VIEW::MarkTargetDirty(), min, KIGFX::VIEW_GROUP::Remove(), KIGFX::VIEW::Remove(), EDA_ITEM::SetBrightened(), TOOL_INTERACTIVE::SetContextMenu(), CONTEXT_MENU::SetIcon(), KIGFX::VIEW_GROUP::SetLayer(), CONTEXT_MENU::SetTitle(), TA_CONTEXT_MENU_CHOICE, TA_CONTEXT_MENU_UPDATE, KIGFX::TARGET_OVERLAY, and TOOL_INTERACTIVE::Wait().

Referenced by selectPoint().

1373 {
1374  BOARD_ITEM* current = NULL;
1375  KIGFX::VIEW_GROUP highlightGroup;
1376  CONTEXT_MENU menu;
1377 
1378  highlightGroup.SetLayer( LAYER_GP_OVERLAY );
1379  getView()->Add( &highlightGroup );
1380 
1381  int limit = std::min( 9, aCollector->GetCount() );
1382 
1383  for( int i = 0; i < limit; ++i )
1384  {
1385  wxString text;
1386  BOARD_ITEM* item = ( *aCollector )[i];
1387  text = item->GetSelectMenuText();
1388 
1389  wxString menuText = wxString::Format("&%d. %s", i + 1, text );
1390  menu.Add( menuText, i + 1, item->GetMenuImage() );
1391  }
1392 
1393  menu.SetTitle( _( "Clarify Selection" ) );
1394  menu.SetIcon( info_xpm );
1395  menu.DisplayTitle( true );
1396  SetContextMenu( &menu, CMENU_NOW );
1397 
1398  while( OPT_TOOL_EVENT evt = Wait() )
1399  {
1400  if( evt->Action() == TA_CONTEXT_MENU_UPDATE )
1401  {
1402  if( current )
1403  {
1404  current->ClearBrightened();
1405  getView()->Hide( current, false );
1406  highlightGroup.Remove( current );
1408  }
1409 
1410  int id = *evt->GetCommandId();
1411 
1412  // User has pointed an item, so show it in a different way
1413  if( id > 0 && id <= limit )
1414  {
1415  current = ( *aCollector )[id - 1];
1416  current->SetBrightened();
1417  getView()->Hide( current, true );
1418  highlightGroup.Add( current );
1420  }
1421  else
1422  {
1423  current = NULL;
1424  }
1425  }
1426  else if( evt->Action() == TA_CONTEXT_MENU_CHOICE )
1427  {
1428  if( current )
1429  {
1430  current->ClearBrightened();
1431  getView()->Hide( current, false );
1432  highlightGroup.Remove( current );
1434  }
1435 
1436  OPT<int> id = evt->GetCommandId();
1437 
1438  // User has selected an item, so this one will be returned
1439  if( id && ( *id > 0 ) )
1440  current = ( *aCollector )[*id - 1];
1441  else
1442  current = NULL;
1443 
1444  break;
1445  }
1446  }
1447  getView()->Remove( &highlightGroup );
1448 
1449 
1450  return current;
1451 }
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Temporarily hides the item in the view (e.g.
Definition: view.cpp:1466
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
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:364
void SetBrightened()
Definition: base_struct.h:240
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:244
void MarkTargetDirty(int aTarget)
Function MarkTargetDirty() Sets or clears target &#39;dirty&#39; flag.
Definition: view.h:577
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
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes an item from the group.
Definition: view_group.cpp:61
general purpose overlay
virtual void Add(VIEW_ITEM *aItem)
Function Add() Adds an item to the group.
Definition: view_group.cpp:55
virtual void SetLayer(int aLayer)
Function SetLayer() Sets layer used to draw the group.
Definition: view_group.h:115
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
void SetIcon(const BITMAP_OPAQUE *aIcon)
Function SetIcon() Assigns an icon for the entry.
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
void SetTitle(const wxString &aTitle) override
Function SetTitle() Sets title for the context menu.
size_t i
Definition: json11.cpp:597
boost::optional< T > OPT
Definition: optional.h:7
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:334
void DisplayTitle(bool aDisplay=true)
Function DisplayTitle() Decides whether a title for a pop up menu should be displayed.
virtual BITMAP_DEF GetMenuImage() const
Function GetMenuImage returns a pointer to an image to be used in menus.
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:465
#define min(a, b)
Definition: auxiliary.h:85
PCB_DISPLAY_OPTIONS * PCB_TOOL::displayOptions ( ) const
protectedinherited

Definition at line 209 of file pcb_tool.cpp.

References PCB_TOOL::frame(), and PCB_BASE_FRAME::GetDisplayOptions().

Referenced by PCBNEW_CONTROL::GraphicDisplayMode(), PCBNEW_CONTROL::HighContrastMode(), PCBNEW_CONTROL::ModuleEdgeOutlines(), PCBNEW_CONTROL::ModuleTextOutlines(), PCBNEW_CONTROL::PadDisplayMode(), PNS::TOOL_BASE::pickSingleItem(), PCBNEW_CONTROL::TrackDisplayMode(), PCBNEW_CONTROL::ViaDisplayMode(), and PCBNEW_CONTROL::ZoneDisplayMode().

210 {
211  return static_cast<PCB_DISPLAY_OPTIONS*>( frame()->GetDisplayOptions() );
212 }
void * GetDisplayOptions() override
Function GetDisplayOptions returns the display options current in use Display options are relative to...
Class PCB_DISPLAY_OPTIONS handles display options like enable/disable some optional drawings...
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:135
void PCB_TOOL::doInteractiveItemPlacement ( INTERACTIVE_PLACER_BASE aPlacer,
const wxString &  aCommitMessage,
int  aOptions = IPO_ROTATE | IPO_FLIP | IPO_REPEAT 
)
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::PCB_VIEW::Add(), KIGFX::VIEW_GROUP::Add(), SELECTION::Add(), PCB_TOOL::board(), BUT_LEFT, KIGFX::VIEW_CONTROLS::CaptureCursor(), SELECTION::Clear(), PCB_TOOL::controls(), INTERACTIVE_PLACER_BASE::CreateItem(), dyn_cast(), PCB_ACTIONS::flip, PCB_TOOL::frame(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_EVT_UTILS::GetEventRotationAngle(), TOOL_BASE::GetManager(), PCB_TOOL::IPO_FLIP, PCB_TOOL::IPO_REPEAT, PCB_TOOL::IPO_ROTATE, PCB_TOOL::IPO_SINGLE_CLICK, TOOL_EVT_UTILS::IsCancelInteractive(), TOOL_EVT_UTILS::IsRotateToolEvt(), INTERACTIVE_PLACER_BASE::m_board, INTERACTIVE_PLACER_BASE::m_frame, PCB_TOOL::module(), PCB_MODULE_T, INTERACTIVE_PLACER_BASE::PlaceItem(), BOARD_COMMIT::Push(), KIGFX::PCB_VIEW::Remove(), KIGFX::VIEW_GROUP::Remove(), SELECTION::Remove(), TOOL_MANAGER::RunAction(), MODULE::RunOnChildren(), PCB_ACTIONS::selectionClear, KIGFX::VIEW_CONTROLS::SetAutoPan(), KIGFX::VIEW_CONTROLS::SetSnapping(), KIGFX::VIEW_CONTROLS::ShowCursor(), INTERACTIVE_PLACER_BASE::SnapItem(), TC_COMMAND, KIGFX::PCB_VIEW::Update(), PCB_TOOL::view(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by MICROWAVE_TOOL::addMicrowaveFootprint(), DRAWING_TOOL::DrawVia(), and MODULE_EDITOR_TOOLS::PlacePad().

42 {
43  using namespace std::placeholders;
44  std::unique_ptr<BOARD_ITEM> newItem;
45 
46  Activate();
47 
48  BOARD_COMMIT commit( frame() );
49 
51 
52  // do not capture or auto-pan until we start placing an item
53  controls()->ShowCursor( true );
54  controls()->SetSnapping( true );
55 
56  // Add a VIEW_GROUP that serves as a preview for the new item
57  SELECTION preview;
58  view()->Add( &preview );
59 
60  aPlacer->m_board = board();
61  aPlacer->m_frame = frame();
62 
63  if( aOptions & IPO_SINGLE_CLICK )
64  {
65  VECTOR2I cursorPos = controls()->GetCursorPosition();
66 
67  newItem = aPlacer->CreateItem();
68  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
69 
70  preview.Add( newItem.get() );
71  }
72 
73  // Main loop: keep receiving events
74  while( OPT_TOOL_EVENT evt = Wait() )
75  {
76  VECTOR2I cursorPos = controls()->GetCursorPosition();
77 
79  {
80  if( newItem )
81  {
82  // Delete the old item and have another try
83  newItem = nullptr;
84 
85  preview.Clear();
86 
87  if( aOptions & IPO_SINGLE_CLICK )
88  break;
89 
90  controls()->SetAutoPan( false );
91  controls()->CaptureCursor( false );
92  controls()->ShowCursor( true );
93  }
94  else
95  {
96  break;
97  }
98 
99  if( evt->IsActivate() ) // now finish unconditionally
100  break;
101  }
102 
103  else if( evt->IsClick( BUT_LEFT ) )
104  {
105  if( !newItem )
106  {
107  // create the item if possible
108  newItem = aPlacer->CreateItem();
109 
110  // no item created, so wait for another click
111  if( !newItem )
112  continue;
113 
114  controls()->CaptureCursor( true );
115  controls()->SetAutoPan( true );
116 
117  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
118 
119  preview.Add( newItem.get() );
120 
121  if( newItem->Type() == PCB_MODULE_T )
122  {
123  auto module = dyn_cast<MODULE*>( newItem.get() );
124 
125  // modules have more drawable parts
126  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Add, &preview, _1 ) );
127  }
128  }
129  else
130  {
131  newItem->ClearFlags();
132  preview.Remove( newItem.get() );
133 
134  aPlacer->PlaceItem( newItem.get(), commit );
135 
136  if( newItem->Type() == PCB_MODULE_T )
137  {
138  auto module = dyn_cast<MODULE*>( newItem.get() );
139  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Remove, &preview, _1 ) );
140  }
141 
142  newItem.release();
143  commit.Push( aCommitMessage );
144 
145  controls()->CaptureCursor( false );
146  controls()->SetAutoPan( false );
147  controls()->ShowCursor( true );
148 
149  if( !( aOptions & IPO_REPEAT ) )
150  break;
151 
152  if( aOptions & IPO_SINGLE_CLICK )
153  {
155 
156  newItem = aPlacer->CreateItem();
157  newItem->SetPosition( wxPoint( pos.x, pos.y ) );
158 
159  preview.Add( newItem.get() );
160  }
161  }
162  }
163 
164  else if( newItem && evt->Category() == TC_COMMAND )
165  {
166  /*
167  * Handle any events that can affect the item as we move
168  * it around, eg rotate and flip
169  */
170 
171  if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) && ( aOptions & IPO_ROTATE ) )
172  {
173  const auto rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle(
174  *frame(), *evt );
175  newItem->Rotate( newItem->GetPosition(), rotationAngle );
176  view()->Update( &preview );
177  }
178  else if( evt->IsAction( &PCB_ACTIONS::flip ) && ( aOptions & IPO_FLIP ) )
179  {
180  newItem->Flip( newItem->GetPosition() );
181  view()->Update( &preview );
182  }
183  }
184 
185  else if( newItem && evt->IsMotion() )
186  {
187  // track the cursor
188  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
189  aPlacer->SnapItem( newItem.get() );
190 
191  // Show a preview of the item
192  view()->Update( &preview );
193  }
194  }
195 
196  view()->Remove( &preview );
197 }
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.
virtual void PlaceItem(BOARD_ITEM *aItem, BOARD_COMMIT &aCommit)
Definition: pcb_tool.cpp:239
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:84
void RunOnChildren(const std::function< void(BOARD_ITEM *)> &aFunction)
Function RunOnChildren.
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags) override
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: pcb_view.cpp:81
virtual std::unique_ptr< BOARD_ITEM > CreateItem()=0
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
PCB_EDIT_FRAME * m_frame
Definition: pcb_tool.h:58
bool IsRotateToolEvt(const TOOL_EVENT &aEvt)
Function isRotateToolEvt()
Casted dyn_cast(From aObject)
Function dyn_cast()
Definition: typeinfo.h:61
virtual void Remove(VIEW_ITEM *aItem) override
Function Remove() Removes a VIEW_ITEM from the view.
Definition: pcb_view.cpp:64
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:74
virtual void SnapItem(BOARD_ITEM *aItem)
Definition: pcb_tool.cpp:234
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:134
class MODULE, a footprint
Definition: typeinfo.h:89
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:135
MODULE * module() const
Definition: pcb_tool.h:137
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
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:102
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:133
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.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1) override
Function Add() Adds a VIEW_ITEM to the view.
Definition: pcb_view.cpp:48
int GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvt)
Function getEventRotationAngle()
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:465
BOARD * board() const
Definition: pcb_tool.h:136
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:79
bool PCB_TOOL::EditingModules ( ) const
inlineinherited

Definition at line 98 of file pcb_tool.h.

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

99  {
100  return m_editModules;
101  }
bool m_editModules
Definition: pcb_tool.h:143
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::expandSelectedConnection ( const TOOL_EVENT aEvent)
private

Expands the current selection to select a connection between two junctions

Definition at line 854 of file pcbnew/tools/selection_tool.cpp.

References SELECTION::GetItems(), m_selection, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), selectAllItemsConnectedToTrack(), SelectedEvent, PCB_TOOL::selection(), and SELECTION::Size().

Referenced by selectConnection(), and setTransitions().

855 {
856  // copy the selection, since we're going to iterate and modify
857  auto selection = m_selection.GetItems();
858 
859  for( auto item : selection )
860  {
861  TRACK* trackItem = dynamic_cast<TRACK*>( item );
862 
863  if( trackItem )
864  selectAllItemsConnectedToTrack( *trackItem );
865  }
866 
867  // Inform other potentially interested tools
868  if( m_selection.Size() > 0 )
870 
871  return 0;
872 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
const std::set< EDA_ITEM * > GetItems() const
Definition: selection.h:120
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
SELECTION m_selection
Current state of selection.
const SELECTION & selection() const
Definition: pcb_tool.cpp:219
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.
int Size() const
Returns the number of selected parts.
Definition: selection.h:115
int SELECTION_TOOL::filterSelection ( const TOOL_EVENT aEvent)
private

Invoke filter dialog and modify current selection

Definition at line 1314 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

1315 {
1316  auto& opts = m_priv->m_filterOpts;
1317  DIALOG_BLOCK_OPTIONS dlg( m_frame, opts, false, _( "Filter selection" ) );
1318 
1319  const int cmd = dlg.ShowModal();
1320 
1321  if( cmd != wxID_OK )
1322  return 0;
1323 
1324  const auto& board = *getModel<BOARD>();
1325 
1326  // copy current selection
1327  auto selection = m_selection.GetItems();
1328 
1329  // clear current selection
1330  clearSelection();
1331 
1332  // copy selection items from the saved selection
1333  // according to the dialog options
1334  for( auto i : selection )
1335  {
1336  auto item = static_cast<BOARD_ITEM*>( i );
1337  bool include = itemIsIncludedByFilter( *item, board, opts );
1338 
1339  if( include )
1340  {
1341  select( item );
1342  }
1343  }
1344  return 0;
1345 }
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...
static bool itemIsIncludedByFilter(const BOARD_ITEM &aItem, const BOARD &aBoard, const DIALOG_BLOCK_OPTIONS::OPTIONS &aBlockOpts)
Function itemIsIncludedByFilter()
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:120
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.
const SELECTION & selection() const
Definition: pcb_tool.cpp:219
size_t i
Definition: json11.cpp:597
BOARD * board() const
Definition: pcb_tool.h:136
int SELECTION_TOOL::find ( const TOOL_EVENT aEvent)
private

Find an item.

Definition at line 1189 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

1190 {
1191  DIALOG_FIND dlg( m_frame );
1192  dlg.EnableWarp( false );
1193  dlg.SetCallback( std::bind( &SELECTION_TOOL::findCallback, this, _1 ) );
1194  dlg.ShowModal();
1195 
1196  return 0;
1197 }
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 1172 of file pcbnew/tools/selection_tool.cpp.

References clearSelection(), EDA_DRAW_PANEL_GAL::ForceRefresh(), EDA_DRAW_FRAME::GetGalCanvas(), BOARD_ITEM::GetPosition(), TOOL_BASE::getView(), m_frame, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ProcessEvent(), select(), SelectedEvent, and KIGFX::VIEW::SetCenter().

Referenced by find().

1173 {
1174  clearSelection();
1175 
1176  if( aItem )
1177  {
1178  select( aItem );
1179  getView()->SetCenter( aItem->GetPosition() );
1180 
1181  // Inform other potentially interested tools
1183  }
1184 
1186 }
void ForceRefresh()
Function ForceRefresh() Forces a redraw.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:587
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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.
virtual const wxPoint GetPosition() const =0
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:895
int SELECTION_TOOL::findMove ( const TOOL_EVENT aEvent)
private

Find an item and start moving.

Definition at line 1200 of file pcbnew/tools/selection_tool.cpp.

References clearSelection(), KIGFX::VIEW_CONTROLS::ForceCursorPosition(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), PCB_BASE_FRAME::GetFootprintFromBoardByReference(), MODULE::GetPosition(), TOOL_BASE::getViewControls(), TOOL_MANAGER::InvokeTool(), m_frame, m_selection, TOOL_BASE::m_toolMgr, PCB_TOOL::module(), KIGFX::VIEW_CONTROLS::SetCursorPosition(), SELECTION::SetReferencePoint(), and toggleSelection().

Referenced by setTransitions().

1201 {
1203 
1204  if( module )
1205  {
1206  KIGFX::VIEW_CONTROLS* viewCtrls = getViewControls();
1207  clearSelection();
1208  toggleSelection( module );
1209 
1210  auto cursorPosition = viewCtrls->GetCursorPosition( false );
1211 
1212  // Set a reference point so InteractiveEdit will move it to the
1213  // cursor before waiting for mouse move events
1215 
1216  // Place event on module origin first, so the generic anchor snap
1217  // doesn't just choose the closest pin for us
1218  viewCtrls->ForceCursorPosition( true, module->GetPosition() );
1219 
1220  // pick the component up and start moving
1221  m_toolMgr->InvokeTool( "pcbnew.InteractiveEdit" );
1222 
1223  // restore the previous cursor position
1224  viewCtrls->SetCursorPosition( cursorPosition, false );
1225  }
1226 
1227  return 0;
1228 }
TOOL_MANAGER * m_toolMgr
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...
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Moves cursor to the requested position expressed in world coordinates.
void SetReferencePoint(const VECTOR2I &aP)
Definition: selection.h:203
void toggleSelection(BOARD_ITEM *aItem)
Function toggleSelection() Changes selection status of a given item.
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
SELECTION m_selection
Current state of selection.
Class VIEW_CONTROLS is an interface for classes handling user events controlling the view behaviour (...
void clearSelection()
Function clearSelection() Clears the current selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
MODULE * module() const
Definition: pcb_tool.h:137
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:41
MODULE * GetFootprintFromBoardByReference()
Function GetFootprintFromBoardByReference.
const wxPoint GetPosition() const override
Definition: class_module.h:182
PCB_EDIT_FRAME* PCB_TOOL::frame ( ) const
inlineprotectedinherited

Definition at line 135 of file pcb_tool.h.

Referenced by POINT_EDITOR::addCorner(), MICROWAVE_TOOL::addMicrowaveFootprint(), PAD_TOOL::applyPadSettings(), PCB_TOOL::canvas(), EDIT_TOOL::changeTrackWidthOnClick(), PNS::TOOL_BASE::checkSnap(), PAD_TOOL::copyPadSettings(), EDIT_TOOL::copyToClipboard(), MICROWAVE_TOOL::createInductorBetween(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), ROUTER_TOOL::CustomTrackWidthDialog(), PCB_TOOL::displayOptions(), PCB_TOOL::doInteractiveItemPlacement(), ROUTER_TOOL::DpDimensionsDialog(), DRAWING_TOOL::drawArc(), DRAWING_TOOL::DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawSegment(), DRAWING_TOOL::DrawVia(), MODULE_EDITOR_TOOLS::EnumeratePads(), EDIT_TOOL::ExchangeFootprints(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), ROUTER_TOOL::finishInteractive(), getMicrowaveItemCreator(), highlightNet(), PICKER_TOOL::Init(), PAD_TOOL::Init(), EDIT_TOOL::Init(), Init(), ROUTER_TOOL::InlineDrag(), PICKER_TOOL::Main(), EDIT_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), LENGTH_TUNER_TOOL::meanderSettingsDialog(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::onViaCommand(), PCBNEW_CONTROL::PasteItemsFromClipboard(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), MODULE_EDITOR_TOOLS::PlacePad(), DRAWING_TOOL::PlaceText(), ROUTER_TOOL::prepareInteractive(), PAD_TOOL::pushPadSettings(), POINT_EDITOR::removeCorner(), PNS::TOOL_BASE::Reset(), ROUTER_TOOL::RouteDiffPair(), ROUTER_TOOL::RouteSingleTrace(), ROUTER_TOOL::SettingsDialog(), ROUTER_TOOL::switchLayerOnViaPlacement(), LENGTH_TUNER_TOOL::TuneDiffPair(), LENGTH_TUNER_TOOL::TuneDiffPairSkew(), LENGTH_TUNER_TOOL::TuneSingleTrace(), POINT_EDITOR::updateItem(), ZONE_FILLER_TOOL::ZoneFill(), and ZONE_FILLER_TOOL::ZoneFillAll().

135 { return getEditFrame<PCB_EDIT_FRAME>(); }
const GENERAL_COLLECTORS_GUIDE SELECTION_TOOL::getCollectorsGuide ( ) const
private

Definition at line 433 of file pcbnew/tools/selection_tool.cpp.

References PCB_TOOL::board(), LAYER_MOD_BK, LAYER_MOD_FR, LAYER_MOD_REFERENCES, LAYER_MOD_TEXT_BK, LAYER_MOD_TEXT_FR, LAYER_MOD_TEXT_INVISIBLE, LAYER_MOD_VALUES, LAYER_PAD_BK, LAYER_PAD_FR, LAYER_TRACKS, LAYER_VIA_BBLIND, LAYER_VIA_MICROVIA, LAYER_VIA_THROUGH, GENERAL_COLLECTORS_GUIDE::SetIgnoreBlindBuriedVias(), GENERAL_COLLECTORS_GUIDE::SetIgnoreMicroVias(), GENERAL_COLLECTORS_GUIDE::SetIgnoreModulesOnBack(), GENERAL_COLLECTORS_GUIDE::SetIgnoreModulesOnFront(), GENERAL_COLLECTORS_GUIDE::SetIgnoreModulesRefs(), GENERAL_COLLECTORS_GUIDE::SetIgnoreModulesVals(), GENERAL_COLLECTORS_GUIDE::SetIgnoreMTextsMarkedNoShow(), GENERAL_COLLECTORS_GUIDE::SetIgnoreMTextsOnBack(), GENERAL_COLLECTORS_GUIDE::SetIgnoreMTextsOnFront(), GENERAL_COLLECTORS_GUIDE::SetIgnorePadsOnBack(), GENERAL_COLLECTORS_GUIDE::SetIgnorePadsOnFront(), GENERAL_COLLECTORS_GUIDE::SetIgnoreThroughVias(), GENERAL_COLLECTORS_GUIDE::SetIgnoreTracks(), and PCB_TOOL::view().

Referenced by selectPoint().

434 {
435  GENERAL_COLLECTORS_GUIDE guide( board()->GetVisibleLayers(),
436  (PCB_LAYER_ID) view()->GetTopLayer() );
437 
438  // account for the globals
439  guide.SetIgnoreMTextsMarkedNoShow( ! board()->IsElementVisible( LAYER_MOD_TEXT_INVISIBLE ) );
440  guide.SetIgnoreMTextsOnBack( ! board()->IsElementVisible( LAYER_MOD_TEXT_BK ) );
441  guide.SetIgnoreMTextsOnFront( ! board()->IsElementVisible( LAYER_MOD_TEXT_FR ) );
442  guide.SetIgnoreModulesOnBack( ! board()->IsElementVisible( LAYER_MOD_BK ) );
443  guide.SetIgnoreModulesOnFront( ! board()->IsElementVisible( LAYER_MOD_FR ) );
444  guide.SetIgnorePadsOnBack( ! board()->IsElementVisible( LAYER_PAD_BK ) );
445  guide.SetIgnorePadsOnFront( ! board()->IsElementVisible( LAYER_PAD_FR ) );
446  guide.SetIgnoreModulesVals( ! board()->IsElementVisible( LAYER_MOD_VALUES ) );
447  guide.SetIgnoreModulesRefs( ! board()->IsElementVisible( LAYER_MOD_REFERENCES ) );
448  guide.SetIgnoreThroughVias( ! board()->IsElementVisible( LAYER_VIA_THROUGH ) );
449  guide.SetIgnoreBlindBuriedVias( ! board()->IsElementVisible( LAYER_VIA_BBLIND ) );
450  guide.SetIgnoreMicroVias( ! board()->IsElementVisible( LAYER_VIA_MICROVIA ) );
451  guide.SetIgnoreTracks( ! board()->IsElementVisible( LAYER_TRACKS ) );
452 
453  return guide;
454 }
to draw blind/buried vias
show modules on back
show modules values (when texts are visibles)
smd pads, back layer
show modules on front
PCB_LAYER_ID
A quick note on layer IDs:
to draw usual through hole vias
smd pads, front layer
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:133
A general implementation of a COLLECTORS_GUIDE.
Definition: collectors.h:371
show modules references (when texts are visibles)
BOARD * board() const
Definition: pcb_tool.h:136
template<typename T >
T* TOOL_BASE::getEditFrame ( ) const
inlineprotectedinherited

Function getEditFrame()

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

Definition at line 188 of file tool_base.h.

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

189  {
190  return static_cast<T*>( getEditFrameInt() );
191  }
wxWindow * getEditFrameInt() const
Definition: tool_base.cpp:47
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.

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

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:210
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.

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:215
template<typename T >
T* TOOL_BASE::getModel ( ) const
inlineprotectedinherited

Function getModel()

Returns the model object if it matches the requested type.

Definition at line 199 of file tool_base.h.

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

200  {
201  EDA_ITEM* m = getModelInt();
202 
203  return static_cast<T*>( m );
204  }
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:162
EDA_ITEM * getModelInt() const
Definition: tool_base.cpp:53
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.

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:214
TOOL_SETTINGS & TOOL_BASE::GetSettings ( )
inherited

Definition at line 77 of file tool_base.cpp.

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

78 {
79  return m_toolSettings;
80 }
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:216
TOOL_MENU& SELECTION_TOOL::GetToolMenu ( )
inline

Definition at line 100 of file pcbnew/tools/selection_tool.h.

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

101  {
102  return m_menu;
103  }
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.

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

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

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

Referenced by ALIGN_DISTRIBUTE_TOOL::AlignLeft(), ALIGN_DISTRIBUTE_TOOL::AlignRight(), PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), PCBNEW_CONTROL::CursorControl(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), disambiguationMenu(), MICROWAVE_TOOL::drawMicrowaveInductor(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), findCallback(), ROUTER_TOOL::getStartLayer(), PCBNEW_CONTROL::GridResetOrigin(), PCBNEW_CONTROL::GridSetOrigin(), guessSelectionCandidates(), GERBVIEW_CONTROL::HighlightControl(), PNS::TOOL_BASE::highlightNet(), PCBNEW_CONTROL::LayerAlphaDec(), PCBNEW_CONTROL::LayerAlphaInc(), GERBVIEW_SELECTION_TOOL::MeasureTool(), EDIT_TOOL::MeasureTool(), EDIT_TOOL::MoveExact(), POINT_EDITOR::OnSelectionChange(), PCBNEW_CONTROL::PanControl(), PNS::TOOL_BASE::pickSingleItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), PCB_EDITOR_CONTROL::Reset(), PCBNEW_CONTROL::Reset(), PNS::TOOL_BASE::Reset(), GERBVIEW_SELECTION_TOOL::Reset(), DRAWING_TOOL::Reset(), Reset(), GERBVIEW_SELECTION_TOOL::select(), GERBVIEW_SELECTION_TOOL::selectable(), selectable(), GERBVIEW_SELECTION_TOOL::selectionContains(), selectionContains(), GERBVIEW_SELECTION_TOOL::selectMultiple(), selectMultiple(), ZOOM_TOOL::selectRegion(), GERBVIEW_SELECTION_TOOL::selectVisually(), GERBVIEW_SELECTION_TOOL::unselect(), GERBVIEW_SELECTION_TOOL::unselectVisually(), POINT_EDITOR::updateEditedPoint(), COMMON_TOOLS::updateGrid(), PCBNEW_CONTROL::updateGrid(), POINT_EDITOR::updatePoints(), updateSelection(), PNS::TOOL_BASE::updateStartItem(), COMMON_TOOLS::ZoomFitScreen(), GERBVIEW_SELECTION_TOOL::zoomFitSelection(), zoomFitSelection(), COMMON_TOOLS::ZoomInOutCenter(), GERBVIEW_SELECTION_TOOL::~GERBVIEW_SELECTION_TOOL(), and ~SELECTION_TOOL().

36 {
37  return m_toolMgr->GetView();
38 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:252
KIGFX::VIEW_CONTROLS * TOOL_BASE::getViewControls ( ) const
protectedinherited

Function getViewControls()

Returns the instance of VIEW_CONTROLS object used in the application. It allows tools to read & modify user input and its settings (eg. show cursor, enable snapping to grid, etc.)

Returns
The instance of VIEW_CONTROLS.

Definition at line 41 of file tool_base.cpp.

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

Referenced by POINT_EDITOR::addCorner(), PCBNEW_CONTROL::CursorControl(), MICROWAVE_TOOL::drawMicrowaveInductor(), DRAWING_TOOL::drawZone(), MODULE_EDITOR_TOOLS::EnumeratePads(), findMove(), PCB_EDITOR_CONTROL::HighlightNet(), PCB_EDITOR_CONTROL::HighlightNetCursor(), PICKER_TOOL::Main(), EDIT_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), ROUTER_TOOL::mainLoop(), GERBVIEW_SELECTION_TOOL::MeasureTool(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), POINT_EDITOR::Reset(), DRAWING_TOOL::Reset(), GERBVIEW_CONTROL::ResetCoords(), PCBNEW_CONTROL::ResetCoords(), DRAWING_TOOL::runPolygonEventLoop(), GERBVIEW_SELECTION_TOOL::selectCursor(), selectCursor(), GERBVIEW_SELECTION_TOOL::selectMultiple(), selectMultiple(), ZOOM_TOOL::selectRegion(), PICKER_TOOL::setControls(), POINT_EDITOR::setEditedPoint(), EDIT_TOOL::updateModificationPoint(), COMMON_TOOLS::ZoomCenter(), and COMMON_TOOLS::ZoomInOut().

42 {
43  return m_toolMgr->GetViewControls();
44 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
KIGFX::VIEW_CONTROLS * GetViewControls() const
Definition: tool_manager.h:257
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 135 of file tool_interactive.h.

References TOOL_INTERACTIVE::goInternal().

Referenced by ZOOM_TOOL::setTransitions(), LENGTH_TUNER_TOOL::setTransitions(), ROUTER_TOOL::setTransitions(), PAD_TOOL::setTransitions(), MICROWAVE_TOOL::setTransitions(), ZONE_FILLER_TOOL::setTransitions(), POINT_EDITOR::setTransitions(), COMMON_TOOLS::setTransitions(), GERBVIEW_CONTROL::setTransitions(), MODULE_EDITOR_TOOLS::setTransitions(), POSITION_RELATIVE_TOOL::setTransitions(), ALIGN_DISTRIBUTE_TOOL::setTransitions(), PCBNEW_CONTROL::setTransitions(), PICKER_TOOL::setTransitions(), GERBVIEW_SELECTION_TOOL::setTransitions(), PCB_EDITOR_CONTROL::setTransitions(), setTransitions(), EDIT_TOOL::setTransitions(), and DRAWING_TOOL::setTransitions().

137 {
138  TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
139 
140  goInternal( sptr, aConditions );
141 }
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 1919 of file pcbnew/tools/selection_tool.cpp.

References COLLECTOR::Append(), B_SilkS, calcArea(), calcCommonArea(), calcMaxArea(), calcRatio(), COLLECTOR::CountType(), COLLECTOR::Empty(), F_SilkS, COLLECTOR::GetCount(), BOARD_ITEM::GetLayer(), BOARD_ITEM::GetParent(), BOX2< Vec >::GetPosition(), BOX2< Vec >::GetSize(), KIGFX::VIEW::GetTopLayer(), TOOL_BASE::getView(), KIGFX::VIEW::GetViewport(), i, 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(), EDA_ITEM::Type(), and PCB_TOOL::view().

Referenced by selectPoint().

1920 {
1921  std::set<BOARD_ITEM*> rejected;
1922  std::set<BOARD_ITEM*> forced;
1923 
1924  // footprints which are below this percentage of the largest footprint will be considered
1925  // for selection; all others will not
1926  constexpr double footprintToFootprintMinRatio = 0.20;
1927  // pads which are below this percentage of their parent's area will exclude their parent
1928  constexpr double padToFootprintMinRatio = 0.45;
1929  // footprints containing items with items-to-footprint area ratio higher than this will be
1930  // forced to stay on the list
1931  constexpr double footprintMaxCoverRatio = 0.80;
1932  constexpr double viaToPadMinRatio = 0.50;
1933  constexpr double trackViaLengthRatio = 2.0;
1934  constexpr double trackTrackLengthRatio = 0.3;
1935  constexpr double textToFeatureMinRatio = 0.2;
1936  constexpr double textToFootprintMinRatio = 0.4;
1937  // If the common area of two compared items is above the following threshold, they cannot
1938  // be rejected (it means they overlap and it might be hard to pick one by selecting
1939  // its unique area).
1940  constexpr double commonAreaRatio = 0.6;
1941 
1942  PCB_LAYER_ID actLayer = (PCB_LAYER_ID) view()->GetTopLayer();
1943 
1944  LSET silkLayers( 2, B_SilkS, F_SilkS );
1945 
1946  if( silkLayers[actLayer] )
1947  {
1948  std::set<BOARD_ITEM*> preferred;
1949 
1950  for( int i = 0; i < aCollector.GetCount(); ++i )
1951  {
1952  BOARD_ITEM* item = aCollector[i];
1953  KICAD_T type = item->Type();
1954 
1955  if( ( type == PCB_MODULE_TEXT_T || type == PCB_TEXT_T || type == PCB_LINE_T )
1956  && silkLayers[item->GetLayer()] )
1957  {
1958  preferred.insert( item );
1959  }
1960  }
1961 
1962  if( preferred.size() != 0 )
1963  {
1964  aCollector.Empty();
1965 
1966  for( BOARD_ITEM* item : preferred )
1967  aCollector.Append( item );
1968  return;
1969  }
1970  }
1971 
1972  if( aCollector.CountType( PCB_MODULE_TEXT_T ) > 0 )
1973  {
1974  for( int i = 0; i < aCollector.GetCount(); ++i )
1975  {
1976  if( TEXTE_MODULE* txt = dyn_cast<TEXTE_MODULE*>( aCollector[i] ) )
1977  {
1978  double textArea = calcArea( txt );
1979 
1980  for( int j = 0; j < aCollector.GetCount(); ++j )
1981  {
1982  if( i == j )
1983  continue;
1984 
1985  BOARD_ITEM* item = aCollector[j];
1986  double itemArea = calcArea( item );
1987  double areaRatio = calcRatio( textArea, itemArea );
1988  double commonArea = calcCommonArea( txt, item );
1989  double itemCommonRatio = calcRatio( commonArea, itemArea );
1990  double txtCommonRatio = calcRatio( commonArea, textArea );
1991 
1992  if( item->Type() == PCB_MODULE_T )
1993  {
1994  // when text area is small compared to an overlapping footprint,
1995  // then it's a clear sign the text is the selection target
1996  if( areaRatio < textToFootprintMinRatio && itemCommonRatio < commonAreaRatio )
1997  rejected.insert( item );
1998  }
1999 
2000  switch( item->Type() )
2001  {
2002  case PCB_TRACE_T:
2003  case PCB_PAD_T:
2004  case PCB_LINE_T:
2005  case PCB_VIA_T:
2006  case PCB_MODULE_T:
2007  if( areaRatio > textToFeatureMinRatio && txtCommonRatio < commonAreaRatio )
2008  rejected.insert( txt );
2009  break;
2010  default:
2011  break;
2012  }
2013  }
2014  }
2015  }
2016  }
2017 
2018  if( aCollector.CountType( PCB_PAD_T ) > 0 )
2019  {
2020  for( int i = 0; i < aCollector.GetCount(); ++i )
2021  {
2022  if( D_PAD* pad = dyn_cast<D_PAD*>( aCollector[i] ) )
2023  {
2024  MODULE* parent = pad->GetParent();
2025  double ratio = calcRatio( calcArea( pad ), calcArea( parent ) );
2026 
2027  // when pad area is small compared to the parent footprint,
2028  // then it is a clear sign the pad is the selection target
2029  if( ratio < padToFootprintMinRatio )
2030  rejected.insert( pad->GetParent() );
2031  }
2032  }
2033  }
2034 
2035  int moduleCount = aCollector.CountType( PCB_MODULE_T );
2036 
2037  if( moduleCount > 0 )
2038  {
2039  double maxArea = calcMaxArea( aCollector, PCB_MODULE_T );
2040  BOX2D viewportD = getView()->GetViewport();
2041  BOX2I viewport( VECTOR2I( viewportD.GetPosition() ), VECTOR2I( viewportD.GetSize() ) );
2042 
2043  for( int i = 0; i < aCollector.GetCount(); ++i )
2044  {
2045  if( MODULE* mod = dyn_cast<MODULE*>( aCollector[i] ) )
2046  {
2047  // filter out components larger than the viewport
2048  if( mod->ViewBBox().Contains( viewport ) )
2049  rejected.insert( mod );
2050  // footprints completely covered with other features have no other
2051  // means of selection, so must be kept
2052  else if( mod->CoverageRatio( aCollector ) > footprintMaxCoverRatio )
2053  rejected.erase( mod );
2054  // if a footprint is much smaller than the largest overlapping
2055  // footprint then it should be considered for selection
2056  else if( calcRatio( calcArea( mod ), maxArea ) <= footprintToFootprintMinRatio )
2057  continue;
2058  // reject ALL OTHER footprints (whether there are one or more of
2059  // them); the other items in the list should have precedence
2060  else
2061  rejected.insert( mod );
2062  }
2063  }
2064  }
2065 
2066  if( aCollector.CountType( PCB_VIA_T ) > 0 )
2067  {
2068  for( int i = 0; i < aCollector.GetCount(); ++i )
2069  {
2070  if( VIA* via = dyn_cast<VIA*>( aCollector[i] ) )
2071  {
2072  double viaArea = calcArea( via );
2073 
2074  for( int j = 0; j < aCollector.GetCount(); ++j )
2075  {
2076  if( i == j )
2077  continue;
2078 
2079  BOARD_ITEM* item = aCollector[j];
2080  double areaRatio = calcRatio( viaArea, calcArea( item ) );
2081 
2082  if( item->Type() == PCB_MODULE_T && areaRatio < padToFootprintMinRatio )
2083  rejected.insert( item );
2084 
2085  if( item->Type() == PCB_PAD_T && areaRatio < viaToPadMinRatio )
2086  rejected.insert( item );
2087 
2088  if( TRACK* track = dyn_cast<TRACK*>( item ) )
2089  {
2090  if( track->GetNetCode() != via->GetNetCode() )
2091  continue;
2092 
2093  double lenRatio = (double) ( track->GetLength() + track->GetWidth() ) /
2094  (double) via->GetWidth();
2095 
2096  if( lenRatio > trackViaLengthRatio )
2097  rejected.insert( track );
2098  }
2099  }
2100  }
2101  }
2102  }
2103 
2104  int nTracks = aCollector.CountType( PCB_TRACE_T );
2105 
2106  if( nTracks > 0 )
2107  {
2108  double maxLength = 0.0;
2109  double minLength = std::numeric_limits<double>::max();
2110  double maxArea = 0.0;
2111  const TRACK* maxTrack = nullptr;
2112 
2113  for( int i = 0; i < aCollector.GetCount(); ++i )
2114  {
2115  if( TRACK* track = dyn_cast<TRACK*>( aCollector[i] ) )
2116  {
2117  maxLength = std::max( track->GetLength(), maxLength );
2118  maxLength = std::max( (double) track->GetWidth(), maxLength );
2119 
2120  minLength = std::min( std::max( track->GetLength(), (double) track->GetWidth() ), minLength );
2121 
2122  double area = track->GetLength() * track->GetWidth();
2123 
2124  if( area > maxArea )
2125  {
2126  maxArea = area;
2127  maxTrack = track;
2128  }
2129  }
2130  }
2131 
2132  if( maxLength > 0.0 && minLength / maxLength < trackTrackLengthRatio && nTracks > 1 )
2133  {
2134  for( int i = 0; i < aCollector.GetCount(); ++i )
2135  {
2136  if( TRACK* track = dyn_cast<TRACK*>( aCollector[i] ) )
2137  {
2138  double ratio = std::max( (double) track->GetWidth(), track->GetLength() ) / maxLength;
2139 
2140  if( ratio > trackTrackLengthRatio )
2141  rejected.insert( track );
2142  }
2143  }
2144  }
2145 
2146  for( int j = 0; j < aCollector.GetCount(); ++j )
2147  {
2148  if( MODULE* mod = dyn_cast<MODULE*>( aCollector[j] ) )
2149  {
2150  double ratio = calcRatio( maxArea, mod->GetFootprintRect().GetArea() );
2151 
2152  if( ratio < padToFootprintMinRatio && calcCommonArea( maxTrack, mod ) < commonAreaRatio )
2153  rejected.insert( mod );
2154  }
2155  }
2156  }
2157 
2158  if( (unsigned) aCollector.GetCount() > rejected.size() ) // do not remove everything
2159  {
2160  for( BOARD_ITEM* item : rejected )
2161  {
2162  aCollector.Remove( item );
2163  }
2164  }
2165 }
void Empty()
Function Empty sets the list to empty.
Definition: collector.h:115
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:106
KICAD_T Type() const
Function Type()
Definition: base_struct.h:209
BOARD_ITEM_CONTAINER * GetParent() const
static double calcMaxArea(GENERAL_COLLECTOR &aCollector, KICAD_T aType)
virtual int GetTopLayer() const
Definition: view.cpp:794
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
virtual PCB_LAYER_ID GetLayer() const
Function GetLayer returns the primary layer this item is on.
class TEXTE_PCB, text on a layer
Definition: typeinfo.h:92
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
const Vec & GetSize() const
Definition: box2.h:177
VECTOR2< int > VECTOR2I
Definition: vector2d.h:589
int CountType(KICAD_T aType)
Function CountType counts the number of items matching aType.
Definition: collector.h:257
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 Remove(int aIndex)
Function Remove removes the item at aIndex (first position is 0);.
Definition: collector.h:135
static double calcCommonArea(const BOARD_ITEM *aItem, const BOARD_ITEM *aOther)
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
void Append(EDA_ITEM *item)
Function Append adds an item to the end of the list.
Definition: collector.h:125
class MODULE, a footprint
Definition: typeinfo.h:89
PCB_LAYER_ID
A quick note on layer IDs:
Class LSET is a set of PCB_LAYER_IDs.
BOX2D GetViewport() const
Function GetViewport() Returns the current viewport visible area rectangle.
Definition: view.cpp:524
const Vec & GetPosition() const
Definition: box2.h:182
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:93
#define max(a, b)
Definition: auxiliary.h:86
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:133
double calcRatio(double a, double b)
size_t i
Definition: json11.cpp:597
static double calcArea(const BOARD_ITEM *aItem)
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
class DRAWSEGMENT, a segment not on copper layers
Definition: typeinfo.h:91
#define mod(a, n)
Definition: greymap.cpp:24
#define min(a, b)
Definition: auxiliary.h:85
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 206 of file pcbnew/tools/selection_tool.cpp.

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

207 {
208  auto selectMenu = std::make_shared<SELECT_MENU>();
209  selectMenu->SetTool( this );
210  m_menu.AddSubMenu( selectMenu );
211 
212  auto& menu = m_menu.GetMenu();
213 
214  menu.AddMenu( selectMenu.get(), false, SELECTION_CONDITIONS::NotEmpty );
215  menu.AddSeparator( SELECTION_CONDITIONS::NotEmpty, 1000 );
216 
217  auto frame = getEditFrame<PCB_BASE_FRAME>();
218 
219  if( frame )
220  {
222  }
223 
224  return true;
225 }
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
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:135
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()
bool TOOL_BASE::IsToolActive ( ) const
inherited

Definition at line 30 of file tool_base.cpp.

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

31 {
32  return m_toolMgr->IsToolActive( m_toolId );
33 }
bool IsToolActive(TOOL_ID aId) const
Function IsToolActive() Returns true if a tool with given id is active (executing) ...
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:210
int SELECTION_TOOL::Main ( const TOOL_EVENT aEvent)

Function Main()

The main loop.

Definition at line 251 of file pcbnew/tools/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, m_subtractive, TOOL_BASE::m_toolMgr, MD_CTRL, MD_SHIFT, PCB_ACTIONS::properties, TOOL_MANAGER::RunAction(), selectCursor(), selectionContains(), selectMultiple(), selectPoint(), SELECTION::SetIsHover(), TOOL_MENU::ShowContextMenu(), TA_CONTEXT_MENU_CLOSED, TA_UNDO_REDO_PRE, and TOOL_INTERACTIVE::Wait().

Referenced by setTransitions().

252 {
253  // Main loop: keep receiving events
254  while( OPT_TOOL_EVENT evt = Wait() )
255  {
256  // Should selected items be added to the current selection or
257  // become the new selection (discarding previously selected items)
258  m_additive = evt->Modifier( MD_SHIFT );
259 
260  // Should selected items be REMOVED from the current selection?
261  // This will be ignored if the SHIFT modifier is pressed
262  m_subtractive = !m_additive && evt->Modifier( MD_CTRL );
263 
264  // Single click? Select single object
265  if( evt->IsClick( BUT_LEFT ) )
266  {
267  if( evt->Modifier( MD_CTRL ) && !m_editModules )
268  {
270  }
271  else
272  {
273  // If no modifier keys are pressed, clear the selection
274  if( !m_additive )
275  {
276  clearSelection();
277  }
278 
279  selectPoint( evt->Position() );
280  }
281  }
282 
283  // right click? if there is any object - show the context menu
284  else if( evt->IsClick( BUT_RIGHT ) )
285  {
286  bool selectionCancelled = false;
287 
288  if( m_selection.Empty() )
289  {
290  selectPoint( evt->Position(), false, &selectionCancelled );
291  m_selection.SetIsHover( true );
292  }
293 
294  if( !selectionCancelled )
296  }
297 
298  // double click? Display the properties window
299  else if( evt->IsDblClick( BUT_LEFT ) )
300  {
301  if( m_selection.Empty() )
302  selectPoint( evt->Position() );
303 
305  }
306 
307  // drag with LMB? Select multiple objects (or at least draw a selection box) or drag them
308  else if( evt->IsDrag( BUT_LEFT ) )
309  {
310  if( m_additive || m_subtractive )
311  {
312  selectMultiple();
313  }
314  else if( m_selection.Empty() )
315  {
316  // There is nothing selected, so try to select something
317  if( getEditFrame<PCB_BASE_FRAME>()->Settings().m_dragSelects || !selectCursor() )
318  {
319  // If nothings has been selected, user wants to select more or selection
320  // box is preferred to dragging - draw selection box
321  selectMultiple();
322  }
323  else
324  {
325  m_selection.SetIsHover( true );
326  m_toolMgr->InvokeTool( "pcbnew.InteractiveEdit" );
327  }
328  }
329 
330  else
331  {
332  // Check if dragging has started within any of selected items bounding box
333  if( selectionContains( evt->Position() ) )
334  {
335  // Yes -> run the move tool and wait till it finishes
336  m_toolMgr->InvokeTool( "pcbnew.InteractiveEdit" );
337  }
338  else
339  {
340  // No -> clear the selection list
341  clearSelection();
342  }
343  }
344  }
345 
346  else if( evt->IsCancel() || evt->Action() == TA_UNDO_REDO_PRE )
347  {
348  clearSelection();
349  }
350 
351  else if( evt->Action() == TA_CONTEXT_MENU_CLOSED )
352  {
353  m_menu.CloseContextMenu( evt );
354  }
355  }
356 
357  // This tool is supposed to be active forever
358  assert( false );
359 
360  return 0;
361 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:109
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:215
static TOOL_ACTION properties
Activation of the edit tool.
Definition: pcb_actions.h:108
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...
void SetIsHover(bool aIsHover)
Definition: selection.h:64
bool selectPoint(const VECTOR2I &aWhere, bool aOnDrag=false, bool *aSelectionCancelledFlag=NULL, CLIENT_SELECTION_FILTER aClientFilter=NULL)
Function selectPoint() Selects an item pointed by the parameter aWhere.
bool selectMultiple()
Function selectMultiple() Handles drawing a selection box that allows to select many items at the sam...
bool selectCursor(bool aSelectAlways=false, CLIENT_SELECTION_FILTER aClientFilter=NULL)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
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 m_editModules
Definition: pcb_tool.h:143
bool m_subtractive
Flag saying if items should be removed from the current selection.
void CloseContextMenu(OPT_TOOL_EVENT &evt)
Function CloseContextMenu.
Definition: tool_menu.cpp:82
static TOOL_ACTION highlightNet
Definition: pcb_actions.h:385
bool selectionContains(const VECTOR2I &aPoint) const
Function selectionContains() Checks if the given point is placed within any of selected items&#39; boundi...
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:465
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 one to find the smallest (in terms of bounding box area) item from the list.

Parameters
aCollectorcontaines the list of items.

Definition at line 1454 of file pcbnew/tools/selection_tool.cpp.

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

1455 {
1456  int count = aCollector->GetPrimaryCount(); // try to use preferred layer
1457 
1458  if( 0 == count )
1459  count = aCollector->GetCount();
1460 
1461  for( int i = 0; i < count; ++i )
1462  {
1463  if( ( *aCollector )[i]->Type() != PCB_MODULE_T )
1464  return NULL;
1465  }
1466 
1467  // All are modules, now find smallest MODULE
1468  int minDim = 0x7FFFFFFF;
1469  int minNdx = 0;
1470 
1471  for( int i = 0; i < count; ++i )
1472  {
1473  MODULE* module = (MODULE*) ( *aCollector )[i];
1474 
1475  int lx = module->GetBoundingBox().GetWidth();
1476  int ly = module->GetBoundingBox().GetHeight();
1477 
1478  int lmin = std::min( lx, ly );
1479 
1480  if( lmin < minDim )
1481  {
1482  minDim = lmin;
1483  minNdx = i;
1484  }
1485  }
1486 
1487  return (*aCollector)[minNdx];
1488 }
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:106
int GetHeight() const
Definition: eda_rect.h:118
class MODULE, a footprint
Definition: typeinfo.h:89
const EDA_RECT GetBoundingBox() const override
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
MODULE * module() const
Definition: pcb_tool.h:137
size_t i
Definition: json11.cpp:597
int GetWidth() const
Definition: eda_rect.h:117
#define min(a, b)
Definition: auxiliary.h:85
SELECTION & SELECTION_TOOL::RequestSelection ( int  aFlags = SELECTION_DEFAULT,
CLIENT_SELECTION_FILTER  aClientFilter = NULL 
)

Function RequestSelection()

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

Definition at line 370 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), EDIT_TOOL::copyToClipboard(), EDIT_TOOL::CreateArray(), ALIGN_DISTRIBUTE_TOOL::DistributeHorizontally(), ALIGN_DISTRIBUTE_TOOL::DistributeVertically(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), EDIT_TOOL::Duplicate(), EDIT_TOOL::editFootprintInFpEditor(), EDIT_TOOL::ExchangeFootprints(), EDIT_TOOL::Flip(), EDIT_TOOL::Main(), EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), POSITION_RELATIVE_TOOL::PositionRelative(), EDIT_TOOL::Properties(), EDIT_TOOL::Remove(), and EDIT_TOOL::Rotate().

371 {
372  bool selectionEmpty = m_selection.Empty();
373  m_selection.SetIsHover( selectionEmpty );
374 
375  if( selectionEmpty )
376  {
377  if( aFlags & SELECTION_FORCE_UNLOCK )
378  m_locked = false;
379 
380  m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor, true, aClientFilter );
382  }
383 
384  // Be careful with iterators: items can be removed from list
385  // that invalidate iterators.
386  for( unsigned ii = 0; ii < m_selection.GetSize(); ii++ )
387  {
388  EDA_ITEM* item = m_selection[ii];
389 
390  if( ( aFlags & SELECTION_EDITABLE ) && item->Type() == PCB_MARKER_T )
391  {
392  unselect( static_cast<BOARD_ITEM *>( item ) );
393  }
394  }
395 
396  if( aFlags & SELECTION_SANITIZE_PADS )
398 
399  return m_selection;
400 }
void ClearReferencePoint()
Definition: selection.h:208
KICAD_T Type() const
Function Type()
Definition: base_struct.h:209
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:109
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
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:64
SELECTION m_selection
Current state of selection.
virtual unsigned int GetSize() const override
Function GetSize() Returns the number of stored items.
Definition: selection.h:89
class MARKER_PCB, a marker used to show something
Definition: typeinfo.h:99
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:162
bool m_locked
Can other tools modify locked items.
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.

Reimplemented from PCB_TOOL.

Definition at line 228 of file pcbnew/tools/selection_tool.cpp.

References KIGFX::PCB_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::PCB_VIEW::Remove(), KIGFX::RENDER_SETTINGS::SetHighlight(), and PCB_TOOL::view().

229 {
230  m_frame = getEditFrame<PCB_BASE_FRAME>();
231  m_locked = true;
232 
233  if( aReason == TOOL_BASE::MODEL_RELOAD )
234  {
235  // Remove pointers to the selected items from containers
236  // without changing their properties (as they are already deleted
237  // while a new board is loaded)
238  m_selection.Clear();
239  getView()->GetPainter()->GetSettings()->SetHighlight( false );
240  }
241  else
242  // Restore previous properties of selected items and remove them from containers
243  clearSelection();
244 
245  // Reinsert the VIEW_GROUP, in case it was removed from the VIEW
246  view()->Remove( &m_selection );
247  view()->Add( &m_selection );
248 }
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:84
Model changes (required full reload)
Definition: tool_base.h:83
virtual void Remove(VIEW_ITEM *aItem) override
Function Remove() Removes a VIEW_ITEM from the view.
Definition: pcb_view.cpp:64
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:35
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:133
bool m_locked
Can other tools modify locked items.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1) override
Function Add() Adds a VIEW_ITEM to the view.
Definition: pcb_view.cpp:48
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:140
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 85 of file tool_interactive.cpp.

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

Referenced by DRAWING_TOOL::PlaceText().

86 {
87  m_toolMgr->RunMainStack( this, std::move( aFunc ) );
88 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
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 2176 of file pcbnew/tools/selection_tool.cpp.

References ClearedEvent, i, 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, TA_ACTION, TC_MESSAGE, unselect(), and UnselectedEvent.

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

2177 {
2178  std::set<BOARD_ITEM*> rejected;
2179  std::set<BOARD_ITEM*> added;
2180 
2181  if( !m_editModules )
2182  {
2183  for( auto i : m_selection )
2184  {
2185  auto item = static_cast<BOARD_ITEM*>( i );
2186  if( item->Type() == PCB_PAD_T )
2187  {
2188  MODULE* mod = static_cast<MODULE*>( item->GetParent() );
2189 
2190  // case 1: module (or its pads) are locked
2191  if( mod && ( mod->PadsLocked() || mod->IsLocked() ) )
2192  {
2193  rejected.insert( item );
2194 
2195  if( !mod->IsLocked() && !mod->IsSelected() )
2196  added.insert( mod );
2197  }
2198 
2199  // case 2: multi-item selection contains both the module and its pads - remove the pads
2200  if( mod && m_selection.Contains( mod ) )
2201  rejected.insert( item );
2202  }
2203  }
2204  }
2205 
2206  if( !rejected.empty() )
2207  {
2208  for( BOARD_ITEM* item : rejected )
2209  unselect( item );
2210 
2211  // Inform other potentially interested tools
2213  }
2214 
2215  if( !added.empty() )
2216  {
2217  for( BOARD_ITEM* item : added )
2218  select( item );
2219 
2220  // Inform other potentially interested tools
2222  }
2223 
2224  return true;
2225 }
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:215
bool IsSelected() const
Definition: base_struct.h:232
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
bool PadsLocked() const
Definition: class_module.h:299
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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:263
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
bool m_editModules
Definition: pcb_tool.h:143
size_t i
Definition: json11.cpp:597
void unselect(BOARD_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
#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 1713 of file pcbnew/tools/selection_tool.cpp.

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

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

1714 {
1715  if( aItem->IsSelected() )
1716  {
1717  return;
1718  }
1719 
1720  if( aItem->Type() == PCB_PAD_T )
1721  {
1722  MODULE* module = static_cast<MODULE*>( aItem->GetParent() );
1723 
1724  if( m_selection.Contains( module ) )
1725  return;
1726  }
1727 
1728  m_selection.Add( aItem );
1729  selectVisually( aItem );
1730 
1731  if( m_frame )
1732  {
1733  if( m_selection.Size() == 1 )
1734  {
1735  // Set as the current item, so the information about selection is displayed
1736  m_frame->SetCurItem( aItem, true );
1737  }
1738  else if( m_selection.Size() == 2 ) // Check only for 2, so it will not be
1739  { // called for every next selected item
1740  // If multiple items are selected, do not show the information about the selected item
1741  m_frame->SetCurItem( NULL, true );
1742  }
1743  }
1744 }
KICAD_T Type() const
Function Type()
Definition: base_struct.h:209
BOARD_ITEM_CONTAINER * GetParent() const
bool Contains(EDA_ITEM *aItem) const
Definition: selection.h:103
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:232
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:74
SELECTION m_selection
Current state of selection.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
MODULE * module() const
Definition: pcb_tool.h:137
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:115
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 1491 of file pcbnew/tools/selection_tool.cpp.

References B_Cu, PCB_TOOL::board(), F_Cu, GAL_LAYER_ID_START, BOX2< Vec >::GetArea(), KIGFX::RENDER_SETTINGS::GetHighContrast(), BOARD_ITEM::GetLayer(), ZONE_CONTAINER::GetLayerSet(), VIA::GetLayerSet(), KIGFX::VIEW::GetPainter(), TOOL_BASE::GetSettings(), KIGFX::PAINTER::GetSettings(), VIA::GetViaType(), TOOL_BASE::getView(), KIGFX::VIEW::GetViewport(), BOARD::GetVisibleLayers(), i, BOARD::IsElementVisible(), BOARD::IsLayerVisible(), MODULE::IsLocked(), BOARD_ITEM::IsOnLayer(), KIGFX::VIEW::IsVisible(), LAYER_MOD_BK, LAYER_MOD_FR, LAYER_PADS_PLATEDHOLES, LAYER_PADS_TH, LAYER_TRACKS, LAYER_VIA_BBLIND, LAYER_VIA_MICROVIA, LAYER_VIA_THROUGH, PCB_TOOL::m_editModules, m_multiple, mod, NOT_USED, PCB_LAYER_ID_COUNT, PCB_MODULE_EDGE_T, PCB_MODULE_T, PCB_MODULE_TEXT_T, PCB_PAD_T, PCB_TRACE_T, PCB_VIA_T, PCB_ZONE_AREA_T, LSET::Seq(), EDA_ITEM::Type(), TYPE_NOT_INIT, VIA_BLIND_BURIED, VIA_MICROVIA, VIA_THROUGH, PCB_TOOL::view(), KIGFX::VIEW::VIEW_MAX_LAYERS, EDA_ITEM::ViewBBox(), BOARD_ITEM::ViewGetLayers(), and D_PAD::ViewGetLayers().

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

1492 {
1493  // Is high contrast mode enabled?
1494  bool highContrast = getView()->GetPainter()->GetSettings()->GetHighContrast();
1495 
1496  int layers[KIGFX::VIEW::VIEW_MAX_LAYERS], layers_count;
1497 
1498  // Filter out items that do not belong to active layers
1499  const std::set<unsigned int>& activeLayers = getView()->GetPainter()->
1500  GetSettings()->GetActiveLayers();
1501 
1502  aItem->ViewGetLayers( layers, layers_count );
1503 
1504  if( highContrast )
1505  {
1506  bool onActive = false; // Is the item on any of active layers?
1507 
1508  for( int i = 0; i < layers_count; ++i )
1509  {
1510  if( activeLayers.count( layers[i] ) > 0 ) // Item is on at least one of the active layers
1511  {
1512  onActive = true;
1513  break;
1514  }
1515  }
1516 
1517  if( !onActive ) // We do not want to select items that are in the background
1518  {
1519  return false;
1520  }
1521  }
1522 
1523  switch( aItem->Type() )
1524  {
1525  case PCB_ZONE_AREA_T:
1526  // Keepout zones can exist on multiple layers!
1527  {
1528  auto* zone = static_cast<const ZONE_CONTAINER*>( aItem );
1529 
1530  if( zone && zone->GetIsKeepout() )
1531  {
1532  auto zoneLayers = zone->GetLayerSet().Seq();
1533 
1534  for( unsigned int i = 0; i < zoneLayers.size(); i++ )
1535  {
1536  if( board()->IsLayerVisible( zoneLayers[i] ) )
1537  {
1538  return true;
1539  }
1540  }
1541 
1542  // No active layers selected!
1543  return false;
1544  }
1545  }
1546  break;
1547 
1548  case PCB_TRACE_T:
1549  {
1550  if( !board()->IsElementVisible( LAYER_TRACKS ) )
1551  return false;
1552  }
1553  break;
1554 
1555  case PCB_VIA_T:
1556  {
1557  const VIA* via = static_cast<const VIA*>( aItem );
1558 
1559  // Check if appropriate element layer is visible
1560  switch( via->GetViaType() )
1561  {
1562  case VIA_THROUGH:
1564  return false;
1565  break;
1566 
1567  case VIA_BLIND_BURIED:
1569  return false;
1570  break;
1571 
1572  case VIA_MICROVIA:
1574  return false;
1575  break;
1576 
1577  default:
1578  wxFAIL;
1579  return false;
1580  }
1581 
1582  // For vias it is enough if only one of its layers is visible
1583  return ( board()->GetVisibleLayers() & via->GetLayerSet() ).any();
1584  }
1585  break;
1586 
1587  case PCB_MODULE_T:
1588  {
1589  // In the module editor, we do not want to select the module itself
1590  // rather, the module sub-components should be selected individually
1591  if( m_editModules )
1592  return false;
1593 
1594  float viewArea = getView()->GetViewport().GetArea();
1595  float modArea = aItem->ViewBBox().GetArea();
1596 
1597  // Do not select modules that are larger the view area
1598  // (most likely footprints representing shield connectors)
1599  if( viewArea > 0.0 && modArea > viewArea )
1600  return false;
1601 
1602  // Allow selection of footprints if at least one draw layer is on and
1603  // the appropriate LAYER_MOD is on
1604 
1605  bool layer_mod = ( ( aItem->IsOnLayer( F_Cu ) && board()->IsElementVisible( LAYER_MOD_FR ) ) ||
1606  ( aItem->IsOnLayer( B_Cu ) && board()->IsElementVisible( LAYER_MOD_BK ) ) );
1607 
1608  bool draw_layer_visible = false;
1609  int draw_layers[KIGFX::VIEW::VIEW_MAX_LAYERS], draw_layers_count;
1610 
1611  static_cast<const MODULE*>( aItem )->GetAllDrawingLayers( draw_layers,
1612  draw_layers_count,
1613  true );
1614 
1615  for( int i = 0; i < draw_layers_count; ++i )
1616  {
1617  // NOTE: Pads return LAYER_PADS_PLATEDHOLES but the visibility
1618  // control only directly switches LAYER_PADS_TH, so we overwrite it
1619  // here so that the visibility check is accurate
1620  if( draw_layers[i] == LAYER_PADS_PLATEDHOLES )
1621  draw_layers[i] = LAYER_PADS_TH;
1622 
1623  if( ( ( draw_layers[i] < PCB_LAYER_ID_COUNT ) &&
1624  board()->IsLayerVisible( static_cast<PCB_LAYER_ID>( draw_layers[i] ) ) ) ||
1625  ( ( draw_layers[i] >= GAL_LAYER_ID_START ) &&
1626  board()->IsElementVisible( static_cast<GAL_LAYER_ID>( draw_layers[i] ) ) ) )
1627  {
1628  draw_layer_visible = true;
1629  }
1630  }
1631 
1632  return ( draw_layer_visible && layer_mod );
1633 
1634  break;
1635  }
1636 
1637  case PCB_MODULE_TEXT_T:
1638  if( m_multiple && !m_editModules )
1639  return false;
1640 
1641  return view()->IsVisible( aItem ) && board()->IsLayerVisible( aItem->GetLayer() );
1642 
1643  case PCB_MODULE_EDGE_T:
1644  case PCB_PAD_T:
1645  {
1646  // Multiple selection is only allowed in modedit mode
1647  // In pcbnew, you have to select subparts of modules
1648  // one-by-one, rather than with a drag selection.
1649  // This is so you can pick up items under an (unlocked)
1650  // module without also moving the module's sub-parts.
1651  if( m_multiple && !m_editModules )
1652  return false;
1653 
1654  // When editing modules, it's allowed to select them, even when
1655  // locked, since you already have to explicitly activate the
1656  // module editor to get to this stage
1657  if( !m_editModules )
1658  {
1659  MODULE* mod = static_cast<const D_PAD*>( aItem )->GetParent();
1660  if( mod && mod->IsLocked() )
1661  return false;
1662  }
1663  else if( aItem->Type() == PCB_PAD_T )
1664  {
1665  // In editor, pads are selectable if any draw layer is visible
1666 
1667  auto pad = static_cast<const D_PAD*>( aItem );
1668 
1669  // Shortcut: check copper layer visibility
1670  if( board()->IsLayerVisible( F_Cu ) && pad->IsOnLayer( F_Cu ) )
1671  return true;
1672 
1673  if( board()->IsLayerVisible( B_Cu ) && pad->IsOnLayer( B_Cu ) )
1674  return true;
1675 
1676  // Now check the non-copper layers
1677 
1678  bool draw_layer_visible = false;
1679 
1680  int pad_layers[KIGFX::VIEW::VIEW_MAX_LAYERS], pad_layers_count;
1681  pad->ViewGetLayers( pad_layers, pad_layers_count );
1682 
1683  for( int i = 0; i < pad_layers_count; ++i )
1684  {
1685  // NOTE: Only checking the regular layers (not GAL meta-layers)
1686  if( ( ( pad_layers[i] < PCB_LAYER_ID_COUNT ) &&
1687  board()->IsLayerVisible( static_cast<PCB_LAYER_ID>( pad_layers[i] ) ) ) )
1688  {
1689  draw_layer_visible = true;
1690  }
1691  }
1692 
1693  return draw_layer_visible;
1694  }
1695 
1696  break;
1697  }
1698 
1699  // These are not selectable
1700  case NOT_USED:
1701  case TYPE_NOT_INIT:
1702  return false;
1703 
1704  default: // Suppress warnings
1705  break;
1706  }
1707 
1708  // All other items are selected only if the layer on which they exist is visible
1709  return board()->IsLayerVisible( aItem->GetLayer() );
1710 }
KICAD_T Type() const
Function Type()
Definition: base_struct.h:209
Class ZONE_CONTAINER handles a list of polygons defining a copper zone.
Definition: class_zone.h:60
to draw blind/buried vias
bool GetHighContrast() const
Function GetHighContrast Returns information about high contrast display mode.
Definition: painter.h:161
virtual LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
multilayer pads, usually with holes
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.
virtual PCB_LAYER_ID GetLayer() const
Function GetLayer returns the primary layer this item is on.
the 3d code uses this value
Definition: typeinfo.h:80
class ZONE_CONTAINER, a zone area
Definition: typeinfo.h:102
virtual void ViewGetLayers(int aLayers[], int &aCount) const override
Function ViewGetLayers() Returns the all the layers within the VIEW the object is painted on...
show modules on back
ecoord_type GetArea() const
Function GetArea returns the area of the rectangle.
Definition: box2.h:391
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
class EDGE_MODULE, a footprint edge
Definition: typeinfo.h:94
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
show modules on front
LSEQ Seq(const PCB_LAYER_ID *aWishListSequence, unsigned aCount) const
Function Seq returns an LSEQ from the union of this LSET and a desired sequence.
Definition: lset.cpp:364
virtual LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_zone.cpp:230
class MODULE, a footprint
Definition: typeinfo.h:89
BOX2D GetViewport() const
Function GetViewport() Returns the current viewport visible area rectangle.
Definition: view.cpp:524
VIATYPE_T GetViaType() const
Definition: class_track.h:455
to draw usual through hole vias
static const int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:675
virtual void ViewGetLayers(int aLayers[], int &aCount) const override
Function ViewGetLayers() Returns the all the layers within the VIEW the object is painted on...
Definition: class_pad.cpp:1224
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:77
bool IsLocked() const override
Function IsLocked.
Definition: class_module.h:263
bool m_editModules
Definition: pcb_tool.h:143
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
class TEXTE_MODULE, text in a footprint
Definition: typeinfo.h:93
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
bool IsElementVisible(GAL_LAYER_ID aLayer) const
Function IsElementVisible tests whether a given element category is visible.
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:133
LSET GetVisibleLayers() const
Function GetVisibleLayers is a proxy function that calls the correspondent function in m_BoardSetting...
size_t i
Definition: json11.cpp:597
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
bool IsVisible(const VIEW_ITEM *aItem) const
Returns information if the item is visible (or not).
Definition: view.cpp:1485
virtual const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers. ...
#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:451
BOARD * board() const
Definition: pcb_tool.h:136
void SELECTION_TOOL::selectAllItemsConnectedToItem ( BOARD_CONNECTED_ITEM aSourceItem)
private

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

Definition at line 941 of file pcbnew/tools/selection_tool.cpp.

References PCB_TOOL::board(), EOT, BOARD::GetConnectivity(), PCB_TRACE_T, PCB_VIA_T, and select().

Referenced by selectCopper().

942 {
943  constexpr KICAD_T types[] = { PCB_TRACE_T, PCB_VIA_T, EOT };
944  auto connectivity = board()->GetConnectivity();
945 
946  std::vector<BOARD_CONNECTED_ITEM*> items;
947  items = connectivity->GetConnectedItems( &aSourceItem, types );
948 
949  for( auto item : connectivity->GetConnectedItems( &aSourceItem, types ) )
950  select( item );
951 }
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
search types array terminator (End Of Types)
Definition: typeinfo.h:82
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Function GetConnectivity() returns list of missing connections between components/tracks.
Definition: class_board.h:290
BOARD * board() const
Definition: pcb_tool.h:136
void SELECTION_TOOL::selectAllItemsConnectedToTrack ( TRACK aSourceTrack)
private

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

Definition at line 927 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by expandSelectedConnection(), and selectAllItemsOnSheet().

928 {
929  int segmentCount;
930  TRACK* trackList = board()->MarkTrace( &aSourceTrack, &segmentCount,
931  nullptr, nullptr, true );
932 
933  for( int i = 0; i < segmentCount; ++i )
934  {
935  select( trackList );
936  trackList = trackList->Next();
937  }
938 }
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:99
size_t i
Definition: json11.cpp:597
BOARD * board() const
Definition: pcb_tool.h:136
void SELECTION_TOOL::selectAllItemsOnNet ( int  aNetCode)
private

Selects all items with the given net code.

Definition at line 954 of file pcbnew/tools/selection_tool.cpp.

References PCB_TOOL::board(), EOT, BOARD::GetConnectivity(), PCB_TRACE_T, PCB_VIA_T, and select().

Referenced by selectNet().

955 {
956  constexpr KICAD_T types[] = { PCB_TRACE_T, PCB_VIA_T, EOT };
957  auto connectivity = board()->GetConnectivity();
958 
959  for( auto item : connectivity->GetNetItems( aNetCode, types ) )
960  select( item );
961 }
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
search types array terminator (End Of Types)
Definition: typeinfo.h:82
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Function GetConnectivity() returns list of missing connections between components/tracks.
Definition: class_board.h:290
BOARD * board() const
Definition: pcb_tool.h:136
void SELECTION_TOOL::selectAllItemsOnSheet ( wxString &  aSheetpath)
private

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

Definition at line 993 of file pcbnew/tools/selection_tool.cpp.

References PCB_TOOL::board(), EOT, DLIST< T >::GetFirst(), BOARD::GetTracksByPosition(), i, BOARD::m_Modules, MODULE::Next(), PCB_PAD_T, PCB_TRACE_T, PCB_VIA_T, select(), and selectAllItemsConnectedToTrack().

Referenced by selectOnSheetFromEeschema(), and selectSameSheet().

994 {
995  auto modules = board()->m_Modules.GetFirst();
996  std::list<MODULE*> modList;
997 
998  // store all modules that are on that sheet
999  for( MODULE* mitem = modules; mitem; mitem = mitem->Next() )
1000  {
1001  if( mitem != NULL && mitem->GetPath().Contains( aSheetpath ) )
1002  {
1003  modList.push_back( mitem );
1004  }
1005  }
1006 
1007  //Generate a list of all pads, and of all nets they belong to.
1008  std::list<int> netcodeList;
1009  std::list<BOARD_CONNECTED_ITEM*> padList;
1010  for( MODULE* mmod : modList )
1011  {
1012  for( auto pad : mmod->Pads() )
1013  {
1014  if( pad->IsConnected() )
1015  {
1016  netcodeList.push_back( pad->GetNetCode() );
1017  padList.push_back( pad );
1018  }
1019  }
1020  }
1021  // remove all duplicates
1022  netcodeList.sort();
1023  netcodeList.unique();
1024 
1025  // auto select trivial connections segments which are launched from the pads
1026  std::list<TRACK*> launchTracks;
1027 
1028  for( auto pad : padList )
1029  {
1030  launchTracks = board()->GetTracksByPosition( pad->GetPosition() );
1031 
1032  for( auto track : launchTracks )
1033  {
1035  }
1036  }
1037 
1038  // now we need to find all modules that are connected to each of these nets
1039  // then we need to determine if these modules are in the list of modules
1040  // belonging to this sheet ( modList )
1041  std::list<int> removeCodeList;
1042  constexpr KICAD_T padType[] = { PCB_PAD_T, EOT };
1043 
1044  for( int netCode : netcodeList )
1045  {
1046  for( BOARD_CONNECTED_ITEM* mitem : board()->GetConnectivity()->GetNetItems( netCode, padType ) )
1047  {
1048  if( mitem->Type() == PCB_PAD_T)
1049  {
1050  bool found = ( std::find( modList.begin(), modList.end(),
1051  mitem->GetParent() ) != modList.end() );
1052 
1053  if( !found )
1054  {
1055  // if we cannot find the module of the pad in the modList
1056  // then we can assume that that module is not located in the same
1057  // schematic, therefore invalidate this netcode.
1058  removeCodeList.push_back( netCode );
1059  break;
1060  }
1061  }
1062  }
1063  }
1064 
1065  // remove all duplicates
1066  removeCodeList.sort();
1067  removeCodeList.unique();
1068 
1069  for( int removeCode : removeCodeList )
1070  {
1071  netcodeList.remove( removeCode );
1072  }
1073 
1074  std::list<BOARD_CONNECTED_ITEM*> localConnectionList;
1075  constexpr KICAD_T trackViaType[] = { PCB_TRACE_T, PCB_VIA_T, EOT };
1076 
1077  for( int netCode : netcodeList )
1078  {
1079  for( BOARD_CONNECTED_ITEM* item : board()->GetConnectivity()->GetNetItems( netCode, trackViaType ) )
1080  {
1081  localConnectionList.push_back( item );
1082  }
1083  }
1084 
1085  for( BOARD_ITEM* i : modList )
1086  {
1087  if( i != NULL )
1088  select( i );
1089  }
1090 
1091  for( BOARD_CONNECTED_ITEM* i : localConnectionList )
1092  {
1093  if( i != NULL )
1094  select( i );
1095  }
1096 }
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:121
std::list< TRACK * > GetTracksByPosition(const wxPoint &aPosition, PCB_LAYER_ID aLayer=PCB_LAYER_ID(-1)) const
Function GetTracksByPosition finds the list of tracks that starts or ends at aPosition on aLayer...
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
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.
search types array terminator (End Of Types)
Definition: typeinfo.h:82
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
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
void selectAllItemsConnectedToTrack(TRACK &aSourceTrack)
Selects all items connected by copper tracks to the given TRACK.
DLIST< MODULE > m_Modules
Definition: class_board.h:245
size_t i
Definition: json11.cpp:597
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
BOARD * board() const
Definition: pcb_tool.h:136
int SELECTION_TOOL::selectConnection ( const TOOL_EVENT aEvent)
private

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

Definition at line 842 of file pcbnew/tools/selection_tool.cpp.

References connectedTrackFilter(), expandSelectedConnection(), SELECTION::HasType(), m_selection, PCB_TRACE_T, PCB_VIA_T, and selectCursor().

Referenced by setTransitions().

843 {
846 
848  return 0;
849 
850  return expandSelectedConnection( aEvent );
851 }
void connectedTrackFilter(const VECTOR2I &aPt, GENERAL_COLLECTOR &aCollector)
bool HasType(KICAD_T aType) const
Checks if there is at least one item of requested kind.
Definition: selection.h:180
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
int expandSelectedConnection(const TOOL_EVENT &aEvent)
Expands the current selection to select a connection between two junctions
bool selectCursor(bool aSelectAlways=false, CLIENT_SELECTION_FILTER aClientFilter=NULL)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
SELECTION m_selection
Current state of selection.
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
int SELECTION_TOOL::selectCopper ( const TOOL_EVENT aEvent)
private

Selects items with a continuous copper connection to items in selection

Definition at line 895 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

896 {
897  bool haveCopper = false;
898 
899  for( auto item : m_selection.GetItems() )
900  {
901  if( dynamic_cast<BOARD_CONNECTED_ITEM*>( item ) )
902  haveCopper = true;;
903  }
904 
905  if( !haveCopper )
907 
908  // copy the selection, since we're going to iterate and modify
909  auto selection = m_selection.GetItems();
910 
911  for( auto item : selection )
912  {
913  BOARD_CONNECTED_ITEM* connItem = dynamic_cast<BOARD_CONNECTED_ITEM*>( item );
914 
915  if( connItem )
916  selectAllItemsConnectedToItem( *connItem );
917  }
918 
919  // Inform other potentially interested tools
920  if( m_selection.Size() > 0 )
922 
923  return 0;
924 }
void connectedItemFilter(const VECTOR2I &, GENERAL_COLLECTOR &aCollector)
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
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:120
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
bool selectCursor(bool aSelectAlways=false, CLIENT_SELECTION_FILTER aClientFilter=NULL)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
SELECTION m_selection
Current state of selection.
const SELECTION & selection() const
Definition: pcb_tool.cpp:219
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
int Size() const
Returns the number of selected parts.
Definition: selection.h:115
void selectAllItemsConnectedToItem(BOARD_CONNECTED_ITEM &aSourceItem)
Selects all items connected (by copper) to the given item.
bool SELECTION_TOOL::selectCursor ( bool  aSelectAlways = false,
CLIENT_SELECTION_FILTER  aClientFilter = NULL 
)
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.
aClientFilterallows the client to perform tool- or action-specific filtering.
Returns
true if eventually there is an item selected, false otherwise.

Definition at line 533 of file pcbnew/tools/selection_tool.cpp.

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

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

534 {
535  if( aSelectAlways || m_selection.Empty() )
536  {
537  clearSelection();
538  selectPoint( getViewControls()->GetCursorPosition( false ), false, NULL, aClientFilter );
539  }
540 
541  return !m_selection.Empty();
542 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:109
bool selectPoint(const VECTOR2I &aWhere, bool aOnDrag=false, bool *aSelectionCancelledFlag=NULL, CLIENT_SELECTION_FILTER aClientFilter=NULL)
Function selectPoint() Selects an item pointed by the parameter aWhere.
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:41
const SELECTION & PCB_TOOL::selection ( ) const
protectedinherited

Definition at line 219 of file pcb_tool.cpp.

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

Referenced by PAD_TOOL::applyPadSettings(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), PAD_TOOL::copyPadSettings(), EDIT_TOOL::copyToClipboard(), EDIT_TOOL::CreateArray(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), PCB_EDITOR_CONTROL::CrossProbePcbToSch(), deleteItem(), EDIT_TOOL::Duplicate(), EDIT_TOOL::editFootprintInFpEditor(), EDIT_TOOL::ExchangeFootprints(), expandSelectedConnection(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), filterSelection(), EDIT_TOOL::Flip(), DRAWING_TOOL::getSourceZoneForAction(), highlightNet(), ROUTER_TOOL::InlineDrag(), EDIT_TOOL::Main(), EDIT_TOOL::Mirror(), PCB_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::MoveExact(), POINT_EDITOR::OnSelectionChange(), PCBNEW_CONTROL::placeBoardItems(), PCB_EDITOR_CONTROL::PlaceModule(), DRAWING_TOOL::PlaceText(), POSITION_RELATIVE_TOOL::PositionRelative(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), EDIT_TOOL::Remove(), EDIT_TOOL::Rotate(), selectCopper(), PCB_TOOL::selection(), selectNet(), selectPRitem(), showLocalRatsnest(), PCB_EDITOR_CONTROL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ZoneDuplicate(), ZONE_FILLER_TOOL::ZoneFill(), PCB_EDITOR_CONTROL::ZoneMerge(), and ZONE_FILLER_TOOL::ZoneUnfill().

220 {
221  auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
222  const auto& selection = selTool->GetSelection();
223  return selection;
224 }
Class SELECTION_TOOL.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
const SELECTION & selection() const
Definition: pcb_tool.cpp:219
SELECTION & PCB_TOOL::selection ( )
protectedinherited

Definition at line 226 of file pcb_tool.cpp.

References TOOL_MANAGER::GetTool(), TOOL_BASE::m_toolMgr, and PCB_TOOL::selection().

227 {
228  auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
229  auto& selection = selTool->GetSelection();
230  return selection;
231 }
Class SELECTION_TOOL.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
const SELECTION & selection() const
Definition: pcb_tool.cpp:219
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 1812 of file pcbnew/tools/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().

1813 {
1814  const unsigned GRIP_MARGIN = 20;
1815  VECTOR2D margin = getView()->ToWorld( VECTOR2D( GRIP_MARGIN, GRIP_MARGIN ), false );
1816 
1817  // Check if the point is located within any of the currently selected items bounding boxes
1818  for( auto item : m_selection )
1819  {
1820  BOX2I itemBox = item->ViewBBox();
1821  itemBox.Inflate( margin.x, margin.y ); // Give some margin for gripping an item
1822 
1823  if( itemBox.Contains( aPoint ) )
1824  return true;
1825  }
1826 
1827  return false;
1828 }
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:463
VECTOR2< double > VECTOR2D
Definition: vector2d.h:588
SELECTION m_selection
Current state of selection.
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
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 773 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

774 {
775  // Check if there is an item to be selected
776  BOARD_ITEM* item = aEvent.Parameter<BOARD_ITEM*>();
777 
778  if( item )
779  {
780  select( item );
781 
782  // Inform other potentially interested tools
784  }
785 
786  return 0;
787 }
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:215
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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:378
int SELECTION_TOOL::SelectItems ( const TOOL_EVENT aEvent)

Multiple item selection event handler

Definition at line 753 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

754 {
755  std::vector<BOARD_ITEM*>* items = aEvent.Parameter<std::vector<BOARD_ITEM*>*>();
756 
757  if( items )
758  {
759  // Perform individual selection of each item
760  // before processing the event.
761  for( auto item : *items )
762  {
763  select( item );
764  }
765 
767  }
768 
769  return 0;
770 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void select(BOARD_ITEM *aItem)
Function select() Takes necessary action mark an item as selected.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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:378
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 545 of file pcbnew/tools/selection_tool.cpp.

References KIGFX::VIEW::Add(), BUT_LEFT, SELECTION::ClearReferencePoint(), BOX2< Vec >::Contains(), SELECTION::Empty(), SELECTION::Front(), KIGFX::PREVIEW::SELECTION_AREA::GetEnd(), KIGFX::PREVIEW::SELECTION_AREA::GetOrigin(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), BOARD_ITEM::HitTest(), TOOL_EVT_UTILS::IsCancelInteractive(), m_additive, m_frame, m_multiple, m_selection, m_subtractive, TOOL_BASE::m_toolMgr, EDA_RECT::Normalize(), TOOL_MANAGER::ProcessEvent(), KIGFX::VIEW::Query(), KIGFX::VIEW::Remove(), select(), selectable(), SelectedEvent, KIGFX::PREVIEW::SELECTION_AREA::SetAdditive(), KIGFX::VIEW_CONTROLS::SetAutoPan(), PCB_BASE_FRAME::SetCurItem(), KIGFX::PREVIEW::SELECTION_AREA::SetEnd(), KIGFX::PREVIEW::SELECTION_AREA::SetOrigin(), KIGFX::PREVIEW::SELECTION_AREA::SetSubtractive(), KIGFX::VIEW::SetVisible(), SELECTION::Size(), unselect(), KIGFX::VIEW::Update(), PCB_TOOL::view(), KIGFX::PREVIEW::SELECTION_AREA::ViewBBox(), EDA_ITEM::ViewBBox(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Main().

546 {
547  bool cancelled = false; // Was the tool cancelled while it was running?
548  m_multiple = true; // Multiple selection mode is active
549  KIGFX::VIEW* view = getView();
550 
552  view->Add( &area );
553 
554  while( OPT_TOOL_EVENT evt = Wait() )
555  {
557  {
558  cancelled = true;
559  break;
560  }
561 
562  if( evt->IsDrag( BUT_LEFT ) )
563  {
564  // Start drawing a selection box
565  area.SetOrigin( evt->DragOrigin() );
566  area.SetEnd( evt->Position() );
567  area.SetAdditive( m_additive );
569 
570  view->SetVisible( &area, true );
571  view->Update( &area );
572  getViewControls()->SetAutoPan( true );
573  }
574 
575  if( evt->IsMouseUp( BUT_LEFT ) )
576  {
577  getViewControls()->SetAutoPan( false );
578 
579  // End drawing the selection box
580  view->SetVisible( &area, false );
581 
582  // Mark items within the selection box as selected
583  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
584 
585  // Filter the view items based on the selection box
586  BOX2I selectionBox = area.ViewBBox();
587  view->Query( selectionBox, selectedItems ); // Get the list of selected items
588 
589  std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR>::iterator it, it_end;
590 
591  int width = area.GetEnd().x - area.GetOrigin().x;
592  int height = area.GetEnd().y - area.GetOrigin().y;
593 
594  // Construct an EDA_RECT to determine BOARD_ITEM selection
595  EDA_RECT selectionRect( wxPoint( area.GetOrigin().x, area.GetOrigin().y ),
596  wxSize( width, height ) );
597 
598  selectionRect.Normalize();
599 
600  for( it = selectedItems.begin(), it_end = selectedItems.end(); it != it_end; ++it )
601  {
602  BOARD_ITEM* item = static_cast<BOARD_ITEM*>( it->first );
603 
604  if( !item || !selectable( item ) )
605  continue;
606 
607  /* Selection mode depends on direction of drag-selection:
608  * Left > Right : Select objects that are fully enclosed by selection
609  * Right > Left : Select objects that are crossed by selection
610  */
611 
612  if( width >= 0 )
613  {
614  if( selectionBox.Contains( item->ViewBBox() ) )
615  {
616  if( m_subtractive )
617  unselect( item );
618  else
619  select( item );
620  }
621  }
622  else
623  {
624  if( item->HitTest( selectionRect, false ) )
625  {
626  if( m_subtractive )
627  unselect( item );
628  else
629  select( item );
630  }
631  }
632  }
633 
634  if( m_frame )
635  {
636  if( m_selection.Size() == 1 )
637  m_frame->SetCurItem( static_cast<BOARD_ITEM*>( m_selection.Front() ) );
638  else
639  m_frame->SetCurItem( NULL );
640  }
641 
642  // Inform other potentially interested tools
643  if( !m_selection.Empty() )
645 
646  break; // Stop waiting for events
647  }
648  }
649 
650  // Stop drawing the selection box
651  view->Remove( &area );
652  m_multiple = false; // Multiple selection mode is inactive
653 
654  if( !cancelled )
656 
657  return cancelled;
658 }
void ClearReferencePoint()
Definition: selection.h:208
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:109
void SetEnd(VECTOR2I aEnd)
Set the current end of the rectangle (the corner that moves with the cursor.
virtual int Query(const BOX2I &aRect, std::vector< LAYER_ITEM_PAIR > &aResult) const
Function Query() Finds all visible items that touch or are within the rectangle aRect.
Definition: view.cpp:440
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:147
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:364
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()
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.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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.
PCB_BASE_FRAME * m_frame
Pointer to the parent frame.
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1499
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:41
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
void Normalize()
Function Normalize ensures that the height ant width are positive.
bool m_subtractive
Flag saying if items should be removed from the current selection.
virtual bool HitTest(const wxPoint &aPosition) const override
Function HitTest tests if aPosition is contained within or on the bounding area of an item...
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:133
void SetSubtractive(bool aSubtractive)
void unselect(BOARD_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Sets the item visibility.
Definition: view.cpp:1445
Class SELECTION_AREA.
int Size() const
Returns the number of selected parts.
Definition: selection.h:115
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:334
Class VIEW.
Definition: view.h:58
virtual const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers. ...
void SetAdditive(bool aAdditive)
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:465
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 964 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

965 {
966  if( !selectCursor() )
967  return 0;
968 
969  // copy the selection, since we're going to iterate and modify
970  auto selection = m_selection.GetItems();
971 
972  for( auto i : selection )
973  {
974  auto item = static_cast<BOARD_ITEM*>( i );
975 
976  // only connected items get a net code
977  if( item->IsConnected() )
978  {
979  auto& connItem = static_cast<BOARD_CONNECTED_ITEM&>( *item );
980 
981  selectAllItemsOnNet( connItem.GetNetCode() );
982  }
983  }
984 
985  // Inform other potentially interested tools
986  if( m_selection.Size() > 0 )
988 
989  return 0;
990 }
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:215
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:120
void selectAllItemsOnNet(int aNetCode)
Selects all items with the given net code.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
bool selectCursor(bool aSelectAlways=false, CLIENT_SELECTION_FILTER aClientFilter=NULL)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
SELECTION m_selection
Current state of selection.
const SELECTION & selection() const
Definition: pcb_tool.cpp:219
static const TOOL_EVENT SelectedEvent
Event sent after an item is selected.
size_t i
Definition: json11.cpp:597
int Size() const
Returns the number of selected parts.
Definition: selection.h:115
int SELECTION_TOOL::selectOnSheetFromEeschema ( const TOOL_EVENT aEvent)
private

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

Definition at line 1122 of file pcbnew/tools/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().

1123 {
1124  clearSelection();
1125  wxString* sheetpath = aEvent.Parameter<wxString*>();
1126 
1127  selectAllItemsOnSheet( *sheetpath );
1128 
1129  zoomFitSelection();
1130 
1131  if( m_selection.Size() > 0 )
1133 
1134  return 0;
1135 }
void zoomFitSelection(void)
Zooms the screen to center and fit the current selection.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void selectAllItemsOnSheet(wxString &aSheetpath)
Selects all items with the given sheet timestamp name (the sheet path)
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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:378
int Size() const
Returns the number of selected parts.
Definition: selection.h:115
bool SELECTION_TOOL::selectPoint ( const VECTOR2I aWhere,
bool  aOnDrag = false,
bool *  aSelectionCancelledFlag = NULL,
CLIENT_SELECTION_FILTER  aClientFilter = NULL 
)
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.
aOnDragindicates whether a drag operation is being performed.
aSelectionCancelledFlagallows the function to inform its caller that a selection was cancelled (for instance, by clicking outside of the disambiguation menu).
aClientFilterallows the client to perform tool- or action-specific filtering.
Returns
True if an item was selected, false otherwise.

Definition at line 457 of file pcbnew/tools/selection_tool.cpp.

References GENERAL_COLLECTOR::AllBoardItems, PCB_TOOL::board(), BUT_LEFT, SELECTION::ClearReferencePoint(), clearSelection(), GENERAL_COLLECTOR::Collect(), disambiguationMenu(), getCollectorsGuide(), COLLECTOR::GetCount(), guessSelectionCandidates(), i, m_additive, PCB_TOOL::m_editModules, m_selection, 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().

460 {
461  auto guide = getCollectorsGuide();
462  GENERAL_COLLECTOR collector;
463 
464  collector.Collect( board(),
466  wxPoint( aWhere.x, aWhere.y ), guide );
467 
468  bool anyCollected = collector.GetCount() != 0;
469 
470  // Remove unselectable items
471  for( int i = collector.GetCount() - 1; i >= 0; --i )
472  {
473  if( !selectable( collector[i] ) || ( aOnDrag && collector[i]->IsLocked() ) )
474  collector.Remove( i );
475  }
476 
478 
479  // Allow the client to do tool- or action-specific filtering to see if we
480  // can get down to a single item
481  if( aClientFilter )
482  aClientFilter( aWhere, collector );
483 
484  if( collector.GetCount() == 0 )
485  {
486  if( !m_additive && anyCollected )
487  {
488  clearSelection();
489  }
490  return false;
491  }
492 
493  if( collector.GetCount() == 1 )
494  {
495  toggleSelection( collector[0] );
496  return true;
497  }
498 
499  // Apply some ugly heuristics to avoid disambiguation menus whenever possible
500  guessSelectionCandidates( collector );
501 
502  if( collector.GetCount() == 1 )
503  {
504  toggleSelection( collector[0] );
505  return true;
506  }
507 
508  // Still more than one item. We're going to have to ask the user.
509  if( aOnDrag )
510  {
512  }
513 
514  BOARD_ITEM* item = disambiguationMenu( &collector );
515 
516  if( item )
517  {
518  toggleSelection( item );
519  return true;
520  }
521  else
522  {
523  if( aSelectionCancelledFlag )
524  *aSelectionCancelledFlag = true;
525 
526  return false;
527  }
528 
529  return false;
530 }
int GetCount() const
Function GetCount returns the number of objects in the list.
Definition: collector.h:106
void ClearReferencePoint()
Definition: selection.h:208
static const KICAD_T AllBoardItems[]
A scan list for all editable board items, like PcbGeneralLocateAndDisplay()
Definition: collectors.h:259
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)
Scan a BOARD_ITEM using this class&#39;s Inspector method, which does the collection. ...
Definition: collectors.cpp:450
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);.
Definition: collector.h:135
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 ...
SELECTION m_selection
Current state of selection.
void clearSelection()
Function clearSelection() Clears the current selection.
bool m_editModules
Definition: pcb_tool.h:143
static const KICAD_T ModuleItems[]
A scan list for primary module items.
Definition: collectors.h:300
Used when the right click button is pressed, or when the select tool is in effect.
Definition: collectors.h:232
size_t i
Definition: json11.cpp:597
const GENERAL_COLLECTORS_GUIDE getCollectorsGuide() const
BOARD * board() const
Definition: pcb_tool.h:136
int SELECTION_TOOL::selectSameSheet ( const TOOL_EVENT aEvent)
private

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

Definition at line 1138 of file pcbnew/tools/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().

1139 {
1140  if( !selectCursor( true ) )
1141  return 0;
1142 
1143  // this function currently only supports modules since they are only
1144  // on one sheet.
1145  auto item = m_selection.Front();
1146 
1147  if( !item )
1148  return 0;
1149 
1150  if( item->Type() != PCB_MODULE_T )
1151  return 0;
1152 
1153  auto mod = dynamic_cast<MODULE*>( item );
1154 
1155  clearSelection();
1156 
1157  // get the lowest subsheet name for this.
1158  wxString sheetPath = mod->GetPath();
1159  sheetPath = sheetPath.BeforeLast( '/' );
1160  sheetPath = sheetPath.AfterLast( '/' );
1161 
1162  selectAllItemsOnSheet( sheetPath );
1163 
1164  // Inform other potentially interested tools
1165  if( m_selection.Size() > 0 )
1167 
1168  return 0;
1169 }
EDA_ITEM * Front() const
Definition: selection.h:147
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
class MODULE, a footprint
Definition: typeinfo.h:89
void selectAllItemsOnSheet(wxString &aSheetpath)
Selects all items with the given sheet timestamp name (the sheet path)
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
bool selectCursor(bool aSelectAlways=false, CLIENT_SELECTION_FILTER aClientFilter=NULL)
Function selectCursor() Selects an item under the cursor unless there is something already selected o...
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:115
#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 1766 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by select().

1767 {
1768  // Hide the original item, so it is shown only on overlay
1769  aItem->SetSelected();
1770  view()->Hide( aItem, true );
1771 
1772  // Modules are treated in a special way - when they are selected, we have to
1773  // unselect all the parts that make the module, not the module itself
1774 
1775  if( aItem->Type() == PCB_MODULE_T )
1776  {
1777  static_cast<MODULE*>( aItem )->RunOnChildren( [&] ( BOARD_ITEM* item )
1778  {
1779  item->SetSelected();
1780  view()->Hide( item, true );
1781  });
1782  }
1783 
1784  view()->Update( &m_selection );
1785 }
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Temporarily hides the item in the view (e.g.
Definition: view.cpp:1466
KICAD_T Type() const
Function Type()
Definition: base_struct.h:209
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags) override
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: pcb_view.cpp:81
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:89
void SetSelected()
Definition: base_struct.h:238
SELECTION m_selection
Current state of selection.
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:133
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 74 of file tool_interactive.cpp.

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

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

75 {
76  if( aMenu )
77  aMenu->SetTool( this );
78  else
79  aTrigger = CMENU_OFF;
80 
81  m_toolMgr->ScheduleContextMenu( this, aMenu, aTrigger );
82 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void ScheduleContextMenu(TOOL_BASE *aTool, CONTEXT_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger)
Sets behaviour of the tool&#39;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 93 of file pcb_tool.h.

94  {
95  m_editModules = aEnabled;
96  }
bool m_editModules
Definition: pcb_tool.h:143
void SELECTION_TOOL::setTransitions ( )
overridevirtual

Sets up handlers for various events.

Reimplemented from PCB_TOOL.

Definition at line 661 of file pcbnew/tools/selection_tool.cpp.

References ClearSelection(), CursorSelection(), PCB_ACTIONS::expandSelectedConnection, expandSelectedConnection(), 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::selectItems, SelectItems(), PCB_ACTIONS::selectNet, selectNet(), PCB_ACTIONS::selectOnSheetFromEeschema, selectOnSheetFromEeschema(), PCB_ACTIONS::selectSameSheet, selectSameSheet(), PCB_ACTIONS::unselectItem, UnselectItem(), PCB_ACTIONS::unselectItems, UnselectItems(), and updateSelection().

662 {
670  Go( &SELECTION_TOOL::find, PCB_ACTIONS::find.MakeEvent() );
680 }
static TOOL_ACTION selectItems
Selects a list of items (specified as the event parameter)
Definition: pcb_actions.h:59
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:62
static TOOL_ACTION selectNet
Selects all connections belonging to a single net.
Definition: pcb_actions.h:77
static TOOL_ACTION unselectItems
Unselects a list of items (specified as the event parameter)
Definition: pcb_actions.h:65
int find(const TOOL_EVENT &aEvent)
Find an item.
int findMove(const TOOL_EVENT &aEvent)
Find an item and start moving.
int UnselectItems(const TOOL_EVENT &aEvent)
Multiple item unselection event handler
static TOOL_ACTION selectConnection
Selects a connection between junctions.
Definition: pcb_actions.h:68
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:111
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
int expandSelectedConnection(const TOOL_EVENT &aEvent)
Expands the current selection to select a connection between two junctions
static TOOL_ACTION find
Find an item.
Definition: pcb_actions.h:396
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:74
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 expandSelectedConnection
Expands the current selection to select a connection between two junctions.
Definition: pcb_actions.h:71
static TOOL_ACTION filterSelection
Filters the items in the current selection (invokes dialog)
Definition: pcb_actions.h:86
static TOOL_ACTION selectOnSheetFromEeschema
Selects all components on sheet from Eeschema crossprobing.
Definition: pcb_actions.h:80
static TOOL_ACTION selectItem
Selects an item (specified as the event parameter).
Definition: pcb_actions.h:56
int SelectItems(const TOOL_EVENT &aEvent)
Multiple item selection event handler
static TOOL_ACTION findMove
Find an item and start moving.
Definition: pcb_actions.h:399
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:83
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 403 of file pcbnew/tools/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().

404 {
405  if( aItem->IsSelected() )
406  {
407  unselect( aItem );
408 
409  // Inform other potentially interested tools
411  }
412  else
413  {
414  if( !m_additive )
415  clearSelection();
416 
417  // Prevent selection of invisible or inactive items
418  if( selectable( aItem ) )
419  {
420  select( aItem );
421 
422  // Inform other potentially interested tools
424  }
425  }
426 
427  if( m_frame )
428  {
430  }
431 }
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:215
bool IsSelected() const
Definition: base_struct.h:232
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.
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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:895
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 1747 of file pcbnew/tools/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(), selectMultiple(), toggleSelection(), UnselectItem(), and UnselectItems().

1748 {
1749  if( !aItem->IsSelected() )
1750  return;
1751 
1752  m_selection.Remove( aItem );
1753  unselectVisually( aItem );
1754 
1755  if( m_selection.Empty() )
1756  {
1757  if( m_frame )
1758  {
1759  m_frame->SetCurItem( NULL );
1760  }
1761  m_locked = true;
1762  }
1763 }
bool Empty() const
Checks if there is anything selected.
Definition: selection.h:109
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:232
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:79
int SELECTION_TOOL::UnselectItem ( const TOOL_EVENT aEvent)

Item unselection event handler.

Definition at line 810 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

811 {
812  // Check if there is an item to be selected
813  BOARD_ITEM* item = aEvent.Parameter<BOARD_ITEM*>();
814 
815  if( item )
816  {
817  unselect( item );
818 
819  // Inform other potentially interested tools
821  }
822 
823  return 0;
824 }
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:215
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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:378
void unselect(BOARD_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
int SELECTION_TOOL::UnselectItems ( const TOOL_EVENT aEvent)

Multiple item unselection event handler

Definition at line 790 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

791 {
792  std::vector<BOARD_ITEM*>* items = aEvent.Parameter<std::vector<BOARD_ITEM*>*>();
793 
794  if( items )
795  {
796  // Perform individual unselection of each item
797  // before processing the event
798  for( auto item : *items )
799  {
800  unselect( item );
801  }
802 
804  }
805 
806  return 0;
807 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
bool ProcessEvent(const TOOL_EVENT &aEvent)
Propagates an event to tools that requested events of matching type(s).
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:378
void unselect(BOARD_ITEM *aItem)
Function unselect() Takes necessary action mark an item as unselected.
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 1788 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by clearSelection(), and unselect().

1789 {
1790  // Restore original item visibility
1791  aItem->ClearSelected();
1792  view()->Hide( aItem, false );
1793  view()->Update( aItem );
1794 
1795  // Modules are treated in a special way - when they are selected, we have to
1796  // unselect all the parts that make the module, not the module itself
1797 
1798  if( aItem->Type() == PCB_MODULE_T )
1799  {
1800  static_cast<MODULE*>( aItem )->RunOnChildren( [&] ( BOARD_ITEM* item )
1801  {
1802  item->ClearSelected();
1803  view()->Hide( item, false );
1804  view()->Update( item );
1805  });
1806  }
1807 
1808  view()->Update( &m_selection );
1809 }
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Temporarily hides the item in the view (e.g.
Definition: view.cpp:1466
KICAD_T Type() const
Function Type()
Definition: base_struct.h:209
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags) override
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: pcb_view.cpp:81
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:242
class MODULE, a footprint
Definition: typeinfo.h:89
SELECTION m_selection
Current state of selection.
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:133
int SELECTION_TOOL::updateSelection ( const TOOL_EVENT aEvent)
private

Event handler to update the selection VIEW_ITEM.

Definition at line 2168 of file pcbnew/tools/selection_tool.cpp.

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

Referenced by setTransitions().

2169 {
2170  getView()->Update( &m_selection );
2171 
2172  return 0;
2173 }
SELECTION m_selection
Current state of selection.
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1499
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
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 PCBNEW_CONTROL::DeleteItemCursor(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), 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(), GERBVIEW_SELECTION_TOOL::Main(), Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), GERBVIEW_SELECTION_TOOL::MeasureTool(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), EDIT_TOOL::pickCopyReferencePoint(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), DRAWING_TOOL::runPolygonEventLoop(), GERBVIEW_SELECTION_TOOL::selectMultiple(), selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), selectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), ZOOM_TOOL::selectRegion(), DRAWING_TOOL::SetAnchor(), and PCB_EDITOR_CONTROL::ShowLocalRatsnest().

56 {
57  return m_toolMgr->ScheduleWait( this, aEventList );
58 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
OPT< 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 1099 of file pcbnew/tools/selection_tool.cpp.

References KIGFX::PCB_VIEW::Add(), PCB_TOOL::canvas(), 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().

1100 {
1101  //Should recalculate the view to zoom in on the selection
1102  auto selectionBox = m_selection.ViewBBox();
1103  auto canvas = m_frame->GetGalCanvas();
1104  auto view = getView();
1105 
1106  VECTOR2D screenSize = view->ToWorld( canvas->GetClientSize(), false );
1107 
1108  if( !( selectionBox.GetWidth() == 0 ) || !( selectionBox.GetHeight() == 0 ) )
1109  {
1110  VECTOR2D vsize = selectionBox.GetSize();
1111  double scale = view->GetScale() / std::max( fabs( vsize.x / screenSize.x ),
1112  fabs( vsize.y / screenSize.y ) );
1113  view->SetScale( scale );
1114  view->SetCenter( selectionBox.Centre() );
1115  view->Add( &m_selection );
1116  }
1117 
1119 }
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:463
void SetScale(double aScale)
Function SetScale() Sets the scaling factor.
Definition: view.h:247
PCB_DRAW_PANEL_GAL * canvas() const
Definition: pcb_tool.cpp:214
const BOX2I ViewBBox() const override
Function ViewBBox() Returns the bounding box for all stored items covering all its layers...
Definition: selection.cpp:132
void SetCenter(const VECTOR2D &aCenter)
Function SetCenter() Sets the center point of the VIEW (i.e.
Definition: view.cpp:587
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:35
const int scale
#define max(a, b)
Definition: auxiliary.h:86
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:133
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:895
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1) override
Function Add() Adds a VIEW_ITEM to the view.
Definition: pcb_view.cpp:48

Member Data Documentation

const TOOL_EVENT SELECTION_TOOL::ClearedEvent
static

Event sent after selection is cleared.

Definition at line 137 of file pcbnew/tools/selection_tool.h.

Referenced by clearSelection(), POINT_EDITOR::OnSelectionChange(), SanitizeSelection(), and PCB_EDITOR_CONTROL::setTransitions().

bool SELECTION_TOOL::m_additive
private

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

Definition at line 345 of file pcbnew/tools/selection_tool.h.

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

PCB_BASE_FRAME* SELECTION_TOOL::m_frame
private
bool SELECTION_TOOL::m_locked
private

Can other tools modify locked items.

Definition at line 354 of file pcbnew/tools/selection_tool.h.

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

TOOL_MENU SELECTION_TOOL::m_menu
private

Menu model displayed by the tool.

Definition at line 357 of file pcbnew/tools/selection_tool.h.

Referenced by Init(), and Main().

bool SELECTION_TOOL::m_multiple
private

Flag saying if multiple selection mode is active.

Definition at line 351 of file pcbnew/tools/selection_tool.h.

Referenced by selectable(), and selectMultiple().

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

Definition at line 360 of file pcbnew/tools/selection_tool.h.

Referenced by filterSelection().

bool SELECTION_TOOL::m_subtractive
private

Flag saying if items should be removed from the current selection.

Definition at line 348 of file pcbnew/tools/selection_tool.h.

Referenced by Main(), and selectMultiple().

TOOL_ID TOOL_BASE::m_toolId
protectedinherited

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

Definition at line 210 of file tool_base.h.

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

TOOL_MANAGER* TOOL_BASE::m_toolMgr
protectedinherited

Definition at line 215 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), PAD_TOOL::applyPadSettings(), TOOL_BASE::attachManager(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), ROUTER_TOOL::CanInlineDrag(), GERBVIEW_SELECTION_TOOL::clearSelection(), clearSelection(), PAD_TOOL::copyPadSettings(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), 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(), expandSelectedConnection(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), findCallback(), findMove(), EDIT_TOOL::Flip(), TOOL_BASE::getEditFrameInt(), TOOL_BASE::getModelInt(), DRAWING_TOOL::getSourceZoneForAction(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), TOOL_INTERACTIVE::goInternal(), PCBNEW_CONTROL::GridSetOrigin(), GERBVIEW_CONTROL::HighlightControl(), PCB_EDITOR_CONTROL::HighlightNet(), PCB_EDITOR_CONTROL::HighlightNetCursor(), PICKER_TOOL::Init(), ALIGN_DISTRIBUTE_TOOL::Init(), PAD_TOOL::Init(), POINT_EDITOR::Init(), PCB_EDITOR_CONTROL::Init(), POSITION_RELATIVE_TOOL::Init(), EDIT_TOOL::Init(), ROUTER_TOOL::InlineDrag(), EDIT_TOOL::invokeInlineRouter(), EDIT_TOOL::isInteractiveDragEnabled(), TOOL_BASE::IsToolActive(), 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(), EDIT_TOOL::pickCopyReferencePoint(), PCBNEW_CONTROL::placeBoardItems(), DRAWING_TOOL::PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), POSITION_RELATIVE_TOOL::PositionRelative(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), EDIT_TOOL::Remove(), POINT_EDITOR::removeCorner(), GERBVIEW_SELECTION_TOOL::RequestSelection(), RequestSelection(), TOOL_INTERACTIVE::resetTransitions(), EDIT_TOOL::Rotate(), TOOL_INTERACTIVE::RunMainStack(), SanitizeSelection(), selectCopper(), PCB_TOOL::selection(), GERBVIEW_SELECTION_TOOL::SelectItem(), SelectItem(), GERBVIEW_SELECTION_TOOL::SelectItems(), SelectItems(), GERBVIEW_SELECTION_TOOL::selectMultiple(), selectMultiple(), selectNet(), selectOnSheetFromEeschema(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), selectSameSheet(), TOOL_INTERACTIVE::SetContextMenu(), PCB_EDITOR_CONTROL::ShowLocalRatsnest(), GERBVIEW_SELECTION_TOOL::toggleSelection(), toggleSelection(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), GERBVIEW_SELECTION_TOOL::UnselectItem(), UnselectItem(), GERBVIEW_SELECTION_TOOL::UnselectItems(), UnselectItems(), PCB_EDITOR_CONTROL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), TOOL_INTERACTIVE::Wait(), PCB_EDITOR_CONTROL::ZoneDuplicate(), and PCB_EDITOR_CONTROL::ZoneMerge().

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

TOOL_SETTINGS TOOL_BASE::m_toolSettings
protectedinherited

Definition at line 216 of file tool_base.h.

Referenced by TOOL_BASE::attachManager().

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

Stores the type of the tool.

Definition at line 207 of file tool_base.h.

const TOOL_EVENT SELECTION_TOOL::UnselectedEvent
static

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