60 default:
return wxT(
"unknown column" );
88 return wxT(
"bad wxWidgets!" );
105 wxFAIL_MSG( wxString::Format( wxT(
"column %d doesn't hold a bool value" ), aCol ) );
124 rowData.
label = aValue;
128 wxFAIL_MSG( wxString::Format( wxT(
"column %d doesn't hold a string value" ), aCol ) );
131 GetView()->Refresh();
147 wxFAIL_MSG( wxString::Format( wxT(
"column %d doesn't hold a bool value" ), aCol ) );
153 bool aShow,
bool aGroupBy )
157 if( wxGrid*
grid = GetView() )
159 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, 1 );
160 grid->ProcessTableMessage( msg );
171 if( wxGrid*
grid = GetView() )
173 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, aRow, 1 );
174 grid->ProcessTableMessage( msg );
181 wxCHECK( aRow >= 0 && aRow <
GetNumberRows(), wxEmptyString );
195 rowData.
name = aName;
204 bool aAddedByUser,
const std::set<wxString>& aVariantNames )
210 m_cols.push_back( { aFieldName, aLabel, aAddedByUser,
false,
false } );
218 const wxString& aFieldName,
219 const std::set<wxString>& aVariantNames )
234 if( field->IsPrivate() )
242 for(
const wxString& variantName : aVariantNames )
246 if( !variant || !variant->m_Fields.contains( aFieldName ) )
249 if( value.IsEmpty() )
251 value = variant->m_Fields[aFieldName];
255 if( value != variant->m_Fields[aFieldName] )
299 node.key() = newName;
304 m_cols[aCol].m_fieldName = newName;
305 m_cols[aCol].m_label = newName;
311 for(
size_t i = 0; i <
m_cols.size(); i++ )
313 if(
m_cols[i].m_fieldName == aFieldName )
314 return static_cast<int>( i );
323 std::vector<BOM_FIELD> fields;
326 fields.push_back( { col.m_fieldName, col.m_label, col.m_show, col.m_group } );
334 size_t foundCount = 0;
336 for(
const wxString& newField : aNewOrder )
338 if( foundCount >=
m_cols.size() )
343 if( col.m_fieldName == newField )
345 std::swap(
m_cols[foundCount], col );
357 for(
int col = 0; col < aCol; ++col )
391 const wxString& refDelimiter,
392 const wxString& refRangeDelimiter,
394 bool listMixedValues )
396 std::vector<SCH_REFERENCE> references;
397 std::set<wxString> mixedValues;
404 references.push_back( ref );
423 else if( refFieldValue.Contains( wxT(
"${" ) ) )
427 std::function<bool( wxString* )> symbolResolver =
428 [&]( wxString* token ) ->
bool
433 refFieldValue =
ExpandTextVars( refFieldValue, & symbolResolver );
437 if( listMixedValues )
438 mixedValues.insert( refFieldValue );
439 else if( &ref == &
group.m_Refs.front() )
440 fieldValue = refFieldValue;
441 else if( fieldValue != refFieldValue )
446 if( listMixedValues )
448 fieldValue = wxEmptyString;
450 for(
const wxString& value : mixedValues )
452 if( value.IsEmpty() )
454 else if( fieldValue.IsEmpty() )
457 fieldValue +=
"," + value;
464 std::sort( references.begin(), references.end(),
467 wxString l_ref( l.GetRef() << l.GetRefNumber() );
468 wxString r_ref( r.GetRef() << r.GetRefNumber() );
469 return StrNumCmp( l_ref, r_ref, true ) < 0;
472 auto logicalEnd = std::unique( references.begin(), references.end(),
477 if( l.GetRefNumber() == wxT(
"?" ) )
480 wxString l_ref( l.GetRef() << l.GetRefNumber() );
481 wxString r_ref( r.GetRef() << r.GetRefNumber() );
482 return l_ref == r_ref;
485 references.erase( logicalEnd, references.end() );
491 fieldValue = wxString::Format( wxT(
"%d" ), (
int) references.size() );
493 fieldValue = wxString::Format( wxT(
"%d" ),
group.m_ItemNumber );
501 wxCHECK_RET( aCol >= 0 && aCol <
static_cast<int>(
m_cols.size() ), wxS(
"Invalid column number" ) );
513 bool isSharedInstance =
false;
522 screen =
static_cast<const SCH_SCREEN*
>( symbol->GetParent() );
524 isSharedInstance = ( screen && ( screen->
GetRefCount() > 1 ) );
525 sharedSymbol = symbol;
538 if( row.m_ItemNumber == aRow + 1 )
558 wxCHECK( aCol >= 0 && aCol <
static_cast<int>(
m_cols.size() ),
false );
565 wxCHECK( aCol >= 0 && aCol <
static_cast<int>(
m_cols.size() ),
false );
572 wxCHECK( aCol >= 0 && aCol <
static_cast<int>(
m_cols.size() ),
false );
579 wxCHECK( aCol >= 0 && aCol <
static_cast<int>(
m_cols.size() ),
false );
586 wxCHECK( aCol >= 0 && aCol <
static_cast<int>(
m_cols.size() ),
false );
597 if( lhGroup.
m_Refs.size() == 0 )
599 else if( rhGroup.
m_Refs.size() == 0 )
605 [ ascending ](
const auto a,
const auto b )
617 wxString lhs = dataModel->
GetValue( lhGroup, sortCol ).Trim(
true ).Trim(
false );
618 wxString rhs = dataModel->
GetValue( rhGroup, sortCol ).Trim(
true ).Trim(
false );
622 wxString lhRef = lhGroup.
m_Refs[0].GetRef() + lhGroup.
m_Refs[0].GetRefNumber();
623 wxString rhRef = rhGroup.
m_Refs[0].GetRef() + rhGroup.
m_Refs[0].GetRefNumber();
624 return local_cmp(
StrNumCmp( lhRef, rhRef,
true ), 0 );
641 std::sort( row.m_Refs.begin(), row.m_Refs.end(),
644 wxString lhs_ref( lhs.GetRef() << lhs.GetRefNumber() );
645 wxString rhs_ref( rhs.GetRef() << rhs.GetRefNumber() );
646 return StrNumCmp( lhs_ref, rhs_ref, true ) < 0;
653 return cmp( lhs, rhs, this, m_sortColumn, m_sortAscending );
661 row.m_ItemNumber = itemNumber++;
681 bool matchFound =
false;
688 if(
m_cols[refCol].m_group )
701 for(
size_t i = 0; i <
m_cols.size(); ++i )
704 if(
static_cast<int>( i ) == refCol )
735 wxString fieldName =
m_cols[i].m_fieldName;
748 const wxString& aFieldName )
755 return wxEmptyString;
767 std::function<bool( wxString* )> symbolResolver =
768 [&]( wxString* token ) ->
bool
776 return wxEmptyString;
782 return aFieldName == wxS(
"${DNP}" )
783 || aFieldName == wxS(
"${EXCLUDE_FROM_BOARD}" )
784 || aFieldName == wxS(
"${EXCLUDE_FROM_BOM}" )
785 || aFieldName == wxS(
"${EXCLUDE_FROM_SIM}" );
790 const std::set<wxString>& aVariantNames )
794 auto getAttrString = [&](
const wxString aVariantName = wxEmptyString )->wxString
796 if( aAttributeName == wxS(
"${DNP}" ) )
797 return aSymbol.
GetDNP(
nullptr, aVariantName ) ? wxS(
"1" ) : wxS(
"0" );
799 if( aAttributeName == wxS(
"${EXCLUDE_FROM_BOARD}" ) )
802 if( aAttributeName == wxS(
"${EXCLUDE_FROM_BOM}" ) )
805 if( aAttributeName == wxS(
"${EXCLUDE_FROM_SIM}" ) )
811 if( aVariantNames.empty() )
813 retv = getAttrString();
817 for(
const wxString& variantName : aVariantNames )
821 retv = getAttrString( variantName );
825 if( retv != getAttrString( variantName ) )
835 const wxString& aAttributeName,
836 const wxString& aValue,
837 const wxString& aVariantName )
842 bool attrChanged =
false;
843 bool newValue = aValue == wxS(
"1" );
845 if( aAttributeName == wxS(
"${DNP}" ) )
847 attrChanged = aSymbol.
GetDNP(
nullptr, aVariantName ) != newValue;
848 aSymbol.
SetDNP( newValue,
nullptr, aVariantName );
850 else if( aAttributeName == wxS(
"${EXCLUDE_FROM_BOARD}" ) )
855 else if( aAttributeName == wxS(
"${EXCLUDE_FROM_BOM}" ) )
860 else if( aAttributeName == wxS(
"${EXCLUDE_FROM_SIM}" ) )
891 static_cast<WX_GRID*
>( GetView() )->CommitPendingChanges(
true );
893 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, 0,
m_rows.size() );
894 GetView()->ProcessTableMessage( msg );
923 || (
m_scope == SCOPE::SCOPE_SHEET_RECURSIVE
929 bool matchFound =
false;
947 row.m_Refs.push_back( ref );
953 row.m_Refs.push_back( ref );
965 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED,
m_rows.size() );
966 GetView()->ProcessTableMessage( msg );
975 std::vector<DATA_MODEL_ROW> children;
979 bool matchFound =
false;
989 child.m_Refs.push_back( ref );
998 if( children.size() < 2 )
1001 std::sort( children.begin(), children.end(),
1004 return cmp( lhs, rhs, this, m_sortColumn, m_sortAscending );
1008 m_rows.insert(
m_rows.begin() + aRow + 1, children.begin(), children.end() );
1010 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_INSERTED, aRow, children.size() );
1011 GetView()->ProcessTableMessage( msg );
1017 auto firstChild =
m_rows.begin() + aRow + 1;
1018 auto afterLastChild = firstChild;
1021 while( afterLastChild !=
m_rows.end() && afterLastChild->m_Flag == CHILD_ITEM )
1028 m_rows.erase( firstChild, afterLastChild );
1030 wxGridTableMessage msg(
this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, aRow + 1, deleted );
1031 GetView()->ProcessTableMessage( msg );
1048 for(
size_t i = 0; i <
m_rows.size(); ++i )
1061 for(
size_t i = 0; i <
m_rows.size(); ++i )
1070 std::set<wxString>& aVariantNames )
1072 bool symbolModified =
false;
1073 std::unique_ptr<SCH_SYMBOL> symbolCopy;
1084 symbolCopy = std::make_unique<SCH_SYMBOL>( *symbol );
1087 const std::map<wxString, wxString>& fieldStore =
m_dataStore[key];
1089 for(
const auto& [srcName, srcValue] : fieldStore )
1094 if( aVariantNames.empty() )
1100 for(
const wxString&
name : aVariantNames )
1118 if( destField && destField->
IsPrivate() )
1120 if( srcValue.IsEmpty() )
1127 bool userAdded = ( col != -1 &&
m_cols[col].m_userAdded );
1130 bool createField = !destField && ( !srcValue.IsEmpty() || userAdded );
1138 destField->
SetVisible( srcTemplate->m_Visible );
1143 symbolModified =
true;
1153 wxString previousValue = destField->
GetText();
1155 if( aVariantNames.empty() )
1161 for(
const wxString& variantName : aVariantNames )
1170 newVariant.
m_Fields[srcName] = srcValue;
1172 symbolModified |=
true;
1174 else if( !variant->m_Fields.contains( srcName )
1175 || ( variant->m_Fields[srcName] != srcValue ) )
1177 variant->m_Fields[srcName] = srcValue;
1179 symbolModified |=
true;
1184 if( !createField && ( previousValue != srcValue ) )
1185 symbolModified =
true;
1188 for(
int ii =
static_cast<int>( symbol->
GetFields().size() ) - 1; ii >= 0; ii-- )
1193 if( fieldStore.count( symbol->
GetFields()[ii].GetName() ) == 0 )
1196 symbolModified =
true;
1200 if( symbolModified && ( symbol != nextSymbol ) )
1204 if( symbol != nextSymbol )
1207 symbolCopy = std::make_unique<SCH_SYMBOL>( *nextSymbol );
1209 symbolCopy.reset(
nullptr );
1211 symbolModified =
false;
1232 for(
unsigned symbolRef = 0; symbolRef <
m_symbolsList.GetCount(); ++symbolRef )
1247 const std::set<wxString>& aVariantNames )
1250 for(
size_t i = 0; i <
m_cols.size(); i++ )
1256 std::set<wxString> seen;
1257 std::vector<wxString> order;
1263 if( !field.
name || seen.count( field.
name ) )
1266 seen.insert( field.
name );
1267 order.emplace_back( field.
name );
1337 for(
size_t col = 0; col <
m_cols.size(); col++ )
1340 last_col =
static_cast<int>( col );
1344 if( last_col == -1 )
1348 [&]( wxString field,
bool last ) -> wxString
1352 field.Replace( wxS(
"\r" ), wxS(
"" ) );
1353 field.Replace( wxS(
"\n" ), wxS(
"" ) );
1358 field.Replace( wxS(
"\t" ), wxS(
"" ) );
1372 for(
size_t col = 0; col <
m_cols.size(); col++ )
1374 if( !
m_cols[col].m_show )
1377 out.Append( formatField(
m_cols[col].m_label, col ==
static_cast<size_t>( last_col ) ) );
1381 for(
size_t row = 0; row <
m_rows.size(); row++ )
1384 if(
GetRowFlags(
static_cast<int>( row ) ) == CHILD_ITEM )
1387 for(
size_t col = 0; col <
m_cols.size(); col++ )
1389 if( !
m_cols[col].m_show )
1393 out.Append( formatField(
GetExportValue(
static_cast<int>( row ),
static_cast<int>( col ),
1395 col ==
static_cast<size_t>( last_col ) ) );
1405 bool refListChanged =
false;
1420 if( !field.IsPrivate() )
1422 wxString
name = field.GetCanonicalName();
1429 refListChanged =
true;
1433 if( refListChanged )
1447 std::vector<KIID_PATH> keysToRemove;
1451 if( !key.empty() && ( key.back() == symbolUuid ) )
1452 keysToRemove.push_back( key );
1455 for(
const KIID_PATH& key : keysToRemove )
1462 return ref.GetSymbol()->m_Uuid == aSymbol.m_Uuid;
1472 int index =
m_symbolsList.FindRefByFullPath( ref.GetFullPath() );
1485 const std::set<wxString>& aVariantNames )
1487 bool refListChanged =
false;
1500 refListChanged =
true;
1504 if( refListChanged )
COMMIT & Modified(EDA_ITEM *aItem, EDA_ITEM *aCopy, BASE_SCREEN *aScreen=nullptr)
Create an undo entry for an item that has been already modified.
bool Find(const wxString &aTerm, int &aMatchersTriggered, int &aPosition)
Look in all existing matchers, return the earliest match of any of the existing.
const EDA_ANGLE & GetTextAngle() const
virtual const wxString & GetText() const
Return the string associated with the text object.
void SetTextPos(const VECTOR2I &aPoint)
virtual void SetVisible(bool aVisible)
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
int GetFieldNameCol(const wxString &aFieldName) const
wxString GetColFieldName(int aCol)
void ApplyBomPreset(const BOM_PRESET &preset, const std::set< wxString > &aVariantNames)
std::vector< DATA_MODEL_ROW > m_rows
wxString getAttributeValue(const SCH_SYMBOL &, const wxString &aAttributeName, const std::set< wxString > &aVariantNames)
void SetFieldsOrder(const std::vector< wxString > &aNewOrder)
void UpdateReferences(const SCH_REFERENCE_LIST &aRefs, const std::set< wxString > &aVariantNames)
SCH_REFERENCE_LIST m_symbolsList
The flattened by hierarchy list of symbols.
void SetGroupingEnabled(bool group)
bool ColIsItemNumber(int aCol)
int GetNumberCols() override
bool ColIsQuantity(int aCol)
bool groupMatch(const SCH_REFERENCE &lhRef, const SCH_REFERENCE &rhRef)
wxGridCellAttr * m_urlEditor
BOM_PRESET GetBomSettings()
void ApplyData(SCH_COMMIT &aCommit, TEMPLATES &aTemplateFieldnames, std::set< wxString > &aVariantNames)
bool unitMatch(const SCH_REFERENCE &lhRef, const SCH_REFERENCE &rhRef)
bool ColIsReference(int aCol)
wxString GetExportValue(int aRow, int aCol, const wxString &refDelimiter, const wxString &refRangeDelimiter)
bool GetGroupingEnabled()
void AddColumn(const wxString &aFieldName, const wxString &aLabel, bool aAddedByUser, const std::set< wxString > &aVariantNames)
int GetNumberRows() override
void CollapseRow(int aRow)
wxString getFieldShownText(const SCH_REFERENCE &aRef, const wxString &aFieldName)
void RenameColumn(int aCol, const wxString &newName)
FIELDS_EDITOR_GRID_DATA_MODEL(const SCH_REFERENCE_LIST &aSymbolsList, wxGridCellAttr *aURLEditor)
bool IsExpanderColumn(int aCol) const override
wxString Export(const BOM_FMT_PRESET &settings)
std::vector< DATA_MODEL_COL > m_cols
void SetSorting(int aCol, bool ascending)
void ExpandCollapseRow(int aRow)
wxGridCellAttr * GetAttr(int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind) override
void SetFilter(const wxString &aFilter)
bool setAttributeValue(SCH_SYMBOL &aSymbol, const wxString &aAttributeName, const wxString &aValue, const wxString &aVariantName=wxEmptyString)
Set the attribute value.
static bool cmp(const DATA_MODEL_ROW &lhGroup, const DATA_MODEL_ROW &rhGroup, FIELDS_EDITOR_GRID_DATA_MODEL *dataModel, int sortCol, bool ascending)
static const wxString ITEM_NUMBER_VARIABLE
void SetIncludeExcludedFromBOM(bool include)
bool isAttribute(const wxString &aFieldName)
wxString GetValue(int aRow, int aCol) override
int GetDataWidth(int aCol)
void updateDataStoreSymbolField(const SCH_REFERENCE &aSymbolRef, const wxString &aFieldName, const std::set< wxString > &aVariantNames)
void RemoveColumn(int aCol)
GROUP_TYPE GetRowFlags(int aRow)
const wxString & GetFilter()
static const wxString QUANTITY_VARIABLE
bool ColIsValue(int aCol)
void SetGroupColumn(int aCol, bool group)
void SetExcludeDNP(bool exclude)
void RemoveSymbol(const SCH_SYMBOL &aSymbol)
std::vector< BOM_FIELD > GetFieldsOrdered()
void SetValue(int aRow, int aCol, const wxString &aValue) override
std::map< KIID_PATH, std::map< wxString, wxString > > m_dataStore
bool ColIsAttribute(int aCol)
void SetColLabelValue(int aCol, const wxString &aLabel) override
void RemoveReferences(const SCH_REFERENCE_LIST &aRefs)
bool GetIncludeExcludedFromBOM()
void SetShowColumn(int aCol, bool show)
void AddReferences(const SCH_REFERENCE_LIST &aRefs)
wxString ConvertKIIDsToRefs(const wxString &aSource) const
wxString ConvertRefsToKIIDs(const wxString &aSource) const
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
void SetText(const wxString &aText) override
void SetPrivate(bool aPrivate)
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
static wxString Shorthand(std::vector< SCH_REFERENCE > aList, const wxString &refDelimiter, const wxString &refRangeDelimiter)
Return a shorthand string representing all the references in the list.
A helper to define a symbol's reference designator in a schematic.
const SCH_SHEET_PATH & GetSheetPath() const
SCH_SYMBOL * GetSymbol() const
wxString GetFullRef(bool aIncludeUnit=true) const
Return reference name with unit altogether.
wxString GetRefNumber() const
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
bool GetExcludedFromBOM() const
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
bool IsContainedWithin(const SCH_SHEET_PATH &aSheetPathToTest) const
Check if this path is contained inside aSheetPathToTest.
Variant information for a schematic symbol.
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
virtual void SetDNP(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
void SetExcludedFromSim(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from simulation flag.
std::optional< SCH_SYMBOL_VARIANT > GetVariant(const SCH_SHEET_PATH &aInstance, const wxString &aVariantName) const
bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
VECTOR2I GetPosition() const override
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the symbol.
void AddVariant(const SCH_SHEET_PATH &aInstance, const SCH_SYMBOL_VARIANT &aVariant)
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
void SetExcludedFromBOM(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from schematic bill of materials flag.
virtual bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flag.
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
void SetExcludedFromBoard(bool aExcludeFromBoard) override
Set or clear exclude from board netlist flag.
bool GetExcludedFromBoard() const override
const TEMPLATE_FIELDNAME * GetFieldName(const wxString &aName)
Search for aName in the template field name list.
std::map< wxString, wxString > m_Fields
void SetValueAsBool(int aRow, int aCol, bool aValue) override
wxString GetCanonicalFieldName(int aRow)
wxString GetColLabelValue(int aCol) override
std::vector< BOM_FIELD > m_fields
void SetValue(int aRow, int aCol, const wxString &aValue) override
int GetNumberRows() override
void AppendRow(const wxString &aFieldName, const wxString &aBOMName, bool aShow, bool aGroupBy)
bool GetValueAsBool(int aRow, int aCol) override
void SetCanonicalFieldName(int aRow, const wxString &aName)
wxString GetValue(int aRow, int aCol) override
wxGridCellAttr * enhanceAttr(wxGridCellAttr *aInputAttr, int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind)
wxString ExpandTextVars(const wxString &aSource, const PROJECT *aProject, int aFlags)
bool IsGeneratedField(const wxString &aSource)
Returns true if the string is generated, e.g contains a single text var reference.
static wxString multipleValues
static KIID_PATH makeDataStoreKey(const SCH_SHEET_PATH &aSheetPath, const SCH_SYMBOL &aSymbol)
Create a unique key for the data store by combining the KIID_PATH from the SCH_SHEET_PATH with the sy...
#define DISPLAY_NAME_COLUMN
#define SHOW_FIELD_COLUMN
KICOMMON_API wxSize GetTextSize(const wxString &aSingleLine, wxWindow *aWindow)
Return the size of aSingleLine of text when it is rendered in aWindow using whatever font is currentl...
int StrNumCmp(const wxString &aString1, const wxString &aString2, bool aIgnoreCase)
Compare two strings with alphanumerical content.
int ValueStringCompare(const wxString &strFWord, const wxString &strSWord)
Compare strings like the strcmp function but handle numbers and modifiers within the string text corr...
bool IsURL(wxString aStr)
Performs a URL sniff-test on a string.
wxString refRangeDelimiter
std::vector< BOM_FIELD > fieldsOrdered
bool includeExcludedFromBOM
std::vector< SCH_REFERENCE > m_Refs
Hold a name of a symbol's field, field value, and default visibility.
wxString GetDefaultFieldName(FIELD_T aFieldId, bool aTranslateForHI)
Return a default symbol field name for a mandatory field type.
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
@ USER
The field ID hasn't been set yet; field is invalid.
@ DATASHEET
name of datasheet
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
wxString GetCanonicalFieldName(FIELD_T aFieldType)
#define INDETERMINATE_STATE
Used for holding indeterminate values, such as with multiple selections holding different values or c...
GROUP_COLLAPSED_DURING_SORT