From 77448f032b5ec62fe60e2e137a6da2d09fafa891 Mon Sep 17 00:00:00 2001 From: JamesJCode <13408010-JamesJCode@users.noreply.gitlab.com> Date: Mon, 6 Jan 2025 22:24:38 +0000 Subject: [PATCH] Improve placement rule areas UI --- .../dialogs/dialog_rule_area_properties.cpp | 27 ++-- ...el_rule_area_properties_placement_base.cpp | 14 +- ...el_rule_area_properties_placement_base.fbp | 121 ++++++++++++++---- ...anel_rule_area_properties_placement_base.h | 10 +- 4 files changed, 123 insertions(+), 49 deletions(-) diff --git a/pcbnew/dialogs/dialog_rule_area_properties.cpp b/pcbnew/dialogs/dialog_rule_area_properties.cpp index 8663f6d244..a48ca4c44f 100644 --- a/pcbnew/dialogs/dialog_rule_area_properties.cpp +++ b/pcbnew/dialogs/dialog_rule_area_properties.cpp @@ -128,11 +128,11 @@ DIALOG_RULE_AREA_PROPERTIES::DIALOG_RULE_AREA_PROPERTIES( PCB_BASE_FRAME* aPar m_placementProperties = new PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE( m_areaPropertiesNb ); m_areaPropertiesNb->AddPage( m_placementProperties, _( "Placement" ) ); - m_placementProperties->m_SheetCb->Connect( + m_placementProperties->m_SheetRb->Connect( wxEVT_CHECKBOX, wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES::OnSheetNameClicked ), nullptr, this ); - m_placementProperties->m_ComponentsCb->Connect( + m_placementProperties->m_ComponentsRb->Connect( wxEVT_CHECKBOX, wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES::OnComponentClassClicked ), nullptr, this ); @@ -192,11 +192,11 @@ DIALOG_RULE_AREA_PROPERTIES::DIALOG_RULE_AREA_PROPERTIES( PCB_BASE_FRAME* aPar DIALOG_RULE_AREA_PROPERTIES::~DIALOG_RULE_AREA_PROPERTIES() { - m_placementProperties->m_SheetCb->Disconnect( + m_placementProperties->m_SheetRb->Disconnect( wxEVT_CHECKBOX, wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES::OnSheetNameClicked ), nullptr, this ); - m_placementProperties->m_ComponentsCb->Disconnect( + m_placementProperties->m_ComponentsRb->Disconnect( wxEVT_CHECKBOX, wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES::OnComponentClassClicked ), nullptr, this ); @@ -205,14 +205,12 @@ DIALOG_RULE_AREA_PROPERTIES::~DIALOG_RULE_AREA_PROPERTIES() void DIALOG_RULE_AREA_PROPERTIES::OnSheetNameClicked( wxCommandEvent& event ) { - m_placementProperties->m_ComponentsCb->SetValue( false ); m_lastPlacementSourceType = RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME; } void DIALOG_RULE_AREA_PROPERTIES::OnComponentClassClicked( wxCommandEvent& event ) { - m_placementProperties->m_SheetCb->SetValue( false ); m_lastPlacementSourceType = RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS; } @@ -237,10 +235,11 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataToWindow() m_keepoutProperties->m_cbCopperPourCtrl->SetValue( m_zonesettings.GetDoNotAllowCopperPour() ); // Init placement parameters: - m_placementProperties->m_SheetCb->SetValue( false ); + m_placementProperties->m_DisabedlRb->SetValue( true ); + m_placementProperties->m_SheetRb->SetValue( false ); m_placementProperties->m_sheetCombo->Clear(); - m_placementProperties->m_ComponentsCb->SetValue( false ); + m_placementProperties->m_ComponentsRb->SetValue( false ); m_placementProperties->m_componentClassCombo->Clear(); wxString curSourceName = m_zonesettings.GetRuleAreaPlacementSource(); @@ -257,6 +256,8 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataToWindow() for( const wxString& sourceName : classNames ) m_placementProperties->m_componentClassCombo->Append( sourceName ); + m_placementProperties->m_componentClassCombo->Select( 0 ); + // Fetch sheet names std::set<wxString> sheetNames; @@ -265,6 +266,8 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataToWindow() for( const wxString& sourceName : sheetNames ) m_placementProperties->m_sheetCombo->Append( sourceName ); + + m_placementProperties->m_sheetCombo->Select( 0 ); } auto setupCurrentSourceSelection = [&]( wxComboBox* cb ) @@ -286,7 +289,7 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataToWindow() == RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ) { if( m_zonesettings.GetRuleAreaPlacementEnabled() ) - m_placementProperties->m_SheetCb->SetValue( true ); + m_placementProperties->m_SheetRb->SetValue( true ); setupCurrentSourceSelection( m_placementProperties->m_sheetCombo ); m_originalPlacementSourceType = RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME; @@ -295,7 +298,7 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataToWindow() else { if( m_zonesettings.GetRuleAreaPlacementEnabled() ) - m_placementProperties->m_ComponentsCb->SetValue( true ); + m_placementProperties->m_ComponentsRb->SetValue( true ); setupCurrentSourceSelection( m_placementProperties->m_componentClassCombo ); m_originalPlacementSourceType = RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS; @@ -414,12 +417,12 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataFromWindow() } }; - if( m_placementProperties->m_SheetCb->GetValue() ) + if( m_placementProperties->m_SheetRb->GetValue() ) { m_zonesettings.SetRuleAreaPlacementEnabled( true ); setPlacementSource( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ); } - else if( m_placementProperties->m_ComponentsCb->GetValue() ) + else if( m_placementProperties->m_ComponentsRb->GetValue() ) { m_zonesettings.SetRuleAreaPlacementEnabled( true ); setPlacementSource( RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS ); diff --git a/pcbnew/dialogs/panel_rule_area_properties_placement_base.cpp b/pcbnew/dialogs/panel_rule_area_properties_placement_base.cpp index 9ef78c4255..a949b10d9e 100644 --- a/pcbnew/dialogs/panel_rule_area_properties_placement_base.cpp +++ b/pcbnew/dialogs/panel_rule_area_properties_placement_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -17,8 +17,12 @@ PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE::PANEL_RULE_AREA_PROPERTIES_PLACEMENT_ wxBoxSizer* bMarginsSizer; bMarginsSizer = new wxBoxSizer( wxVERTICAL ); - m_SheetCb = new wxCheckBox( this, wxID_ANY, _("Place items from sheet:"), wxDefaultPosition, wxDefaultSize, 0 ); - bMarginsSizer->Add( m_SheetCb, 0, wxALL, 5 ); + m_DisabedlRb = new wxRadioButton( this, wxID_ANY, _("No placement"), wxDefaultPosition, wxDefaultSize, 0 ); + m_DisabedlRb->SetValue( true ); + bMarginsSizer->Add( m_DisabedlRb, 0, wxALL, 5 ); + + m_SheetRb = new wxRadioButton( this, wxID_ANY, _("Place items from sheet:"), wxDefaultPosition, wxDefaultSize, 0 ); + bMarginsSizer->Add( m_SheetRb, 0, wxALL, 5 ); m_sheetCombo = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY ); bMarginsSizer->Add( m_sheetCombo, 0, wxLEFT|wxEXPAND, 25 ); @@ -26,8 +30,8 @@ PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE::PANEL_RULE_AREA_PROPERTIES_PLACEMENT_ bMarginsSizer->Add( 0, 15, 0, wxEXPAND, 5 ); - m_ComponentsCb = new wxCheckBox( this, wxID_ANY, _("Place items matching component class:"), wxDefaultPosition, wxDefaultSize, 0 ); - bMarginsSizer->Add( m_ComponentsCb, 0, wxALL, 5 ); + m_ComponentsRb = new wxRadioButton( this, wxID_ANY, _("Place items matching component class:"), wxDefaultPosition, wxDefaultSize, 0 ); + bMarginsSizer->Add( m_ComponentsRb, 0, wxALL, 5 ); m_componentClassCombo = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY ); bMarginsSizer->Add( m_componentClassCombo, 0, wxLEFT|wxEXPAND, 25 ); diff --git a/pcbnew/dialogs/panel_rule_area_properties_placement_base.fbp b/pcbnew/dialogs/panel_rule_area_properties_placement_base.fbp index ba8c547b64..f8f08d47f8 100644 --- a/pcbnew/dialogs/panel_rule_area_properties_placement_base.fbp +++ b/pcbnew/dialogs/panel_rule_area_properties_placement_base.fbp @@ -1,34 +1,36 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <wxFormBuilder_Project> - <FileVersion major="1" minor="17"/> + <FileVersion major="1" minor="18"/> <object class="Project" expanded="true"> - <property name="class_decoration">; </property> <property name="code_generation">C++</property> - <property name="disconnect_events">1</property> - <property name="disconnect_mode">source_name</property> - <property name="disconnect_php_events">0</property> - <property name="disconnect_python_events">0</property> + <property name="cpp_class_decoration">; </property> + <property name="cpp_disconnect_events">1</property> + <property name="cpp_event_generation">connect</property> + <property name="cpp_help_provider">none</property> + <property name="cpp_namespace"></property> + <property name="cpp_precompiled_header"></property> + <property name="cpp_use_array_enum">0</property> + <property name="cpp_use_enum">0</property> <property name="embedded_files_path">res</property> <property name="encoding">UTF-8</property> - <property name="event_generation">connect</property> <property name="file">panel_rule_area_properties_placement_base</property> <property name="first_id">6000</property> - <property name="help_provider">none</property> - <property name="image_path_wrapper_function_name"></property> - <property name="indent_with_spaces"></property> <property name="internationalize">1</property> + <property name="lua_skip_events">1</property> + <property name="lua_ui_table">UI</property> <property name="name">PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE</property> - <property name="namespace"></property> <property name="path">.</property> - <property name="precompiled_header"></property> + <property name="php_disconnect_events">0</property> + <property name="php_disconnect_mode">source_name</property> + <property name="php_skip_events">1</property> + <property name="python_disconnect_events">0</property> + <property name="python_disconnect_mode">source_name</property> + <property name="python_image_path_wrapper_function_name"></property> + <property name="python_indent_with_spaces"></property> + <property name="python_skip_events">1</property> <property name="relative_path">1</property> - <property name="skip_lua_events">1</property> - <property name="skip_php_events">1</property> - <property name="skip_python_events">1</property> - <property name="ui_table">UI</property> - <property name="use_array_enum">0</property> - <property name="use_enum">0</property> <property name="use_microsoft_bom">0</property> + <property name="use_native_eol">0</property> <object class="Panel" expanded="true"> <property name="aui_managed">0</property> <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property> @@ -71,7 +73,72 @@ <property name="border">5</property> <property name="flag">wxALL</property> <property name="proportion">0</property> - <object class="wxCheckBox" expanded="true"> + <object class="wxRadioButton" 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">No placement</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_DisabedlRb</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">public</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="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="value">1</property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></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="wxRadioButton" expanded="true"> <property name="BottomDockable">1</property> <property name="LeftDockable">1</property> <property name="RightDockable">1</property> @@ -85,7 +152,6 @@ <property name="caption"></property> <property name="caption_visible">1</property> <property name="center_pane">0</property> - <property name="checked">0</property> <property name="close_button">1</property> <property name="context_help"></property> <property name="context_menu">1</property> @@ -109,7 +175,7 @@ <property name="minimize_button">0</property> <property name="minimum_size"></property> <property name="moveable">1</property> - <property name="name">m_SheetCb</property> + <property name="name">m_SheetRb</property> <property name="pane_border">1</property> <property name="pane_position"></property> <property name="pane_size"></property> @@ -127,6 +193,7 @@ <property name="validator_style">wxFILTER_NONE</property> <property name="validator_type">wxDefaultValidator</property> <property name="validator_variable"></property> + <property name="value">0</property> <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style"></property> @@ -212,21 +279,20 @@ <property name="border">5</property> <property name="flag">wxALL</property> <property name="proportion">0</property> - <object class="wxCheckBox" expanded="true"> + <object class="wxRadioButton" 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"></property> + <property name="aui_layer">0</property> <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></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="checked">0</property> <property name="close_button">1</property> <property name="context_help"></property> <property name="context_menu">1</property> @@ -250,7 +316,7 @@ <property name="minimize_button">0</property> <property name="minimum_size"></property> <property name="moveable">1</property> - <property name="name">m_ComponentsCb</property> + <property name="name">m_ComponentsRb</property> <property name="pane_border">1</property> <property name="pane_position"></property> <property name="pane_size"></property> @@ -268,6 +334,7 @@ <property name="validator_style">wxFILTER_NONE</property> <property name="validator_type">wxDefaultValidator</property> <property name="validator_variable"></property> + <property name="value">0</property> <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style"></property> diff --git a/pcbnew/dialogs/panel_rule_area_properties_placement_base.h b/pcbnew/dialogs/panel_rule_area_properties_placement_base.h index fa2ad651e2..bcbc2dcb6c 100644 --- a/pcbnew/dialogs/panel_rule_area_properties_placement_base.h +++ b/pcbnew/dialogs/panel_rule_area_properties_placement_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -11,7 +11,7 @@ #include <wx/xrc/xmlres.h> #include <wx/intl.h> #include <wx/string.h> -#include <wx/checkbox.h> +#include <wx/radiobut.h> #include <wx/gdicmn.h> #include <wx/font.h> #include <wx/colour.h> @@ -22,7 +22,6 @@ /////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////// /// Class PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE /////////////////////////////////////////////////////////////////////////////// @@ -33,9 +32,10 @@ class PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE : public wxPanel protected: public: - wxCheckBox* m_SheetCb; + wxRadioButton* m_DisabedlRb; + wxRadioButton* m_SheetRb; wxComboBox* m_sheetCombo; - wxCheckBox* m_ComponentsCb; + wxRadioButton* m_ComponentsRb; wxComboBox* m_componentClassCombo; PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );