22#include <wx/tokenzr.h>
53 const wxString& aSearchText )
61 if( !aSearchHierarchy )
62 sheetList.push_back(
m_frame->GetCurrentSheet() );
64 sheetList =
m_frame->Schematic().Hierarchy();
80 found = ( *aPath ==
path );
84 found = ( aReference && aReference->CmpNoCase( candidate->
GetRef( &sheet ) ) == 0 );
90 sheetWithSymbolFound = &sheet;
100 m_frame->Schematic().GetCurrentVariant() );
105 int unit =
pin->GetLibPin()->GetUnit();
107 if( unit != 0 && unit != symbol->
GetUnit() )
134 if( *sheetWithSymbolFound !=
m_frame->GetCurrentSheet() )
137 sheetWithSymbolFound );
152 m_frame->FocusOnItem( symbol );
161 displayRef = *aReference;
170 msg.Printf(
_(
"%s pin %s found" ), displayRef, aSearchText );
172 msg.Printf(
_(
"%s found but pin %s not found" ), displayRef, aSearchText );
176 msg.Printf(
_(
"%s found" ), displayRef );
181 msg.Printf(
_(
"%s not found" ), displayRef );
185 m_frame->GetCanvas()->Refresh();
219 strncpy( line, cmdline,
sizeof( line ) - 1 );
220 line[
sizeof( line ) - 1 ] =
'\0';
222 char* idcmd = strtok( line,
" \n\r" );
223 char*
text = strtok(
nullptr,
"\"\n\r" );
225 if( idcmd ==
nullptr )
230 if( strcmp( idcmd,
"$CONFIG" ) == 0 )
235 else if( strcmp( idcmd,
"$ERC" ) == 0 )
240 else if( strcmp( idcmd,
"$NET:" ) == 0 )
247 if(
auto sg =
Schematic().ConnectionGraph()->FindFirstSubgraphByName( netName ) )
265 SetStatusText(
_(
"Highlighted net:" ) + wxS(
" " ) +
UnescapeString( netName ) );
268 else if( strcmp( idcmd,
"$CLEAR:" ) == 0 )
277 if(
text ==
nullptr )
280 if( strcmp( idcmd,
"$PART:" ) != 0 )
286 idcmd = strtok(
nullptr,
" \n\r" );
288 if( idcmd ==
nullptr )
295 text = strtok(
nullptr,
"\"\n\r" );
297 if(
text ==
nullptr )
302 if( strcmp( idcmd,
"$REF:" ) == 0 )
308 else if( strcmp( idcmd,
"$VAL:" ) == 0 )
314 else if( strcmp( idcmd,
"$PAD:" ) == 0 )
327 std::vector<wxString> parts;
331 switch( item->Type() )
348 parts.push_back( wxT(
"S" ) + full_path );
379 std::string command =
"$SELECT: 0,";
381 for( wxString part : parts )
408 std::string packet = fmt::format(
"$NET: \"{}\"",
TO_UTF8( aNetName ) );
410 if( !packet.empty() )
435 if( aConnection->
IsNet() )
441 if( aConnection->
Members().empty() )
446 wxString nets = all_members[0]->Name();
448 if( all_members.size() == 1 )
458 for(
size_t i = 1; i < all_members.size(); i++ )
459 nets <<
"," << all_members[i]->Name();
461 std::string packet = fmt::format(
"$NETS: \"{}\"",
TO_UTF8( nets ) );
463 if( !packet.empty() )
480 std::string packet =
"$CLEAR\n";
497 std::unordered_map<wxString, std::vector<SCH_REFERENCE>>& aSyncSymMap,
498 std::unordered_map<wxString, std::unordered_map<wxString, SCH_PIN*>>& aSyncPinMap,
499 const wxString& aVariantName = wxEmptyString,
bool aRecursive =
false )
509 findSymbolsAndPins( aSchematicSheetList, candidate, aSyncSymMap, aSyncPinMap, aVariantName, aRecursive );
517 for(
unsigned ii = 0; ii < references.
GetCount(); ii++ )
526 wxString fullRef = schRef.
GetRef() + refNum;
529 if( fullRef.StartsWith( wxS(
"#" ) ) )
533 if( refNum.compare( wxS(
"?" ) ) == 0 )
537 auto symMatchIt = aSyncSymMap.find( fullRef );
539 if( symMatchIt != aSyncSymMap.end() )
541 symMatchIt->second.emplace_back( schRef );
548 auto symPinMatchIt = aSyncPinMap.find( fullRef );
550 if( symPinMatchIt != aSyncPinMap.end() )
552 std::unordered_map<wxString, SCH_PIN*>& pinMap = symPinMatchIt->second;
553 std::vector<SCH_PIN*> pinsOnSheet = symbol->
GetPins( &aSheetPath );
557 int pinUnit =
pin->GetLibPin()->GetUnit();
559 if( pinUnit > 0 && pinUnit != schRef.
GetUnit() )
564 for(
const wxString&
pad :
567 auto pinIt = pinMap.find(
pad );
569 if( pinIt != pinMap.end() )
585 std::unordered_map<wxString, std::vector<SCH_REFERENCE>>& aSyncSymMap,
586 std::unordered_map<wxString, std::unordered_map<wxString, SCH_PIN*>>& aSyncPinMap,
587 std::unordered_map<SCH_SHEET_PATH, bool>& aCache )
589 auto cacheIt = aCache.find( aSheetPath );
591 if( cacheIt != aCache.end() )
592 return cacheIt->second;
601 aSyncPinMap, aCache );
605 aCache.emplace( aSheetPath,
false );
615 aCache.emplace( aSheetPath,
false );
619 for(
unsigned ii = 0; ii < references.
GetCount(); ii++ )
627 wxString fullRef = schRef.
GetRef() + refNum;
630 if( fullRef.StartsWith( wxS(
"#" ) ) )
634 if( refNum.compare( wxS(
"?" ) ) == 0 )
637 if( aSyncSymMap.find( fullRef ) == aSyncSymMap.end() )
639 aCache.emplace( aSheetPath,
false );
643 if( aSyncPinMap.find( fullRef ) != aSyncPinMap.end() )
645 aCache.emplace( aSheetPath,
false );
650 aCache.emplace( aSheetPath,
true );
655std::optional<std::tuple<SCH_SHEET_PATH, SCH_ITEM*, std::vector<SCH_ITEM*>>>
659 wxArrayString syncArray = wxStringTokenize( aSyncStr, wxS(
"," ) );
661 std::unordered_map<wxString, std::vector<SCH_REFERENCE>> syncSymMap;
662 std::unordered_map<wxString, std::unordered_map<wxString, SCH_PIN*>> syncPinMap;
663 std::unordered_map<SCH_SHEET_PATH, double> symScores;
664 std::unordered_map<SCH_SHEET_PATH, bool> fullyWantedCache;
666 std::optional<wxString> focusSymbol;
667 std::optional<std::pair<wxString, wxString>> focusPin;
668 std::unordered_map<SCH_SHEET_PATH, std::vector<SCH_ITEM*>> focusItemResults;
673 std::vector<SCH_SHEET_PATH> orderedSheets;
674 orderedSheets.reserve( allSheetsList.size() );
680 orderedSheets.push_back( sheetPath );
684 for(
size_t i = 0; i < syncArray.size(); i++ )
686 wxString syncEntry = syncArray[i];
688 if( syncEntry.empty() )
691 wxString syncData = syncEntry.substr( 1 );
693 switch( syncEntry.GetChar( 0 ).GetValue() )
699 if( aFocusOnFirst && ( i == 0 ) )
700 focusSymbol = symRef;
702 syncSymMap[symRef] = std::vector<SCH_REFERENCE>();
711 if( aFocusOnFirst && ( i == 0 ) )
712 focusPin = std::make_pair( symRef, padNum );
714 syncPinMap[symRef][padNum] =
nullptr;
724 auto flattenSyncMaps =
725 [&syncSymMap, &syncPinMap]() -> std::vector<SCH_ITEM*>
727 std::vector<SCH_ITEM*> allVec;
729 for(
const auto& [symRef, symbols] : syncSymMap )
732 allVec.push_back( ref.GetSymbol() );
735 for(
const auto& [symRef, pinMap] : syncPinMap )
737 for(
const auto& [padNum,
pin] : pinMap )
740 allVec.push_back(
pin );
748 [&syncSymMap, &syncPinMap]()
750 for(
auto& [symRef, symbols] : syncSymMap )
753 for(
auto& [reference, pins] : syncPinMap )
755 for(
auto& [number,
pin] : pins )
760 auto syncMapsValuesEmpty =
761 [&syncSymMap, &syncPinMap]() ->
bool
763 for(
const auto& [symRef, symbols] : syncSymMap )
765 if( symbols.size() > 0 )
769 for(
const auto& [symRef, pins] : syncPinMap )
771 for(
const auto& [padNum,
pin] : pins )
781 auto checkFocusItems =
786 auto findIt = syncSymMap.find( *focusSymbol );
788 if( findIt != syncSymMap.end() )
790 if( findIt->second.size() > 0 )
791 focusItemResults[aSheet].push_back( findIt->second.front().GetSymbol() );
796 auto findIt = syncPinMap.find( focusPin->first );
798 if( findIt != syncPinMap.end() )
800 if( findIt->second[focusPin->second] )
801 focusItemResults[aSheet].push_back( findIt->second[focusPin->second] );
806 auto makeRetForSheet =
813 std::vector<SCH_ITEM*> itemsVector = flattenSyncMaps();
819 kiidPath.push_back( item->m_Uuid );
821 std::optional<SCH_SHEET_PATH> subsheetPath =
828 syncPinMap, fullyWantedCache ) )
830 itemsVector.push_back( item );
834 return std::make_tuple( aSheet, aFocusItem, itemsVector );
845 checkFocusItems( sheetPath );
848 if( focusItemResults.size() > 0 )
852 const std::vector<SCH_ITEM*>& items = focusItemResults[sheetPath];
855 return makeRetForSheet( sheetPath, items.front() );
867 if( !syncMapsValuesEmpty() )
870 return makeRetForSheet( sheetPath,
nullptr );
887 std::stringstream ss( payload );
895 wxCHECK_RET( optTable.has_value(),
"Could not load symbol lib table." );
901 std::string srcProjDir;
902 std::getline( ss, srcProjDir,
'\n' );
904 std::vector<wxString> toLoad;
906 while( std::getline( ss, file,
'\n' ) )
911 wxFileName fn( file );
915 if( type == SCH_IO_MGR::SCH_FILE_UNKNOWN )
917 wxLogTrace(
"KIWAY",
"Unknown file type: %s", fn.GetFullPath() );
921 pi.reset( SCH_IO_MGR::FindPlugin( type ) );
923 wxString libTableUri;
924 bool isProjectLocal = fn.GetFullPath().StartsWith( wxString( srcProjDir ) );
930 if( !fn.FileExists() )
933 wxFileName projectFn( projectPath, fn.GetFullName() );
935 if( fn.GetFullPath() != projectFn.GetFullPath() && !projectFn.FileExists() )
936 wxCopyFile( fn.GetFullPath(), projectFn.GetFullPath() );
938 libTableUri = wxS(
"${KIPRJMOD}/" ) + fn.GetFullName();
943 libTableUri = fn.GetFullPath();
946 if( !
table->HasRow( fn.GetName() ) )
950 row.
SetURI( libTableUri );
952 toLoad.emplace_back( fn.GetName() );
956 if( !toLoad.empty() )
960 table->Save().map_error(
963 wxLogError( wxT(
"Error saving project library table:\n\n" ) + aError.
message );
972 std::ranges::for_each( toLoad,
973 [adapter](
const wxString& aNick )
992 if( !
eeconfig()->m_CrossProbing.on_selection )
1006 std::string prefix =
"$SELECT: ";
1008 std::string paramStr = payload.substr( prefix.size() );
1011 if( paramStr.size() < 2 )
1014 std::string syncStr = paramStr.substr( 2 );
1016 bool focusOnFirst = ( paramStr[0] ==
'1' );
1018 std::optional<std::tuple<SCH_SHEET_PATH, SCH_ITEM*, std::vector<SCH_ITEM*>>> findRet =
1023 auto& [sheetPath, focusItem, items] = *findRet;
1032 if(
eeconfig()->m_CrossProbing.flash_selection )
1034 wxLogTrace(
traceCrossProbeFlash,
"MAIL_SELECTION(_FORCE): flash enabled, items=%zu", items.size() );
1041 std::vector<SCH_ITEM*> itemPtrs;
1042 std::copy( items.begin(), items.end(), std::back_inserter( itemPtrs ) );
1058 if( !payload.empty() )
1060 wxString annotationMessage( payload );
1063 bool userCancelled =
false;
1091 KIID uuid( payload );
1097 payload =
static_cast<SCH_SHEET*
>( item )->GetShownName(
false );
1099 payload =
static_cast<SCH_SYMBOL*
>( item )->GetRef( &
path,
true );
1101 payload = item->GetFriendlyName();
1131 std::stringstream ss( payload );
1134 std::string formatStr;
1135 wxCHECK( std::getline( ss, formatStr, delim ), );
1137 std::string fnameStr;
1138 wxCHECK( std::getline( ss, fnameStr, delim ), );
1144 importFormat = std::stoi( formatStr );
1146 catch( std::invalid_argument& )
1152 std::map<std::string, UTF8> props;
1156 std::string key, value;
1158 if( !std::getline( ss, key, delim ) )
1161 std::getline( ss, value, delim );
1163 props.emplace( key, value );
1167 if( importFormat >= 0 )
1168 importFile( fnameStr, importFormat, props.empty() ?
nullptr : &props );
1175 payload =
"success";
1197 if( !errors.IsEmpty() )
1198 statusBar->AddWarningMessages(
"load", errors );
1206 wxString targetFile( payload );
1212 if( screen && screen->
GetFileName() == targetFile )
1215 payload =
"success";
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
static TOOL_ACTION showSymbolLibTable
static TOOL_ACTION updateSchematicFromPcb
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
CROSS_PROBING_SETTINGS m_CrossProbing
Calculate the connectivity of a schematic and generates netlists.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
A base class for most all the KiCad significant classes used in schematics and boards.
EE_TYPE OfType(KICAD_T aType) const
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
void UpdateAllItems(int aUpdateFlags)
Update all items in the view according to the given flags.
wxString AsString() const
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
std::string & GetPayload()
Return the payload, which can be any text but it typically self identifying s-expression.
MAIL_T Command()
Returns the MAIL_T associated with this mail.
virtual void ExpressMail(FRAME_T aDestination, MAIL_T aCommand, std::string &aPayload, wxWindow *aSource=nullptr, bool aFromOtherThread=false)
Send aPayload to aDestination from aSource.
wxString GetLibraryLoadErrors() const
Returns all library load errors as newline-separated strings for display.
std::optional< LIBRARY_TABLE * > Table(LIBRARY_TABLE_TYPE aType, LIBRARY_TABLE_SCOPE aScope)
Retrieves a given table; creating a new empty project table if a valid project is loaded and the give...
void AbortAsyncLoads()
Abort any async library loading operations in progress.
void LoadProjectTables(std::initializer_list< LIBRARY_TABLE_TYPE > aTablesToLoad={})
(Re)loads the project library tables in the given list, or all tables if no list is given
void SetNickname(const wxString &aNickname)
void SetType(const wxString &aType)
void SetURI(const wxString &aUri)
void SetKiway(KIWAY *aKiway)
Generate the KiCad netlist format supported by Pcbnew.
void Format(OUTPUTFORMATTER *aOutputFormatter, int aCtl)
Output this s-expression netlist into aOutputFormatter.
virtual LIBRARY_MANAGER & GetLibraryManager() const
static SYMBOL_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
virtual const wxString GetProjectPath() const
Return the full path of the project.
Holds all the data relating to one schematic.
SCH_SHEET_LIST Hierarchy() const
Return the full schematic flattened hierarchical sheet list.
wxString GetCurrentVariant() const
Return the current variant being edited.
SCH_SHEET_PATH & CurrentSheet() const
static TOOL_ACTION runERC
Inspection and Editing.
static TOOL_ACTION changeSheet
static TOOL_ACTION updateNetHighlighting
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void SyncView()
Mark all items for refresh.
EESCHEMA_SETTINGS * eeconfig() const
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
const std::vector< std::shared_ptr< SCH_CONNECTION > > AllMembers() const
wxString Name(bool aIgnoreSheet=false) const
const std::vector< std::shared_ptr< SCH_CONNECTION > > & Members() const
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void AssignFootprints(const std::string &aChangedSetOfReferences)
SCH_ITEM * FindSymbolAndItem(const wxString *aPath, const wxString *aReference, bool aSearchHierarchy, SCH_SEARCH_T aSearchType, const wxString &aSearchText)
Find a symbol in the schematic and an item in this symbol and select it.
bool m_syncingPcbToSchSelection
friend class SCH_EDITOR_CONTROL
void SendSelectItemsToPcb(const std::vector< EDA_ITEM * > &aItems, bool aForce)
Send items to board editor for selection.
bool ReadyToNetlist(const wxString &aAnnotateMessage, bool *aUserCancelled=nullptr)
Check if we are ready to write a netlist file for the current schematic.
void SendCrossProbeClearHighlight()
Tell Pcbnew to clear the existing highlighted net, if one exists.
SCHEMATIC * m_schematic
The currently loaded schematic.
SCH_SHEET_PATH & GetCurrentSheet() const
void RecalculateConnections(SCH_COMMIT *aCommit, SCH_CLEANUP_FLAGS aCleanupFlags, PROGRESS_REPORTER *aProgressReporter=nullptr)
Generate the connection data for the entire schematic hierarchy.
SCHEMATIC & Schematic() const
void ExecuteRemoteCommand(const char *cmdline) override
Execute a remote command sent via a socket on port KICAD_SCH_PORT_SERVICE_NUMBER (which defaults to 4...
void RefreshNetNavigator(const NET_NAVIGATOR_ITEM_DATA *aSelection=nullptr)
SCH_DESIGN_BLOCK_PANE * m_designBlocksPane
bool importFile(const wxString &aFileName, int aFileType, const std::map< std::string, UTF8 > *aProperties=nullptr)
Load the given filename but sets the path to the current project path.
void SendCrossProbeNetName(const wxString &aNetName)
Send a net name to Pcbnew for highlighting.
void KiwayMailIn(KIWAY_MAIL_EVENT &aEvent) override
Receive #KIWAY_ROUTED_EVENT messages from other players.
void StartCrossProbeFlash(const std::vector< SCH_ITEM * > &aItems)
void SetHighlightedNetChain(const wxString &aNetChain)
wxString m_highlightedConn
The highlighted net or bus or empty string.
void SetCrossProbeConnection(const SCH_CONNECTION *aConnection)
Send a connection (net or bus) to Pcbnew for highlighting.
void TestDanglingEnds()
Test all of the connectable objects in the schematic for unused connection points.
bool SaveProject(bool aSaveAs=false)
Save the currently-open schematic (including its hierarchy) and associated project.
virtual const wxString & GetText() const override
Return the string associated with the text object.
static const wxString ShowType(SCH_FILE_T aFileType)
Return a brief name for a plugin, given aFileType enum.
static SCH_FILE_T GuessPluginTypeFromLibPath(const wxString &aLibPath, int aCtl=0)
Return a plugin type given a symbol library using the file extension of aLibPath.
Base class for any item which can be embedded within the SCHEMATIC container class,...
A net chain is a collection of nets that are connected together through passive components.
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
A helper to define a symbol's reference designator in a schematic.
void Split()
Attempt to split the reference designator into a name (U) and number (1).
bool IsSplitNeeded()
Determine if this reference needs to be split or if it likely already has been.
SCH_SYMBOL * GetSymbol() const
wxString GetRefNumber() const
EE_RTREE & Items()
Get the full RTree, usually for iterating.
const wxString & GetFileName() const
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
std::optional< SCH_SHEET_PATH > GetSheetPathByKIIDPath(const KIID_PATH &aPath, bool aIncludeLastSheet=true) const
Finds a SCH_SHEET_PATH that matches the provided KIID_PATH.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
void GetSymbols(SCH_REFERENCE_LIST &aReferences, SYMBOL_FILTER aSymbolFilter, bool aForceIncludeOrphanSymbols=false) const
Adds SCH_REFERENCE object to aReferences for each symbol in the sheet.
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
SCH_SCREEN * LastScreen()
bool IsContainedWithin(const SCH_SHEET_PATH &aSheetPathToTest) const
Check if this path is contained inside aSheetPathToTest.
wxString PathAsString() const
Return the path of time stamps which do not changes even when editing sheet parameters.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
std::vector< const SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
SCH_PIN * GetPinByEffectivePadNumber(const wxString &aPadNumber, const SCH_SHEET_PATH *aSheet, const wxString &aVariantName=wxEmptyString) const
Find the pin whose effective footprint pad number (issue #2282) is aPadNumber on aSheet,...
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
SCH_PIN * GetPin(const wxString &number) const
Find a symbol pin by number.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
An interface to the global shared library manager that is schematic-specific and linked to one projec...
std::optional< LIB_STATUS > LoadOne(LIB_DATA *aLib) override
Loads or reloads the given library, if it exists.
A base class for LIB_SYMBOL and SCH_SYMBOL.
virtual const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const =0
bool SendCommand(int aService, const std::string &aMessage)
Used by a client to sent (by a socket connection) a data to a server.
std::optional< std::tuple< SCH_SHEET_PATH, SCH_ITEM *, std::vector< SCH_ITEM * > > > findItemsFromSyncSelection(const SCHEMATIC &aSchematic, const std::string aSyncStr, bool aFocusOnFirst)
bool findSymbolsAndPins(const SCH_SHEET_LIST &aSchematicSheetList, const SCH_SHEET_PATH &aSheetPath, std::unordered_map< wxString, std::vector< SCH_REFERENCE > > &aSyncSymMap, std::unordered_map< wxString, std::unordered_map< wxString, SCH_PIN * > > &aSyncPinMap, const wxString &aVariantName=wxEmptyString, bool aRecursive=false)
bool sheetContainsOnlyWantedItems(const SCH_SHEET_LIST &aSchematicSheetList, const SCH_SHEET_PATH &aSheetPath, std::unordered_map< wxString, std::vector< SCH_REFERENCE > > &aSyncSymMap, std::unordered_map< wxString, std::unordered_map< wxString, SCH_PIN * > > &aSyncPinMap, std::unordered_map< SCH_SHEET_PATH, bool > &aCache)
@ FRAME_SCH_SYMBOL_EDITOR
const wxChar *const traceCrossProbeFlash
Flag to enable debug output for cross-probe flash operations.
std::unique_ptr< T > IO_RELEASER
Helper to hold and release an IO_BASE object when exceptions are thrown.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
@ MAIL_SCH_NAVIGATE_TO_SHEET
#define MAIL_SCH_GET_NETLIST_CANCELLED
Reply payload for MAIL_SCH_GET_NETLIST when the user deliberately aborts netlist generation (for exam...
@ ALL
All except INITIAL_ADD.
PGM_BASE & Pgm()
The global program "get" accessor.
SCH_SEARCH_T
Schematic search type used by the socket link with Pcbnew.
@ SYMBOL_FILTER_NON_POWER
KIWAY Kiway(KFCTL_STANDALONE)
std::vector< wxString > ExpandStackedPinNotation(const wxString &aPinName, bool *aValid)
Expand stacked pin notation like [1,2,3], [1-4], [A1-A4], or [AA1-AA3,AB4,CD12-CD14] into individual ...
wxString UnescapeString(const wxString &aSource)
wxString From_UTF8(const char *cstring)
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
bool on_selection
Synchronize the selection for multiple items too.
bool zoom_to_fit
Zoom to fit items (ignored if center_on_items is off).
bool center_on_items
Automatically pan to cross-probed items.
bool auto_highlight
Automatically turn on highlight mode in the target frame.
@ REFERENCE
Field Reference of part, i.e. "IC21".
const SHAPE_LINE_CHAIN chain
wxLogTrace helper definitions.