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::INCHES )
|
||||
{
|
||||
//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" ) )
|
||||
//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" ) )
|
||||
{
|
||||
aUnits = EDA_UNITS::MICROMETRES;
|
||||
}
|
||||
|
|
|
@ -77,11 +77,12 @@ PANEL_SETUP_BOARD_STACKUP::PANEL_SETUP_BOARD_STACKUP( wxWindow* aParentWindow,
|
|||
PANEL_SETUP_BOARD_STACKUP_BASE( aParentWindow ),
|
||||
m_delectricMatList( DIELECTRIC_SUBSTRATE_LIST::DL_MATERIAL_DIELECTRIC ),
|
||||
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_board = m_frame->GetBoard();
|
||||
m_brdSettings = &m_board->GetDesignSettings();
|
||||
|
||||
m_panel1->SetBorders( false, false, true, true );
|
||||
|
@ -118,6 +119,8 @@ PANEL_SETUP_BOARD_STACKUP::PANEL_SETUP_BOARD_STACKUP( wxWindow* aParentWindow,
|
|||
buildLayerStackPanel( true );
|
||||
synchronizeWithBoard( true );
|
||||
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 )
|
||||
{
|
||||
int oldBoardWidth = static_cast<int>( m_frame->ValueFromString( m_tcCTValue->GetValue() ) );
|
||||
|
|
|
@ -219,6 +219,8 @@ private:
|
|||
*/
|
||||
wxBitmapComboBox* createColorBox( BOARD_STACKUP_ITEM* aStackupItem, int aRow );
|
||||
|
||||
void onUnitsChanged( wxCommandEvent& event );
|
||||
|
||||
/**
|
||||
* disconnect event handlers connected to wxControl items found in list m_controlItemsList
|
||||
*/
|
||||
|
@ -244,6 +246,7 @@ private:
|
|||
BOARD* m_board;
|
||||
BOARD_DESIGN_SETTINGS* m_brdSettings;
|
||||
PCB_EDIT_FRAME* m_frame;
|
||||
EDA_UNITS m_lastUnits;
|
||||
wxSize m_numericTextCtrlSize; // Best size for wxTextCtrls with units
|
||||
wxSize m_numericFieldsSize; // Best size for wxTextCtrls without units
|
||||
wxArrayString m_core_prepreg_choice; // Used to display the option list in dialog
|
||||
|
|
Loading…
Reference in New Issue