diff --git a/pcbnew/widgets/appearance_controls.cpp b/pcbnew/widgets/appearance_controls.cpp index c5d4e7b775..d8daf2a49c 100644 --- a/pcbnew/widgets/appearance_controls.cpp +++ b/pcbnew/widgets/appearance_controls.cpp @@ -33,7 +33,7 @@ #include #include #include - +#include /// Template for object appearance settings const APPEARANCE_CONTROLS::APPEARANCE_SETTING APPEARANCE_CONTROLS::s_objectSettings[] = { @@ -1433,11 +1433,12 @@ void APPEARANCE_CONTROLS::rebuildLayerPresetsWidget() { m_cbLayerPresets->Clear(); - for( auto& pair : m_layerPresets ) + for( std::pair& pair : m_layerPresets ) m_cbLayerPresets->Append( pair.first, static_cast( &pair.second ) ); m_cbLayerPresets->Append( wxT( "-----" ) ); - m_cbLayerPresets->Append( _( "Save new preset" ) ); + m_cbLayerPresets->Append( _( "Save new preset..." ) ); + m_cbLayerPresets->Append( _( "Delete preset..." ) ); m_cbLayerPresets->SetSelection( 0 ); @@ -1456,7 +1457,7 @@ void APPEARANCE_CONTROLS::syncLayerPresetSelection() GAL_SET visibleObjects = board->GetVisibleElements(); auto it = std::find_if( m_layerPresets.begin(), m_layerPresets.end(), - [&]( const auto& aPair ) + [&]( const std::pair& aPair ) { return ( aPair.second.layers == visibleLayers && aPair.second.renderLayers == visibleObjects ); @@ -1465,7 +1466,7 @@ void APPEARANCE_CONTROLS::syncLayerPresetSelection() if( it != m_layerPresets.end() ) m_cbLayerPresets->SetStringSelection( it->first ); else - m_cbLayerPresets->SetSelection( m_cbLayerPresets->GetCount() - 2 ); // separator + m_cbLayerPresets->SetSelection( m_cbLayerPresets->GetCount() - 3 ); // separator m_currentPreset = static_cast( m_cbLayerPresets->GetClientData( m_cbLayerPresets->GetSelection() ) ); @@ -1486,7 +1487,7 @@ void APPEARANCE_CONTROLS::updateLayerPresetSelection( const wxString& aName ) } else if( idx < 0 ) { - m_cbLayerPresets->SetSelection( m_cbLayerPresets->GetCount() - 2 ); // separator + m_cbLayerPresets->SetSelection( m_cbLayerPresets->GetCount() - 3 ); // separator updateDeleteLayerPresetButton(); } } @@ -1505,16 +1506,16 @@ void APPEARANCE_CONTROLS::onLayerPresetChanged( wxCommandEvent& aEvent ) if( m_currentPreset ) m_cbLayerPresets->SetStringSelection( m_currentPreset->name ); else - m_cbLayerPresets->SetSelection( count - 2 ); + m_cbLayerPresets->SetSelection( count - 3 ); }; - if( index == count - 2 ) + if( index == count - 3 ) { // Separator: reject the selection resetSelection(); return; } - else if( index == count - 1 ) + else if( index == count - 2 ) { // Save current state to new preset wxTextEntryDialog dlg( this, _( "New layer preset name:" ), _( "Save Layer Preset" ) ); @@ -1546,6 +1547,40 @@ void APPEARANCE_CONTROLS::onLayerPresetChanged( wxCommandEvent& aEvent ) return; } + else if( index == count - 1 ) + { + // Delete a preset + wxArrayString headers; + std::vector items; + + headers.Add( _( "Presets" ) ); + + for( std::pair& pair : m_layerPresets ) + { + if( !pair.second.readOnly ) + { + wxArrayString item; + item.Add( pair.first ); + items.emplace_back( item ); + } + } + + EDA_LIST_DIALOG dlg( m_frame, _( "Delete Preset" ), headers, items, wxEmptyString ); + dlg.SetListLabel( _( "Select netclass:" ) ); + + if( dlg.ShowModal() == wxID_OK ) + { + wxString presetName = dlg.GetTextSelection(); + + m_layerPresets.erase( presetName ); + + m_cbLayerPresets->Delete( m_cbLayerPresets->FindString( presetName ) ); + m_cbLayerPresets->SetSelection( m_cbLayerPresets->GetCount() - 3 ); + m_currentPreset = nullptr; + } + + return; + } LAYER_PRESET* preset = static_cast( m_cbLayerPresets->GetClientData( index ) ); m_currentPreset = preset; @@ -1602,7 +1637,7 @@ void APPEARANCE_CONTROLS::OnBtnDeleteLayerPreset( wxCommandEvent& event ) m_layerPresets.erase( current->name ); m_cbLayerPresets->Delete( index ); - m_cbLayerPresets->SetSelection( m_cbLayerPresets->GetCount() - 2 ); + m_cbLayerPresets->SetSelection( m_cbLayerPresets->GetCount() - 3 ); m_currentPreset = nullptr; } diff --git a/pcbnew/widgets/appearance_controls_base.cpp b/pcbnew/widgets/appearance_controls_base.cpp index a00fc5107a..02173508a2 100644 --- a/pcbnew/widgets/appearance_controls_base.cpp +++ b/pcbnew/widgets/appearance_controls_base.cpp @@ -205,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, 0 ); + m_rbNetColorAll = new wxRadioButton( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("All"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); m_rbNetColorAll->SetToolTip( wxT("Net and netclass colors are shown on all copper items") ); bSizer191->Add( m_rbNetColorAll, 1, wxRIGHT|wxLEFT, 5 ); @@ -216,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, wxRB_GROUP ); + m_rbNetColorOff = new wxRadioButton( m_paneNetDisplay->GetPane(), wxID_ANY, wxT("None"), wxDefaultPosition, wxDefaultSize, 0 ); m_rbNetColorOff->SetToolTip( wxT("Net and netclass colors are not shown") ); bSizer191->Add( m_rbNetColorOff, 1, wxLEFT, 5 ); @@ -247,13 +247,13 @@ APPEARANCE_CONTROLS_BASE::APPEARANCE_CONTROLS_BASE( wxWindow* parent, wxWindowID m_cbLayerPresets->SetSelection( 1 ); m_cbLayerPresets->SetToolTip( wxT("Layer presets") ); - presetsSizer->Add( m_cbLayerPresets, 1, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + presetsSizer->Add( m_cbLayerPresets, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_btnDeletePreset = new wxBitmapButton( presetsSizer->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); m_btnDeletePreset->Enable( false ); m_btnDeletePreset->SetToolTip( wxT("Delete this layer preset") ); - presetsSizer->Add( m_btnDeletePreset, 0, wxALIGN_CENTER_VERTICAL, 5 ); + presetsSizer->Add( m_btnDeletePreset, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_sizerOuter->Add( presetsSizer, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 ); diff --git a/pcbnew/widgets/appearance_controls_base.fbp b/pcbnew/widgets/appearance_controls_base.fbp index ae435204e1..28cf56efe3 100644 --- a/pcbnew/widgets/appearance_controls_base.fbp +++ b/pcbnew/widgets/appearance_controls_base.fbp @@ -1614,7 +1614,7 @@ OnNetDisplayPaneChanged - + bSizer1211 wxVERTICAL @@ -1680,11 +1680,11 @@ -1 - + 5 wxEXPAND 0 - + bSizer191 wxHORIZONTAL @@ -1739,7 +1739,7 @@ Resizable 1 - + wxRB_GROUP ; ; forward_declare 0 Net and netclass colors are shown on all copper items @@ -1867,7 +1867,7 @@ Resizable 1 - wxRB_GROUP + ; ; forward_declare 0 Net and netclass colors are not shown @@ -1905,7 +1905,7 @@ none 5 - wxALIGN_CENTER_VERTICAL|wxRIGHT + wxALIGN_CENTER_VERTICAL|wxALL 1 1 @@ -1970,7 +1970,7 @@ 5 - wxALIGN_CENTER_VERTICAL + wxALIGN_CENTER_VERTICAL|wxALL 0 1