diff --git a/pcbnew/widgets/appearance_controls.cpp b/pcbnew/widgets/appearance_controls.cpp index 195c8583f6..f11538d2b7 100644 --- a/pcbnew/widgets/appearance_controls.cpp +++ b/pcbnew/widgets/appearance_controls.cpp @@ -532,7 +532,7 @@ void APPEARANCE_CONTROLS::rebuildLayers() ROW_ICON_PROVIDER::STATE::OFF, layer ); COLOR_SWATCH* swatch = new COLOR_SWATCH( panel, COLOR4D::UNSPECIFIED, layer, - bgColor, theme->GetColor( layer ), false ); + bgColor, theme->GetColor( layer ), false ); swatch->SetToolTip( _( "Left double click or middle click for color change, " "right click for menu" ) ); @@ -549,13 +549,13 @@ void APPEARANCE_CONTROLS::rebuildLayers() firstLayer = false; sizer->AddSpacer( 1 ); - sizer->Add( indicator, 0, wxALIGN_CENTER_VERTICAL | wxTOP, topMargin ); + sizer->Add( indicator, 0, wxALIGN_CENTER_VERTICAL | wxTOP, topMargin ); sizer->AddSpacer( 5 ); - sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxTOP, topMargin ); + sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL | wxTOP, topMargin ); sizer->AddSpacer( 6 ); sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxTOP, topMargin ); sizer->AddSpacer( 5 ); - sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxTOP, topMargin ); + sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxTOP, topMargin ); m_layers_outer_sizer->Add( panel, 0, wxEXPAND, 0 ); @@ -974,35 +974,18 @@ void APPEARANCE_CONTROLS::rebuildObjects() COLOR_SETTINGS* theme = m_frame->GetColorSettings(); COLOR4D bgColor = theme->GetColor( LAYER_PCB_BACKGROUND ); GAL_SET visible = board->GetVisibleElements(); - bool firstSlider = true; - int sliderAlignment = wxALIGN_CENTER_VERTICAL; - int sliderLableAlignment = wxALIGN_CENTER_VERTICAL; - -#ifdef __WXMAC__ - sliderAlignment = wxALIGN_BOTTOM; - sliderLableAlignment = wxALIGN_TOP; -#endif + int swatchWidth = m_windowObjects->ConvertDialogToPixels( wxSize( 8, 0 ) ).x; + int labelWidth = 0; m_objectSettings.clear(); m_objectsSizer->Clear( true ); + m_objectsSizer->AddSpacer( 5 ); auto appendObject = - [&]( int aRow, std::unique_ptr& aSetting ) + [&]( const std::unique_ptr& aSetting ) { - int layer = aSetting->id; - int topMargin = 0; - - if( aSetting->can_control_opacity ) - { - if( firstSlider ) - topMargin = wxTOP; - - firstSlider = false; - } - else - { - topMargin = wxTOP; - } + wxBoxSizer* sizer = new wxBoxSizer( wxHORIZONTAL ); + int layer = aSetting->id; aSetting->visible = visible.Contains( ToGalLayer( layer ) ); COLOR4D color = theme->GetColor( layer ); @@ -1010,18 +993,21 @@ void APPEARANCE_CONTROLS::rebuildObjects() if( color != COLOR4D::UNSPECIFIED ) { - COLOR_SWATCH* swatch = new COLOR_SWATCH( m_windowObjects, color, layer, bgColor, - defColor, false ); + COLOR_SWATCH* swatch = new COLOR_SWATCH( m_windowObjects, color, layer, + bgColor, defColor, false ); swatch->SetToolTip( _( "Left double click or middle click for color change, " "right click for menu" ) ); - m_objectsSizer->Add( swatch, wxGBPosition( aRow, 0 ), wxDefaultSpan, - wxALIGN_CENTER_VERTICAL | topMargin | wxLEFT | wxRIGHT, 1 ); + sizer->Add( swatch, 0, wxALIGN_CENTER_VERTICAL, 0 ); aSetting->ctl_color = swatch; swatch->Bind( COLOR_SWATCH_CHANGED, &APPEARANCE_CONTROLS::OnColorSwatchChanged, this ); } + else + { + sizer->AddSpacer( swatchWidth ); + } BITMAP_TOGGLE* btn_visible = new BITMAP_TOGGLE( m_windowObjects, layer, KiBitmap( visibility_xpm ), @@ -1032,10 +1018,10 @@ void APPEARANCE_CONTROLS::rebuildObjects() tip.Printf( _( "Show or hide %s" ), aSetting->label.Lower() ); btn_visible->SetToolTip( tip ); - m_objectsSizer->Add( btn_visible, wxGBPosition( aRow, 1 ), wxDefaultSpan, - sliderLableAlignment | topMargin | wxLEFT, 1 ); aSetting->ctl_visibility = btn_visible; + sizer->AddSpacer( 5 ); + btn_visible->Bind( TOGGLE_CHANGED, [&]( wxCommandEvent& aEvent ) { @@ -1048,13 +1034,19 @@ void APPEARANCE_CONTROLS::rebuildObjects() label->Wrap( -1 ); label->SetToolTip( aSetting->tooltip ); - wxGBSpan labelSpan( 1, aSetting->can_control_opacity ? 1 : 2 ); - - m_objectsSizer->Add( label, wxGBPosition( aRow, 2 ), labelSpan, - sliderLableAlignment | topMargin | wxLEFT | wxRIGHT, 1 ); - if( aSetting->can_control_opacity ) { + label->SetMinSize( wxSize( labelWidth, -1 ) ); +#ifdef __WXMAC__ + sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 ); + sizer->AddSpacer( 5 ); + sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, 10 ); +#else + sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 ); + sizer->AddSpacer( 5 ); + sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 ); +#endif + wxSlider* slider = new wxSlider( m_windowObjects, wxID_ANY, 100, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL ); @@ -1067,8 +1059,7 @@ void APPEARANCE_CONTROLS::rebuildObjects() tip.Printf( _( "Set opacity of %s" ), aSetting->label.Lower() ); slider->SetToolTip( tip ); - m_objectsSizer->Add( slider, wxGBPosition( aRow, 3 ), wxDefaultSpan, - sliderAlignment | topMargin | wxLEFT | wxRIGHT, 1 ); + sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 5 ); aSetting->ctl_opacity = slider; auto opacitySliderHandler = @@ -1082,15 +1073,19 @@ void APPEARANCE_CONTROLS::rebuildObjects() slider->Bind( wxEVT_SCROLL_CHANGED, opacitySliderHandler ); slider->Bind( wxEVT_SCROLL_THUMBTRACK, opacitySliderHandler ); } + else + { + sizer->Add( btn_visible, 0, wxALIGN_CENTER_VERTICAL, 0 ); + sizer->AddSpacer( 5 ); + sizer->Add( label, 0, wxALIGN_CENTER_VERTICAL, 0 ); + } aSetting->ctl_text = label; + m_objectsSizer->Add( sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, 5 ); + m_objectsSizer->AddSpacer( 1 ); }; - m_objectsSizer->SetEmptyCellSize( wxSize( m_pointSize, m_pointSize * 2 / 3 ) ); - - int gridRow = 0; - - for( unsigned row = 0; row < arrayDim( s_objectSettings ); ++row ) + for( const APPEARANCE_SETTING& s_setting : s_objectSettings ) { // TODO(JE) #ifdef NOTYET @@ -1098,28 +1093,36 @@ void APPEARANCE_CONTROLS::rebuildObjects() continue; #endif - if( !s_objectSettings[row].spacer ) + if( !s_setting.spacer ) { - m_objectSettings.emplace_back( - std::make_unique( s_objectSettings[row] ) ); + m_objectSettings.emplace_back( std::make_unique( s_setting ) ); std::unique_ptr& setting = m_objectSettings.back(); // Because s_render_rows is created static, we must explicitly call // wxGetTranslation for texts which are internationalized (tool tips // and item names) - setting->tooltip = wxGetTranslation( s_objectSettings[row].tooltip ); - setting->label = wxGetTranslation( s_objectSettings[row].label ); + setting->tooltip = wxGetTranslation( s_setting.tooltip ); + setting->label = wxGetTranslation( s_setting.label ); - appendObject( gridRow, setting ); + if( setting->can_control_opacity ) + { + int width = m_windowObjects->GetTextExtent( setting->label ).x; + labelWidth = std::max( labelWidth, width ); + } m_objectSettingsMap[ToGalLayer( setting->id )] = setting.get(); } - - gridRow++; } - m_objectsSizer->AddGrowableCol( 3, 1 ); + for( const std::unique_ptr& setting : m_objectSettings ) + { + if( setting->spacer ) + m_objectsSizer->AddSpacer( m_pointSize ); + else + appendObject( setting ); + } + m_objectsSizer->Layout(); } diff --git a/pcbnew/widgets/appearance_controls_base.cpp b/pcbnew/widgets/appearance_controls_base.cpp index 6f6fc5977e..a00fc5107a 100644 --- a/pcbnew/widgets/appearance_controls_base.cpp +++ b/pcbnew/widgets/appearance_controls_base.cpp @@ -80,7 +80,7 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID m_panelLayers->SetSizer( m_panelLayersSizer ); m_panelLayers->Layout(); m_panelLayersSizer->Fit( m_panelLayers ); - m_notebook->AddPage( m_panelLayers, wxT("Layers"), true ); + m_notebook->AddPage( m_panelLayers, wxT("Layers"), false ); m_panelObjects = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); m_panelObjects->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); @@ -90,20 +90,12 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID m_windowObjects->SetScrollRate( 0, 5 ); m_windowObjects->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - wxBoxSizer* bSizer161; - bSizer161 = new wxBoxSizer( wxVERTICAL ); - - m_objectsSizer = new wxGridBagSizer( 0, 4 ); - m_objectsSizer->SetFlexibleDirection( wxBOTH ); - m_objectsSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + m_objectsSizer = new wxBoxSizer( wxVERTICAL ); - bSizer161->Add( m_objectsSizer, 1, wxEXPAND|wxALL, 5 ); - - - m_windowObjects->SetSizer( bSizer161 ); + m_windowObjects->SetSizer( m_objectsSizer ); m_windowObjects->Layout(); - bSizer161->Fit( m_windowObjects ); + m_objectsSizer->Fit( m_windowObjects ); m_objectsPanelSizer->Add( m_windowObjects, 1, wxEXPAND, 5 ); @@ -213,7 +205,7 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID wxBoxSizer* bSizer191; bSizer191 = new wxBoxSizer( wxHORIZONTAL ); - m_rbNetColorAll = new wxRadioButton( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("All"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); + m_rbNetColorAll = new wxRadioButton( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("All"), wxDefaultPosition, wxDefaultSize, 0 ); m_rbNetColorAll->SetToolTip( wxT("Net and netclass colors are shown on all copper items") ); bSizer191->Add( m_rbNetColorAll, 1, wxRIGHT|wxLEFT, 5 ); @@ -224,7 +216,7 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID bSizer191->Add( m_rbNetColorRatsnest, 1, wxLEFT, 5 ); - m_rbNetColorOff = new wxRadioButton( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("None"), wxDefaultPosition, wxDefaultSize, 0 ); + m_rbNetColorOff = new wxRadioButton( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("None"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); m_rbNetColorOff->SetToolTip( wxT("Net and netclass colors are not shown") ); bSizer191->Add( m_rbNetColorOff, 1, wxLEFT, 5 ); @@ -242,7 +234,7 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID m_panelNetsAndClasses->SetSizer( bSizer16 ); m_panelNetsAndClasses->Layout(); bSizer16->Fit( m_panelNetsAndClasses ); - m_notebook->AddPage( m_panelNetsAndClasses, wxT("Nets"), false ); + m_notebook->AddPage( m_panelNetsAndClasses, wxT("Nets"), true ); m_sizerOuter->Add( m_notebook, 1, wxEXPAND, 5 ); @@ -253,6 +245,8 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID int m_cbLayerPresetsNChoices = sizeof( m_cbLayerPresetsChoices ) / sizeof( wxString ); m_cbLayerPresets = new wxChoice( presetsSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cbLayerPresetsNChoices, m_cbLayerPresetsChoices, 0 ); m_cbLayerPresets->SetSelection( 1 ); + m_cbLayerPresets->SetToolTip( wxT("Layer presets") ); + presetsSizer->Add( m_cbLayerPresets, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); m_btnDeletePreset = new wxBitmapButton( presetsSizer->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); diff --git a/pcbnew/widgets/appearance_controls_base.fbp b/pcbnew/widgets/appearance_controls_base.fbp index d310b48d96..ae435204e1 100644 --- a/pcbnew/widgets/appearance_controls_base.fbp +++ b/pcbnew/widgets/appearance_controls_base.fbp @@ -115,7 +115,7 @@ Layers - 1 + 0 1 1 @@ -817,26 +817,9 @@ wxHSCROLL|wxVSCROLL - bSizer161 + m_objectsSizer wxVERTICAL - none - - 5 - wxEXPAND|wxALL - 1 - - - wxBOTH - - - 4 - - m_objectsSizer - wxFLEX_GROWMODE_SPECIFIED - protected - 0 - - + protected @@ -846,7 +829,7 @@ Nets - 0 + 1 1 1 @@ -1631,7 +1614,7 @@ OnNetDisplayPaneChanged - + bSizer1211 wxVERTICAL @@ -1697,11 +1680,11 @@ -1 - + 5 wxEXPAND 0 - + bSizer191 wxHORIZONTAL @@ -1756,7 +1739,7 @@ Resizable 1 - wxRB_GROUP + ; ; forward_declare 0 Net and netclass colors are shown on all copper items @@ -1884,7 +1867,7 @@ Resizable 1 - + wxRB_GROUP ; ; forward_declare 0 Net and netclass colors are not shown @@ -1974,7 +1957,7 @@ ; ; forward_declare 0 - + Layer presets wxFILTER_NONE wxDefaultValidator diff --git a/pcbnew/widgets/appearance_controls_base.h b/pcbnew/widgets/appearance_controls_base.h index 4cff818334..d2e4f03ad4 100644 --- a/pcbnew/widgets/appearance_controls_base.h +++ b/pcbnew/widgets/appearance_controls_base.h @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -61,7 +60,7 @@ class APPEARANCE_CONTROLS_BASE : public wxPanel wxPanel* m_panelObjects; wxBoxSizer* m_objectsPanelSizer; wxScrolledWindow* m_windowObjects; - wxGridBagSizer* m_objectsSizer; + wxBoxSizer* m_objectsSizer; wxPanel* m_panelNetsAndClasses; wxSplitterWindow* m_netsTabSplitter; wxPanel* m_panelNets;