Stackup manager: Add a dielectric manager to handle more easily user defined dielectric substrates
panel_board_stackup.cpp: material selection: replace wxChoice by a better widget (wxTextCtrl+wxButton) to call the dielectric manager dialog Move dielectric material class to a specific file
This commit is contained in:
parent
6ef4d7879e
commit
271465a644
|
@ -183,10 +183,13 @@ if( KICAD_SCRIPTING AND KICAD_SCRIPTING_ACTION_MENU )
|
|||
endif()
|
||||
|
||||
set( PCBNEW_BRDSTACKUP_MGR
|
||||
board_stackup_manager/dielectric_material.cpp
|
||||
board_stackup_manager/stackup_predefined_prms.cpp
|
||||
board_stackup_manager/panel_board_stackup.cpp
|
||||
board_stackup_manager/panel_board_stackup_base.cpp
|
||||
board_stackup_manager/board_stackup_reporter.cpp
|
||||
board_stackup_manager/dialog_dielectric_list_manager_base.cpp
|
||||
board_stackup_manager/dialog_dielectric_list_manager.cpp
|
||||
)
|
||||
|
||||
set( PCBNEW_IMPORT_GFX
|
||||
|
|
|
@ -0,0 +1,125 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2009-2019 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/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file dialog_dielectric_manager.h
|
||||
*/
|
||||
|
||||
#include "dialog_dielectric_list_manager.h"
|
||||
|
||||
|
||||
DIALOG_DIELECTRIC_MATERIAL::DIALOG_DIELECTRIC_MATERIAL( wxWindow* aParent,
|
||||
DIELECTRIC_SUBSTRATE_LIST& aMaterialList )
|
||||
:DIALOG_DIELECTRIC_MATERIAL_BASE( aParent ),
|
||||
m_materialList( aMaterialList )
|
||||
{
|
||||
initMaterialList();
|
||||
}
|
||||
|
||||
DIALOG_DIELECTRIC_MATERIAL::~DIALOG_DIELECTRIC_MATERIAL()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
bool DIALOG_DIELECTRIC_MATERIAL::TransferDataFromWindow()
|
||||
{
|
||||
// Validate double values from wxTextCtrl
|
||||
double dummy;
|
||||
|
||||
if( !m_tcEpsilonR->GetValue().ToDouble( &dummy ) || dummy < 0.0 )
|
||||
{
|
||||
wxMessageBox( _( " Incorrect value for Epsilon R" ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !m_tcLossTg->GetValue().ToDouble( &dummy ) || dummy < 0.0 )
|
||||
{
|
||||
wxMessageBox( _( " Incorrect value for Loss Tangent" ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool DIALOG_DIELECTRIC_MATERIAL::TransferDataToWindow()
|
||||
{
|
||||
// Init m_tcEpsilonR and m_tcLossTg to a dummy (default) value
|
||||
DIELECTRIC_SUBSTRATE dummy;
|
||||
dummy.m_EpsilonR = 1.0;
|
||||
dummy.m_LossTangent = 0.0;
|
||||
|
||||
m_tcEpsilonR->SetValue( dummy.FormatEpsilonR() );
|
||||
m_tcLossTg->SetValue( dummy.FormatLossTangent() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
DIELECTRIC_SUBSTRATE DIALOG_DIELECTRIC_MATERIAL::GetSelectedSubstrate()
|
||||
{
|
||||
DIELECTRIC_SUBSTRATE substrate;
|
||||
|
||||
// return the selected/created substrate. A empty substrate can be returned
|
||||
double dummy;
|
||||
substrate.m_Name = m_tcMaterial->GetValue();
|
||||
m_tcEpsilonR->GetValue().ToDouble( &dummy );
|
||||
substrate.m_EpsilonR = dummy;
|
||||
m_tcLossTg->GetValue().ToDouble( &dummy );
|
||||
substrate.m_LossTangent = dummy;
|
||||
|
||||
return substrate;
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_DIELECTRIC_MATERIAL::initMaterialList()
|
||||
{
|
||||
m_lcMaterials->AppendColumn( _( "Material" ) );
|
||||
m_lcMaterials->AppendColumn( _( "Epsilon R" ) );
|
||||
m_lcMaterials->AppendColumn( _( "Loss Tg" ) );
|
||||
|
||||
// Fills m_lcMaterials with available materials
|
||||
for( int idx = 0; idx < m_materialList.GetCount(); ++idx )
|
||||
{
|
||||
DIELECTRIC_SUBSTRATE* item = m_materialList.GetSubstrate( idx );
|
||||
|
||||
if( item->m_Name == USER_DEFINED )
|
||||
break;
|
||||
|
||||
long tmp = m_lcMaterials->InsertItem( idx, item->m_Name );
|
||||
|
||||
m_lcMaterials->SetItemData(tmp, idx);
|
||||
m_lcMaterials->SetItem(tmp, 1, item->FormatEpsilonR() );
|
||||
m_lcMaterials->SetItem(tmp, 2, item->FormatLossTangent() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_DIELECTRIC_MATERIAL::onListItemSelected( wxListEvent& event )
|
||||
{
|
||||
int idx = event.GetIndex();
|
||||
|
||||
if( idx < 0 )
|
||||
return;
|
||||
|
||||
m_tcMaterial->SetValue( m_materialList.GetSubstrate( idx )->m_Name );
|
||||
m_tcEpsilonR->SetValue( m_materialList.GetSubstrate( idx )->FormatEpsilonR() );
|
||||
m_tcLossTg->SetValue( m_materialList.GetSubstrate( idx )->FormatLossTangent() );
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2009-2019 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/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file dialog_dielectric_manager.h
|
||||
*/
|
||||
|
||||
#ifndef DIALOG_DIELECTRIC_MANAGER_H
|
||||
#define DIALOG_DIELECTRIC_MANAGER_H
|
||||
|
||||
#include "dialog_dielectric_list_manager_base.h"
|
||||
#include "stackup_predefined_prms.h"
|
||||
#include "dielectric_material.h"
|
||||
|
||||
/**
|
||||
* a Dialog to select/change/add a dielectric material from a material list
|
||||
*/
|
||||
class DIALOG_DIELECTRIC_MATERIAL: public DIALOG_DIELECTRIC_MATERIAL_BASE
|
||||
{
|
||||
public:
|
||||
DIALOG_DIELECTRIC_MATERIAL( wxWindow* aParent, DIELECTRIC_SUBSTRATE_LIST& aMaterialList );
|
||||
~DIALOG_DIELECTRIC_MATERIAL();
|
||||
|
||||
/// @return the selected substrate. If no substrate selected
|
||||
/// a empty substrate is returned
|
||||
DIELECTRIC_SUBSTRATE GetSelectedSubstrate();
|
||||
|
||||
private:
|
||||
void onListItemSelected( wxListEvent& event ) override;
|
||||
bool TransferDataFromWindow() override;
|
||||
bool TransferDataToWindow() override;
|
||||
|
||||
void initMaterialList(); // Fills the dialog with available materials
|
||||
|
||||
/// The list of available materials
|
||||
DIELECTRIC_SUBSTRATE_LIST& m_materialList;
|
||||
};
|
||||
|
||||
#endif // #ifndef DIALOG_DIELECTRIC_MANAGER_H
|
|
@ -0,0 +1,108 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jul 10 2019)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "dialog_dielectric_list_manager_base.h"
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
DIALOG_DIELECTRIC_MATERIAL_BASE::DIALOG_DIELECTRIC_MATERIAL_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
|
||||
{
|
||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||
|
||||
wxBoxSizer* bSizerMain;
|
||||
bSizerMain = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxBoxSizer* bSizerUpper;
|
||||
bSizerUpper = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_staticTextNewDielectric = new wxStaticText( this, wxID_ANY, _("Dielectric material characteristics:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextNewDielectric->Wrap( -1 );
|
||||
bSizerUpper->Add( m_staticTextNewDielectric, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxBoxSizer* bSizerNewItem;
|
||||
bSizerNewItem = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxFlexGridSizer* fgSizerNewDielectric;
|
||||
fgSizerNewDielectric = new wxFlexGridSizer( 2, 3, 0, 0 );
|
||||
fgSizerNewDielectric->AddGrowableCol( 0 );
|
||||
fgSizerNewDielectric->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerNewDielectric->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_staticTexMaterial = new wxStaticText( this, wxID_ANY, _("Name:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTexMaterial->Wrap( -1 );
|
||||
fgSizerNewDielectric->Add( m_staticTexMaterial, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_staticTextEpsilonR = new wxStaticText( this, wxID_ANY, _("Epsilon R:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextEpsilonR->Wrap( -1 );
|
||||
fgSizerNewDielectric->Add( m_staticTextEpsilonR, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_staticTextLossTg = new wxStaticText( this, wxID_ANY, _("Loss Tg:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextLossTg->Wrap( -1 );
|
||||
fgSizerNewDielectric->Add( m_staticTextLossTg, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcMaterial = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerNewDielectric->Add( m_tcMaterial, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcEpsilonR = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerNewDielectric->Add( m_tcEpsilonR, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcLossTg = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerNewDielectric->Add( m_tcLossTg, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
bSizerNewItem->Add( fgSizerNewDielectric, 1, 0, 5 );
|
||||
|
||||
|
||||
bSizerUpper->Add( bSizerNewItem, 0, wxEXPAND, 5 );
|
||||
|
||||
m_staticText = new wxStaticText( this, wxID_ANY, _("Available materials:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText->Wrap( -1 );
|
||||
bSizerUpper->Add( m_staticText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_lcMaterials = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL );
|
||||
bSizerUpper->Add( m_lcMaterials, 1, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 );
|
||||
|
||||
m_staticline = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
bSizerMain->Add( m_staticline, 0, wxEXPAND | wxALL, 5 );
|
||||
|
||||
wxBoxSizer* bSizerBottom;
|
||||
bSizerBottom = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
|
||||
bSizerBottom->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
m_sdbSizer = new wxStdDialogButtonSizer();
|
||||
m_sdbSizerOK = new wxButton( this, wxID_OK );
|
||||
m_sdbSizer->AddButton( m_sdbSizerOK );
|
||||
m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
|
||||
m_sdbSizer->AddButton( m_sdbSizerCancel );
|
||||
m_sdbSizer->Realize();
|
||||
|
||||
bSizerBottom->Add( m_sdbSizer, 0, wxALL, 5 );
|
||||
|
||||
|
||||
bSizerMain->Add( bSizerBottom, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
this->SetSizer( bSizerMain );
|
||||
this->Layout();
|
||||
|
||||
this->Centre( wxBOTH );
|
||||
|
||||
// Connect Events
|
||||
m_lcMaterials->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( DIALOG_DIELECTRIC_MATERIAL_BASE::onListItemSelected ), NULL, this );
|
||||
}
|
||||
|
||||
DIALOG_DIELECTRIC_MATERIAL_BASE::~DIALOG_DIELECTRIC_MATERIAL_BASE()
|
||||
{
|
||||
// Disconnect Events
|
||||
m_lcMaterials->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( DIALOG_DIELECTRIC_MATERIAL_BASE::onListItemSelected ), NULL, this );
|
||||
|
||||
}
|
|
@ -0,0 +1,763 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<wxFormBuilder_Project>
|
||||
<FileVersion major="1" minor="15" />
|
||||
<object class="Project" expanded="1">
|
||||
<property name="class_decoration">; </property>
|
||||
<property name="code_generation">C++</property>
|
||||
<property name="disconnect_events">1</property>
|
||||
<property name="disconnect_mode">source_name</property>
|
||||
<property name="disconnect_php_events">0</property>
|
||||
<property name="disconnect_python_events">0</property>
|
||||
<property name="embedded_files_path">res</property>
|
||||
<property name="encoding">UTF-8</property>
|
||||
<property name="event_generation">connect</property>
|
||||
<property name="file">dialog_dielectric_list_manager_base</property>
|
||||
<property name="first_id">1000</property>
|
||||
<property name="help_provider">none</property>
|
||||
<property name="image_path_wrapper_function_name"></property>
|
||||
<property name="indent_with_spaces"></property>
|
||||
<property name="internationalize">1</property>
|
||||
<property name="name">DialogDielectricListManager</property>
|
||||
<property name="namespace"></property>
|
||||
<property name="path">.</property>
|
||||
<property name="precompiled_header"></property>
|
||||
<property name="relative_path">1</property>
|
||||
<property name="skip_lua_events">1</property>
|
||||
<property name="skip_php_events">1</property>
|
||||
<property name="skip_python_events">1</property>
|
||||
<property name="ui_table">UI</property>
|
||||
<property name="use_array_enum">0</property>
|
||||
<property name="use_enum">0</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
<object class="Dialog" expanded="1">
|
||||
<property name="aui_managed">0</property>
|
||||
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
||||
<property name="bg"></property>
|
||||
<property name="center">wxBOTH</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="event_handler">impl_virtual</property>
|
||||
<property name="extra_style"></property>
|
||||
<property name="fg"></property>
|
||||
<property name="font"></property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">DIALOG_DIELECTRIC_MATERIAL_BASE</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">581,353</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="title"></property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerMain</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerUpper</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Dielectric material characteristics:</property>
|
||||
<property name="markup">0</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextNewDielectric</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerNewItem</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag"></property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxFlexGridSizer" expanded="1">
|
||||
<property name="cols">3</property>
|
||||
<property name="flexible_direction">wxBOTH</property>
|
||||
<property name="growablecols">0</property>
|
||||
<property name="growablerows"></property>
|
||||
<property name="hgap">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">fgSizerNewDielectric</property>
|
||||
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
|
||||
<property name="permission">none</property>
|
||||
<property name="rows">2</property>
|
||||
<property name="vgap">0</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Name:</property>
|
||||
<property name="markup">0</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTexMaterial</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Epsilon R:</property>
|
||||
<property name="markup">0</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextEpsilonR</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Loss Tg:</property>
|
||||
<property name="markup">0</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextLossTg</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_tcMaterial</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="value"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_tcEpsilonR</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="value"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_tcLossTg</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="value"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Available materials:</property>
|
||||
<property name="markup">0</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticText</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxListCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_lcMaterials</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxLC_REPORT|wxLC_SINGLE_SEL</property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnListItemSelected">onListItemSelected</event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND | wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticLine" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticline</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxLI_HORIZONTAL</property>
|
||||
<property name="subclass">; ; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerBottom</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="spacer" expanded="1">
|
||||
<property name="height">0</property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="width">0</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStdDialogButtonSizer" expanded="1">
|
||||
<property name="Apply">0</property>
|
||||
<property name="Cancel">1</property>
|
||||
<property name="ContextHelp">0</property>
|
||||
<property name="Help">0</property>
|
||||
<property name="No">0</property>
|
||||
<property name="OK">1</property>
|
||||
<property name="Save">0</property>
|
||||
<property name="Yes">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_sdbSizer</property>
|
||||
<property name="permission">protected</property>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</wxFormBuilder_Project>
|
|
@ -0,0 +1,61 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Jul 10 2019)
|
||||
// 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/stattext.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/font.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/listctrl.h>
|
||||
#include <wx/statline.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Class DIALOG_DIELECTRIC_MATERIAL_BASE
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class DIALOG_DIELECTRIC_MATERIAL_BASE : public wxDialog
|
||||
{
|
||||
private:
|
||||
|
||||
protected:
|
||||
wxStaticText* m_staticTextNewDielectric;
|
||||
wxStaticText* m_staticTexMaterial;
|
||||
wxStaticText* m_staticTextEpsilonR;
|
||||
wxStaticText* m_staticTextLossTg;
|
||||
wxTextCtrl* m_tcMaterial;
|
||||
wxTextCtrl* m_tcEpsilonR;
|
||||
wxTextCtrl* m_tcLossTg;
|
||||
wxStaticText* m_staticText;
|
||||
wxListCtrl* m_lcMaterials;
|
||||
wxStaticLine* m_staticline;
|
||||
wxStdDialogButtonSizer* m_sdbSizer;
|
||||
wxButton* m_sdbSizerOK;
|
||||
wxButton* m_sdbSizerCancel;
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void onListItemSelected( wxListEvent& event ) { event.Skip(); }
|
||||
|
||||
|
||||
public:
|
||||
|
||||
DIALOG_DIELECTRIC_MATERIAL_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 581,353 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
~DIALOG_DIELECTRIC_MATERIAL_BASE();
|
||||
|
||||
};
|
||||
|
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2009-2019 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 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 dielectric_material.cpp
|
||||
*/
|
||||
|
||||
//#include "class_board_stackup.h"
|
||||
//#include <convert_to_biu.h>
|
||||
//#include <board_design_settings.h>
|
||||
//#include <macros.h>
|
||||
#include "stackup_predefined_prms.h"
|
||||
#include "dielectric_material.h"
|
||||
|
||||
|
||||
// A list of available substrate material
|
||||
// These names are used in .gbrjob file, so they are not fully free.
|
||||
// So do not change name with "used in .gbrjob file" comment.
|
||||
// These names are in fact usual substrate names.
|
||||
// However one can add and use other names for material name.
|
||||
// DO NOT translate them, as they are proper noun
|
||||
static DIELECTRIC_SUBSTRATE substrateMaterial[] =
|
||||
{
|
||||
{ NOT_SPECIFIED, 0.0, 0.0 }, // Not specified, not in .gbrjob file
|
||||
{ "FR4", 4.5, 0.02 }, // used in .gbrjob file
|
||||
{ "Polyimide", 1.0, 0.0 }, // used in .gbrjob file
|
||||
{ "Polyolefin", 1.0, 0.0 }, // used in .gbrjob file
|
||||
{ "Al", 8.7, 0.001 }, // used in .gbrjob file
|
||||
{ "PTFE", 2.1, 0.0002 }, // used in .gbrjob file
|
||||
{ "Teflon", 2.1, 0.0002 }, // used in .gbrjob file
|
||||
{ "Ceramic", 1.0, 0.0 } // used in .gbrjob file
|
||||
// Other names are free
|
||||
};
|
||||
|
||||
|
||||
wxString DIELECTRIC_SUBSTRATE::FormatEpsilonR()
|
||||
{
|
||||
// return a wxString to print/display Epsilon R
|
||||
wxString txt;
|
||||
txt.Printf( "%.1f", m_EpsilonR );
|
||||
return txt;
|
||||
}
|
||||
|
||||
|
||||
wxString DIELECTRIC_SUBSTRATE::FormatLossTangent()
|
||||
{
|
||||
// return a wxString to print/display Loss Tangent
|
||||
wxString txt;
|
||||
txt.Printf( "%g", m_LossTangent );
|
||||
return txt;
|
||||
}
|
||||
|
||||
|
||||
DIELECTRIC_SUBSTRATE_LIST::DIELECTRIC_SUBSTRATE_LIST()
|
||||
{
|
||||
// Fills the m_substrateList with predefined params:
|
||||
for( unsigned ii = 0; ii < arrayDim( substrateMaterial ); ++ii )
|
||||
m_substrateList.push_back( substrateMaterial[ii] );
|
||||
}
|
||||
|
||||
|
||||
DIELECTRIC_SUBSTRATE* DIELECTRIC_SUBSTRATE_LIST::GetSubstrate( int aIdx )
|
||||
{
|
||||
if( aIdx >= 0 && aIdx < GetCount() )
|
||||
return &m_substrateList[aIdx];
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
DIELECTRIC_SUBSTRATE* DIELECTRIC_SUBSTRATE_LIST::GetSubstrate( const wxString& aName )
|
||||
{
|
||||
for( DIELECTRIC_SUBSTRATE& item : m_substrateList )
|
||||
{
|
||||
if( item.m_Name.CmpNoCase( aName ) == 0 )
|
||||
return &item;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
int DIELECTRIC_SUBSTRATE_LIST::FindSubstrate( DIELECTRIC_SUBSTRATE* aItem )
|
||||
{
|
||||
// Find a item matching aItem. The comparison is for the name case insensitive
|
||||
int idx = 0;
|
||||
for( DIELECTRIC_SUBSTRATE& item : m_substrateList )
|
||||
{
|
||||
|
||||
if( item.m_EpsilonR == aItem->m_EpsilonR &&
|
||||
item.m_LossTangent == aItem->m_LossTangent &&
|
||||
item.m_Name.CmpNoCase( aItem->m_Name ) == 0
|
||||
)
|
||||
return idx;
|
||||
|
||||
++idx;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int DIELECTRIC_SUBSTRATE_LIST::FindSubstrate( const wxString& aName, double aEpsilonR, double aLossTg )
|
||||
{
|
||||
// Find a item matching parameters
|
||||
int idx = 0;
|
||||
for( DIELECTRIC_SUBSTRATE& item : m_substrateList )
|
||||
{
|
||||
|
||||
if( item.m_EpsilonR == aEpsilonR &&
|
||||
item.m_LossTangent == aLossTg &&
|
||||
item.m_Name.CmpNoCase( aName ) == 0
|
||||
)
|
||||
return idx;
|
||||
|
||||
++idx;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2009-2019 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 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 dielectric_material.h
|
||||
*/
|
||||
|
||||
#ifndef DIELECTRIC_MATERIAL_H
|
||||
#define DIELECTRIC_MATERIAL_H
|
||||
|
||||
|
||||
#include <wx/string.h>
|
||||
|
||||
|
||||
// A class to handle substrates prms in gerber job file and dialog
|
||||
struct DIELECTRIC_SUBSTRATE
|
||||
{
|
||||
wxString m_Name; // the name (in job file) of material
|
||||
double m_EpsilonR; // the epsilon r of this material
|
||||
double m_LossTangent; // the loss tangent (tanD) of this material
|
||||
wxString FormatEpsilonR(); // return a wxString to print/display Epsilon R
|
||||
wxString FormatLossTangent();// return a wxString to print/display Loss Tangent
|
||||
};
|
||||
|
||||
|
||||
// A struct to handle a list of substrates prms in gerber job file and dialogs
|
||||
class DIELECTRIC_SUBSTRATE_LIST
|
||||
{
|
||||
///> The list of available substrates. It contians at least predefined substrates
|
||||
std::vector<DIELECTRIC_SUBSTRATE> m_substrateList;
|
||||
|
||||
public:
|
||||
DIELECTRIC_SUBSTRATE_LIST();
|
||||
|
||||
/**
|
||||
* @return the number of substrates in list
|
||||
*/
|
||||
int GetCount() { return (int)m_substrateList.size(); }
|
||||
|
||||
/**
|
||||
* @return the substrate in list of index aIdx
|
||||
* if incorrect return nullptr
|
||||
* @param aIdx is the index in substrate list.
|
||||
*/
|
||||
DIELECTRIC_SUBSTRATE* GetSubstrate( int aIdx );
|
||||
|
||||
/**
|
||||
* @return the substrate in list of name aName
|
||||
* if not found return nullptr
|
||||
* @param aName is the name of the substrate in substrate list.
|
||||
* the comparison is case insensitve
|
||||
*/
|
||||
DIELECTRIC_SUBSTRATE* GetSubstrate( const wxString& aName );
|
||||
|
||||
/** Find a item in list similar to aItem
|
||||
* @param aItem is the item to match
|
||||
* @return the index of similar item in list or -1 if not found
|
||||
* the comparison is for the name case insensitive, and EpsilonR and LossTg must match
|
||||
*/
|
||||
int FindSubstrate( DIELECTRIC_SUBSTRATE* aItem );
|
||||
|
||||
/** Find a item in list having the sapme parameters
|
||||
* @param aName is the name to match (case insensitive)
|
||||
* @param aEpsilonR is the Repaltive Permeatbility to match
|
||||
* @param aLossTg is the loss tangent to match
|
||||
* @return the index of similar item in list or -1 if not found
|
||||
*/
|
||||
int FindSubstrate( const wxString& aName, double aEpsilonR, double aLossTg );
|
||||
|
||||
/** Append a item in list similar to aItem
|
||||
* @param aItem is the item to append
|
||||
* @return the index of the new item in list
|
||||
*/
|
||||
int AppendSubstrate( DIELECTRIC_SUBSTRATE& aItem )
|
||||
{
|
||||
m_substrateList.emplace_back( aItem );
|
||||
return GetCount()-1;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // #ifndef DIELECTRIC_MATERIAL_H
|
|
@ -37,6 +37,7 @@
|
|||
#include <bitmaps.h>
|
||||
#include <wx/clipbrd.h>
|
||||
#include <wx/dataobj.h>
|
||||
#include "dialog_dielectric_list_manager.h"
|
||||
|
||||
// Some wx widget ID to know what widget has fired a event:
|
||||
#define ID_INCREMENT 128 // space between 2 ID type. Bigger than the layer count max
|
||||
|
@ -118,19 +119,19 @@ void PANEL_SETUP_BOARD_STACKUP::disconnectEvents()
|
|||
wxCommandEventHandler( PANEL_SETUP_BOARD_STACKUP::onColorSelected ),
|
||||
NULL, this );
|
||||
|
||||
wxChoice* choice = dynamic_cast<wxChoice*>( item );
|
||||
wxButton* matButt = dynamic_cast<wxButton*>( item );
|
||||
|
||||
if( choice )
|
||||
choice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED,
|
||||
wxCommandEventHandler( PANEL_SETUP_BOARD_STACKUP::onMaterialChange ),
|
||||
NULL, this );
|
||||
if( matButt )
|
||||
matButt->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED,
|
||||
wxCommandEventHandler( PANEL_SETUP_BOARD_STACKUP::onMaterialChange ),
|
||||
NULL, this );
|
||||
|
||||
wxTextCtrl* textCtrl = dynamic_cast<wxTextCtrl*>( item );
|
||||
|
||||
if( textCtrl )
|
||||
textCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED,
|
||||
wxCommandEventHandler( PANEL_SETUP_BOARD_STACKUP::onThicknessChange ),
|
||||
NULL, this );
|
||||
wxCommandEventHandler( PANEL_SETUP_BOARD_STACKUP::onThicknessChange ),
|
||||
NULL, this );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -258,17 +259,10 @@ void PANEL_SETUP_BOARD_STACKUP::synchronizeWithBoard( bool aFullSync )
|
|||
|
||||
if( item->IsMaterialEditable() )
|
||||
{
|
||||
wxChoice* choice = dynamic_cast<wxChoice*>( ui_row_item.m_MaterialCtrl );
|
||||
wxTextCtrl* matName = dynamic_cast<wxTextCtrl*>( ui_row_item.m_MaterialCtrl );
|
||||
|
||||
for( int ii = 0; ii < m_materialList.GetCount(); ii++ )
|
||||
{
|
||||
if( m_materialList.GetSubstrate( ii )->m_Name == item->m_Material )
|
||||
{
|
||||
if( choice )
|
||||
choice->SetSelection( ii );
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( matName )
|
||||
matName->SetValue( item->m_Material );
|
||||
}
|
||||
|
||||
if( item->IsThicknessEditable() )
|
||||
|
@ -363,6 +357,10 @@ void PANEL_SETUP_BOARD_STACKUP::synchronizeWithBoard( bool aFullSync )
|
|||
ui_row_item.m_LayerName->Show( show_item );
|
||||
ui_row_item.m_LayerTypeCtrl->Show( show_item );
|
||||
ui_row_item.m_MaterialCtrl->Show( show_item );
|
||||
|
||||
if( ui_row_item.m_MaterialButt )
|
||||
ui_row_item.m_MaterialButt->Show( show_item );
|
||||
|
||||
ui_row_item.m_ThicknessCtrl->Show( show_item );
|
||||
ui_row_item.m_ThicknessLockCtrl->Show( show_item );
|
||||
ui_row_item.m_ColorCtrl->Show( show_item );
|
||||
|
@ -376,6 +374,34 @@ void PANEL_SETUP_BOARD_STACKUP::synchronizeWithBoard( bool aFullSync )
|
|||
}
|
||||
|
||||
|
||||
void PANEL_SETUP_BOARD_STACKUP::addMaterialChooser( wxWindowID aId,
|
||||
const wxString * aMaterialName,
|
||||
BOARD_STACKUP_ROW_UI_ITEM& aUiRowItem )
|
||||
{
|
||||
wxBoxSizer* bSizerMat = new wxBoxSizer( wxHORIZONTAL );
|
||||
m_fgGridSizer->Add( bSizerMat, 1, wxEXPAND, 2 );
|
||||
wxTextCtrl* textCtrl = new wxTextCtrl( m_scGridWin, wxID_ANY );
|
||||
|
||||
if( aMaterialName )
|
||||
textCtrl->SetValue( *aMaterialName );
|
||||
|
||||
textCtrl->SetMinSize( m_numericTextCtrlSize );
|
||||
bSizerMat->Add( textCtrl, 0, wxTOP|wxBOTTOM|wxLEFT, 5 );
|
||||
|
||||
wxButton* m_buttonMat = new wxButton( m_scGridWin, aId, _("..."),
|
||||
wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
|
||||
bSizerMat->Add( m_buttonMat, 0, wxALIGN_CENTER_VERTICAL, 2 );
|
||||
|
||||
m_buttonMat->Connect( wxEVT_COMMAND_BUTTON_CLICKED,
|
||||
wxCommandEventHandler( PANEL_SETUP_BOARD_STACKUP::onMaterialChange ),
|
||||
NULL, this );
|
||||
m_controlItemsList.push_back( m_buttonMat );
|
||||
|
||||
aUiRowItem.m_MaterialCtrl = textCtrl;
|
||||
aUiRowItem.m_MaterialButt = m_buttonMat;
|
||||
}
|
||||
|
||||
|
||||
wxControl* PANEL_SETUP_BOARD_STACKUP::addSpacer()
|
||||
{
|
||||
wxStaticText* emptyText = new wxStaticText( m_scGridWin, wxID_ANY, wxEmptyString );
|
||||
|
@ -391,12 +417,6 @@ void PANEL_SETUP_BOARD_STACKUP::buildLayerStackPanel()
|
|||
// for dielectric: layer type keyword is "prepreg"
|
||||
m_core_prepreg_choice.Add( _( "PrePreg" ) );
|
||||
|
||||
// Build an array string of available materials (for substrate/dielectric)
|
||||
wxArrayString materialChoices;
|
||||
|
||||
for( int ii = 0; ii < m_materialList.GetCount(); ii++ )
|
||||
materialChoices.Add( wxGetTranslation( m_materialList.GetSubstrate( ii )->m_Name ) );
|
||||
|
||||
// Build a full stackup for the dialog, with a active copper layer count
|
||||
// = current board layer count to calculate a reasonable default
|
||||
// dielectric thickness, for board having no stackup initalized:
|
||||
|
@ -459,22 +479,7 @@ void PANEL_SETUP_BOARD_STACKUP::buildLayerStackPanel()
|
|||
|
||||
if( item->IsMaterialEditable() )
|
||||
{
|
||||
wxChoice* choice = new wxChoice( m_scGridWin, ID_ITEM_MATERIAL+row, wxDefaultPosition,
|
||||
wxDefaultSize, materialChoices );
|
||||
|
||||
for( int ii = 0; ii < m_materialList.GetCount(); ii++ )
|
||||
{
|
||||
if( m_materialList.GetSubstrate( ii )->m_Name == item->m_Material )
|
||||
choice->SetSelection( ii );
|
||||
}
|
||||
|
||||
m_fgGridSizer->Add( choice, 0, wxEXPAND|wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 2 );
|
||||
|
||||
choice->Connect( wxEVT_COMMAND_CHOICE_SELECTED,
|
||||
wxCommandEventHandler( PANEL_SETUP_BOARD_STACKUP::onMaterialChange ),
|
||||
NULL, this );
|
||||
m_controlItemsList.push_back( choice );
|
||||
ui_row_item.m_MaterialCtrl = choice;
|
||||
addMaterialChooser( ID_ITEM_MATERIAL+row, &item->m_Material, ui_row_item );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -674,14 +679,14 @@ bool PANEL_SETUP_BOARD_STACKUP::transferDataFromUIToStackup()
|
|||
wxTextCtrl* textCtrl = static_cast<wxTextCtrl*>( m_rowUiItemsList[row].m_EpsilonCtrl );
|
||||
txt = textCtrl->GetValue();
|
||||
|
||||
if( txt.ToDouble( &value ) )
|
||||
if( txt.ToDouble( &value ) && value >= 0.0 )
|
||||
item->m_EpsilonR = value;
|
||||
else if( txt.ToCDouble( &value ) )
|
||||
else if( txt.ToCDouble( &value ) && value >= 0.0 )
|
||||
item->m_EpsilonR = value;
|
||||
else
|
||||
{
|
||||
success = false;
|
||||
error_msg << _( "Incorrect value for Epsilon R" );
|
||||
error_msg << _( "Incorrect value for Epsilon R (Epsilon R must be positive or null if not used)" );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -690,24 +695,23 @@ bool PANEL_SETUP_BOARD_STACKUP::transferDataFromUIToStackup()
|
|||
wxTextCtrl* textCtrl = static_cast<wxTextCtrl*>( m_rowUiItemsList[row].m_LossTgCtrl );
|
||||
txt = textCtrl->GetValue();
|
||||
|
||||
if( txt.ToDouble( &value ) )
|
||||
if( txt.ToDouble( &value ) && value >= 0.0 )
|
||||
item->m_LossTangent = value;
|
||||
else if( txt.ToCDouble( &value ) )
|
||||
else if( txt.ToCDouble( &value ) && value >= 0.0 )
|
||||
item->m_LossTangent = value;
|
||||
else
|
||||
{
|
||||
success = false;
|
||||
if( !error_msg.IsEmpty() )
|
||||
error_msg << "\n";
|
||||
error_msg << _( "Incorrect value for Loss tangent" );
|
||||
error_msg << _( "Incorrect value for Loss tg (Loss tg must be or null if not used)" );
|
||||
}
|
||||
}
|
||||
|
||||
if( item->IsMaterialEditable() )
|
||||
{
|
||||
wxChoice* choice = static_cast<wxChoice*>( m_rowUiItemsList[row].m_MaterialCtrl );
|
||||
int idx = choice->GetSelection();
|
||||
item->m_Material = m_materialList.GetSubstrate( idx )->m_Name;
|
||||
wxTextCtrl* textCtrl = static_cast<wxTextCtrl*>( m_rowUiItemsList[row].m_MaterialCtrl );
|
||||
item->m_Material = textCtrl->GetValue();
|
||||
}
|
||||
|
||||
if( item->m_Type == BS_ITEM_TYPE_DIELECTRIC )
|
||||
|
@ -938,8 +942,6 @@ void PANEL_SETUP_BOARD_STACKUP::onColorSelected( wxCommandEvent& event )
|
|||
int row = item_id - ID_ITEM_COLOR;
|
||||
wxASSERT( (int)m_UserColors.size() > row );
|
||||
|
||||
wxColour color = GetColorStandardList()[idx].m_Color;
|
||||
|
||||
if( GetColorStandardListCount()-1 == idx ) // Set user color is the last option in list
|
||||
{
|
||||
wxColourDialog dlg( this );
|
||||
|
@ -947,7 +949,7 @@ void PANEL_SETUP_BOARD_STACKUP::onColorSelected( wxCommandEvent& event )
|
|||
if( dlg.ShowModal() == wxID_OK )
|
||||
{
|
||||
wxBitmapComboBox* combo = static_cast<wxBitmapComboBox*>( FindWindowById( item_id ) );
|
||||
color = dlg.GetColourData().GetColour();
|
||||
wxColour color = dlg.GetColourData().GetColour();
|
||||
m_UserColors[row] = color;
|
||||
|
||||
combo->SetString( idx, color.GetAsString( wxC2S_HTML_SYNTAX ) );
|
||||
|
@ -965,16 +967,54 @@ void PANEL_SETUP_BOARD_STACKUP::onColorSelected( wxCommandEvent& event )
|
|||
|
||||
void PANEL_SETUP_BOARD_STACKUP::onMaterialChange( wxCommandEvent& event )
|
||||
{
|
||||
// Ensure m_materialList contains all materials already in use in stacjup list
|
||||
// and add it is missing
|
||||
if( !transferDataFromUIToStackup() )
|
||||
return;
|
||||
|
||||
for( BOARD_STACKUP_ITEM* item : m_stackup.GetList() )
|
||||
{
|
||||
if( item->m_Type == BS_ITEM_TYPE_DIELECTRIC )
|
||||
{
|
||||
int idx = m_materialList.FindSubstrate( item->m_Material,
|
||||
item->m_EpsilonR,
|
||||
item->m_LossTangent );
|
||||
|
||||
if( idx < 0 && !item->m_Material.IsEmpty() )
|
||||
{
|
||||
// This material is not in list: add it
|
||||
DIELECTRIC_SUBSTRATE new_mat;
|
||||
new_mat.m_Name = item->m_Material;
|
||||
new_mat.m_EpsilonR = item->m_EpsilonR;
|
||||
new_mat.m_LossTangent = item->m_LossTangent;
|
||||
m_materialList.AppendSubstrate( new_mat );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DIALOG_DIELECTRIC_MATERIAL dlg( this, m_materialList );
|
||||
|
||||
if( dlg.ShowModal() != wxID_OK )
|
||||
return;
|
||||
|
||||
DIELECTRIC_SUBSTRATE substrate = dlg.GetSelectedSubstrate();
|
||||
|
||||
if( substrate.m_Name.IsEmpty() ) // No substrate specified
|
||||
return;
|
||||
|
||||
int row = event.GetId() - ID_ITEM_MATERIAL;
|
||||
int selection = event.GetSelection();
|
||||
|
||||
// Update Epsilon R and Loss tg
|
||||
// Update Name, Epsilon R and Loss tg
|
||||
BOARD_STACKUP_ITEM* item = GetStackupItem( row );
|
||||
item->m_Material = m_materialList.GetSubstrate( selection )->m_Name;
|
||||
item->m_EpsilonR = m_materialList.GetSubstrate( selection )->m_EpsilonR;
|
||||
item->m_LossTangent = m_materialList.GetSubstrate( selection )->m_LossTangent;
|
||||
item->m_Material = substrate.m_Name;
|
||||
item->m_EpsilonR = substrate.m_EpsilonR;
|
||||
item->m_LossTangent = substrate.m_LossTangent;
|
||||
|
||||
wxTextCtrl* textCtrl = static_cast<wxTextCtrl*>( m_rowUiItemsList[row].m_EpsilonCtrl );
|
||||
wxTextCtrl* textCtrl;
|
||||
textCtrl = static_cast<wxTextCtrl*>( m_rowUiItemsList[row].m_MaterialCtrl );
|
||||
textCtrl->SetValue( item->m_Material );
|
||||
|
||||
textCtrl = static_cast<wxTextCtrl*>( m_rowUiItemsList[row].m_EpsilonCtrl );
|
||||
textCtrl->SetValue( item->FormatEpsilonR() );
|
||||
|
||||
textCtrl = static_cast<wxTextCtrl*>( m_rowUiItemsList[row].m_LossTgCtrl );
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "panel_board_stackup_base.h"
|
||||
#include "class_board_stackup.h"
|
||||
#include "stackup_predefined_prms.h"
|
||||
#include "dielectric_material.h"
|
||||
|
||||
class wxBitmapComboBox;
|
||||
class PANEL_SETUP_LAYERS;
|
||||
|
@ -52,7 +53,8 @@ struct BOARD_STACKUP_ROW_UI_ITEM
|
|||
wxStaticBitmap* m_Icon; // Color icon in first column (column 1)
|
||||
wxStaticText* m_LayerName; // string shown in column 2
|
||||
wxControl* m_LayerTypeCtrl; // control shown in column 3
|
||||
wxControl* m_MaterialCtrl; // control shown in column 4
|
||||
wxControl* m_MaterialCtrl; // control shown in column 4, with m_MaterialButt
|
||||
wxButton* m_MaterialButt; // control shown in column 4, with m_MaterialCtrl
|
||||
wxControl* m_ThicknessCtrl; // control shown in column 5
|
||||
wxControl* m_ThicknessLockCtrl;// control shown in column 6
|
||||
wxControl* m_ColorCtrl; // control shown in column 7
|
||||
|
@ -61,8 +63,10 @@ struct BOARD_STACKUP_ROW_UI_ITEM
|
|||
|
||||
BOARD_STACKUP_ROW_UI_ITEM() :
|
||||
m_isEnabled( true ), m_Icon( nullptr ), m_LayerName( nullptr ),
|
||||
m_LayerTypeCtrl( nullptr ), m_MaterialCtrl( nullptr ),
|
||||
m_LayerTypeCtrl( nullptr ),
|
||||
m_MaterialCtrl( nullptr ),m_MaterialButt( nullptr ),
|
||||
m_ThicknessCtrl( nullptr ), m_ThicknessLockCtrl( nullptr ),
|
||||
m_ColorCtrl( nullptr ),
|
||||
m_EpsilonCtrl( nullptr ), m_LossTgCtrl( nullptr )
|
||||
{}
|
||||
};
|
||||
|
@ -98,8 +102,19 @@ public:
|
|||
std::vector<wxColor> m_UserColors; // the list of user colors for each grid row
|
||||
// other colors are defined colors, and are not stored
|
||||
private:
|
||||
/** add a Spacer in m_fgGridSizer when a empty cell is needed
|
||||
*/
|
||||
wxControl* addSpacer();
|
||||
|
||||
/** add a control (a wxTextCtrl + a button) in m_fgGridSizer to select a material
|
||||
* @param aId is the wxControl id, used to know the event source
|
||||
* @param aMaterialName is the the name of the currently selected material (can be null)
|
||||
* @param aUiRowItem is the the BOARD_STACKUP_ROW_UI_ITEM to store the controls
|
||||
* created
|
||||
*/
|
||||
void addMaterialChooser( wxWindowID aId, const wxString * aMaterialName,
|
||||
BOARD_STACKUP_ROW_UI_ITEM& aUiRowItem );
|
||||
|
||||
/** Populate m_fgGridSizer with items to handle stackup parameters
|
||||
* This is a full list:
|
||||
* all copper layers and all tech layers that are supported by the stackup
|
||||
|
@ -167,7 +182,7 @@ private:
|
|||
// restricted to allowed layers in stackup.
|
||||
// when do not match the enabled layers
|
||||
// in PANEL_SETUP_LAYERS the stackup is not up to date
|
||||
FAB_SUBSTRATE_LIST m_materialList; // a list of currently available materials
|
||||
DIELECTRIC_SUBSTRATE_LIST m_materialList; // a list of currently available materials
|
||||
std::vector<BOARD_STACKUP_ROW_UI_ITEM> m_rowUiItemsList; // List of items in m_fgGridSizer
|
||||
BOARD* m_board;
|
||||
BOARD_DESIGN_SETTINGS* m_brdSettings;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Oct 26 2018)
|
||||
// C++ code generated with wxFormBuilder (version Jul 10 2019)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
|
@ -59,11 +59,11 @@ PANEL_SETUP_BOARD_STACKUP_BASE::PANEL_SETUP_BOARD_STACKUP_BASE( wxWindow* parent
|
|||
m_fgGridSizer->SetFlexibleDirection( wxHORIZONTAL );
|
||||
m_fgGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_staticText7 = new wxStaticText( m_scGridWin, wxID_ANY, _("Layer"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticText7->Wrap( -1 );
|
||||
m_staticText7->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
m_staticTextLayer = new wxStaticText( m_scGridWin, wxID_ANY, _("Layer"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticTextLayer->Wrap( -1 );
|
||||
m_staticTextLayer->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
m_fgGridSizer->Add( m_staticText7, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
m_fgGridSizer->Add( m_staticTextLayer, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
|
||||
m_staticText8 = new wxStaticText( m_scGridWin, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticText8->Wrap( -1 );
|
||||
|
@ -71,44 +71,44 @@ PANEL_SETUP_BOARD_STACKUP_BASE::PANEL_SETUP_BOARD_STACKUP_BASE( wxWindow* parent
|
|||
|
||||
m_fgGridSizer->Add( m_staticText8, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_staticText9 = new wxStaticText( m_scGridWin, wxID_ANY, _("Type"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticText9->Wrap( -1 );
|
||||
m_staticText9->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
m_staticTextType = new wxStaticText( m_scGridWin, wxID_ANY, _("Type"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticTextType->Wrap( -1 );
|
||||
m_staticTextType->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
m_fgGridSizer->Add( m_staticText9, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
m_fgGridSizer->Add( m_staticTextType, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
|
||||
m_staticText10 = new wxStaticText( m_scGridWin, wxID_ANY, _("Material"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticText10->Wrap( -1 );
|
||||
m_staticText10->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
m_staticTextMaterial = new wxStaticText( m_scGridWin, wxID_ANY, _("Material"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticTextMaterial->Wrap( -1 );
|
||||
m_staticTextMaterial->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
m_fgGridSizer->Add( m_staticText10, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
m_fgGridSizer->Add( m_staticTextMaterial, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
|
||||
m_staticText101 = new wxStaticText( m_scGridWin, wxID_ANY, _("Thickness"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticText101->Wrap( -1 );
|
||||
m_staticText101->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
m_staticTextThickness = new wxStaticText( m_scGridWin, wxID_ANY, _("Thickness"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticTextThickness->Wrap( -1 );
|
||||
m_staticTextThickness->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
m_fgGridSizer->Add( m_staticText101, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
m_fgGridSizer->Add( m_staticTextThickness, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
|
||||
m_bitmapLockThickness = new wxStaticBitmap( m_scGridWin, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_fgGridSizer->Add( m_bitmapLockThickness, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_staticText102 = new wxStaticText( m_scGridWin, wxID_ANY, _("Color"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticText102->Wrap( -1 );
|
||||
m_staticText102->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
m_staticTextColor = new wxStaticText( m_scGridWin, wxID_ANY, _("Color"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticTextColor->Wrap( -1 );
|
||||
m_staticTextColor->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
m_fgGridSizer->Add( m_staticText102, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
m_fgGridSizer->Add( m_staticTextColor, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
|
||||
m_staticText103 = new wxStaticText( m_scGridWin, wxID_ANY, _("Epsilon R"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticText103->Wrap( -1 );
|
||||
m_staticText103->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
m_staticTextEpsilonR = new wxStaticText( m_scGridWin, wxID_ANY, _("Epsilon R"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticTextEpsilonR->Wrap( -1 );
|
||||
m_staticTextEpsilonR->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
m_fgGridSizer->Add( m_staticText103, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
m_fgGridSizer->Add( m_staticTextEpsilonR, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
|
||||
m_staticText104 = new wxStaticText( m_scGridWin, wxID_ANY, _("Loss Tan"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticText104->Wrap( -1 );
|
||||
m_staticText104->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
m_staticTextLossTg = new wxStaticText( m_scGridWin, wxID_ANY, _("Loss Tan"), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT );
|
||||
m_staticTextLossTg->Wrap( -1 );
|
||||
m_staticTextLossTg->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
m_fgGridSizer->Add( m_staticText104, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
m_fgGridSizer->Add( m_staticTextLossTg, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxLEFT, 2 );
|
||||
|
||||
|
||||
m_scGridWin->SetSizer( m_fgGridSizer );
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
<property name="file">panel_board_stackup_base</property>
|
||||
<property name="first_id">1000</property>
|
||||
<property name="help_provider">none</property>
|
||||
<property name="image_path_wrapper_function_name"></property>
|
||||
<property name="indent_with_spaces"></property>
|
||||
<property name="internationalize">1</property>
|
||||
<property name="name">PANEL_BOARD_SETUP_BASE</property>
|
||||
|
@ -25,6 +26,7 @@
|
|||
<property name="skip_php_events">1</property>
|
||||
<property name="skip_python_events">1</property>
|
||||
<property name="ui_table">UI</property>
|
||||
<property name="use_array_enum">0</property>
|
||||
<property name="use_enum">0</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
<object class="Panel" expanded="1">
|
||||
|
@ -595,7 +597,7 @@
|
|||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticText7</property>
|
||||
<property name="name">m_staticTextLayer</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
@ -717,7 +719,7 @@
|
|||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticText9</property>
|
||||
<property name="name">m_staticTextType</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
@ -778,7 +780,7 @@
|
|||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticText10</property>
|
||||
<property name="name">m_staticTextMaterial</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
@ -839,7 +841,7 @@
|
|||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticText101</property>
|
||||
<property name="name">m_staticTextThickness</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
@ -958,7 +960,7 @@
|
|||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticText102</property>
|
||||
<property name="name">m_staticTextColor</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
@ -1019,7 +1021,7 @@
|
|||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticText103</property>
|
||||
<property name="name">m_staticTextEpsilonR</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
@ -1080,7 +1082,7 @@
|
|||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticText104</property>
|
||||
<property name="name">m_staticTextLossTg</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Oct 26 2018)
|
||||
// C++ code generated with wxFormBuilder (version Jul 10 2019)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
|
@ -51,15 +51,15 @@ class PANEL_SETUP_BOARD_STACKUP_BASE : public wxPanel
|
|||
wxBoxSizer* m_sizerStackup;
|
||||
wxScrolledWindow* m_scGridWin;
|
||||
wxFlexGridSizer* m_fgGridSizer;
|
||||
wxStaticText* m_staticText7;
|
||||
wxStaticText* m_staticTextLayer;
|
||||
wxStaticText* m_staticText8;
|
||||
wxStaticText* m_staticText9;
|
||||
wxStaticText* m_staticText10;
|
||||
wxStaticText* m_staticText101;
|
||||
wxStaticText* m_staticTextType;
|
||||
wxStaticText* m_staticTextMaterial;
|
||||
wxStaticText* m_staticTextThickness;
|
||||
wxStaticBitmap* m_bitmapLockThickness;
|
||||
wxStaticText* m_staticText102;
|
||||
wxStaticText* m_staticText103;
|
||||
wxStaticText* m_staticText104;
|
||||
wxStaticText* m_staticTextColor;
|
||||
wxStaticText* m_staticTextEpsilonR;
|
||||
wxStaticText* m_staticTextLossTg;
|
||||
wxRadioBox* m_rbDielectricConstraint;
|
||||
wxCheckBox* m_cbCastellatedPads;
|
||||
wxCheckBox* m_cbEgdesPlated;
|
||||
|
|
|
@ -77,71 +77,6 @@ static FAB_LAYER_COLOR solderMaskColors[] =
|
|||
};
|
||||
|
||||
|
||||
// A list of available substrate material
|
||||
// These names are used in .gbrjob file, so they are not fully free.
|
||||
// Use only what is allowed in .gbrjob files.
|
||||
// These names are in fact usual substrate names.
|
||||
static FAB_SUBSTRATE substrateMaterial[] =
|
||||
{
|
||||
{ _HKI( NOT_SPECIFIED ), 0.0, 0.0 }, // Not specified, not in .gbrjob file
|
||||
{ _HKI( "FR4" ), 4.5, 0.02 }, // used in .gbrjob file
|
||||
{ _HKI( "Polyimide" ), 1.0, 0.0 }, // used in .gbrjob file
|
||||
{ _HKI( "Polyolefin" ), 1.0, 0.0 }, // used in .gbrjob file
|
||||
{ _HKI( "Al" ), 8.7, 0.001 }, // used in .gbrjob file
|
||||
{ _HKI( "PTFE" ), 2.1, 0.0002 }, // used in .gbrjob file
|
||||
{ _HKI( "Teflon" ), 2.1, 0.0002 }, // used in .gbrjob file
|
||||
{ _HKI( "Ceramic" ), 1.0, 0.0 }, // used in .gbrjob file
|
||||
{ _HKI( USER_DEFINED ), 1.0, 0.0 }, // Free string
|
||||
};
|
||||
|
||||
|
||||
wxString FAB_SUBSTRATE::FormatEpsilonR()
|
||||
{
|
||||
// return a wxString to print/display Epsilon R
|
||||
wxString txt;
|
||||
txt.Printf( "%.1f", m_EpsilonR );
|
||||
return txt;
|
||||
}
|
||||
|
||||
|
||||
wxString FAB_SUBSTRATE::FormatLossTangent()
|
||||
{
|
||||
// return a wxString to print/display Loss Tangent
|
||||
wxString txt;
|
||||
txt.Printf( "%g", m_LossTangent );
|
||||
return txt;
|
||||
}
|
||||
|
||||
|
||||
FAB_SUBSTRATE_LIST::FAB_SUBSTRATE_LIST()
|
||||
{
|
||||
// Fills the m_substrateList with predefined params:
|
||||
for( unsigned ii = 0; ii < arrayDim( substrateMaterial ); ++ii )
|
||||
m_substrateList.push_back( substrateMaterial[ii] );
|
||||
}
|
||||
|
||||
|
||||
FAB_SUBSTRATE* FAB_SUBSTRATE_LIST::GetSubstrate( int aIdx )
|
||||
{
|
||||
if( aIdx >= 0 && aIdx < GetCount() )
|
||||
return &m_substrateList[aIdx];
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
FAB_SUBSTRATE* FAB_SUBSTRATE_LIST::GetSubstrate( const wxString& aName )
|
||||
{
|
||||
for( FAB_SUBSTRATE& item : m_substrateList )
|
||||
{
|
||||
if( item.m_Name.CmpNoCase( aName ) == 0 )
|
||||
return &item;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
wxArrayString GetCopperFinishStandardList( bool aTranslate )
|
||||
{
|
||||
wxArrayString list;
|
||||
|
|
|
@ -59,48 +59,6 @@ struct FAB_LAYER_COLOR
|
|||
};
|
||||
|
||||
|
||||
// A minor struct to handle substrates prms in gerber job file and dialog
|
||||
struct FAB_SUBSTRATE
|
||||
{
|
||||
wxString m_Name; // the name (in job file) of material
|
||||
double m_EpsilonR; // the epsilon r of this material
|
||||
double m_LossTangent; // the loss tangent (tanD) of this material
|
||||
wxString FormatEpsilonR(); // return a wxString to print/display Epsilon R
|
||||
wxString FormatLossTangent();// return a wxString to print/display Loss Tangent
|
||||
};
|
||||
|
||||
|
||||
// A struct to handle a list of substrates prms in gerber job file and dialogs
|
||||
class FAB_SUBSTRATE_LIST
|
||||
{
|
||||
///> The list of available substrates. It contians at least predefined substrates
|
||||
std::vector<FAB_SUBSTRATE> m_substrateList;
|
||||
|
||||
public:
|
||||
FAB_SUBSTRATE_LIST();
|
||||
|
||||
/**
|
||||
* @return the number of substrates in list
|
||||
*/
|
||||
int GetCount() { return (int)m_substrateList.size(); }
|
||||
|
||||
/**
|
||||
* @return the substrate in list of index aIdx
|
||||
* if incorrect return nullptr
|
||||
* @param aIdx is the index in substrate list.
|
||||
*/
|
||||
FAB_SUBSTRATE* GetSubstrate( int aIdx );
|
||||
|
||||
/**
|
||||
* @return the substrate in list of name aName
|
||||
* if not found return nullptr
|
||||
* @param aName is the name of the substrate in substrate list.
|
||||
* the comparison is case insensitve
|
||||
*/
|
||||
FAB_SUBSTRATE* GetSubstrate( const wxString& aName );
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return a wxArray of standard copper finish names.
|
||||
* @param aTranslate = false for the initial names, true for translated names
|
||||
|
|
Loading…
Reference in New Issue