mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-11 14:50:11 +00:00
Expose padstack settings in via properties dialog
Behind a flag because this feature may not stabilize before V9
This commit is contained in:
parent
88e028bc24
commit
59f7615fbd
@ -125,6 +125,8 @@ static const wxChar EnableSnapAnchorsDebug[] = wxT( "EnableSnapAnchorsDebug" );
|
||||
static const wxChar EnableODB[] = wxT( "EnableODB" );
|
||||
static const wxChar EnableJobset[] = wxT( "EnableJobset" );
|
||||
static const wxChar MinParallelAngle[] = wxT( "MinParallelAngle" );
|
||||
static const wxChar EnableViaStacks[] = wxT( "EnableViaStacks" );
|
||||
|
||||
} // namespace KEYS
|
||||
|
||||
|
||||
@ -296,6 +298,7 @@ ADVANCED_CFG::ADVANCED_CFG()
|
||||
m_EnableSnapAnchorsDebug = false;
|
||||
|
||||
m_MinParallelAngle = 0.001;
|
||||
m_EnableViaStacks = false;
|
||||
|
||||
loadFromConfigFile();
|
||||
}
|
||||
@ -570,6 +573,10 @@ void ADVANCED_CFG::loadSettings( wxConfigBase& aCfg )
|
||||
&m_MinParallelAngle, m_MinParallelAngle,
|
||||
0.0, 45.0 ) );
|
||||
|
||||
configParams.push_back( new PARAM_CFG_BOOL( true, AC_KEYS::EnableViaStacks,
|
||||
&m_EnableViaStacks,
|
||||
m_EnableViaStacks ) );
|
||||
|
||||
// Special case for trace mask setting...we just grab them and set them immediately
|
||||
// Because we even use wxLogTrace inside of advanced config
|
||||
wxString traceMasks;
|
||||
|
@ -714,6 +714,11 @@ public:
|
||||
*/
|
||||
double m_MinParallelAngle;
|
||||
|
||||
/**
|
||||
* Enables the user-visible editing features for via stacks
|
||||
*/
|
||||
bool m_EnableViaStacks;
|
||||
|
||||
///@}
|
||||
|
||||
private:
|
||||
|
@ -855,6 +855,8 @@ void DIALOG_PAD_PROPERTIES::initPadstackLayerValues()
|
||||
|
||||
void DIALOG_PAD_PROPERTIES::afterPadstackModeChanged()
|
||||
{
|
||||
// NOTE: synchronize changes here with DIALOG_TRACK_VIA_PROPERTIES::afterPadstackModeChanged
|
||||
|
||||
wxCHECK_MSG( m_board, /* void */, "Expected valid board in afterPadstackModeChanged" );
|
||||
m_cbEditLayer->Clear();
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <advanced_config.h>
|
||||
#include <core/kicad_algo.h>
|
||||
#include <dialogs/dialog_track_via_properties.h>
|
||||
#include <pcb_layer_box_selector.h>
|
||||
@ -57,7 +58,8 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
|
||||
m_teardropWidthPercent( aParent, m_stWidthPercentLabel, m_tcWidthPercent, nullptr ),
|
||||
m_teardropMaxWidth( aParent, m_stMaxWidthLabel, m_tcMaxWidth, m_stMaxWidthUnits ),
|
||||
m_tracks( false ),
|
||||
m_vias( false )
|
||||
m_vias( false ),
|
||||
m_editLayer( PADSTACK::ALL_LAYERS )
|
||||
{
|
||||
m_useCalculatedSize = true;
|
||||
|
||||
@ -229,8 +231,8 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
|
||||
{
|
||||
m_viaX.SetValue( v->GetPosition().x );
|
||||
m_viaY.SetValue( v->GetPosition().y );
|
||||
// TODO(JE) padstacks
|
||||
m_viaDiameter.SetValue( v->GetWidth( PADSTACK::ALL_LAYERS ) );
|
||||
m_viaStack = std::make_unique<PADSTACK>( v->Padstack() );
|
||||
m_viaDiameter.SetValue( v->GetWidth( m_editLayer ) );
|
||||
m_viaDrill.SetValue( v->GetDrillValue() );
|
||||
m_vias = true;
|
||||
viaType = v->GetViaType();
|
||||
@ -267,7 +269,7 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
|
||||
if( m_viaY.GetValue() != v->GetPosition().y )
|
||||
m_viaY.SetValue( INDETERMINATE_STATE );
|
||||
|
||||
if( m_viaDiameter.GetValue() != v->GetWidth( PADSTACK::ALL_LAYERS ) )
|
||||
if( m_viaDiameter.GetValue() != v->GetWidth( m_editLayer ) )
|
||||
m_viaDiameter.SetValue( INDETERMINATE_STATE );
|
||||
|
||||
if( m_viaDrill.GetValue() != v->GetDrillValue() )
|
||||
@ -426,6 +428,9 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
|
||||
|
||||
m_annularRingsLabel->Show( getLayerDepth() > 1 );
|
||||
m_annularRingsCtrl->Show( getLayerDepth() > 1 );
|
||||
|
||||
m_sbPadstackSettings->Show( ADVANCED_CFG::GetCfg().m_EnableViaStacks );
|
||||
afterPadstackModeChanged();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -577,6 +582,8 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
|
||||
|
||||
if( m_vias )
|
||||
{
|
||||
// TODO: This needs to move into the via class, not the dialog
|
||||
|
||||
if( !m_viaDiameter.Validate( GEOMETRY_MIN_SIZE, INT_MAX )
|
||||
|| !m_viaDrill.Validate( GEOMETRY_MIN_SIZE, INT_MAX ) )
|
||||
{
|
||||
@ -599,6 +606,12 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
|
||||
DisplayError( GetParent(), _( "Via start layer and end layer cannot be the same" ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !m_viaDiameter.IsIndeterminate() )
|
||||
{
|
||||
int diameter = m_viaDiameter.GetValue();
|
||||
m_viaStack->SetSize( { diameter, diameter }, m_editLayer );
|
||||
}
|
||||
}
|
||||
|
||||
if( m_tracks )
|
||||
@ -741,7 +754,12 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
|
||||
v->SanitizeLayers();
|
||||
|
||||
if( !m_viaDiameter.IsIndeterminate() )
|
||||
v->SetWidth( PADSTACK::ALL_LAYERS, m_viaDiameter.GetIntValue() );
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_EnableViaStacks )
|
||||
v->SetPadstack( *m_viaStack );
|
||||
else
|
||||
v->SetWidth( PADSTACK::ALL_LAYERS, m_viaDiameter.GetIntValue() );
|
||||
}
|
||||
|
||||
if( !m_viaDrill.IsIndeterminate() )
|
||||
v->SetDrill( m_viaDrill.GetIntValue() );
|
||||
@ -900,6 +918,140 @@ void DIALOG_TRACK_VIA_PROPERTIES::onViaSelect( wxCommandEvent& aEvent )
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_TRACK_VIA_PROPERTIES::onPadstackModeChanged( wxCommandEvent& aEvent )
|
||||
{
|
||||
wxCHECK_MSG( m_viaStack, /* void */, "Expected valid via stack in onPadstackModeChanged" );
|
||||
|
||||
switch( m_cbPadstackMode->GetSelection() )
|
||||
{
|
||||
default:
|
||||
case 0: m_viaStack->SetMode( PADSTACK::MODE::NORMAL ); break;
|
||||
case 1: m_viaStack->SetMode( PADSTACK::MODE::FRONT_INNER_BACK ); break;
|
||||
case 2: m_viaStack->SetMode( PADSTACK::MODE::CUSTOM ); break;
|
||||
}
|
||||
|
||||
afterPadstackModeChanged();
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_TRACK_VIA_PROPERTIES::onEditLayerChanged( wxCommandEvent& aEvent )
|
||||
{
|
||||
wxCHECK_MSG( m_viaStack, /* void */, "Expected valid via stack in onEditLayerChanged" );
|
||||
|
||||
// Save data from the previous layer
|
||||
if( !m_viaDiameter.IsIndeterminate() )
|
||||
{
|
||||
int diameter = m_viaDiameter.GetValue();
|
||||
m_viaStack->SetSize( { diameter, diameter }, m_editLayer );
|
||||
}
|
||||
|
||||
switch( m_viaStack->Mode() )
|
||||
{
|
||||
default:
|
||||
case PADSTACK::MODE::NORMAL:
|
||||
m_editLayer = PADSTACK::ALL_LAYERS;
|
||||
break;
|
||||
|
||||
case PADSTACK::MODE::FRONT_INNER_BACK:
|
||||
switch( m_cbEditLayer->GetSelection() )
|
||||
{
|
||||
default:
|
||||
case 0: m_editLayer = F_Cu; break;
|
||||
case 1: m_editLayer = PADSTACK::INNER_LAYERS; break;
|
||||
case 2: m_editLayer = B_Cu; break;
|
||||
}
|
||||
break;
|
||||
|
||||
case PADSTACK::MODE::CUSTOM:
|
||||
{
|
||||
int layer = m_cbEditLayer->GetSelection();
|
||||
|
||||
if( layer < 0 )
|
||||
layer = 0;
|
||||
|
||||
if( m_editLayerCtrlMap.contains( layer ) )
|
||||
m_editLayer = m_editLayerCtrlMap.at( layer );
|
||||
else
|
||||
m_editLayer = F_Cu;
|
||||
}
|
||||
}
|
||||
|
||||
// Load controls with the current layer
|
||||
m_viaDiameter.SetValue( m_viaStack->Size( m_editLayer ).x );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_TRACK_VIA_PROPERTIES::afterPadstackModeChanged()
|
||||
{
|
||||
// NOTE: synchronize changes here with DIALOG_PAD_PROPERTIES::afterPadstackModeChanged
|
||||
|
||||
wxCHECK_MSG( m_viaStack, /* void */, "Expected valid via stack in afterPadstackModeChanged" );
|
||||
m_cbEditLayer->Clear();
|
||||
|
||||
BOARD* board = m_frame->GetBoard();
|
||||
|
||||
switch( m_viaStack->Mode() )
|
||||
{
|
||||
case PADSTACK::MODE::NORMAL:
|
||||
m_cbPadstackMode->SetSelection( 0 );
|
||||
m_cbEditLayer->Append( _( "All layers" ) );
|
||||
m_cbEditLayer->Disable();
|
||||
m_editLayer = PADSTACK::ALL_LAYERS;
|
||||
m_editLayerCtrlMap = { { 0, PADSTACK::ALL_LAYERS } };
|
||||
break;
|
||||
|
||||
case PADSTACK::MODE::FRONT_INNER_BACK:
|
||||
{
|
||||
m_cbPadstackMode->SetSelection( 1 );
|
||||
m_cbEditLayer->Enable();
|
||||
|
||||
std::vector choices = {
|
||||
board->GetLayerName( F_Cu ),
|
||||
_( "Inner Layers" ),
|
||||
board->GetLayerName( B_Cu )
|
||||
};
|
||||
|
||||
m_cbEditLayer->Append( choices );
|
||||
|
||||
m_editLayerCtrlMap = {
|
||||
{ 0, F_Cu },
|
||||
{ 1, PADSTACK::INNER_LAYERS },
|
||||
{ 2, B_Cu }
|
||||
};
|
||||
|
||||
if( m_editLayer != F_Cu && m_editLayer != B_Cu )
|
||||
m_editLayer = PADSTACK::INNER_LAYERS;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PADSTACK::MODE::CUSTOM:
|
||||
{
|
||||
m_cbPadstackMode->SetSelection( 2 );
|
||||
m_cbEditLayer->Enable();
|
||||
LSET layers = LSET::AllCuMask() & board->GetEnabledLayers();
|
||||
|
||||
for( PCB_LAYER_ID layer : layers.UIOrder() )
|
||||
{
|
||||
int idx = m_cbEditLayer->Append( board->GetLayerName( layer ) );
|
||||
m_editLayerCtrlMap[idx] = layer;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for( const auto& [idx, layer] : m_editLayerCtrlMap )
|
||||
{
|
||||
if( layer == m_editLayer )
|
||||
{
|
||||
m_cbEditLayer->SetSelection( idx );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int DIALOG_TRACK_VIA_PROPERTIES::getLayerDepth()
|
||||
{
|
||||
int viaType = m_ViaTypeChoice->GetSelection();
|
||||
|
@ -31,6 +31,7 @@
|
||||
class PCB_SELECTION;
|
||||
class PCB_BASE_FRAME;
|
||||
class PAD;
|
||||
class PADSTACK;
|
||||
|
||||
class DIALOG_TRACK_VIA_PROPERTIES : public DIALOG_TRACK_VIA_PROPERTIES_BASE
|
||||
{
|
||||
@ -51,6 +52,8 @@ private:
|
||||
void onTentingLinkToggle( wxCommandEvent& event ) override;
|
||||
void onFrontTentingChanged( wxCommandEvent& event ) override;
|
||||
void onTrackEdit( wxCommandEvent& aEvent ) override;
|
||||
void onPadstackModeChanged( wxCommandEvent& aEvent ) override;
|
||||
void onEditLayerChanged( wxCommandEvent& aEvent ) override;
|
||||
|
||||
void onUnitsChanged( wxCommandEvent& aEvent );
|
||||
void onTeardropsUpdateUi( wxUpdateUIEvent& event ) override;
|
||||
@ -58,6 +61,7 @@ private:
|
||||
bool confirmPadChange( const std::vector<PAD*>& connectedPads );
|
||||
|
||||
int getLayerDepth();
|
||||
void afterPadstackModeChanged();
|
||||
|
||||
private:
|
||||
PCB_BASE_FRAME* m_frame;
|
||||
@ -79,4 +83,11 @@ private:
|
||||
|
||||
bool m_tracks; // True if dialog displays any track properties.
|
||||
bool m_vias; // True if dialog displays any via properties.
|
||||
|
||||
/// Temporary padstack of the edited via(s)
|
||||
std::unique_ptr<PADSTACK> m_viaStack;
|
||||
|
||||
/// The currently-shown copper layer of the edited via(s)
|
||||
PCB_LAYER_ID m_editLayer;
|
||||
std::map<int, PCB_LAYER_ID> m_editLayerCtrlMap;
|
||||
};
|
||||
|
@ -274,27 +274,51 @@ DIALOG_TRACK_VIA_PROPERTIES_BASE::DIALOG_TRACK_VIA_PROPERTIES_BASE( wxWindow* pa
|
||||
m_predefinedViaSizesUnits->Wrap( -1 );
|
||||
gbSizer3->Add( m_predefinedViaSizesUnits, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_sbPadstackSettings = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
m_stPadstackMode = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Padstack mode:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_stPadstackMode->Wrap( -1 );
|
||||
m_sbPadstackSettings->Add( m_stPadstackMode, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
wxString m_cbPadstackModeChoices[] = { _("Normal"), _("Front/Inner/Back"), _("Custom") };
|
||||
int m_cbPadstackModeNChoices = sizeof( m_cbPadstackModeChoices ) / sizeof( wxString );
|
||||
m_cbPadstackMode = new wxChoice( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cbPadstackModeNChoices, m_cbPadstackModeChoices, 0 );
|
||||
m_cbPadstackMode->SetSelection( 0 );
|
||||
m_sbPadstackSettings->Add( m_cbPadstackMode, 0, wxALL, 5 );
|
||||
|
||||
m_stEditLayer = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Edit layer:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_stEditLayer->Wrap( -1 );
|
||||
m_sbPadstackSettings->Add( m_stEditLayer, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
wxArrayString m_cbEditLayerChoices;
|
||||
m_cbEditLayer = new wxChoice( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cbEditLayerChoices, 0 );
|
||||
m_cbEditLayer->SetSelection( 0 );
|
||||
m_sbPadstackSettings->Add( m_cbEditLayer, 0, wxALL, 5 );
|
||||
|
||||
|
||||
gbSizer3->Add( m_sbPadstackSettings, wxGBPosition( 2, 0 ), wxGBSpan( 1, 3 ), wxEXPAND, 0 );
|
||||
|
||||
m_ViaDiameterLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Via diameter:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ViaDiameterLabel->Wrap( -1 );
|
||||
gbSizer3->Add( m_ViaDiameterLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxLEFT|wxALIGN_CENTER_VERTICAL, 1 );
|
||||
gbSizer3->Add( m_ViaDiameterLabel, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxLEFT|wxALIGN_CENTER_VERTICAL, 1 );
|
||||
|
||||
m_ViaDiameterCtrl = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizer3->Add( m_ViaDiameterCtrl, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
gbSizer3->Add( m_ViaDiameterCtrl, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_ViaDiameterUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ViaDiameterUnit->Wrap( -1 );
|
||||
gbSizer3->Add( m_ViaDiameterUnit, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
|
||||
gbSizer3->Add( m_ViaDiameterUnit, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_ViaDrillLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Via hole:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ViaDrillLabel->Wrap( -1 );
|
||||
gbSizer3->Add( m_ViaDrillLabel, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 1 );
|
||||
gbSizer3->Add( m_ViaDrillLabel, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 1 );
|
||||
|
||||
m_ViaDrillCtrl = new wxTextCtrl( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizer3->Add( m_ViaDrillCtrl, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
gbSizer3->Add( m_ViaDrillCtrl, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_ViaDrillUnit = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ViaDrillUnit->Wrap( -1 );
|
||||
gbSizer3->Add( m_ViaDrillUnit, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
|
||||
gbSizer3->Add( m_ViaDrillUnit, wxGBPosition( 4, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
gbSizer3->AddGrowableCol( 1 );
|
||||
@ -659,9 +683,10 @@ DIALOG_TRACK_VIA_PROPERTIES_BASE::DIALOG_TRACK_VIA_PROPERTIES_BASE( wxWindow* pa
|
||||
m_viaNotFree->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaNotFreeClicked ), NULL, this );
|
||||
m_predefinedTrackWidthsCtrl->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onWidthSelect ), NULL, this );
|
||||
m_TrackWidthCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onWidthEdit ), NULL, this );
|
||||
m_TrackLayerCtrl->Connect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTrackEdit ), NULL, this );
|
||||
m_trackHasSolderMask->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTrackEdit ), NULL, this );
|
||||
m_predefinedViaSizesCtrl->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaSelect ), NULL, this );
|
||||
m_cbPadstackMode->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onPadstackModeChanged ), NULL, this );
|
||||
m_cbEditLayer->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onEditLayerChanged ), NULL, this );
|
||||
m_ViaDiameterCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
|
||||
m_ViaDrillCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
|
||||
m_ViaTypeChoice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
|
||||
@ -701,9 +726,10 @@ DIALOG_TRACK_VIA_PROPERTIES_BASE::~DIALOG_TRACK_VIA_PROPERTIES_BASE()
|
||||
m_viaNotFree->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaNotFreeClicked ), NULL, this );
|
||||
m_predefinedTrackWidthsCtrl->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onWidthSelect ), NULL, this );
|
||||
m_TrackWidthCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onWidthEdit ), NULL, this );
|
||||
m_TrackLayerCtrl->Disconnect( wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTrackEdit ), NULL, this );
|
||||
m_trackHasSolderMask->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onTrackEdit ), NULL, this );
|
||||
m_predefinedViaSizesCtrl->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaSelect ), NULL, this );
|
||||
m_cbPadstackMode->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onPadstackModeChanged ), NULL, this );
|
||||
m_cbEditLayer->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onEditLayerChanged ), NULL, this );
|
||||
m_ViaDiameterCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
|
||||
m_ViaDrillCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
|
||||
m_ViaTypeChoice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES_BASE::onViaEdit ), NULL, this );
|
||||
|
@ -2637,12 +2637,282 @@
|
||||
<property name="wrap">-1</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="gbsizeritem" expanded="true">
|
||||
<property name="border">0</property>
|
||||
<property name="colspan">3</property>
|
||||
<property name="column">0</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="row">2</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxBoxSizer" expanded="true">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_sbPadstackSettings</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">protected</property>
|
||||
<object class="sizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="true">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</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="drag_accept_files">0</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">Padstack mode:</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_stPadstackMode</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="true">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxChoice" expanded="true">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</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="choices">"Normal" "Front/Inner/Back" "Custom"</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="drag_accept_files">0</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_cbPadstackMode</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="selection">0</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="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChoice">onPadstackModeChanged</event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="true">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</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="drag_accept_files">0</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">Edit layer:</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_stEditLayer</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="true">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxChoice" expanded="true">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</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="choices"></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="drag_accept_files">0</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_cbEditLayer</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="selection">0</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="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChoice">onEditLayerChanged</event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="gbsizeritem" expanded="true">
|
||||
<property name="border">1</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">0</property>
|
||||
<property name="flag">wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="row">2</property>
|
||||
<property name="row">3</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxStaticText" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
@ -2707,7 +2977,7 @@
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">1</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
|
||||
<property name="row">2</property>
|
||||
<property name="row">3</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxTextCtrl" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
@ -2776,7 +3046,7 @@
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">2</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="row">2</property>
|
||||
<property name="row">3</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxStaticText" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
@ -2841,7 +3111,7 @@
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">0</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
|
||||
<property name="row">3</property>
|
||||
<property name="row">4</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxStaticText" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
@ -2906,7 +3176,7 @@
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">1</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
|
||||
<property name="row">3</property>
|
||||
<property name="row">4</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxTextCtrl" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
@ -2975,7 +3245,7 @@
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">2</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="row">3</property>
|
||||
<property name="row">4</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxStaticText" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
|
@ -92,6 +92,11 @@ class DIALOG_TRACK_VIA_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
wxStaticText* m_predefinedViaSizesLabel;
|
||||
wxChoice* m_predefinedViaSizesCtrl;
|
||||
wxStaticText* m_predefinedViaSizesUnits;
|
||||
wxBoxSizer* m_sbPadstackSettings;
|
||||
wxStaticText* m_stPadstackMode;
|
||||
wxChoice* m_cbPadstackMode;
|
||||
wxStaticText* m_stEditLayer;
|
||||
wxChoice* m_cbEditLayer;
|
||||
wxStaticText* m_ViaDiameterLabel;
|
||||
wxTextCtrl* m_ViaDiameterCtrl;
|
||||
wxStaticText* m_ViaDiameterUnit;
|
||||
@ -144,6 +149,8 @@ class DIALOG_TRACK_VIA_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
virtual void onWidthEdit( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void onTrackEdit( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void onViaSelect( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void onPadstackModeChanged( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void onEditLayerChanged( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void onViaEdit( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void onFrontTentingChanged( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void onTentingLinkToggle( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
@ -772,9 +772,7 @@ void PADSTACK::SetMode( MODE aMode )
|
||||
if( m_mode == aMode )
|
||||
return;
|
||||
|
||||
m_mode = aMode;
|
||||
|
||||
switch( m_mode )
|
||||
switch( aMode )
|
||||
{
|
||||
case MODE::NORMAL:
|
||||
std::erase_if( m_copperProps,
|
||||
@ -786,16 +784,30 @@ void PADSTACK::SetMode( MODE aMode )
|
||||
break;
|
||||
|
||||
case MODE::FRONT_INNER_BACK:
|
||||
m_copperProps[INNER_LAYERS] = m_copperProps[ALL_LAYERS];
|
||||
m_copperProps[B_Cu] = m_copperProps[ALL_LAYERS];
|
||||
// When coming from normal, these layers may be missing or have junk values
|
||||
if( m_mode == MODE::NORMAL )
|
||||
{
|
||||
m_copperProps[INNER_LAYERS] = m_copperProps[ALL_LAYERS];
|
||||
m_copperProps[B_Cu] = m_copperProps[ALL_LAYERS];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case MODE::CUSTOM:
|
||||
for( PCB_LAYER_ID layer : LAYER_RANGE( In1_Cu, B_Cu, MAX_CU_LAYERS ) )
|
||||
m_copperProps[layer] = m_copperProps[ALL_LAYERS];
|
||||
{
|
||||
PCB_LAYER_ID innerLayerTemplate = ( m_mode == MODE::NORMAL ) ? ALL_LAYERS : INNER_LAYERS;
|
||||
|
||||
for( PCB_LAYER_ID layer : LAYER_RANGE( In1_Cu, In30_Cu, MAX_CU_LAYERS ) )
|
||||
m_copperProps[layer] = m_copperProps[innerLayerTemplate];
|
||||
|
||||
if( m_mode == MODE::NORMAL )
|
||||
m_copperProps[B_Cu] = m_copperProps[ALL_LAYERS];
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
m_mode = aMode;
|
||||
|
||||
// Changing mode invalidates cached shapes
|
||||
// TODO(JE) clean this up -- maybe PADSTACK should own shape caches
|
||||
|
Loading…
Reference in New Issue
Block a user