Handle units switch in board stackup.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/16361
This commit is contained in:
parent
f887f9b1e5
commit
c051e66830
|
@ -602,8 +602,8 @@ double EDA_UNIT_UTILS::UI::DoubleValueFromString( const EDA_IU_SCALE& aIuScale,
|
||||||
|| aUnits == EDA_UNITS::MILS
|
|| aUnits == EDA_UNITS::MILS
|
||||||
|| aUnits == EDA_UNITS::INCHES )
|
|| aUnits == EDA_UNITS::INCHES )
|
||||||
{
|
{
|
||||||
//check for um, μm (µ is MICRO SIGN) and µm (µ is GREEK SMALL LETTER MU) for micrometre
|
//check for um, μm (µ is MICRO SIGN) and µm (µ is GREEK SMALL LETTER MU) for micrometre
|
||||||
if( unit == wxT( "um" ) || unit == wxT( "\u00B5m" ) || unit == wxT( "\u03BCm" ) )
|
if( unit == wxT( "um" ) || unit == wxT( "\u00B5m" ) || unit == wxT( "\u03BCm" ) )
|
||||||
{
|
{
|
||||||
aUnits = EDA_UNITS::MICROMETRES;
|
aUnits = EDA_UNITS::MICROMETRES;
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,11 +77,12 @@ PANEL_SETUP_BOARD_STACKUP::PANEL_SETUP_BOARD_STACKUP( wxWindow* aParentWindow,
|
||||||
PANEL_SETUP_BOARD_STACKUP_BASE( aParentWindow ),
|
PANEL_SETUP_BOARD_STACKUP_BASE( aParentWindow ),
|
||||||
m_delectricMatList( DIELECTRIC_SUBSTRATE_LIST::DL_MATERIAL_DIELECTRIC ),
|
m_delectricMatList( DIELECTRIC_SUBSTRATE_LIST::DL_MATERIAL_DIELECTRIC ),
|
||||||
m_solderMaskMatList( DIELECTRIC_SUBSTRATE_LIST::DL_MATERIAL_SOLDERMASK ),
|
m_solderMaskMatList( DIELECTRIC_SUBSTRATE_LIST::DL_MATERIAL_SOLDERMASK ),
|
||||||
m_silkscreenMatList( DIELECTRIC_SUBSTRATE_LIST::DL_MATERIAL_SILKSCREEN )
|
m_silkscreenMatList( DIELECTRIC_SUBSTRATE_LIST::DL_MATERIAL_SILKSCREEN ),
|
||||||
|
m_board( aFrame->GetBoard() ),
|
||||||
|
m_frame( aFrame ),
|
||||||
|
m_lastUnits( aFrame->GetUserUnits() )
|
||||||
{
|
{
|
||||||
m_frame = aFrame;
|
|
||||||
m_panelLayers = aPanelLayers;
|
m_panelLayers = aPanelLayers;
|
||||||
m_board = m_frame->GetBoard();
|
|
||||||
m_brdSettings = &m_board->GetDesignSettings();
|
m_brdSettings = &m_board->GetDesignSettings();
|
||||||
|
|
||||||
m_panel1->SetBorders( false, false, true, true );
|
m_panel1->SetBorders( false, false, true, true );
|
||||||
|
@ -118,6 +119,8 @@ PANEL_SETUP_BOARD_STACKUP::PANEL_SETUP_BOARD_STACKUP( wxWindow* aParentWindow,
|
||||||
buildLayerStackPanel( true );
|
buildLayerStackPanel( true );
|
||||||
synchronizeWithBoard( true );
|
synchronizeWithBoard( true );
|
||||||
computeBoardThickness();
|
computeBoardThickness();
|
||||||
|
|
||||||
|
m_frame->Bind( EDA_EVT_UNITS_CHANGED, &PANEL_SETUP_BOARD_STACKUP::onUnitsChanged, this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -127,6 +130,39 @@ PANEL_SETUP_BOARD_STACKUP::~PANEL_SETUP_BOARD_STACKUP()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PANEL_SETUP_BOARD_STACKUP::onUnitsChanged( wxCommandEvent& event )
|
||||||
|
{
|
||||||
|
EDA_UNITS newUnits = m_frame->GetUserUnits();
|
||||||
|
EDA_IU_SCALE scale = m_frame->GetIuScale();
|
||||||
|
|
||||||
|
auto convert =
|
||||||
|
[&]( wxTextCtrl* aTextCtrl )
|
||||||
|
{
|
||||||
|
wxString str = aTextCtrl->GetValue();
|
||||||
|
long long int temp = EDA_UNIT_UTILS::UI::ValueFromString( scale, m_lastUnits, str );
|
||||||
|
str = EDA_UNIT_UTILS::UI::StringFromValue( scale, newUnits, temp, true );
|
||||||
|
|
||||||
|
// Don't use SetValue(); we don't want a bunch of event propagation as the actual
|
||||||
|
// value hasn't changed, only its presentation.
|
||||||
|
aTextCtrl->ChangeValue( str );
|
||||||
|
};
|
||||||
|
|
||||||
|
for( BOARD_STACKUP_ROW_UI_ITEM& ui_item : m_rowUiItemsList )
|
||||||
|
{
|
||||||
|
BOARD_STACKUP_ITEM* item = ui_item.m_Item;
|
||||||
|
|
||||||
|
if( item->IsThicknessEditable() && item->IsEnabled() )
|
||||||
|
convert( static_cast<wxTextCtrl*>( ui_item.m_ThicknessCtrl ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
convert( m_tcCTValue );
|
||||||
|
|
||||||
|
m_lastUnits = newUnits;
|
||||||
|
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void PANEL_SETUP_BOARD_STACKUP::onCopperLayersSelCount( wxCommandEvent& event )
|
void PANEL_SETUP_BOARD_STACKUP::onCopperLayersSelCount( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
int oldBoardWidth = static_cast<int>( m_frame->ValueFromString( m_tcCTValue->GetValue() ) );
|
int oldBoardWidth = static_cast<int>( m_frame->ValueFromString( m_tcCTValue->GetValue() ) );
|
||||||
|
|
|
@ -219,6 +219,8 @@ private:
|
||||||
*/
|
*/
|
||||||
wxBitmapComboBox* createColorBox( BOARD_STACKUP_ITEM* aStackupItem, int aRow );
|
wxBitmapComboBox* createColorBox( BOARD_STACKUP_ITEM* aStackupItem, int aRow );
|
||||||
|
|
||||||
|
void onUnitsChanged( wxCommandEvent& event );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* disconnect event handlers connected to wxControl items found in list m_controlItemsList
|
* disconnect event handlers connected to wxControl items found in list m_controlItemsList
|
||||||
*/
|
*/
|
||||||
|
@ -244,6 +246,7 @@ private:
|
||||||
BOARD* m_board;
|
BOARD* m_board;
|
||||||
BOARD_DESIGN_SETTINGS* m_brdSettings;
|
BOARD_DESIGN_SETTINGS* m_brdSettings;
|
||||||
PCB_EDIT_FRAME* m_frame;
|
PCB_EDIT_FRAME* m_frame;
|
||||||
|
EDA_UNITS m_lastUnits;
|
||||||
wxSize m_numericTextCtrlSize; // Best size for wxTextCtrls with units
|
wxSize m_numericTextCtrlSize; // Best size for wxTextCtrls with units
|
||||||
wxSize m_numericFieldsSize; // Best size for wxTextCtrls without units
|
wxSize m_numericFieldsSize; // Best size for wxTextCtrls without units
|
||||||
wxArrayString m_core_prepreg_choice; // Used to display the option list in dialog
|
wxArrayString m_core_prepreg_choice; // Used to display the option list in dialog
|
||||||
|
|
Loading…
Reference in New Issue