42#include <wx/filedlg.h>
43#include <fmt/format.h>
48#include <wx/filedlg.h>
53#define FORCE_REFRESH_FROM_MODEL true
56bool equivalent( SIM_MODEL::DEVICE_T a, SIM_MODEL::DEVICE_T b )
67 std::vector<SCH_FIELD>& aFields ) :
85 if constexpr (std::is_same_v<T, SCH_SYMBOL>)
91 if(
EMBEDDED_FILES* symbolEmbeddedFiles = aSymbol.GetEmbeddedFiles() )
93 m_filesStack.push_back( symbolEmbeddedFiles );
95 if constexpr (std::is_same_v<T, SCH_SYMBOL>)
97 SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( &aSymbol );
98 symbol->GetLibSymbolRef()->AppendParentEmbeddedFiles( m_filesStack );
100 else if constexpr (std::is_same_v<T, LIB_SYMBOL>)
107 m_libraryModelsMgr.SetFilesStack( m_filesStack );
108 m_builtinModelsMgr.SetFilesStack( m_filesStack );
113 if( !pin->GetParentSymbol()->IsMultiBodyStyle() || pin->GetBodyStyle() < 2 )
114 m_sortedPartPins.push_back( pin );
117 std::sort( m_sortedPartPins.begin(), m_sortedPartPins.end(),
121 return StrNumCmp( lhs->GetNumber(), rhs->GetNumber(), true ) < 0;
124 m_waveformChoice->Clear();
125 m_deviceChoice->Clear();
126 m_deviceSubtypeChoice->Clear();
128 m_scintillaTricksCode =
new SCINTILLA_TRICKS( m_codePreview, wxT(
"{}" ),
false );
129 m_scintillaTricksSubckt =
new SCINTILLA_TRICKS( m_subckt, wxT(
"()" ),
false );
133 wxPropertyGrid*
grid = m_paramGrid->GetGrid();
134 grid->SetCellDisabledTextColour( wxSystemSettings::GetColour( wxSYS_COLOUR_GRAYTEXT ) );
138 grid->DedicateKey( WXK_RETURN );
139 grid->DedicateKey( WXK_NUMPAD_ENTER );
140 grid->DedicateKey( WXK_UP );
141 grid->DedicateKey( WXK_DOWN );
143#if wxCHECK_VERSION( 3, 3, 0 )
144 grid->AddActionTrigger( wxPGKeyboardAction::Edit, WXK_RETURN );
145 grid->AddActionTrigger( wxPGKeyboardAction::NextProperty, WXK_RETURN );
146 grid->AddActionTrigger( wxPGKeyboardAction::Edit, WXK_NUMPAD_ENTER );
147 grid->AddActionTrigger( wxPGKeyboardAction::NextProperty, WXK_NUMPAD_ENTER );
149 grid->AddActionTrigger( wxPG_ACTION_EDIT, WXK_RETURN );
150 grid->AddActionTrigger( wxPG_ACTION_NEXT_PROPERTY, WXK_RETURN );
151 grid->AddActionTrigger( wxPG_ACTION_EDIT, WXK_NUMPAD_ENTER );
152 grid->AddActionTrigger( wxPG_ACTION_NEXT_PROPERTY, WXK_NUMPAD_ENTER );
155 m_pinAssignmentsGrid->ClearRows();
156 m_pinAssignmentsGrid->PushEventHandler(
new GRID_TRICKS( m_pinAssignmentsGrid ) );
159 finishDialogSettings();
168 for( wxPropertyGridIterator it =
m_paramGrid->GetIterator(); !it.AtEnd(); ++it )
185 wxCommandEvent dummyEvent;
188 wxString modelParams;
190 bool storeInValue =
false;
196 &deviceType, &modelType, &modelParams, &pinMap ) )
200 if( !modelType.IsEmpty() )
215 wxFileName tmp( libraryFilename );
217 if( !tmp.GetFullName().IsEmpty() )
241 if( modelIdx == wxNOT_FOUND )
243 m_infoBar->ShowMessage( wxString::Format(
_(
"No model named '%s' in library." ),
274 for(
const std::pair<std::string, std::string>& strs : ibismodel->
GetIbisPins() )
280 ibismodel->
ChangePin( *ibisLibrary, strs.first );
287 if( i <
static_cast<int>( ibismodel->
GetIbisPins().size() ) )
321 for( SIM_MODEL::TYPE type : SIM_MODEL::TYPE_ITERATOR() )
346 curModel().SetIsStoredInValue(
true );
351 return DIALOG_SIM_MODEL_BASE::TransferDataToWindow();
361 if( !
m_paramGrid->GetGrid()->CommitChangesFromEditor() )
364 if( !DIALOG_SIM_MODEL_BASE::TransferDataFromWindow() )
374 wxFileName fn(
path );
377 && !fn.GetFullPath().StartsWith(
".." ) )
379 path = fn.GetFullPath();
406 std::string differential;
409 pins = ibismodel->GetIbisPins().at(
m_pinCombobox->GetSelection() ).first;
420 if(
model.GetType() == SIM_MODEL::TYPE::RAWSPICE )
425 wxString code =
m_codePreview->GetText().Trim(
true ).Trim(
false );
426 model.SetParamValue(
"model", std::string( code.ToUTF8() ) );
437 std::string( symbolPinName.ToUTF8() ) );
493 SendSizeEvent( wxSEND_EVENT_POST );
517 for( SIM_MODEL::TYPE type : { SIM_MODEL::TYPE::KIBIS_DEVICE,
518 SIM_MODEL::TYPE::KIBIS_DRIVER_DC,
519 SIM_MODEL::TYPE::KIBIS_DRIVER_RECT,
520 SIM_MODEL::TYPE::KIBIS_DRIVER_PRBS } )
530 if( type == aModel->
GetType() )
553 for( SIM_MODEL::DEVICE_T deviceType : SIM_MODEL::DEVICE_T_ITERATOR() )
564 for( SIM_MODEL::TYPE type : SIM_MODEL::TYPE_ITERATOR() )
566 if( type == SIM_MODEL::TYPE::KIBIS_DEVICE
567 || type == SIM_MODEL::TYPE::KIBIS_DRIVER_DC
568 || type == SIM_MODEL::TYPE::KIBIS_DRIVER_RECT
569 || type == SIM_MODEL::TYPE::KIBIS_DRIVER_PRBS )
582 if( type == aModel->
GetType() )
639 m_paramGrid->Append(
new wxPropertyCategory(
"AC" ) );
642 m_paramGrid->Append(
new wxPropertyCategory(
"DC" ) );
645 m_paramGrid->Append(
new wxPropertyCategory(
"S-Parameters" ) );
648 m_paramGrid->Append(
new wxPropertyCategory(
"Capacitance" ) );
651 m_paramGrid->Append(
new wxPropertyCategory(
"Temperature" ) );
654 m_paramGrid->Append(
new wxPropertyCategory(
"Noise" ) );
657 m_paramGrid->Append(
new wxPropertyCategory(
"Distributed Quantities" ) );
658 m_paramGrid->HideProperty(
"Distributed Quantities" );
660 m_paramGrid->Append(
new wxPropertyCategory(
"Waveform" ) );
663 m_paramGrid->Append(
new wxPropertyCategory(
"Limiting Values" ) );
666 m_paramGrid->Append(
new wxPropertyCategory(
"Advanced" ) );
669 m_paramGrid->Append(
new wxPropertyCategory(
"Flags" ) );
686 for( wxPropertyGridIterator it =
m_paramGrid->GetIterator(); !it.AtEnd(); ++it )
688 wxColour bgCol =
m_paramGrid->GetGrid()->GetPropertyDefaultCell().GetBgCol();
689 wxColour fgCol =
m_paramGrid->GetGrid()->GetPropertyDefaultCell().GetFgCol();
693 ( *it )->GetCell( col ).SetBgCol( bgCol );
694 ( *it )->GetCell( col ).SetFgCol( fgCol );
708 ( *it )->SetValueFromString( param.
value );
749 aForceRefreshFromModel =
true;
752 if( aForceRefreshFromModel )
759 for(
int modelPinIndex = 0; modelPinIndex < aModel->
GetPinCount(); ++modelPinIndex )
763 if( symbolPinNumber ==
"" )
768 if( symbolPinRow == -1 )
779 std::vector<BITMAPS> modelPinIcons;
780 wxArrayString modelPinChoices;
782 for(
int jj = 0; jj < aModel->
GetPinCount(); ++jj )
793 modelPinChoices.Add(
_(
"Not Connected" ) );
802 if( modelPinIndex >= 0 )
808 if( aModel->
GetType() == SIM_MODEL::TYPE::SUBCKT )
854 wxArrayString emptyArray;
867 for(
const auto& [baseModelName, baseModel] :
library()->GetModels() )
869 if( baseModelName == modelName )
877 wxArrayString modelNames;
879 bool modelNameExists =
false;
882 modelNames.Add(
name );
885 if(
name == modelName )
886 modelNameExists =
true;
894 if( !modelNameExists )
896 m_infoBar->ShowMessage( wxString::Format(
_(
"No model named '%s' in '%s'." ),
904 wxArrayString emptyArray;
941 case CATEGORY::S_PARAM:
942 m_paramGrid->HideProperty(
"S-Parameters",
false );
946 case CATEGORY::CAPACITANCE:
951 case CATEGORY::TEMPERATURE:
956 case CATEGORY::NOISE:
961 case CATEGORY::DISTRIBUTED_QUANTITIES:
962 m_paramGrid->HideProperty(
"Distributed Quantities",
false );
966 case CATEGORY::WAVEFORM:
971 case CATEGORY::GEOMETRY:
976 case CATEGORY::LIMITING_VALUES:
977 m_paramGrid->HideProperty(
"Limiting Values",
false );
981 case CATEGORY::ADVANCED:
986 case CATEGORY::FLAGS:
995 case CATEGORY::INITIAL_CONDITIONS:
996 case CATEGORY::SUPERFLUOUS:
1002template <
typename T>
1006 wxString paramDescription;
1009 paramDescription = wxString::Format(
"%s", param.
info.
name );
1013 wxPGProperty* prop =
nullptr;
1020 prop->SetAttribute( wxPG_BOOL_USE_CHECKBOX,
true );
1042 wxArrayString inductors;
1053 if( item.model->GetDeviceType() == SIM_MODEL::DEVICE_T::L )
1054 inductors.push_back( item.refName );
1058 [](
const wxString& a,
const wxString& b ) ->
int
1064 if( inductors.empty() )
1082 wxArrayString values;
1085 values.Add(
string );
1093 prop =
new wxStringProperty( paramDescription, param.
info.
name );
1097 prop->SetAttribute( wxPG_ATTR_UNITS, wxString::FromUTF8( param.
info.
unit.c_str() ) );
1123template <
typename T>
1126 for(
int row = 0; row < static_cast<int>(
m_sortedPartPins.size() ); ++row )
1130 if(
pin->GetNumber() == aSymbolPinNumber )
1138template <
typename T>
1163template <
typename T>
1173template <
typename T>
1182 pinNumber =
pin->GetShownNumber();
1183 pinName =
pin->GetShownName();
1186 if( !pinName.IsEmpty() && pinName != pinNumber )
1187 pinNumber += wxString::Format( wxT(
" (\"%s\")" ), pinName );
1193template <
typename T>
1196 wxString modelPinName;
1198 if( aModelPinIndex >= 0 && aModelPinIndex < aModel->GetPinCount() )
1201 wxString modelPinNumber = wxString::Format(
"%d", aModelPinIndex + 1 );
1203 if( !modelPinName.IsEmpty() && modelPinName != modelPinNumber )
1204 modelPinNumber += wxString::Format( wxT(
" (\"%s\")" ), modelPinName );
1206 return modelPinNumber;
1210template <
typename T>
1213 if( aModelPinString ==
"Not Connected" )
1216 int length = aModelPinString.Find(
" " );
1218 if( length == wxNOT_FOUND )
1219 length =
static_cast<int>( aModelPinString.Length() );
1222 aModelPinString.Mid( 0, length ).ToCLong( &
result );
1224 return static_cast<int>(
result - 1 );
1228template <
typename T>
1236template <
typename T>
1243template <
typename T>
1260template <
typename T>
1270 wxCommandEvent
dummy;
1278template <
typename T>
1281 static wxString s_mruPath;
1284 wxFileDialog dlg(
this,
_(
"Browse Models" ),
path );
1287 dlg.SetCustomizeHook( customize );
1289 if( dlg.ShowModal() == wxID_CANCEL )
1294 path = dlg.GetPath();
1295 wxFileName fn(
path );
1296 s_mruPath = fn.GetPath();
1303 else if( fn.MakeRelativeTo(
Prj().GetProjectPath() ) && !fn.GetFullPath().StartsWith( wxS(
".." ) ) )
1305 path = fn.GetFullPath();
1319template <
typename T>
1324 switch( aKeyStroke.GetKeyCode() )
1327 if( sel == wxNOT_FOUND )
1335 if( sel == wxNOT_FOUND )
1343 wxPostEvent(
this, wxCommandEvent( wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ) );
1356template <
typename T>
1362 wxArrayString modelNames;
1368 wxString wx_name(
name );
1370 if( wx_name.Matches(
filter ) )
1371 modelNames.Add( wx_name );
1387template <
typename T>
1392 wxArrayString pinLabels;
1395 wxCHECK2( modelkibis,
return );
1397 for( std::pair<wxString, wxString> strs : modelkibis->
GetIbisPins() )
1398 pinLabels.Add( strs.first + wxT(
" - " ) + strs.second );
1402 wxArrayString emptyArray;
1411 wxArrayString lines = wxSplit( fallback->GetSpiceCode(),
'\n' );
1414 for(
const wxString& line : lines )
1416 if( !line.StartsWith(
'*' ) )
1418 if( !code.IsEmpty() )
1425 m_infoBar->ShowMessage( wxString::Format(
_(
"Failed to parse:\n\n"
1427 "Using generic SPICE model." ),
1439template <
typename T>
1442 wxArrayString modelLabels;
1446 std::vector<std::pair<std::string, std::string>> strs = ibisModel.
GetIbisPins();
1447 std::string pinNumber = strs.at(
m_pinCombobox->GetSelection() ).first;
1451 ibisModel.
ChangePin( *ibisLibrary, pinNumber );
1456 modelLabels.Add( modelName );
1469template <
typename T>
1478template <
typename T>
1485template <
typename T>
1492template <
typename T>
1498 modelibis->SwitchSingleEndedDiff( diff );
1505template <
typename T>
1510 for( SIM_MODEL::DEVICE_T deviceType : SIM_MODEL::DEVICE_T_ITERATOR() )
1523template <
typename T>
1526 SIM_MODEL::DEVICE_T deviceType =
curModel().GetDeviceType();
1529 for( SIM_MODEL::TYPE type : { SIM_MODEL::TYPE::KIBIS_DEVICE,
1530 SIM_MODEL::TYPE::KIBIS_DRIVER_DC,
1531 SIM_MODEL::TYPE::KIBIS_DRIVER_RECT,
1532 SIM_MODEL::TYPE::KIBIS_DRIVER_PRBS } )
1545 m_libraryModelsMgr.SetModel( idx, std::make_unique<SIM_MODEL_IBIS>( type, baseModel ) );
1566template <
typename T>
1569 SIM_MODEL::DEVICE_T deviceType =
curModel().GetDeviceType();
1572 for( SIM_MODEL::TYPE type : SIM_MODEL::TYPE_ITERATOR() )
1587template <
typename T>
1594template <
typename T>
1597 int symbolPinIndex = aEvent.GetRow();
1598 wxString oldModelPinName = aEvent.GetString();
1599 wxString modelPinName =
m_pinAssignmentsGrid->GetCellValue( aEvent.GetRow(), aEvent.GetCol() );
1605 curModel().AssignSymbolPinNumberToModelPin( oldModelPinIndex,
"" );
1620template <
typename T>
1633template <
typename T>
1640 wxPGProperty* selected =
grid->GetSelection();
1643 selected =
grid->wxPropertyGridInterface::GetFirst();
1645#if wxCHECK_VERSION( 3, 3, 0 )
1647 grid->DoSelectProperty( selected, wxPGSelectPropertyFlags::Focus );
1650 grid->DoSelectProperty( selected, wxPG_SEL_FOCUS );
1657template <
typename T>
1663 if(
grid->GetSelection() &&
grid->GetSelection()->IsCategory() )
1665 wxPGProperty* selection =
grid->GetSelection();
1670 wxPropertyGridIterator it =
grid->GetIterator( wxPG_ITERATE_VISIBLE, selection );
1673 wxKeyEvent* keyEvent =
new wxKeyEvent( wxEVT_KEY_DOWN );
1677 if( !selection->IsExpanded() )
1679 grid->Expand( selection );
1680 keyEvent->m_keyCode = WXK_DOWN;
1681 wxQueueEvent(
grid, keyEvent );
1689 keyEvent->m_keyCode = WXK_UP;
1690 wxQueueEvent(
grid, keyEvent );
1695 if( !selection->IsExpanded() )
1696 grid->Expand( selection );
1698 keyEvent->m_keyCode = WXK_DOWN;
1699 wxQueueEvent(
grid, keyEvent );
1706 wxWindow* editorControl =
grid->GetEditorControl();
1708 if( !editorControl )
1715 editorControl->SetFocus();
1720template <
typename T>
1732 wxTextCtrl* ctrl =
grid->GetEditorTextCtrl();
1736 wxRect ctrlRect = ctrl->GetScreenRect();
1737 wxRect gridRect =
grid->GetScreenRect();
1739 if( ctrlRect.GetTop() < gridRect.GetTop() || ctrlRect.GetBottom() > gridRect.GetBottom() )
1740 grid->ClearSelection();
1746template <
typename T>
1759 std::vector<int> colWidths;
1761 for(
size_t ii = 0; ii <
grid->GetColumnCount(); ii++ )
1764 colWidths.push_back(
grid->GetState()->GetColumnWidth( ii ) + margin + indent );
1766 colWidths.push_back( std::max( 72,
grid->GetState()->GetColumnWidth( ii ) ) + margin );
1768 colWidths.push_back( 60 + margin );
1770 aWidth -= colWidths[ ii ];
1773 for(
size_t ii = 0; ii <
grid->GetColumnCount(); ii++ )
1774 grid->SetColumnProportion( ii, colWidths[ ii ] );
1776 grid->ResetColumnSizes();
1777 grid->RefreshEditor();
1782template <
typename T>
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
wxNotebook * m_modelNotebook
wxStaticText * m_subcktLabel
wxStaticText * m_modelNameLabel
wxPropertyGridManager * m_paramGridMgr
wxStaticText * m_pathLabel
wxRadioButton * m_rbBuiltinModel
wxListBox * m_modelListBox
wxComboBox * m_pinCombobox
DIALOG_SIM_MODEL_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Simulation Model Editor"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
wxChoice * m_deviceSubtypeChoice
wxSearchCtrl * m_modelFilter
wxStaticText * m_waveformLabel
wxTextCtrl * m_libraryPathText
wxStaticText * m_pinLabel
wxChoice * m_deviceChoice
wxComboBox * m_pinModelCombobox
wxRadioButton * m_rbLibraryModel
wxChoice * m_waveformChoice
wxStaticText * m_deviceLabel
WX_GRID * m_pinAssignmentsGrid
wxStaticText * m_pinModelLabel
wxPanel * m_parametersPanel
wxStaticText * m_deviceSubtypeLabel
wxCheckBox * m_saveInValueCheckbox
STD_BITMAP_BUTTON * m_browseButton
wxStyledTextCtrl * m_subckt
wxPropertyGridPage * m_paramGrid
wxPanel * m_pinAssignmentsPanel
wxCheckBox * m_differentialCheckbox
wxStyledTextCtrl * m_codePreview
const SIM_MODEL * m_prevModel
void onTypeChoice(wxCommandEvent &aEvent) override
void onLibraryPathTextKillFocus(wxFocusEvent &aEvent) override
wxString getSymbolPinString(int aSymbolPinNumber) const
void updateBuiltinModelWidgets(SIM_MODEL *aModel)
void onPinAssignmentsGridCellChange(wxGridEvent &aEvent) override
void onFilterCharHook(wxKeyEvent &aKeyStroke) override
int findSymbolPinRow(const wxString &aSymbolPinNumber) const
void onModelNameChoice(wxCommandEvent &aEvent) override
void onRadioButton(wxCommandEvent &aEvent) override
SCINTILLA_TRICKS * m_scintillaTricksSubckt
bool loadLibrary(const wxString &aLibraryPath, REPORTER &aReporter, bool aForceReload=false)
SIM_LIB_MGR m_builtinModelsMgr
int getModelPinIndex(const wxString &aModelPinString) const
void onModelFilter(wxCommandEvent &aEvent) override
void onLibraryPathText(wxCommandEvent &aEvent) override
void onDifferentialCheckbox(wxCommandEvent &event) override
void onParamGridSelectionChange(wxPropertyGridEvent &aEvent)
void removeOrphanedPinAssignments(SIM_MODEL *aModel)
void adjustParamGridColumns(int aWidth, bool aForce)
std::vector< SCH_FIELD > & m_fields
std::vector< SCH_PIN * > m_sortedPartPins
Pins of the current part.
wxPGProperty * newParamProperty(SIM_MODEL *aModel, int aParamIndex) const
wxPGProperty * m_prevParamGridSelection
void onPinModelCombobox(wxCommandEvent &event) override
const SIM_LIBRARY * library() const
SIM_MODEL & curModel() const
SIM_LIB_MGR m_libraryModelsMgr
void onBrowseButtonClick(wxCommandEvent &aEvent) override
void onPinComboboxTextEnter(wxCommandEvent &event) override
void onPinCombobox(wxCommandEvent &event) override
wxPGProperty * m_firstCategory
SCINTILLA_TRICKS * m_scintillaTricksCode
std::map< wxString, int > m_modelListBoxEntryToLibraryIdx
void updatePinAssignments(SIM_MODEL *aModel, bool aForceUpdatePins)
void onUpdateUI(wxUpdateUIEvent &aEvent)
DIALOG_SIM_MODEL(wxWindow *aParent, EDA_BASE_FRAME *aFrame, T &aSymbol, std::vector< SCH_FIELD > &aFields)
wxString getModelPinString(SIM_MODEL *aModel, int aModelPinIndex) const
void onPinAssignmentsGridSize(wxSizeEvent &aEvent) override
void updateIbisWidgets(SIM_MODEL *aModel)
void onParamGridSetFocus(wxFocusEvent &aEvent)
void updateModelParamsTab(SIM_MODEL *aModel)
bool TransferDataFromWindow() override
SIM_MODEL::TYPE m_curModelType
void updateModelCodeTab(SIM_MODEL *aModel)
void onSizeParamGrid(wxSizeEvent &event) override
void onPageChanging(wxNotebookEvent &event) override
std::vector< EMBEDDED_FILES * > m_filesStack
void onWaveformChoice(wxCommandEvent &aEvent) override
std::map< SIM_MODEL::DEVICE_T, SIM_MODEL::TYPE > m_curModelTypeOfDeviceType
void onPinModelComboboxTextEnter(wxCommandEvent &event) override
void onLibraryPathTextEnter(wxCommandEvent &aEvent) override
void onDeviceTypeChoice(wxCommandEvent &aEvent) override
bool TransferDataToWindow() override
void addParamPropertyIfRelevant(SIM_MODEL *aModel, int aParamIndex)
The base frame for deriving all KiCad main window classes.
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
virtual const wxString What() const
A composite of Problem() and Where()
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
Define a library symbol object.
void AppendParentEmbeddedFiles(std::vector< EMBEDDED_FILES * > &aStack) const
virtual bool ReadSchematicAndLibraries(unsigned aNetlistOptions, REPORTER &aReporter)
Process the schematic and Spice libraries to create net mapping and a list of SPICE_ITEMs.
const std::list< SPICE_ITEM > & GetItems() const
Return the list of items representing schematic symbols in the Spice world.
A singleton reporter that reports to nowhere.
virtual const wxString GetProjectPath() const
Return the full path of the project.
A pure virtual class used to derive REPORTER objects from.
virtual bool HasMessageOfSeverity(int aSeverityMask) const
Returns true if the reporter has one or more messages matching the specified severity mask.
virtual bool HasMessage() const
Returns true if any messages were reported.
EMBEDDED_FILES * GetEmbeddedFiles() override
Schematic editor (Eeschema) main window.
void SetText(const wxString &aText) override
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
wxString GetShownNumber() const
Add cut/copy/paste, dark theme, autocomplete and brace highlighting to a wxStyleTextCtrl instance.
static constexpr auto MODEL_FIELD
static constexpr auto PIN_FIELD
static constexpr auto DIFF_FIELD
bool isPinDiff(const std::string &aComp, const std::string &aPinNumber) const
static constexpr auto LIBRARY_FIELD
static constexpr auto NAME_FIELD
std::vector< std::pair< std::string, std::string > > GetIbisPins() const
void SwitchSingleEndedDiff(bool aDiff) override
bool CanDifferential() const
std::vector< std::string > GetIbisModels() const
bool ChangePin(const SIM_LIBRARY_IBIS &aLib, const std::string &aPinNumber)
update the list of available models based on the pin number.
std::string GetComponentName() const
std::string GetSpiceCode() const
static INFO TypeInfo(TYPE aType)
static bool InferSimModel(T &aSymbol, std::vector< SCH_FIELD > *aFields, bool aResolve, int aDepth, SIM_VALUE_GRAMMAR::NOTATION aNotation, wxString *aDeviceType, wxString *aModelType, wxString *aModelParams, wxString *aPinMap)
const SPICE_GENERATOR & SpiceGenerator() const
virtual const PARAM & GetParam(unsigned aParamIndex) const
static TYPE ReadTypeFromFields(const std::vector< SCH_FIELD > &aFields, bool aResolve, int aDepth, REPORTER &aReporter)
int GetParamCount() const
void AssignSymbolPinNumberToModelPin(int aPinIndex, const wxString &aSymbolPinNumber)
DEVICE_INFO GetDeviceInfo() const
DEVICE_T GetDeviceType() const
static DEVICE_INFO DeviceInfo(DEVICE_T aDeviceType)
virtual bool HasAutofill() const
const SIM_MODEL_PIN & GetPin(unsigned aIndex) const
virtual bool HasPrimaryValue() const
const SIM_MODEL::PARAM & GetParam() const
Special netlist exporter flavor that allows one to override simulation commands.
virtual std::string Preview(const SPICE_ITEM &aItem) const
A wrapper for reporting to a wxString object.
const wxString & GetMessages() const
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
This file is part of the common library.
static bool empty(const wxTextEntryBase *aCtrl)
bool equivalent(SIM_MODEL::DEVICE_T a, SIM_MODEL::DEVICE_T b)
#define FORCE_REFRESH_FROM_MODEL
SIM_MODEL::PARAM::CATEGORY CATEGORY
static const std::string KiCadUriPrefix
KICOMMON_API wxFont GetStatusFont(wxWindow *aWindow)
BITMAPS PinShapeGetBitmap(GRAPHIC_PINSHAPE shape)
wxString GetFieldValue(const std::vector< SCH_FIELD > *aFields, FIELD_T aFieldType)
const SCH_FIELD * FindField(const std::vector< SCH_FIELD > &aFields, FIELD_T aFieldId)
void SetFieldValue(std::vector< SCH_FIELD > &aFields, const wxString &aFieldName, const std::string &aValue, bool aIsVisible=true)
#define SIM_REFERENCE_FIELD
#define SIM_DEVICE_SUBTYPE_FIELD
std::vector< FAB_LAYER_COLOR > dummy
int StrNumCmp(const wxString &aString1, const wxString &aString2, bool aIgnoreCase)
Compare two strings with alphanumerical content.
std::vector< std::string > enumValues
static constexpr auto NOT_CONNECTED
const std::string modelPinName
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
wxString result
Test unit parsing edge cases and error handling.