Sim: Create a class to manage sim libs and inherited models
This commit is contained in:
parent
0336cff8d6
commit
44799c830d
|
@ -283,6 +283,7 @@ set( EESCHEMA_SRCS
|
||||||
sim/sim_library.cpp
|
sim/sim_library.cpp
|
||||||
sim/sim_library_spice.cpp
|
sim/sim_library_spice.cpp
|
||||||
sim/sim_library_kibis.cpp
|
sim/sim_library_kibis.cpp
|
||||||
|
sim/sim_lib_mgr.cpp
|
||||||
sim/sim_model.cpp
|
sim/sim_model.cpp
|
||||||
sim/sim_model_behavioral.cpp
|
sim/sim_model_behavioral.cpp
|
||||||
sim/sim_model_ideal.cpp
|
sim/sim_model_ideal.cpp
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
#include <advanced_config.h>
|
#include <advanced_config.h>
|
||||||
#include <sim/sim_plot_frame.h>
|
#include <sim/sim_plot_frame.h>
|
||||||
#include <sim/spice_generator.h>
|
#include <sim/spice_generator.h>
|
||||||
|
#include <sim/sim_lib_mgr.h>
|
||||||
#include "symbol_library_manager.h"
|
#include "symbol_library_manager.h"
|
||||||
#include <symbol_viewer_frame.h>
|
#include <symbol_viewer_frame.h>
|
||||||
#include <status_popup.h>
|
#include <status_popup.h>
|
||||||
|
@ -883,52 +884,12 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent )
|
||||||
SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item->GetParent() );
|
SCH_SYMBOL* symbol = static_cast<SCH_SYMBOL*>( item->GetParent() );
|
||||||
std::vector<LIB_PIN*> pins = symbol->GetLibPins();
|
std::vector<LIB_PIN*> pins = symbol->GetLibPins();
|
||||||
|
|
||||||
// TODO: We need to unify this library-model inheritance stuff into one
|
SIM_LIB_MGR mgr( m_frame->Prj() );
|
||||||
// abstraction.
|
SIM_MODEL& model = mgr.CreateModel( *symbol );
|
||||||
|
|
||||||
// It might not be the best idea to have to load a file every time current is
|
|
||||||
// probed either.
|
|
||||||
|
|
||||||
std::unique_ptr<SIM_MODEL> model;
|
|
||||||
std::unique_ptr<SIM_LIBRARY> library;
|
|
||||||
|
|
||||||
SCH_FIELD* libraryField = symbol->FindField( SIM_LIBRARY::LIBRARY_FIELD );
|
|
||||||
SCH_FIELD* nameField = symbol->FindField( SIM_LIBRARY::NAME_FIELD );
|
|
||||||
|
|
||||||
if( libraryField )
|
|
||||||
{
|
|
||||||
wxString path = m_frame->Prj().AbsolutePath( libraryField->GetShownText() );
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
library = SIM_LIBRARY::Create( std::string( path.ToUTF8() ) );
|
|
||||||
}
|
|
||||||
catch( const IO_ERROR& e )
|
|
||||||
{
|
|
||||||
DisplayErrorMessage( m_frame,
|
|
||||||
wxString::Format( "Failed reading model library '%s'", path ),
|
|
||||||
e.What() );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !nameField )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
SIM_MODEL* baseModel = library->FindModel( std::string( nameField->GetShownText().ToUTF8() ) );
|
|
||||||
|
|
||||||
if( !baseModel )
|
|
||||||
return true;
|
|
||||||
|
|
||||||
model = SIM_MODEL::Create( *baseModel,
|
|
||||||
static_cast<int>( pins.size() ),
|
|
||||||
symbol->GetFields() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
model = SIM_MODEL::Create( static_cast<int>( pins.size() ),
|
|
||||||
symbol->GetFields() );
|
|
||||||
|
|
||||||
auto ref = std::string( symbol->GetRef( &m_frame->GetCurrentSheet() ).ToUTF8() );
|
auto ref = std::string( symbol->GetRef( &m_frame->GetCurrentSheet() ).ToUTF8() );
|
||||||
std::vector<std::string> currentNames = model->SpiceGenerator().CurrentNames( ref );
|
std::vector<std::string> currentNames =
|
||||||
|
model.SpiceGenerator().CurrentNames( ref );
|
||||||
|
|
||||||
if( currentNames.size() == 0 )
|
if( currentNames.size() == 0 )
|
||||||
return true;
|
return true;
|
||||||
|
@ -938,7 +899,8 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent )
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int modelPinIndex = model->FindModelPinIndex( std::string( pin->GetNumber().ToUTF8() ) );
|
int modelPinIndex =
|
||||||
|
model.FindModelPinIndex( std::string( pin->GetNumber().ToUTF8() ) );
|
||||||
|
|
||||||
if( modelPinIndex != SIM_MODEL::PIN::NOT_CONNECTED )
|
if( modelPinIndex != SIM_MODEL::PIN::NOT_CONNECTED )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue