diff --git a/eeschema/dialogs/dialog_sim_model.cpp b/eeschema/dialogs/dialog_sim_model.cpp index cb55c361e7..50a10ed9e6 100644 --- a/eeschema/dialogs/dialog_sim_model.cpp +++ b/eeschema/dialogs/dialog_sim_model.cpp @@ -25,12 +25,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include using CATEGORY = SIM_MODEL::PARAM::CATEGORY; @@ -325,9 +327,38 @@ void DIALOG_SIM_MODEL::updateModelCodeTab() if( m_useInstanceModelRadioButton->GetValue() || modelName.IsEmpty() ) modelName = m_fields.at( REFERENCE_FIELD ).GetText(); - m_codePreview->SetEditable( true ); - m_codePreview->SetText( curModel().GenerateSpicePreview( modelName ) ); - m_codePreview->SetEditable( false ); + m_codePreview->SetEditable( true ); // ??? + + if( dynamic_cast( &curModel() ) ) + { + // For raw Spice models display the whole file instead. + + wxString path = curModel().FindParam( "lib" )->value->ToString(); + wxString absolutePath = Prj().AbsolutePath( path ); + wxTextFile file; + wxString text; + + text << curModel().GenerateSpicePreview( modelName ); + text << "\n"; + text << "--- FILE SOURCE (" << path << ") ---\n"; + text << "\n"; + + if( wxFileExists( absolutePath ) && file.Open( absolutePath ) ) + { + for( text << file.GetFirstLine() << "\n"; + !file.Eof(); + text << file.GetNextLine() << "\n" ) + { + } + + file.Close(); + m_codePreview->SetText( text ); + } + } + else + m_codePreview->SetText( curModel().GenerateSpicePreview( modelName ) ); + + m_codePreview->SetEditable( false ); // ??? m_wasCodePreviewUpdated = true; } diff --git a/eeschema/sim/sim_model.cpp b/eeschema/sim/sim_model.cpp index 9b5bff6d8a..f55af49ee5 100644 --- a/eeschema/sim/sim_model.cpp +++ b/eeschema/sim/sim_model.cpp @@ -977,12 +977,12 @@ wxString SIM_MODEL::GenerateSpiceItemLine( const wxString& aRefName, const wxString& aModelName, const std::vector& aSymbolPinNumbers ) const { - std::vector pinNames; + std::vector pinNetNames; for( const PIN& pin : GetPins() ) - pinNames.push_back( pin.name ); + pinNetNames.push_back( pin.name ); - return GenerateSpiceItemLine( aRefName, aModelName, aSymbolPinNumbers, pinNames ); + return GenerateSpiceItemLine( aRefName, aModelName, aSymbolPinNumbers, pinNetNames ); } diff --git a/eeschema/sim/sim_model_ngspice.cpp b/eeschema/sim/sim_model_ngspice.cpp index 1f4196910c..15c0122745 100644 --- a/eeschema/sim/sim_model_ngspice.cpp +++ b/eeschema/sim/sim_model_ngspice.cpp @@ -77,7 +77,7 @@ std::vector SIM_MODEL_NGSPICE::GenerateSpiceCurrentNames( const wxStri return SIM_MODEL::GenerateSpiceCurrentNames( aRefName ); default: - wxFAIL_MSG( "Unhandled model device type" ); + wxFAIL_MSG( "Unhandled model device type in SIM_MODEL_NGSPICE" ); return {}; } } diff --git a/eeschema/sim/sim_model_spice.cpp b/eeschema/sim/sim_model_spice.cpp index b3778b3c2d..522ad4ff0a 100644 --- a/eeschema/sim/sim_model_spice.cpp +++ b/eeschema/sim/sim_model_spice.cpp @@ -98,6 +98,21 @@ wxString SIM_MODEL_SPICE::GenerateSpiceItemName( const wxString& aRefName ) cons } +wxString SIM_MODEL_SPICE::GenerateSpicePreview( const wxString& aModelName ) const +{ + std::vector pinNumbers; + std::vector pinNetNames; + + for( int i = 0; i < GetPinCount(); ++i ) + { + pinNumbers.push_back( wxString::FromCDouble( i + 1 ) ); + pinNetNames.push_back( wxString::FromCDouble( i + 1 ) ); + } + + return GenerateSpiceItemLine( "", aModelName, pinNumbers, pinNetNames ); +} + + void SIM_MODEL_SPICE::CreatePins( unsigned aSymbolPinCount ) { for( unsigned symbolPinIndex = 0; symbolPinIndex < aSymbolPinCount; ++symbolPinIndex ) diff --git a/eeschema/sim/sim_model_spice.h b/eeschema/sim/sim_model_spice.h index 20956c8ac6..76f2fd9b34 100644 --- a/eeschema/sim/sim_model_spice.h +++ b/eeschema/sim/sim_model_spice.h @@ -56,6 +56,7 @@ public: wxString GenerateSpiceModelLine( const wxString& aModelName ) const override; wxString GenerateSpiceItemName( const wxString& aRefName ) const override; + wxString GenerateSpicePreview( const wxString& aModelName ) const override; protected: void CreatePins( unsigned aSymbolPinCount ) override;