From 61818578fb5baf2df5f45934b22f10a626e133a0 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 9 Aug 2015 09:15:42 +0200 Subject: [PATCH] PCB calculator enhancement: track width units change auto-recalculation: * Automatically update results on input change * Allow user to specify trace width and calculate maximum current it can handle * Allow the trace thickness to be set separately for external and internal layers * Allow specification of the resistivity * Change the non-editable text boxes (resistance, power loss etc) to labels --- .../dialogs/pcb_calculator_frame_base.cpp | 448 +-- .../dialogs/pcb_calculator_frame_base.fbp | 2987 +++++++++-------- .../dialogs/pcb_calculator_frame_base.h | 41 +- pcb_calculator/pcb_calculator.h | 97 +- pcb_calculator/pcb_calculator_frame.cpp | 4 +- .../tracks_width_versus_current.cpp | 455 ++- 6 files changed, 2369 insertions(+), 1663 deletions(-) diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp index e08d290d81..f2ec27c835 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jun 5 2014) +// C++ code generated with wxFormBuilder (version Mar 21 2015) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -60,7 +60,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow wxStaticBoxSizer* sbSizerRegFormula; sbSizerRegFormula = new wxStaticBoxSizer( new wxStaticBox( m_panelRegulators, wxID_ANY, _("Formula") ), wxVERTICAL ); - m_RegulFormula = new wxStaticText( m_panelRegulators, wxID_ANY, _("Vout = Vref * (R1 + R2) / R2"), wxDefaultPosition, wxDefaultSize, 0 ); + m_RegulFormula = new wxStaticText( sbSizerRegFormula->GetStaticBox(), wxID_ANY, _("Vout = Vref * (R1 + R2) / R2"), wxDefaultPosition, wxDefaultSize, 0 ); m_RegulFormula->Wrap( -1 ); m_RegulFormula->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); @@ -189,11 +189,11 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow sbSizerRegulatorsChooser = new wxStaticBoxSizer( new wxStaticBox( m_panelRegulators, wxID_ANY, _("Regulator") ), wxVERTICAL ); wxArrayString m_choiceRegulatorSelectorChoices; - m_choiceRegulatorSelector = new wxChoice( m_panelRegulators, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceRegulatorSelectorChoices, 0 ); + m_choiceRegulatorSelector = new wxChoice( sbSizerRegulatorsChooser->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceRegulatorSelectorChoices, 0 ); m_choiceRegulatorSelector->SetSelection( 0 ); sbSizerRegulatorsChooser->Add( m_choiceRegulatorSelector, 0, wxALL|wxEXPAND, 5 ); - m_staticTextRegFile = new wxStaticText( m_panelRegulators, wxID_ANY, _("Regulators data file:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextRegFile = new wxStaticText( sbSizerRegulatorsChooser->GetStaticBox(), wxID_ANY, _("Regulators data file:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextRegFile->Wrap( -1 ); m_staticTextRegFile->SetToolTip( _("The name of the data file which stores known regulators parameters.") ); @@ -202,11 +202,11 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow wxBoxSizer* bSizerDataFile; bSizerDataFile = new wxBoxSizer( wxHORIZONTAL ); - m_regulators_fileNameCtrl = new wxTextCtrl( m_panelRegulators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_regulators_fileNameCtrl = new wxTextCtrl( sbSizerRegulatorsChooser->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_regulators_fileNameCtrl->SetMaxLength( 0 ); bSizerDataFile->Add( m_regulators_fileNameCtrl, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - m_buttonDataFile = new wxButton( m_panelRegulators, wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonDataFile = new wxButton( sbSizerRegulatorsChooser->GetStaticBox(), wxID_ANY, _("Browse"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerDataFile->Add( m_buttonDataFile, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); @@ -215,17 +215,17 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow wxBoxSizer* bSizerReulBtn; bSizerReulBtn = new wxBoxSizer( wxHORIZONTAL ); - m_buttonEditItem = new wxButton( m_panelRegulators, wxID_ANY, _("Edit Regulator"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonEditItem = new wxButton( sbSizerRegulatorsChooser->GetStaticBox(), wxID_ANY, _("Edit Regulator"), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonEditItem->SetToolTip( _("Edit the current selected regulator.") ); bSizerReulBtn->Add( m_buttonEditItem, 0, wxALL, 5 ); - m_buttonAddItem = new wxButton( m_panelRegulators, wxID_ANY, _("Add Regulator"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonAddItem = new wxButton( sbSizerRegulatorsChooser->GetStaticBox(), wxID_ANY, _("Add Regulator"), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonAddItem->SetToolTip( _("Enter a new item to the current list of available regulators") ); bSizerReulBtn->Add( m_buttonAddItem, 1, wxALL, 5 ); - m_buttonRemoveItem = new wxButton( m_panelRegulators, wxID_ANY, _("Remove Regulator"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonRemoveItem = new wxButton( sbSizerRegulatorsChooser->GetStaticBox(), wxID_ANY, _("Remove Regulator"), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonRemoveItem->SetToolTip( _("Remove an item from the current list of available regulators") ); bSizerReulBtn->Add( m_buttonRemoveItem, 1, wxALL, 5 ); @@ -247,19 +247,16 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_panelRegulators->SetSizer( bSizerMainReg ); m_panelRegulators->Layout(); bSizerMainReg->Fit( m_panelRegulators ); - m_Notebook->AddPage( m_panelRegulators, _("Regulators"), true ); + m_Notebook->AddPage( m_panelRegulators, _("Regulators"), false ); m_panelTrackWidth = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerTrackWidth; bSizerTrackWidth = new wxBoxSizer( wxHORIZONTAL ); + wxBoxSizer* bSizeLeft; + bSizeLeft = new wxBoxSizer( wxVERTICAL ); + wxStaticBoxSizer* sbSizerTW_Prms; - sbSizerTW_Prms = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("Parameters:") ), wxVERTICAL ); - - m_staticTextTW_WarningMessage = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Valid max values:\n35A for external traces and 17.5A for internal.\n400mil widths.\nMaximum temperature rise of 100 deg C."), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextTW_WarningMessage->Wrap( -1 ); - m_staticTextTW_WarningMessage->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - - sbSizerTW_Prms->Add( m_staticTextTW_WarningMessage, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + sbSizerTW_Prms = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("Parameters") ), wxVERTICAL ); wxFlexGridSizer* fgSizerTWprms; fgSizerTWprms = new wxFlexGridSizer( 4, 3, 0, 0 ); @@ -267,138 +264,152 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizerTWprms->SetFlexibleDirection( wxBOTH ); fgSizerTWprms->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticTextCurrent = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Current"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCurrent = new wxStaticText( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, _("Current"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextCurrent->Wrap( -1 ); - fgSizerTWprms->Add( m_staticTextCurrent, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + fgSizerTWprms->Add( m_staticTextCurrent, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); - m_TrackCurrentValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_TrackCurrentValue = new wxTextCtrl( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_TrackCurrentValue->SetMaxLength( 0 ); - fgSizerTWprms->Add( m_TrackCurrentValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + fgSizerTWprms->Add( m_TrackCurrentValue, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); - m_staticText62 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("A"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText62 = new wxStaticText( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, _("A"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText62->Wrap( -1 ); fgSizerTWprms->Add( m_staticText62, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText63 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Temperature rise"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText63 = new wxStaticText( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, _("Temperature rise"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText63->Wrap( -1 ); fgSizerTWprms->Add( m_staticText63, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_TrackDeltaTValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_TrackDeltaTValue = new wxTextCtrl( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_TrackDeltaTValue->SetMaxLength( 0 ); - fgSizerTWprms->Add( m_TrackDeltaTValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + fgSizerTWprms->Add( m_TrackDeltaTValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); - m_staticText64 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("deg C"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText64 = new wxStaticText( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, _("deg C"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText64->Wrap( -1 ); fgSizerTWprms->Add( m_staticText64, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText65 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Cu thickness"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText65->Wrap( -1 ); - fgSizerTWprms->Add( m_staticText65, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); - - m_TrackThicknessValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_TrackThicknessValue->SetMaxLength( 0 ); - fgSizerTWprms->Add( m_TrackThicknessValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - wxArrayString m_TW_CuThickness_choiceUnitChoices; - m_TW_CuThickness_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_CuThickness_choiceUnitChoices, 0 ); - m_TW_CuThickness_choiceUnit->SetSelection( 0 ); - fgSizerTWprms->Add( m_TW_CuThickness_choiceUnit, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - m_staticText66 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Conductor length"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText66 = new wxStaticText( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, _("Conductor length"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText66->Wrap( -1 ); fgSizerTWprms->Add( m_staticText66, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); - m_TrackLengthValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_TrackLengthValue = new wxTextCtrl( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_TrackLengthValue->SetMaxLength( 0 ); - fgSizerTWprms->Add( m_TrackLengthValue, 0, wxEXPAND|wxALL, 5 ); + fgSizerTWprms->Add( m_TrackLengthValue, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); wxArrayString m_TW_CuLength_choiceUnitChoices; - m_TW_CuLength_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_CuLength_choiceUnitChoices, 0 ); + m_TW_CuLength_choiceUnit = new UNIT_SELECTOR_LEN( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_CuLength_choiceUnitChoices, 0 ); m_TW_CuLength_choiceUnit->SetSelection( 0 ); - fgSizerTWprms->Add( m_TW_CuLength_choiceUnit, 0, wxEXPAND|wxALL, 5 ); + fgSizerTWprms->Add( m_TW_CuLength_choiceUnit, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); + + m_staticText103 = new wxStaticText( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, _("Resistivity"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText103->Wrap( -1 ); + fgSizerTWprms->Add( m_staticText103, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_TWResistivity = new wxTextCtrl( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTWprms->Add( m_TWResistivity, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); + + m_staticText104 = new wxStaticText( sbSizerTW_Prms->GetStaticBox(), wxID_ANY, _("Ohm-meter"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText104->Wrap( -1 ); + fgSizerTWprms->Add( m_staticText104, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); sbSizerTW_Prms->Add( fgSizerTWprms, 0, wxEXPAND, 5 ); + + bSizeLeft->Add( sbSizerTW_Prms, 1, wxALL|wxEXPAND, 5 ); + m_htmlWinFormulas = new wxHtmlWindow( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO|wxSIMPLE_BORDER ); - sbSizerTW_Prms->Add( m_htmlWinFormulas, 1, wxEXPAND|wxTOP, 5 ); + m_htmlWinFormulas->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_htmlWinFormulas->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + + bSizeLeft->Add( m_htmlWinFormulas, 1, wxEXPAND|wxTOP, 5 ); - bSizerTrackWidth->Add( sbSizerTW_Prms, 1, wxALL|wxEXPAND, 5 ); - - m_buttonTW = new wxButton( m_panelTrackWidth, wxID_ANY, _(">>>"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); - bSizerTrackWidth->Add( m_buttonTW, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + bSizerTrackWidth->Add( bSizeLeft, 1, wxEXPAND, 5 ); wxBoxSizer* bSizeRight; bSizeRight = new wxBoxSizer( wxVERTICAL ); wxStaticBoxSizer* sbSizerTW_Result; - sbSizerTW_Result = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("Track Characteristics (External Layers):") ), wxVERTICAL ); + sbSizerTW_Result = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("External layer traces") ), wxVERTICAL ); wxFlexGridSizer* fgSizerTW_Results; - fgSizerTW_Results = new wxFlexGridSizer( 5, 3, 0, 0 ); + fgSizerTW_Results = new wxFlexGridSizer( 6, 3, 0, 0 ); fgSizerTW_Results->AddGrowableCol( 1 ); fgSizerTW_Results->SetFlexibleDirection( wxBOTH ); fgSizerTW_Results->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticTextWidth = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Required trace width"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextWidth->Wrap( -1 ); - fgSizerTW_Results->Add( m_staticTextWidth, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + m_staticTextExtWidth = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("Trace width"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextExtWidth->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticTextExtWidth, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT, 5 ); - m_ExtTrackWidthValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_ExtTrackWidthValue = new wxTextCtrl( sbSizerTW_Result->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_ExtTrackWidthValue->SetMaxLength( 0 ); - fgSizerTW_Results->Add( m_ExtTrackWidthValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + fgSizerTW_Results->Add( m_ExtTrackWidthValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); wxArrayString m_TW_ExtTrackWidth_choiceUnitChoices; - m_TW_ExtTrackWidth_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_ExtTrackWidth_choiceUnitChoices, 0 ); + m_TW_ExtTrackWidth_choiceUnit = new UNIT_SELECTOR_LEN( sbSizerTW_Result->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_ExtTrackWidth_choiceUnitChoices, 0 ); m_TW_ExtTrackWidth_choiceUnit->SetSelection( 0 ); - fgSizerTW_Results->Add( m_TW_ExtTrackWidth_choiceUnit, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + fgSizerTW_Results->Add( m_TW_ExtTrackWidth_choiceUnit, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); - m_staticTextArea = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Cross-section area"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText65 = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("Trace thickness"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText65->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticText65, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); + + m_ExtTrackThicknessValue = new wxTextCtrl( sbSizerTW_Result->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_ExtTrackThicknessValue->SetMaxLength( 0 ); + fgSizerTW_Results->Add( m_ExtTrackThicknessValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + wxArrayString m_ExtTrackThicknessUnitChoices; + m_ExtTrackThicknessUnit = new UNIT_SELECTOR_LEN( sbSizerTW_Result->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ExtTrackThicknessUnitChoices, 0 ); + m_ExtTrackThicknessUnit->SetSelection( 0 ); + fgSizerTW_Results->Add( m_ExtTrackThicknessUnit, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); + + m_staticTextArea = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("Cross-section area"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextArea->Wrap( -1 ); fgSizerTW_Results->Add( m_staticTextArea, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_ExtTrackAreaValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_ExtTrackAreaValue->SetMaxLength( 0 ); - fgSizerTW_Results->Add( m_ExtTrackAreaValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + m_ExtTrackAreaValue = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_ExtTrackAreaValue->Wrap( -1 ); + fgSizerTW_Results->Add( m_ExtTrackAreaValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); - m_ExtTrackAreaUnitLabel = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("mm ^ 2"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ExtTrackAreaUnitLabel = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("mm ^ 2"), wxDefaultPosition, wxDefaultSize, 0 ); m_ExtTrackAreaUnitLabel->Wrap( -1 ); fgSizerTW_Results->Add( m_ExtTrackAreaUnitLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText651 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Resistance"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText651 = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("Resistance"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText651->Wrap( -1 ); fgSizerTW_Results->Add( m_staticText651, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); - m_ExtTrackResistValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_ExtTrackResistValue->SetMaxLength( 0 ); - fgSizerTW_Results->Add( m_ExtTrackResistValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + m_ExtTrackResistValue = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_ExtTrackResistValue->Wrap( -1 ); + fgSizerTW_Results->Add( m_ExtTrackResistValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); - m_staticText84 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText84 = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText84->Wrap( -1 ); fgSizerTW_Results->Add( m_staticText84, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText661 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Voltage drop"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText661 = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("Voltage drop"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText661->Wrap( -1 ); fgSizerTW_Results->Add( m_staticText661, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); - m_ExtTrackVDropValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_ExtTrackVDropValue->SetMaxLength( 0 ); - fgSizerTW_Results->Add( m_ExtTrackVDropValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + m_ExtTrackVDropValue = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_ExtTrackVDropValue->Wrap( -1 ); + fgSizerTW_Results->Add( m_ExtTrackVDropValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); - m_staticText83 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Volt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText83 = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("Volt"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText83->Wrap( -1 ); fgSizerTW_Results->Add( m_staticText83, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText79 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Loss"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText79 = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("Power loss"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText79->Wrap( -1 ); fgSizerTW_Results->Add( m_staticText79, 0, wxRIGHT|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - m_ExtTrackLossValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_ExtTrackLossValue->SetMaxLength( 0 ); - fgSizerTW_Results->Add( m_ExtTrackLossValue, 0, wxALL|wxEXPAND, 5 ); + m_ExtTrackLossValue = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_ExtTrackLossValue->Wrap( -1 ); + fgSizerTW_Results->Add( m_ExtTrackLossValue, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); - m_staticText791 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Watt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText791 = new wxStaticText( sbSizerTW_Result->GetStaticBox(), wxID_ANY, _("Watt"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText791->Wrap( -1 ); fgSizerTW_Results->Add( m_staticText791, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); @@ -409,7 +420,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow bSizeRight->Add( sbSizerTW_Result, 1, wxEXPAND|wxALL, 5 ); wxStaticBoxSizer* sbSizerTW_Result1; - sbSizerTW_Result1 = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("Track Characteristics (Internal Layers):") ), wxVERTICAL ); + sbSizerTW_Result1 = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("Internal layer traces") ), wxVERTICAL ); wxFlexGridSizer* fgSizerTW_Results1; fgSizerTW_Results1 = new wxFlexGridSizer( 6, 3, 0, 0 ); @@ -417,64 +428,77 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizerTW_Results1->SetFlexibleDirection( wxBOTH ); fgSizerTW_Results1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_staticTextWidth11 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Required trace width"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticTextWidth11->Wrap( -1 ); - fgSizerTW_Results1->Add( m_staticTextWidth11, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + m_staticTextIntWidth = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("Trace width"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextIntWidth->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticTextIntWidth, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); - m_IntTrackWidthValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_IntTrackWidthValue = new wxTextCtrl( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_IntTrackWidthValue->SetMaxLength( 0 ); - fgSizerTW_Results1->Add( m_IntTrackWidthValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + fgSizerTW_Results1->Add( m_IntTrackWidthValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); wxArrayString m_TW_IntTrackWidth_choiceUnitChoices; - m_TW_IntTrackWidth_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_IntTrackWidth_choiceUnitChoices, 0 ); + m_TW_IntTrackWidth_choiceUnit = new UNIT_SELECTOR_LEN( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_IntTrackWidth_choiceUnitChoices, 0 ); m_TW_IntTrackWidth_choiceUnit->SetSelection( 0 ); fgSizerTW_Results1->Add( m_TW_IntTrackWidth_choiceUnit, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - m_staticTextArea1 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Cross-section area"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText652 = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("Trace thickness"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText652->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticText652, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); + + m_IntTrackThicknessValue = new wxTextCtrl( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_IntTrackThicknessValue->SetMaxLength( 0 ); + fgSizerTW_Results1->Add( m_IntTrackThicknessValue, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); + + wxArrayString m_IntTrackThicknessUnitChoices; + m_IntTrackThicknessUnit = new UNIT_SELECTOR_LEN( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_IntTrackThicknessUnitChoices, 0 ); + m_IntTrackThicknessUnit->SetSelection( 0 ); + fgSizerTW_Results1->Add( m_IntTrackThicknessUnit, 0, wxALL, 5 ); + + m_staticTextArea1 = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("Cross-section area"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextArea1->Wrap( -1 ); fgSizerTW_Results1->Add( m_staticTextArea1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_IntTrackAreaValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_IntTrackAreaValue->SetMaxLength( 0 ); - fgSizerTW_Results1->Add( m_IntTrackAreaValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + m_IntTrackAreaValue = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_IntTrackAreaValue->Wrap( -1 ); + fgSizerTW_Results1->Add( m_IntTrackAreaValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); - m_IntTrackAreaUnitLabel = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("mm ^ 2"), wxDefaultPosition, wxDefaultSize, 0 ); + m_IntTrackAreaUnitLabel = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("mm ^ 2"), wxDefaultPosition, wxDefaultSize, 0 ); m_IntTrackAreaUnitLabel->Wrap( -1 ); fgSizerTW_Results1->Add( m_IntTrackAreaUnitLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText6511 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Resistance"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText6511 = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("Resistance"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText6511->Wrap( -1 ); fgSizerTW_Results1->Add( m_staticText6511, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); - m_IntTrackResistValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_IntTrackResistValue->SetMaxLength( 0 ); - fgSizerTW_Results1->Add( m_IntTrackResistValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + m_IntTrackResistValue = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_IntTrackResistValue->Wrap( -1 ); + fgSizerTW_Results1->Add( m_IntTrackResistValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); - m_staticText841 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText841 = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText841->Wrap( -1 ); fgSizerTW_Results1->Add( m_staticText841, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText6611 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Voltage drop"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText6611 = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("Voltage drop"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText6611->Wrap( -1 ); fgSizerTW_Results1->Add( m_staticText6611, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); - m_IntTrackVDropValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_IntTrackVDropValue->SetMaxLength( 0 ); - fgSizerTW_Results1->Add( m_IntTrackVDropValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + m_IntTrackVDropValue = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_IntTrackVDropValue->Wrap( -1 ); + fgSizerTW_Results1->Add( m_IntTrackVDropValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 ); - m_staticText831 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Volt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText831 = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("Volt"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText831->Wrap( -1 ); fgSizerTW_Results1->Add( m_staticText831, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_staticText792 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Loss"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText792 = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("Power loss"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText792->Wrap( -1 ); fgSizerTW_Results1->Add( m_staticText792, 0, wxRIGHT|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - m_IntTrackLossValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_IntTrackLossValue->SetMaxLength( 0 ); - fgSizerTW_Results1->Add( m_IntTrackLossValue, 0, wxALL|wxEXPAND, 5 ); + m_IntTrackLossValue = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_IntTrackLossValue->Wrap( -1 ); + fgSizerTW_Results1->Add( m_IntTrackLossValue, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 ); - m_staticText7911 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Watt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText7911 = new wxStaticText( sbSizerTW_Result1->GetStaticBox(), wxID_ANY, _("Watt"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText7911->Wrap( -1 ); fgSizerTW_Results1->Add( m_staticText7911, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); @@ -491,7 +515,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_panelTrackWidth->SetSizer( bSizerTrackWidth ); m_panelTrackWidth->Layout(); bSizerTrackWidth->Fit( m_panelTrackWidth ); - m_Notebook->AddPage( m_panelTrackWidth, _("Track Width"), false ); + m_Notebook->AddPage( m_panelTrackWidth, _("Track Width"), true ); m_panelElectricalSpacing = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerElectricalClearance; bSizerElectricalClearance = new wxBoxSizer( wxHORIZONTAL ); @@ -620,116 +644,116 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizerSubstPrms->SetFlexibleDirection( wxBOTH ); fgSizerSubstPrms->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_EpsilonR_label = new wxStaticText( m_panelTransline, wxID_ANY, _("Er"), wxDefaultPosition, wxDefaultSize, 0 ); + m_EpsilonR_label = new wxStaticText( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("Er"), wxDefaultPosition, wxDefaultSize, 0 ); m_EpsilonR_label->Wrap( -1 ); fgSizerSubstPrms->Add( m_EpsilonR_label, 0, wxRIGHT|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - m_Value_EpsilonR = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Value_EpsilonR = new wxTextCtrl( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Value_EpsilonR->SetMaxLength( 0 ); fgSizerSubstPrms->Add( m_Value_EpsilonR, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_button_EpsilonR = new wxButton( m_panelTransline, wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); + m_button_EpsilonR = new wxButton( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); fgSizerSubstPrms->Add( m_button_EpsilonR, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_TanD_label = new wxStaticText( m_panelTransline, wxID_ANY, _("TanD"), wxDefaultPosition, wxDefaultSize, 0 ); + m_TanD_label = new wxStaticText( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("TanD"), wxDefaultPosition, wxDefaultSize, 0 ); m_TanD_label->Wrap( -1 ); fgSizerSubstPrms->Add( m_TanD_label, 0, wxRIGHT|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); - m_Value_TanD = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Value_TanD = new wxTextCtrl( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Value_TanD->SetMaxLength( 0 ); fgSizerSubstPrms->Add( m_Value_TanD, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - m_button_TanD = new wxButton( m_panelTransline, wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); + m_button_TanD = new wxButton( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); fgSizerSubstPrms->Add( m_button_TanD, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_Rho_label = new wxStaticText( m_panelTransline, wxID_ANY, _("Rho"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Rho_label = new wxStaticText( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("Rho"), wxDefaultPosition, wxDefaultSize, 0 ); m_Rho_label->Wrap( -1 ); m_Rho_label->SetToolTip( _("Specific resistance in ohms * meters") ); fgSizerSubstPrms->Add( m_Rho_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Value_Rho = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Value_Rho = new wxTextCtrl( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Value_Rho->SetMaxLength( 0 ); fgSizerSubstPrms->Add( m_Value_Rho, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - m_button_Rho = new wxButton( m_panelTransline, wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); + m_button_Rho = new wxButton( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("..."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); fgSizerSubstPrms->Add( m_button_Rho, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_substrate_prm4_label = new wxStaticText( m_panelTransline, wxID_ANY, _("H"), wxDefaultPosition, wxDefaultSize, 0 ); + m_substrate_prm4_label = new wxStaticText( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("H"), wxDefaultPosition, wxDefaultSize, 0 ); m_substrate_prm4_label->Wrap( -1 ); fgSizerSubstPrms->Add( m_substrate_prm4_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Substrate_prm4_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Substrate_prm4_Value = new wxTextCtrl( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Substrate_prm4_Value->SetMaxLength( 0 ); fgSizerSubstPrms->Add( m_Substrate_prm4_Value, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxArrayString m_SubsPrm4_choiceUnitChoices; - m_SubsPrm4_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm4_choiceUnitChoices, 0 ); + m_SubsPrm4_choiceUnit = new UNIT_SELECTOR_LEN( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm4_choiceUnitChoices, 0 ); m_SubsPrm4_choiceUnit->SetSelection( 0 ); fgSizerSubstPrms->Add( m_SubsPrm4_choiceUnit, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_substrate_prm5_label = new wxStaticText( m_panelTransline, wxID_ANY, _("H_t"), wxDefaultPosition, wxDefaultSize, 0 ); + m_substrate_prm5_label = new wxStaticText( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("H_t"), wxDefaultPosition, wxDefaultSize, 0 ); m_substrate_prm5_label->Wrap( -1 ); fgSizerSubstPrms->Add( m_substrate_prm5_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Substrate_prm5_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Substrate_prm5_Value = new wxTextCtrl( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Substrate_prm5_Value->SetMaxLength( 0 ); fgSizerSubstPrms->Add( m_Substrate_prm5_Value, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxArrayString m_SubsPrm5_choiceUnitChoices; - m_SubsPrm5_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm5_choiceUnitChoices, 0 ); + m_SubsPrm5_choiceUnit = new UNIT_SELECTOR_LEN( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm5_choiceUnitChoices, 0 ); m_SubsPrm5_choiceUnit->SetSelection( 0 ); fgSizerSubstPrms->Add( m_SubsPrm5_choiceUnit, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - m_substrate_prm6_label = new wxStaticText( m_panelTransline, wxID_ANY, _("T"), wxDefaultPosition, wxDefaultSize, 0 ); + m_substrate_prm6_label = new wxStaticText( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("T"), wxDefaultPosition, wxDefaultSize, 0 ); m_substrate_prm6_label->Wrap( -1 ); fgSizerSubstPrms->Add( m_substrate_prm6_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Substrate_prm6_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Substrate_prm6_Value = new wxTextCtrl( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Substrate_prm6_Value->SetMaxLength( 0 ); fgSizerSubstPrms->Add( m_Substrate_prm6_Value, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxArrayString m_SubsPrm6_choiceUnitChoices; - m_SubsPrm6_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm6_choiceUnitChoices, 0 ); + m_SubsPrm6_choiceUnit = new UNIT_SELECTOR_LEN( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm6_choiceUnitChoices, 0 ); m_SubsPrm6_choiceUnit->SetSelection( 0 ); fgSizerSubstPrms->Add( m_SubsPrm6_choiceUnit, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - m_substrate_prm7_label = new wxStaticText( m_panelTransline, wxID_ANY, _("Rough"), wxDefaultPosition, wxDefaultSize, 0 ); + m_substrate_prm7_label = new wxStaticText( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("Rough"), wxDefaultPosition, wxDefaultSize, 0 ); m_substrate_prm7_label->Wrap( -1 ); fgSizerSubstPrms->Add( m_substrate_prm7_label, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); - m_Substrate_prm7_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Substrate_prm7_Value = new wxTextCtrl( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Substrate_prm7_Value->SetMaxLength( 0 ); fgSizerSubstPrms->Add( m_Substrate_prm7_Value, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxArrayString m_SubsPrm7_choiceUnitChoices; - m_SubsPrm7_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm7_choiceUnitChoices, 0 ); + m_SubsPrm7_choiceUnit = new UNIT_SELECTOR_LEN( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm7_choiceUnitChoices, 0 ); m_SubsPrm7_choiceUnit->SetSelection( 0 ); fgSizerSubstPrms->Add( m_SubsPrm7_choiceUnit, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_substrate_prm8_label = new wxStaticText( m_panelTransline, wxID_ANY, _("mu Rel"), wxDefaultPosition, wxDefaultSize, 0 ); + m_substrate_prm8_label = new wxStaticText( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("mu Rel"), wxDefaultPosition, wxDefaultSize, 0 ); m_substrate_prm8_label->Wrap( -1 ); fgSizerSubstPrms->Add( m_substrate_prm8_label, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); - m_Substrate_prm8_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Substrate_prm8_Value = new wxTextCtrl( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Substrate_prm8_Value->SetMaxLength( 0 ); fgSizerSubstPrms->Add( m_Substrate_prm8_Value, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); wxArrayString m_SubsPrm8_choiceUnitChoices; - m_SubsPrm8_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm8_choiceUnitChoices, 0 ); + m_SubsPrm8_choiceUnit = new UNIT_SELECTOR_LEN( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm8_choiceUnitChoices, 0 ); m_SubsPrm8_choiceUnit->SetSelection( 0 ); fgSizerSubstPrms->Add( m_SubsPrm8_choiceUnit, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - m_substrate_prm9_label = new wxStaticText( m_panelTransline, wxID_ANY, _("mu Rel C"), wxDefaultPosition, wxDefaultSize, 0 ); + m_substrate_prm9_label = new wxStaticText( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, _("mu Rel C"), wxDefaultPosition, wxDefaultSize, 0 ); m_substrate_prm9_label->Wrap( -1 ); fgSizerSubstPrms->Add( m_substrate_prm9_label, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Substrate_prm9_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Substrate_prm9_Value = new wxTextCtrl( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Substrate_prm9_Value->SetMaxLength( 0 ); fgSizerSubstPrms->Add( m_Substrate_prm9_Value, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); wxArrayString m_SubsPrm9_choiceUnitChoices; - m_SubsPrm9_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm9_choiceUnitChoices, 0 ); + m_SubsPrm9_choiceUnit = new UNIT_SELECTOR_LEN( sbSubstrateBoxSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_SubsPrm9_choiceUnitChoices, 0 ); m_SubsPrm9_choiceUnit->SetSelection( 0 ); fgSizerSubstPrms->Add( m_SubsPrm9_choiceUnit, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); @@ -748,16 +772,16 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizeCmpPrms->SetFlexibleDirection( wxBOTH ); fgSizeCmpPrms->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_Frequency_label = new wxStaticText( m_panelTransline, wxID_ANY, _("Frequency"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Frequency_label = new wxStaticText( sbCmpPrmsSizer->GetStaticBox(), wxID_ANY, _("Frequency"), wxDefaultPosition, wxDefaultSize, 0 ); m_Frequency_label->Wrap( -1 ); fgSizeCmpPrms->Add( m_Frequency_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Value_Frequency_Ctrl = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Value_Frequency_Ctrl = new wxTextCtrl( sbCmpPrmsSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Value_Frequency_Ctrl->SetMaxLength( 0 ); fgSizeCmpPrms->Add( m_Value_Frequency_Ctrl, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxArrayString m_choiceUnit_FrequencyChoices; - m_choiceUnit_Frequency = new UNIT_SELECTOR_FREQUENCY( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_FrequencyChoices, 0 ); + m_choiceUnit_Frequency = new UNIT_SELECTOR_FREQUENCY( sbCmpPrmsSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_FrequencyChoices, 0 ); m_choiceUnit_Frequency->SetSelection( 0 ); fgSizeCmpPrms->Add( m_choiceUnit_Frequency, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); @@ -785,48 +809,48 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizerPhysPrms->SetFlexibleDirection( wxBOTH ); fgSizerPhysPrms->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_phys_prm1_label = new wxStaticText( m_panelTransline, wxID_ANY, _("Prm1"), wxDefaultPosition, wxDefaultSize, 0 ); + m_phys_prm1_label = new wxStaticText( btranslineRightSizer->GetStaticBox(), wxID_ANY, _("Prm1"), wxDefaultPosition, wxDefaultSize, 0 ); m_phys_prm1_label->Wrap( -1 ); fgSizerPhysPrms->Add( m_phys_prm1_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Phys_prm1_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Phys_prm1_Value = new wxTextCtrl( btranslineRightSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Phys_prm1_Value->SetMaxLength( 0 ); fgSizerPhysPrms->Add( m_Phys_prm1_Value, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxArrayString m_choiceUnit_Param1Choices; - m_choiceUnit_Param1 = new UNIT_SELECTOR_LEN( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_Param1Choices, 0 ); + m_choiceUnit_Param1 = new UNIT_SELECTOR_LEN( btranslineRightSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_Param1Choices, 0 ); m_choiceUnit_Param1->SetSelection( 0 ); fgSizerPhysPrms->Add( m_choiceUnit_Param1, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_radioBtnPrm1 = new wxRadioButton( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); + m_radioBtnPrm1 = new wxRadioButton( btranslineRightSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); fgSizerPhysPrms->Add( m_radioBtnPrm1, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_phys_prm2_label = new wxStaticText( m_panelTransline, wxID_ANY, _("prm2"), wxDefaultPosition, wxDefaultSize, 0 ); + m_phys_prm2_label = new wxStaticText( btranslineRightSizer->GetStaticBox(), wxID_ANY, _("prm2"), wxDefaultPosition, wxDefaultSize, 0 ); m_phys_prm2_label->Wrap( -1 ); fgSizerPhysPrms->Add( m_phys_prm2_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Phys_prm2_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Phys_prm2_Value = new wxTextCtrl( btranslineRightSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Phys_prm2_Value->SetMaxLength( 0 ); fgSizerPhysPrms->Add( m_Phys_prm2_Value, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxArrayString m_choiceUnit_Param2Choices; - m_choiceUnit_Param2 = new UNIT_SELECTOR_LEN( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_Param2Choices, 0 ); + m_choiceUnit_Param2 = new UNIT_SELECTOR_LEN( btranslineRightSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_Param2Choices, 0 ); m_choiceUnit_Param2->SetSelection( 0 ); fgSizerPhysPrms->Add( m_choiceUnit_Param2, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_radioBtnPrm2 = new wxRadioButton( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_radioBtnPrm2 = new wxRadioButton( btranslineRightSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizerPhysPrms->Add( m_radioBtnPrm2, 0, wxALIGN_CENTER_VERTICAL, 5 ); - m_phys_prm3_label = new wxStaticText( m_panelTransline, wxID_ANY, _("prm3"), wxDefaultPosition, wxDefaultSize, 0 ); + m_phys_prm3_label = new wxStaticText( btranslineRightSizer->GetStaticBox(), wxID_ANY, _("prm3"), wxDefaultPosition, wxDefaultSize, 0 ); m_phys_prm3_label->Wrap( -1 ); fgSizerPhysPrms->Add( m_phys_prm3_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Phys_prm3_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Phys_prm3_Value = new wxTextCtrl( btranslineRightSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Phys_prm3_Value->SetMaxLength( 0 ); fgSizerPhysPrms->Add( m_Phys_prm3_Value, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxArrayString m_choiceUnit_Param3Choices; - m_choiceUnit_Param3 = new UNIT_SELECTOR_LEN( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_Param3Choices, 0 ); + m_choiceUnit_Param3 = new UNIT_SELECTOR_LEN( btranslineRightSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_Param3Choices, 0 ); m_choiceUnit_Param3->SetSelection( 0 ); fgSizerPhysPrms->Add( m_choiceUnit_Param3, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); @@ -875,42 +899,42 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizerResults->SetFlexibleDirection( wxBOTH ); fgSizerResults->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_elec_prm1_label = new wxStaticText( m_panelTransline, wxID_ANY, _("Z"), wxDefaultPosition, wxDefaultSize, 0 ); + m_elec_prm1_label = new wxStaticText( sbElectricalResultsSizer->GetStaticBox(), wxID_ANY, _("Z"), wxDefaultPosition, wxDefaultSize, 0 ); m_elec_prm1_label->Wrap( -1 ); fgSizerResults->Add( m_elec_prm1_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Elec_prm1_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Elec_prm1_Value = new wxTextCtrl( sbElectricalResultsSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Elec_prm1_Value->SetMaxLength( 0 ); fgSizerResults->Add( m_Elec_prm1_Value, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); wxArrayString m_choiceUnit_ElecPrm1Choices; - m_choiceUnit_ElecPrm1 = new UNIT_SELECTOR_RESISTOR( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_ElecPrm1Choices, 0 ); + m_choiceUnit_ElecPrm1 = new UNIT_SELECTOR_RESISTOR( sbElectricalResultsSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_ElecPrm1Choices, 0 ); m_choiceUnit_ElecPrm1->SetSelection( 0 ); fgSizerResults->Add( m_choiceUnit_ElecPrm1, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - m_elec_prm2_label = new wxStaticText( m_panelTransline, wxID_ANY, _("Z"), wxDefaultPosition, wxDefaultSize, 0 ); + m_elec_prm2_label = new wxStaticText( sbElectricalResultsSizer->GetStaticBox(), wxID_ANY, _("Z"), wxDefaultPosition, wxDefaultSize, 0 ); m_elec_prm2_label->Wrap( -1 ); fgSizerResults->Add( m_elec_prm2_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Elec_prm2_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Elec_prm2_Value = new wxTextCtrl( sbElectricalResultsSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Elec_prm2_Value->SetMaxLength( 0 ); fgSizerResults->Add( m_Elec_prm2_Value, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); wxArrayString m_choiceUnit_ElecPrm2Choices; - m_choiceUnit_ElecPrm2 = new UNIT_SELECTOR_RESISTOR( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_ElecPrm2Choices, 0 ); + m_choiceUnit_ElecPrm2 = new UNIT_SELECTOR_RESISTOR( sbElectricalResultsSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_ElecPrm2Choices, 0 ); m_choiceUnit_ElecPrm2->SetSelection( 0 ); fgSizerResults->Add( m_choiceUnit_ElecPrm2, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_elec_prm3_label = new wxStaticText( m_panelTransline, wxID_ANY, _("Angle"), wxDefaultPosition, wxDefaultSize, 0 ); + m_elec_prm3_label = new wxStaticText( sbElectricalResultsSizer->GetStaticBox(), wxID_ANY, _("Angle"), wxDefaultPosition, wxDefaultSize, 0 ); m_elec_prm3_label->Wrap( -1 ); fgSizerResults->Add( m_elec_prm3_label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Elec_prm3_Value = new wxTextCtrl( m_panelTransline, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Elec_prm3_Value = new wxTextCtrl( sbElectricalResultsSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Elec_prm3_Value->SetMaxLength( 0 ); fgSizerResults->Add( m_Elec_prm3_Value, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); wxArrayString m_choiceUnit_ElecPrm3Choices; - m_choiceUnit_ElecPrm3 = new UNIT_SELECTOR_ANGLE( m_panelTransline, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_ElecPrm3Choices, 0 ); + m_choiceUnit_ElecPrm3 = new UNIT_SELECTOR_ANGLE( sbElectricalResultsSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceUnit_ElecPrm3Choices, 0 ); m_choiceUnit_ElecPrm3->SetSelection( 0 ); fgSizerResults->Add( m_choiceUnit_ElecPrm3, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); @@ -929,59 +953,59 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizerTranslResults->SetFlexibleDirection( wxBOTH ); fgSizerTranslResults->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_left_message1 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_left_message1 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message1->Wrap( -1 ); fgSizerTranslResults->Add( m_left_message1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Message1 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Message1 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message1->Wrap( -1 ); fgSizerTranslResults->Add( m_Message1, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_left_message2 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_left_message2 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message2->Wrap( -1 ); fgSizerTranslResults->Add( m_left_message2, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Message2 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Message2 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message2->Wrap( -1 ); fgSizerTranslResults->Add( m_Message2, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_left_message3 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_left_message3 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message3->Wrap( -1 ); fgSizerTranslResults->Add( m_left_message3, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Message3 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Message3 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message3->Wrap( -1 ); fgSizerTranslResults->Add( m_Message3, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_left_message4 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_left_message4 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message4->Wrap( -1 ); fgSizerTranslResults->Add( m_left_message4, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Message4 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Message4 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message4->Wrap( -1 ); fgSizerTranslResults->Add( m_Message4, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_left_message5 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_left_message5 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message5->Wrap( -1 ); fgSizerTranslResults->Add( m_left_message5, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxALIGN_RIGHT, 5 ); - m_Message5 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Message5 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message5->Wrap( -1 ); fgSizerTranslResults->Add( m_Message5, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_left_message6 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_left_message6 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message6->Wrap( -1 ); fgSizerTranslResults->Add( m_left_message6, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Message6 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Message6 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message6->Wrap( -1 ); fgSizerTranslResults->Add( m_Message6, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); - m_left_message7 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_left_message7 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message7->Wrap( -1 ); fgSizerTranslResults->Add( m_left_message7, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); - m_Message7 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Message7 = new wxStaticText( sbMessagesSizer->GetStaticBox(), wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message7->Wrap( -1 ); fgSizerTranslResults->Add( m_Message7, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 ); @@ -1008,11 +1032,11 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow wxString m_AttenuatorsSelectionChoices[] = { _("PI"), _("Tee"), _("Bridged Tee"), _("Resistive Splitter") }; int m_AttenuatorsSelectionNChoices = sizeof( m_AttenuatorsSelectionChoices ) / sizeof( wxString ); - m_AttenuatorsSelection = new wxRadioBox( m_panelAttenuators, wxID_ANY, _("Attenuators:"), wxDefaultPosition, wxDefaultSize, m_AttenuatorsSelectionNChoices, m_AttenuatorsSelectionChoices, 1, wxRA_SPECIFY_COLS ); + m_AttenuatorsSelection = new wxRadioBox( sbSizerAtt->GetStaticBox(), wxID_ANY, _("Attenuators:"), wxDefaultPosition, wxDefaultSize, m_AttenuatorsSelectionNChoices, m_AttenuatorsSelectionChoices, 1, wxRA_SPECIFY_COLS ); m_AttenuatorsSelection->SetSelection( 0 ); bLeftSizerAtt->Add( m_AttenuatorsSelection, 0, wxEXPAND|wxALL, 5 ); - m_panelDisplayAttenuator = new wxPanel( m_panelAttenuators, wxID_ANY, wxDefaultPosition, wxSize( 256,256 ), wxSIMPLE_BORDER|wxTAB_TRAVERSAL ); + m_panelDisplayAttenuator = new wxPanel( sbSizerAtt->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( 256,256 ), wxSIMPLE_BORDER|wxTAB_TRAVERSAL ); bLeftSizerAtt->Add( m_panelDisplayAttenuator, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); @@ -1022,7 +1046,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow bMiddleSizerAtt = new wxBoxSizer( wxVERTICAL ); wxStaticBoxSizer* sbSizerAttPrms; - sbSizerAttPrms = new wxStaticBoxSizer( new wxStaticBox( m_panelAttenuators, wxID_ANY, _("Parameters:") ), wxVERTICAL ); + sbSizerAttPrms = new wxStaticBoxSizer( new wxStaticBox( sbSizerAtt->GetStaticBox(), wxID_ANY, _("Parameters:") ), wxVERTICAL ); wxFlexGridSizer* fgSizerAttPrms; fgSizerAttPrms = new wxFlexGridSizer( 3, 3, 0, 0 ); @@ -1030,39 +1054,39 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizerAttPrms->SetFlexibleDirection( wxBOTH ); fgSizerAttPrms->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_attenuationLabel = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Attenuation"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attenuationLabel = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Attenuation"), wxDefaultPosition, wxDefaultSize, 0 ); m_attenuationLabel->Wrap( -1 ); fgSizerAttPrms->Add( m_attenuationLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_AttValueCtrl = new wxTextCtrl( m_panelAttenuators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_AttValueCtrl = new wxTextCtrl( sbSizerAttPrms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_AttValueCtrl->SetMaxLength( 0 ); fgSizerAttPrms->Add( m_AttValueCtrl, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_attUnit = new wxStaticText( m_panelAttenuators, wxID_ANY, _("dB"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attUnit = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("dB"), wxDefaultPosition, wxDefaultSize, 0 ); m_attUnit->Wrap( -1 ); fgSizerAttPrms->Add( m_attUnit, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_attenuationZinLabel = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Zin"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attenuationZinLabel = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Zin"), wxDefaultPosition, wxDefaultSize, 0 ); m_attenuationZinLabel->Wrap( -1 ); fgSizerAttPrms->Add( m_attenuationZinLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_ZinValueCtrl = new wxTextCtrl( m_panelAttenuators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_ZinValueCtrl = new wxTextCtrl( sbSizerAttPrms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_ZinValueCtrl->SetMaxLength( 0 ); fgSizerAttPrms->Add( m_ZinValueCtrl, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_attZinUnit = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attZinUnit = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); m_attZinUnit->Wrap( -1 ); fgSizerAttPrms->Add( m_attZinUnit, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_ZoutLabel = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Zout"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ZoutLabel = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Zout"), wxDefaultPosition, wxDefaultSize, 0 ); m_ZoutLabel->Wrap( -1 ); fgSizerAttPrms->Add( m_ZoutLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_ZoutValueCtrl = new wxTextCtrl( m_panelAttenuators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_ZoutValueCtrl = new wxTextCtrl( sbSizerAttPrms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_ZoutValueCtrl->SetMaxLength( 0 ); fgSizerAttPrms->Add( m_ZoutValueCtrl, 0, wxALL, 5 ); - m_attZoutUnit = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attZoutUnit = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); m_attZoutUnit->Wrap( -1 ); fgSizerAttPrms->Add( m_attZoutUnit, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); @@ -1075,17 +1099,17 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow wxBoxSizer* bSizerAttButt; bSizerAttButt = new wxBoxSizer( wxHORIZONTAL ); - m_buttonAlcAtt = new wxButton( m_panelAttenuators, wxID_ANY, _("Calculate"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonAlcAtt = new wxButton( sbSizerAtt->GetStaticBox(), wxID_ANY, _("Calculate"), wxDefaultPosition, wxDefaultSize, 0 ); bSizerAttButt->Add( m_buttonAlcAtt, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); - m_bitmapAnalyse1 = new wxStaticBitmap( m_panelAttenuators, wxID_ANY, wxBitmap( arrow_bottom_xpm ), wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapAnalyse1 = new wxStaticBitmap( sbSizerAtt->GetStaticBox(), wxID_ANY, wxBitmap( arrow_bottom_xpm ), wxDefaultPosition, wxDefaultSize, 0 ); bSizerAttButt->Add( m_bitmapAnalyse1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); bMiddleSizerAtt->Add( bSizerAttButt, 0, wxALIGN_CENTER_HORIZONTAL, 5 ); wxStaticBoxSizer* sbSizerAttValues; - sbSizerAttValues = new wxStaticBoxSizer( new wxStaticBox( m_panelAttenuators, wxID_ANY, _("Values") ), wxVERTICAL ); + sbSizerAttValues = new wxStaticBoxSizer( new wxStaticBox( sbSizerAtt->GetStaticBox(), wxID_ANY, _("Values") ), wxVERTICAL ); wxFlexGridSizer* fgSizerAttResults; fgSizerAttResults = new wxFlexGridSizer( 3, 3, 0, 0 ); @@ -1093,39 +1117,39 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizerAttResults->SetFlexibleDirection( wxBOTH ); fgSizerAttResults->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - m_attenuatorR1Label = new wxStaticText( m_panelAttenuators, wxID_ANY, _("R1"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attenuatorR1Label = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("R1"), wxDefaultPosition, wxDefaultSize, 0 ); m_attenuatorR1Label->Wrap( -1 ); fgSizerAttResults->Add( m_attenuatorR1Label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_Att_R1_Value = new wxTextCtrl( m_panelAttenuators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Att_R1_Value = new wxTextCtrl( sbSizerAttValues->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Att_R1_Value->SetMaxLength( 0 ); fgSizerAttResults->Add( m_Att_R1_Value, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_attR1Unit = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attR1Unit = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); m_attR1Unit->Wrap( -1 ); fgSizerAttResults->Add( m_attR1Unit, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_attenuatorR2Label = new wxStaticText( m_panelAttenuators, wxID_ANY, _("R2"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attenuatorR2Label = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("R2"), wxDefaultPosition, wxDefaultSize, 0 ); m_attenuatorR2Label->Wrap( -1 ); fgSizerAttResults->Add( m_attenuatorR2Label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_Att_R2_Value = new wxTextCtrl( m_panelAttenuators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Att_R2_Value = new wxTextCtrl( sbSizerAttValues->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Att_R2_Value->SetMaxLength( 0 ); fgSizerAttResults->Add( m_Att_R2_Value, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_attR2Unit1 = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attR2Unit1 = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); m_attR2Unit1->Wrap( -1 ); fgSizerAttResults->Add( m_attR2Unit1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_attenuatorR3Label = new wxStaticText( m_panelAttenuators, wxID_ANY, _("R3"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attenuatorR3Label = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("R3"), wxDefaultPosition, wxDefaultSize, 0 ); m_attenuatorR3Label->Wrap( -1 ); fgSizerAttResults->Add( m_attenuatorR3Label, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - m_Att_R3_Value = new wxTextCtrl( m_panelAttenuators, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_Att_R3_Value = new wxTextCtrl( sbSizerAttValues->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_Att_R3_Value->SetMaxLength( 0 ); fgSizerAttResults->Add( m_Att_R3_Value, 0, wxALL, 5 ); - m_attR3Unit = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); + m_attR3Unit = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 ); m_attR3Unit->Wrap( -1 ); fgSizerAttResults->Add( m_attR3Unit, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); @@ -1135,20 +1159,20 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow bMiddleSizerAtt->Add( sbSizerAttValues, 0, wxEXPAND|wxTOP, 5 ); - m_staticTextAttMsg = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextAttMsg = new wxStaticText( sbSizerAtt->GetStaticBox(), wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextAttMsg->Wrap( -1 ); bMiddleSizerAtt->Add( m_staticTextAttMsg, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_Attenuator_Messages = new wxHtmlWindow( m_panelAttenuators, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO|wxSUNKEN_BORDER ); + m_Attenuator_Messages = new wxHtmlWindow( sbSizerAtt->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO|wxSUNKEN_BORDER ); bMiddleSizerAtt->Add( m_Attenuator_Messages, 1, wxALL|wxEXPAND, 5 ); sbSizerAtt->Add( bMiddleSizerAtt, 0, wxEXPAND, 5 ); wxStaticBoxSizer* sbRightSizerFormula; - sbRightSizerFormula = new wxStaticBoxSizer( new wxStaticBox( m_panelAttenuators, wxID_ANY, _("Formula") ), wxVERTICAL ); + sbRightSizerFormula = new wxStaticBoxSizer( new wxStaticBox( sbSizerAtt->GetStaticBox(), wxID_ANY, _("Formula") ), wxVERTICAL ); - m_panelAttFormula = new wxPanel( m_panelAttenuators, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxSIMPLE_BORDER|wxTAB_TRAVERSAL ); + m_panelAttFormula = new wxPanel( sbRightSizerFormula->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxSIMPLE_BORDER|wxTAB_TRAVERSAL ); m_panelAttFormula->SetMinSize( wxSize( 200,-1 ) ); sbRightSizerFormula->Add( m_panelAttFormula, 1, wxALL|wxEXPAND, 5 ); @@ -1311,7 +1335,19 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_buttonEditItem->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnEditRegulator ), NULL, this ); m_buttonAddItem->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnAddRegulator ), NULL, this ); m_buttonRemoveItem->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRemoveRegulator ), NULL, this ); - m_buttonTW->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateButt ), NULL, this ); + m_TrackCurrentValue->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateFromCurrent ), NULL, this ); + m_TrackDeltaTValue->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_TrackLengthValue->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_TW_CuLength_choiceUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_TWResistivity->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_ExtTrackWidthValue->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateFromExtWidth ), NULL, this ); + m_TW_ExtTrackWidth_choiceUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_ExtTrackThicknessValue->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_ExtTrackThicknessUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_IntTrackWidthValue->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateFromIntWidth ), NULL, this ); + m_TW_IntTrackWidth_choiceUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_IntTrackThicknessValue->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_IntTrackThicknessUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); m_ElectricalSpacingUnitsSelector->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingUnitsSelection ), NULL, this ); m_buttonElectSpacingRefresh->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingRefresh ), NULL, this ); m_TranslineSelection->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineSelection ), NULL, this ); @@ -1340,7 +1376,19 @@ PCB_CALCULATOR_FRAME_BASE::~PCB_CALCULATOR_FRAME_BASE() m_buttonEditItem->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnEditRegulator ), NULL, this ); m_buttonAddItem->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnAddRegulator ), NULL, this ); m_buttonRemoveItem->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRemoveRegulator ), NULL, this ); - m_buttonTW->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateButt ), NULL, this ); + m_TrackCurrentValue->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateFromCurrent ), NULL, this ); + m_TrackDeltaTValue->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_TrackLengthValue->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_TW_CuLength_choiceUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_TWResistivity->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_ExtTrackWidthValue->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateFromExtWidth ), NULL, this ); + m_TW_ExtTrackWidth_choiceUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_ExtTrackThicknessValue->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_ExtTrackThicknessUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_IntTrackWidthValue->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateFromIntWidth ), NULL, this ); + m_TW_IntTrackWidth_choiceUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_IntTrackThicknessValue->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); + m_IntTrackThicknessUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWParametersChanged ), NULL, this ); m_ElectricalSpacingUnitsSelector->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingUnitsSelection ), NULL, this ); m_buttonElectSpacingRefresh->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnElectricalSpacingRefresh ), NULL, this ); m_TranslineSelection->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineSelection ), NULL, this ); diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp index 39d0e425c7..cbc415a99d 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp @@ -270,7 +270,7 @@ Regulators - 1 + 0 1 1 @@ -3267,7 +3267,7 @@ Track Width - 0 + 1 1 1 @@ -3349,1156 +3349,1079 @@ none 5 - wxALL|wxEXPAND + wxEXPAND 1 - - wxID_ANY - Parameters: + - sbSizerTW_Prms + bSizeLeft wxVERTICAL none - 5 - wxBOTTOM|wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - ,90,92,-1,70,0 - 0 - 0 + wxALL|wxEXPAND + 1 + wxID_ANY - Valid max values: 35A for external traces and 17.5A for internal. 400mil widths. Maximum temperature rise of 100 deg C. - - 0 - - - 0 + Parameters - 1 - m_staticTextTW_WarningMessage - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - + sbSizerTW_Prms + wxVERTICAL + none + + 5 + wxEXPAND + 0 + + 3 + wxBOTH + 1 + + 0 + + fgSizerTWprms + wxFLEX_GROWMODE_SPECIFIED + none + 4 + 0 + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Current + + 0 + + + 0 + + 1 + m_staticTextCurrent + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_TrackCurrentValue + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWCalculateFromCurrent + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + A + + 0 + + + 0 + + 1 + m_staticText62 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Temperature rise + + 0 + + + 0 + + 1 + m_staticText63 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_TrackDeltaTValue + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + deg C + + 0 + + + 0 + + 1 + m_staticText64 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Conductor length + + 0 + + + 0 + + 1 + m_staticText66 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_TrackLengthValue + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_TW_CuLength_choiceUnit + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_LEN; UnitSelector.h + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + OnTWParametersChanged + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Resistivity + + 0 + + + 0 + + 1 + m_staticText103 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_TWResistivity + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Ohm-meter + + 0 + + + 0 + + 1 + m_staticText104 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + - 5 - wxEXPAND - 0 - - 3 - wxBOTH - 1 - - 0 - - fgSizerTWprms - wxFLEX_GROWMODE_SPECIFIED - none - 4 - 0 - - 5 - wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Current - - 0 - - - 0 - - 1 - m_staticTextCurrent - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - 0 - - 0 - - 1 - m_TrackCurrentValue - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - A - - 0 - - - 0 - - 1 - m_staticText62 - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Temperature rise - - 0 - - - 0 - - 1 - m_staticText63 - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - 0 - - 0 - - 1 - m_TrackDeltaTValue - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - deg C - - 0 - - - 0 - - 1 - m_staticText64 - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Cu thickness - - 0 - - - 0 - - 1 - m_staticText65 - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - 0 - - 0 - - 1 - m_TrackThicknessValue - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - 0 - - 1 - m_TW_CuThickness_choiceUnit - 1 - - - protected - 1 - - Resizable - 0 - 1 - - - UNIT_SELECTOR_LEN; UnitSelector.h - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Conductor length - - 0 - - - 0 - - 1 - m_staticText66 - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - 0 - - 0 - - 1 - m_TrackLengthValue - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - 0 - - 1 - m_TW_CuLength_choiceUnit - 1 - - - protected - 1 - - Resizable - 0 - 1 - - - UNIT_SELECTOR_LEN; UnitSelector.h - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 wxEXPAND|wxTOP 1 @@ -4512,7 +4435,7 @@ - + wxSYS_COLOUR_WINDOW 1 0 @@ -4524,7 +4447,7 @@ 0 Left 1 - + wxSYS_COLOUR_WINDOW 1 0 @@ -4584,94 +4507,6 @@ - - 5 - wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - >>> - - 0 - - - 0 - - 1 - m_buttonTW - 1 - - - protected - 1 - - Resizable - 1 - - wxBU_EXACTFIT - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - OnTWCalculateButt - - - - - - - - - - - - - - - - - - - - - - - - - 5 wxEXPAND @@ -4687,7 +4522,7 @@ 1 wxID_ANY - Track Characteristics (External Layers): + External layer traces sbSizerTW_Result wxVERTICAL @@ -4707,11 +4542,11 @@ fgSizerTW_Results wxFLEX_GROWMODE_SPECIFIED none - 5 + 6 0 5 - wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxLEFT|wxRIGHT 0 1 @@ -4741,7 +4576,7 @@ 0 0 wxID_ANY - Required trace width + Trace width 0 @@ -4749,7 +4584,7 @@ 0 1 - m_staticTextWidth + m_staticTextExtWidth 1 @@ -4794,7 +4629,7 @@ 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 1 @@ -4876,7 +4711,7 @@ - + OnTWCalculateFromExtWidth @@ -4885,7 +4720,7 @@ 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 1 @@ -4946,7 +4781,7 @@ - + OnTWParametersChanged @@ -4971,7 +4806,269 @@ - + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Trace thickness + + 0 + + + 0 + + 1 + m_staticText65 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_ExtTrackThicknessValue + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_ExtTrackThicknessUnit + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_LEN; UnitSelector.h + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + OnTWParametersChanged + + + + + + + + + + + + + + + + + + + + + + + + + 5 wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT 0 @@ -5056,9 +5153,9 @@ 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 - + 1 1 1 @@ -5086,10 +5183,10 @@ 0 0 wxID_ANY + 0 - 0 0 @@ -5108,14 +5205,10 @@ 0 - - wxFILTER_NONE - wxDefaultValidator - - + -1 @@ -5138,10 +5231,6 @@ - - - - @@ -5313,9 +5402,9 @@ 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 - + 1 1 1 @@ -5343,10 +5432,10 @@ 0 0 wxID_ANY + 0 - 0 0 @@ -5365,14 +5454,10 @@ 0 - - wxFILTER_NONE - wxDefaultValidator - - + -1 @@ -5395,10 +5480,6 @@ - - - - @@ -5570,9 +5651,9 @@ 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 - + 1 1 1 @@ -5600,10 +5681,10 @@ 0 0 wxID_ANY + 0 - 0 0 @@ -5622,14 +5703,10 @@ 0 - - wxFILTER_NONE - wxDefaultValidator - - + -1 @@ -5652,10 +5729,6 @@ - - - - @@ -5774,7 +5847,7 @@ 0 0 wxID_ANY - Loss + Power loss 0 @@ -5827,9 +5900,9 @@ 5 - wxALL|wxEXPAND + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 - + 1 1 1 @@ -5857,10 +5930,10 @@ 0 0 wxID_ANY + 0 - 0 0 @@ -5879,14 +5952,10 @@ 0 - - wxFILTER_NONE - wxDefaultValidator - - + -1 @@ -5909,10 +5978,6 @@ - - - - @@ -6009,7 +6074,7 @@ 1 wxID_ANY - Track Characteristics (Internal Layers): + Internal layer traces sbSizerTW_Result1 wxVERTICAL @@ -6033,7 +6098,7 @@ 0 5 - wxALL|wxALIGN_CENTER_VERTICAL + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL 0 1 @@ -6063,7 +6128,7 @@ 0 0 wxID_ANY - Required trace width + Trace width 0 @@ -6071,7 +6136,7 @@ 0 1 - m_staticTextWidth11 + m_staticTextIntWidth 1 @@ -6116,7 +6181,7 @@ 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 1 @@ -6198,7 +6263,7 @@ - + OnTWCalculateFromIntWidth @@ -6268,7 +6333,7 @@ - + OnTWParametersChanged @@ -6293,7 +6358,269 @@ - + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Trace thickness + + 0 + + + 0 + + 1 + m_staticText652 + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + 0 + + 0 + + 1 + m_IntTrackThicknessValue + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnTWParametersChanged + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_IntTrackThicknessUnit + 1 + + + protected + 1 + + Resizable + 0 + 1 + + + UNIT_SELECTOR_LEN; UnitSelector.h + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + OnTWParametersChanged + + + + + + + + + + + + + + + + + + + + + + + + + 5 wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT 0 @@ -6378,9 +6705,9 @@ 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 - + 1 1 1 @@ -6408,10 +6735,10 @@ 0 0 wxID_ANY + 0 - 0 0 @@ -6430,14 +6757,10 @@ 0 - - wxFILTER_NONE - wxDefaultValidator - - + -1 @@ -6460,10 +6783,6 @@ - - - - @@ -6635,9 +6954,9 @@ 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 - + 1 1 1 @@ -6665,10 +6984,10 @@ 0 0 wxID_ANY + 0 - 0 0 @@ -6687,14 +7006,10 @@ 0 - - wxFILTER_NONE - wxDefaultValidator - - + -1 @@ -6717,10 +7032,6 @@ - - - - @@ -6892,9 +7203,9 @@ 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT|wxRIGHT|wxTOP 0 - + 1 1 1 @@ -6922,10 +7233,10 @@ 0 0 wxID_ANY + 0 - 0 0 @@ -6944,14 +7255,10 @@ 0 - - wxFILTER_NONE - wxDefaultValidator - - + -1 @@ -6974,10 +7281,6 @@ - - - - @@ -7096,7 +7399,7 @@ 0 0 wxID_ANY - Loss + Power loss 0 @@ -7149,9 +7452,9 @@ 5 - wxALL|wxEXPAND + wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND 0 - + 1 1 1 @@ -7179,10 +7482,10 @@ 0 0 wxID_ANY + 0 - 0 0 @@ -7201,14 +7504,10 @@ 0 - - wxFILTER_NONE - wxDefaultValidator - - + -1 @@ -7231,10 +7530,6 @@ - - - - diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.h b/pcb_calculator/dialogs/pcb_calculator_frame_base.h index 55e61b3c75..f85b765cd2 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.h +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jun 5 2014) +// C++ code generated with wxFormBuilder (version Mar 21 2015) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -92,50 +92,54 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER wxButton* m_buttonRemoveItem; wxStaticText* m_RegulMessage; wxPanel* m_panelTrackWidth; - wxStaticText* m_staticTextTW_WarningMessage; wxStaticText* m_staticTextCurrent; wxTextCtrl* m_TrackCurrentValue; wxStaticText* m_staticText62; wxStaticText* m_staticText63; wxTextCtrl* m_TrackDeltaTValue; wxStaticText* m_staticText64; - wxStaticText* m_staticText65; - wxTextCtrl* m_TrackThicknessValue; - UNIT_SELECTOR_LEN* m_TW_CuThickness_choiceUnit; wxStaticText* m_staticText66; wxTextCtrl* m_TrackLengthValue; UNIT_SELECTOR_LEN* m_TW_CuLength_choiceUnit; + wxStaticText* m_staticText103; + wxTextCtrl* m_TWResistivity; + wxStaticText* m_staticText104; wxHtmlWindow* m_htmlWinFormulas; - wxButton* m_buttonTW; - wxStaticText* m_staticTextWidth; + wxStaticText* m_staticTextExtWidth; wxTextCtrl* m_ExtTrackWidthValue; UNIT_SELECTOR_LEN* m_TW_ExtTrackWidth_choiceUnit; + wxStaticText* m_staticText65; + wxTextCtrl* m_ExtTrackThicknessValue; + UNIT_SELECTOR_LEN* m_ExtTrackThicknessUnit; wxStaticText* m_staticTextArea; - wxTextCtrl* m_ExtTrackAreaValue; + wxStaticText* m_ExtTrackAreaValue; wxStaticText* m_ExtTrackAreaUnitLabel; wxStaticText* m_staticText651; - wxTextCtrl* m_ExtTrackResistValue; + wxStaticText* m_ExtTrackResistValue; wxStaticText* m_staticText84; wxStaticText* m_staticText661; - wxTextCtrl* m_ExtTrackVDropValue; + wxStaticText* m_ExtTrackVDropValue; wxStaticText* m_staticText83; wxStaticText* m_staticText79; - wxTextCtrl* m_ExtTrackLossValue; + wxStaticText* m_ExtTrackLossValue; wxStaticText* m_staticText791; - wxStaticText* m_staticTextWidth11; + wxStaticText* m_staticTextIntWidth; wxTextCtrl* m_IntTrackWidthValue; UNIT_SELECTOR_LEN* m_TW_IntTrackWidth_choiceUnit; + wxStaticText* m_staticText652; + wxTextCtrl* m_IntTrackThicknessValue; + UNIT_SELECTOR_LEN* m_IntTrackThicknessUnit; wxStaticText* m_staticTextArea1; - wxTextCtrl* m_IntTrackAreaValue; + wxStaticText* m_IntTrackAreaValue; wxStaticText* m_IntTrackAreaUnitLabel; wxStaticText* m_staticText6511; - wxTextCtrl* m_IntTrackResistValue; + wxStaticText* m_IntTrackResistValue; wxStaticText* m_staticText841; wxStaticText* m_staticText6611; - wxTextCtrl* m_IntTrackVDropValue; + wxStaticText* m_IntTrackVDropValue; wxStaticText* m_staticText831; wxStaticText* m_staticText792; - wxTextCtrl* m_IntTrackLossValue; + wxStaticText* m_IntTrackLossValue; wxStaticText* m_staticText7911; wxPanel* m_panelElectricalSpacing; UNIT_SELECTOR_LEN* m_ElectricalSpacingUnitsSelector; @@ -273,7 +277,10 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER virtual void OnEditRegulator( wxCommandEvent& event ) { event.Skip(); } virtual void OnAddRegulator( wxCommandEvent& event ) { event.Skip(); } virtual void OnRemoveRegulator( wxCommandEvent& event ) { event.Skip(); } - virtual void OnTWCalculateButt( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTWCalculateFromCurrent( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTWParametersChanged( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTWCalculateFromExtWidth( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTWCalculateFromIntWidth( wxCommandEvent& event ) { event.Skip(); } virtual void OnElectricalSpacingUnitsSelection( wxCommandEvent& event ) { event.Skip(); } virtual void OnElectricalSpacingRefresh( wxCommandEvent& event ) { event.Skip(); } virtual void OnTranslineSelection( wxCommandEvent& event ) { event.Skip(); } diff --git a/pcb_calculator/pcb_calculator.h b/pcb_calculator/pcb_calculator.h index 74ddb44703..a3562c99aa 100644 --- a/pcb_calculator/pcb_calculator.h +++ b/pcb_calculator/pcb_calculator.h @@ -1,3 +1,26 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 1992-2015 Kicad Developers, see change_log.txt for contributors. + * + * 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 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /** * @file pcb_calculator.h */ @@ -26,6 +49,16 @@ private: bool m_RegulatorListChanged; // set to true when m_RegulatorList // was modified, and the corresponging file // must be rewritten + + enum // Which dimension is controlling the track + { // width / current calculations: + TW_MASTER_CURRENT, // the maximum current, + TW_MASTER_EXT_WIDTH, // the external trace width, + TW_MASTER_INT_WIDTH // or the internal trace width? + } m_TWMode; + + bool m_TWNested; // Used to stop events caused by setting the answers. + wxSize m_FrameSize; wxPoint m_FramePos; wxConfigBase* m_Config; @@ -39,6 +72,7 @@ private: wxString m_lastSelectedRegulatorName; // last regulator name selected + public: PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ); ~PCB_CALCULATOR_FRAME(); @@ -74,12 +108,7 @@ private: */ void SetDataFilename( const wxString & aFilename); - // tracks width versus current functions: - /** - * Function OnTWCalculateButt - * Called by clicking on the calculate button - */ - void OnTWCalculateButt( wxCommandEvent& event ); + // Trace width / maximum current capability calculations. /** * Function TW_Init @@ -94,12 +123,62 @@ private: void TW_WriteConfig(); /** - * Function TWCalculate - * Performs track caracteristics values calculations. + * Function OnTWParametersChanged + * Called when the user changes the general parameters (i.e., anything that + * is not one of the controlling values). This update the calculations. */ - double TWCalculate( double aCurrent, double aThickness, double aDeltaT_C, + void OnTWParametersChanged( wxCommandEvent& event ); + + /** + * Function OnTWCalculateFromCurrent + * Called when the user changes the desired maximum current. This sets the + * current as the controlling value and performs the calculations. + */ + void OnTWCalculateFromCurrent( wxCommandEvent& event ); + + /** + * Function OnTWCalculateFromExtWidth + * Called when the user changes the desired external trace width. This sets + * the external width as the controlling value and performs the calculations. + */ + void OnTWCalculateFromExtWidth( wxCommandEvent& event ); + + /** + * Function OnTWCalculateFromIntWidth + * Called when the user changes the desired internal trace width. This sets + * the internal width as the controlling value and performs the calculations. + */ + void OnTWCalculateFromIntWidth( wxCommandEvent& event ); + + /** + * Function TWCalculateWidth + * Calculate track width required based on given current and temperature rise. + */ + double TWCalculateWidth( double aCurrent, double aThickness, double aDeltaT_C, bool aUseInternalLayer ); + /** + * Function TWCalculateCurrent + * Calculate maximum current based on given width and temperature rise. + */ + double TWCalculateCurrent( double aWidth, double aThickness, double aDeltaT_C, + bool aUseInternalLayer ); + + /** + * Function TWDisplayValues + * Displays the results of a calculation (including resulting values such + * as the resistance and power loss). + */ + void TWDisplayValues( double aCurrent, double aExtWidth, double aIntWidth, + double aExtThickness, double aIntThickness ); + + /** + * Function TWUpdateModeDisplay + * Updates the fields to show whether the maximum current, external trace + * width, or internal trace width is currently the controlling parameter. + */ + void TWUpdateModeDisplay(); + // Electrical spacing panel: void OnElectricalSpacingUnitsSelection( wxCommandEvent& event ); void OnElectricalSpacingRefresh( wxCommandEvent& event ); diff --git a/pcb_calculator/pcb_calculator_frame.cpp b/pcb_calculator/pcb_calculator_frame.cpp index e79390b488..87098e4aaf 100644 --- a/pcb_calculator/pcb_calculator_frame.cpp +++ b/pcb_calculator/pcb_calculator_frame.cpp @@ -2,7 +2,7 @@ * This program source code file is part of KICAD, a free EDA CAD application. * * Copyright (C) 1992-2011 jean-pierre.charras - * Copyright (C) 1992-2011 Kicad Developers, see change_log.txt for contributors. + * Copyright (C) 1992-2015 Kicad Developers, see change_log.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -62,6 +62,8 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) : m_currTransLineType = DEFAULT_TYPE; m_currAttenuator = NULL; m_RegulatorListChanged = false; + m_TWMode = TW_MASTER_CURRENT; + m_TWNested = false; m_Config = GetNewConfig( Pgm().App().GetAppName() ); // Populate transline list ordered like in dialog menu list diff --git a/pcb_calculator/tracks_width_versus_current.cpp b/pcb_calculator/tracks_width_versus_current.cpp index 4c759bbd61..f2355c72d5 100644 --- a/pcb_calculator/tracks_width_versus_current.cpp +++ b/pcb_calculator/tracks_width_versus_current.cpp @@ -2,7 +2,7 @@ * This program source code file is part of KICAD, a free EDA CAD application. * * Copyright (C) 2011 jean-pierre.charras - * Copyright (C) 1992-2011 Kicad Developers, see change_log.txt for contributors. + * Copyright (C) 1992-2015 Kicad Developers, see change_log.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -28,6 +28,7 @@ * for more info */ +#include #include #include #include @@ -43,100 +44,321 @@ extern double DoubleFromString( const wxString& TextValue ); // Key words to read/write some parameters in config: #define KEYWORD_TW_CURRENT wxT( "TW_Track_Current" ) #define KEYWORD_TW_DELTA_TC wxT( "TW_Delta_TC" ) -#define KEYWORD_TW_TRACK_COPPER_THICKNESS wxT( "TW_Track_CopperThickness" ) #define KEYWORD_TW_TRACK_LEN wxT( "TW_Track_Len" ) -#define KEYWORD_TW_TRACK_COPPER_THICKNESS_UNIT wxT( "TW_Track_CopperThickness_Unit" ) #define KEYWORD_TW_TRACK_LEN_UNIT wxT( "TW_Track_Len_Unit" ) +#define KEYWORD_TW_RESISTIVITY wxT( "TW_Resistivity" ) +#define KEYWORD_TW_EXTTRACK_WIDTH wxT( "TW_ExtTrack_Width" ) #define KEYWORD_TW_EXTTRACK_WIDTH_UNIT wxT( "TW_ExtTrack_Width_Unit" ) +#define KEYWORD_TW_EXTTRACK_THICKNESS wxT( "TW_ExtTrack_Thickness" ) +#define KEYWORD_TW_EXTTRACK_THICKNESS_UNIT wxT( "TW_ExtTrack_Thickness_Unit" ) +#define KEYWORD_TW_INTTRACK_WIDTH wxT( "TW_IntTrack_Width" ) #define KEYWORD_TW_INTTRACK_WIDTH_UNIT wxT( "TW_IntTrack_Width_Unit" ) +#define KEYWORD_TW_INTTRACK_THICKNESS wxT( "TW_IntTrack_Thickness" ) +#define KEYWORD_TW_INTTRACK_THICKNESS_UNIT wxT( "TW_IntTrack_Thickness_Unit" ) void PCB_CALCULATOR_FRAME::TW_WriteConfig() { - // Save current parameters values in config: - m_Config->Write( KEYWORD_TW_EXTTRACK_WIDTH_UNIT, m_TW_ExtTrackWidth_choiceUnit->GetSelection() ); - m_Config->Write( KEYWORD_TW_INTTRACK_WIDTH_UNIT, m_TW_IntTrackWidth_choiceUnit->GetSelection() ); - m_Config->Write( KEYWORD_TW_TRACK_COPPER_THICKNESS_UNIT, - m_TW_CuThickness_choiceUnit->GetSelection() ); - m_Config->Write( KEYWORD_TW_TRACK_LEN_UNIT, m_TW_CuLength_choiceUnit->GetSelection() ); - m_Config->Write( KEYWORD_TW_CURRENT, m_TrackCurrentValue->GetValue() ); - m_Config->Write( KEYWORD_TW_DELTA_TC, m_TrackDeltaTValue->GetValue() ); - m_Config->Write( KEYWORD_TW_TRACK_COPPER_THICKNESS, m_TrackThicknessValue->GetValue() ); - m_Config->Write( KEYWORD_TW_TRACK_LEN, m_TrackLengthValue->GetValue() ); + // Save current parameters values in config. + m_Config->Write( KEYWORD_TW_CURRENT, m_TrackCurrentValue->GetValue() ); + m_Config->Write( KEYWORD_TW_DELTA_TC, m_TrackDeltaTValue->GetValue() ); + m_Config->Write( KEYWORD_TW_TRACK_LEN, m_TrackLengthValue->GetValue() ); + m_Config->Write( KEYWORD_TW_TRACK_LEN_UNIT, m_TW_CuLength_choiceUnit->GetSelection() ); + m_Config->Write( KEYWORD_TW_RESISTIVITY, m_TWResistivity->GetValue() ); + m_Config->Write( KEYWORD_TW_EXTTRACK_WIDTH, m_ExtTrackWidthValue->GetValue() ); + m_Config->Write( KEYWORD_TW_EXTTRACK_WIDTH_UNIT, m_TW_ExtTrackWidth_choiceUnit->GetSelection() ); + m_Config->Write( KEYWORD_TW_EXTTRACK_THICKNESS, m_ExtTrackThicknessValue->GetValue() ); + m_Config->Write( KEYWORD_TW_EXTTRACK_THICKNESS_UNIT, m_ExtTrackThicknessUnit->GetSelection() ); + m_Config->Write( KEYWORD_TW_INTTRACK_WIDTH, m_IntTrackWidthValue->GetValue() ); + m_Config->Write( KEYWORD_TW_INTTRACK_WIDTH_UNIT, m_TW_IntTrackWidth_choiceUnit->GetSelection() ); + m_Config->Write( KEYWORD_TW_INTTRACK_THICKNESS, m_IntTrackThicknessValue->GetValue() ); + m_Config->Write( KEYWORD_TW_INTTRACK_THICKNESS_UNIT, m_IntTrackThicknessUnit->GetSelection() ); } -void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) +void PCB_CALCULATOR_FRAME::OnTWParametersChanged( wxCommandEvent& event ) { + switch(m_TWMode) + { + case TW_MASTER_CURRENT: + OnTWCalculateFromCurrent( event ); + break; + case TW_MASTER_EXT_WIDTH: + OnTWCalculateFromExtWidth( event ); + break; + case TW_MASTER_INT_WIDTH: + OnTWCalculateFromIntWidth( event ); + break; + default: +#ifdef DEBUG + assert( false ); +#endif + break; + } +} + + +void PCB_CALCULATOR_FRAME::OnTWCalculateFromCurrent( wxCommandEvent& event ) +{ + // Setting the calculated values generates further events. Stop them. + if( m_TWNested ) + { + event.StopPropagation(); + return; + } + m_TWNested = true; + + // Update state. + if( m_TWMode != TW_MASTER_CURRENT ) + { + m_TWMode = TW_MASTER_CURRENT; + TWUpdateModeDisplay(); + } + // Prepare parameters: - double current = std::abs( DoubleFromString( m_TrackCurrentValue->GetValue() ) ); - double thickness = std::abs( DoubleFromString( m_TrackThicknessValue->GetValue() ) ); - double deltaT_C = std::abs( DoubleFromString( m_TrackDeltaTValue->GetValue() ) ); - double track_len = std::abs( DoubleFromString( m_TrackLengthValue->GetValue() ) ); + double current = std::abs( DoubleFromString( m_TrackCurrentValue->GetValue() ) ); + double extThickness = std::abs( DoubleFromString( m_ExtTrackThicknessValue->GetValue() ) ); + double intThickness = std::abs( DoubleFromString( m_IntTrackThicknessValue->GetValue() ) ); + double deltaT_C = std::abs( DoubleFromString( m_TrackDeltaTValue->GetValue() ) ); double extTrackWidth; double intTrackWidth; - // Normalize units: - thickness *= m_TW_CuThickness_choiceUnit->GetUnitScale(); - track_len *= m_TW_CuLength_choiceUnit->GetUnitScale(); - extTrackWidth = TWCalculate( current, thickness, deltaT_C, false ); - intTrackWidth = TWCalculate( current, thickness, deltaT_C, true ); + // Normalize units. + extThickness *= m_ExtTrackThicknessUnit->GetUnitScale(); + intThickness *= m_IntTrackThicknessUnit->GetUnitScale(); - // Display values: + // Calculate the widths. + extTrackWidth = TWCalculateWidth( current, extThickness, deltaT_C, false ); + intTrackWidth = TWCalculateWidth( current, intThickness, deltaT_C, true ); + + // Update the display. + TWDisplayValues( current, extTrackWidth, intTrackWidth, extThickness, intThickness ); + + // Re-enable the events. + m_TWNested = false; +} + + +void PCB_CALCULATOR_FRAME::OnTWCalculateFromExtWidth( wxCommandEvent& event ) +{ + // Setting the calculated values generates further events. Stop them. + if( m_TWNested ) + { + event.StopPropagation(); + return; + } + m_TWNested = true; + + // Update state. + if( m_TWMode != TW_MASTER_EXT_WIDTH ) + { + m_TWMode = TW_MASTER_EXT_WIDTH; + TWUpdateModeDisplay(); + } + + // Load parameters. + double current; + double extThickness = std::abs( DoubleFromString( m_ExtTrackThicknessValue->GetValue() ) ); + double intThickness = std::abs( DoubleFromString( m_IntTrackThicknessValue->GetValue() ) ); + double deltaT_C = std::abs( DoubleFromString( m_TrackDeltaTValue->GetValue() ) ); + double extTrackWidth = std::abs( DoubleFromString( m_ExtTrackWidthValue->GetValue() ) ); + double intTrackWidth; + + // Normalize units. + extThickness *= m_ExtTrackThicknessUnit->GetUnitScale(); + intThickness *= m_IntTrackThicknessUnit->GetUnitScale(); + extTrackWidth *= m_TW_ExtTrackWidth_choiceUnit->GetUnitScale(); + + // Calculate the maximum current. + current = TWCalculateCurrent( extTrackWidth, extThickness, deltaT_C, false ); + + // And now calculate the corresponding internal width. + intTrackWidth = TWCalculateWidth( current, intThickness, deltaT_C, true ); + + // Update the display. + TWDisplayValues( current, extTrackWidth, intTrackWidth, extThickness, intThickness ); + + // Re-enable the events. + m_TWNested = false; +} + + +void PCB_CALCULATOR_FRAME::OnTWCalculateFromIntWidth( wxCommandEvent& event ) +{ + // Setting the calculated values generates further events. Stop them. + if( m_TWNested ) + { + event.StopPropagation(); + return; + } + m_TWNested = true; + + // Update state. + if( m_TWMode != TW_MASTER_INT_WIDTH ) + { + m_TWMode = TW_MASTER_INT_WIDTH; + TWUpdateModeDisplay(); + } + + // Load parameters. + double current; + double extThickness = std::abs( DoubleFromString( m_ExtTrackThicknessValue->GetValue() ) ); + double intThickness = std::abs( DoubleFromString( m_IntTrackThicknessValue->GetValue() ) ); + double deltaT_C = std::abs( DoubleFromString( m_TrackDeltaTValue->GetValue() ) ); + double extTrackWidth; + double intTrackWidth = std::abs( DoubleFromString( m_IntTrackWidthValue->GetValue() ) ); + + // Normalize units. + extThickness *= m_ExtTrackThicknessUnit->GetUnitScale(); + intThickness *= m_IntTrackThicknessUnit->GetUnitScale(); + intTrackWidth *= m_TW_IntTrackWidth_choiceUnit->GetUnitScale(); + + // Calculate the maximum current. + current = TWCalculateCurrent( intTrackWidth, intThickness, deltaT_C, true ); + + // And now calculate the corresponding external width. + extTrackWidth = TWCalculateWidth( current, extThickness, deltaT_C, false ); + + // Update the display. + TWDisplayValues( current, extTrackWidth, intTrackWidth, extThickness, intThickness ); + + // Re-enable the events. + m_TWNested = false; +} + + +void PCB_CALCULATOR_FRAME::TWDisplayValues( double aCurrent, double aExtWidth, + double aIntWidth, double aExtThickness, double aIntThickness ) +{ wxString msg; - msg.Printf( wxT( "%g" ), extTrackWidth / m_TW_ExtTrackWidth_choiceUnit->GetUnitScale() ); - m_ExtTrackWidthValue->SetValue( msg ); - msg.Printf( wxT( "%g" ), intTrackWidth / m_TW_IntTrackWidth_choiceUnit->GetUnitScale() ); - m_IntTrackWidthValue->SetValue( msg ); - // Display areas: - double scale = m_TW_ExtTrackWidth_choiceUnit->GetUnitScale(); - double ext_area = thickness * extTrackWidth; - msg.Printf( wxT( "%g" ), ext_area / (scale * scale) ); + // Show the current. + if( m_TWMode != TW_MASTER_CURRENT ) + { + msg.Printf( wxT( "%g" ), aCurrent ); + m_TrackCurrentValue->SetValue( msg ); + } - m_ExtTrackAreaValue->SetValue( msg ); + // Load scale factors to convert into output units. + double extScale = m_TW_ExtTrackWidth_choiceUnit->GetUnitScale(); + double intScale = m_TW_IntTrackWidth_choiceUnit->GetUnitScale(); + + // Display the widths. + if( m_TWMode != TW_MASTER_EXT_WIDTH ) + { + msg.Printf( wxT( "%g" ), aExtWidth / extScale ); + m_ExtTrackWidthValue->SetValue( msg ); + } + if( m_TWMode != TW_MASTER_INT_WIDTH ) + { + msg.Printf( wxT( "%g" ), aIntWidth / intScale ); + m_IntTrackWidthValue->SetValue( msg ); + } + + // Display cross-sectional areas. + msg.Printf( wxT( "%g" ), (aExtWidth * aExtThickness) / (extScale * extScale) ); + m_ExtTrackAreaValue->SetLabel( msg ); + msg.Printf( wxT( "%g" ), (aIntWidth * aIntThickness) / (intScale * intScale) ); + m_IntTrackAreaValue->SetLabel( msg ); + + // Show area units. wxString strunit = m_TW_ExtTrackWidth_choiceUnit->GetUnitName(); msg = strunit + wxT( " x " ) + strunit; m_ExtTrackAreaUnitLabel->SetLabel( msg ); - - scale = m_TW_IntTrackWidth_choiceUnit->GetUnitScale(); - double int_area = thickness * intTrackWidth; - msg.Printf( wxT( "%g" ), int_area / (scale * scale) ); - - m_IntTrackAreaValue->SetValue( msg ); strunit = m_TW_IntTrackWidth_choiceUnit->GetUnitName(); msg = strunit + wxT( " x " ) + strunit; m_IntTrackAreaUnitLabel->SetLabel( msg ); - // Display resistance (assuming using copper ): - double rho = 1.72e-008; // In Ohms*meter - double ext_res = rho / ext_area * track_len; - msg.Printf( wxT( "%g" ), ext_res ); - m_ExtTrackResistValue->SetValue( msg ); + // Load resistivity and length of traces. + double rho = std::abs( DoubleFromString( m_TWResistivity->GetValue() ) ); + double trackLen = std::abs( DoubleFromString( m_TrackLengthValue->GetValue() ) ); + trackLen *= m_TW_CuLength_choiceUnit->GetUnitScale(); - double int_res = rho / int_area * track_len; - msg.Printf( wxT( "%g" ), int_res ); - m_IntTrackResistValue->SetValue( msg ); + // Calculate resistance. + double extResistance = ( rho * trackLen ) / ( aExtWidth * aExtThickness ); + double intResistance = ( rho * trackLen ) / ( aIntWidth * aIntThickness ); - // Display drop voltage - double ext_drop_volt = ext_res * current; - msg.Printf( wxT( "%g" ), ext_drop_volt ); - m_ExtTrackVDropValue->SetValue( msg ); + // Display resistance. + msg.Printf( wxT( "%g" ), extResistance ); + m_ExtTrackResistValue->SetLabel( msg ); + msg.Printf( wxT( "%g" ), intResistance ); + m_IntTrackResistValue->SetLabel( msg ); - double int_drop_volt = int_res * current; - msg.Printf( wxT( "%g" ), int_drop_volt ); - m_IntTrackVDropValue->SetValue( msg ); + // Display voltage drop along trace. + double extV = extResistance * aCurrent; + msg.Printf( wxT( "%g" ), extV ); + m_ExtTrackVDropValue->SetLabel( msg ); + double intV = intResistance * aCurrent; + msg.Printf( wxT( "%g" ), intV ); + m_IntTrackVDropValue->SetLabel( msg ); - // Display power loss - double loss = ext_drop_volt * current; - msg.Printf( wxT( "%g" ), loss ); - m_ExtTrackLossValue->SetValue( msg ); - - loss = int_drop_volt * current; - msg.Printf( wxT( "%g" ), loss ); - m_IntTrackLossValue->SetValue( msg ); + // And power loss. + msg.Printf( wxT( "%g" ), extV * aCurrent ); + m_ExtTrackLossValue->SetLabel( msg ); + msg.Printf( wxT( "%g" ), intV * aCurrent ); + m_IntTrackLossValue->SetLabel( msg ); } +void PCB_CALCULATOR_FRAME::TWUpdateModeDisplay() +{ + wxFont labelfont; + wxFont controlfont; + + // Set the font weight of the current. + labelfont = m_staticTextCurrent->GetFont(); + controlfont = m_TrackCurrentValue->GetFont(); + + if( m_TWMode == TW_MASTER_CURRENT ) + { + labelfont.SetWeight( wxFONTWEIGHT_BOLD ); + controlfont.SetWeight( wxFONTWEIGHT_BOLD ); + } + else + { + labelfont.SetWeight( wxFONTWEIGHT_NORMAL ); + controlfont.SetWeight( wxFONTWEIGHT_NORMAL ); + } + + m_staticTextCurrent->SetFont( labelfont ); + m_TrackCurrentValue->SetFont( controlfont ); + + // Set the font weight of the external track width. + labelfont = m_staticTextExtWidth->GetFont(); + controlfont = m_ExtTrackWidthValue->GetFont(); + + if( m_TWMode == TW_MASTER_EXT_WIDTH ) + { + labelfont.SetWeight( wxFONTWEIGHT_BOLD ); + controlfont.SetWeight( wxFONTWEIGHT_BOLD ); + } + else + { + labelfont.SetWeight( wxFONTWEIGHT_NORMAL ); + controlfont.SetWeight( wxFONTWEIGHT_NORMAL ); + } + + m_staticTextExtWidth->SetFont( labelfont ); + m_ExtTrackWidthValue->SetFont( controlfont ); + + // Set the font weight of the internal track width. + labelfont = m_staticTextIntWidth->GetFont(); + controlfont = m_IntTrackWidthValue->GetFont(); + + if( m_TWMode == TW_MASTER_INT_WIDTH ) + { + labelfont.SetWeight( wxFONTWEIGHT_BOLD ); + controlfont.SetWeight( wxFONTWEIGHT_BOLD ); + } + else + { + labelfont.SetWeight( wxFONTWEIGHT_NORMAL ); + controlfont.SetWeight( wxFONTWEIGHT_NORMAL ); + } + + m_staticTextIntWidth->SetFont( labelfont ); + m_IntTrackWidthValue->SetFont( controlfont ); +} + /* calculate track width for external or internal layers * * Imax = 0.048 * dT^0.44 * A^0.725 for external layer @@ -145,13 +367,11 @@ void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) * and dT = temperature rise in degree C * Of course we want to know trackWidth */ -double PCB_CALCULATOR_FRAME::TWCalculate( double aCurrent, double aThickness, double aDeltaT_C, +double PCB_CALCULATOR_FRAME::TWCalculateWidth( double aCurrent, double aThickness, double aDeltaT_C, bool aUseInternalLayer ) { - double scale = 0.048; // We are using normalize units (sizes in meters) - - if( aUseInternalLayer ) - scale *= 0.024 / 0.048; + // Appropriate scale for requested layer. + double scale = aUseInternalLayer ? 0.024 : 0.048; // aThickness is given in normalize units (in meters) and we need mil aThickness /= UNIT_MIL; @@ -160,7 +380,7 @@ double PCB_CALCULATOR_FRAME::TWCalculate( double aCurrent, double aThickness, do * or * log(Imax) = log(scale) + 0.44*log(dT) * +(0.725*(log(aThickness) + log(trackWidth)) - * log(trackWidth) * 0.725 = ln(Imax) - ln(scale) - 0.44*log(dT) - 0.725*log(aThickness) + * log(trackWidth) * 0.725 = log(Imax) - log(scale) - 0.44*log(dT) - 0.725*log(aThickness) */ double dtmp = log( aCurrent ) - log( scale ) - 0.44 * log( aDeltaT_C ) - 0.725 * log( aThickness ); dtmp /= 0.725; @@ -171,37 +391,92 @@ double PCB_CALCULATOR_FRAME::TWCalculate( double aCurrent, double aThickness, do } +double PCB_CALCULATOR_FRAME::TWCalculateCurrent( double aWidth, double aThickness, double aDeltaT_C, + bool aUseInternalLayer ) +{ + // Appropriate scale for requested layer. + double scale = aUseInternalLayer ? 0.024 : 0.048; + + // Convert thickness and width to mils. + aThickness /= UNIT_MIL; + aWidth /= UNIT_MIL; + + double area = aThickness * aWidth; + double current = scale * pow( aDeltaT_C, 0.44 ) * pow( area, 0.725 ); + return current; +} + + void PCB_CALCULATOR_FRAME::TW_Init() { int tmp; wxString msg; - // Read parameters values: - m_Config->Read( KEYWORD_TW_EXTTRACK_WIDTH_UNIT, &tmp, 0 ); - m_TW_ExtTrackWidth_choiceUnit->SetSelection( tmp ); - m_Config->Read( KEYWORD_TW_INTTRACK_WIDTH_UNIT, &tmp, 0 ); - m_TW_IntTrackWidth_choiceUnit->SetSelection( tmp ); - m_Config->Read( KEYWORD_TW_TRACK_COPPER_THICKNESS_UNIT, &tmp, 0 ); - m_TW_CuThickness_choiceUnit->SetSelection( tmp ); - m_Config->Read( KEYWORD_TW_TRACK_LEN_UNIT, &tmp, 0 ); - m_TW_CuLength_choiceUnit->SetSelection( tmp ); - m_Config->Read( KEYWORD_TW_CURRENT, &msg, wxT( "1.0" ) ); + // Disable calculations while we initialise. + m_TWNested = true; + + // Read parameter values. + m_Config->Read( KEYWORD_TW_CURRENT, &msg, wxT( "1.0" ) ); m_TrackCurrentValue->SetValue( msg ); - m_Config->Read( KEYWORD_TW_DELTA_TC, &msg, wxT( "10.0" ) ); + m_Config->Read( KEYWORD_TW_DELTA_TC, &msg, wxT( "10.0" ) ); m_TrackDeltaTValue->SetValue( msg ); - m_Config->Read( KEYWORD_TW_TRACK_COPPER_THICKNESS, &msg, wxT( "0.035" ) ); - m_TrackThicknessValue->SetValue( msg ); - m_Config->Read( KEYWORD_TW_TRACK_LEN, &msg, wxT( "20" ) ); + m_Config->Read( KEYWORD_TW_TRACK_LEN, &msg, wxT( "20" ) ); m_TrackLengthValue->SetValue( msg ); + m_Config->Read( KEYWORD_TW_TRACK_LEN_UNIT, &tmp, 0 ); + m_TW_CuLength_choiceUnit->SetSelection( tmp ); + m_Config->Read( KEYWORD_TW_RESISTIVITY, &msg, wxT( "1.72e-8" ) ); + m_TWResistivity->SetValue( msg ); + m_Config->Read( KEYWORD_TW_EXTTRACK_WIDTH, &msg, wxT( "0.2" ) ); + m_ExtTrackWidthValue->SetValue( msg ); + m_Config->Read( KEYWORD_TW_EXTTRACK_WIDTH_UNIT, &tmp, 0 ); + m_TW_ExtTrackWidth_choiceUnit->SetSelection( tmp ); + m_Config->Read( KEYWORD_TW_EXTTRACK_THICKNESS, &msg, wxT( "0.035" ) ); + m_ExtTrackThicknessValue->SetValue( msg ); + m_Config->Read( KEYWORD_TW_EXTTRACK_THICKNESS_UNIT, &tmp, 0 ); + m_ExtTrackThicknessUnit->SetSelection( tmp ); + m_Config->Read( KEYWORD_TW_INTTRACK_WIDTH, &msg, wxT( "0.2" ) ); + m_IntTrackWidthValue->SetValue( msg ); + m_Config->Read( KEYWORD_TW_INTTRACK_WIDTH_UNIT, &tmp, 0 ); + m_TW_IntTrackWidth_choiceUnit->SetSelection( tmp ); + m_Config->Read( KEYWORD_TW_INTTRACK_THICKNESS, &msg, wxT( "0.035" ) ); + m_IntTrackThicknessValue->SetValue( msg ); + m_Config->Read( KEYWORD_TW_INTTRACK_THICKNESS_UNIT, &tmp, 0 ); + m_IntTrackThicknessUnit->SetSelection( tmp ); // Init formulas text - m_htmlWinFormulas->AppendToPage( _( "
The formula (from IPC 2221) is:
" ) ); - m_htmlWinFormulas->AppendToPage( _( "
I = K * dT0.44 * (W*H)0.725
" ) ); - m_htmlWinFormulas->AppendToPage( _( "
Internal traces : K = 0.024
" ) ); - m_htmlWinFormulas->AppendToPage( _( "
External traces: K = 0.048
" ) ); + m_htmlWinFormulas->AppendToPage( "
" ); + m_htmlWinFormulas->AppendToPage( _( "If you specify the maximum current, then the trace " + "widths will be calculated to suit." ) ); + m_htmlWinFormulas->AppendToPage( "
" ); + m_htmlWinFormulas->AppendToPage( _( "If you specify one of the trace widths, the maximum " + "current it can handle will be calculated. The width " + "for the other trace to also handle this current will " + "then be calculated." ) ); + m_htmlWinFormulas->AppendToPage( "
" ); + m_htmlWinFormulas->AppendToPage( _( "The controlling value is shown in bold." ) ); + m_htmlWinFormulas->AppendToPage( "

" ); + m_htmlWinFormulas->AppendToPage( _( "The calculations are valid for currents up to 35A " + "(external) or 17.5A (internal), temperature rises " + "up to 100 deg C, and widths of up to 400mil (10mm)." ) ); + m_htmlWinFormulas->AppendToPage( "
" ); + m_htmlWinFormulas->AppendToPage( _( "The formula, from IPC 2221, is" ) ); + m_htmlWinFormulas->AppendToPage( "
I = K * dT0.44 * " + "(W*H)0.725
" ); + m_htmlWinFormulas->AppendToPage( _( "where:" ) ); + m_htmlWinFormulas->AppendToPage( "
I = " ); + m_htmlWinFormulas->AppendToPage( _( "maximum current in amps" ) ); + m_htmlWinFormulas->AppendToPage( "
dT = " ); + m_htmlWinFormulas->AppendToPage( _( "temperature rise above ambient in deg C" ) ); + m_htmlWinFormulas->AppendToPage( "
W,H = " ); + m_htmlWinFormulas->AppendToPage( _( "width and thickness in mils" ) ); + m_htmlWinFormulas->AppendToPage( "
K = " ); + m_htmlWinFormulas->AppendToPage( _( "0.024 for internal traces or 0.048 for external traces" ) ); - m_htmlWinFormulas->AppendToPage( _( "
where:
" ) ); - m_htmlWinFormulas->AppendToPage( _( "
I = maximum current in Amps
" ) ); - m_htmlWinFormulas->AppendToPage( _( "
dT = temperature rise above ambient in deg C
" ) ); - m_htmlWinFormulas->AppendToPage( _( "
W,H = Width and Thickness in mils
" ) ); + // Make sure the correct master mode is displayed. + TWUpdateModeDisplay(); + + // Enable calculations and perform the initial one. + m_TWNested = false; + wxCommandEvent dummy; + OnTWParametersChanged( dummy ); }