//************************************************************************************************** // DlgGcpCfgOPT.cpp * // ------------------ * // Started : 2006-09-14 * // Last Update : 2016-11-10 * // Copyright : (C) 2006-2016 MSWaters * //************************************************************************************************** //************************************************************************************************** // * // This program is free software; you can redistribute it and/or modify it under the * // terms of the GNU General Public License as published by the Free Software Foundation; * // either version 3 of the License, or (at your option) any later version. * // * //************************************************************************************************** #include "DlgGcpCfgOPT.hpp" //************************************************************************************************** // Implement an event table. wxBEGIN_EVENT_TABLE( DlgGcpCfgOPT, wxDialog ) EVT_BUTTON( DlgGcpCfgOPT::ID_BTN_OK , DlgGcpCfgOPT::OnBtnOk ) EVT_BUTTON( DlgGcpCfgOPT::ID_BTN_DEFAULTS, DlgGcpCfgOPT::OnBtnDefaults ) EVT_BUTTON( DlgGcpCfgOPT::ID_BTN_CANCEL , DlgGcpCfgOPT::OnBtnCancel ) wxEND_EVENT_TABLE( ) //************************************************************************************************** // Constructor. // // Argument List : // poWin - A pointer to the dialog parent window DlgGcpCfgOPT::DlgGcpCfgOPT( wxWindow * poWin ) : wxDialog( poWin, -1, wxT(""), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, wxDialogNameStr ) { SetTitle( wxT(" GNU-Cap OPTIONS Command Setup") ); Initialize( ); bClear( ); } //************************************************************************************************** // Destructor. DlgGcpCfgOPT::~DlgGcpCfgOPT( ) { } //************************************************************************************************** // Initialize object attributes. void DlgGcpCfgOPT::Initialize( void ) { // Call all the initialization functions Create( ); ToolTips( ); // Layout the of the display objects DoLayout( ); } //************************************************************************************************** // Create the display objects. void DlgGcpCfgOPT::Create( void ) { wxPanel * poPnlLHS, * poPnlMID, * poPnlRHS, * poPnlRHS1, * poPnlBtns; wxSize oSizeCbx; int iWdName=85, iWdValue=95, iWdUnits=80; // Create the necessary panel objects poPnlLHS = new wxPanel( this ); poPnlMID = new wxPanel( this ); poPnlRHS = new wxPanel( this ); poPnlRHS1 = new wxPanel( poPnlRHS ); poPnlBtns = new wxPanel( poPnlRHS ); // Create the PnlValue controls m_oPnlABSTOL .bCreate( poPnlLHS ,ID_PNL_ABSTOL , iWdName, iWdValue, iWdUnits ); m_oPnlCHGTOL .bCreate( poPnlLHS ,ID_PNL_CHGTOL , iWdName, iWdValue, iWdUnits ); m_oPnlRELTOL .bCreate( poPnlLHS ,ID_PNL_RELTOL , iWdName, iWdValue, iWdUnits ); m_oPnlTRTOL .bCreate( poPnlLHS ,ID_PNL_TRTOL , iWdName, iWdValue, iWdUnits ); m_oPnlVNTOL .bCreate( poPnlLHS ,ID_PNL_VNTOL , iWdName, iWdValue, iWdUnits ); m_oPnlDAMPST .bCreate( poPnlLHS ,ID_PNL_DAMPST , iWdName, iWdValue, iWdUnits ); m_oPnlDAMPMAX .bCreate( poPnlLHS ,ID_PNL_DAMPMAX , iWdName, iWdValue, iWdUnits ); m_oPnlDAMPMIN .bCreate( poPnlLHS ,ID_PNL_DAMPMIN , iWdName, iWdValue, iWdUnits ); m_oPnlDEFL .bCreate( poPnlLHS ,ID_PNL_DEFL , iWdName, iWdValue, iWdUnits ); m_oPnlDEFW .bCreate( poPnlLHS ,ID_PNL_DEFW , iWdName, iWdValue, iWdUnits ); m_oPnlDEFAD .bCreate( poPnlLHS ,ID_PNL_DEFAD , iWdName, iWdValue, iWdUnits ); m_oPnlDEFAS .bCreate( poPnlLHS ,ID_PNL_DEFAS , iWdName, iWdValue, iWdUnits ); m_oPnlDTMIN .bCreate( poPnlLHS ,ID_PNL_DTMIN , iWdName, iWdValue, iWdUnits ); m_oPnlDTRATIO .bCreate( poPnlLHS ,ID_PNL_DTRATIO , iWdName, iWdValue, iWdUnits ); m_oPnlGMIN .bCreate( poPnlLHS ,ID_PNL_GMIN , iWdName, iWdValue, iWdUnits ); m_oPnlROUND .bCreate( poPnlLHS ,ID_PNL_ROUND , iWdName, iWdValue, iWdUnits ); m_oPnlSHORT .bCreate( poPnlLHS ,ID_PNL_SHORT , iWdName, iWdValue, iWdUnits ); m_oPnlTEMP .bCreate( poPnlMID ,ID_PNL_TEMP , iWdName, iWdValue, iWdUnits ); m_oPnlTNOM .bCreate( poPnlMID ,ID_PNL_TNOM , iWdName, iWdValue, iWdUnits ); m_oPnlTRREJECT.bCreate( poPnlMID ,ID_PNL_TRREJECT, iWdName, iWdValue, iWdUnits ); m_oPnlTRSTEPG .bCreate( poPnlMID ,ID_PNL_TRSTEPG , iWdName, iWdValue, iWdUnits ); m_oPnlTRSTEPH .bCreate( poPnlMID ,ID_PNL_TRSTEPH , iWdName, iWdValue, iWdUnits ); m_oPnlTRSTEPS .bCreate( poPnlMID ,ID_PNL_TRSTEPS , iWdName, iWdValue, iWdUnits ); m_oPnlFLOOR .bCreate( poPnlMID ,ID_PNL_FLOOR , iWdName, iWdValue, iWdUnits ); m_oPnlVFLOOR .bCreate( poPnlMID ,ID_PNL_VFLOOR , iWdName, iWdValue, iWdUnits ); m_oPnlVMAX .bCreate( poPnlMID ,ID_PNL_VMAX , iWdName, iWdValue, iWdUnits ); m_oPnlVMIN .bCreate( poPnlMID ,ID_PNL_VMIN , iWdName, iWdValue, iWdUnits ); m_oPnlITL1 .bCreate( poPnlMID ,ID_PNL_ITL1 , iWdName, iWdValue, iWdUnits ); m_oPnlITL3 .bCreate( poPnlMID ,ID_PNL_ITL3 , iWdName, iWdValue, iWdUnits ); m_oPnlITL4 .bCreate( poPnlMID ,ID_PNL_ITL4 , iWdName, iWdValue, iWdUnits ); m_oPnlITL7 .bCreate( poPnlMID ,ID_PNL_ITL7 , iWdName, iWdValue, iWdUnits ); m_oPnlITL8 .bCreate( poPnlMID ,ID_PNL_ITL8 , iWdName, iWdValue, iWdUnits ); m_oPnlITERMIN .bCreate( poPnlMID ,ID_PNL_ITERMIN , iWdName, iWdValue, iWdUnits ); m_oPnlHARMS .bCreate( poPnlMID ,ID_PNL_HARMS , iWdName, iWdValue, iWdUnits ); m_oPnlRECURS .bCreate( poPnlRHS1 ,ID_PNL_RECURS , iWdName, iWdValue, iWdUnits ); m_oPnlTRANSITS.bCreate( poPnlRHS1 ,ID_PNL_TRANSITS, iWdName, iWdValue, iWdUnits ); m_oPnlABSTOL .bSetName( wxT("ABSTOL") ); m_oPnlCHGTOL .bSetName( wxT("CHGTOL") ); m_oPnlDAMPMAX .bSetName( wxT("DAMPMAX") ); m_oPnlDAMPMIN .bSetName( wxT("DAMPMIN") ); m_oPnlDAMPST .bSetName( wxT("DAMPST") ); m_oPnlDEFL .bSetName( wxT("DEFL") ); m_oPnlDEFW .bSetName( wxT("DEFW") ); m_oPnlDEFAD .bSetName( wxT("DEFAD") ); m_oPnlDEFAS .bSetName( wxT("DEFAS") ); m_oPnlDTMIN .bSetName( wxT("DTMIN") ); m_oPnlDTRATIO .bSetName( wxT("DTRATIO") ); m_oPnlFLOOR .bSetName( wxT("FLOOR") ); m_oPnlGMIN .bSetName( wxT("GMIN") ); m_oPnlHARMS .bSetName( wxT("HARMONICS") ); m_oPnlITERMIN .bSetName( wxT("ITERMIN") ); m_oPnlITL1 .bSetName( wxT("ITL1") ); m_oPnlITL3 .bSetName( wxT("ITL3") ); m_oPnlITL4 .bSetName( wxT("ITL4") ); m_oPnlITL7 .bSetName( wxT("ITL7") ); m_oPnlITL8 .bSetName( wxT("ITL8") ); m_oPnlRECURS .bSetName( wxT("RECURS") ); m_oPnlRELTOL .bSetName( wxT("RELTOL") ); m_oPnlROUND .bSetName( wxT("ROUND") ); m_oPnlSHORT .bSetName( wxT("SHORT") ); m_oPnlTEMP .bSetName( wxT("TEMP") ); m_oPnlTNOM .bSetName( wxT("TNOM") ); m_oPnlTRANSITS.bSetName( wxT("TRANSITS") ); m_oPnlTRREJECT.bSetName( wxT("TRREJECT") ); m_oPnlTRSTEPG .bSetName( wxT("TRSTEPG") ); m_oPnlTRSTEPH .bSetName( wxT("TRSTEPH") ); m_oPnlTRSTEPS .bSetName( wxT("TRSTEPS") ); m_oPnlTRTOL .bSetName( wxT("TRTOL") ); m_oPnlVFLOOR .bSetName( wxT("VFLOOR") ); m_oPnlVMAX .bSetName( wxT("VMAX") ); m_oPnlVMIN .bSetName( wxT("VMIN") ); m_oPnlVNTOL .bSetName( wxT("VNTOL") ); m_oPnlABSTOL .bSetUnitsType( eUNITS_CURR ); m_oPnlCHGTOL .bSetUnitsType( eUNITS_CHRG ); m_oPnlDTMIN .bSetUnitsType( eUNITS_TIME ); m_oPnlDTRATIO .bSetUnitsType( eUNITS_EXP ); m_oPnlGMIN .bSetUnitsType( eUNITS_COND ); m_oPnlROUND .bSetUnitsType( eUNITS_EXP ); m_oPnlSHORT .bSetUnitsType( eUNITS_RES ); m_oPnlTEMP .bSetUnitsType( eUNITS_TMPC ); m_oPnlTNOM .bSetUnitsType( eUNITS_TMPC ); m_oPnlVFLOOR .bSetUnitsType( eUNITS_VOLT ); m_oPnlVMIN .bSetUnitsType( eUNITS_VOLT ); m_oPnlVMAX .bSetUnitsType( eUNITS_VOLT ); m_oPnlVNTOL .bSetUnitsType( eUNITS_VOLT ); m_oPnlDAMPMAX .bSetValueType( eVALUE_FLT ); m_oPnlDAMPMIN .bSetValueType( eVALUE_FLT ); m_oPnlDAMPST .bSetValueType( eVALUE_INT ); m_oPnlDEFL .bSetValueType( eVALUE_FLT ); m_oPnlDEFW .bSetValueType( eVALUE_FLT ); m_oPnlDEFAD .bSetValueType( eVALUE_SCI ); m_oPnlDEFAS .bSetValueType( eVALUE_SCI ); m_oPnlFLOOR .bSetValueType( eVALUE_SCI ); m_oPnlHARMS .bSetValueType( eVALUE_INT ); m_oPnlITERMIN .bSetValueType( eVALUE_INT ); m_oPnlITL1 .bSetValueType( eVALUE_INT ); m_oPnlITL3 .bSetValueType( eVALUE_INT ); m_oPnlITL4 .bSetValueType( eVALUE_INT ); m_oPnlITL7 .bSetValueType( eVALUE_INT ); m_oPnlITL8 .bSetValueType( eVALUE_INT ); m_oPnlRECURS .bSetValueType( eVALUE_INT ); m_oPnlRELTOL .bSetValueType( eVALUE_FLT ); m_oPnlTRANSITS.bSetValueType( eVALUE_INT ); m_oPnlTRREJECT.bSetValueType( eVALUE_FLT ); m_oPnlTRSTEPG .bSetValueType( eVALUE_SCI ); m_oPnlTRSTEPH .bSetValueType( eVALUE_SCI ); m_oPnlTRSTEPS .bSetValueType( eVALUE_FLT ); m_oPnlTRTOL .bSetValueType( eVALUE_FLT ); m_oPnlDAMPMAX .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDAMPMIN .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDAMPST .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFW .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFAD .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFAS .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlFLOOR .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlHARMS .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITERMIN .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL1 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL3 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL4 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL7 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlITL8 .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlRECURS .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlRELTOL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTEMP .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTNOM .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRANSITS.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRREJECT.bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRSTEPG .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRSTEPH .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRSTEPS .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlTRTOL .bShowUnits( PnlValue::eSHOW_LBL ); m_oPnlDEFL .bSetUnits( wxT("uMetre") ); m_oPnlDEFW .bSetUnits( wxT("uMetre") ); m_oPnlDEFAD .bSetUnits( wxT("MetreĀ²") ); m_oPnlDEFAS .bSetUnits( wxT("MetreĀ²") ); m_oPnlRELTOL .bSetUnits( wxT("%") ); m_oPnlDEFAD .bSetSpnRange( 1.0E-12, 1.0E-06 ); m_oPnlDEFAS .bSetSpnRange( 1.0E-12, 1.0E-06 ); m_oPnlFLOOR .bSetSpnRange( 1.0E-23, 1.0E-18 ); m_oPnlTRSTEPG .bSetSpnRange( 1.0E+00, 1.0E+99 ); m_oPnlTRSTEPH .bSetSpnRange( 1.0E+00, 1.0E+99 ); m_oPnlDEFL .bSetSpnRange( 0.0 , 10000.0 ); m_oPnlDEFL .bSetSpnIncSz( 1.0 , 1000.0 ); m_oPnlDEFW .bSetSpnRange( 0.0 , 10000.0 ); m_oPnlDEFW .bSetSpnIncSz( 1.0 , 1000.0 ); m_oPnlTRREJECT.bSetSpnRange( 0.01, 100.0 ); m_oPnlTRREJECT.bSetSpnIncSz( 0.01, 10.0 ); m_oPnlTRSTEPS .bSetSpnRange( 0.01, 100.0 ); m_oPnlTRSTEPS .bSetSpnIncSz( 0.01, 10.0 ); m_oPnlDAMPMAX .bSetSpnRange( 0.0 , 1.0 ); m_oPnlDAMPMAX .bSetSpnIncSz( 0.01, 0.1 ); m_oPnlDAMPMIN .bSetSpnRange( 0.0 , 1.0 ); m_oPnlDAMPMIN .bSetSpnIncSz( 0.01, 0.1 ); m_oPnlRELTOL .bSetSpnRange( 0.01, 100.0 ); m_oPnlRELTOL .bSetSpnIncSz( 0.01, 10.0 ); m_oPnlTRTOL .bSetSpnRange( 0.01, 100.0 ); m_oPnlTRTOL .bSetSpnIncSz( 0.01, 10.0 ); m_oPnlDAMPST .bSetSpnRange( 0, 37 ); m_oPnlDAMPST .bSetSpnIncSz( 1, 1 ); m_oPnlHARMS .bSetSpnRange( 1, 100 ); m_oPnlHARMS .bSetSpnIncSz( 1, 10 ); m_oPnlITL1 .bSetSpnRange( 0, 1000 ); m_oPnlITL1 .bSetSpnIncSz( 1, 100 ); m_oPnlITL3 .bSetSpnRange( 0, 1000 ); m_oPnlITL3 .bSetSpnIncSz( 1, 100 ); m_oPnlITL4 .bSetSpnRange( 0, 1000 ); m_oPnlITL4 .bSetSpnIncSz( 1, 100 ); m_oPnlITL7 .bSetSpnRange( 0, 1000 ); m_oPnlITL7 .bSetSpnIncSz( 1, 100 ); m_oPnlITL8 .bSetSpnRange( 0, 1000 ); m_oPnlITL8 .bSetSpnIncSz( 1, 100 ); m_oPnlITERMIN .bSetSpnRange( 0, 1000 ); m_oPnlITERMIN .bSetSpnIncSz( 1, 100 ); m_oPnlRECURS .bSetSpnRange( 0, 1000 ); m_oPnlRECURS .bSetSpnIncSz( 1, 100 ); m_oPnlTRANSITS.bSetSpnRange( 1, 100 ); m_oPnlTRANSITS.bSetSpnIncSz( 1, 10 ); // Create the choice box controls m_oChoMETHOD.bCreate( poPnlRHS1, ID_CHO_METHOD, iWdName, iWdValue ); m_oChoMETHOD.m_oLblName.SetLabel( wxT("METHOD") ); m_oChoMETHOD.m_oChoice.Append( wxT("Euler") ); m_oChoMETHOD.m_oChoice.Append( wxT("EulerOnly") ); m_oChoMETHOD.m_oChoice.Append( wxT("Trap") ); m_oChoMETHOD.m_oChoice.Append( wxT("TrapOnly") ); m_oChoMODE .bCreate( poPnlRHS1, ID_CHO_MODE, iWdName, iWdValue ); m_oChoMODE .m_oLblName.SetLabel( wxT("MODE") ); m_oChoMODE .m_oChoice.Append( wxT("Analog") ); m_oChoMODE .m_oChoice.Append( wxT("Digital") ); m_oChoMODE .m_oChoice.Append( wxT("Mixed") ); m_oChoORDER .bCreate( poPnlRHS1, ID_CHO_ORDER, iWdName, iWdValue ); m_oChoORDER .m_oLblName.SetLabel( wxT("ORDER") ); m_oChoORDER .m_oChoice.Append( wxT("Forward") ); m_oChoORDER .m_oChoice.Append( wxT("Reverse") ); m_oChoORDER .m_oChoice.Append( wxT("Auto") ); // Set height of check box controls according to size of PnlValue object oSizeCbx.SetWidth ( 250 ); oSizeCbx.SetHeight( GUI_CTRL_HT+3 ); // Create the check box controls m_oCbxBYPASS .Create( poPnlRHS1, ID_CBX_BYPASS , wxT("BYPASS \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxCSTRAY .Create( poPnlRHS1, ID_CBX_CSTRAY , wxT("CSTRAY \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxFBBYPASS.Create( poPnlRHS1, ID_CBX_FBBYPASS, wxT("FBBYPASS \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxINCMODE .Create( poPnlRHS1, ID_CBX_INCMODE , wxT("INCMODE \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxLUBYPASS.Create( poPnlRHS1, ID_CBX_LUBYPASS, wxT("LUBYPASS \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxOPTS .Create( poPnlRHS1, ID_CBX_OPTS , wxT("OPTS \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxQUITCONV.Create( poPnlRHS1, ID_CBX_QUITCONV, wxT("QUITCONV \t ") , wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxRSTRAY .Create( poPnlRHS1, ID_CBX_RSTRAY , wxT("RSTRAY \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); m_oCbxTRACEL .Create( poPnlRHS1, ID_CBX_TRACEL , wxT("TRACEL \t\t "), wxDefaultPosition, oSizeCbx, wxALIGN_RIGHT ); // Create the buttons m_oBtnOk .Create( poPnlBtns, ID_BTN_OK , wxT("OK") ); m_oBtnDefaults.Create( poPnlBtns, ID_BTN_DEFAULTS, wxT("Defaults") ); m_oBtnCancel .Create( poPnlBtns, ID_BTN_CANCEL , wxT("Cancel") ); } //************************************************************************************************** // Initialize the tool tips. void DlgGcpCfgOPT::ToolTips( void ) { // Define tool tips for each control m_oPnlABSTOL .SetToolTip( wxT(" Absolute current error tolerance ") ); m_oPnlCHGTOL .SetToolTip( wxT(" Charge tolerance ") ); m_oPnlDAMPMAX .SetToolTip( wxT(" Normal Newton damping factor (when all is well) ") ); m_oPnlDAMPMIN .SetToolTip( wxT(" Newton damping factor when there's a problem ") ); m_oPnlDAMPST .SetToolTip( wxT(" Damping strategy ") ); m_oPnlDEFL .SetToolTip( wxT(" MOSFET default channel length ") ); m_oPnlDEFW .SetToolTip( wxT(" MOSFET default channel width ") ); m_oPnlDEFAD .SetToolTip( wxT(" MOSFET default drain diffusion area ") ); m_oPnlDEFAS .SetToolTip( wxT(" MOSFET default source diffusion area ") ); m_oPnlDTMIN .SetToolTip( wxT(" Minimum time step ") ); m_oPnlDTRATIO .SetToolTip( wxT(" Ratio between the minimum and maximum time step ") ); m_oPnlFLOOR .SetToolTip( wxT(" Effective zero value ") ); m_oPnlGMIN .SetToolTip( wxT(" Minimum allowable conductance ") ); m_oPnlHARMS .SetToolTip( wxT(" Harmonics in Fourier analysis ") ); m_oPnlITERMIN .SetToolTip( wxT(" Number of extra iterations after convergence ") ); m_oPnlITL1 .SetToolTip( wxT(" DC iteration limit ") ); m_oPnlITL3 .SetToolTip( wxT(" Transient lower iteration limit ") ); m_oPnlITL4 .SetToolTip( wxT(" Transient upper iteration limit ") ); m_oPnlITL7 .SetToolTip( wxT(" Worst case analysis iteration limit ") ); m_oPnlITL8 .SetToolTip( wxT(" Convergence diagnostic iteration threshold ") ); m_oPnlRECURS .SetToolTip( wxT(" Limit recursion levels in expression evaluation ") ); m_oPnlRELTOL .SetToolTip( wxT(" Relative error tolerance ") ); m_oPnlROUND .SetToolTip( wxT(" Numeric rounding tolerance ") ); m_oPnlSHORT .SetToolTip( wxT(" Resistance of voltage source or short ") ); m_oPnlTEMP .SetToolTip( wxT(" Ambient / operating temperature of the circuit when simulated ") ); m_oPnlTNOM .SetToolTip( wxT(" Nominal temperature at which device parameters were measured ") ); m_oPnlTRANSITS.SetToolTip( wxT(" Mixed mode transition count ") ); m_oPnlTRREJECT.SetToolTip( wxT(" Transient error rejection threshold ") ); m_oPnlTRSTEPG .SetToolTip( wxT(" Maximum internal step size growth in Transient analysis ") ); m_oPnlTRSTEPH .SetToolTip( wxT(" Maximum internal step size growth in TR analysis when iteration exceeds it13 but still converges ") ); m_oPnlTRSTEPS .SetToolTip( wxT(" Amount to shrink step size when convergence fails in TR anaylis ") ); m_oPnlTRTOL .SetToolTip( wxT(" Transient analysis error tolerance ") ); m_oPnlVFLOOR .SetToolTip( wxT(" Effective zero value for voltage probes ") ); m_oPnlVMAX .SetToolTip( wxT(" Positive node voltage limit ") ); m_oPnlVMIN .SetToolTip( wxT(" Negative node voltage limit ") ); m_oPnlVNTOL .SetToolTip( wxT(" Absolute voltage error tolerance ") ); m_oCbxBYPASS .SetToolTip( wxT(" Bypass model evaluation if appropriate ") ); m_oCbxCSTRAY .SetToolTip( wxT(" Include capacitance in device models ") ); m_oCbxFBBYPASS.SetToolTip( wxT(" Skip matrix solution the last iteration ") ); m_oCbxINCMODE .SetToolTip( wxT(" Incrementally update the matrix ") ); m_oCbxLUBYPASS.SetToolTip( wxT(" Bypass parts of LU decomposition if appropriate ") ); m_oCbxOPTS .SetToolTip( wxT(" Enable printing of option values ") ); m_oCbxQUITCONV.SetToolTip( wxT(" Quit on convergence failure in TR analysis ") ); m_oCbxRSTRAY .SetToolTip( wxT(" Include series resistance in device models ") ); m_oCbxTRACEL .SetToolTip( wxT(" Use a queue to only load changed elements to the matrix ") ); m_oChoMETHOD.GetParent( )->SetToolTip( wxT(" Numerical integration method ") ); m_oChoMODE .GetParent( )->SetToolTip( wxT(" Simulation mode selection ") ); m_oChoORDER .GetParent( )->SetToolTip( wxT(" Equation ordering ") ); } //************************************************************************************************** // Layout the dialog display objects. void DlgGcpCfgOPT::DoLayout( void ) { wxBoxSizer * poSzrDlg; wxPanel * poPnlLHS, * poPnlMID, * poPnlRHS, * poPnlRHS1, * poPnlBtns; wxBoxSizer * poSzrLHS, * poSzrMID, * poSzrRHS, * poSzrRHS1, * poSzrBtns; wxSizerFlags oFlags; // Get pointers to the various panels poPnlLHS = (wxPanel *) m_oPnlABSTOL.GetParent( ); poPnlMID = (wxPanel *) m_oPnlTEMP .GetParent( ); poPnlRHS1 = (wxPanel *) m_oCbxBYPASS.GetParent( ); poPnlBtns = (wxPanel *) m_oBtnOk .GetParent( ); poPnlRHS = (wxPanel *) poPnlBtns ->GetParent( ); // Create sizers to associate with the panels poSzrDlg = new wxBoxSizer ( wxHORIZONTAL ); poSzrLHS = new wxStaticBoxSizer( wxVERTICAL, poPnlLHS , wxT("") ); poSzrMID = new wxStaticBoxSizer( wxVERTICAL, poPnlMID , wxT("") ); poSzrRHS1 = new wxStaticBoxSizer( wxVERTICAL, poPnlRHS1, wxT("") ); poSzrBtns = new wxBoxSizer ( wxHORIZONTAL ); poSzrRHS = new wxBoxSizer ( wxVERTICAL ); // Set the sizers to the panels SetSizer( poSzrDlg ); poPnlLHS ->SetSizer( poSzrLHS ); poPnlMID ->SetSizer( poSzrMID ); poPnlRHS ->SetSizer( poSzrRHS ); poPnlRHS1->SetSizer( poSzrRHS1 ); poPnlBtns->SetSizer( poSzrBtns ); // Layout the left hand panel oFlags.Align( wxALIGN_LEFT ); oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrLHS->Add( &m_oPnlABSTOL , oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrLHS->Add( &m_oPnlCHGTOL , oFlags ); poSzrLHS->Add( &m_oPnlRELTOL , oFlags ); poSzrLHS->Add( &m_oPnlTRTOL , oFlags ); poSzrLHS->Add( &m_oPnlVNTOL , oFlags ); poSzrLHS->Add( &m_oPnlDAMPST , oFlags ); poSzrLHS->Add( &m_oPnlDAMPMAX , oFlags ); poSzrLHS->Add( &m_oPnlDAMPMIN , oFlags ); poSzrLHS->Add( &m_oPnlDEFL , oFlags ); poSzrLHS->Add( &m_oPnlDEFW , oFlags ); poSzrLHS->Add( &m_oPnlDEFAD , oFlags ); poSzrLHS->Add( &m_oPnlDEFAS , oFlags ); poSzrLHS->Add( &m_oPnlDTMIN , oFlags ); poSzrLHS->Add( &m_oPnlDTRATIO , oFlags ); poSzrLHS->Add( &m_oPnlGMIN , oFlags ); poSzrLHS->Add( &m_oPnlROUND , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrLHS->Add( &m_oPnlSHORT , oFlags ); // Layout the middle panel oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrMID->Add( &m_oPnlTEMP , oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrMID->Add( &m_oPnlTNOM , oFlags ); poSzrMID->Add( &m_oPnlTRREJECT, oFlags ); poSzrMID->Add( &m_oPnlTRSTEPG , oFlags ); poSzrMID->Add( &m_oPnlTRSTEPH , oFlags ); poSzrMID->Add( &m_oPnlTRSTEPS , oFlags ); poSzrMID->Add( &m_oPnlFLOOR , oFlags ); poSzrMID->Add( &m_oPnlVFLOOR , oFlags ); poSzrMID->Add( &m_oPnlVMAX , oFlags ); poSzrMID->Add( &m_oPnlVMIN , oFlags ); poSzrMID->Add( &m_oPnlITL1 , oFlags ); poSzrMID->Add( &m_oPnlITL3 , oFlags ); poSzrMID->Add( &m_oPnlITL4 , oFlags ); poSzrMID->Add( &m_oPnlITL7 , oFlags ); poSzrMID->Add( &m_oPnlITL8 , oFlags ); poSzrMID->Add( &m_oPnlITERMIN , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 10 ); poSzrMID->Add( &m_oPnlHARMS , oFlags ); // Layout the right hand options panel oFlags.Border( wxTOP | wxLEFT | wxRIGHT, 10 ); poSzrRHS1->Add( &m_oPnlRECURS , oFlags ); oFlags.Border( wxLEFT , 10 ); poSzrRHS1->Add( &m_oPnlTRANSITS, oFlags ); poSzrRHS1->Add( &m_oChoMETHOD , oFlags ); poSzrRHS1->Add( &m_oChoMODE , oFlags ); poSzrRHS1->Add( &m_oChoORDER , oFlags ); oFlags.Border( wxLEFT , 7 ); poSzrRHS1->Add( &m_oCbxBYPASS , oFlags ); poSzrRHS1->Add( &m_oCbxCSTRAY , oFlags ); poSzrRHS1->Add( &m_oCbxFBBYPASS, oFlags ); poSzrRHS1->Add( &m_oCbxINCMODE , oFlags ); poSzrRHS1->Add( &m_oCbxLUBYPASS, oFlags ); poSzrRHS1->Add( &m_oCbxOPTS , oFlags ); poSzrRHS1->Add( &m_oCbxQUITCONV, oFlags ); poSzrRHS1->Add( &m_oCbxRSTRAY , oFlags ); oFlags.Border( wxLEFT | wxBOTTOM , 7 ); poSzrRHS1->Add( &m_oCbxTRACEL , oFlags ); // Layout the buttons panel oFlags.Align( wxALIGN_RIGHT ); oFlags.Border( wxTOP | wxBOTTOM , 12 ); poSzrBtns->Add( &m_oBtnOk , oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_CENTER ); poSzrBtns->Add( &m_oBtnDefaults, oFlags ); poSzrBtns->AddSpacer( 10 ); oFlags.Align( wxALIGN_LEFT ); poSzrBtns->Add( &m_oBtnCancel , oFlags ); // Layout the right hand panel oFlags.Align( wxALIGN_CENTER ); oFlags.Border( wxALL , 0 ); poSzrRHS->Add( poPnlRHS1 , oFlags ); oFlags.Border( wxTOP , 35 ); poSzrRHS->Add( poPnlBtns , oFlags ); // Layout the overall dialog oFlags.Border( wxALL , 15 ); poSzrDlg->Add( poPnlLHS , oFlags ); oFlags.Border( wxTOP | wxBOTTOM , 15 ); poSzrDlg->Add( poPnlMID , oFlags ); oFlags.Border( wxALL , 15 ); poSzrDlg->Add( poPnlRHS , oFlags ); // Set dialogues minimum size and initial size as calculated by the sizer poSzrLHS ->SetSizeHints( poPnlLHS ); poSzrMID ->SetSizeHints( poPnlMID ); poSzrRHS1->SetSizeHints( poPnlRHS1 ); poSzrBtns->SetSizeHints( poPnlBtns ); poSzrRHS ->SetSizeHints( poPnlRHS ); poSzrDlg ->SetSizeHints( this ); } //************************************************************************************************** // Get a pointer to a value panel associated with a control ID number. // // Argument List : // iPnlID - The control ID number // // Return Values : // Success - A pointer to the value panel // Failure - NULL PnlValue * DlgGcpCfgOPT::poGetPanel( int iPnlID ) { switch( iPnlID ) { case ID_PNL_ABSTOL : return( &m_oPnlABSTOL ); case ID_PNL_CHGTOL : return( &m_oPnlCHGTOL ); case ID_PNL_DAMPMAX : return( &m_oPnlDAMPMAX ); case ID_PNL_DAMPMIN : return( &m_oPnlDAMPMIN ); case ID_PNL_DAMPST : return( &m_oPnlDAMPST ); case ID_PNL_DEFL : return( &m_oPnlDEFL ); case ID_PNL_DEFW : return( &m_oPnlDEFW ); case ID_PNL_DEFAD : return( &m_oPnlDEFAD ); case ID_PNL_DEFAS : return( &m_oPnlDEFAS ); case ID_PNL_DTMIN : return( &m_oPnlDTMIN ); case ID_PNL_DTRATIO : return( &m_oPnlDTRATIO ); case ID_PNL_FLOOR : return( &m_oPnlFLOOR ); case ID_PNL_GMIN : return( &m_oPnlGMIN ); case ID_PNL_HARMS : return( &m_oPnlHARMS ); case ID_PNL_ITERMIN : return( &m_oPnlITERMIN ); case ID_PNL_ITL1 : return( &m_oPnlITL1 ); case ID_PNL_ITL3 : return( &m_oPnlITL3 ); case ID_PNL_ITL4 : return( &m_oPnlITL4 ); case ID_PNL_ITL7 : return( &m_oPnlITL7 ); case ID_PNL_ITL8 : return( &m_oPnlITL8 ); case ID_PNL_RECURS : return( &m_oPnlRECURS ); case ID_PNL_RELTOL : return( &m_oPnlRELTOL ); case ID_PNL_ROUND : return( &m_oPnlROUND ); case ID_PNL_SHORT : return( &m_oPnlSHORT ); case ID_PNL_TEMP : return( &m_oPnlTEMP ); case ID_PNL_TNOM : return( &m_oPnlTNOM ); case ID_PNL_TRANSITS : return( &m_oPnlTRANSITS ); case ID_PNL_TRREJECT : return( &m_oPnlTRREJECT ); case ID_PNL_TRSTEPG : return( &m_oPnlTRSTEPG ); case ID_PNL_TRSTEPH : return( &m_oPnlTRSTEPH ); case ID_PNL_TRSTEPS : return( &m_oPnlTRSTEPS ); case ID_PNL_TRTOL : return( &m_oPnlTRTOL ); case ID_PNL_VFLOOR : return( &m_oPnlVFLOOR ); case ID_PNL_VMAX : return( &m_oPnlVMAX ); case ID_PNL_VMIN : return( &m_oPnlVMIN ); case ID_PNL_VNTOL : return( &m_oPnlVNTOL ); default : return( NULL ); } } //************************************************************************************************** // Set the values in the value panel controls. // // Argument List : // rosCmdOPT - A reference to an OPTION command object void DlgGcpCfgOPT::SetValues( CmdGnuCapOPT & roCmdOPT ) { wxString os1; uint ui1; SetEvtHandlerEnabled( false ); m_oPnlABSTOL .bSetValue( roCmdOPT.m_osABSTOL ); m_oPnlCHGTOL .bSetValue( roCmdOPT.m_osCHGTOL ); m_oPnlDAMPMAX .bSetValue( roCmdOPT.m_osDAMPMAX ); m_oPnlDAMPMIN .bSetValue( roCmdOPT.m_osDAMPMIN ); m_oPnlDAMPST .bSetValue( roCmdOPT.m_osDAMPST ); m_oPnlDEFL .bSetValue( roCmdOPT.m_osDEFL ); m_oPnlDEFW .bSetValue( roCmdOPT.m_osDEFW ); m_oPnlDEFAD .bSetValue( roCmdOPT.m_osDEFAD ); m_oPnlDEFAS .bSetValue( roCmdOPT.m_osDEFAS ); m_oPnlDTMIN .bSetValue( roCmdOPT.m_osDTMIN ); m_oPnlDTRATIO .bSetValue( roCmdOPT.m_osDTRATIO ); m_oPnlFLOOR .bSetValue( roCmdOPT.m_osFLOOR ); m_oPnlGMIN .bSetValue( roCmdOPT.m_osGMIN ); m_oPnlHARMS .bSetValue( roCmdOPT.m_osHARMS ); m_oPnlITERMIN .bSetValue( roCmdOPT.m_osITERMIN ); m_oPnlITL1 .bSetValue( roCmdOPT.m_osITL1 ); m_oPnlITL3 .bSetValue( roCmdOPT.m_osITL3 ); m_oPnlITL4 .bSetValue( roCmdOPT.m_osITL4 ); m_oPnlITL7 .bSetValue( roCmdOPT.m_osITL7 ); m_oPnlITL8 .bSetValue( roCmdOPT.m_osITL8 ); m_oPnlRECURS .bSetValue( roCmdOPT.m_osRECURS ); m_oPnlRELTOL .bSetValue( roCmdOPT.m_osRELTOL ); m_oPnlROUND .bSetValue( roCmdOPT.m_osROUND ); m_oPnlSHORT .bSetValue( roCmdOPT.m_osSHORT ); m_oPnlTEMP .bSetValue( roCmdOPT.m_osTEMP ); m_oPnlTNOM .bSetValue( roCmdOPT.m_osTNOM ); m_oPnlTRANSITS.bSetValue( roCmdOPT.m_osTRANSITS ); m_oPnlTRREJECT.bSetValue( roCmdOPT.m_osTRREJECT ); m_oPnlTRSTEPG .bSetValue( roCmdOPT.m_osTRSTEPG ); m_oPnlTRSTEPH .bSetValue( roCmdOPT.m_osTRSTEPH ); m_oPnlTRSTEPS .bSetValue( roCmdOPT.m_osTRSTEPS ); m_oPnlTRTOL .bSetValue( roCmdOPT.m_osTRTOL ); m_oPnlVFLOOR .bSetValue( roCmdOPT.m_osVFLOOR ); m_oPnlVMAX .bSetValue( roCmdOPT.m_osVMAX ); m_oPnlVMIN .bSetValue( roCmdOPT.m_osVMIN ); m_oPnlVNTOL .bSetValue( roCmdOPT.m_osVNTOL ); m_oCbxBYPASS . SetValue( roCmdOPT.m_bBYPASS ); m_oCbxCSTRAY . SetValue( roCmdOPT.m_bCSTRAY ); m_oCbxFBBYPASS. SetValue( roCmdOPT.m_bFBBYPASS ); m_oCbxINCMODE . SetValue( roCmdOPT.m_bINCMODE ); m_oCbxLUBYPASS. SetValue( roCmdOPT.m_bLUBYPASS ); m_oCbxOPTS . SetValue( roCmdOPT.m_bOPTS ); m_oCbxQUITCONV. SetValue( roCmdOPT.m_bQUITCONV ); m_oCbxRSTRAY . SetValue( roCmdOPT.m_bRSTRAY ); m_oCbxTRACEL . SetValue( roCmdOPT.m_bTRACEL ); for( ui1=0; ui1bSetValue( rosValue ) ) return( false ); // Create the OPTIONS command string m_oCmdOPT.bFormat( ); return( true ); } //************************************************************************************************** // Get a value panel control's value. // // Argument List : // iPnlID - Value panel control identifier // // Return Values : // Success - The panel value // Failure - 0.0 const wxString & DlgGcpCfgOPT::rosGetValue( int iPnlID ) { static wxString osEmpty; PnlValue * poPnlValue; poPnlValue = poGetPanel( iPnlID ); if( poPnlValue == NULL ) return( osEmpty ); return( poPnlValue->rosGetValue( ) ); } //************************************************************************************************** // Event Handlers * //************************************************************************************************** // Ok button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgGcpCfgOPT::OnBtnOk( wxCommandEvent & roEvtCmd ) { GetValues( m_oCmdOPT ); EndModal( wxID_OK ); } //************************************************************************************************** // Defaults button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgGcpCfgOPT::OnBtnDefaults( wxCommandEvent & roEvtCmd ) { CmdGnuCapOPT oCmdOPT; oCmdOPT.bSetDefaults( ); SetValues( oCmdOPT ); } //************************************************************************************************** // Cancel button event handler. // // Argument List : // roEvtCmd - An object holding information about the event (not used) void DlgGcpCfgOPT::OnBtnCancel( wxCommandEvent & roEvtCmd ) { SetValues( m_oCmdOPT ); EndModal( wxID_CANCEL ); } //**************************************************************************************************