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++ )
 
 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)
 
wxGridCellAttr * GetAttr(int aRow, int aCol, wxGridCellAttr::wxAttrKind aKind) override
 
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