KiCad PCB EDA Suite
Loading...
Searching...
No Matches
net_navigator.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2023 Rivos
5 * Copyright (C) 2023, 2024 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * @author Wayne Stambaugh <[email protected]>
8 *
9 * This program is free software: you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License as published by the
11 * Free Software Foundation, either version 3 of the License, or (at your
12 * option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License along
20 * with this program. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23#include <wx/log.h>
24#include <core/profile.h>
25#include <tool/tool_manager.h>
26#include <kiface_base.h>
27#include <sch_edit_frame.h>
28#include <sch_bus_entry.h>
29#include <sch_line.h>
30#include <sch_junction.h>
31#include <sch_no_connect.h>
32#include <sch_sheet_pin.h>
33#include <schematic.h>
34#include <string_utils.h>
35#include <trace_helpers.h>
36#include <connection_graph.h>
38#include <tools/ee_actions.h>
39
40
41static wxString GetNetNavigatorItemText( const SCH_ITEM* aItem,
42 const SCH_SHEET_PATH& aSheetPath,
43 UNITS_PROVIDER* aUnitsProvider )
44{
45 wxString retv;
46
47 wxCHECK( aItem && aUnitsProvider, retv );
48
49 switch( aItem->Type() )
50 {
51 case SCH_LINE_T:
52 {
53 const SCH_LINE* line = static_cast<const SCH_LINE*>( aItem );
54
55 wxCHECK( line, retv );
56
57 if( aItem->GetLayer() == LAYER_WIRE )
58 {
59 retv.Printf( _( "Wire from %s, %s to %s, %s" ),
60 aUnitsProvider->MessageTextFromValue( line->GetStartPoint().x ),
61 aUnitsProvider->MessageTextFromValue( line->GetStartPoint().y ),
62 aUnitsProvider->MessageTextFromValue( line->GetEndPoint().x ),
63 aUnitsProvider->MessageTextFromValue( line->GetEndPoint().y ) );
64 }
65 else if( aItem->GetLayer() == LAYER_BUS )
66 {
67 retv.Printf( _( "Bus from %s, %s to %s, %s" ),
68 aUnitsProvider->MessageTextFromValue( line->GetStartPoint().x ),
69 aUnitsProvider->MessageTextFromValue( line->GetStartPoint().y ),
70 aUnitsProvider->MessageTextFromValue( line->GetEndPoint().x ),
71 aUnitsProvider->MessageTextFromValue( line->GetEndPoint().y ) );
72 }
73 else
74 {
75 retv = _( "Graphic line not connectable" );
76 }
77
78 break;
79 }
80 case SCH_PIN_T:
81 {
82 const SCH_PIN* pin = static_cast<const SCH_PIN*>( aItem );
83 wxCHECK( pin, retv );
84
85 const SYMBOL* symbol = pin->GetParentSymbol();
86 wxCHECK( symbol, retv );
87
88 retv.Printf( _( "Symbol '%s' pin '%s'" ), symbol->GetRef( &aSheetPath, true ),
89 UnescapeString( pin->GetNumber() ) );
90 break;
91 }
92 case SCH_SHEET_PIN_T:
93 {
94 const SCH_SHEET_PIN* pin = static_cast<const SCH_SHEET_PIN*>( aItem );
95 wxCHECK( pin, retv );
96
97 SCH_SHEET* sheet = pin->GetParent();
98 wxCHECK( sheet, retv );
99
100 retv.Printf( _( "Sheet '%s' pin '%s'" ), sheet->GetName(),
101 UnescapeString( pin->GetText() ) );
102 break;
103 }
104 case SCH_LABEL_T:
105 {
106 const SCH_LABEL* label = static_cast<const SCH_LABEL*>( aItem );
107 wxCHECK( label, retv );
108
109 retv.Printf( _( "Label '%s' at %s, %s" ), UnescapeString( label->GetText() ),
110 aUnitsProvider->MessageTextFromValue( label->GetPosition().x ),
111 aUnitsProvider->MessageTextFromValue( label->GetPosition().y ) );
112 break;
113 }
115 {
116 const SCH_GLOBALLABEL* label = static_cast<const SCH_GLOBALLABEL*>( aItem );
117 wxCHECK( label, retv );
118
119 retv.Printf( _( "Global label '%s' at %s, %s" ), UnescapeString( label->GetText() ),
120 aUnitsProvider->MessageTextFromValue( label->GetPosition().x ),
121 aUnitsProvider->MessageTextFromValue( label->GetPosition().y ) );
122 break;
123 }
124 case SCH_HIER_LABEL_T:
125 {
126 const SCH_HIERLABEL* label = static_cast<const SCH_HIERLABEL*>( aItem );
127 wxCHECK( label, retv );
128
129 retv.Printf( _( "Hierarchical label '%s' at %s, %s" ), UnescapeString( label->GetText() ),
130 aUnitsProvider->MessageTextFromValue( label->GetPosition().x ),
131 aUnitsProvider->MessageTextFromValue( label->GetPosition().y ) );
132 break;
133 }
134 case SCH_JUNCTION_T:
135 {
136 const SCH_JUNCTION* junction = static_cast<const SCH_JUNCTION*>( aItem );
137 wxCHECK( junction, retv );
138
139 retv.Printf( _( "Junction at %s, %s" ),
140 aUnitsProvider->MessageTextFromValue( junction->GetPosition().x ),
141 aUnitsProvider->MessageTextFromValue( junction->GetPosition().y ) );
142 break;
143 }
144 case SCH_NO_CONNECT_T:
145 {
146 const SCH_NO_CONNECT* nc = static_cast<const SCH_NO_CONNECT*>( aItem );
147 wxCHECK( nc, retv );
148
149 retv.Printf( _( "No-Connect at %s, %s" ),
150 aUnitsProvider->MessageTextFromValue( nc->GetPosition().x ),
151 aUnitsProvider->MessageTextFromValue( nc->GetPosition().y ) );
152 break;
153 }
155 {
156 const SCH_BUS_WIRE_ENTRY* entry = static_cast<const SCH_BUS_WIRE_ENTRY*>( aItem );
157 wxCHECK( entry, retv );
158
159 retv.Printf( _( "Bus to wire entry from %s, %s to %s, %s" ),
160 aUnitsProvider->MessageTextFromValue( entry->GetPosition().x ),
161 aUnitsProvider->MessageTextFromValue( entry->GetPosition().y ),
162 aUnitsProvider->MessageTextFromValue( entry->GetEnd().x ),
163 aUnitsProvider->MessageTextFromValue( entry->GetEnd().y ) );
164 break;
165 }
167 {
168 const SCH_BUS_BUS_ENTRY* entry = static_cast<const SCH_BUS_BUS_ENTRY*>( aItem );
169 wxCHECK( entry, retv );
170
171 retv.Printf( _( "Bus to bus entry from %s, %s to %s, %s" ),
172 aUnitsProvider->MessageTextFromValue( entry->GetPosition().x ),
173 aUnitsProvider->MessageTextFromValue( entry->GetPosition().y ),
174 aUnitsProvider->MessageTextFromValue( entry->GetEnd().x ),
175 aUnitsProvider->MessageTextFromValue( entry->GetEnd().y ) );
176 break;
177 }
179 {
180 const SCH_DIRECTIVE_LABEL* entry = static_cast<const SCH_DIRECTIVE_LABEL*>( aItem );
181 wxCHECK( entry, retv );
182
183 retv.Printf( _( "Netclass label '%s' at %s, %s" ), UnescapeString( entry->GetText() ),
184 aUnitsProvider->MessageTextFromValue( entry->GetPosition().x ),
185 aUnitsProvider->MessageTextFromValue( entry->GetPosition().y ) );
186 break;
187 }
188 default:
189 retv.Printf( _( "Unhandled item type %d" ), aItem->Type() );
190 }
191
192 return retv;
193}
194
195
196void SCH_EDIT_FRAME::MakeNetNavigatorNode( const wxString& aNetName, wxTreeItemId aParentId,
197 const NET_NAVIGATOR_ITEM_DATA* aSelection,
198 bool aSingleSheetSchematic )
199{
200 wxCHECK( !aNetName.IsEmpty(), /* void */ );
201 wxCHECK( m_schematic, /* void */ );
202 wxCHECK( m_netNavigator, /* void */ );
203
204 wxTreeItemId expandId = aParentId;
205 CONNECTION_GRAPH* connectionGraph = m_schematic->ConnectionGraph();
206
207 wxCHECK( connectionGraph, /* void */ );
208
209 wxString sheetPathPrefix;
210 const std::vector<CONNECTION_SUBGRAPH*> subgraphs =
211 connectionGraph->GetAllSubgraphs( aNetName );
212
213 for( const CONNECTION_SUBGRAPH* subGraph : subgraphs )
214 {
215 NET_NAVIGATOR_ITEM_DATA* itemData = nullptr;
216 SCH_SHEET_PATH sheetPath = subGraph->GetSheet();
217
218 wxCHECK2( subGraph && sheetPath.Last(), continue );
219
220 if( subGraph->GetItems().empty() )
221 continue;
222
223 itemData = new NET_NAVIGATOR_ITEM_DATA( sheetPath, nullptr );
224
225 bool stripTrailingSeparator = !sheetPath.Last()->IsRootSheet();
226 wxString txt = sheetPath.PathHumanReadable( true, stripTrailingSeparator );
227 wxTreeItemId sheetId = m_netNavigator->AppendItem( aParentId, txt, -1, -1, itemData );
228
229 if( aSelection && *aSelection == *itemData )
230 m_netNavigator->SelectItem( sheetId );
231
232 // If there is only one sheet in the schematic, always expand the sheet tree.
233 if( aSingleSheetSchematic )
234 expandId = sheetId;
235
236 for( const SCH_ITEM* item : subGraph->GetItems() )
237 {
238 KICAD_T type = item->Type();
239
240 if( ( type == SCH_LINE_T ) || ( type == SCH_JUNCTION_T )
241 || ( type == SCH_BUS_WIRE_ENTRY_T ) || ( type == SCH_BUS_BUS_ENTRY_T ) )
242 continue;
243
244 itemData = new NET_NAVIGATOR_ITEM_DATA( sheetPath, item );
245 wxTreeItemId id = m_netNavigator->AppendItem( sheetId,
246 GetNetNavigatorItemText( item, sheetPath,
247 this ),
248 -1, -1, itemData );
249
250 if( aSelection && *aSelection == *itemData )
251 {
252 expandId = sheetId;
253 m_netNavigator->EnsureVisible( id );
254 m_netNavigator->SelectItem( id );
255 }
256 }
257 }
258
259 m_netNavigator->Expand( aParentId );
260}
261
262
264{
265 wxCHECK( m_netNavigator, /* void */ );
266
267 if( !m_netNavigator->IsShown() )
268 return;
269
270 bool singleSheetSchematic = m_schematic->BuildUnorderedSheetList().size() == 1;
271 size_t nodeCnt = 0;
272
273 m_netNavigator->Freeze();
274
275 PROF_TIMER timer;
276
277 if( m_highlightedConn.IsEmpty() )
278 {
279 m_netNavigator->DeleteAllItems();
280
281 // Create a tree of all nets in the schematic.
282 wxTreeItemId rootId = m_netNavigator->AddRoot( _( "Nets" ), 0 );
283
284 const NET_MAP& netMap = m_schematic->ConnectionGraph()->GetNetMap();
285
286 for( const auto& net : netMap )
287 {
288 // Skip bus member subgraphs for the moment.
289 if( net.first.Name.IsEmpty() )
290 continue;
291
292 nodeCnt++;
293 wxTreeItemId netId = m_netNavigator->AppendItem( rootId,
294 UnescapeString( net.first.Name ) );
295 MakeNetNavigatorNode( net.first.Name, netId, aSelection, singleSheetSchematic );
296 }
297
298 m_netNavigator->Expand( rootId );
299 }
300 else if( !m_netNavigator->IsEmpty() )
301 {
302 const wxString shownNetName = m_netNavigator->GetItemText( m_netNavigator->GetRootItem() );
303
304 if( shownNetName != m_highlightedConn )
305 {
306 m_netNavigator->DeleteAllItems();
307
308 nodeCnt++;
309
310 wxTreeItemId rootId = m_netNavigator->AddRoot( UnescapeString( m_highlightedConn ), 0 );
311
312 MakeNetNavigatorNode( m_highlightedConn, rootId, aSelection, singleSheetSchematic );
313 }
314 else
315 {
316 NET_NAVIGATOR_ITEM_DATA* itemData = nullptr;
317
318 wxTreeItemId selection = m_netNavigator->GetSelection();
319
320 if( selection.IsOk() )
321 itemData = dynamic_cast<NET_NAVIGATOR_ITEM_DATA*>( m_netNavigator->GetItemData( selection ) );
322
323 m_netNavigator->DeleteAllItems();
324 nodeCnt++;
325
326 wxTreeItemId rootId = m_netNavigator->AddRoot( UnescapeString( m_highlightedConn ), 0 );
327
328 MakeNetNavigatorNode( m_highlightedConn, rootId, itemData, singleSheetSchematic );
329 }
330 }
331 else
332 {
333 nodeCnt++;
334
335 wxTreeItemId rootId = m_netNavigator->AddRoot( UnescapeString( m_highlightedConn ), 0 );
336
337 MakeNetNavigatorNode( m_highlightedConn, rootId, aSelection, singleSheetSchematic );
338 }
339
340 timer.Stop();
341
342 wxLogTrace( traceUiProfile, wxS( "Adding %zu nodes to net navigator took %s." ),
343 nodeCnt, timer.to_string() );
344
345 m_netNavigator->Thaw();
346}
347
348
350{
351 wxCHECK( m_netNavigator, /* void */ );
352
353 // Maybe in the future we can do something like collapse the tree for an empty selection.
354 // For now, leave the tree selection in its current state.
355 if( !aSelection )
356 return;
357
358 wxTreeItemIdValue sheetCookie;
359 NET_NAVIGATOR_ITEM_DATA* itemData = nullptr;
360 wxTreeItemId rootId = m_netNavigator->GetRootItem();
361 wxTreeItemId sheetId = m_netNavigator->GetFirstChild( rootId, sheetCookie );
362
363 while( sheetId.IsOk() )
364 {
365 if( m_netNavigator->ItemHasChildren( sheetId ) )
366 {
367 wxTreeItemIdValue itemCookie;
368 wxTreeItemId itemId = m_netNavigator->GetFirstChild( sheetId, itemCookie );
369
370 while( itemId.IsOk() )
371 {
372 itemData = dynamic_cast<NET_NAVIGATOR_ITEM_DATA*>( m_netNavigator->GetItemData( itemId ) );
373
374 wxCHECK2( itemData, continue );
375
376 if( *itemData == *aSelection )
377 {
378 if( !m_netNavigator->IsVisible( itemId ) )
379 {
380 m_netNavigator->CollapseAll();
381 m_netNavigator->EnsureVisible( itemId );
382 }
383
384 m_netNavigator->SelectItem( itemId );
385 return;
386 }
387
388 itemId = m_netNavigator->GetNextSibling( itemId );
389 }
390
391 sheetId = m_netNavigator->GetNextSibling( sheetId );
392 }
393 }
394}
395
396
398{
399 if( !m_netNavigator )
400 return nullptr;
401
402 wxTreeItemId id = m_netNavigator->GetSelection();
403
404 if( !id.IsOk() || ( id == m_netNavigator->GetRootItem() ) )
405 return nullptr;
406
407 NET_NAVIGATOR_ITEM_DATA* itemData =
408 dynamic_cast<NET_NAVIGATOR_ITEM_DATA*>( m_netNavigator->GetItemData( id ) );
409
410 wxCHECK( itemData, nullptr );
411
412 return itemData->GetItem();
413}
414
415
417{
418 wxCHECK( m_netNavigator, /* void */ );
419
420 wxTreeItemId id = aEvent.GetItem();
421
422 // Clicking on the root item (net name ) does nothing.
423 if( id == m_netNavigator->GetRootItem() )
424 return;
425
426 NET_NAVIGATOR_ITEM_DATA* itemData =
427 dynamic_cast<NET_NAVIGATOR_ITEM_DATA*>( m_netNavigator->GetItemData( id ) );
428
429 // Just a net name when we have all nets displayed.
430 if( !itemData )
431 return;
432
433 if( GetCurrentSheet() != itemData->GetSheetPath() )
434 {
435 Schematic().SetCurrentSheet( itemData->GetSheetPath() );
437 }
438
439 // Do not focus on item when a sheet tree node is selected.
440 if( m_netNavigator->GetItemParent( id ) != m_netNavigator->GetRootItem()
441 && itemData->GetItem() )
442 {
443 // Make sure we didn't remove the item and/or the screen it resides on before we access it.
444 const SCH_ITEM* item = itemData->GetItem();
445
446 // Don't search for child items in screen r-tree.
447 item = ( ( item->Type() == SCH_SHEET_PIN_T ) || ( item->Type() == SCH_PIN_T ) ) ?
448 static_cast<const SCH_ITEM*>( item->GetParent() ) : item;
449
450 const SCH_SCREEN* screen = itemData->GetSheetPath().LastScreen();
451
452 wxCHECK( screen, /* void */ );
453 wxCHECK( screen->Items().contains( item, true ), /* void */ );
454
455 FocusOnLocation( itemData->GetItem()->GetBoundingBox().Centre() );
456 }
457
458 GetCanvas()->Refresh();
459}
460
461
463{
464 wxCHECK( m_netNavigator, /* void */ );
465
466 aEvent.Skip();
467}
468
469
471{
473
474 wxCHECK( cfg, /* void */ );
475
476 wxAuiPaneInfo& netNavigatorPane = m_auimgr.GetPane( NetNavigatorPaneName() );
477
478 netNavigatorPane.Show( !netNavigatorPane.IsShown() );
480
481 cfg->m_AuiPanels.show_net_nav_panel = netNavigatorPane.IsShown();
482
483 if( netNavigatorPane.IsShown() )
484 {
485 if( netNavigatorPane.IsFloating() )
486 {
487 netNavigatorPane.FloatingSize( cfg->m_AuiPanels.net_nav_panel_float_size );
488 m_auimgr.Update();
489 }
490 else if( cfg->m_AuiPanels.net_nav_panel_docked_size.GetWidth() > 0 )
491 {
492 // SetAuiPaneSize also updates m_auimgr
493 SetAuiPaneSize( m_auimgr, netNavigatorPane,
494 cfg->m_AuiPanels.net_nav_panel_docked_size.GetWidth(), -1 );
495 }
496 }
497 else
498 {
499 NET_NAVIGATOR_ITEM_DATA* itemData = nullptr;
500
501 wxTreeItemId selection = m_netNavigator->GetSelection();
502
503 if( selection.IsOk() )
504 itemData = dynamic_cast<NET_NAVIGATOR_ITEM_DATA*>( m_netNavigator->GetItemData( selection ) );
505
506 RefreshNetNavigator( itemData );
507
508 if( netNavigatorPane.IsFloating() )
509 {
510 cfg->m_AuiPanels.net_nav_panel_float_size = netNavigatorPane.floating_size;
511 }
512 else
513 {
515 }
516
517 m_auimgr.Update();
518 }
519}
520
521
522void SCH_EDIT_FRAME::onResizeNetNavigator( wxSizeEvent& aEvent )
523{
524 aEvent.Skip();
525
526 // Called when resizing the Hierarchy Navigator panel
527 // Store the current pane size
528 // It allows to retrieve the last defined pane size when switching between
529 // docked and floating pane state
530 // Note: *DO NOT* call m_auimgr.Update() here: it crashes Kicad at least on Windows
531
532 EESCHEMA_SETTINGS* cfg = dynamic_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() );
533
534 wxCHECK( cfg, /* void */ );
535
536 wxAuiPaneInfo& netNavigatorPane = m_auimgr.GetPane( NetNavigatorPaneName() );
537
538 if( m_netNavigator->IsShownOnScreen() )
539 {
540 cfg->m_AuiPanels.net_nav_panel_float_size = netNavigatorPane.floating_size;
541
542 // initialize net_nav_panel_docked_width and best size only if the netNavigatorPane
543 // width is > 0 (i.e. if its size is already set and has meaning)
544 // if it is floating, its size is not initialized (only floating_size is initialized)
545 // initializing netNavigatorPane.best_size is useful when switching to float pane and
546 // after switching to the docked pane, to retrieve the last docked pane width
547 if( netNavigatorPane.rect.width > 50 ) // 50 is a good margin
548 {
549 cfg->m_AuiPanels.net_nav_panel_docked_size.SetWidth( netNavigatorPane.rect.width );
550 netNavigatorPane.best_size.x = netNavigatorPane.rect.width;
551 }
552 }
553}
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
Vec Centre() const
Definition: box2.h:87
Calculate the connectivity of a schematic and generates netlists.
const NET_MAP & GetNetMap() const
const std::vector< CONNECTION_SUBGRAPH * > GetAllSubgraphs(const wxString &aNetName) const
A subgraph is a set of items that are electrically connected on a single sheet.
wxAuiManager m_auimgr
void FocusOnLocation(const VECTOR2I &aPos)
Useful to focus on a particular location, in find functions.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
Definition: eda_item.cpp:74
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:101
EDA_ITEM * GetParent() const
Definition: eda_item.h:103
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:94
bool contains(const SCH_ITEM *aItem, bool aRobust=false) const
Determine if a given item exists in the tree.
Definition: sch_rtree.h:125
APP_SETTINGS_BASE * KifaceSettings() const
Definition: kiface_base.h:95
Tree view item data for the net navigator.
const SCH_ITEM * GetItem() const
SCH_SHEET_PATH & GetSheetPath()
A small class to help profiling.
Definition: profile.h:49
void Stop()
Save the time when this function was called, and set the counter stane to stop.
Definition: profile.h:88
std::string to_string()
Definition: profile.h:155
CONNECTION_GRAPH * ConnectionGraph() const override
Definition: schematic.h:154
SCH_SHEET_LIST BuildUnorderedSheetList() const
Definition: schematic.h:101
void SetCurrentSheet(const SCH_SHEET_PATH &aPath) override
Definition: schematic.h:149
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
EESCHEMA_SETTINGS * eeconfig() const
Class for a bus to bus entry.
VECTOR2I GetPosition() const override
VECTOR2I GetEnd() const
Class for a wire to bus entry.
wxTreeCtrl * m_netNavigator
void ToggleNetNavigator()
void onResizeNetNavigator(wxSizeEvent &aEvent)
void updateSelectionFilterVisbility() override
Selection filter panel doesn't have a dedicated visibility control, so show it if any other AUI panel...
void onNetNavigatorSelChanging(wxTreeEvent &aEvent)
void MakeNetNavigatorNode(const wxString &aNetName, wxTreeItemId aParentId, const NET_NAVIGATOR_ITEM_DATA *aSelection, bool aSingleSheetSchematic)
SCHEMATIC * m_schematic
The currently loaded schematic.
SCH_SHEET_PATH & GetCurrentSheet() const
const SCH_ITEM * GetSelectedNetNavigatorItem() const
SCHEMATIC & Schematic() const
void RefreshNetNavigator(const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
void DisplayCurrentSheet()
Draw the current sheet on the display.
void SelectNetNavigatorItem(const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
wxString m_highlightedConn
The highlighted net or bus or empty string.
static const wxString NetNavigatorPaneName()
void onNetNavigatorSelection(wxTreeEvent &aEvent)
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:166
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition: sch_item.h:281
VECTOR2I GetPosition() const override
Definition: sch_junction.h:107
Segment description base class to describe items which have 2 end points (track, wire,...
Definition: sch_line.h:41
VECTOR2I GetEndPoint() const
Definition: sch_line.h:141
VECTOR2I GetStartPoint() const
Definition: sch_line.h:136
VECTOR2I GetPosition() const override
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
Definition: sch_screen.h:108
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
const SCH_SHEET * GetSheet(unsigned aIndex) const
wxString PathHumanReadable(bool aUseShortRootName=true, bool aStripTrailingSeparator=false) const
Return the sheet path in a human readable form made from the sheet names.
SCH_SCREEN * LastScreen()
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Definition: sch_sheet_pin.h:66
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition: sch_sheet.h:57
bool IsRootSheet() const
Definition: sch_sheet.cpp:204
wxString GetName() const
Definition: sch_sheet.h:107
VECTOR2I GetPosition() const override
Definition: sch_text.h:141
A base class for LIB_SYMBOL and SCH_SYMBOL.
Definition: symbol.h:34
virtual const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const =0
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
std::unordered_map< NET_NAME_CODE_CACHE_KEY, std::vector< CONNECTION_SUBGRAPH * > > NET_MAP
Associate a #NET_CODE_NAME with all the subgraphs in that net.
#define _(s)
const wxChar *const traceUiProfile
Flag to enable user interface profile tracing.
@ LAYER_WIRE
Definition: layer_ids.h:357
@ LAYER_BUS
Definition: layer_ids.h:358
static wxString GetNetNavigatorItemText(const SCH_ITEM *aItem, const SCH_SHEET_PATH &aSheetPath, UNITS_PROVIDER *aUnitsProvider)
wxString UnescapeString(const wxString &aSource)
wxLogTrace helper definitions.
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:78
@ SCH_LINE_T
Definition: typeinfo.h:163
@ SCH_NO_CONNECT_T
Definition: typeinfo.h:160
@ SCH_DIRECTIVE_LABEL_T
Definition: typeinfo.h:171
@ SCH_LABEL_T
Definition: typeinfo.h:167
@ SCH_HIER_LABEL_T
Definition: typeinfo.h:169
@ SCH_BUS_BUS_ENTRY_T
Definition: typeinfo.h:162
@ SCH_SHEET_PIN_T
Definition: typeinfo.h:173
@ SCH_BUS_WIRE_ENTRY_T
Definition: typeinfo.h:161
@ SCH_GLOBAL_LABEL_T
Definition: typeinfo.h:168
@ SCH_JUNCTION_T
Definition: typeinfo.h:159
@ SCH_PIN_T
Definition: typeinfo.h:153
void SetAuiPaneSize(wxAuiManager &aManager, wxAuiPaneInfo &aPane, int aWidth, int aHeight)
Sets the size of an AUI pane, working around http://trac.wxwidgets.org/ticket/13180.