Improved Spice model dialog for sources Now user can specify both DC/AC & transient analysis specifications at once.

This commit is contained in:
Maciej Suminski 2016-08-11 14:42:09 +02:00
parent 53d772989a
commit 741ae10a97
4 changed files with 4970 additions and 4927 deletions

View File

@ -69,22 +69,22 @@ DIALOG_SPICE_MODEL::DIALOG_SPICE_MODEL( wxWindow* aParent, SCH_COMPONENT& aCompo
m_genAcMag->SetValidator( m_spiceEmptyValidator ); m_genAcMag->SetValidator( m_spiceEmptyValidator );
m_genAcPhase->SetValidator( m_spiceEmptyValidator ); m_genAcPhase->SetValidator( m_spiceEmptyValidator );
m_pulseInit->SetValidator( m_spiceValidator ); m_pulseInit->SetValidator( m_spiceEmptyValidator );
m_pulseNominal->SetValidator( m_spiceValidator ); m_pulseNominal->SetValidator( m_spiceEmptyValidator );
m_pulseDelay->SetValidator( m_spiceEmptyValidator ); m_pulseDelay->SetValidator( m_spiceEmptyValidator );
m_pulseRise->SetValidator( m_spiceEmptyValidator ); m_pulseRise->SetValidator( m_spiceEmptyValidator );
m_pulseFall->SetValidator( m_spiceEmptyValidator ); m_pulseFall->SetValidator( m_spiceEmptyValidator );
m_pulseWidth->SetValidator( m_spiceEmptyValidator ); m_pulseWidth->SetValidator( m_spiceEmptyValidator );
m_pulsePeriod->SetValidator( m_spiceEmptyValidator ); m_pulsePeriod->SetValidator( m_spiceEmptyValidator );
m_sinOffset->SetValidator( m_spiceValidator ); m_sinOffset->SetValidator( m_spiceEmptyValidator );
m_sinAmplitude->SetValidator( m_spiceValidator ); m_sinAmplitude->SetValidator( m_spiceEmptyValidator );
m_sinFreq->SetValidator( m_spiceEmptyValidator ); m_sinFreq->SetValidator( m_spiceEmptyValidator );
m_sinDelay->SetValidator( m_spiceEmptyValidator ); m_sinDelay->SetValidator( m_spiceEmptyValidator );
m_sinDampFactor->SetValidator( m_spiceEmptyValidator ); m_sinDampFactor->SetValidator( m_spiceEmptyValidator );
m_expInit->SetValidator( m_spiceValidator ); m_expInit->SetValidator( m_spiceEmptyValidator );
m_expPulsed->SetValidator( m_spiceValidator ); m_expPulsed->SetValidator( m_spiceEmptyValidator );
m_expRiseDelay->SetValidator( m_spiceEmptyValidator ); m_expRiseDelay->SetValidator( m_spiceEmptyValidator );
m_expRiseConst->SetValidator( m_spiceEmptyValidator ); m_expRiseConst->SetValidator( m_spiceEmptyValidator );
m_expFallDelay->SetValidator( m_spiceEmptyValidator ); m_expFallDelay->SetValidator( m_spiceEmptyValidator );
@ -314,43 +314,57 @@ bool DIALOG_SPICE_MODEL::parsePowerSource( const wxString& aModel )
if( aModel.IsEmpty() ) if( aModel.IsEmpty() )
return false; return false;
// Variables used for generic values processing (filling out wxTextCtrls in sequence)
bool genericProcessing = false;
unsigned int genericReqParamsCount = 0;
std::vector<wxTextCtrl*> genericControls;
wxStringTokenizer tokenizer( aModel, " ()" ); wxStringTokenizer tokenizer( aModel, " ()" );
wxString tkn = tokenizer.GetNextToken().Lower(); wxString tkn = tokenizer.GetNextToken().Lower();
try while( tokenizer.HasMoreTokens() )
{ {
// Variables used for generic values processing (filling out wxTextCtrls in sequence)
bool genericProcessing = false;
unsigned int genericReqParamsCount = 0;
std::vector<wxTextCtrl*> genericControls;
if( tkn == "dc" ) if( tkn == "dc" )
{ {
m_powerNotebook->SetSelection( m_powerNotebook->FindPage( m_pwrGeneric ) ); // There might be an optional "dc" or "trans" directive, skip it
tkn = tokenizer.GetNextToken().Lower();
// it might be an optional "dc" or "trans" directive
if( tkn == "dc" || tkn == "trans" ) if( tkn == "dc" || tkn == "trans" )
tkn = tokenizer.GetNextToken().Lower(); tkn = tokenizer.GetNextToken().Lower();
// DC value // DC value
m_genDc->SetValue( SPICE_VALUE( tkn ).ToSpiceString() ); try
{
if( !tokenizer.HasMoreTokens() ) m_genDc->SetValue( SPICE_VALUE( tkn ).ToSpiceString() );
return true; }
catch( ... )
tkn = tokenizer.GetNextToken().Lower(); {
if( tkn != "ac" )
return false; return false;
}
}
else if( tkn == "ac" )
{
// AC magnitude // AC magnitude
tkn = tokenizer.GetNextToken().Lower(); try
m_genAcMag->SetValue( SPICE_VALUE( tkn ).ToSpiceString() ); {
tkn = tokenizer.GetNextToken().Lower();
m_genAcMag->SetValue( SPICE_VALUE( tkn ).ToSpiceString() );
}
catch( ... )
{
return false;
}
// AC phase // AC phase (optional)
tkn = tokenizer.GetNextToken().Lower(); try
m_genAcMag->SetValue( SPICE_VALUE( tkn ).ToSpiceString() ); {
tkn = tokenizer.GetNextToken().Lower();
m_genAcPhase->SetValue( SPICE_VALUE( tkn ).ToSpiceString() );
}
catch( ... )
{
continue; // perhaps another directive
}
} }
@ -390,15 +404,22 @@ bool DIALOG_SPICE_MODEL::parsePowerSource( const wxString& aModel )
{ {
m_powerNotebook->SetSelection( m_powerNotebook->FindPage( m_pwrPwl ) ); m_powerNotebook->SetSelection( m_powerNotebook->FindPage( m_pwrPwl ) );
while( tokenizer.HasMoreTokens() ) try
{ {
tkn = tokenizer.GetNextToken(); while( tokenizer.HasMoreTokens() )
SPICE_VALUE time( tkn ); {
tkn = tokenizer.GetNextToken();
SPICE_VALUE time( tkn );
tkn = tokenizer.GetNextToken(); tkn = tokenizer.GetNextToken();
SPICE_VALUE value( tkn ); SPICE_VALUE value( tkn );
addPwlValue( time.ToSpiceString(), value.ToSpiceString() ); addPwlValue( time.ToSpiceString(), value.ToSpiceString() );
}
}
catch( ... )
{
return false;
} }
} }
@ -406,27 +427,34 @@ bool DIALOG_SPICE_MODEL::parsePowerSource( const wxString& aModel )
else else
{ {
// Unhandled power source type // Unhandled power source type
wxASSERT_MSG( false, "Unhandled power source type" );
return false; return false;
} }
if( genericProcessing ) if( genericProcessing )
{ {
for( unsigned int i = 0; i < genericControls.size(); ++i ) try
{ {
// If there are no more tokens, let's check if we got at least required fields for( unsigned int i = 0; i < genericControls.size(); ++i )
if( !tokenizer.HasMoreTokens() ) {
return ( i >= genericReqParamsCount ); // If there are no more tokens, let's check if we got at least required fields
if( !tokenizer.HasMoreTokens() )
return ( i >= genericReqParamsCount );
tkn = tokenizer.GetNextToken().Lower(); tkn = tokenizer.GetNextToken().Lower();
genericControls[i]->SetValue( SPICE_VALUE( tkn ).ToSpiceString() ); genericControls[i]->SetValue( SPICE_VALUE( tkn ).ToSpiceString() );
}
}
catch( ... )
{
return false;
} }
} }
}
catch( std::exception& e ) // Get the next token now, so if any of the branches catches an expection, try to
{ // process it in another branch
// Nothing, the dialog simply will not be filled tkn = tokenizer.GetNextToken().Lower();
return false;
} }
return true; return true;
@ -435,45 +463,52 @@ bool DIALOG_SPICE_MODEL::parsePowerSource( const wxString& aModel )
bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const
{ {
wxString res; wxString acdc, trans;
wxWindow* page = m_powerNotebook->GetCurrentPage(); wxWindow* page = m_powerNotebook->GetCurrentPage();
bool useTrans = true; // shall we use the transient command part?
// Variables for generic processing // Variables for generic processing
bool genericProcessing = false; bool genericProcessing = false;
unsigned int genericReqParamsCount = 0; unsigned int genericReqParamsCount = 0;
std::vector<wxTextCtrl*> genericControls; std::vector<wxTextCtrl*> genericControls;
if( page == m_pwrGeneric ) /// DC / AC section
// If SPICE_VALUE can be properly constructed, then it is a valid value
try
{ {
if( !m_pwrGeneric->Validate() )
return false;
if( empty( m_genDc ) && empty( m_genAcMag ) )
{
DisplayError( NULL, wxT( "You have to specify DC or/and AC value" ) );
return false;
}
if( !empty( m_genDc ) ) if( !empty( m_genDc ) )
res += wxString::Format( "dc %s", m_genDc->GetValue() ); acdc += wxString::Format( "dc %s ", SPICE_VALUE( m_genDc->GetValue() ).ToSpiceString() );
}
if( !empty( m_genAcMag ) ) catch( ... )
{ {
res += wxString::Format( " ac %s", m_genAcMag->GetValue() ); DisplayError( NULL, wxT( "Invalid DC value" ) );
return false;
if( !empty( m_genAcPhase ) )
res += wxString::Format( " %s", m_genAcPhase->GetValue() );
}
} }
try
{
if( !empty( m_genAcMag ) )
{
acdc += wxString::Format( "ac %s ", SPICE_VALUE( m_genAcMag->GetValue() ).ToSpiceString() );
else if( page == m_pwrPulse ) if( !empty( m_genAcPhase ) )
acdc += wxString::Format( "%s ", SPICE_VALUE( m_genAcPhase->GetValue() ).ToSpiceString() );
}
}
catch( ... )
{
DisplayError( NULL, wxT( "Invalid AC magnitude or phase" ) );
return false;
}
/// Transient section
if( page == m_pwrPulse )
{ {
if( !m_pwrPulse->Validate() ) if( !m_pwrPulse->Validate() )
return false; return false;
genericProcessing = true; genericProcessing = true;
res = "pulse"; trans += "pulse";
genericReqParamsCount = 2; genericReqParamsCount = 2;
genericControls = { m_pulseInit, m_pulseNominal, m_pulseDelay, genericControls = { m_pulseInit, m_pulseNominal, m_pulseDelay,
m_pulseRise, m_pulseFall, m_pulseWidth, m_pulsePeriod }; m_pulseRise, m_pulseFall, m_pulseWidth, m_pulsePeriod };
@ -486,7 +521,7 @@ bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const
return false; return false;
genericProcessing = true; genericProcessing = true;
res = "sin"; trans += "sin";
genericReqParamsCount = 2; genericReqParamsCount = 2;
genericControls = { m_sinOffset, m_sinAmplitude, m_sinFreq, m_sinDelay, m_sinDampFactor }; genericControls = { m_sinOffset, m_sinAmplitude, m_sinFreq, m_sinDelay, m_sinDampFactor };
} }
@ -498,7 +533,7 @@ bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const
return false; return false;
genericProcessing = true; genericProcessing = true;
res = "exp"; trans += "exp";
genericReqParamsCount = 2; genericReqParamsCount = 2;
genericControls = { m_expInit, m_expPulsed, genericControls = { m_expInit, m_expPulsed,
m_expRiseDelay, m_expRiseConst, m_expFallDelay, m_expFallConst }; m_expRiseDelay, m_expRiseConst, m_expFallDelay, m_expFallConst };
@ -507,21 +542,19 @@ bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const
else if( page == m_pwrPwl ) else if( page == m_pwrPwl )
{ {
if( m_pwlValList->GetItemCount() == 0 ) if( m_pwlValList->GetItemCount() > 0 )
{ {
DisplayError( NULL, wxT( "You have to specify at least one value" ) ); trans += "pwl(";
return false;
for( int i = 0; i < m_pwlValList->GetItemCount(); ++i )
{
trans += wxString::Format( "%s %s ", m_pwlValList->GetItemText( i, m_pwlTimeCol ),
m_pwlValList->GetItemText( i, m_pwlValueCol ) );
}
trans.Trim();
trans += ")";
} }
res = "pwl(";
for( int i = 0; i < m_pwlValList->GetItemCount(); ++i )
{
res += wxString::Format( "%s %s ", m_pwlValList->GetItemText( i, m_pwlTimeCol ),
m_pwlValList->GetItemText( i, m_pwlValueCol ) );
}
res += ")";
} }
if( genericProcessing ) if( genericProcessing )
@ -529,7 +562,7 @@ bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const
bool finished = false; bool finished = false;
unsigned int paramCounter = 0; unsigned int paramCounter = 0;
res += "("; trans += "(";
for( auto textCtrl : genericControls ) for( auto textCtrl : genericControls )
{ {
@ -539,8 +572,16 @@ bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const
if( paramCounter < genericReqParamsCount ) if( paramCounter < genericReqParamsCount )
{ {
if( paramCounter == 0 )
{
// It is fine, no parameters were entered
useTrans = false;
break;
}
DisplayError( NULL, DisplayError( NULL,
wxString::Format( wxT( "You need to specify at least the first %d parameters" ), wxString::Format( wxT( "You need to specify at least the "
"first %d parameters for the transient source" ),
genericReqParamsCount ) ); genericReqParamsCount ) );
return false; return false;
@ -548,18 +589,26 @@ bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const
} }
else if( finished ) else if( finished )
{ {
DisplayError( NULL, wxT( "You cannot leave interleaved blank spaces" ) ); DisplayError( NULL, wxT( "You cannot leave interleaved blank "
"spaces for the transient source" ) );
return false; return false;
} }
res += wxString::Format( "%s ", textCtrl->GetValue() ); trans += wxString::Format( "%s ", textCtrl->GetValue() );
++paramCounter; ++paramCounter;
} }
res += ")"; trans.Trim();
trans += ")";
} }
aTarget = res; aTarget = acdc;
if( useTrans )
aTarget += trans;
aTarget.Trim( false );
aTarget.Trim( true );
return true; return true;
} }

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 24 2016) // C++ code generated with wxFormBuilder (version Jul 17 2016)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -131,42 +131,58 @@ DIALOG_SPICE_MODEL_BASE::DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID i
wxBoxSizer* bSizer4; wxBoxSizer* bSizer4;
bSizer4 = new wxBoxSizer( wxVERTICAL ); bSizer4 = new wxBoxSizer( wxVERTICAL );
m_powerNotebook = new wxNotebook( m_power, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); wxStaticBoxSizer* sbSizer1;
m_pwrGeneric = new wxPanel( m_powerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( m_power, wxID_ANY, _("DC/AC analysis") ), wxVERTICAL );
wxFlexGridSizer* fgSizer6; wxFlexGridSizer* fgSizer6;
fgSizer6 = new wxFlexGridSizer( 0, 2, 0, 0 ); fgSizer6 = new wxFlexGridSizer( 0, 4, 0, 0 );
fgSizer6->AddGrowableCol( 0 ); fgSizer6->AddGrowableCol( 0 );
fgSizer6->SetFlexibleDirection( wxBOTH ); fgSizer6->SetFlexibleDirection( wxBOTH );
fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText10 = new wxStaticText( m_pwrGeneric, wxID_ANY, _("DC [V/A]"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText10 = new wxStaticText( sbSizer1->GetStaticBox(), wxID_ANY, _("DC [V/A]"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText10->Wrap( -1 ); m_staticText10->Wrap( -1 );
fgSizer6->Add( m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); fgSizer6->Add( m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_genDc = new wxTextCtrl( m_pwrGeneric, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_genDc = new wxTextCtrl( sbSizer1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_genDc->SetMinSize( wxSize( 200,-1 ) ); m_genDc->SetMinSize( wxSize( 60,-1 ) );
fgSizer6->Add( m_genDc, 0, wxALL, 5 ); fgSizer6->Add( m_genDc, 0, wxALL, 5 );
m_staticText11 = new wxStaticText( m_pwrGeneric, wxID_ANY, _("AC magnitude [V/A]"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer6->Add( 0, 0, 1, wxEXPAND, 5 );
fgSizer6->Add( 0, 0, 1, wxEXPAND, 5 );
m_staticText11 = new wxStaticText( sbSizer1->GetStaticBox(), wxID_ANY, _("AC magnitude [V/A]"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText11->Wrap( -1 ); m_staticText11->Wrap( -1 );
fgSizer6->Add( m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); fgSizer6->Add( m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_genAcMag = new wxTextCtrl( m_pwrGeneric, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_genAcMag = new wxTextCtrl( sbSizer1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_genAcMag->SetMinSize( wxSize( 60,-1 ) );
fgSizer6->Add( m_genAcMag, 0, wxALL|wxEXPAND, 5 ); fgSizer6->Add( m_genAcMag, 0, wxALL|wxEXPAND, 5 );
m_staticText12 = new wxStaticText( m_pwrGeneric, wxID_ANY, _("AC phase [rad]"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText12 = new wxStaticText( sbSizer1->GetStaticBox(), wxID_ANY, _("AC phase [rad]"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText12->Wrap( -1 ); m_staticText12->Wrap( -1 );
fgSizer6->Add( m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); fgSizer6->Add( m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_genAcPhase = new wxTextCtrl( m_pwrGeneric, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_genAcPhase = new wxTextCtrl( sbSizer1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_genAcPhase->SetMinSize( wxSize( 60,-1 ) );
fgSizer6->Add( m_genAcPhase, 0, wxALL|wxEXPAND, 5 ); fgSizer6->Add( m_genAcPhase, 0, wxALL|wxEXPAND, 5 );
m_pwrGeneric->SetSizer( fgSizer6 ); sbSizer1->Add( fgSizer6, 1, wxEXPAND, 5 );
m_pwrGeneric->Layout();
fgSizer6->Fit( m_pwrGeneric );
m_powerNotebook->AddPage( m_pwrGeneric, _("DC/AC"), true ); bSizer4->Add( sbSizer1, 1, wxALL|wxEXPAND, 5 );
wxStaticBoxSizer* sbSizer3;
sbSizer3 = new wxStaticBoxSizer( new wxStaticBox( m_power, wxID_ANY, _("Transient analysis") ), wxVERTICAL );
m_powerNotebook = new wxNotebook( sbSizer3->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
m_pwrPulse = new wxPanel( m_powerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_pwrPulse = new wxPanel( m_powerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxFlexGridSizer* fgSizer7; wxFlexGridSizer* fgSizer7;
fgSizer7 = new wxFlexGridSizer( 0, 2, 0, 0 ); fgSizer7 = new wxFlexGridSizer( 0, 2, 0, 0 );
@ -179,7 +195,7 @@ DIALOG_SPICE_MODEL_BASE::DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID i
fgSizer7->Add( m_staticText13, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); fgSizer7->Add( m_staticText13, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_pulseInit = new wxTextCtrl( m_pwrPulse, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_pulseInit = new wxTextCtrl( m_pwrPulse, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_pulseInit->SetMinSize( wxSize( 200,-1 ) ); m_pulseInit->SetMinSize( wxSize( 100,-1 ) );
fgSizer7->Add( m_pulseInit, 0, wxALL|wxEXPAND, 5 ); fgSizer7->Add( m_pulseInit, 0, wxALL|wxEXPAND, 5 );
@ -229,7 +245,7 @@ DIALOG_SPICE_MODEL_BASE::DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID i
m_pwrPulse->SetSizer( fgSizer7 ); m_pwrPulse->SetSizer( fgSizer7 );
m_pwrPulse->Layout(); m_pwrPulse->Layout();
fgSizer7->Fit( m_pwrPulse ); fgSizer7->Fit( m_pwrPulse );
m_powerNotebook->AddPage( m_pwrPulse, _("Pulse"), false ); m_powerNotebook->AddPage( m_pwrPulse, _("Pulse"), true );
m_pwrSin = new wxPanel( m_powerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_pwrSin = new wxPanel( m_powerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxFlexGridSizer* fgSizer8; wxFlexGridSizer* fgSizer8;
fgSizer8 = new wxFlexGridSizer( 0, 2, 0, 0 ); fgSizer8 = new wxFlexGridSizer( 0, 2, 0, 0 );
@ -242,7 +258,7 @@ DIALOG_SPICE_MODEL_BASE::DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID i
fgSizer8->Add( m_staticText21, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); fgSizer8->Add( m_staticText21, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_sinOffset = new wxTextCtrl( m_pwrSin, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_sinOffset = new wxTextCtrl( m_pwrSin, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_sinOffset->SetMinSize( wxSize( 200,-1 ) ); m_sinOffset->SetMinSize( wxSize( 100,-1 ) );
fgSizer8->Add( m_sinOffset, 0, wxALL, 5 ); fgSizer8->Add( m_sinOffset, 0, wxALL, 5 );
@ -291,7 +307,7 @@ DIALOG_SPICE_MODEL_BASE::DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID i
fgSizer9->Add( m_staticText26, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); fgSizer9->Add( m_staticText26, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_expInit = new wxTextCtrl( m_pwrExp, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_expInit = new wxTextCtrl( m_pwrExp, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_expInit->SetMinSize( wxSize( 200,-1 ) ); m_expInit->SetMinSize( wxSize( 100,-1 ) );
fgSizer9->Add( m_expInit, 0, wxALL|wxEXPAND, 5 ); fgSizer9->Add( m_expInit, 0, wxALL|wxEXPAND, 5 );
@ -356,7 +372,7 @@ DIALOG_SPICE_MODEL_BASE::DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID i
fgSizer10->Add( m_staticText34, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); fgSizer10->Add( m_staticText34, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_pwlTime = new wxTextCtrl( m_pwrPwl, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_pwlTime = new wxTextCtrl( m_pwrPwl, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_pwlTime->SetMinSize( wxSize( 200,-1 ) ); m_pwlTime->SetMinSize( wxSize( 100,-1 ) );
fgSizer10->Add( m_pwlTime, 0, wxALL|wxEXPAND, 5 ); fgSizer10->Add( m_pwlTime, 0, wxALL|wxEXPAND, 5 );
@ -385,7 +401,7 @@ DIALOG_SPICE_MODEL_BASE::DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID i
m_pwrPwl->SetSizer( fgSizer15 ); m_pwrPwl->SetSizer( fgSizer15 );
m_pwrPwl->Layout(); m_pwrPwl->Layout();
fgSizer15->Fit( m_pwrPwl ); fgSizer15->Fit( m_pwrPwl );
m_powerNotebook->AddPage( m_pwrPwl, _("PWL"), false ); m_powerNotebook->AddPage( m_pwrPwl, _("Piece-wise Linear"), false );
m_pwrFm = new wxPanel( m_powerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_pwrFm = new wxPanel( m_powerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_pwrFm->Hide(); m_pwrFm->Hide();
@ -407,7 +423,10 @@ DIALOG_SPICE_MODEL_BASE::DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID i
m_powerNotebook->AddPage( m_pwrExtData, _("External data"), false ); m_powerNotebook->AddPage( m_pwrExtData, _("External data"), false );
bSizer4->Add( m_powerNotebook, 1, wxEXPAND | wxALL, 5 ); sbSizer3->Add( m_powerNotebook, 1, wxEXPAND | wxALL, 5 );
bSizer4->Add( sbSizer3, 1, wxALL|wxEXPAND, 5 );
wxString m_pwrTypeChoices[] = { _("Voltage"), _("Current") }; wxString m_pwrTypeChoices[] = { _("Voltage"), _("Current") };
int m_pwrTypeNChoices = sizeof( m_pwrTypeChoices ) / sizeof( wxString ); int m_pwrTypeNChoices = sizeof( m_pwrTypeChoices ) / sizeof( wxString );

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 24 2016) // C++ code generated with wxFormBuilder (version Jul 17 2016)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO "NOT" EDIT THIS FILE! // PLEASE DO "NOT" EDIT THIS FILE!
@ -28,6 +28,7 @@ class DIALOG_SHIM;
#include <wx/image.h> #include <wx/image.h>
#include <wx/icon.h> #include <wx/icon.h>
#include <wx/button.h> #include <wx/button.h>
#include <wx/statbox.h>
#include <wx/listctrl.h> #include <wx/listctrl.h>
#include <wx/notebook.h> #include <wx/notebook.h>
#include <wx/radiobox.h> #include <wx/radiobox.h>
@ -66,14 +67,13 @@ class DIALOG_SPICE_MODEL_BASE : public DIALOG_SHIM
wxTextCtrl* m_icLib; wxTextCtrl* m_icLib;
wxButton* m_icSelectLib; wxButton* m_icSelectLib;
wxPanel* m_power; wxPanel* m_power;
wxNotebook* m_powerNotebook;
wxPanel* m_pwrGeneric;
wxStaticText* m_staticText10; wxStaticText* m_staticText10;
wxTextCtrl* m_genDc; wxTextCtrl* m_genDc;
wxStaticText* m_staticText11; wxStaticText* m_staticText11;
wxTextCtrl* m_genAcMag; wxTextCtrl* m_genAcMag;
wxStaticText* m_staticText12; wxStaticText* m_staticText12;
wxTextCtrl* m_genAcPhase; wxTextCtrl* m_genAcPhase;
wxNotebook* m_powerNotebook;
wxPanel* m_pwrPulse; wxPanel* m_pwrPulse;
wxStaticText* m_staticText13; wxStaticText* m_staticText13;
wxTextCtrl* m_pulseInit; wxTextCtrl* m_pulseInit;
@ -143,7 +143,7 @@ class DIALOG_SPICE_MODEL_BASE : public DIALOG_SHIM
public: public:
DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 425,630 ), long style = wxDEFAULT_DIALOG_STYLE ); DIALOG_SPICE_MODEL_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 410,705 ), long style = wxDEFAULT_DIALOG_STYLE );
~DIALOG_SPICE_MODEL_BASE(); ~DIALOG_SPICE_MODEL_BASE();
}; };