pcb_calculator rework: move attenuators panel to its own files panel_attenuators_xx

This commit is contained in:
jean-pierre charras 2021-10-04 10:22:34 +02:00
parent bf8a020501
commit 21d3662ed3
12 changed files with 2343 additions and 2149 deletions

View File

@ -9,7 +9,6 @@ include_directories(
set( PCB_CALCULATOR_SRCS set( PCB_CALCULATOR_SRCS
eserie.cpp eserie.cpp
attenuators.cpp
board_classes_values.cpp board_classes_values.cpp
colorcode.cpp colorcode.cpp
common_data.cpp common_data.cpp
@ -18,6 +17,7 @@ set( PCB_CALCULATOR_SRCS
pcb_calculator_frame.cpp pcb_calculator_frame.cpp
pcb_calculator_settings.cpp pcb_calculator_settings.cpp
datafile_read_write.cpp datafile_read_write.cpp
panel_attenuators.cpp
panel_regulator.cpp panel_regulator.cpp
tracks_width_versus_current.cpp tracks_width_versus_current.cpp
via.cpp via.cpp
@ -36,6 +36,7 @@ set( PCB_CALCULATOR_SRCS
dialogs/pcb_calculator_frame_base.cpp dialogs/pcb_calculator_frame_base.cpp
dialogs/dialog_regulator_form_base.cpp dialogs/dialog_regulator_form_base.cpp
dialogs/dialog_regulator_form.cpp dialogs/dialog_regulator_form.cpp
dialogs/panel_attenuators_base.cpp
dialogs/panel_regulator_base.cpp dialogs/panel_regulator_base.cpp
../common/env_vars.cpp # needed on MSW to avoid a link issue (a symbol not found) ../common/env_vars.cpp # needed on MSW to avoid a link issue (a symbol not found)
) )

View File

@ -1,160 +0,0 @@
/**
* @file attenuators.cpp
*/
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 2015 jean-pierre.charras
* Copyright (C) 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
*/
#include <string_utils.h>
#include "pcb_calculator_frame.h"
extern double DoubleFromString( const wxString& TextValue );
// Called on a attenuator selection
void PCB_CALCULATOR_FRAME::OnAttenuatorSelection( wxCommandEvent& event )
{
SetAttenuator( (unsigned) event.GetSelection() );
Refresh();
}
void PCB_CALCULATOR_FRAME::SetAttenuator( unsigned aIdx )
{
if( aIdx >=m_attenuator_list.size() )
aIdx = m_attenuator_list.size() - 1;
m_currAttenuator = m_attenuator_list[aIdx];
TransfAttenuatorDataToPanel();
m_Attenuator_Messages->SetPage( wxEmptyString );
m_Att_R1_Value->SetValue( wxEmptyString );
m_Att_R2_Value->SetValue( wxEmptyString );
m_Att_R3_Value->SetValue( wxEmptyString );
}
void PCB_CALCULATOR_FRAME::OnCalculateAttenuator( wxCommandEvent& event )
{
TransfPanelDataToAttenuator();
m_currAttenuator->Calculate();
TransfAttenuatorResultsToPanel();
}
void PCB_CALCULATOR_FRAME::TransfPanelDataToAttenuator()
{
wxString msg;
msg = m_AttValueCtrl->GetValue();
m_currAttenuator->m_Attenuation = DoubleFromString(msg);
msg = m_ZinValueCtrl->GetValue();
m_currAttenuator->m_Zin = DoubleFromString(msg);
msg = m_ZoutValueCtrl->GetValue();
m_currAttenuator->m_Zout = DoubleFromString(msg);
}
void PCB_CALCULATOR_FRAME::TransfAttenuatorDataToPanel()
{
m_attenuatorBitmap->SetBitmap( *m_currAttenuator->m_SchBitMap );
wxString msg;
msg.Printf( wxT( "%g" ), m_currAttenuator->m_Attenuation );
m_AttValueCtrl->SetValue( msg );
m_AttValueCtrl->Enable( m_currAttenuator->m_Attenuation_Enable );
m_ZinValueCtrl->Enable( m_currAttenuator->m_Zin_Enable );
if( m_currAttenuator->m_Zin_Enable )
msg.Printf( wxT( "%g" ), m_currAttenuator->m_Zin );
else
msg.Clear();
m_ZinValueCtrl->SetValue( msg );
msg.Printf( wxT( "%g" ), m_currAttenuator->m_Zout );
m_ZoutValueCtrl->SetValue( msg );
if( m_currAttenuator->m_FormulaName )
{
if( m_currAttenuator->m_FormulaName->StartsWith( "<!" ) )
{
m_panelAttFormula->SetPage( *m_currAttenuator->m_FormulaName );
}
else
{
wxString html_txt;
ConvertMarkdown2Html( wxGetTranslation( *m_currAttenuator->m_FormulaName ), html_txt );
m_panelAttFormula->SetPage( html_txt );
}
}
else
{
m_panelAttFormula->SetPage( wxEmptyString );
}
}
void PCB_CALCULATOR_FRAME::TransfAttenuatorResultsToPanel()
{
wxString msg;
m_Attenuator_Messages->SetPage( wxEmptyString );
if( m_currAttenuator->m_Error )
{
msg.Printf( _( "Attenuation more than %f dB" ),
m_currAttenuator->m_MinimumATT );
m_Attenuator_Messages->AppendToPage( wxT( "<br><b>Error!</b></br><br><em>" ) );
m_Attenuator_Messages->AppendToPage( msg );
m_Attenuator_Messages->AppendToPage( wxT( "</em></br>" ) );
// Display -- as resistor values:
msg = wxT( "--" );
m_Att_R1_Value->SetValue( msg );
m_Att_R2_Value->SetValue( msg );
if( m_currAttenuator->m_ResultCount >= 3 )
m_Att_R3_Value->SetValue( msg );
return;
}
msg.Printf( wxT( "%g" ), m_currAttenuator->m_R1 );
m_Att_R1_Value->SetValue( msg );
msg.Printf( wxT( "%g" ), m_currAttenuator->m_R2 );
m_Att_R2_Value->SetValue( msg );
if( m_currAttenuator->m_ResultCount < 3 )
{
m_Att_R3_Value->SetValue( wxEmptyString );
}
else
{
msg.Printf( wxT( "%g" ), m_currAttenuator->m_R3 );
m_Att_R3_Value->SetValue( msg );
}
}

View File

@ -0,0 +1,53 @@
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2021 Kicad Developers, see AUTHORS.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 3
* 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, see <http://www.gnu.org/licenses/>.
*/
#ifndef PANEL_ATTENUATORS_H
#define PANEL_ATTENUATORS_H
#include "panel_attenuators_base.h"
class ATTENUATOR;
class PANEL_ATTENUATORS : public PANEL_ATTENUATORS_BASE
{
public:
PANEL_ATTENUATORS( wxWindow* parent, wxWindowID id = wxID_ANY,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~PANEL_ATTENUATORS();
wxRadioBox* GetAttenuatorsSelector() { return m_AttenuatorsSelection; }
void LoadSettings( PCB_CALCULATOR_SETTINGS* aCfg );
void SaveSettings( PCB_CALCULATOR_SETTINGS* aCfg );
void UpdateUI(); // Update bitmaps
void OnAttenuatorSelection( wxCommandEvent& event ) override;
void SetAttenuator( unsigned aIdx );
void OnCalculateAttenuator( wxCommandEvent& event ) override;
void TransfPanelDataToAttenuator();
void TransfAttenuatorDataToPanel();
void TransfAttenuatorResultsToPanel();
public:
ATTENUATOR* m_CurrAttenuator;
std::vector<ATTENUATOR*> m_AttenuatorList;
};
#endif

View File

@ -0,0 +1,195 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "panel_attenuators_base.h"
///////////////////////////////////////////////////////////////////////////
PANEL_ATTENUATORS_BASE::PANEL_ATTENUATORS_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
{
wxBoxSizer* bSizerAtt;
bSizerAtt = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bLeftSizerAtt;
bLeftSizerAtt = new wxBoxSizer( wxVERTICAL );
bLeftSizerAtt->SetMinSize( wxSize( 260,-1 ) );
wxString m_AttenuatorsSelectionChoices[] = { _("PI"), _("Tee"), _("Bridged tee"), _("Resistive splitter") };
int m_AttenuatorsSelectionNChoices = sizeof( m_AttenuatorsSelectionChoices ) / sizeof( wxString );
m_AttenuatorsSelection = new wxRadioBox( this, wxID_ANY, _("Attenuators"), wxDefaultPosition, wxDefaultSize, m_AttenuatorsSelectionNChoices, m_AttenuatorsSelectionChoices, 1, wxRA_SPECIFY_COLS );
m_AttenuatorsSelection->SetSelection( 2 );
bLeftSizerAtt->Add( m_AttenuatorsSelection, 0, wxEXPAND|wxALL, 5 );
bLeftSizerAtt->Add( 0, 5, 0, wxEXPAND, 5 );
m_attenuatorBitmap = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
bLeftSizerAtt->Add( m_attenuatorBitmap, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 10 );
bSizerAtt->Add( bLeftSizerAtt, 0, wxEXPAND|wxRIGHT, 5 );
wxBoxSizer* bMiddleSizerAtt;
bMiddleSizerAtt = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizerAttPrms;
sbSizerAttPrms = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Parameters") ), wxVERTICAL );
wxFlexGridSizer* fgSizerAttPrms;
fgSizerAttPrms = new wxFlexGridSizer( 3, 3, 3, 0 );
fgSizerAttPrms->AddGrowableRow( 1 );
fgSizerAttPrms->SetFlexibleDirection( wxBOTH );
fgSizerAttPrms->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_attenuationLabel = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Attenuation:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuationLabel->Wrap( -1 );
fgSizerAttPrms->Add( m_attenuationLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_AttValueCtrl = new wxTextCtrl( sbSizerAttPrms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttPrms->Add( m_AttValueCtrl, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_attUnit = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("dB"), wxDefaultPosition, wxDefaultSize, 0 );
m_attUnit->Wrap( -1 );
fgSizerAttPrms->Add( m_attUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_attenuationZinLabel = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Zin:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuationZinLabel->Wrap( -1 );
fgSizerAttPrms->Add( m_attenuationZinLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_ZinValueCtrl = new wxTextCtrl( sbSizerAttPrms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttPrms->Add( m_ZinValueCtrl, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_attZinUnit = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attZinUnit->Wrap( -1 );
fgSizerAttPrms->Add( m_attZinUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_ZoutLabel = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Zout:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ZoutLabel->Wrap( -1 );
fgSizerAttPrms->Add( m_ZoutLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_ZoutValueCtrl = new wxTextCtrl( sbSizerAttPrms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttPrms->Add( m_ZoutValueCtrl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_attZoutUnit = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attZoutUnit->Wrap( -1 );
fgSizerAttPrms->Add( m_attZoutUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
sbSizerAttPrms->Add( fgSizerAttPrms, 0, wxEXPAND|wxBOTTOM, 5 );
bMiddleSizerAtt->Add( sbSizerAttPrms, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
wxBoxSizer* bSizerAttButt;
bSizerAttButt = new wxBoxSizer( wxHORIZONTAL );
m_buttonAlcAtt = new wxButton( this, wxID_ANY, _("Calculate"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerAttButt->Add( m_buttonAlcAtt, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_bpButtonCalcAtt = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
bSizerAttButt->Add( m_bpButtonCalcAtt, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bMiddleSizerAtt->Add( bSizerAttButt, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
wxStaticBoxSizer* sbSizerAttValues;
sbSizerAttValues = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Values") ), wxVERTICAL );
wxFlexGridSizer* fgSizerAttResults;
fgSizerAttResults = new wxFlexGridSizer( 3, 3, 3, 0 );
fgSizerAttResults->AddGrowableCol( 1 );
fgSizerAttResults->SetFlexibleDirection( wxBOTH );
fgSizerAttResults->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_attenuatorR1Label = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("R1:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuatorR1Label->Wrap( -1 );
fgSizerAttResults->Add( m_attenuatorR1Label, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_Att_R1_Value = new wxTextCtrl( sbSizerAttValues->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttResults->Add( m_Att_R1_Value, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_attR1Unit = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attR1Unit->Wrap( -1 );
fgSizerAttResults->Add( m_attR1Unit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_attenuatorR2Label = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("R2:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuatorR2Label->Wrap( -1 );
fgSizerAttResults->Add( m_attenuatorR2Label, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_Att_R2_Value = new wxTextCtrl( sbSizerAttValues->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttResults->Add( m_Att_R2_Value, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_attR2Unit = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attR2Unit->Wrap( -1 );
fgSizerAttResults->Add( m_attR2Unit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_attenuatorR3Label = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("R3:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuatorR3Label->Wrap( -1 );
fgSizerAttResults->Add( m_attenuatorR3Label, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_Att_R3_Value = new wxTextCtrl( sbSizerAttValues->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttResults->Add( m_Att_R3_Value, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
m_attR3Unit = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attR3Unit->Wrap( -1 );
fgSizerAttResults->Add( m_attR3Unit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
sbSizerAttValues->Add( fgSizerAttResults, 0, wxEXPAND|wxBOTTOM, 5 );
bMiddleSizerAtt->Add( sbSizerAttValues, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
wxBoxSizer* bSizerMessages;
bSizerMessages = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizerIndentLabel;
bSizerIndentLabel = new wxBoxSizer( wxHORIZONTAL );
m_staticTextAttMsg = new wxStaticText( this, wxID_ANY, _("Messages"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextAttMsg->Wrap( -1 );
bSizerIndentLabel->Add( m_staticTextAttMsg, 0, wxALL, 2 );
bSizerMessages->Add( bSizerIndentLabel, 0, wxLEFT, 6 );
m_Attenuator_Messages = new wxHtmlWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO );
bSizerMessages->Add( m_Attenuator_Messages, 1, wxEXPAND|wxBOTTOM|wxRIGHT, 8 );
bMiddleSizerAtt->Add( bSizerMessages, 1, wxEXPAND|wxLEFT, 3 );
bSizerAtt->Add( bMiddleSizerAtt, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
wxStaticBoxSizer* sbRightSizerFormula;
sbRightSizerFormula = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Formula") ), wxVERTICAL );
m_panelAttFormula = new wxHtmlWindow( sbRightSizerFormula->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO );
sbRightSizerFormula->Add( m_panelAttFormula, 1, wxEXPAND|wxBOTTOM, 5 );
bSizerAtt->Add( sbRightSizerFormula, 1, wxEXPAND|wxALL, 5 );
this->SetSizer( bSizerAtt );
this->Layout();
// Connect Events
m_AttenuatorsSelection->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PANEL_ATTENUATORS_BASE::OnAttenuatorSelection ), NULL, this );
m_buttonAlcAtt->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_ATTENUATORS_BASE::OnCalculateAttenuator ), NULL, this );
m_bpButtonCalcAtt->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_ATTENUATORS_BASE::OnCalculateAttenuator ), NULL, this );
}
PANEL_ATTENUATORS_BASE::~PANEL_ATTENUATORS_BASE()
{
// Disconnect Events
m_AttenuatorsSelection->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PANEL_ATTENUATORS_BASE::OnAttenuatorSelection ), NULL, this );
m_buttonAlcAtt->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_ATTENUATORS_BASE::OnCalculateAttenuator ), NULL, this );
m_bpButtonCalcAtt->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_ATTENUATORS_BASE::OnCalculateAttenuator ), NULL, this );
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,80 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Oct 26 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#pragma once
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/radiobox.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/statbmp.h>
#include <wx/sizer.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/statbox.h>
#include <wx/button.h>
#include <wx/bmpbuttn.h>
#include <wx/html/htmlwin.h>
#include <wx/panel.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class PANEL_ATTENUATORS_BASE
///////////////////////////////////////////////////////////////////////////////
class PANEL_ATTENUATORS_BASE : public wxPanel
{
private:
protected:
wxRadioBox* m_AttenuatorsSelection;
wxStaticBitmap* m_attenuatorBitmap;
wxStaticText* m_attenuationLabel;
wxTextCtrl* m_AttValueCtrl;
wxStaticText* m_attUnit;
wxStaticText* m_attenuationZinLabel;
wxTextCtrl* m_ZinValueCtrl;
wxStaticText* m_attZinUnit;
wxStaticText* m_ZoutLabel;
wxTextCtrl* m_ZoutValueCtrl;
wxStaticText* m_attZoutUnit;
wxButton* m_buttonAlcAtt;
wxBitmapButton* m_bpButtonCalcAtt;
wxStaticText* m_attenuatorR1Label;
wxTextCtrl* m_Att_R1_Value;
wxStaticText* m_attR1Unit;
wxStaticText* m_attenuatorR2Label;
wxTextCtrl* m_Att_R2_Value;
wxStaticText* m_attR2Unit;
wxStaticText* m_attenuatorR3Label;
wxTextCtrl* m_Att_R3_Value;
wxStaticText* m_attR3Unit;
wxStaticText* m_staticTextAttMsg;
wxHtmlWindow* m_Attenuator_Messages;
wxHtmlWindow* m_panelAttFormula;
// Virtual event handlers, overide them in your derived class
virtual void OnAttenuatorSelection( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCalculateAttenuator( wxCommandEvent& event ) { event.Skip(); }
public:
PANEL_ATTENUATORS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~PANEL_ATTENUATORS_BASE();
};

View File

@ -24,175 +24,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow
m_Notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); m_Notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
m_panelRegulators = new PANEL_REGULATOR( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panelRegulators = new PANEL_REGULATOR( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
m_Notebook->AddPage( m_panelRegulators, _("Regulators"), true ); m_Notebook->AddPage( m_panelRegulators, _("Regulators"), true );
m_panelAttenuators = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panelAttenuators = new PANEL_ATTENUATORS( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* bSizerAtt;
bSizerAtt = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bLeftSizerAtt;
bLeftSizerAtt = new wxBoxSizer( wxVERTICAL );
bLeftSizerAtt->SetMinSize( wxSize( 260,-1 ) );
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->SetSelection( 2 );
bLeftSizerAtt->Add( m_AttenuatorsSelection, 0, wxEXPAND|wxALL, 5 );
bLeftSizerAtt->Add( 0, 5, 0, wxEXPAND, 5 );
m_attenuatorBitmap = new wxStaticBitmap( m_panelAttenuators, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
bLeftSizerAtt->Add( m_attenuatorBitmap, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 10 );
bSizerAtt->Add( bLeftSizerAtt, 0, wxEXPAND|wxRIGHT, 5 );
wxBoxSizer* bMiddleSizerAtt;
bMiddleSizerAtt = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizerAttPrms;
sbSizerAttPrms = new wxStaticBoxSizer( new wxStaticBox( m_panelAttenuators, wxID_ANY, _("Parameters") ), wxVERTICAL );
wxFlexGridSizer* fgSizerAttPrms;
fgSizerAttPrms = new wxFlexGridSizer( 3, 3, 3, 0 );
fgSizerAttPrms->AddGrowableRow( 1 );
fgSizerAttPrms->SetFlexibleDirection( wxBOTH );
fgSizerAttPrms->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_attenuationLabel = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Attenuation:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuationLabel->Wrap( -1 );
fgSizerAttPrms->Add( m_attenuationLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_AttValueCtrl = new wxTextCtrl( sbSizerAttPrms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttPrms->Add( m_AttValueCtrl, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_attUnit = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("dB"), wxDefaultPosition, wxDefaultSize, 0 );
m_attUnit->Wrap( -1 );
fgSizerAttPrms->Add( m_attUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_attenuationZinLabel = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Zin:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuationZinLabel->Wrap( -1 );
fgSizerAttPrms->Add( m_attenuationZinLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_ZinValueCtrl = new wxTextCtrl( sbSizerAttPrms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttPrms->Add( m_ZinValueCtrl, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_attZinUnit = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attZinUnit->Wrap( -1 );
fgSizerAttPrms->Add( m_attZinUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_ZoutLabel = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Zout:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ZoutLabel->Wrap( -1 );
fgSizerAttPrms->Add( m_ZoutLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_ZoutValueCtrl = new wxTextCtrl( sbSizerAttPrms->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttPrms->Add( m_ZoutValueCtrl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_attZoutUnit = new wxStaticText( sbSizerAttPrms->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attZoutUnit->Wrap( -1 );
fgSizerAttPrms->Add( m_attZoutUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
sbSizerAttPrms->Add( fgSizerAttPrms, 0, wxEXPAND|wxBOTTOM, 5 );
bMiddleSizerAtt->Add( sbSizerAttPrms, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
wxBoxSizer* bSizerAttButt;
bSizerAttButt = new wxBoxSizer( wxHORIZONTAL );
m_buttonAlcAtt = new wxButton( m_panelAttenuators, wxID_ANY, _("Calculate"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerAttButt->Add( m_buttonAlcAtt, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_bpButtonCalcAtt = new wxBitmapButton( m_panelAttenuators, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
bSizerAttButt->Add( m_bpButtonCalcAtt, 0, wxALL|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 );
wxFlexGridSizer* fgSizerAttResults;
fgSizerAttResults = new wxFlexGridSizer( 3, 3, 3, 0 );
fgSizerAttResults->AddGrowableCol( 1 );
fgSizerAttResults->SetFlexibleDirection( wxBOTH );
fgSizerAttResults->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_attenuatorR1Label = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("R1:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuatorR1Label->Wrap( -1 );
fgSizerAttResults->Add( m_attenuatorR1Label, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_Att_R1_Value = new wxTextCtrl( sbSizerAttValues->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttResults->Add( m_Att_R1_Value, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_attR1Unit = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attR1Unit->Wrap( -1 );
fgSizerAttResults->Add( m_attR1Unit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_attenuatorR2Label = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("R2:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuatorR2Label->Wrap( -1 );
fgSizerAttResults->Add( m_attenuatorR2Label, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_Att_R2_Value = new wxTextCtrl( sbSizerAttValues->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttResults->Add( m_Att_R2_Value, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_attR2Unit = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attR2Unit->Wrap( -1 );
fgSizerAttResults->Add( m_attR2Unit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_attenuatorR3Label = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("R3:"), wxDefaultPosition, wxDefaultSize, 0 );
m_attenuatorR3Label->Wrap( -1 );
fgSizerAttResults->Add( m_attenuatorR3Label, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_Att_R3_Value = new wxTextCtrl( sbSizerAttValues->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerAttResults->Add( m_Att_R3_Value, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
m_attR3Unit = new wxStaticText( sbSizerAttValues->GetStaticBox(), wxID_ANY, _("Ohms"), wxDefaultPosition, wxDefaultSize, 0 );
m_attR3Unit->Wrap( -1 );
fgSizerAttResults->Add( m_attR3Unit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
sbSizerAttValues->Add( fgSizerAttResults, 0, wxEXPAND|wxBOTTOM, 5 );
bMiddleSizerAtt->Add( sbSizerAttValues, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
wxBoxSizer* bSizerMessages;
bSizerMessages = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizerIndentLabel;
bSizerIndentLabel = new wxBoxSizer( wxHORIZONTAL );
m_staticTextAttMsg = new wxStaticText( m_panelAttenuators, wxID_ANY, _("Messages"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextAttMsg->Wrap( -1 );
bSizerIndentLabel->Add( m_staticTextAttMsg, 0, wxALL, 2 );
bSizerMessages->Add( bSizerIndentLabel, 0, wxLEFT, 6 );
m_Attenuator_Messages = new wxHtmlWindow( m_panelAttenuators, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO );
bSizerMessages->Add( m_Attenuator_Messages, 1, wxEXPAND|wxBOTTOM|wxRIGHT, 8 );
bMiddleSizerAtt->Add( bSizerMessages, 1, wxEXPAND|wxLEFT, 3 );
bSizerAtt->Add( bMiddleSizerAtt, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
wxStaticBoxSizer* sbRightSizerFormula;
sbRightSizerFormula = new wxStaticBoxSizer( new wxStaticBox( m_panelAttenuators, wxID_ANY, _("Formula") ), wxVERTICAL );
m_panelAttFormula = new wxHtmlWindow( sbRightSizerFormula->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_AUTO );
sbRightSizerFormula->Add( m_panelAttFormula, 1, wxEXPAND|wxBOTTOM, 5 );
bSizerAtt->Add( sbRightSizerFormula, 1, wxEXPAND|wxALL, 5 );
m_panelAttenuators->SetSizer( bSizerAtt );
m_panelAttenuators->Layout();
bSizerAtt->Fit( m_panelAttenuators );
m_Notebook->AddPage( m_panelAttenuators, _("RF Attenuators"), false ); m_Notebook->AddPage( m_panelAttenuators, _("RF Attenuators"), false );
m_panelESeries = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panelESeries = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* bSizerESerie; wxBoxSizer* bSizerESerie;
@ -1756,9 +1588,6 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow
// Connect Events // Connect Events
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( PCB_CALCULATOR_FRAME_BASE::OnClosePcbCalc ) ); this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( PCB_CALCULATOR_FRAME_BASE::OnClosePcbCalc ) );
this->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( PCB_CALCULATOR_FRAME_BASE::OnUpdateUI ) ); this->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( PCB_CALCULATOR_FRAME_BASE::OnUpdateUI ) );
m_AttenuatorsSelection->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnAttenuatorSelection ), NULL, this );
m_buttonAlcAtt->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnCalculateAttenuator ), NULL, this );
m_bpButtonCalcAtt->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnCalculateAttenuator ), NULL, this );
m_e1->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this ); m_e1->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this );
m_e3->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this ); m_e3->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this );
m_e6->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this ); m_e6->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this );
@ -1819,9 +1648,6 @@ PCB_CALCULATOR_FRAME_BASE::~PCB_CALCULATOR_FRAME_BASE()
// Disconnect Events // Disconnect Events
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( PCB_CALCULATOR_FRAME_BASE::OnClosePcbCalc ) ); this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( PCB_CALCULATOR_FRAME_BASE::OnClosePcbCalc ) );
this->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( PCB_CALCULATOR_FRAME_BASE::OnUpdateUI ) ); this->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( PCB_CALCULATOR_FRAME_BASE::OnUpdateUI ) );
m_AttenuatorsSelection->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnAttenuatorSelection ), NULL, this );
m_buttonAlcAtt->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnCalculateAttenuator ), NULL, this );
m_bpButtonCalcAtt->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnCalculateAttenuator ), NULL, this );
m_e1->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this ); m_e1->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this );
m_e3->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this ); m_e3->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this );
m_e6->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this ); m_e6->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnESeriesSelection ), NULL, this );

File diff suppressed because it is too large Load Diff

View File

@ -17,6 +17,7 @@ class UNIT_SELECTOR_RESISTOR;
class UNIT_SELECTOR_THICKNESS; class UNIT_SELECTOR_THICKNESS;
#include "panel_regulator.h" #include "panel_regulator.h"
#include "panel_attenuators.h"
#include "widgets/unit_selector.h" #include "widgets/unit_selector.h"
#include "kiway_player.h" #include "kiway_player.h"
#include <wx/string.h> #include <wx/string.h>
@ -29,18 +30,18 @@ class UNIT_SELECTOR_THICKNESS;
#include <wx/bitmap.h> #include <wx/bitmap.h>
#include <wx/image.h> #include <wx/image.h>
#include <wx/icon.h> #include <wx/icon.h>
#include <wx/radiobox.h>
#include <wx/statbmp.h>
#include <wx/sizer.h>
#include <wx/stattext.h> #include <wx/stattext.h>
#include <wx/textctrl.h> #include <wx/textctrl.h>
#include <wx/statbox.h> #include <wx/sizer.h>
#include <wx/button.h>
#include <wx/bmpbuttn.h>
#include <wx/html/htmlwin.h>
#include <wx/statline.h> #include <wx/statline.h>
#include <wx/radiobut.h> #include <wx/radiobut.h>
#include <wx/statbox.h>
#include <wx/button.h>
#include <wx/html/htmlwin.h>
#include <wx/radiobox.h>
#include <wx/statbmp.h>
#include <wx/choice.h> #include <wx/choice.h>
#include <wx/bmpbuttn.h>
#include <wx/grid.h> #include <wx/grid.h>
#include <wx/notebook.h> #include <wx/notebook.h>
#include <wx/frame.h> #include <wx/frame.h>
@ -59,32 +60,7 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER
wxMenuBar* m_menubar; wxMenuBar* m_menubar;
wxNotebook* m_Notebook; wxNotebook* m_Notebook;
PANEL_REGULATOR* m_panelRegulators; PANEL_REGULATOR* m_panelRegulators;
wxPanel* m_panelAttenuators; PANEL_ATTENUATORS* m_panelAttenuators;
wxRadioBox* m_AttenuatorsSelection;
wxStaticBitmap* m_attenuatorBitmap;
wxStaticText* m_attenuationLabel;
wxTextCtrl* m_AttValueCtrl;
wxStaticText* m_attUnit;
wxStaticText* m_attenuationZinLabel;
wxTextCtrl* m_ZinValueCtrl;
wxStaticText* m_attZinUnit;
wxStaticText* m_ZoutLabel;
wxTextCtrl* m_ZoutValueCtrl;
wxStaticText* m_attZoutUnit;
wxButton* m_buttonAlcAtt;
wxBitmapButton* m_bpButtonCalcAtt;
wxStaticText* m_attenuatorR1Label;
wxTextCtrl* m_Att_R1_Value;
wxStaticText* m_attR1Unit;
wxStaticText* m_attenuatorR2Label;
wxTextCtrl* m_Att_R2_Value;
wxStaticText* m_attR2Unit;
wxStaticText* m_attenuatorR3Label;
wxTextCtrl* m_Att_R3_Value;
wxStaticText* m_attR3Unit;
wxStaticText* m_staticTextAttMsg;
wxHtmlWindow* m_Attenuator_Messages;
wxHtmlWindow* m_panelAttFormula;
wxPanel* m_panelESeries; wxPanel* m_panelESeries;
wxStaticText* m_ESrequired; wxStaticText* m_ESrequired;
wxTextCtrl* m_ResRequired; wxTextCtrl* m_ResRequired;
@ -351,8 +327,6 @@ class PCB_CALCULATOR_FRAME_BASE : public KIWAY_PLAYER
// Virtual event handlers, overide them in your derived class // Virtual event handlers, overide them in your derived class
virtual void OnClosePcbCalc( wxCloseEvent& event ) { event.Skip(); } virtual void OnClosePcbCalc( wxCloseEvent& event ) { event.Skip(); }
virtual void OnUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); } virtual void OnUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); }
virtual void OnAttenuatorSelection( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCalculateAttenuator( wxCommandEvent& event ) { event.Skip(); }
virtual void OnESeriesSelection( wxCommandEvent& event ) { event.Skip(); } virtual void OnESeriesSelection( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCalculateESeries( wxCommandEvent& event ) { event.Skip(); } virtual void OnCalculateESeries( wxCommandEvent& event ) { event.Skip(); }
virtual void OnToleranceSelection( wxCommandEvent& event ) { event.Skip(); } virtual void OnToleranceSelection( wxCommandEvent& event ) { event.Skip(); }

View File

@ -0,0 +1,223 @@
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2011 jean-pierre.charras
* Copyright (C) 1992-2021 Kicad Developers, see AUTHORS.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 3
* 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, see <http://www.gnu.org/licenses/>.
*/
#include <wx/choicdlg.h>
#include <wx/msgdlg.h>
#include "pcb_calculator_settings.h"
#include "attenuators/attenuator_classes.h"
#include "../dialogs/panel_attenuators.h"
#include <bitmaps.h>
#include <string_utils.h>
#include <widgets/ui_common.h>
extern double DoubleFromString( const wxString& TextValue );
PANEL_ATTENUATORS::PANEL_ATTENUATORS( wxWindow* parent, wxWindowID id,
const wxPoint& pos, const wxSize& size,
long style, const wxString& name ) :
PANEL_ATTENUATORS_BASE( parent, id, pos, size, style, name )
{
m_CurrAttenuator = nullptr;
m_bpButtonCalcAtt->SetBitmap( KiBitmap( BITMAPS::small_down ) );
// Populate attenuator list ordered like in dialog menu list
m_AttenuatorList.push_back( new ATTENUATOR_PI() );
m_AttenuatorList.push_back( new ATTENUATOR_TEE() );
m_AttenuatorList.push_back( new ATTENUATOR_BRIDGE() );
m_AttenuatorList.push_back( new ATTENUATOR_SPLITTER() );
m_CurrAttenuator = m_AttenuatorList[0];
m_staticTextAttMsg->SetFont( KIUI::GetInfoFont( this ).Italic() );
m_attZinUnit->SetLabel( wxT( "" ) );
m_attZoutUnit->SetLabel( wxT( "" ) );
m_attR1Unit->SetLabel( wxT( "" ) );
m_attR2Unit->SetLabel( wxT( "" ) );
m_attR3Unit->SetLabel( wxT( "" ) );
}
PANEL_ATTENUATORS::~PANEL_ATTENUATORS()
{
for( unsigned ii = 0; ii < m_AttenuatorList.size(); ii++ )
delete m_AttenuatorList[ii];
}
void PANEL_ATTENUATORS::UpdateUI()
{
m_attenuatorBitmap->SetBitmap( *m_CurrAttenuator->m_SchBitMap );
m_attenuatorBitmap->GetParent()->Layout();
m_attenuatorBitmap->GetParent()->Refresh();
}
void PANEL_ATTENUATORS::LoadSettings( PCB_CALCULATOR_SETTINGS* aCfg )
{
wxASSERT( aCfg );
for( ATTENUATOR* attenuator : m_AttenuatorList )
attenuator->ReadConfig();
m_AttenuatorsSelection->SetSelection( aCfg->m_Attenuators.type );
SetAttenuator( m_AttenuatorsSelection->GetSelection() );
}
void PANEL_ATTENUATORS::SaveSettings( PCB_CALCULATOR_SETTINGS* aCfg )
{
wxASSERT( aCfg );
aCfg->m_Attenuators.type = m_AttenuatorsSelection->GetSelection();
for( unsigned ii = 0; ii < m_AttenuatorList.size(); ii++ )
m_AttenuatorList[ii]->WriteConfig();
}
// Called on a attenuator selection
void PANEL_ATTENUATORS::OnAttenuatorSelection( wxCommandEvent& event )
{
SetAttenuator( (unsigned) event.GetSelection() );
Refresh();
}
void PANEL_ATTENUATORS::SetAttenuator( unsigned aIdx )
{
if( aIdx >=m_AttenuatorList.size() )
aIdx = m_AttenuatorList.size() - 1;
m_CurrAttenuator = m_AttenuatorList[aIdx];
TransfAttenuatorDataToPanel();
m_Attenuator_Messages->SetPage( wxEmptyString );
m_Att_R1_Value->SetValue( wxEmptyString );
m_Att_R2_Value->SetValue( wxEmptyString );
m_Att_R3_Value->SetValue( wxEmptyString );
}
void PANEL_ATTENUATORS::OnCalculateAttenuator( wxCommandEvent& event )
{
TransfPanelDataToAttenuator();
m_CurrAttenuator->Calculate();
TransfAttenuatorResultsToPanel();
}
void PANEL_ATTENUATORS::TransfPanelDataToAttenuator()
{
wxString msg;
msg = m_AttValueCtrl->GetValue();
m_CurrAttenuator->m_Attenuation = DoubleFromString(msg);
msg = m_ZinValueCtrl->GetValue();
m_CurrAttenuator->m_Zin = DoubleFromString(msg);
msg = m_ZoutValueCtrl->GetValue();
m_CurrAttenuator->m_Zout = DoubleFromString(msg);
}
void PANEL_ATTENUATORS::TransfAttenuatorDataToPanel()
{
m_attenuatorBitmap->SetBitmap( *m_CurrAttenuator->m_SchBitMap );
wxString msg;
msg.Printf( wxT( "%g" ), m_CurrAttenuator->m_Attenuation );
m_AttValueCtrl->SetValue( msg );
m_AttValueCtrl->Enable( m_CurrAttenuator->m_Attenuation_Enable );
m_ZinValueCtrl->Enable( m_CurrAttenuator->m_Zin_Enable );
if( m_CurrAttenuator->m_Zin_Enable )
msg.Printf( wxT( "%g" ), m_CurrAttenuator->m_Zin );
else
msg.Clear();
m_ZinValueCtrl->SetValue( msg );
msg.Printf( wxT( "%g" ), m_CurrAttenuator->m_Zout );
m_ZoutValueCtrl->SetValue( msg );
if( m_CurrAttenuator->m_FormulaName )
{
if( m_CurrAttenuator->m_FormulaName->StartsWith( "<!" ) )
{
m_panelAttFormula->SetPage( *m_CurrAttenuator->m_FormulaName );
}
else
{
wxString html_txt;
ConvertMarkdown2Html( wxGetTranslation( *m_CurrAttenuator->m_FormulaName ), html_txt );
m_panelAttFormula->SetPage( html_txt );
}
}
else
{
m_panelAttFormula->SetPage( wxEmptyString );
}
}
void PANEL_ATTENUATORS::TransfAttenuatorResultsToPanel()
{
wxString msg;
m_Attenuator_Messages->SetPage( wxEmptyString );
if( m_CurrAttenuator->m_Error )
{
msg.Printf( _( "Attenuation more than %f dB" ),
m_CurrAttenuator->m_MinimumATT );
m_Attenuator_Messages->AppendToPage( wxT( "<br><b>Error!</b></br><br><em>" ) );
m_Attenuator_Messages->AppendToPage( msg );
m_Attenuator_Messages->AppendToPage( wxT( "</em></br>" ) );
// Display -- as resistor values:
msg = wxT( "--" );
m_Att_R1_Value->SetValue( msg );
m_Att_R2_Value->SetValue( msg );
if( m_CurrAttenuator->m_ResultCount >= 3 )
m_Att_R3_Value->SetValue( msg );
return;
}
msg.Printf( wxT( "%g" ), m_CurrAttenuator->m_R1 );
m_Att_R1_Value->SetValue( msg );
msg.Printf( wxT( "%g" ), m_CurrAttenuator->m_R2 );
m_Att_R2_Value->SetValue( msg );
if( m_CurrAttenuator->m_ResultCount < 3 )
{
m_Att_R3_Value->SetValue( wxEmptyString );
}
else
{
msg.Printf( wxT( "%g" ), m_CurrAttenuator->m_R3 );
m_Att_R3_Value->SetValue( msg );
}
}

View File

@ -35,14 +35,12 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
m_lastNotebookPage( -1 ), m_lastNotebookPage( -1 ),
m_macHack( true ) m_macHack( true )
{ {
m_bpButtonCalcAtt->SetBitmap( KiBitmap( BITMAPS::small_down ) );
m_bpButtonAnalyze->SetBitmap( KiBitmap( BITMAPS::small_down ) ); m_bpButtonAnalyze->SetBitmap( KiBitmap( BITMAPS::small_down ) );
m_bpButtonSynthetize->SetBitmap( KiBitmap( BITMAPS::small_up ) ); m_bpButtonSynthetize->SetBitmap( KiBitmap( BITMAPS::small_up ) );
SetKiway( this, aKiway ); SetKiway( this, aKiway );
m_currTransLine = nullptr; m_currTransLine = nullptr;
m_currTransLineType = DEFAULT_TYPE; m_currTransLineType = DEFAULT_TYPE;
m_currAttenuator = nullptr;
m_TWMode = TW_MASTER_CURRENT; m_TWMode = TW_MASTER_CURRENT;
m_TWNested = false; m_TWNested = false;
@ -65,21 +63,6 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
for( int ii = 0; ii < 8; ii++ ) for( int ii = 0; ii < 8; ii++ )
m_transline_list.push_back( new TRANSLINE_IDENT( tltype_list[ii] ) ); m_transline_list.push_back( new TRANSLINE_IDENT( tltype_list[ii] ) );
// Populate attenuator list ordered like in dialog menu list
m_attenuator_list.push_back( new ATTENUATOR_PI() );
m_attenuator_list.push_back( new ATTENUATOR_TEE() );
m_attenuator_list.push_back( new ATTENUATOR_BRIDGE() );
m_attenuator_list.push_back( new ATTENUATOR_SPLITTER() );
m_currAttenuator = m_attenuator_list[0];
m_staticTextAttMsg->SetFont( KIUI::GetInfoFont( this ).Italic() );
m_attZinUnit->SetLabel( wxT( "" ) );
m_attZoutUnit->SetLabel( wxT( "" ) );
m_attR1Unit->SetLabel( wxT( "" ) );
m_attR2Unit->SetLabel( wxT( "" ) );
m_attR3Unit->SetLabel( wxT( "" ) );
m_reqResUnits->SetLabel( wxT( "kΩ" ) ); m_reqResUnits->SetLabel( wxT( "kΩ" ) );
m_exclude1Units->SetLabel( wxT( "kΩ" ) ); m_exclude1Units->SetLabel( wxT( "kΩ" ) );
m_exclude2Units->SetLabel( wxT( "kΩ" ) ); m_exclude2Units->SetLabel( wxT( "kΩ" ) );
@ -111,8 +94,6 @@ PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
initViaSizePanel(); initViaSizePanel();
initESeriesPanel(); initESeriesPanel();
SetAttenuator( m_AttenuatorsSelection->GetSelection() );
ToleranceSelection( m_rbToleranceSelection->GetSelection() ); ToleranceSelection( m_rbToleranceSelection->GetSelection() );
BoardClassesUpdateData( m_BoardClassesUnitsSelector->GetUnitScale() ); BoardClassesUpdateData( m_BoardClassesUnitsSelector->GetUnitScale() );
@ -151,9 +132,6 @@ PCB_CALCULATOR_FRAME::~PCB_CALCULATOR_FRAME()
for( unsigned ii = 0; ii < m_transline_list.size(); ii++ ) for( unsigned ii = 0; ii < m_transline_list.size(); ii++ )
delete m_transline_list[ii]; delete m_transline_list[ii];
for( unsigned ii = 0; ii < m_attenuator_list.size(); ii++ )
delete m_attenuator_list[ii];
delete m_ccValueNamesBitmap; delete m_ccValueNamesBitmap;
delete m_ccValuesBitmap; delete m_ccValuesBitmap;
delete m_ccMultipliersBitmap; delete m_ccMultipliersBitmap;
@ -177,28 +155,26 @@ void PCB_CALCULATOR_FRAME::OnUpdateUI( wxUpdateUIEvent& event )
event2.SetInt( m_currTransLineType ); event2.SetInt( m_currTransLineType );
m_TranslineSelection->Command( event2 ); m_TranslineSelection->Command( event2 );
for( int i = 0; i < m_attenuator_list.size(); ++i ) for( int i = 0; i < m_panelAttenuators->m_AttenuatorList.size(); ++i )
{ {
if( m_attenuator_list[i] == m_currAttenuator ) if( m_panelAttenuators->m_AttenuatorList[i] == m_panelAttenuators->m_CurrAttenuator )
{ {
event2.SetEventObject( m_AttenuatorsSelection ); event2.SetEventObject( m_panelAttenuators->GetAttenuatorsSelector() );
event2.SetInt( i ); event2.SetInt( i );
m_AttenuatorsSelection->Command( event2 ); m_panelAttenuators->GetAttenuatorsSelector()->Command( event2 );
break; break;
} }
} }
m_panelAttenuators->UpdateUI();
ToleranceSelection( m_rbToleranceSelection->GetSelection() ); ToleranceSelection( m_rbToleranceSelection->GetSelection() );
m_viaBitmap->SetBitmap( KiBitmap( BITMAPS::viacalc ) ); m_viaBitmap->SetBitmap( KiBitmap( BITMAPS::viacalc ) );
m_panelViaSize->Layout(); m_panelViaSize->Layout();
m_attenuatorBitmap->SetBitmap( *m_currAttenuator->m_SchBitMap );
m_panelRegulators->Layout(); m_panelRegulators->Layout();
m_attenuatorBitmap->GetParent()->Layout();
m_attenuatorBitmap->GetParent()->Refresh();
m_panelESeriesHelp->Refresh(); m_panelESeriesHelp->Refresh();
m_htmlWinFormulas->Refresh(); m_htmlWinFormulas->Refresh();
@ -276,9 +252,11 @@ void PCB_CALCULATOR_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
m_currTransLineType = static_cast<TRANSLINE_TYPE_ID>( cfg->m_TransLine.type ); m_currTransLineType = static_cast<TRANSLINE_TYPE_ID>( cfg->m_TransLine.type );
m_Notebook->ChangeSelection( cfg->m_LastPage ); m_Notebook->ChangeSelection( cfg->m_LastPage );
m_rbToleranceSelection->SetSelection( cfg->m_ColorCodeTolerance ); m_rbToleranceSelection->SetSelection( cfg->m_ColorCodeTolerance );
m_AttenuatorsSelection->SetSelection( cfg->m_Attenuators.type );
m_BoardClassesUnitsSelector->SetSelection( cfg->m_BoardClassUnits ); m_BoardClassesUnitsSelector->SetSelection( cfg->m_BoardClassUnits );
// Attenuators panel config:
m_panelAttenuators->LoadSettings( cfg );
// Regul panel config: // Regul panel config:
m_panelRegulators->LoadSettings( cfg ); m_panelRegulators->LoadSettings( cfg );
@ -288,9 +266,6 @@ void PCB_CALCULATOR_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
for( TRANSLINE_IDENT* transline : m_transline_list ) for( TRANSLINE_IDENT* transline : m_transline_list )
transline->ReadConfig(); transline->ReadConfig();
for( ATTENUATOR* attenuator : m_attenuator_list )
attenuator->ReadConfig();
} }
@ -308,7 +283,6 @@ void PCB_CALCULATOR_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
{ {
cfg->m_LastPage = m_Notebook->GetSelection(); cfg->m_LastPage = m_Notebook->GetSelection();
cfg->m_TransLine.type = m_currTransLineType; cfg->m_TransLine.type = m_currTransLineType;
cfg->m_Attenuators.type = m_AttenuatorsSelection->GetSelection();
cfg->m_ColorCodeTolerance = m_rbToleranceSelection->GetSelection(); cfg->m_ColorCodeTolerance = m_rbToleranceSelection->GetSelection();
cfg->m_BoardClassUnits = m_BoardClassesUnitsSelector->GetSelection(); cfg->m_BoardClassUnits = m_BoardClassesUnitsSelector->GetSelection();
@ -316,6 +290,7 @@ void PCB_CALCULATOR_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
cfg->m_Electrical.spacing_voltage = m_ElectricalSpacingVoltage->GetValue(); cfg->m_Electrical.spacing_voltage = m_ElectricalSpacingVoltage->GetValue();
m_panelRegulators->Regulators_WriteConfig( cfg ); m_panelRegulators->Regulators_WriteConfig( cfg );
m_panelAttenuators->SaveSettings( cfg );
} }
writeTrackWidthConfig(); writeTrackWidthConfig();
@ -324,9 +299,6 @@ void PCB_CALCULATOR_FRAME::SaveSettings( APP_SETTINGS_BASE* aCfg )
for( unsigned ii = 0; ii < m_transline_list.size(); ii++ ) for( unsigned ii = 0; ii < m_transline_list.size(); ii++ )
m_transline_list[ii]->WriteConfig(); m_transline_list[ii]->WriteConfig();
for( unsigned ii = 0; ii < m_attenuator_list.size(); ii++ )
m_attenuator_list[ii]->WriteConfig();
} }

View File

@ -271,27 +271,6 @@ private:
void OnToleranceSelection( wxCommandEvent& event ) override; void OnToleranceSelection( wxCommandEvent& event ) override;
void ToleranceSelection( int aSelection ); void ToleranceSelection( int aSelection );
// Attenuators Panel
void OnAttenuatorSelection( wxCommandEvent& event ) override;
void SetAttenuator( unsigned aIdx );
void OnCalculateAttenuator( wxCommandEvent& event ) override;
void TransfPanelDataToAttenuator();
void TransfAttenuatorDataToPanel();
void TransfAttenuatorResultsToPanel();
// Regulators Panel
#if 0
void OnRegulatorCalcButtonClick( wxCommandEvent& event ) override;
void OnRegulatorResetButtonClick( wxCommandEvent& event ) override;
void OnRegulTypeSelection( wxCommandEvent& event ) override;
void OnRegulatorSelection( wxCommandEvent& event ) override;
void OnDataFileSelection( wxCommandEvent& event ) override;
void OnAddRegulator( wxCommandEvent& event ) override;
void OnEditRegulator( wxCommandEvent& event ) override;
void OnRemoveRegulator( wxCommandEvent& event ) override;
#endif
private: private:
enum // Which dimension is controlling the track width / current enum // Which dimension is controlling the track width / current
{ // calculations: { // calculations:
@ -306,9 +285,6 @@ private:
TRANSLINE* m_currTransLine; TRANSLINE* m_currTransLine;
std::vector<TRANSLINE_IDENT*> m_transline_list; std::vector<TRANSLINE_IDENT*> m_transline_list;
ATTENUATOR* m_currAttenuator;
std::vector<ATTENUATOR*> m_attenuator_list;
wxBitmap* m_ccValueNamesBitmap; wxBitmap* m_ccValueNamesBitmap;
wxBitmap* m_ccValuesBitmap; wxBitmap* m_ccValuesBitmap;
wxBitmap* m_ccMultipliersBitmap; wxBitmap* m_ccMultipliersBitmap;