KiCad PCB EDA Suite
SCH_LINE_WIRE_BUS_TOOL Class Reference

Tool responsible for drawing/placing items (symbols, wires, buses, labels, etc.) More...

#include <sch_line_wire_bus_tool.h>

Inheritance diagram for SCH_LINE_WIRE_BUS_TOOL:
EE_TOOL_BASE< SCH_EDIT_FRAME > TOOL_INTERACTIVE TOOL_BASE

Public Types

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

Public Member Functions

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

Static Public Member Functions

static bool IsDrawingLine (const SELECTION &aSelection)
 
static bool IsDrawingWire (const SELECTION &aSelection)
 
static bool IsDrawingBus (const SELECTION &aSelection)
 
static bool IsDrawingLineWireOrBus (const SELECTION &aSelection)
 

Protected Member Functions

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

Protected Attributes

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

Private Member Functions

int doDrawSegments (const std::string &aTool, int aType, bool aQuitOnDraw)
 
SCH_LINEstartSegments (int aType, const VECTOR2D &aPos)
 
SCH_LINEdoUnfoldBus (const wxString &aNet, wxPoint aPos=wxDefaultPosition)
 
void finishSegments ()
 
void simplifyWireList ()
 Iterate over the wire list and removes the null segments and overlapping segments to create a simplified wire list. More...
 
void setTransitions () override
 This method is meant to be overridden in order to specify handlers for events. More...
 
const SCH_SHEET_PINgetSheetPin (const wxPoint &aPosition)
 Search for a sheet pin at a location. More...
 
void computeBreakPoint (const std::pair< SCH_LINE *, SCH_LINE * > &aSegments, wxPoint &aPosition)
 Compute the middle coordinate for 2 segments from the start point to aPosition with the segments kept in the horizontal or vertical axis only. More...
 

Private Attributes

BUS_UNFOLDING_T m_busUnfold
 Data related to bus unfolding tool. More...
 
std::vector< SCH_LINE * > m_wires
 Storage for the line segments while drawing. More...
 

Detailed Description

Tool responsible for drawing/placing items (symbols, wires, buses, labels, etc.)

Definition at line 73 of file sch_line_wire_bus_tool.h.

Member Enumeration Documentation

◆ RESET_REASON

enum TOOL_BASE::RESET_REASON
inherited

Determine the reason of reset for a tool.

Enumerator
RUN 

Tool is invoked after being inactive.

MODEL_RELOAD 

Model changes (required full reload)

GAL_SWITCH 

Rendering engine changes.

Definition at line 78 of file tool_base.h.

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

Constructor & Destructor Documentation

◆ SCH_LINE_WIRE_BUS_TOOL()

SCH_LINE_WIRE_BUS_TOOL::SCH_LINE_WIRE_BUS_TOOL ( )

Definition at line 166 of file sch_line_wire_bus_tool.cpp.

166  :
167  EE_TOOL_BASE<SCH_EDIT_FRAME>( "eeschema.InteractiveDrawingLineWireBus" )
168 {
169  m_busUnfold = {};
170  m_wires.reserve( 16 );
171 }
std::vector< SCH_LINE * > m_wires
Storage for the line segments while drawing.
BUS_UNFOLDING_T m_busUnfold
Data related to bus unfolding tool.

References m_busUnfold, and m_wires.

◆ ~SCH_LINE_WIRE_BUS_TOOL()

SCH_LINE_WIRE_BUS_TOOL::~SCH_LINE_WIRE_BUS_TOOL ( )

Definition at line 174 of file sch_line_wire_bus_tool.cpp.

175 {
176 }

Member Function Documentation

◆ Activate()

void TOOL_INTERACTIVE::Activate ( )
inherited

Run the tool.

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

Definition at line 51 of file tool_interactive.cpp.

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

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

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

◆ AddJunctionsIfNeeded()

int SCH_LINE_WIRE_BUS_TOOL::AddJunctionsIfNeeded ( const TOOL_EVENT aEvent)

Handle the addition of junctions to a selection of objects.

Definition at line 952 of file sch_line_wire_bus_tool.cpp.

953 {
954  EE_SELECTION* aSelection = aEvent.Parameter<EE_SELECTION*>();
955 
956  std::vector<wxPoint> pts;
957  std::vector<wxPoint> connections = m_frame->GetSchematicConnections();
958 
959  for( unsigned ii = 0; ii < aSelection->GetSize(); ii++ )
960  {
961  SCH_ITEM* item = dynamic_cast<SCH_ITEM*>( aSelection->GetItem( ii ) );
962 
963  if( !item || !item->IsConnectable() )
964  continue;
965 
966  std::vector<wxPoint> new_pts = item->GetConnectionPoints();
967  pts.insert( pts.end(), new_pts.begin(), new_pts.end() );
968 
969  // If the item is a line, we also add any connection points from the rest of the schematic
970  // that terminate on the line after it is moved.
971  if( item->Type() == SCH_LINE_T )
972  {
973  SCH_LINE* line = (SCH_LINE*) item;
974 
975  for( const wxPoint& pt : connections )
976  {
977  if( IsPointOnSegment( line->GetStartPoint(), line->GetEndPoint(), pt ) )
978  pts.push_back( pt );
979  }
980  }
981  else
982  {
983  // Clean up any wires that short non-wire connections in the list
984  for( auto pt = new_pts.begin(); pt != new_pts.end(); pt++ )
985  {
986  for( auto secondPt = pt + 1; secondPt != new_pts.end(); secondPt++ )
987  m_frame->TrimWire( *pt, *secondPt );
988  }
989  }
990  }
991 
992  // We always have some overlapping connection points. Drop duplicates here
993  std::sort( pts.begin(), pts.end(),
994  []( const wxPoint& a, const wxPoint& b ) -> bool
995  {
996  return a.x < b.x || ( a.x == b.x && a.y < b.y );
997  } );
998 
999  pts.erase( unique( pts.begin(), pts.end() ), pts.end() );
1000 
1001  for( const wxPoint& point : pts )
1002  {
1003  if( m_frame->GetScreen()->IsJunctionNeeded( point, true ) )
1004  m_frame->AddJunction( m_frame->GetScreen(), point, true, false );
1005  }
1006 
1007  return 0;
1008 }
virtual bool IsConnectable() const
Definition: sch_item.h:376
virtual std::vector< wxPoint > GetConnectionPoints() const
Add all the connection points for this item to aPoints.
Definition: sch_item.h:390
wxPoint GetStartPoint() const
Definition: sch_line.h:94
bool IsJunctionNeeded(const wxPoint &aPosition, bool aNew=false)
Test if a junction is required for the items at aPosition on the screen.
Definition: sch_screen.cpp:373
bool IsPointOnSegment(const wxPoint &aSegStart, const wxPoint &aSegEnd, const wxPoint &aTestPoint)
Test if aTestPoint is on line defined by aSegStart and aSegEnd.
Definition: trigo.cpp:42
SCH_JUNCTION * AddJunction(SCH_SCREEN *aScreen, const wxPoint &aPos, bool aAppendToUndo, bool aFinal=true)
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
T Parameter() const
Return a non-standard parameter assigned to the event.
Definition: tool_event.h:443
std::vector< wxPoint > GetSchematicConnections()
Collects a unique list of all possible connection points in the schematic.
virtual KIGFX::VIEW_ITEM * GetItem(unsigned int aIdx) const override
Definition: selection.h:106
virtual unsigned int GetSize() const override
Return the number of stored items.
Definition: selection.h:101
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
bool TrimWire(const wxPoint &aStart, const wxPoint &aEnd)
If any single wire passes through both points, remove the portion between the two points,...
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:196
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:162
wxPoint GetEndPoint() const
Definition: sch_line.h:97

References SCH_EDIT_FRAME::AddJunction(), SCH_ITEM::GetConnectionPoints(), SCH_LINE::GetEndPoint(), SELECTION::GetItem(), SCH_EDIT_FRAME::GetSchematicConnections(), SCH_EDIT_FRAME::GetScreen(), SELECTION::GetSize(), SCH_LINE::GetStartPoint(), SCH_ITEM::IsConnectable(), SCH_SCREEN::IsJunctionNeeded(), IsPointOnSegment(), EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, TOOL_EVENT::Parameter(), SCH_LINE_T, SCH_EDIT_FRAME::TrimWire(), and EDA_ITEM::Type().

Referenced by setTransitions().

◆ attachManager()

void TOOL_BASE::attachManager ( TOOL_MANAGER aManager)
protectedinherited

Set the TOOL_MANAGER the tool will belong to.

Called by TOOL_MANAGER::RegisterTool()

Definition at line 60 of file tool_base.cpp.

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

References TOOL_BASE::m_toolMgr.

Referenced by TOOL_MANAGER::RegisterTool().

◆ computeBreakPoint()

void SCH_LINE_WIRE_BUS_TOOL::computeBreakPoint ( const std::pair< SCH_LINE *, SCH_LINE * > &  aSegments,
wxPoint &  aPosition 
)
private

Compute the middle coordinate for 2 segments from the start point to aPosition with the segments kept in the horizontal or vertical axis only.

Parameters
aSegmentsA pair of pointers to a SCH_LINE objects containing the first line break point to compute.
aPositionA reference to a wxPoint object containing the coordinates of the position used to calculate the line break point.

Definition at line 409 of file sch_line_wire_bus_tool.cpp.

411 {
412  wxCHECK_RET( aSegments.first && aSegments.second,
413  wxT( "Cannot compute break point of NULL line segment." ) );
414 
415  SCH_LINE* segment = aSegments.first;
416  SCH_LINE* next_segment = aSegments.second;
417 
418  wxPoint midPoint;
419  int iDx = segment->GetEndPoint().x - segment->GetStartPoint().x;
420  int iDy = segment->GetEndPoint().y - segment->GetStartPoint().y;
421 
422  const SCH_SHEET_PIN* connectedPin = getSheetPin( segment->GetStartPoint() );
423  SHEET_SIDE force = connectedPin ? connectedPin->GetEdge() : SHEET_UNDEFINED_SIDE;
424 
425  if( force == SHEET_LEFT_SIDE || force == SHEET_RIGHT_SIDE )
426  {
427  if( aPosition.x == connectedPin->GetPosition().x ) // push outside sheet boundary
428  {
429  int direction = ( force == SHEET_LEFT_SIDE ) ? -1 : 1;
430  aPosition.x += KiROUND( getView()->GetGAL()->GetGridSize().x * direction );
431  }
432 
433  midPoint.x = aPosition.x;
434  midPoint.y = segment->GetStartPoint().y; // force horizontal
435  }
436  else if( iDy != 0 ) // keep the first segment orientation (vertical)
437  {
438  midPoint.x = segment->GetStartPoint().x;
439  midPoint.y = aPosition.y;
440  }
441  else if( iDx != 0 ) // keep the first segment orientation (horizontal)
442  {
443  midPoint.x = aPosition.x;
444  midPoint.y = segment->GetStartPoint().y;
445  }
446  else
447  {
448  if( std::abs( aPosition.x - segment->GetStartPoint().x ) <
449  std::abs( aPosition.y - segment->GetStartPoint().y ) )
450  {
451  midPoint.x = segment->GetStartPoint().x;
452  midPoint.y = aPosition.y;
453  }
454  else
455  {
456  midPoint.x = aPosition.x;
457  midPoint.y = segment->GetStartPoint().y;
458  }
459  }
460 
461  segment->SetEndPoint( midPoint );
462  next_segment->SetStartPoint( midPoint );
463  next_segment->SetEndPoint( aPosition );
464 }
SHEET_SIDE
Defines the edge of the sheet that the sheet pin is positioned SHEET_LEFT_SIDE = 0: pin on left side ...
Definition: sch_sheet.h:56
wxPoint GetStartPoint() const
Definition: sch_line.h:94
SHEET_SIDE GetEdge() const
void SetEndPoint(const wxPoint &aPosition)
Definition: sch_line.h:98
const SCH_SHEET_PIN * getSheetPin(const wxPoint &aPosition)
Search for a sheet pin at a location.
void SetStartPoint(const wxPoint &aPosition)
Definition: sch_line.h:95
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet.h:85
wxPoint GetPosition() const override
Definition: sch_text.h:312
KIGFX::VIEW * getView() const
Returns the instance of #VIEW object used in the application.
Definition: tool_base.cpp:36
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:68
wxPoint GetEndPoint() const
Definition: sch_line.h:97

References SCH_SHEET_PIN::GetEdge(), SCH_LINE::GetEndPoint(), SCH_TEXT::GetPosition(), getSheetPin(), SCH_LINE::GetStartPoint(), TOOL_BASE::getView(), KiROUND(), SCH_LINE::SetEndPoint(), SCH_LINE::SetStartPoint(), SHEET_LEFT_SIDE, SHEET_RIGHT_SIDE, and SHEET_UNDEFINED_SIDE.

Referenced by doDrawSegments().

◆ doDrawSegments()

int SCH_LINE_WIRE_BUS_TOOL::doDrawSegments ( const std::string &  aTool,
int  aType,
bool  aQuitOnDraw 
)
private

Definition at line 467 of file sch_line_wire_bus_tool.cpp.

468 {
469  SCH_SCREEN* screen = m_frame->GetScreen();
470  SCH_LINE* segment = nullptr;
471  EE_GRID_HELPER grid( m_toolMgr );
472 
474 
475  controls->ShowCursor( true );
476 
477  Activate();
478 
479  // Add the new label to the selection so the rotate command operates on it
480  if( m_busUnfold.label )
482 
483  // Continue the existing wires if we've started (usually by immediate action preference)
484  if( !m_wires.empty() )
485  segment = m_wires.back();
486 
487  auto setCursor =
488  [&]()
489  {
490  if( aType == LAYER_WIRE )
492  else if( aType == LAYER_BUS )
494  else if( aType == LAYER_NOTES )
496  else
498  };
499 
500  // Set initial cursor
501  setCursor();
502 
503  wxPoint contextMenuPos;
504 
505  // Main loop: keep receiving events
506  while( TOOL_EVENT* evt = Wait() )
507  {
508  setCursor();
509  grid.SetMask( GRID_HELPER::ALL );
510  grid.SetSnap( !evt->Modifier( MD_SHIFT ) );
511  grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !evt->Modifier( MD_ALT ) );
512 
513  if( segment )
514  {
515  if( segment->GetStartPoint().x == segment->GetEndPoint().x )
516  grid.ClearMaskFlag( GRID_HELPER::VERTICAL );
517 
518  if( segment->GetStartPoint().y == segment->GetEndPoint().y )
519  grid.ClearMaskFlag( GRID_HELPER::HORIZONTAL );
520  }
521 
522  wxPoint cursorPos = static_cast<wxPoint>( evt->HasPosition() ?
523  evt->Position() :
524  controls->GetMousePosition() );
525 
526  cursorPos = (wxPoint) grid.BestSnapAnchor( cursorPos, LAYER_CONNECTABLE, segment );
527  controls->ForceCursorPosition( true, cursorPos );
528 
529  bool forceHV = m_frame->eeconfig()->m_Drawing.hv_lines_only;
530 
531  auto cleanup =
532  [&] ()
533  {
535 
536  for( SCH_LINE* wire : m_wires )
537  delete wire;
538 
539  m_wires.clear();
540  segment = nullptr;
541 
542  if( m_busUnfold.entry )
544 
547 
550 
551  delete m_busUnfold.entry;
552  delete m_busUnfold.label;
553  m_busUnfold = {};
554 
555  m_view->ClearPreview();
556  m_view->ShowPreview( false );
557  };
558 
559  //------------------------------------------------------------------------
560  // Handle cancel:
561  //
562  if( evt->IsCancelInteractive() )
563  {
564  if( segment || m_busUnfold.in_progress )
565  cleanup();
566  else
567  {
568  m_frame->PopTool( aTool );
569  break;
570  }
571  }
572  else if( evt->IsActivate() )
573  {
574  if( segment || m_busUnfold.in_progress )
575  cleanup();
576 
577  if( evt->IsMoveTool() )
578  {
579  // leave ourselves on the stack so we come back after the move
580  break;
581  }
582  else
583  {
584  m_frame->PopTool( aTool );
585  break;
586  }
587  }
588  //------------------------------------------------------------------------
589  // Handle finish:
590  //
591  else if( evt->IsAction( &EE_ACTIONS::finishLineWireOrBus )
592  || evt->IsAction( &EE_ACTIONS::finishWire )
593  || evt->IsAction( &EE_ACTIONS::finishBus )
594  || evt->IsAction( &EE_ACTIONS::finishLine ) )
595  {
596  if( segment || m_busUnfold.in_progress )
597  {
598  finishSegments();
599  segment = nullptr;
600 
601  if( aQuitOnDraw )
602  {
603  m_frame->PopTool( aTool );
604  break;
605  }
606  }
607  }
608  //------------------------------------------------------------------------
609  // Handle click:
610  //
611  else if( evt->IsClick( BUT_LEFT ) || ( segment && evt->IsDblClick( BUT_LEFT ) ) )
612  {
613  // First click when unfolding places the label and wire-to-bus entry
615  {
616  wxASSERT( aType == LAYER_WIRE );
617 
618  m_frame->AddToScreen( m_busUnfold.label, screen );
620  m_busUnfold.label_placed = true;
621  }
622 
623  if( !segment )
624  {
625  segment = startSegments( aType, VECTOR2D( cursorPos ) );
626  }
627  // Create a new segment if we're out of previously-created ones
628  else if( !segment->IsNull() || ( forceHV && !m_wires[ m_wires.size() - 2 ]->IsNull() ) )
629  {
630  // Terminate the command if the end point is on a pin, junction, label, or another
631  // wire or bus.
632  if( screen->IsTerminalPoint( cursorPos, segment->GetLayer() ) )
633  {
634  finishSegments();
635  segment = nullptr;
636 
637  if( aQuitOnDraw )
638  {
639  m_frame->PopTool( aTool );
640  break;
641  }
642  }
643  else
644  {
645  segment->SetEndPoint( cursorPos );
646 
647  // Create a new segment, and chain it after the current segment.
648  segment = new SCH_LINE( *segment );
649  segment->SetFlags( IS_NEW | IS_MOVED );
650  segment->SetStartPoint( cursorPos );
651  m_wires.push_back( segment );
652 
653  m_selectionTool->AddItemToSel( segment, true /*quiet mode*/ );
654  }
655  }
656 
657  if( evt->IsDblClick( BUT_LEFT ) && segment )
658  {
659  if( forceHV && m_wires.size() >= 2 )
660  computeBreakPoint( { m_wires[ m_wires.size() - 2 ], segment }, cursorPos );
661 
662  finishSegments();
663  segment = nullptr;
664 
665  if( aQuitOnDraw )
666  {
667  m_frame->PopTool( aTool );
668  break;
669  }
670  }
671  }
672  //------------------------------------------------------------------------
673  // Handle motion:
674  //
675  else if( evt->IsMotion() || evt->IsAction( &ACTIONS::refreshPreview ) )
676  {
677  m_view->ClearPreview();
678 
679  // Update the bus unfold posture based on the mouse movement
681  {
682  wxPoint cursor_delta = cursorPos - m_busUnfold.origin;
684 
685  bool flipX = ( cursor_delta.x < 0 );
686  bool flipY = ( cursor_delta.y < 0 );
687 
688  // Erase and redraw if necessary
689  if( flipX != m_busUnfold.flipX || flipY != m_busUnfold.flipY )
690  {
691  wxSize size = entry->GetSize();
692  int ySign = flipY ? -1 : 1;
693  int xSign = flipX ? -1 : 1;
694 
695  size.x = std::abs( size.x ) * xSign;
696  size.y = std::abs( size.y ) * ySign;
697  entry->SetSize( size );
698 
699  m_busUnfold.flipY = flipY;
700  m_busUnfold.flipX = flipX;
701 
702  m_frame->UpdateItem( entry );
703  m_wires.front()->SetStartPoint( entry->GetEnd() );
704  }
705 
706  // Update the label "ghost" position
707  m_busUnfold.label->SetPosition( cursorPos );
709 
710  // Ensure segment is non-null at the start of bus unfold
711  if( !segment )
712  segment = m_wires.back();
713  }
714 
715  if( segment )
716  {
717  // Coerce the line to vertical or horizontal if necessary
718  if( forceHV && m_wires.size() >= 2 )
719  computeBreakPoint( { m_wires[ m_wires.size() - 2 ], segment }, cursorPos );
720  else
721  segment->SetEndPoint( cursorPos );
722  }
723 
724  for( SCH_LINE* wire : m_wires )
725  {
726  if( !wire->IsNull() )
727  m_view->AddToPreview( wire->Clone() );
728  }
729  }
730  //------------------------------------------------------------------------
731  // Handle context menu:
732  //
733  else if( evt->IsClick( BUT_RIGHT ) )
734  {
735  // Warp after context menu only if dragging...
736  if( !segment )
738 
739  contextMenuPos = cursorPos;
741  }
742  else if( evt->Category() == TC_COMMAND && evt->Action() == TA_CHOICE_MENU_CHOICE )
743  {
744  if( evt->GetCommandId().get() >= ID_POPUP_SCH_UNFOLD_BUS
745  && evt->GetCommandId().get() <= ID_POPUP_SCH_UNFOLD_BUS_END )
746  {
747  wxASSERT_MSG( !segment, "Bus unfold event received when already drawing!" );
748 
749  aType = LAYER_WIRE;
750  wxString net = *evt->Parameter<wxString*>();
751  segment = doUnfoldBus( net, contextMenuPos );
752  }
753  }
754  else
755  {
756  evt->SetPassEvent();
757  }
758 
759  // Enable autopanning and cursor capture only when there is a segment to be placed
760  controls->SetAutoPan( segment != nullptr );
761  controls->CaptureCursor( segment != nullptr );
762  }
763 
765  controls->ForceCursorPosition( false );
766  return 0;
767 }
virtual void ShowCursor(bool aEnabled)
Enable or disables display of cursor.
TOOL_MENU m_menu
The functions below are not yet implemented - their interface may change.
void UpdateItem(EDA_ITEM *aItem, bool isAddOrDelete=false)
Mark an item for refresh.
bool flipY
True if the bus entry should be flipped in the y-axis.
TOOL_EVENT * Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Suspend execution of the tool until an event specified in aEventList arrives.
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Return the current mouse pointer position.
wxPoint GetStartPoint() const
Definition: sch_line.h:94
void SetSize(const wxSize &aSize)
Definition: sch_bus_entry.h:64
void AddToPreview(EDA_ITEM *aItem, bool aTakeOwnership=true)
Definition: view.cpp:1552
std::vector< SCH_LINE * > m_wires
Storage for the line segments while drawing.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
SCH_LINE * startSegments(int aType, const VECTOR2D &aPos)
static TOOL_ACTION finishLineWireOrBus
Definition: ee_actions.h:91
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:141
void RemoveFromScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Remove an item from the screen (and view) aScreen is the screen the item is located on,...
void SetCurrentCursor(KICURSOR cursor)
Set the current cursor shape for this panel.
static TOOL_ACTION finishLine
Definition: ee_actions.h:94
void SetEndPoint(const wxPoint &aPosition)
Definition: sch_line.h:98
void ShowPreview(bool aShow=true)
Definition: view.cpp:1566
EE_SELECTION & GetSelection()
Return the set of currently selected items.
EESCHEMA_SETTINGS * eeconfig() const
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
Definition: sch_text.cpp:747
wxPoint origin
Origin (on the bus) of the unfold.
void SetFlags(STATUS_FLAGS aMask)
Definition: eda_item.h:202
VECTOR2< double > VECTOR2D
Definition: vector2d.h:622
virtual void PopTool(const std::string &actionName)
virtual void CaptureCursor(bool aEnabled)
Force the cursor to stay within the drawing panel area.
bool IsNull() const
Definition: sch_line.h:92
SCH_LINE * doUnfoldBus(const wxString &aNet, wxPoint aPos=wxDefaultPosition)
void SetStartPoint(const wxPoint &aPosition)
Definition: sch_line.h:95
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
Generic, UI-independent tool event.
Definition: tool_event.h:173
void ClearPreview()
Definition: view.cpp:1530
An interface for classes handling user events controlling the view behavior such as zooming,...
EE_SELECTION_TOOL * m_selectionTool
Definition: ee_tool_base.h:176
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Place the cursor immediately at a given point.
static TOOL_ACTION clearSelection
Clears the current selection.
Definition: ee_actions.h:54
#define IS_MOVED
Item being moved.
Definition: eda_item.h:105
void computeBreakPoint(const std::pair< SCH_LINE *, SCH_LINE * > &aSegments, wxPoint &aPosition)
Compute the middle coordinate for 2 segments from the start point to aPosition with the segments kept...
KIGFX::VIEW * getView() const
Returns the instance of #VIEW object used in the application.
Definition: tool_base.cpp:36
virtual void SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
SCH_BUS_WIRE_ENTRY * entry
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition: sch_item.h:287
int RemoveItemFromSel(const TOOL_EVENT &aEvent)
wxSize GetSize() const
Definition: sch_bus_entry.h:63
bool IsTerminalPoint(const wxPoint &aPosition, int aLayer)
Test if aPosition is a connection point on aLayer.
Definition: sch_screen.cpp:483
int AddItemToSel(const TOOL_EVENT &aEvent)
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
void VetoContextMenuMouseWarp()
Disable mouse warping after the current context menu is closed.
Definition: tool_manager.h:428
Class for a wire to bus entry.
void Activate()
Run the tool.
bool label_placed
True if user has placed the net label.
KIGFX::VIEW_CONTROLS * getViewControls() const
Return the instance of VIEW_CONTROLS object used in the application.
Definition: tool_base.cpp:42
static TOOL_ACTION finishBus
Definition: ee_actions.h:93
void SetPosition(const wxPoint &aPosition) override
Definition: sch_text.h:313
bool flipX
True if the bus entry should be flipped in the x-axis.
void ShowContextMenu(SELECTION &aSelection)
Helper function to set and immediately show a CONDITIONAL_MENU in concert with the given SELECTION.
Definition: tool_menu.cpp:59
#define IS_NEW
New item, just created.
Definition: eda_item.h:106
static TOOL_ACTION finishWire
Definition: ee_actions.h:92
BUS_UNFOLDING_T m_busUnfold
Data related to bus unfolding tool.
static TOOL_ACTION refreshPreview
Definition: actions.h:109
bool in_progress
True if bus unfold operation is running.
wxPoint GetEnd() const
wxPoint GetEndPoint() const
Definition: sch_line.h:97

References TOOL_INTERACTIVE::Activate(), EE_SELECTION_TOOL::AddItemToSel(), KIGFX::VIEW::AddToPreview(), SCH_BASE_FRAME::AddToScreen(), GRID_HELPER::ALL, ARROW, EE_GRID_HELPER::BestSnapAnchor(), BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), GRID_HELPER::ClearMaskFlag(), KIGFX::VIEW::ClearPreview(), EE_ACTIONS::clearSelection, SCH_LABEL::Clone(), computeBreakPoint(), doUnfoldBus(), SCH_BASE_FRAME::eeconfig(), BUS_UNFOLDING_T::entry, EE_ACTIONS::finishBus, EE_ACTIONS::finishLine, EE_ACTIONS::finishLineWireOrBus, finishSegments(), EE_ACTIONS::finishWire, BUS_UNFOLDING_T::flipX, BUS_UNFOLDING_T::flipY, KIGFX::VIEW_CONTROLS::ForceCursorPosition(), SCH_BASE_FRAME::GetCanvas(), SCH_BUS_ENTRY_BASE::GetEnd(), SCH_LINE::GetEndPoint(), SCH_ITEM::GetLayer(), KIGFX::VIEW_CONTROLS::GetMousePosition(), SCH_EDIT_FRAME::GetScreen(), EE_SELECTION_TOOL::GetSelection(), SCH_BUS_ENTRY_BASE::GetSize(), SCH_LINE::GetStartPoint(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), GRID_HELPER::HORIZONTAL, EESCHEMA_SETTINGS::DRAWING::hv_lines_only, ID_POPUP_SCH_UNFOLD_BUS, ID_POPUP_SCH_UNFOLD_BUS_END, BUS_UNFOLDING_T::in_progress, IS_MOVED, IS_NEW, SCH_LINE::IsNull(), SCH_SCREEN::IsTerminalPoint(), BUS_UNFOLDING_T::label, BUS_UNFOLDING_T::label_placed, LAYER_BUS, LAYER_CONNECTABLE, LAYER_NOTES, LAYER_WIRE, LINE_BUS, LINE_GRAPHIC, LINE_WIRE, m_busUnfold, EESCHEMA_SETTINGS::m_Drawing, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, TOOL_INTERACTIVE::m_menu, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_selectionTool, TOOL_BASE::m_toolMgr, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_view, m_wires, MD_ALT, MD_SHIFT, BUS_UNFOLDING_T::origin, TOOLS_HOLDER::PopTool(), ACTIONS::refreshPreview, SCH_BASE_FRAME::RemoveFromScreen(), EE_SELECTION_TOOL::RemoveItemFromSel(), TOOL_MANAGER::RunAction(), KIGFX::VIEW_CONTROLS::SetAutoPan(), EDA_DRAW_PANEL_GAL::SetCurrentCursor(), SCH_LINE::SetEndPoint(), EDA_ITEM::SetFlags(), GRID_HELPER::SetMask(), SCH_TEXT::SetPosition(), SCH_BUS_ENTRY_BASE::SetSize(), GRID_HELPER::SetSnap(), SCH_LINE::SetStartPoint(), GRID_HELPER::SetUseGrid(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), KIGFX::VIEW::ShowPreview(), startSegments(), TA_CHOICE_MENU_CHOICE, TC_COMMAND, SCH_BASE_FRAME::UpdateItem(), GRID_HELPER::VERTICAL, TOOL_MANAGER::VetoContextMenuMouseWarp(), and TOOL_INTERACTIVE::Wait().

Referenced by DrawSegments(), and UnfoldBus().

◆ doUnfoldBus()

SCH_LINE * SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus ( const wxString &  aNet,
wxPoint  aPos = wxDefaultPosition 
)
private

Definition at line 361 of file sch_line_wire_bus_tool.cpp.

362 {
363  SCHEMATIC_SETTINGS& cfg = getModel<SCHEMATIC>()->Settings();
364 
365  if( aPos == wxDefaultPosition )
366  aPos = static_cast<wxPoint>( getViewControls()->GetCursorPosition() );
367 
369 
370  m_busUnfold.entry = new SCH_BUS_WIRE_ENTRY( aPos );
373 
379 
380  m_busUnfold.in_progress = true;
381  m_busUnfold.origin = aPos;
382  m_busUnfold.net_name = aNet;
383 
385 
387 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
SCH_LINE * startSegments(int aType, const VECTOR2D &aPos)
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:141
void SetTextSize(const wxSize &aNewSize)
Definition: eda_text.h:244
virtual void SetParent(EDA_ITEM *aParent)
Definition: eda_item.h:165
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
wxPoint origin
Origin (on the bus) of the unfold.
void SetFlags(STATUS_FLAGS aMask)
Definition: eda_item.h:202
static TOOL_ACTION clearSelection
Clears the current selection.
Definition: ee_actions.h:54
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
wxString net_name
Net label for the unfolding operation.
#define IS_MOVED
Item being moved.
Definition: eda_item.h:105
SCH_BUS_WIRE_ENTRY * entry
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
These settings were stored in SCH_BASE_FRAME previously.
Class for a wire to bus entry.
KIGFX::VIEW_CONTROLS * getViewControls() const
Return the instance of VIEW_CONTROLS object used in the application.
Definition: tool_base.cpp:42
virtual void SetLabelSpinStyle(LABEL_SPIN_STYLE aSpinStyle)
Set a spin or rotation angle, along with specific horizontal and vertical justification styles with e...
Definition: sch_text.cpp:248
#define IS_NEW
New item, just created.
Definition: eda_item.h:106
BUS_UNFOLDING_T m_busUnfold
Data related to bus unfolding tool.
bool in_progress
True if bus unfold operation is running.
wxPoint GetEnd() const

References SCH_BASE_FRAME::AddToScreen(), EE_ACTIONS::clearSelection, BUS_UNFOLDING_T::entry, SCH_BUS_ENTRY_BASE::GetEnd(), SCH_EDIT_FRAME::GetScreen(), TOOL_BASE::getViewControls(), BUS_UNFOLDING_T::in_progress, IS_MOVED, IS_NEW, BUS_UNFOLDING_T::label, LAYER_WIRE, m_busUnfold, SCHEMATIC_SETTINGS::m_DefaultTextSize, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, TOOL_BASE::m_toolMgr, BUS_UNFOLDING_T::net_name, BUS_UNFOLDING_T::origin, LABEL_SPIN_STYLE::RIGHT, TOOL_MANAGER::RunAction(), KIGFX::VIEW_CONTROLS::SetCrossHairCursorPosition(), EDA_ITEM::SetFlags(), SCH_TEXT::SetLabelSpinStyle(), EDA_ITEM::SetParent(), EDA_TEXT::SetTextSize(), and startSegments().

Referenced by doDrawSegments(), and UnfoldBus().

◆ DrawSegments()

int SCH_LINE_WIRE_BUS_TOOL::DrawSegments ( const TOOL_EVENT aEvent)

Definition at line 279 of file sch_line_wire_bus_tool.cpp.

280 {
282 
283  std::string tool = aEvent.GetCommandStr().get();
284  m_frame->PushTool( tool );
286 
287  if( aEvent.HasPosition() )
288  {
289  EE_GRID_HELPER grid( m_toolMgr );
290  grid.SetSnap( !aEvent.Modifier( MD_SHIFT ) );
291  grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !aEvent.Modifier( MD_ALT ) );
292 
293  VECTOR2D cursorPos = grid.BestSnapAnchor( aEvent.Position(), LAYER_CONNECTABLE, nullptr );
294  startSegments( params->layer, cursorPos );
295  }
296 
297  return doDrawSegments( tool, params->layer, params->quitOnDraw );
298 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
virtual void PushTool(const std::string &actionName)
NB: the definition of "tool" is different at the user level.
SCH_LINE * startSegments(int aType, const VECTOR2D &aPos)
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:141
T Parameter() const
Return a non-standard parameter assigned to the event.
Definition: tool_event.h:443
static TOOL_ACTION clearSelection
Clears the current selection.
Definition: ee_actions.h:54
int doDrawSegments(const std::string &aTool, int aType, bool aQuitOnDraw)
KIGFX::VIEW * getView() const
Returns the instance of #VIEW object used in the application.
Definition: tool_base.cpp:36
int Modifier(int aMask=MD_MODIFIER_MASK) const
Definition: tool_event.h:352
OPT< std::string > GetCommandStr() const
Definition: tool_event.h:471
bool HasPosition() const
Definition: tool_event.h:261
const VECTOR2D Position() const
Returns the point where dragging has started.
Definition: tool_event.h:284

References EE_GRID_HELPER::BestSnapAnchor(), EE_ACTIONS::clearSelection, doDrawSegments(), TOOL_EVENT::GetCommandStr(), TOOL_BASE::getView(), TOOL_EVENT::HasPosition(), DRAW_SEGMENT_EVENT_PARAMS::layer, LAYER_CONNECTABLE, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, TOOL_BASE::m_toolMgr, MD_ALT, MD_SHIFT, TOOL_EVENT::Modifier(), TOOL_EVENT::Parameter(), TOOL_EVENT::Position(), TOOLS_HOLDER::PushTool(), DRAW_SEGMENT_EVENT_PARAMS::quitOnDraw, TOOL_MANAGER::RunAction(), GRID_HELPER::SetSnap(), GRID_HELPER::SetUseGrid(), and startSegments().

Referenced by setTransitions().

◆ finishSegments()

void SCH_LINE_WIRE_BUS_TOOL::finishSegments ( )
private

Definition at line 850 of file sch_line_wire_bus_tool.cpp.

851 {
852  // Clear selection when done so that a new wire can be started.
853  // NOTE: this must be done before simplifyWireList is called or we might end up with
854  // freed selected items.
856 
857  SCH_SCREEN* screen = m_frame->GetScreen();
858  PICKED_ITEMS_LIST itemList;
859 
860  // Remove segments backtracking over others
862 
863  // Collect the possible connection points for the new lines
864  std::vector< wxPoint > connections = m_frame->GetSchematicConnections();
865  std::vector< wxPoint > new_ends;
866 
867  // Check each new segment for possible junctions and add/split if needed
868  for( SCH_LINE* wire : m_wires )
869  {
870  if( wire->HasFlag( SKIP_STRUCT ) )
871  continue;
872 
873  std::vector<wxPoint> tmpends = wire->GetConnectionPoints();
874 
875  new_ends.insert( new_ends.end(), tmpends.begin(), tmpends.end() );
876 
877  for( const wxPoint& pt : connections )
878  {
879  if( IsPointOnSegment( wire->GetStartPoint(), wire->GetEndPoint(), pt ) )
880  new_ends.push_back( pt );
881  }
882  itemList.PushItem( ITEM_PICKER( screen, wire, UNDO_REDO::NEWITEM ) );
883  }
884 
886  {
887  wxASSERT( m_busUnfold.entry && m_busUnfold.label );
888 
889  itemList.PushItem( ITEM_PICKER( screen, m_busUnfold.entry, UNDO_REDO::NEWITEM ) );
890  itemList.PushItem( ITEM_PICKER( screen, m_busUnfold.label, UNDO_REDO::NEWITEM ) );
892  }
893 
894  // Get the last non-null wire (this is the last created segment).
895  if( !m_wires.empty() )
897 
898  // Add the new wires
899  for( SCH_LINE* wire : m_wires )
900  {
901  wire->ClearFlags( IS_NEW | IS_MOVED );
902  m_frame->AddToScreen( wire, screen );
903  }
904 
905  m_wires.clear();
906  m_view->ClearPreview();
907  m_view->ShowPreview( false );
908 
909  getViewControls()->CaptureCursor( false );
910  getViewControls()->SetAutoPan( false );
911 
912  m_frame->SaveCopyInUndoList( itemList, UNDO_REDO::NEWITEM, false );
913 
914  // Correct and remove segments that need to be merged.
916 
917  std::vector<SCH_ITEM*> components;
918 
919  for( SCH_ITEM* item : m_frame->GetScreen()->Items().OfType( SCH_COMPONENT_T ) )
920  components.push_back( item );
921 
922  for( SCH_ITEM* item : components )
923  {
924  std::vector<wxPoint> pts = item->GetConnectionPoints();
925 
926  if( pts.size() > 2 )
927  continue;
928 
929  for( auto pt = pts.begin(); pt != pts.end(); pt++ )
930  {
931  for( auto secondPt = pt + 1; secondPt != pts.end(); secondPt++ )
932  m_frame->TrimWire( *pt, *secondPt );
933  }
934  }
935 
936  for( const wxPoint& pt : new_ends )
937  {
938  if( m_frame->GetScreen()->IsJunctionNeeded( pt, true ) )
939  m_frame->AddJunction( m_frame->GetScreen(), pt, true, false );
940  }
941 
943  m_busUnfold = {};
944 
947 
948  m_frame->OnModify();
949 }
EE_TYPE OfType(KICAD_T aType) const
Definition: sch_rtree.h:219
bool SchematicCleanUp(SCH_SCREEN *aScreen=nullptr)
Performs routine schematic cleaning including breaking wire and buses and deleting identical objects ...
void simplifyWireList()
Iterate over the wire list and removes the null segments and overlapping segments to create a simplif...
bool IsJunctionNeeded(const wxPoint &aPosition, bool aNew=false)
Test if a junction is required for the items at aPosition on the screen.
Definition: sch_screen.cpp:373
std::vector< SCH_LINE * > m_wires
Storage for the line segments while drawing.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
bool IsPointOnSegment(const wxPoint &aSegStart, const wxPoint &aSegEnd, const wxPoint &aTestPoint)
Test if aTestPoint is on line defined by aSegStart and aSegEnd.
Definition: trigo.cpp:42
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Run the specified action.
Definition: tool_manager.h:141
void PushItem(const ITEM_PICKER &aItem)
Push aItem to the top of the list.
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
Definition: actions.h:214
SCH_JUNCTION * AddJunction(SCH_SCREEN *aScreen, const wxPoint &aPos, bool aAppendToUndo, bool aFinal=true)
void ShowPreview(bool aShow=true)
Definition: view.cpp:1566
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
void TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
virtual void CaptureCursor(bool aEnabled)
Force the cursor to stay within the drawing panel area.
void ClearPreview()
Definition: view.cpp:1530
void SaveCopyForRepeatItem(SCH_ITEM *aItem)
Clone aItem and owns that clone in this container.
std::vector< wxPoint > GetSchematicConnections()
Collects a unique list of all possible connection points in the schematic.
static TOOL_ACTION clearSelection
Clears the current selection.
Definition: ee_actions.h:54
A holder to handle information on schematic or board items.
#define IS_MOVED
Item being moved.
Definition: eda_item.h:105
virtual void SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
SCH_BUS_WIRE_ENTRY * entry
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
void SaveCopyInUndoList(SCH_SCREEN *aScreen, SCH_ITEM *aItemToCopy, UNDO_REDO aTypeCommand, bool aAppend)
Create a copy of the current schematic item, and put it in the undo list.
EE_RTREE & Items()
Definition: sch_screen.h:162
bool TrimWire(const wxPoint &aStart, const wxPoint &aEnd)
If any single wire passes through both points, remove the portion between the two points,...
void OnModify() override
Must be called after a schematic change in order to set the "modify" flag of the current screen and u...
bool label_placed
True if user has placed the net label.
KIGFX::VIEW_CONTROLS * getViewControls() const
Return the instance of VIEW_CONTROLS object used in the application.
Definition: tool_base.cpp:42
#define SKIP_STRUCT
flag indicating that the structure should be ignored
Definition: eda_item.h:117
void ClearEditFlags()
Definition: eda_item.h:221
void PostEvent(const TOOL_EVENT &aEvent)
Put an event to the event queue to be processed at the end of event processing cycle.
Definition: tool_manager.h:267
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:196
#define IS_NEW
New item, just created.
Definition: eda_item.h:106
BUS_UNFOLDING_T m_busUnfold
Data related to bus unfolding tool.
bool in_progress
True if bus unfold operation is running.

References SCH_EDIT_FRAME::AddJunction(), SCH_BASE_FRAME::AddToScreen(), KIGFX::VIEW_CONTROLS::CaptureCursor(), EDA_ITEM::ClearEditFlags(), KIGFX::VIEW::ClearPreview(), EE_ACTIONS::clearSelection, BUS_UNFOLDING_T::entry, SCH_EDIT_FRAME::GetSchematicConnections(), SCH_EDIT_FRAME::GetScreen(), TOOL_BASE::getViewControls(), BUS_UNFOLDING_T::in_progress, IS_MOVED, IS_NEW, SCH_SCREEN::IsJunctionNeeded(), IsPointOnSegment(), SCH_SCREEN::Items(), BUS_UNFOLDING_T::label, BUS_UNFOLDING_T::label_placed, m_busUnfold, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, TOOL_BASE::m_toolMgr, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_view, m_wires, NEWITEM, EE_RTREE::OfType(), SCH_EDIT_FRAME::OnModify(), TOOL_MANAGER::PostEvent(), PICKED_ITEMS_LIST::PushItem(), TOOL_MANAGER::RunAction(), SCH_EDIT_FRAME::SaveCopyForRepeatItem(), SCH_EDIT_FRAME::SaveCopyInUndoList(), SCH_COMPONENT_T, SCH_EDIT_FRAME::SchematicCleanUp(), EVENTS::SelectedItemsModified, KIGFX::VIEW_CONTROLS::SetAutoPan(), KIGFX::VIEW::ShowPreview(), simplifyWireList(), SKIP_STRUCT, SCH_EDIT_FRAME::TestDanglingEnds(), and SCH_EDIT_FRAME::TrimWire().

Referenced by doDrawSegments().

◆ getEditFrame()

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

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

Definition at line 185 of file tool_base.h.

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

References TOOL_BASE::getToolHolderInt().

Referenced by ZONE_CREATE_HELPER::createNewZone().

◆ GetId()

TOOL_ID TOOL_BASE::GetId ( ) const
inlineinherited

Return the unique identifier of the tool.

The identifier is set by an instance of TOOL_MANAGER.

Returns
Identifier of the tool.

Definition at line 121 of file tool_base.h.

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

References TOOL_BASE::m_toolId.

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

◆ GetManager()

TOOL_MANAGER* TOOL_BASE::GetManager ( ) const
inlineinherited

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

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

Definition at line 144 of file tool_base.h.

145  {
146  return m_toolMgr;
147  }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215

References TOOL_BASE::m_toolMgr.

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

◆ getModel()

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

Return the model object if it matches the requested type.

Store the type of the tool.

Definition at line 197 of file tool_base.h.

References TOOL_BASE::getModelInt().

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

◆ GetName()

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

Return the name of the tool.

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

Returns
The name of the tool.

Definition at line 134 of file tool_base.h.

135  {
136  return m_toolName;
137  }
std::string m_toolName
Definition: tool_base.h:214

References TOOL_BASE::m_toolName.

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

◆ getSheetPin()

const SCH_SHEET_PIN * SCH_LINE_WIRE_BUS_TOOL::getSheetPin ( const wxPoint &  aPosition)
private

Search for a sheet pin at a location.

Parameters
aPositiongrid point to search for existing sheet pin
Returns
Pointer to sheet pin or nullptr on failure

Definition at line 390 of file sch_line_wire_bus_tool.cpp.

391 {
392  SCH_SCREEN* screen = m_frame->GetScreen();
393 
394  for( SCH_ITEM* item : screen->Items().Overlapping( SCH_SHEET_T, aPosition ) )
395  {
396  SCH_SHEET* sheet = static_cast<SCH_SHEET*>( item );
397 
398  for( SCH_SHEET_PIN* pin : sheet->GetPins() )
399  {
400  if( pin->GetPosition() == aPosition )
401  return pin;
402  }
403  }
404 
405  return nullptr;
406 }
EE_TYPE Overlapping(const EDA_RECT &aRect)
Definition: sch_rtree.h:224
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet.h:85
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:219
std::vector< SCH_SHEET_PIN * > & GetPins()
Definition: sch_sheet.h:365
EE_RTREE & Items()
Definition: sch_screen.h:162
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:196

References SCH_SHEET::GetPins(), SCH_EDIT_FRAME::GetScreen(), SCH_SCREEN::Items(), EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, EE_RTREE::Overlapping(), and SCH_SHEET_T.

Referenced by computeBreakPoint().

◆ GetToolMenu()

◆ GetType()

TOOL_TYPE TOOL_BASE::GetType ( ) const
inlineinherited

Return the type of the tool.

Returns
The type of the tool.

Definition at line 109 of file tool_base.h.

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

References TOOL_BASE::m_type.

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

◆ getView()

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

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

It allows tools to draw.

Returns
The instance of VIEW.

Definition at line 36 of file tool_base.cpp.

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

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

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

◆ getViewControls()

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

Return the instance of VIEW_CONTROLS object used in the application.

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

Returns
The instance of VIEW_CONTROLS.

Definition at line 42 of file tool_base.cpp.

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

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

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

◆ Go()

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

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

No conditions means any event.

Definition at line 128 of file tool_interactive.h.

130 {
131  TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
132 
133  goInternal( sptr, aConditions );
134 }
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)

References TOOL_INTERACTIVE::goInternal().

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

◆ Init()

bool SCH_LINE_WIRE_BUS_TOOL::Init ( )
overridevirtual

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

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

Reimplemented from TOOL_BASE.

Definition at line 179 of file sch_line_wire_bus_tool.cpp.

180 {
182 
183  auto wireOrBusTool =
184  [this]( const SELECTION& aSel )
185  {
188  };
189 
190  auto lineTool =
191  [this]( const SELECTION& aSel )
192  {
194  };
195 
196  auto belowRootSheetCondition =
197  [&]( const SELECTION& aSel )
198  {
199  return m_frame->GetCurrentSheet().Last() != &m_frame->Schematic().Root();
200  };
201 
202  auto busSelection = EE_CONDITIONS::MoreThan( 0 )
204 
205  auto& ctxMenu = m_menu.GetMenu();
206 
207  // Build the tool menu
208  //
209  ctxMenu.AddItem( EE_ACTIONS::leaveSheet, belowRootSheetCondition, 2 );
210 
211  ctxMenu.AddSeparator( 10 );
212  ctxMenu.AddItem( EE_ACTIONS::drawWire, wireOrBusTool && EE_CONDITIONS::Idle, 10 );
213  ctxMenu.AddItem( EE_ACTIONS::drawBus, wireOrBusTool && EE_CONDITIONS::Idle, 10 );
214  ctxMenu.AddItem( EE_ACTIONS::drawLines, lineTool && EE_CONDITIONS::Idle, 10 );
215  ctxMenu.AddItem( EE_ACTIONS::finishWire, IsDrawingWire, 10 );
216  ctxMenu.AddItem( EE_ACTIONS::finishBus, IsDrawingBus, 10 );
217  ctxMenu.AddItem( EE_ACTIONS::finishLine, IsDrawingLine, 10 );
218 
219  std::shared_ptr<BUS_UNFOLD_MENU> busUnfoldMenu = std::make_shared<BUS_UNFOLD_MENU>();
220  busUnfoldMenu->SetTool( this );
221  m_menu.AddSubMenu( busUnfoldMenu );
222  ctxMenu.AddMenu( busUnfoldMenu.get(), EE_CONDITIONS::Idle, 10 );
223 
224  ctxMenu.AddSeparator( 100 );
225  ctxMenu.AddItem( EE_ACTIONS::placeJunction, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
226  ctxMenu.AddItem( EE_ACTIONS::placeLabel, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
227  ctxMenu.AddItem( EE_ACTIONS::placeGlobalLabel, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
228  ctxMenu.AddItem( EE_ACTIONS::placeHierLabel, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
229  ctxMenu.AddItem( EE_ACTIONS::breakWire, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
230  ctxMenu.AddItem( EE_ACTIONS::breakBus, wireOrBusTool && EE_CONDITIONS::Idle, 100 );
231 
232  ctxMenu.AddSeparator( 200 );
233  ctxMenu.AddItem( EE_ACTIONS::selectNode, wireOrBusTool && EE_CONDITIONS::Idle, 200 );
234  ctxMenu.AddItem( EE_ACTIONS::selectConnection, wireOrBusTool && EE_CONDITIONS::Idle, 200 );
235 
236  // Add bus unfolding to the selection tool
237  //
239 
240  std::shared_ptr<BUS_UNFOLD_MENU> selBusUnfoldMenu = std::make_shared<BUS_UNFOLD_MENU>();
241  selBusUnfoldMenu->SetTool( m_selectionTool );
242  m_selectionTool->GetToolMenu().AddSubMenu( selBusUnfoldMenu );
243  selToolMenu.AddMenu( selBusUnfoldMenu.get(), busSelection && EE_CONDITIONS::Idle, 100 );
244 
245  return true;
246 }
void AddMenu(ACTION_MENU *aMenu, const SELECTION_CONDITION &aCondition=SELECTION_CONDITIONS::ShowAlways, int aOrder=ANY_ORDER)
Add a submenu to the menu.
bool IsCurrentTool(const TOOL_ACTION &aAction) const
TOOL_MENU m_menu
The functions below are not yet implemented - their interface may change.
static bool IsDrawingWire(const SELECTION &aSelection)
static TOOL_ACTION breakBus
Definition: ee_actions.h:132
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
static SELECTION_CONDITION MoreThan(int aNumber)
Create a functor that tests if the number of selected items is greater than the value given as parame...
static bool Idle(const SELECTION &aSelection)
Test if there no items selected or being edited.
CONDITIONAL_MENU & GetMenu()
Definition: tool_menu.cpp:46
static TOOL_ACTION placeHierLabel
Definition: ee_actions.h:85
static TOOL_ACTION placeJunction
Definition: ee_actions.h:81
static TOOL_ACTION selectConnection
If current selection is a wire or bus, expand to entire connection.
Definition: ee_actions.h:51
TOOL_MENU & GetToolMenu()
static bool IsDrawingLine(const SELECTION &aSelection)
static TOOL_ACTION breakWire
Definition: ee_actions.h:131
static TOOL_ACTION finishLine
Definition: ee_actions.h:94
static TOOL_ACTION leaveSheet
Definition: ee_actions.h:182
bool Init() override
Init() is called once upon a registration of the tool.
Definition: ee_tool_base.h:65
static TOOL_ACTION drawWire
Definition: ee_actions.h:77
SCHEMATIC & Schematic() const
EE_SELECTION_TOOL * m_selectionTool
Definition: ee_tool_base.h:176
static bool IsDrawingBus(const SELECTION &aSelection)
static TOOL_ACTION drawBus
Definition: ee_actions.h:78
static TOOL_ACTION placeLabel
Definition: ee_actions.h:83
SCH_SHEET & Root() const
Definition: schematic.h:116
void AddSubMenu(std::shared_ptr< ACTION_MENU > aSubMenu)
Store a submenu of this menu model.
Definition: tool_menu.cpp:52
static SELECTION_CONDITION OnlyType(KICAD_T aType)
Create a functor that tests if the selected items are only of given type.
static TOOL_ACTION selectNode
Select the junction, wire or bus segment under the cursor.
Definition: ee_actions.h:47
SCH_SHEET_PATH & GetCurrentSheet() const
static TOOL_ACTION drawLines
Definition: ee_actions.h:89
static TOOL_ACTION placeGlobalLabel
Definition: ee_actions.h:84
static TOOL_ACTION finishBus
Definition: ee_actions.h:93
void AddItem(const TOOL_ACTION &aAction, const SELECTION_CONDITION &aCondition, int aOrder=ANY_ORDER)
Add a menu entry to run a TOOL_ACTION on selected items.
static TOOL_ACTION finishWire
Definition: ee_actions.h:92

References CONDITIONAL_MENU::AddItem(), CONDITIONAL_MENU::AddMenu(), TOOL_MENU::AddSubMenu(), EE_ACTIONS::breakBus, EE_ACTIONS::breakWire, EE_ACTIONS::drawBus, EE_ACTIONS::drawLines, EE_ACTIONS::drawWire, EE_ACTIONS::finishBus, EE_ACTIONS::finishLine, EE_ACTIONS::finishWire, SCH_EDIT_FRAME::GetCurrentSheet(), TOOL_MENU::GetMenu(), TOOL_INTERACTIVE::GetToolMenu(), SELECTION_CONDITIONS::Idle(), EE_TOOL_BASE< T >::Init(), TOOLS_HOLDER::IsCurrentTool(), IsDrawingBus(), IsDrawingLine(), IsDrawingWire(), SCH_SHEET_PATH::Last(), EE_ACTIONS::leaveSheet, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, TOOL_INTERACTIVE::m_menu, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_selectionTool, SELECTION_CONDITIONS::MoreThan(), SELECTION_CONDITIONS::OnlyType(), EE_ACTIONS::placeGlobalLabel, EE_ACTIONS::placeHierLabel, EE_ACTIONS::placeJunction, EE_ACTIONS::placeLabel, SCHEMATIC::Root(), SCH_LINE_LOCATE_BUS_T, SCH_EDIT_FRAME::Schematic(), EE_ACTIONS::selectConnection, and EE_ACTIONS::selectNode.

◆ IsDrawingBus()

bool SCH_LINE_WIRE_BUS_TOOL::IsDrawingBus ( const SELECTION aSelection)
static

Definition at line 263 of file sch_line_wire_bus_tool.cpp.

264 {
265  static KICAD_T busType[] = { SCH_LINE_LOCATE_BUS_T, EOT };
266  return IsDrawingLineWireOrBus( aSelection ) && aSelection.Front()->IsType( busType );
267 }
search types array terminator (End Of Types)
Definition: typeinfo.h:81
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
virtual bool IsType(const KICAD_T aScanTypes[]) const
Check whether the item is one of the listed types.
Definition: eda_item.h:232
static bool IsDrawingLineWireOrBus(const SELECTION &aSelection)
EDA_ITEM * Front() const
Definition: selection.h:203

References EOT, SELECTION::Front(), IsDrawingLineWireOrBus(), EDA_ITEM::IsType(), and SCH_LINE_LOCATE_BUS_T.

Referenced by EE_SELECTION_TOOL::Init(), and Init().

◆ IsDrawingLine()

bool SCH_LINE_WIRE_BUS_TOOL::IsDrawingLine ( const SELECTION aSelection)
static

Definition at line 249 of file sch_line_wire_bus_tool.cpp.

250 {
251  static KICAD_T graphicLineType[] = { SCH_LINE_LOCATE_GRAPHIC_LINE_T, EOT };
252  return IsDrawingLineWireOrBus( aSelection ) && aSelection.Front()->IsType( graphicLineType );
253 }
search types array terminator (End Of Types)
Definition: typeinfo.h:81
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
virtual bool IsType(const KICAD_T aScanTypes[]) const
Check whether the item is one of the listed types.
Definition: eda_item.h:232
static bool IsDrawingLineWireOrBus(const SELECTION &aSelection)
EDA_ITEM * Front() const
Definition: selection.h:203

References EOT, SELECTION::Front(), IsDrawingLineWireOrBus(), EDA_ITEM::IsType(), and SCH_LINE_LOCATE_GRAPHIC_LINE_T.

Referenced by Init().

◆ IsDrawingLineWireOrBus()

bool SCH_LINE_WIRE_BUS_TOOL::IsDrawingLineWireOrBus ( const SELECTION aSelection)
static

Definition at line 270 of file sch_line_wire_bus_tool.cpp.

271 {
272  // NOTE: for immediate hotkeys, it is NOT required that the line, wire or bus tool
273  // be selected
274  SCH_ITEM* item = (SCH_ITEM*) aSelection.Front();
275  return item && item->IsNew() && item->Type() == SCH_LINE_T;
276 }
bool IsNew() const
Definition: eda_item.h:168
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:196
EDA_ITEM * Front() const
Definition: selection.h:203
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:162

References SELECTION::Front(), EDA_ITEM::IsNew(), SCH_LINE_T, and EDA_ITEM::Type().

Referenced by SCH_EDIT_TOOL::Init(), SCH_MOVE_TOOL::Init(), IsDrawingBus(), IsDrawingLine(), and IsDrawingWire().

◆ IsDrawingWire()

bool SCH_LINE_WIRE_BUS_TOOL::IsDrawingWire ( const SELECTION aSelection)
static

Definition at line 256 of file sch_line_wire_bus_tool.cpp.

257 {
258  static KICAD_T wireType[] = { SCH_LINE_LOCATE_WIRE_T, EOT };
259  return IsDrawingLineWireOrBus( aSelection ) && aSelection.Front()->IsType( wireType );
260 }
search types array terminator (End Of Types)
Definition: typeinfo.h:81
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
virtual bool IsType(const KICAD_T aScanTypes[]) const
Check whether the item is one of the listed types.
Definition: eda_item.h:232
static bool IsDrawingLineWireOrBus(const SELECTION &aSelection)
EDA_ITEM * Front() const
Definition: selection.h:203

References EOT, SELECTION::Front(), IsDrawingLineWireOrBus(), EDA_ITEM::IsType(), and SCH_LINE_LOCATE_WIRE_T.

Referenced by EE_SELECTION_TOOL::Init(), and Init().

◆ IsToolActive()

bool TOOL_BASE::IsToolActive ( ) const
inherited

Definition at line 31 of file tool_base.cpp.

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

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

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

◆ Reset()

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

Bring the tool to a known, initial state.

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

Parameters
aReasoncontains information about the reason of tool reset.

Implements TOOL_BASE.

Definition at line 85 of file ee_tool_base.h.

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

◆ RunMainStack()

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

Call a function using the main stack.

Parameters
aFuncis the function to be calls.

Definition at line 87 of file tool_interactive.cpp.

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

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

Referenced by DRAWING_TOOL::PlaceText().

◆ saveCopyInUndoList()

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

Definition at line 133 of file ee_tool_base.h.

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

◆ SetContextMenu()

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

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

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

Definition at line 76 of file tool_interactive.cpp.

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

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

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

◆ setTransitions()

void SCH_LINE_WIRE_BUS_TOOL::setTransitions ( )
overrideprivatevirtual

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

It is called every time tool is reset or finished.

Implements TOOL_INTERACTIVE.

Definition at line 1009 of file sch_line_wire_bus_tool.cpp.

1010 {
1015 
1017 }
int AddJunctionsIfNeeded(const TOOL_EVENT &aEvent)
Handle the addition of junctions to a selection of objects.
static TOOL_ACTION unfoldBus
Definition: ee_actions.h:79
int UnfoldBus(const TOOL_EVENT &aEvent)
void Go(int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
Define which state (aStateFunc) to go when a certain event arrives (aConditions).
static TOOL_ACTION drawWire
Definition: ee_actions.h:77
static TOOL_ACTION addNeededJunctions
Definition: ee_actions.h:73
static TOOL_ACTION drawBus
Definition: ee_actions.h:78
static TOOL_ACTION drawLines
Definition: ee_actions.h:89
int DrawSegments(const TOOL_EVENT &aEvent)

References AddJunctionsIfNeeded(), EE_ACTIONS::addNeededJunctions, EE_ACTIONS::drawBus, EE_ACTIONS::drawLines, DrawSegments(), EE_ACTIONS::drawWire, TOOL_INTERACTIVE::Go(), EE_ACTIONS::unfoldBus, and UnfoldBus().

◆ simplifyWireList()

void SCH_LINE_WIRE_BUS_TOOL::simplifyWireList ( )
private

Iterate over the wire list and removes the null segments and overlapping segments to create a simplified wire list.

In a contiguous list of wires, remove wires that backtrack over the previous wire.

Set up handlers for various events.

Example:

Wire is added: -------------------------------------—>

A second wire backtracks over it: ----------------—<====================>

simplifyWireList is called: ----------------—>

Definition at line 816 of file sch_line_wire_bus_tool.cpp.

817 {
818  for( auto it = m_wires.begin(); it != m_wires.end(); )
819  {
820  SCH_LINE* line = *it;
821 
822  if( line->IsNull() )
823  {
824  delete line;
825  it = m_wires.erase( it );
826  continue;
827  }
828 
829  auto next_it = it;
830  ++next_it;
831 
832  if( next_it == m_wires.end() )
833  break;
834 
835  SCH_LINE* next_line = *next_it;
836 
837  if( SCH_LINE* merged = line->MergeOverlap( m_frame->GetScreen(), next_line, false ) )
838  {
839  delete line;
840  delete next_line;
841  it = m_wires.erase( it );
842  *it = merged;
843  }
844 
845  ++it;
846  }
847 }
SCH_LINE * MergeOverlap(SCH_SCREEN *aScreen, SCH_LINE *aLine, bool aCheckJunctions)
Check line against aLine to see if it overlaps and merge if it does.
Definition: sch_line.cpp:449
std::vector< SCH_LINE * > m_wires
Storage for the line segments while drawing.
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
bool IsNull() const
Definition: sch_line.h:92
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37

References SCH_EDIT_FRAME::GetScreen(), SCH_LINE::IsNull(), EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, m_wires, and SCH_LINE::MergeOverlap().

Referenced by finishSegments().

◆ startSegments()

SCH_LINE * SCH_LINE_WIRE_BUS_TOOL::startSegments ( int  aType,
const VECTOR2D aPos 
)
private

Definition at line 770 of file sch_line_wire_bus_tool.cpp.

771 {
772  SCH_LINE* segment = nullptr;
773 
774  switch ( aType )
775  {
776  default: segment = new SCH_LINE( aPos, LAYER_NOTES ); break;
777  case LAYER_WIRE: segment = new SCH_LINE( aPos, LAYER_WIRE ); break;
778  case LAYER_BUS: segment = new SCH_LINE( aPos, LAYER_BUS ); break;
779  }
780 
781  // Give segments a parent so they find the default line/wire/bus widths
782  segment->SetParent( &m_frame->Schematic() );
783  segment->SetFlags( IS_NEW | IS_MOVED );
784  m_wires.push_back( segment );
785 
786  m_selectionTool->AddItemToSel( segment, true /*quiet mode*/ );
787 
788  // We need 2 segments to go from a given start pin to an end point when the
789  // horizontal and vertical lines only switch is on.
791  {
792  segment = new SCH_LINE( *segment );
793  segment->SetFlags( IS_NEW | IS_MOVED );
794  m_wires.push_back( segment );
795 
796  m_selectionTool->AddItemToSel( segment, true /*quiet mode*/ );
797  }
798 
799  return segment;
800 }
std::vector< SCH_LINE * > m_wires
Storage for the line segments while drawing.
virtual void SetParent(EDA_ITEM *aParent)
Definition: eda_item.h:165
EESCHEMA_SETTINGS * eeconfig() const
void SetFlags(STATUS_FLAGS aMask)
Definition: eda_item.h:202
SCHEMATIC & Schematic() const
EE_SELECTION_TOOL * m_selectionTool
Definition: ee_tool_base.h:176
#define IS_MOVED
Item being moved.
Definition: eda_item.h:105
int AddItemToSel(const TOOL_EVENT &aEvent)
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
#define IS_NEW
New item, just created.
Definition: eda_item.h:106

References EE_SELECTION_TOOL::AddItemToSel(), SCH_BASE_FRAME::eeconfig(), EESCHEMA_SETTINGS::DRAWING::hv_lines_only, IS_MOVED, IS_NEW, LAYER_BUS, LAYER_NOTES, LAYER_WIRE, EESCHEMA_SETTINGS::m_Drawing, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_selectionTool, m_wires, SCH_EDIT_FRAME::Schematic(), EDA_ITEM::SetFlags(), and EDA_ITEM::SetParent().

Referenced by doDrawSegments(), doUnfoldBus(), and DrawSegments().

◆ UnfoldBus()

int SCH_LINE_WIRE_BUS_TOOL::UnfoldBus ( const TOOL_EVENT aEvent)

Definition at line 301 of file sch_line_wire_bus_tool.cpp.

302 {
303  wxString* netPtr = aEvent.Parameter<wxString*>();
304  wxString net;
305  SCH_LINE* segment = nullptr;
306 
307  std::string tool = aEvent.GetCommandStr().get();
308  m_frame->PushTool( tool );
309  Activate();
310 
311  if( netPtr )
312  {
313  net = *netPtr;
314  delete netPtr;
315  }
316  else
317  {
318  BUS_UNFOLD_MENU unfoldMenu;
319  unfoldMenu.SetTool( this );
320  unfoldMenu.SetShowTitle();
321 
322  SetContextMenu( &unfoldMenu, CMENU_NOW );
323 
324  while( TOOL_EVENT* evt = Wait() )
325  {
326  if( evt->Action() == TA_CHOICE_MENU_CHOICE )
327  {
328  OPT<int> id = evt->GetCommandId();
329 
330  if( id && ( *id > 0 ) )
331  net = *evt->Parameter<wxString*>();
332 
333  break;
334  }
335  else if( evt->Action() == TA_CHOICE_MENU_CLOSED )
336  {
337  break;
338  }
339  else
340  {
341  evt->SetPassEvent();
342  }
343  }
344  }
345 
346  // Break a wire for the given net out of the bus
347  if( !net.IsEmpty() )
348  segment = doUnfoldBus( net );
349 
350  // If we have an unfolded wire to draw, then draw it
351  if( segment )
352  return doDrawSegments( tool, LAYER_WIRE, false );
353  else
354  {
355  m_frame->PopTool( tool );
356  return 0;
357  }
358 }
TOOL_EVENT * Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Suspend execution of the tool until an event specified in aEventList arrives.
virtual void PushTool(const std::string &actionName)
NB: the definition of "tool" is different at the user level.
void SetContextMenu(ACTION_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
Assign a context menu and tells when it should be activated.
void SetTool(TOOL_INTERACTIVE *aTool)
Set a tool that is the creator of the menu.
virtual void PopTool(const std::string &actionName)
T Parameter() const
Return a non-standard parameter assigned to the event.
Definition: tool_event.h:443
SCH_LINE * doUnfoldBus(const wxString &aNet, wxPoint aPos=wxDefaultPosition)
Generic, UI-independent tool event.
Definition: tool_event.h:173
int doDrawSegments(const std::string &aTool, int aType, bool aQuitOnDraw)
OPT< std::string > GetCommandStr() const
Definition: tool_event.h:471
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:37
boost::optional< T > OPT
Definition: optional.h:7
void Activate()
Run the tool.

References TOOL_INTERACTIVE::Activate(), CMENU_NOW, doDrawSegments(), doUnfoldBus(), TOOL_EVENT::GetCommandStr(), LAYER_WIRE, EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame, TOOL_EVENT::Parameter(), TOOLS_HOLDER::PopTool(), TOOLS_HOLDER::PushTool(), TOOL_INTERACTIVE::SetContextMenu(), BUS_UNFOLD_MENU::SetShowTitle(), ACTION_MENU::SetTool(), TA_CHOICE_MENU_CHOICE, TA_CHOICE_MENU_CLOSED, and TOOL_INTERACTIVE::Wait().

Referenced by setTransitions().

◆ updateItem()

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

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

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

Definition at line 102 of file ee_tool_base.h.

◆ Wait()

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

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

No parameters means waiting for any event.

Definition at line 57 of file tool_interactive.cpp.

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

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

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

Member Data Documentation

◆ m_busUnfold

BUS_UNFOLDING_T SCH_LINE_WIRE_BUS_TOOL::m_busUnfold
private

Data related to bus unfolding tool.

Definition at line 132 of file sch_line_wire_bus_tool.h.

Referenced by doDrawSegments(), doUnfoldBus(), finishSegments(), and SCH_LINE_WIRE_BUS_TOOL().

◆ m_frame

SCH_EDIT_FRAME * EE_TOOL_BASE< SCH_EDIT_FRAME >::m_frame
protectedinherited

Definition at line 174 of file ee_tool_base.h.

◆ m_isSymbolEditor

bool EE_TOOL_BASE< SCH_EDIT_FRAME >::m_isSymbolEditor
protectedinherited

Definition at line 177 of file ee_tool_base.h.

◆ m_menu

TOOL_MENU TOOL_INTERACTIVE::m_menu
protectedinherited

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

Definition at line 106 of file tool_interactive.h.

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

◆ m_selectionTool

EE_SELECTION_TOOL* EE_TOOL_BASE< SCH_EDIT_FRAME >::m_selectionTool
protectedinherited

Definition at line 176 of file ee_tool_base.h.

◆ m_toolId

TOOL_ID TOOL_BASE::m_toolId
protectedinherited

Name of the tool.

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

Definition at line 210 of file tool_base.h.

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

◆ m_toolMgr

TOOL_MANAGER* TOOL_BASE::m_toolMgr
protectedinherited

Definition at line 215 of file tool_base.h.

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

◆ m_toolName

std::string TOOL_BASE::m_toolName
protectedinherited

Definition at line 214 of file tool_base.h.

Referenced by TOOL_BASE::GetName().

◆ m_type

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

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

Definition at line 207 of file tool_base.h.

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

◆ m_view

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

Definition at line 175 of file ee_tool_base.h.

◆ m_wires

std::vector<SCH_LINE*> SCH_LINE_WIRE_BUS_TOOL::m_wires
private

Storage for the line segments while drawing.

Definition at line 135 of file sch_line_wire_bus_tool.h.

Referenced by doDrawSegments(), finishSegments(), SCH_LINE_WIRE_BUS_TOOL(), simplifyWireList(), and startSegments().


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