251 lines
7.7 KiB
C++
251 lines
7.7 KiB
C++
/**
|
|
* @file pcb_calculator.h
|
|
*/
|
|
|
|
#ifndef PCB_CALCULATOR_H
|
|
#define PCB_CALCULATOR_H
|
|
|
|
#include <pcb_calculator_frame_base.h>
|
|
|
|
#include <transline.h> // Included for SUBST_PRMS_ID definition.
|
|
#include <transline_ident.h>
|
|
#include <attenuator_classes.h>
|
|
#include <class_regulator_data.h>
|
|
|
|
extern const wxString PcbCalcDataFileExt;
|
|
|
|
/* Class PCB_CALCULATOR_FRAME_BASE
|
|
This is the main frame for this application
|
|
*/
|
|
class PCB_CALCULATOR_FRAME : public PCB_CALCULATOR_FRAME_BASE
|
|
{
|
|
public:
|
|
REGULATOR_LIST m_RegulatorList; // the list of known regulator
|
|
|
|
private:
|
|
bool m_RegulatorListChanged; // set to true when m_RegulatorList
|
|
// was modified, and the corresponging file
|
|
// must be rewritten
|
|
wxSize m_FrameSize;
|
|
wxPoint m_FramePos;
|
|
wxConfig * m_Config;
|
|
enum TRANSLINE_TYPE_ID m_currTransLineType;
|
|
TRANSLINE * m_currTransLine; // a pointer to the active transline
|
|
// List of translines: ordered like in dialog menu list
|
|
std::vector <TRANSLINE_IDENT *> m_transline_list;
|
|
ATTENUATOR * m_currAttenuator;
|
|
// List ofattenuators: ordered like in dialog menu list
|
|
std::vector <ATTENUATOR *> m_attenuator_list;
|
|
wxString m_lastSelectedRegulatorName; // last regulator name selected
|
|
|
|
|
|
public:
|
|
PCB_CALCULATOR_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
|
~PCB_CALCULATOR_FRAME();
|
|
|
|
private:
|
|
|
|
// Event handlers
|
|
void OnClosePcbCalc( wxCloseEvent& event );
|
|
|
|
// These 3 functions are called by the OnPaint event, to draw
|
|
// icons that show the current item on the specific panels
|
|
void OnPaintTranslinePanel( wxPaintEvent& event );
|
|
void OnPaintAttenuatorPanel( wxPaintEvent& event );
|
|
void OnPaintAttFormulaPanel( wxPaintEvent& event );
|
|
|
|
// Config read-write
|
|
void ReadConfig();
|
|
void WriteConfig();
|
|
|
|
// R/W data files:
|
|
bool ReadDataFile();
|
|
bool WriteDataFile();
|
|
|
|
/**
|
|
* @return the full filename of the selected pcb_calculator data file
|
|
*/
|
|
const wxString GetDataFilename();
|
|
|
|
/**
|
|
* Initialize the full filename of the selected pcb_calculator data file
|
|
* force the standard extension of the file (.pcbcalc)
|
|
* @param aFilename = the full filename, with or without extension
|
|
*/
|
|
void SetDataFilename( const wxString & aFilename);
|
|
|
|
// tracks width versus current functions:
|
|
/**
|
|
* Function OnTWCalculateButt
|
|
* Called by clicking on the calculate button
|
|
*/
|
|
void OnTWCalculateButt( wxCommandEvent& event );
|
|
|
|
/**
|
|
* Function TW_Init
|
|
* Read config and init dialog widgets values
|
|
*/
|
|
void TW_Init();
|
|
|
|
/**
|
|
* Function TW_WriteConfig
|
|
* Write Track width prameters in config
|
|
*/
|
|
void TW_WriteConfig();
|
|
|
|
/**
|
|
* Function TWCalculate
|
|
* Performs track caracteristics values calculations.
|
|
*/
|
|
double TWCalculate( double aCurrent, double aThickness, double aDeltaT_C,
|
|
bool aUseInternalLayer );
|
|
|
|
// Electrical spacing panel:
|
|
void OnElectricalSpacingUnitsSelection( wxCommandEvent& event );
|
|
void OnElectricalSpacingRefresh( wxCommandEvent& event );
|
|
void ElectricalSpacingUpdateData( double aUnitScale );
|
|
|
|
// Transline functions:
|
|
/**
|
|
* Function OnTranslineSelection
|
|
* Called on new transmission line selection
|
|
*/
|
|
void OnTranslineSelection( wxCommandEvent& event );
|
|
|
|
/**
|
|
* Function OnTranslineAnalyse
|
|
* Run a new analyse for the current transline with current parameters
|
|
* and displays the electrical parmeters
|
|
*/
|
|
void OnTranslineAnalyse( wxCommandEvent& event );
|
|
|
|
/**
|
|
* Function OnTranslineSynthetize
|
|
* Run a new synthezis for the current transline with current parameters
|
|
* and displays the geometrical parmeters
|
|
*/
|
|
void OnTranslineSynthetize( wxCommandEvent& event );
|
|
|
|
/**
|
|
* Function OnTranslineEpsilonR_Button
|
|
* Shows a list of current relative dielectric constant(Er)
|
|
* and set the selected value in main dialog frame
|
|
*/
|
|
void OnTranslineEpsilonR_Button( wxCommandEvent& event );
|
|
|
|
/**
|
|
* Function OnTranslineTanD_Button
|
|
* Shows a list of current dielectric loss factor (tangent delta)
|
|
* and set the selected value in main dialog frame
|
|
*/
|
|
void OnTranslineTanD_Button( wxCommandEvent& event );
|
|
|
|
/**
|
|
* Function OnTranslineRho_Button
|
|
* Shows a list of current Specific resistance list (rho)
|
|
* and set the selected value in main dialog frame
|
|
*/
|
|
void OnTranslineRho_Button( wxCommandEvent& event );
|
|
|
|
/**
|
|
* Function TranslineTypeSelection
|
|
* Must be called after selection of a new transline.
|
|
* Update all values, labels and tool tips of parameters needed
|
|
* by the new transline
|
|
* Irrelevant parameters texts are blanked.
|
|
* @param aType = the TRANSLINE_TYPE_ID of the new selected transline
|
|
*/
|
|
void TranslineTypeSelection( enum TRANSLINE_TYPE_ID aType );
|
|
|
|
/**
|
|
* Function TransfDlgDataToTranslineParams
|
|
* Read values entered in dialog frame, and transfert these
|
|
* values in current transline parameters, converted in normalized units
|
|
*/
|
|
void TransfDlgDataToTranslineParams();
|
|
|
|
// Color Code panel
|
|
void OnToleranceSelection( wxCommandEvent& event );
|
|
void ToleranceSelection( int aSelection );
|
|
|
|
// Attenuators Panel
|
|
void OnAttenuatorSelection( wxCommandEvent& event );
|
|
void SetAttenuator( unsigned aIdx );
|
|
void OnCalculateAttenuator( wxCommandEvent& event );
|
|
void TransfPanelDataToAttenuator();
|
|
void TransfAttenuatorDataToPanel();
|
|
void TransfAttenuatorResultsToPanel();
|
|
|
|
// Regulators Panel
|
|
void OnRegulatorCalcButtonClick( wxCommandEvent& event );
|
|
void OnRegulTypeSelection( wxCommandEvent& event );
|
|
void OnRegulatorSelection( wxCommandEvent& event );
|
|
void OnDataFileSelection( wxCommandEvent& event );
|
|
void OnAddRegulator( wxCommandEvent& event );
|
|
void OnEditRegulator( wxCommandEvent& event );
|
|
void OnRemoveRegulator( wxCommandEvent& event );
|
|
|
|
/**
|
|
* Function RegulatorPageUpdate:
|
|
* Update the regulator page dialog display:
|
|
* enable the current regulator drawings and the formula used for calculations
|
|
*/
|
|
void RegulatorPageUpdate();
|
|
|
|
/**
|
|
* Function SelectLastSelectedRegulator
|
|
* select in choice box the last selected regulator
|
|
* (name in m_lastSelectedRegulatorName)
|
|
* and update the displayed values.
|
|
* if m_lastSelectedRegulatorName is empty, just calls
|
|
* RegulatorPageUpdate()
|
|
*/
|
|
void SelectLastSelectedRegulator();
|
|
|
|
void RegulatorsSolve();
|
|
|
|
public:
|
|
// Read/write params values and results
|
|
|
|
/**
|
|
* Function SetPrmValue
|
|
* Read/write params values and results
|
|
* @param aPrmId = param id to write
|
|
* @param aValue = valmue to write
|
|
*/
|
|
void SetPrmValue( enum PRMS_ID aPrmId, double aValue );
|
|
|
|
/**
|
|
* Function SetResult
|
|
* Puts the text into the given result line.
|
|
* @param aLineNumber = the line (0 to 5) wher to display the text
|
|
* @param aText = the text to display
|
|
*/
|
|
void SetResult( int aLineNumber, const wxString & aText );
|
|
|
|
/**
|
|
* Function GetPrmValue
|
|
* Returns a param value.
|
|
* @param aPrmId = param id to write
|
|
* @return the value always in normalized unit (meter, Hz, Ohm, radian)
|
|
*/
|
|
double GetPrmValue( enum PRMS_ID aPrmId );
|
|
|
|
/**
|
|
* Function IsPrmSelected
|
|
* @return true if the param aPrmId is selected
|
|
* Has meaning only for params that have a radio button
|
|
*/
|
|
bool IsPrmSelected( enum PRMS_ID aPrmId );
|
|
|
|
// Board classes panel:
|
|
void OnBoardClassesUnitsSelection( wxCommandEvent& event );
|
|
void BoardClassesUpdateData( double aUnitScale );
|
|
|
|
};
|
|
|
|
|
|
extern const wxString DataFileNameExt;
|
|
|
|
#endif // PCB_CALCULATOR_H
|