From 37a3e55bd32e0222d5994108d9f78d8254983291 Mon Sep 17 00:00:00 2001 From: JamesJCode <13408010-JamesJCode@users.noreply.gitlab.com> Date: Wed, 9 Oct 2024 22:43:40 +0100 Subject: [PATCH] Allow pcb rule areas to handle keepout and placement concurrently - Implements component classes for placement rule areas and multichannel tool - Implements property inspector properties for rule areas - Fixes some zone member default initialisation issues - Gates all multichannel-related imlpementation with existing adv config flag - Removes rule area type enum, replaces with inference from keepout and placement settings --- pcbnew/CMakeLists.txt | 2 + pcbnew/component_class_manager.h | 6 + .../dialogs/dialog_rule_area_properties.cpp | 279 +++++-- .../dialog_rule_area_properties_base.cpp | 106 +-- .../dialog_rule_area_properties_base.fbp | 687 +++--------------- .../dialog_rule_area_properties_base.h | 17 +- ...anel_rule_area_properties_keepout_base.cpp | 51 ++ ...anel_rule_area_properties_keepout_base.fbp | 398 ++++++++++ .../panel_rule_area_properties_keepout_base.h | 46 ++ ...el_rule_area_properties_placement_base.cpp | 53 ++ ...el_rule_area_properties_placement_base.fbp | 367 ++++++++++ ...anel_rule_area_properties_placement_base.h | 48 ++ pcbnew/drc/drc_engine.cpp | 2 +- .../drc_interactive_courtyard_clearance.cpp | 5 +- pcbnew/drc/drc_test_provider_disallow.cpp | 9 +- pcbnew/edit_zone_helpers.cpp | 2 +- .../pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp | 37 +- .../kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp | 2 - pcbnew/router/pns_kicad_iface.cpp | 4 +- pcbnew/router/pns_router.cpp | 2 +- pcbnew/tools/board_editor_control.cpp | 2 +- pcbnew/tools/convert_tool.cpp | 2 +- pcbnew/tools/multichannel_tool.cpp | 19 +- pcbnew/tools/zone_create_helper.cpp | 2 +- pcbnew/zone.cpp | 133 +++- pcbnew/zone.h | 20 +- pcbnew/zone_filler.cpp | 4 +- pcbnew/zone_settings.cpp | 11 +- pcbnew/zone_settings.h | 22 +- pcbnew/zones.h | 3 +- pcbnew/zones_functions_for_undo_redo.cpp | 36 +- 31 files changed, 1518 insertions(+), 859 deletions(-) create mode 100644 pcbnew/dialogs/panel_rule_area_properties_keepout_base.cpp create mode 100644 pcbnew/dialogs/panel_rule_area_properties_keepout_base.fbp create mode 100644 pcbnew/dialogs/panel_rule_area_properties_keepout_base.h create mode 100644 pcbnew/dialogs/panel_rule_area_properties_placement_base.cpp create mode 100644 pcbnew/dialogs/panel_rule_area_properties_placement_base.fbp create mode 100644 pcbnew/dialogs/panel_rule_area_properties_placement_base.h diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index c1e0d18618..318f590240 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -174,6 +174,8 @@ set( PCBNEW_DIALOGS dialogs/panel_pcbnew_color_settings.cpp dialogs/panel_pcbnew_display_origin.cpp dialogs/panel_pcbnew_display_origin_base.cpp + dialogs/panel_rule_area_properties_keepout_base.cpp + dialogs/panel_rule_area_properties_placement_base.cpp dialogs/panel_setup_constraints.cpp dialogs/panel_setup_constraints_base.cpp dialogs/panel_setup_formatting.cpp diff --git a/pcbnew/component_class_manager.h b/pcbnew/component_class_manager.h index f29c695fc6..860d613580 100644 --- a/pcbnew/component_class_manager.h +++ b/pcbnew/component_class_manager.h @@ -113,6 +113,12 @@ public: // All pointers to COMPONENT_CLASS objects will being invalid void Reset(); + /// @brief Fetches a read-only map of the fundamental component classes + const std::unordered_map<wxString, std::unique_ptr<COMPONENT_CLASS>>& GetClasses() const + { + return m_classes; + } + protected: /// All individual component classes std::unordered_map<wxString, std::unique_ptr<COMPONENT_CLASS>> m_classes; diff --git a/pcbnew/dialogs/dialog_rule_area_properties.cpp b/pcbnew/dialogs/dialog_rule_area_properties.cpp index 8cde92a9bd..e55f53b35a 100644 --- a/pcbnew/dialogs/dialog_rule_area_properties.cpp +++ b/pcbnew/dialogs/dialog_rule_area_properties.cpp @@ -23,13 +23,17 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include <advanced_config.h> #include <kiface_base.h> #include <confirm.h> #include <board.h> +#include <footprint.h> #include <pcb_edit_frame.h> #include <pcbnew_settings.h> #include <zone_settings.h> #include <dialog_rule_area_properties_base.h> +#include <panel_rule_area_properties_keepout_base.h> +#include <panel_rule_area_properties_placement_base.h> #include <widgets/unit_binder.h> #include <wx/statbox.h> #include <wx/statline.h> @@ -45,16 +49,21 @@ class DIALOG_RULE_AREA_PROPERTIES : public DIALOG_RULE_AREA_PROPERTIES_BASE { public: DIALOG_RULE_AREA_PROPERTIES( PCB_BASE_FRAME* aParent, ZONE_SETTINGS* aSettings, - CONVERT_SETTINGS* aConvertSettings ); + CONVERT_SETTINGS* aConvertSettings, BOARD* aBoard ); + ~DIALOG_RULE_AREA_PROPERTIES(); private: bool TransferDataToWindow() override; bool TransferDataFromWindow() override; + void PopulatePlacementSourceList( RULE_AREA_PLACEMENT_SOURCE_TYPE placementType ); + void OnLayerSelection( wxDataViewEvent& event ) override; - void OnRuleTypeSelect( wxCommandEvent& event ) override; + void OnSheetNameRbClicked( wxCommandEvent& event ); + void OnComponentClassRbClicked( wxCommandEvent& event ); private: + BOARD* m_board; UNIT_BINDER m_outlineHatchPitch; PCB_BASE_FRAME* m_parent; ZONE_SETTINGS m_zonesettings; ///< the working copy of zone settings @@ -69,34 +78,62 @@ private: wxStaticText* m_gapUnits; UNIT_BINDER* m_gap; wxCheckBox* m_cbDeleteOriginals; + + // The name of a rule area source that is not now found on the board (e.g. after a netlist + // update). This is used to re-populate the zone settings if the selection is not changed. + wxString m_notFoundPlacementSourceName; + + PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE* m_keepoutProperties; + PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE* m_placementProperties; + RULE_AREA_PLACEMENT_SOURCE_TYPE m_currentKeepoutSource; + + std::set<wxString> m_sheetNames; + std::set<wxString> m_componentClasses; }; -int InvokeRuleAreaEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aZoneSettings, +int InvokeRuleAreaEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aZoneSettings, BOARD* aBoard, CONVERT_SETTINGS* aConvertSettings ) { - DIALOG_RULE_AREA_PROPERTIES dlg( aCaller, aZoneSettings, aConvertSettings ); + DIALOG_RULE_AREA_PROPERTIES dlg( aCaller, aZoneSettings, aConvertSettings, aBoard ); return dlg.ShowModal(); } -DIALOG_RULE_AREA_PROPERTIES::DIALOG_RULE_AREA_PROPERTIES( PCB_BASE_FRAME* aParent, - ZONE_SETTINGS* aSettings, - CONVERT_SETTINGS* aConvertSettings ) : +DIALOG_RULE_AREA_PROPERTIES::DIALOG_RULE_AREA_PROPERTIES( PCB_BASE_FRAME* aParent, + ZONE_SETTINGS* aSettings, + CONVERT_SETTINGS* aConvertSettings, + BOARD* aBoard ) : DIALOG_RULE_AREA_PROPERTIES_BASE( aParent ), - m_outlineHatchPitch( aParent, m_stBorderHatchPitchText, - m_outlineHatchPitchCtrl, m_outlineHatchUnits ), - m_convertSettings( aConvertSettings ), - m_rbCenterline( nullptr ), - m_rbBoundingHull( nullptr ), - m_cbDeleteOriginals( nullptr ) + m_board( aBoard ), m_outlineHatchPitch( aParent, m_stBorderHatchPitchText, + m_outlineHatchPitchCtrl, m_outlineHatchUnits ), + m_convertSettings( aConvertSettings ), m_rbCenterline( nullptr ), + m_rbBoundingHull( nullptr ), m_cbDeleteOriginals( nullptr ) { m_parent = aParent; m_ptr = aSettings; m_zonesettings = *aSettings; + m_keepoutProperties = new PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE( m_areaPropertiesNb ); + m_areaPropertiesNb->AddPage( m_keepoutProperties, _( "Keepout" ), true ); + + if( ADVANCED_CFG::GetCfg().m_EnableMultichannelTool ) + { + m_placementProperties = new PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE( m_areaPropertiesNb ); + m_areaPropertiesNb->AddPage( m_placementProperties, _( "Placement" ) ); + + m_placementProperties->m_sourceSheetnameRb->Connect( + wxEVT_RADIOBUTTON, + wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES::OnSheetNameRbClicked ), NULL, + this ); + m_placementProperties->m_sourceComponentClassRb->Connect( + wxEVT_RADIOBUTTON, + wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES::OnComponentClassRbClicked ), + NULL, this ); + } + if( aConvertSettings ) { wxStaticBox* bConvertBox = new wxStaticBox( this, wxID_ANY, @@ -150,6 +187,89 @@ DIALOG_RULE_AREA_PROPERTIES::DIALOG_RULE_AREA_PROPERTIES( PCB_BASE_FRAME* aParen } +DIALOG_RULE_AREA_PROPERTIES::~DIALOG_RULE_AREA_PROPERTIES() +{ + if( ADVANCED_CFG::GetCfg().m_EnableMultichannelTool ) + { + m_placementProperties->m_sourceSheetnameRb->Disconnect( + wxEVT_RADIOBUTTON, + wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES::OnSheetNameRbClicked ), NULL, + this ); + m_placementProperties->m_sourceComponentClassRb->Disconnect( + wxEVT_RADIOBUTTON, + wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES::OnComponentClassRbClicked ), + NULL, this ); + } +} + + +void DIALOG_RULE_AREA_PROPERTIES::OnSheetNameRbClicked( wxCommandEvent& event ) +{ + if( m_currentKeepoutSource == RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ) + return; + + m_zonesettings.SetRuleAreaPlacementSource( wxEmptyString ); + m_zonesettings.SetRuleAreaPlacementSourceType( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ); + PopulatePlacementSourceList( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ); + m_currentKeepoutSource = RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME; +} + + +void DIALOG_RULE_AREA_PROPERTIES::OnComponentClassRbClicked( wxCommandEvent& event ) +{ + if( m_currentKeepoutSource == RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS ) + return; + + m_zonesettings.SetRuleAreaPlacementSource( wxEmptyString ); + m_zonesettings.SetRuleAreaPlacementSourceType( + RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS ); + PopulatePlacementSourceList( RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS ); + m_currentKeepoutSource = RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS; +} + + +void DIALOG_RULE_AREA_PROPERTIES::PopulatePlacementSourceList( + RULE_AREA_PLACEMENT_SOURCE_TYPE placementType ) +{ + m_placementProperties->m_sourceObjectNameCb->Clear(); + + std::set<wxString>* sourceStrings; + + switch( placementType ) + { + case RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME: + sourceStrings = &m_sheetNames; + break; + case RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS: + sourceStrings = &m_componentClasses; + break; + } + + int curSourceIdx = -1; + const wxString& curSourceName = m_zonesettings.GetRuleAreaPlacementSource(); + + for( const wxString& sourceName : *sourceStrings ) + { + if( curSourceName == sourceName ) + curSourceIdx = m_placementProperties->m_sourceObjectNameCb->GetCount(); + + m_placementProperties->m_sourceObjectNameCb->Append( sourceName ); + } + + if( curSourceIdx != -1 ) + { + m_placementProperties->m_sourceObjectNameCb->Select( curSourceIdx ); + } + else if( curSourceName != wxEmptyString ) + { + m_notFoundPlacementSourceName = curSourceName; + wxString notFoundDisplayName = _( "Not found on board: " ) + curSourceName; + m_placementProperties->m_sourceObjectNameCb->Insert( notFoundDisplayName, 0 ); + m_placementProperties->m_sourceObjectNameCb->Select( 0 ); + } +} + + bool DIALOG_RULE_AREA_PROPERTIES::TransferDataToWindow() { if( m_convertSettings ) @@ -163,26 +283,56 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataToWindow() } // Init keepout parameters: - m_cbTracksCtrl->SetValue( m_zonesettings.GetDoNotAllowTracks() ); - m_cbViasCtrl->SetValue( m_zonesettings.GetDoNotAllowVias() ); - m_cbPadsCtrl->SetValue( m_zonesettings.GetDoNotAllowPads() ); - m_cbFootprintsCtrl->SetValue( m_zonesettings.GetDoNotAllowFootprints() ); - m_cbCopperPourCtrl->SetValue( m_zonesettings.GetDoNotAllowCopperPour() ); + m_keepoutProperties->m_cbTracksCtrl->SetValue( m_zonesettings.GetDoNotAllowTracks() ); + m_keepoutProperties->m_cbViasCtrl->SetValue( m_zonesettings.GetDoNotAllowVias() ); + m_keepoutProperties->m_cbPadsCtrl->SetValue( m_zonesettings.GetDoNotAllowPads() ); + m_keepoutProperties->m_cbFootprintsCtrl->SetValue( m_zonesettings.GetDoNotAllowFootprints() ); + m_keepoutProperties->m_cbCopperPourCtrl->SetValue( m_zonesettings.GetDoNotAllowCopperPour() ); // Init placement parameters: - m_ruleText->SetText( m_zonesettings.GetRuleAreaPlacementSource() ); + if( ADVANCED_CFG::GetCfg().m_EnableMultichannelTool ) + { + m_placementProperties->m_enabled->SetValue( m_zonesettings.GetRuleAreaPlacementEnabled() ); - if( m_zonesettings.GetRuleAreaType() == RULE_AREA_TYPE::KEEPOUT ) - { - m_rbRuleType->Select( 0 ); - m_placementRuleSizer->Show( false ); - m_keepoutRuleSizer->Show( true ); - } - else - { - m_rbRuleType->Select( 1 ); - m_placementRuleSizer->Show( true ); - m_keepoutRuleSizer->Show( false ); + // Load schematic sheet and component class lists + if( m_board ) + { + // Fetch component classes + const std::unordered_map<wxString, std::unique_ptr<COMPONENT_CLASS>>& classes = + m_board->GetComponentClassManager().GetClasses(); + + for( const auto& [k, v] : classes ) + m_componentClasses.insert( k ); + + // Fetch sheet names + for( FOOTPRINT* fp : m_board->Footprints() ) + m_sheetNames.insert( fp->GetSheetname() ); + + if( m_zonesettings.GetRuleAreaPlacementSourceType() + == RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ) + { + m_placementProperties->m_sourceComponentClassRb->SetValue( false ); + m_placementProperties->m_sourceSheetnameRb->SetValue( true ); + PopulatePlacementSourceList( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ); + m_currentKeepoutSource = RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME; + } + else + { + m_placementProperties->m_sourceSheetnameRb->SetValue( false ); + m_placementProperties->m_sourceComponentClassRb->SetValue( true ); + PopulatePlacementSourceList( RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS ); + m_currentKeepoutSource = RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS; + } + } + + // Handle most-useful notebook page selection + m_areaPropertiesNb->SetSelection( 0 ); + + if( !m_zonesettings.HasKeepoutParametersSet() + && m_zonesettings.GetRuleAreaPlacementEnabled() ) + { + m_areaPropertiesNb->SetSelection( 1 ); + } } m_cbLocked->SetValue( m_zonesettings.m_Locked ); @@ -205,25 +355,6 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataToWindow() } -void DIALOG_RULE_AREA_PROPERTIES::OnRuleTypeSelect( wxCommandEvent& event ) -{ - if( m_rbRuleType->GetSelection() == 0 ) - { - m_zonesettings.SetRuleAreaType( RULE_AREA_TYPE::KEEPOUT ); - m_placementRuleSizer->Show( false ); - m_keepoutRuleSizer->Show( true ); - Layout(); - } - else - { - m_zonesettings.SetRuleAreaType( RULE_AREA_TYPE::PLACEMENT ); - m_placementRuleSizer->Show( true ); - m_keepoutRuleSizer->Show( false ); - Layout(); - } -} - - void DIALOG_RULE_AREA_PROPERTIES::OnLayerSelection( wxDataViewEvent& event ) { if( event.GetColumn() != 0 ) @@ -269,15 +400,49 @@ bool DIALOG_RULE_AREA_PROPERTIES::TransferDataFromWindow() } // Init keepout parameters: - m_zonesettings.SetRuleAreaType( m_rbRuleType->GetSelection() == 0 ? RULE_AREA_TYPE::KEEPOUT : RULE_AREA_TYPE::PLACEMENT ); - m_zonesettings.SetRuleAreaPlacementSourceType( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ); - m_zonesettings.SetRuleAreaPlacementSource( m_ruleText->GetText() ); m_zonesettings.SetIsRuleArea( true ); - m_zonesettings.SetDoNotAllowTracks( m_cbTracksCtrl->GetValue() ); - m_zonesettings.SetDoNotAllowVias( m_cbViasCtrl->GetValue() ); - m_zonesettings.SetDoNotAllowCopperPour( m_cbCopperPourCtrl->GetValue() ); - m_zonesettings.SetDoNotAllowPads( m_cbPadsCtrl->GetValue() ); - m_zonesettings.SetDoNotAllowFootprints( m_cbFootprintsCtrl->GetValue() ); + m_zonesettings.SetDoNotAllowTracks( m_keepoutProperties->m_cbTracksCtrl->GetValue() ); + m_zonesettings.SetDoNotAllowVias( m_keepoutProperties->m_cbViasCtrl->GetValue() ); + m_zonesettings.SetDoNotAllowCopperPour( m_keepoutProperties->m_cbCopperPourCtrl->GetValue() ); + m_zonesettings.SetDoNotAllowPads( m_keepoutProperties->m_cbPadsCtrl->GetValue() ); + m_zonesettings.SetDoNotAllowFootprints( m_keepoutProperties->m_cbFootprintsCtrl->GetValue() ); + + // Init placement parameters + if( ADVANCED_CFG::GetCfg().m_EnableMultichannelTool ) + { + m_zonesettings.SetRuleAreaPlacementEnabled( m_placementProperties->m_enabled->GetValue() ); + + if( m_placementProperties->m_sourceSheetnameRb->GetValue() ) + { + m_zonesettings.SetRuleAreaPlacementSourceType( + RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ); + } + else + { + m_zonesettings.SetRuleAreaPlacementSourceType( + RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS ); + } + + int selectedSourceIdx = m_placementProperties->m_sourceObjectNameCb->GetSelection(); + + if( selectedSourceIdx != wxNOT_FOUND ) + { + if( selectedSourceIdx == 0 && m_notFoundPlacementSourceName != wxEmptyString ) + { + m_zonesettings.SetRuleAreaPlacementSource( m_notFoundPlacementSourceName ); + } + else + { + m_zonesettings.SetRuleAreaPlacementSource( + m_placementProperties->m_sourceObjectNameCb->GetString( + selectedSourceIdx ) ); + } + } + else + { + m_zonesettings.SetRuleAreaPlacementSource( wxEmptyString ); + } + } if( m_zonesettings.m_Layers.count() == 0 ) { diff --git a/pcbnew/dialogs/dialog_rule_area_properties_base.cpp b/pcbnew/dialogs/dialog_rule_area_properties_base.cpp index 11f4fc26ef..e0c6e87f2a 100644 --- a/pcbnew/dialogs/dialog_rule_area_properties_base.cpp +++ b/pcbnew/dialogs/dialog_rule_area_properties_base.cpp @@ -13,7 +13,6 @@ DIALOG_RULE_AREA_PROPERTIES_BASE::DIALOG_RULE_AREA_PROPERTIES_BASE( wxWindow* pa { this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); - wxBoxSizer* bMainSizer; bMainSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* bUpperSizer; @@ -62,103 +61,13 @@ DIALOG_RULE_AREA_PROPERTIES_BASE::DIALOG_RULE_AREA_PROPERTIES_BASE( wxWindow* pa bSizerRight->Add( bSizer6, 0, wxBOTTOM|wxEXPAND, 5 ); - wxFlexGridSizer* fgSizer2; - fgSizer2 = new wxFlexGridSizer( 0, 1, 3, 0 ); - fgSizer2->SetFlexibleDirection( wxBOTH ); - fgSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + m_staticText7 = new wxStaticText( this, wxID_ANY, _("Area properties:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText7->Wrap( -1 ); + bSizerRight->Add( m_staticText7, 0, wxALL, 5 ); - wxString m_rbRuleTypeChoices[] = { _("Keepout"), _("Placement") }; - int m_rbRuleTypeNChoices = sizeof( m_rbRuleTypeChoices ) / sizeof( wxString ); - m_rbRuleType = new wxRadioBox( this, wxID_ANY, _("Rule type"), wxDefaultPosition, wxDefaultSize, m_rbRuleTypeNChoices, m_rbRuleTypeChoices, 2, wxRA_SPECIFY_COLS ); - m_rbRuleType->SetSelection( 0 ); - fgSizer2->Add( m_rbRuleType, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + m_areaPropertiesNb = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_keepoutRuleSizer = new wxFlexGridSizer( 0, 1, 3, 0 ); - m_keepoutRuleSizer->SetFlexibleDirection( wxBOTH ); - m_keepoutRuleSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_cbTracksCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out tracks"), wxDefaultPosition, wxDefaultSize, 0 ); - m_cbTracksCtrl->SetToolTip( _("Prevent tracks from routing into this area") ); - - m_keepoutRuleSizer->Add( m_cbTracksCtrl, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - m_cbViasCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out vias"), wxDefaultPosition, wxDefaultSize, 0 ); - m_cbViasCtrl->SetToolTip( _("Prevent vias from being placed in this area") ); - - m_keepoutRuleSizer->Add( m_cbViasCtrl, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - m_cbPadsCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out pads"), wxDefaultPosition, wxDefaultSize, 0 ); - m_cbPadsCtrl->SetToolTip( _("Raise a DRC error if a pad overlaps this area") ); - - m_keepoutRuleSizer->Add( m_cbPadsCtrl, 0, wxRIGHT|wxLEFT, 5 ); - - m_cbCopperPourCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out zone fills"), wxDefaultPosition, wxDefaultSize, 0 ); - m_cbCopperPourCtrl->SetToolTip( _("Zones will not fill copper into this area") ); - - m_keepoutRuleSizer->Add( m_cbCopperPourCtrl, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); - - m_cbFootprintsCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out footprints"), wxDefaultPosition, wxDefaultSize, 0 ); - m_cbFootprintsCtrl->SetToolTip( _("Raise a DRC error if a footprint courtyard overlaps this area") ); - - m_keepoutRuleSizer->Add( m_cbFootprintsCtrl, 0, wxRIGHT|wxLEFT, 5 ); - - - fgSizer2->Add( m_keepoutRuleSizer, 1, wxEXPAND, 5 ); - - - bSizerRight->Add( fgSizer2, 0, wxEXPAND, 5 ); - - m_placementRuleSizer = new wxFlexGridSizer( 0, 1, 3, 0 ); - m_placementRuleSizer->AddGrowableCol( 0 ); - m_placementRuleSizer->SetFlexibleDirection( wxBOTH ); - m_placementRuleSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_staticText31 = new wxStaticText( this, wxID_ANY, _("Schematic Sheetname:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText31->Wrap( -1 ); - m_staticText31->SetToolTip( _("A unique name for this rule area for use in DRC rules") ); - - m_placementRuleSizer->Add( m_staticText31, 0, wxALL|wxEXPAND, 5 ); - - m_ruleText = new wxStyledTextCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, wxEmptyString ); - m_ruleText->SetUseTabs( true ); - m_ruleText->SetTabWidth( 4 ); - m_ruleText->SetIndent( 4 ); - m_ruleText->SetTabIndents( true ); - m_ruleText->SetBackSpaceUnIndents( true ); - m_ruleText->SetViewEOL( false ); - m_ruleText->SetViewWhiteSpace( false ); - m_ruleText->SetMarginWidth( 2, 0 ); - m_ruleText->SetIndentationGuides( true ); - m_ruleText->SetReadOnly( false ); - m_ruleText->SetMarginType( 1, wxSTC_MARGIN_SYMBOL ); - m_ruleText->SetMarginMask( 1, wxSTC_MASK_FOLDERS ); - m_ruleText->SetMarginWidth( 1, 16); - m_ruleText->SetMarginSensitive( 1, true ); - m_ruleText->SetProperty( wxT("fold"), wxT("1") ); - m_ruleText->SetFoldFlags( wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED | wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED ); - m_ruleText->SetMarginType( 0, wxSTC_MARGIN_NUMBER ); - m_ruleText->SetMarginWidth( 0, m_ruleText->TextWidth( wxSTC_STYLE_LINENUMBER, wxT("_99999") ) ); - m_ruleText->MarkerDefine( wxSTC_MARKNUM_FOLDER, wxSTC_MARK_BOXPLUS ); - m_ruleText->MarkerSetBackground( wxSTC_MARKNUM_FOLDER, wxColour( wxT("BLACK") ) ); - m_ruleText->MarkerSetForeground( wxSTC_MARKNUM_FOLDER, wxColour( wxT("WHITE") ) ); - m_ruleText->MarkerDefine( wxSTC_MARKNUM_FOLDEROPEN, wxSTC_MARK_BOXMINUS ); - m_ruleText->MarkerSetBackground( wxSTC_MARKNUM_FOLDEROPEN, wxColour( wxT("BLACK") ) ); - m_ruleText->MarkerSetForeground( wxSTC_MARKNUM_FOLDEROPEN, wxColour( wxT("WHITE") ) ); - m_ruleText->MarkerDefine( wxSTC_MARKNUM_FOLDERSUB, wxSTC_MARK_EMPTY ); - m_ruleText->MarkerDefine( wxSTC_MARKNUM_FOLDEREND, wxSTC_MARK_BOXPLUS ); - m_ruleText->MarkerSetBackground( wxSTC_MARKNUM_FOLDEREND, wxColour( wxT("BLACK") ) ); - m_ruleText->MarkerSetForeground( wxSTC_MARKNUM_FOLDEREND, wxColour( wxT("WHITE") ) ); - m_ruleText->MarkerDefine( wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_BOXMINUS ); - m_ruleText->MarkerSetBackground( wxSTC_MARKNUM_FOLDEROPENMID, wxColour( wxT("BLACK") ) ); - m_ruleText->MarkerSetForeground( wxSTC_MARKNUM_FOLDEROPENMID, wxColour( wxT("WHITE") ) ); - m_ruleText->MarkerDefine( wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_EMPTY ); - m_ruleText->MarkerDefine( wxSTC_MARKNUM_FOLDERTAIL, wxSTC_MARK_EMPTY ); - m_ruleText->SetSelBackground( true, wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHT ) ); - m_ruleText->SetSelForeground( true, wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) ); - m_placementRuleSizer->Add( m_ruleText, 0, wxALL|wxEXPAND, 5 ); - - - bSizerRight->Add( m_placementRuleSizer, 0, wxEXPAND, 5 ); + bSizerRight->Add( m_areaPropertiesNb, 1, wxEXPAND | wxALL, 5 ); wxGridBagSizer* gbSizer1; gbSizer1 = new wxGridBagSizer( 3, 3 ); @@ -193,6 +102,9 @@ DIALOG_RULE_AREA_PROPERTIES_BASE::DIALOG_RULE_AREA_PROPERTIES_BASE( wxWindow* pa bSizerRight->Add( gbSizer1, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizerRight->Add( 0, 0, 1, wxEXPAND, 5 ); + + bUpperSizer->Add( bSizerRight, 1, wxEXPAND|wxALL, 5 ); @@ -217,7 +129,6 @@ DIALOG_RULE_AREA_PROPERTIES_BASE::DIALOG_RULE_AREA_PROPERTIES_BASE( wxWindow* pa m_layers->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEventHandler( DIALOG_RULE_AREA_PROPERTIES_BASE::OnLayerSelection ), NULL, this ); m_layers->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( DIALOG_RULE_AREA_PROPERTIES_BASE::onLayerListRightDown ), NULL, this ); m_layers->Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_RULE_AREA_PROPERTIES_BASE::OnSizeLayersList ), NULL, this ); - m_rbRuleType->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES_BASE::OnRuleTypeSelect ), NULL, this ); } DIALOG_RULE_AREA_PROPERTIES_BASE::~DIALOG_RULE_AREA_PROPERTIES_BASE() @@ -226,6 +137,5 @@ DIALOG_RULE_AREA_PROPERTIES_BASE::~DIALOG_RULE_AREA_PROPERTIES_BASE() m_layers->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, wxDataViewEventHandler( DIALOG_RULE_AREA_PROPERTIES_BASE::OnLayerSelection ), NULL, this ); m_layers->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( DIALOG_RULE_AREA_PROPERTIES_BASE::onLayerListRightDown ), NULL, this ); m_layers->Disconnect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_RULE_AREA_PROPERTIES_BASE::OnSizeLayersList ), NULL, this ); - m_rbRuleType->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_RULE_AREA_PROPERTIES_BASE::OnRuleTypeSelect ), NULL, this ); } diff --git a/pcbnew/dialogs/dialog_rule_area_properties_base.fbp b/pcbnew/dialogs/dialog_rule_area_properties_base.fbp index c6f2249d62..059d6e78d3 100644 --- a/pcbnew/dialogs/dialog_rule_area_properties_base.fbp +++ b/pcbnew/dialogs/dialog_rule_area_properties_base.fbp @@ -63,7 +63,7 @@ <property name="minimum_size"></property> <property name="name">bMainSizer</property> <property name="orient">wxVERTICAL</property> - <property name="permission">none</property> + <property name="permission">private</property> <object class="sizeritem" expanded="true"> <property name="border">5</property> <property name="flag">wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property> @@ -411,579 +411,124 @@ </object> <object class="sizeritem" expanded="true"> <property name="border">5</property> - <property name="flag">wxEXPAND</property> + <property name="flag">wxALL</property> <property name="proportion">0</property> - <object class="wxFlexGridSizer" expanded="true"> - <property name="cols">1</property> - <property name="flexible_direction">wxBOTH</property> - <property name="growablecols"></property> - <property name="growablerows"></property> - <property name="hgap">0</property> + <object class="wxStaticText" 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">Area properties:</property> + <property name="markup">0</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="name">fgSizer2</property> - <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property> - <property name="permission">none</property> - <property name="rows">0</property> - <property name="vgap">3</property> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property> - <property name="proportion">0</property> - <object class="wxRadioBox" 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="choices">"Keepout" "Placement"</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">Rule type</property> - <property name="majorDimension">2</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_rbRuleType</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="selection">0</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style">wxRA_SPECIFY_COLS</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="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <event name="OnRadioBox">OnRuleTypeSelect</event> - </object> - </object> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxEXPAND</property> - <property name="proportion">1</property> - <object class="wxFlexGridSizer" expanded="true"> - <property name="cols">1</property> - <property name="flexible_direction">wxBOTH</property> - <property name="growablecols"></property> - <property name="growablerows"></property> - <property name="hgap">0</property> - <property name="minimum_size"></property> - <property name="name">m_keepoutRuleSizer</property> - <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property> - <property name="permission">protected</property> - <property name="rows">0</property> - <property name="vgap">3</property> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxCheckBox" 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="checked">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">Keep out tracks</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_cbTracksCtrl</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</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"></property> - <property name="toolbar_pane">0</property> - <property name="tooltip">Prevent tracks from routing into this area</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="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">wxEXPAND|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxCheckBox" 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="checked">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">Keep out vias</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_cbViasCtrl</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</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"></property> - <property name="toolbar_pane">0</property> - <property name="tooltip">Prevent vias from being placed in this area</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="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">wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxCheckBox" 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="checked">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">Keep out pads</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_cbPadsCtrl</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</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">Raise a DRC error if a pad overlaps this area</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="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">wxEXPAND|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxCheckBox" 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="checked">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">Keep out zone fills</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_cbCopperPourCtrl</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</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"></property> - <property name="toolbar_pane">0</property> - <property name="tooltip">Zones will not fill copper into this area</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="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">wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxCheckBox" 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="checked">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">Keep out footprints</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_cbFootprintsCtrl</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</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">Raise a DRC error if a footprint courtyard overlaps this area</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="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - </object> - </object> - </object> - </object> + <property name="moveable">1</property> + <property name="name">m_staticText7</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</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="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + <property name="wrap">-1</property> </object> </object> <object class="sizeritem" expanded="true"> <property name="border">5</property> - <property name="flag">wxEXPAND</property> - <property name="proportion">0</property> - <object class="wxFlexGridSizer" expanded="true"> - <property name="cols">1</property> - <property name="flexible_direction">wxBOTH</property> - <property name="growablecols">0</property> - <property name="growablerows"></property> - <property name="hgap">0</property> + <property name="flag">wxEXPAND | wxALL</property> + <property name="proportion">1</property> + <object class="wxNotebook" 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="bitmapsize"></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="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="name">m_placementRuleSizer</property> - <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property> + <property name="moveable">1</property> + <property name="name">m_areaPropertiesNb</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> <property name="permission">protected</property> - <property name="rows">0</property> - <property name="vgap">3</property> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxALL|wxEXPAND</property> - <property name="proportion">0</property> - <object class="wxStaticText" 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">Schematic Sheetname:</property> - <property name="markup">0</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_staticText31</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</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">A unique name for this rule area for use in DRC rules</property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <property name="wrap">-1</property> - </object> - </object> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxALL|wxEXPAND</property> - <property name="proportion">0</property> - <object class="wxStyledTextCtrl" 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="backspace_unindents">1</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="folding">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="indentation_guides">1</property> - <property name="line_numbers">1</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_ruleText</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="read_only">0</property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="subclass">; ; forward_declare</property> - <property name="tab_indents">1</property> - <property name="tab_width">4</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="use_tabs">1</property> - <property name="view_eol">0</property> - <property name="view_whitespace">0</property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - </object> - </object> + <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="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> </object> </object> <object class="sizeritem" expanded="true"> @@ -1334,6 +879,16 @@ </object> </object> </object> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="spacer" expanded="true"> + <property name="height">0</property> + <property name="permission">protected</property> + <property name="width">0</property> + </object> + </object> </object> </object> </object> diff --git a/pcbnew/dialogs/dialog_rule_area_properties_base.h b/pcbnew/dialogs/dialog_rule_area_properties_base.h index c61c301483..6bbe5d2300 100644 --- a/pcbnew/dialogs/dialog_rule_area_properties_base.h +++ b/pcbnew/dialogs/dialog_rule_area_properties_base.h @@ -21,8 +21,7 @@ #include <wx/sizer.h> #include <wx/textctrl.h> #include <wx/checkbox.h> -#include <wx/radiobox.h> -#include <wx/stc/stc.h> +#include <wx/notebook.h> #include <wx/choice.h> #include <wx/gbsizer.h> #include <wx/button.h> @@ -36,6 +35,7 @@ class DIALOG_RULE_AREA_PROPERTIES_BASE : public DIALOG_SHIM { private: + wxBoxSizer* bMainSizer; protected: wxStaticText* m_staticTextLayerSelection; @@ -43,16 +43,8 @@ class DIALOG_RULE_AREA_PROPERTIES_BASE : public DIALOG_SHIM wxStaticText* m_staticText3; wxTextCtrl* m_tcName; wxCheckBox* m_cbLocked; - wxRadioBox* m_rbRuleType; - wxFlexGridSizer* m_keepoutRuleSizer; - wxCheckBox* m_cbTracksCtrl; - wxCheckBox* m_cbViasCtrl; - wxCheckBox* m_cbPadsCtrl; - wxCheckBox* m_cbCopperPourCtrl; - wxCheckBox* m_cbFootprintsCtrl; - wxFlexGridSizer* m_placementRuleSizer; - wxStaticText* m_staticText31; - wxStyledTextCtrl* m_ruleText; + wxStaticText* m_staticText7; + wxNotebook* m_areaPropertiesNb; wxStaticText* m_staticTextStyle; wxChoice* m_OutlineDisplayCtrl; wxStaticText* m_stBorderHatchPitchText; @@ -66,7 +58,6 @@ class DIALOG_RULE_AREA_PROPERTIES_BASE : public DIALOG_SHIM virtual void OnLayerSelection( wxDataViewEvent& event ) { event.Skip(); } virtual void onLayerListRightDown( wxMouseEvent& event ) { event.Skip(); } virtual void OnSizeLayersList( wxSizeEvent& event ) { event.Skip(); } - virtual void OnRuleTypeSelect( wxCommandEvent& event ) { event.Skip(); } public: diff --git a/pcbnew/dialogs/panel_rule_area_properties_keepout_base.cpp b/pcbnew/dialogs/panel_rule_area_properties_keepout_base.cpp new file mode 100644 index 0000000000..6d2c40fbfe --- /dev/null +++ b/pcbnew/dialogs/panel_rule_area_properties_keepout_base.cpp @@ -0,0 +1,51 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "panel_rule_area_properties_keepout_base.h" + +/////////////////////////////////////////////////////////////////////////// + +PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE::PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) +{ + m_keepoutRuleSizer = new wxFlexGridSizer( 0, 1, 3, 0 ); + m_keepoutRuleSizer->SetFlexibleDirection( wxBOTH ); + m_keepoutRuleSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_cbTracksCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out tracks"), wxDefaultPosition, wxDefaultSize, 0 ); + m_cbTracksCtrl->SetToolTip( _("Prevent tracks from routing into this area") ); + + m_keepoutRuleSizer->Add( m_cbTracksCtrl, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + m_cbViasCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out vias"), wxDefaultPosition, wxDefaultSize, 0 ); + m_cbViasCtrl->SetToolTip( _("Prevent vias from being placed in this area") ); + + m_keepoutRuleSizer->Add( m_cbViasCtrl, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + m_cbPadsCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out pads"), wxDefaultPosition, wxDefaultSize, 0 ); + m_cbPadsCtrl->SetToolTip( _("Raise a DRC error if a pad overlaps this area") ); + + m_keepoutRuleSizer->Add( m_cbPadsCtrl, 0, wxRIGHT|wxLEFT, 5 ); + + m_cbCopperPourCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out zone fills"), wxDefaultPosition, wxDefaultSize, 0 ); + m_cbCopperPourCtrl->SetToolTip( _("Zones will not fill copper into this area") ); + + m_keepoutRuleSizer->Add( m_cbCopperPourCtrl, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 ); + + m_cbFootprintsCtrl = new wxCheckBox( this, wxID_ANY, _("Keep out footprints"), wxDefaultPosition, wxDefaultSize, 0 ); + m_cbFootprintsCtrl->SetToolTip( _("Raise a DRC error if a footprint courtyard overlaps this area") ); + + m_keepoutRuleSizer->Add( m_cbFootprintsCtrl, 0, wxRIGHT|wxLEFT, 5 ); + + + this->SetSizer( m_keepoutRuleSizer ); + this->Layout(); + m_keepoutRuleSizer->Fit( this ); +} + +PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE::~PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE() +{ +} diff --git a/pcbnew/dialogs/panel_rule_area_properties_keepout_base.fbp b/pcbnew/dialogs/panel_rule_area_properties_keepout_base.fbp new file mode 100644 index 0000000000..37f03314cd --- /dev/null +++ b/pcbnew/dialogs/panel_rule_area_properties_keepout_base.fbp @@ -0,0 +1,398 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<wxFormBuilder_Project> + <FileVersion major="1" minor="18"/> + <object class="Project" expanded="true"> + <property name="code_generation">C++</property> + <property name="cpp_class_decoration">; </property> + <property name="cpp_disconnect_events">0</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">1</property> + <property name="embedded_files_path">res</property> + <property name="encoding">UTF-8</property> + <property name="file">panel_rule_area_properties_keepout_base</property> + <property name="first_id">6000</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_KEEPOUT_BASE</property> + <property name="path">.</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">1</property> + <property name="python_skip_events">1</property> + <property name="relative_path">1</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> + <property name="bg"></property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="event_handler">impl_virtual</property> + <property name="fg"></property> + <property name="font"></property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="maximum_size"></property> + <property name="minimum_size"></property> + <property name="name">PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE</property> + <property name="pos"></property> + <property name="size">-1,-1</property> + <property name="subclass">; ; forward_declare</property> + <property name="tooltip"></property> + <property name="two_step_creation">0</property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style">wxTAB_TRAVERSAL</property> + <object class="wxFlexGridSizer" expanded="true"> + <property name="cols">1</property> + <property name="flexible_direction">wxBOTH</property> + <property name="growablecols"></property> + <property name="growablerows"></property> + <property name="hgap">0</property> + <property name="minimum_size"></property> + <property name="name">m_keepoutRuleSizer</property> + <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property> + <property name="permission">protected</property> + <property name="rows">0</property> + <property name="vgap">3</property> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property> + <property name="proportion">0</property> + <object class="wxCheckBox" 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="checked">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">Keep out tracks</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_cbTracksCtrl</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"></property> + <property name="toolbar_pane">0</property> + <property name="tooltip">Prevent tracks from routing into this area</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="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">wxEXPAND|wxRIGHT|wxLEFT</property> + <property name="proportion">0</property> + <object class="wxCheckBox" 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="checked">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">Keep out vias</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_cbViasCtrl</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"></property> + <property name="toolbar_pane">0</property> + <property name="tooltip">Prevent vias from being placed in this area</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="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">wxRIGHT|wxLEFT</property> + <property name="proportion">0</property> + <object class="wxCheckBox" 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="checked">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">Keep out pads</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_cbPadsCtrl</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">Raise a DRC error if a pad overlaps this area</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="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">wxEXPAND|wxRIGHT|wxLEFT</property> + <property name="proportion">0</property> + <object class="wxCheckBox" 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="checked">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">Keep out zone fills</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_cbCopperPourCtrl</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"></property> + <property name="toolbar_pane">0</property> + <property name="tooltip">Zones will not fill copper into this area</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="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">wxRIGHT|wxLEFT</property> + <property name="proportion">0</property> + <object class="wxCheckBox" 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="checked">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">Keep out footprints</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_cbFootprintsCtrl</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">Raise a DRC error if a footprint courtyard overlaps this area</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="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + </object> + </object> + </object> +</wxFormBuilder_Project> diff --git a/pcbnew/dialogs/panel_rule_area_properties_keepout_base.h b/pcbnew/dialogs/panel_rule_area_properties_keepout_base.h new file mode 100644 index 0000000000..366f2104df --- /dev/null +++ b/pcbnew/dialogs/panel_rule_area_properties_keepout_base.h @@ -0,0 +1,46 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include <wx/artprov.h> +#include <wx/xrc/xmlres.h> +#include <wx/intl.h> +#include <wx/string.h> +#include <wx/checkbox.h> +#include <wx/gdicmn.h> +#include <wx/font.h> +#include <wx/colour.h> +#include <wx/settings.h> +#include <wx/sizer.h> +#include <wx/panel.h> + +/////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +/// Class PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE +/////////////////////////////////////////////////////////////////////////////// +class PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE : public wxPanel +{ + private: + + protected: + wxFlexGridSizer* m_keepoutRuleSizer; + + public: + wxCheckBox* m_cbTracksCtrl; + wxCheckBox* m_cbViasCtrl; + wxCheckBox* m_cbPadsCtrl; + wxCheckBox* m_cbCopperPourCtrl; + wxCheckBox* m_cbFootprintsCtrl; + + PANEL_RULE_AREA_PROPERTIES_KEEPOUT_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 ); + + ~PANEL_RULE_AREA_PROPERTIES_KEEPOUT_BASE(); + +}; + diff --git a/pcbnew/dialogs/panel_rule_area_properties_placement_base.cpp b/pcbnew/dialogs/panel_rule_area_properties_placement_base.cpp new file mode 100644 index 0000000000..2dcac82abe --- /dev/null +++ b/pcbnew/dialogs/panel_rule_area_properties_placement_base.cpp @@ -0,0 +1,53 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "panel_rule_area_properties_placement_base.h" + +/////////////////////////////////////////////////////////////////////////// + +PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE::PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) +{ + wxBoxSizer* bSizer2; + bSizer2 = new wxBoxSizer( wxVERTICAL ); + + m_enabled = new wxCheckBox( this, wxID_ANY, _("Enabled"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer2->Add( m_enabled, 0, wxALL, 5 ); + + wxStaticBoxSizer* sbSizer2; + sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Placement Source") ), wxVERTICAL ); + + wxGridBagSizer* gbSizer2; + gbSizer2 = new wxGridBagSizer( 0, 0 ); + gbSizer2->SetFlexibleDirection( wxBOTH ); + gbSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_sourceSheetnameRb = new wxRadioButton( sbSizer2->GetStaticBox(), wxID_ANY, _("Sheet"), wxDefaultPosition, wxDefaultSize, 0 ); + gbSizer2->Add( m_sourceSheetnameRb, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 ); + + m_sourceComponentClassRb = new wxRadioButton( sbSizer2->GetStaticBox(), wxID_ANY, _("Component Class"), wxDefaultPosition, wxDefaultSize, 0 ); + gbSizer2->Add( m_sourceComponentClassRb, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 ); + + m_sourceObjectNameCb = new wxComboBox( sbSizer2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY ); + gbSizer2->Add( m_sourceObjectNameCb, wxGBPosition( 1, 0 ), wxGBSpan( 1, 3 ), wxALL|wxEXPAND, 5 ); + + + gbSizer2->AddGrowableCol( 2 ); + + sbSizer2->Add( gbSizer2, 1, wxEXPAND, 5 ); + + + bSizer2->Add( sbSizer2, 1, wxEXPAND, 5 ); + + + this->SetSizer( bSizer2 ); + this->Layout(); + bSizer2->Fit( this ); +} + +PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE::~PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE() +{ +} diff --git a/pcbnew/dialogs/panel_rule_area_properties_placement_base.fbp b/pcbnew/dialogs/panel_rule_area_properties_placement_base.fbp new file mode 100644 index 0000000000..3cdb485a6f --- /dev/null +++ b/pcbnew/dialogs/panel_rule_area_properties_placement_base.fbp @@ -0,0 +1,367 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<wxFormBuilder_Project> + <FileVersion major="1" minor="18"/> + <object class="Project" expanded="true"> + <property name="code_generation">C++</property> + <property name="cpp_class_decoration">; </property> + <property name="cpp_disconnect_events">0</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">1</property> + <property name="embedded_files_path">res</property> + <property name="encoding">UTF-8</property> + <property name="file">panel_rule_area_properties_placement_base</property> + <property name="first_id">6000</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="path">.</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">1</property> + <property name="python_skip_events">1</property> + <property name="relative_path">1</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> + <property name="bg"></property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="event_handler">impl_virtual</property> + <property name="fg"></property> + <property name="font"></property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="maximum_size"></property> + <property name="minimum_size"></property> + <property name="name">PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE</property> + <property name="pos"></property> + <property name="size">-1,-1</property> + <property name="subclass">; ; forward_declare</property> + <property name="tooltip"></property> + <property name="two_step_creation">0</property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style">wxTAB_TRAVERSAL</property> + <object class="wxBoxSizer" expanded="true"> + <property name="minimum_size"></property> + <property name="name">bSizer2</property> + <property name="orient">wxVERTICAL</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxALL</property> + <property name="proportion">0</property> + <object class="wxCheckBox" 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="checked">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">Enabled</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_enabled</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="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">wxEXPAND</property> + <property name="proportion">1</property> + <object class="wxStaticBoxSizer" expanded="true"> + <property name="id">wxID_ANY</property> + <property name="label">Placement Source</property> + <property name="minimum_size"></property> + <property name="name">sbSizer2</property> + <property name="orient">wxVERTICAL</property> + <property name="parent">1</property> + <property name="permission">none</property> + <object class="sizeritem" expanded="true"> + <property name="border">5</property> + <property name="flag">wxEXPAND</property> + <property name="proportion">1</property> + <object class="wxGridBagSizer" expanded="true"> + <property name="empty_cell_size"></property> + <property name="flexible_direction">wxBOTH</property> + <property name="growablecols">2</property> + <property name="growablerows"></property> + <property name="hgap">0</property> + <property name="minimum_size"></property> + <property name="name">gbSizer2</property> + <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property> + <property name="permission">none</property> + <property name="vgap">0</property> + <object class="gbsizeritem" expanded="true"> + <property name="border">5</property> + <property name="colspan">1</property> + <property name="column">0</property> + <property name="flag">wxALL</property> + <property name="row">0</property> + <property name="rowspan">1</property> + <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">Sheet</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_sourceSheetnameRb</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">0</property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + <object class="gbsizeritem" expanded="true"> + <property name="border">5</property> + <property name="colspan">1</property> + <property name="column">1</property> + <property name="flag">wxALL</property> + <property name="row">0</property> + <property name="rowspan">1</property> + <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">Component Class</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_sourceComponentClassRb</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">0</property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + <object class="gbsizeritem" expanded="true"> + <property name="border">5</property> + <property name="colspan">3</property> + <property name="column">0</property> + <property name="flag">wxALL|wxEXPAND</property> + <property name="row">1</property> + <property name="rowspan">1</property> + <object class="wxComboBox" 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="choices"></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="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_sourceObjectNameCb</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="selection">-1</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style">wxCB_READONLY</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"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </object> +</wxFormBuilder_Project> diff --git a/pcbnew/dialogs/panel_rule_area_properties_placement_base.h b/pcbnew/dialogs/panel_rule_area_properties_placement_base.h new file mode 100644 index 0000000000..122d14ff9d --- /dev/null +++ b/pcbnew/dialogs/panel_rule_area_properties_placement_base.h @@ -0,0 +1,48 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include <wx/artprov.h> +#include <wx/xrc/xmlres.h> +#include <wx/intl.h> +#include <wx/string.h> +#include <wx/checkbox.h> +#include <wx/gdicmn.h> +#include <wx/font.h> +#include <wx/colour.h> +#include <wx/settings.h> +#include <wx/radiobut.h> +#include <wx/combobox.h> +#include <wx/gbsizer.h> +#include <wx/sizer.h> +#include <wx/statbox.h> +#include <wx/panel.h> + +/////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +/// Class PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE +/////////////////////////////////////////////////////////////////////////////// +class PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE : public wxPanel +{ + private: + + protected: + + public: + wxCheckBox* m_enabled; + wxRadioButton* m_sourceSheetnameRb; + wxRadioButton* m_sourceComponentClassRb; + wxComboBox* m_sourceObjectNameCb; + + 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 ); + + ~PANEL_RULE_AREA_PROPERTIES_PLACEMENT_BASE(); + +}; + diff --git a/pcbnew/drc/drc_engine.cpp b/pcbnew/drc/drc_engine.cpp index a9652a5564..1f5252d7d3 100644 --- a/pcbnew/drc/drc_engine.cpp +++ b/pcbnew/drc/drc_engine.cpp @@ -106,7 +106,7 @@ static bool isKeepoutZone( const BOARD_ITEM* aItem, bool aCheckFlags ) if( !zone->GetIsRuleArea() ) return false; - if( zone->GetRuleAreaType() != RULE_AREA_TYPE::KEEPOUT ) + if( !zone->HasKeepoutParametersSet() ) return false; if( aCheckFlags ) diff --git a/pcbnew/drc/drc_interactive_courtyard_clearance.cpp b/pcbnew/drc/drc_interactive_courtyard_clearance.cpp index 0feb31fdad..f96e3c393e 100644 --- a/pcbnew/drc/drc_interactive_courtyard_clearance.cpp +++ b/pcbnew/drc/drc_interactive_courtyard_clearance.cpp @@ -171,8 +171,11 @@ void DRC_INTERACTIVE_COURTYARD_CLEARANCE::testCourtyardClearances() for( ZONE* zone : m_board->Zones() ) { - if( !zone->GetIsRuleArea() || zone->GetRuleAreaType() != RULE_AREA_TYPE::KEEPOUT || !zone->GetDoNotAllowFootprints() ) + if( !zone->GetIsRuleArea() || !zone->HasKeepoutParametersSet() + || !zone->GetDoNotAllowFootprints() ) + { continue; + } bool disallowFront = ( zone->GetLayerSet() & LSET::FrontMask() ).any(); bool disallowBack = ( zone->GetLayerSet() & LSET::BackMask() ).any(); diff --git a/pcbnew/drc/drc_test_provider_disallow.cpp b/pcbnew/drc/drc_test_provider_disallow.cpp index f96311f570..e21b881f7a 100644 --- a/pcbnew/drc/drc_test_provider_disallow.cpp +++ b/pcbnew/drc/drc_test_provider_disallow.cpp @@ -90,12 +90,15 @@ bool DRC_TEST_PROVIDER_DISALLOW::Run() { ZONE* zone = dynamic_cast<ZONE*>( item ); - if( zone && zone->GetIsRuleArea() - && zone->GetRuleAreaType() == RULE_AREA_TYPE::KEEPOUT + if( zone && zone->GetIsRuleArea() && zone->HasKeepoutParametersSet() && zone->GetDoNotAllowCopperPour() ) + { antiCopperKeepouts.push_back( zone ); + } else if( zone && zone->IsOnCopperLayer() ) + { copperZones.push_back( zone ); + } totalCount++; @@ -262,7 +265,7 @@ bool DRC_TEST_PROVIDER_DISALLOW::Run() { ZONE* zone = dynamic_cast<ZONE*>( item ); - if( zone && zone->GetIsRuleArea() && zone->GetRuleAreaType() == RULE_AREA_TYPE::KEEPOUT ) + if( zone && zone->GetIsRuleArea() && zone->HasKeepoutParametersSet() ) return true; item->ClearFlags( HOLE_PROXY ); // Just in case diff --git a/pcbnew/edit_zone_helpers.cpp b/pcbnew/edit_zone_helpers.cpp index c8d703595c..a13afbee09 100644 --- a/pcbnew/edit_zone_helpers.cpp +++ b/pcbnew/edit_zone_helpers.cpp @@ -48,7 +48,7 @@ void PCB_EDIT_FRAME::Edit_Zone_Params( ZONE* aZone ) { // edit a rule area on a copper layer zoneInfo << *aZone; - dialogResult = InvokeRuleAreaEditor( this, &zoneInfo ); + dialogResult = InvokeRuleAreaEditor( this, &zoneInfo, GetBoard() ); } else if( IsCopperLayer( aZone->GetFirstLayer() ) ) { diff --git a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp index c2840d303e..b9879d36fd 100644 --- a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp +++ b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp @@ -2590,12 +2590,6 @@ void PCB_IO_KICAD_SEXPR::format( const PCB_TRACK* aTrack, int aNestLevel ) const void PCB_IO_KICAD_SEXPR::format( const ZONE* aZone, int aNestLevel ) const { - // temporary safeguard for the multichannel tool (and placement area/room support). When the tool is off - // (default), KiCad will not write any placement info in the RAs (and won't break file format compatibility) - - if( ! ADVANCED_CFG::GetCfg().m_EnableMultichannelTool && aZone->GetIsRuleArea() && aZone->GetRuleAreaType() == RULE_AREA_TYPE::PLACEMENT ) - return; - // Save the NET info. // For keepout and non copper zones, net code and net name are irrelevant // so be sure a dummy value is stored, just for ZONE compatibility @@ -2703,21 +2697,18 @@ void PCB_IO_KICAD_SEXPR::format( const ZONE* aZone, int aNestLevel ) const if( aZone->GetIsRuleArea() ) { - switch( aZone->GetRuleAreaType() ) - { - case RULE_AREA_TYPE::KEEPOUT: - { - m_out->Print( aNestLevel + 1, - "(keepout (tracks %s) (vias %s) (pads %s) (copperpour %s) " - "(footprints %s))\n", - aZone->GetDoNotAllowTracks() ? "not_allowed" : "allowed", - aZone->GetDoNotAllowVias() ? "not_allowed" : "allowed", - aZone->GetDoNotAllowPads() ? "not_allowed" : "allowed", - aZone->GetDoNotAllowCopperPour() ? "not_allowed" : "allowed", - aZone->GetDoNotAllowFootprints() ? "not_allowed" : "allowed" ); - break; - } - case RULE_AREA_TYPE::PLACEMENT: + // Keepout settings + m_out->Print( aNestLevel + 1, + "(keepout (tracks %s) (vias %s) (pads %s) (copperpour %s) " + "(footprints %s))\n", + aZone->GetDoNotAllowTracks() ? "not_allowed" : "allowed", + aZone->GetDoNotAllowVias() ? "not_allowed" : "allowed", + aZone->GetDoNotAllowPads() ? "not_allowed" : "allowed", + aZone->GetDoNotAllowCopperPour() ? "not_allowed" : "allowed", + aZone->GetDoNotAllowFootprints() ? "not_allowed" : "allowed" ); + + // Multichannel settings + if( ADVANCED_CFG::GetCfg().m_EnableMultichannelTool ) { m_out->Print( aNestLevel + 1, "(placement" ); m_out->Print( aNestLevel + 2, "(enabled " ); @@ -2740,10 +2731,6 @@ void PCB_IO_KICAD_SEXPR::format( const ZONE* aZone, int aNestLevel ) const } m_out->Print( aNestLevel + 1, ")" ); - break; - } - default: - break; } } diff --git a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp index 7197dfea27..9da8069501 100644 --- a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp +++ b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp @@ -6857,7 +6857,6 @@ ZONE* PCB_IO_KICAD_SEXPR_PARSER::parseZONE( BOARD_ITEM_CONTAINER* aParent ) case T_placement: zone->SetIsRuleArea( true ); - zone->SetRuleAreaType( RULE_AREA_TYPE::PLACEMENT ); for( token = NextTok(); token != T_RIGHT; token = NextTok() ) { @@ -6910,7 +6909,6 @@ ZONE* PCB_IO_KICAD_SEXPR_PARSER::parseZONE( BOARD_ITEM_CONTAINER* aParent ) case T_keepout: // "keepout" now means rule area, but the file token stays the same zone->SetIsRuleArea( true ); - zone->SetRuleAreaType( RULE_AREA_TYPE::KEEPOUT ); // Initialize these two because their tokens won't appear in older files: zone->SetDoNotAllowPads( false ); diff --git a/pcbnew/router/pns_kicad_iface.cpp b/pcbnew/router/pns_kicad_iface.cpp index 036b93b67d..6b3422626c 100644 --- a/pcbnew/router/pns_kicad_iface.cpp +++ b/pcbnew/router/pns_kicad_iface.cpp @@ -258,7 +258,7 @@ bool PNS_PCBNEW_RULE_RESOLVER::IsKeepout( const PNS::ITEM* aObstacle, const PNS: { const ZONE* zone = static_cast<ZONE*>( aObstacle->Parent() ); - if( zone->GetIsRuleArea() && zone->GetRuleAreaType() == RULE_AREA_TYPE::KEEPOUT ) + if( zone->GetIsRuleArea() && zone->HasKeepoutParametersSet() ) { *aEnforce = checkKeepout( zone, getBoardItem( aItem, m_routerIface->GetBoardLayerFromPNSLayer( @@ -1321,7 +1321,7 @@ bool PNS_KICAD_IFACE_BASE::syncZone( PNS::NODE* aWorld, ZONE* aZone, SHAPE_POLY_ static wxString msg; SHAPE_POLY_SET* poly; - if( !aZone->GetIsRuleArea() || aZone->GetRuleAreaType() != RULE_AREA_TYPE::KEEPOUT ) + if( !aZone->GetIsRuleArea() || !aZone->HasKeepoutParametersSet() ) return false; LSET layers = aZone->GetLayerSet(); diff --git a/pcbnew/router/pns_router.cpp b/pcbnew/router/pns_router.cpp index 475edb879a..78a57b717a 100644 --- a/pcbnew/router/pns_router.cpp +++ b/pcbnew/router/pns_router.cpp @@ -251,7 +251,7 @@ bool ROUTER::isStartingPointRoutable( const VECTOR2I& aWhere, ITEM* aStartItem, { ZONE* zone = static_cast<ZONE*>( parent ); - if( zone->GetRuleAreaType() != RULE_AREA_TYPE::KEEPOUT ) + if( !zone->HasKeepoutParametersSet() ) break; if( !zone->GetZoneName().IsEmpty() ) diff --git a/pcbnew/tools/board_editor_control.cpp b/pcbnew/tools/board_editor_control.cpp index bf491df2f4..747680643a 100644 --- a/pcbnew/tools/board_editor_control.cpp +++ b/pcbnew/tools/board_editor_control.cpp @@ -1460,7 +1460,7 @@ int BOARD_EDITOR_CONTROL::ZoneDuplicate( const TOOL_EVENT& aEvent ) int dialogResult; if( oldZone->GetIsRuleArea() ) - dialogResult = InvokeRuleAreaEditor( m_frame, &zoneSettings ); + dialogResult = InvokeRuleAreaEditor( m_frame, &zoneSettings, board() ); else if( oldZone->IsOnCopperLayer() ) dialogResult = InvokeCopperZonesEditor( m_frame, &zoneSettings ); else diff --git a/pcbnew/tools/convert_tool.cpp b/pcbnew/tools/convert_tool.cpp index 7636c10162..9d1a67d143 100644 --- a/pcbnew/tools/convert_tool.cpp +++ b/pcbnew/tools/convert_tool.cpp @@ -522,7 +522,7 @@ int CONVERT_TOOL::CreatePolys( const TOOL_EVENT& aEvent ) if( aEvent.IsAction( &PCB_ACTIONS::convertToKeepout ) ) { zoneInfo.SetIsRuleArea( true ); - ret = InvokeRuleAreaEditor( frame, &zoneInfo, &m_userSettings ); + ret = InvokeRuleAreaEditor( frame, &zoneInfo, board(), &m_userSettings ); } else if( nonCopper ) { diff --git a/pcbnew/tools/multichannel_tool.cpp b/pcbnew/tools/multichannel_tool.cpp index 35410ccac2..556172806f 100644 --- a/pcbnew/tools/multichannel_tool.cpp +++ b/pcbnew/tools/multichannel_tool.cpp @@ -97,8 +97,10 @@ bool MULTICHANNEL_TOOL::identifyComponentsInRuleArea( ZONE* aRul wxT( "A.memberOfSheet('" ) + aRuleArea->GetRuleAreaPlacementSource() + wxT( "')" ); break; } - default: - wxFAIL_MSG( "RULE_AREA_PLACEMENT_SOURCE_TYPE not yet implemented" ); + case RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS: + ruleText = wxT( "A.hasComponentClass('" ) + aRuleArea->GetRuleAreaPlacementSource() + + wxT( "')" ); + break; } auto ok = compiler.Compile( ruleText, &ucode, &preflightCtx ); @@ -226,7 +228,7 @@ void MULTICHANNEL_TOOL::FindExistingRuleAreas() { if( !zone->GetIsRuleArea() ) continue; - if( zone->GetRuleAreaType() != RULE_AREA_TYPE::PLACEMENT ) + if( !zone->GetRuleAreaPlacementEnabled() ) continue; RULE_AREA area; @@ -270,7 +272,7 @@ int MULTICHANNEL_TOOL::repeatLayout( const TOOL_EVENT& aEvent ) ZONE* zone = static_cast<ZONE*>( aItem ); if( !zone->GetIsRuleArea() ) return nullptr; - if( zone->GetRuleAreaType() != RULE_AREA_TYPE::PLACEMENT ) + if( !zone->GetRuleAreaPlacementEnabled() ) return nullptr; return zone; }; @@ -714,7 +716,7 @@ int MULTICHANNEL_TOOL::AutogenerateRuleAreas( const TOOL_EVENT& aEvent ) { if( !zone->GetIsRuleArea() ) continue; - if( zone->GetRuleAreaType() != RULE_AREA_TYPE::PLACEMENT ) + if( !zone->GetRuleAreaPlacementEnabled() ) continue; std::set<FOOTPRINT*> components; @@ -762,7 +764,12 @@ int MULTICHANNEL_TOOL::AutogenerateRuleAreas( const TOOL_EVENT& aEvent ) newZone->SetIsRuleArea( true ); newZone->SetLayerSet( LSET::AllCuMask() ); - newZone->SetRuleAreaType( RULE_AREA_TYPE::PLACEMENT ); + newZone->SetRuleAreaPlacementEnabled( true ); + newZone->SetDoNotAllowCopperPour( false ); + newZone->SetDoNotAllowVias( false ); + newZone->SetDoNotAllowTracks( false ); + newZone->SetDoNotAllowPads( false ); + newZone->SetDoNotAllowFootprints( false ); newZone->SetRuleAreaPlacementSourceType( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ); newZone->SetRuleAreaPlacementSource( ra.m_sheetPath ); newZone->AddPolygon( raOutline ); diff --git a/pcbnew/tools/zone_create_helper.cpp b/pcbnew/tools/zone_create_helper.cpp index c0dfb9798a..7f08e11314 100644 --- a/pcbnew/tools/zone_create_helper.cpp +++ b/pcbnew/tools/zone_create_helper.cpp @@ -122,7 +122,7 @@ std::unique_ptr<ZONE> ZONE_CREATE_HELPER::createNewZone( bool aKeepout ) int dialogResult; if( m_params.m_keepout ) - dialogResult = InvokeRuleAreaEditor( frame, &zoneInfo ); + dialogResult = InvokeRuleAreaEditor( frame, &zoneInfo, m_tool.board() ); else if( ( zoneInfo.m_Layers & LSET::AllCuMask() ).any() ) dialogResult = InvokeCopperZonesEditor( frame, &zoneInfo ); else diff --git a/pcbnew/zone.cpp b/pcbnew/zone.cpp index 45f15e3083..526e27d1cf 100644 --- a/pcbnew/zone.cpp +++ b/pcbnew/zone.cpp @@ -23,6 +23,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#include <advanced_config.h> #include <bitmaps.h> #include <geometry/geometry_utils.h> #include <geometry/shape_null.h> @@ -51,6 +52,7 @@ ZONE::ZONE( BOARD_ITEM_CONTAINER* aParent ) : m_priority( 0 ), m_isRuleArea( false ), m_ruleAreaPlacementEnabled( false ), + m_ruleAreaPlacementSourceType( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ), m_teardropType( TEARDROP_TYPE::TD_NONE ), m_PadConnection( ZONE_CONNECTION::NONE ), m_ZoneClearance( 0 ), @@ -132,7 +134,7 @@ void ZONE::InitDataFromSrcInCopyCtor( const ZONE& aZone ) m_zoneName = aZone.m_zoneName; m_priority = aZone.m_priority; m_isRuleArea = aZone.m_isRuleArea; - m_ruleAreaType = aZone.m_ruleAreaType; + m_ruleAreaPlacementEnabled = aZone.m_ruleAreaPlacementEnabled; m_ruleAreaPlacementSourceType = aZone.m_ruleAreaPlacementSourceType; m_ruleAreaPlacementSource = aZone.m_ruleAreaPlacementSource; SetLayerSet( aZone.GetLayerSet() ); @@ -583,7 +585,6 @@ void ZONE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& { msg.Empty(); -// fixme placement if( GetDoNotAllowVias() ) AccumulateDescription( msg, _( "No vias" ) ); @@ -601,6 +602,12 @@ void ZONE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& if( !msg.IsEmpty() ) aList.emplace_back( _( "Restrictions" ), msg ); + + if( GetRuleAreaPlacementEnabled() ) + { + aList.emplace_back( _( "Placement source" ), + UnescapeString( GetRuleAreaPlacementSource() ) ); + } } else if( IsOnCopperLayer() ) { @@ -1447,30 +1454,29 @@ bool ZONE::operator==( const ZONE& aOther ) const if( GetIsRuleArea() ) { - if( GetRuleAreaType() != other.GetRuleAreaType() ) - return false; + if( GetDoNotAllowCopperPour() != other.GetDoNotAllowCopperPour() ) + return false; - if( GetRuleAreaType() == RULE_AREA_TYPE::KEEPOUT ) - { - if( GetDoNotAllowCopperPour() != other.GetDoNotAllowCopperPour() ) - return false; - if( GetDoNotAllowTracks() != other.GetDoNotAllowTracks() ) - return false; - if( GetDoNotAllowVias() != other.GetDoNotAllowVias() ) - return false; - if( GetDoNotAllowFootprints() != other.GetDoNotAllowFootprints() ) - return false; - if( GetDoNotAllowPads() != other.GetDoNotAllowPads() ) - return false; - } - else if ( GetRuleAreaType() == RULE_AREA_TYPE::PLACEMENT ) - { - if( GetRuleAreaPlacementSourceType() != other.GetRuleAreaPlacementSourceType() ) - return false; + if( GetDoNotAllowTracks() != other.GetDoNotAllowTracks() ) + return false; - if( GetRuleAreaPlacementSource() != other.GetRuleAreaPlacementSource() ) - return false; - } + if( GetDoNotAllowVias() != other.GetDoNotAllowVias() ) + return false; + + if( GetDoNotAllowFootprints() != other.GetDoNotAllowFootprints() ) + return false; + + if( GetDoNotAllowPads() != other.GetDoNotAllowPads() ) + return false; + + if( GetRuleAreaPlacementEnabled() != other.GetRuleAreaPlacementEnabled() ) + return false; + + if( GetRuleAreaPlacementSourceType() != other.GetRuleAreaPlacementSourceType() ) + return false; + + if( GetRuleAreaPlacementSource() != other.GetRuleAreaPlacementSource() ) + return false; } else { @@ -1612,15 +1618,6 @@ static struct ZONE_DESC .Map( ZONE_FILL_MODE::HATCH_PATTERN, _HKI( "Hatch pattern" ) ); } - ENUM_MAP<RULE_AREA_TYPE>& raTypeMap = ENUM_MAP<RULE_AREA_TYPE>::Instance(); - - if( raTypeMap.Choices().GetCount() == 0 ) - { - raTypeMap.Undefined( RULE_AREA_TYPE::KEEPOUT ); - raTypeMap.Map( RULE_AREA_TYPE::KEEPOUT, _HKI( "Keepout" ) ) - .Map( RULE_AREA_TYPE::PLACEMENT, _HKI( "Placement" ) ); - } - ENUM_MAP<ISLAND_REMOVAL_MODE>& irmMap = ENUM_MAP<ISLAND_REMOVAL_MODE>::Instance(); if( irmMap.Choices().GetCount() == 0 ) @@ -1631,6 +1628,17 @@ static struct ZONE_DESC .Map( ISLAND_REMOVAL_MODE::AREA, _HKI( "Below area limit" ) ); } + ENUM_MAP<RULE_AREA_PLACEMENT_SOURCE_TYPE>& rapstMap = + ENUM_MAP<RULE_AREA_PLACEMENT_SOURCE_TYPE>::Instance(); + + if( rapstMap.Choices().GetCount() == 0 ) + { + rapstMap.Undefined( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ); + rapstMap.Map( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME, _HKI( "Sheet Name" ) ) + .Map( RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS, + _HKI( "Component Class" ) ); + } + PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance(); REGISTER_TYPE( ZONE ); propMgr.InheritsAfter( TYPE_HASH( ZONE ), TYPE_HASH( BOARD_CONNECTED_ITEM ) ); @@ -1707,11 +1715,62 @@ static struct ZONE_DESC propMgr.AddProperty( new PROPERTY<ZONE, wxString>( _HKI( "Name" ), &ZONE::SetZoneName, &ZONE::GetZoneName ) ); - propMgr.AddProperty( new PROPERTY_ENUM<ZONE, RULE_AREA_TYPE>( _HKI( "Rule Area Type" ), - &ZONE::SetRuleAreaType, - &ZONE::GetRuleAreaType ) ) + const wxString groupKeepout = _HKI( "Keepout" ); + + propMgr.AddProperty( new PROPERTY<ZONE, bool>( _HKI( "Keep Out Tracks" ), + &ZONE::SetDoNotAllowTracks, + &ZONE::GetDoNotAllowTracks ), + groupKeepout ) .SetAvailableFunc( isRuleArea ); + propMgr.AddProperty( new PROPERTY<ZONE, bool>( _HKI( "Keep Out Vias" ), + &ZONE::SetDoNotAllowVias, + &ZONE::GetDoNotAllowVias ), + groupKeepout ) + .SetAvailableFunc( isRuleArea ); + + propMgr.AddProperty( new PROPERTY<ZONE, bool>( _HKI( "Keep Out Pads" ), + &ZONE::SetDoNotAllowPads, + &ZONE::GetDoNotAllowPads ), + groupKeepout ) + .SetAvailableFunc( isRuleArea ); + + propMgr.AddProperty( new PROPERTY<ZONE, bool>( _HKI( "Keep Out Copper Pours" ), + &ZONE::SetDoNotAllowCopperPour, + &ZONE::GetDoNotAllowCopperPour ), + groupKeepout ) + .SetAvailableFunc( isRuleArea ); + + propMgr.AddProperty( new PROPERTY<ZONE, bool>( _HKI( "Keep Out Footprints" ), + &ZONE::SetDoNotAllowFootprints, + &ZONE::GetDoNotAllowFootprints ), + groupKeepout ) + .SetAvailableFunc( isRuleArea ); + + if( ADVANCED_CFG::GetCfg().m_EnableMultichannelTool ) + { + const wxString groupPlacement = _HKI( "Placement" ); + + propMgr.AddProperty( new PROPERTY<ZONE, bool>( _HKI( "Enable" ), + &ZONE::SetRuleAreaPlacementEnabled, + &ZONE::GetRuleAreaPlacementEnabled ), + groupPlacement ) + .SetAvailableFunc( isRuleArea ); + + propMgr.AddProperty( new PROPERTY_ENUM<ZONE, RULE_AREA_PLACEMENT_SOURCE_TYPE>( + _HKI( "Source Type" ), + &ZONE::SetRuleAreaPlacementSourceType, + &ZONE::GetRuleAreaPlacementSourceType ), + groupPlacement ) + .SetAvailableFunc( isRuleArea ); + + propMgr.AddProperty( new PROPERTY<ZONE, wxString>( _HKI( "Source Name" ), + &ZONE::SetRuleAreaPlacementSource, + &ZONE::GetRuleAreaPlacementSource ), + groupPlacement ) + .SetAvailableFunc( isRuleArea ); + } + const wxString groupFill = _HKI( "Fill Style" ); propMgr.AddProperty( new PROPERTY_ENUM<ZONE, ZONE_FILL_MODE>( _HKI( "Fill Mode" ), @@ -1829,7 +1888,7 @@ static struct ZONE_DESC } } _ZONE_DESC; +IMPLEMENT_ENUM_TO_WXANY( RULE_AREA_PLACEMENT_SOURCE_TYPE ) IMPLEMENT_ENUM_TO_WXANY( ZONE_CONNECTION ) IMPLEMENT_ENUM_TO_WXANY( ZONE_FILL_MODE ) IMPLEMENT_ENUM_TO_WXANY( ISLAND_REMOVAL_MODE ) -IMPLEMENT_ENUM_TO_WXANY( RULE_AREA_TYPE ) diff --git a/pcbnew/zone.h b/pcbnew/zone.h index a1afea7a2e..87eb36db87 100644 --- a/pcbnew/zone.h +++ b/pcbnew/zone.h @@ -706,11 +706,19 @@ public: */ TEARDROP_TYPE GetTeardropAreaType() const { return m_teardropType; } + /** + * Accessor to determine if any keepout parameters are set + */ + bool HasKeepoutParametersSet() const + { + return m_doNotAllowTracks || m_doNotAllowVias || m_doNotAllowPads || m_doNotAllowFootprints + || m_doNotAllowCopperPour; + } + /** * Accessors to parameters used in Rule Area zones: */ - bool GetIsRuleArea() const { return m_isRuleArea; } - RULE_AREA_TYPE GetRuleAreaType() const { return m_ruleAreaType; } + bool GetIsRuleArea() const { return m_isRuleArea; } bool GetRuleAreaPlacementEnabled() const { return m_ruleAreaPlacementEnabled ; } RULE_AREA_PLACEMENT_SOURCE_TYPE GetRuleAreaPlacementSourceType() const { @@ -723,8 +731,7 @@ public: bool GetDoNotAllowPads() const { return m_doNotAllowPads; } bool GetDoNotAllowFootprints() const { return m_doNotAllowFootprints; } - void SetIsRuleArea( bool aEnable ) { m_isRuleArea = aEnable; } - void SetRuleAreaType( RULE_AREA_TYPE aType ) { m_ruleAreaType = aType; } + void SetIsRuleArea( bool aEnable ) { m_isRuleArea = aEnable; } void SetRuleAreaPlacementEnabled( bool aEnabled ) { m_ruleAreaPlacementEnabled = aEnabled; } void SetRuleAreaPlacementSourceType( RULE_AREA_PLACEMENT_SOURCE_TYPE aType ) { @@ -841,8 +848,7 @@ protected: /* A zone outline can be a keepout zone. * It will be never filled, and DRC should test for pads, tracks and vias */ - bool m_isRuleArea; - RULE_AREA_TYPE m_ruleAreaType; + bool m_isRuleArea; /** * Placement rule area data @@ -952,7 +958,7 @@ protected: DECLARE_ENUM_TO_WXANY( ZONE_CONNECTION ) DECLARE_ENUM_TO_WXANY( ZONE_FILL_MODE ) DECLARE_ENUM_TO_WXANY( ISLAND_REMOVAL_MODE ) -DECLARE_ENUM_TO_WXANY( RULE_AREA_TYPE ) +DECLARE_ENUM_TO_WXANY( RULE_AREA_PLACEMENT_SOURCE_TYPE ) #endif #endif // ZONE_H diff --git a/pcbnew/zone_filler.cpp b/pcbnew/zone_filler.cpp index 0b80f2ad6b..694df65cda 100644 --- a/pcbnew/zone_filler.cpp +++ b/pcbnew/zone_filler.cpp @@ -329,7 +329,7 @@ bool ZONE_FILLER::Fill( const std::vector<ZONE*>& aZones, bool aCheck, wxWindow* if( !zone->GetIsRuleArea() ) continue; - if( zone->GetRuleAreaType() != RULE_AREA_TYPE::KEEPOUT ) + if( !zone->HasKeepoutParametersSet() ) continue; if( !zone->GetDoNotAllowCopperPour() ) @@ -1919,7 +1919,7 @@ bool ZONE_FILLER::fillNonCopperZone( const ZONE* aZone, PCB_LAYER_ID aLayer, if( !keepout->GetIsRuleArea() ) continue; - if( keepout->GetRuleAreaType() != RULE_AREA_TYPE::KEEPOUT ) + if( !keepout->HasKeepoutParametersSet() ) continue; if( keepout->GetDoNotAllowCopperPour() && keepout->IsOnLayer( aLayer ) ) diff --git a/pcbnew/zone_settings.cpp b/pcbnew/zone_settings.cpp index 7ff65dd3d6..ec9e48b027 100644 --- a/pcbnew/zone_settings.cpp +++ b/pcbnew/zone_settings.cpp @@ -76,7 +76,7 @@ ZONE_SETTINGS::ZONE_SETTINGS() m_minIslandArea = 10 * pcbIUScale.IU_PER_MM * pcbIUScale.IU_PER_MM; SetIsRuleArea( false ); - SetRuleAreaPlacementSourceType( RULE_AREA_PLACEMENT_SOURCE_TYPE::COMPONENT_CLASS ); + SetRuleAreaPlacementSourceType( RULE_AREA_PLACEMENT_SOURCE_TYPE::SHEETNAME ); SetDoNotAllowCopperPour( false ); SetDoNotAllowVias( true ); SetDoNotAllowTracks( true ); @@ -84,7 +84,7 @@ ZONE_SETTINGS::ZONE_SETTINGS() SetDoNotAllowFootprints( false ); m_TeardropType = TEARDROP_TYPE::TD_NONE; - m_ruleAreaType = RULE_AREA_TYPE::KEEPOUT; // for backwards compatibility + m_ruleAreaPlacementEnabled = false; } @@ -111,7 +111,8 @@ bool ZONE_SETTINGS::operator==( const ZONE_SETTINGS& aOther ) const if( m_cornerSmoothingType != aOther.m_cornerSmoothingType ) return false; if( m_cornerRadius != aOther.m_cornerRadius ) return false; if( m_isRuleArea != aOther.m_isRuleArea ) return false; - if( m_ruleAreaType != aOther.m_ruleAreaType ) return false; + if( m_ruleAreaPlacementEnabled != aOther.m_ruleAreaPlacementEnabled ) + return false; if( m_ruleAreaPlacementSourceType != aOther.m_ruleAreaPlacementSourceType ) return false; if( m_ruleAreaPlacementSource != aOther.m_ruleAreaPlacementSource ) return false; if( m_keepoutDoNotAllowCopperPour != aOther.m_keepoutDoNotAllowCopperPour ) return false; @@ -157,7 +158,7 @@ ZONE_SETTINGS& ZONE_SETTINGS::operator << ( const ZONE& aSource ) m_cornerSmoothingType = aSource.GetCornerSmoothingType(); m_cornerRadius = aSource.GetCornerRadius(); m_isRuleArea = aSource.GetIsRuleArea(); - m_ruleAreaType = aSource.GetRuleAreaType(); + m_ruleAreaPlacementEnabled = aSource.GetRuleAreaPlacementEnabled(); m_ruleAreaPlacementSourceType = aSource.GetRuleAreaPlacementSourceType(); m_ruleAreaPlacementSource = aSource.GetRuleAreaPlacementSource(); m_keepoutDoNotAllowCopperPour = aSource.GetDoNotAllowCopperPour(); @@ -198,7 +199,7 @@ void ZONE_SETTINGS::ExportSetting( ZONE& aTarget, bool aFullExport ) const aTarget.SetCornerSmoothingType( m_cornerSmoothingType ); aTarget.SetCornerRadius( m_cornerRadius ); aTarget.SetIsRuleArea( GetIsRuleArea() ); - aTarget.SetRuleAreaType( GetRuleAreaType() ); + aTarget.SetRuleAreaPlacementEnabled( GetRuleAreaPlacementEnabled() ); aTarget.SetRuleAreaPlacementSourceType( GetRuleAreaPlacementSourceType() ); aTarget.SetRuleAreaPlacementSource( GetRuleAreaPlacementSource() ); aTarget.SetDoNotAllowCopperPour( GetDoNotAllowCopperPour() ); diff --git a/pcbnew/zone_settings.h b/pcbnew/zone_settings.h index 44837de99c..7ce665981e 100644 --- a/pcbnew/zone_settings.h +++ b/pcbnew/zone_settings.h @@ -62,12 +62,6 @@ enum class ISLAND_REMOVAL_MODE AREA }; -enum class RULE_AREA_TYPE -{ - KEEPOUT = 0, - PLACEMENT -}; - enum class RULE_AREA_PLACEMENT_SOURCE_TYPE { SHEETNAME = 0, @@ -137,11 +131,10 @@ private: */ bool m_isRuleArea; - RULE_AREA_TYPE m_ruleAreaType; - /** * Placement rule area data */ + bool m_ruleAreaPlacementEnabled; RULE_AREA_PLACEMENT_SOURCE_TYPE m_ruleAreaPlacementSourceType; wxString m_ruleAreaPlacementSource; @@ -203,11 +196,20 @@ public: ZONE_CONNECTION GetPadConnection() const { return m_padConnection; } void SetPadConnection( ZONE_CONNECTION aPadConnection ) { m_padConnection = aPadConnection; } + /** + * Accessor to determine if any keepout parameters are set + */ + bool HasKeepoutParametersSet() const + { + return m_keepoutDoNotAllowTracks || m_keepoutDoNotAllowVias || m_keepoutDoNotAllowPads + || m_keepoutDoNotAllowFootprints || m_keepoutDoNotAllowCopperPour; + } + /** * Accessors to parameters used in Rule Area zones: */ bool GetIsRuleArea() const { return m_isRuleArea; } - RULE_AREA_TYPE GetRuleAreaType() const { return m_ruleAreaType; } + bool GetRuleAreaPlacementEnabled() const { return m_ruleAreaPlacementEnabled; } RULE_AREA_PLACEMENT_SOURCE_TYPE GetRuleAreaPlacementSourceType() const { return m_ruleAreaPlacementSourceType; @@ -220,7 +222,7 @@ public: bool GetDoNotAllowFootprints() const { return m_keepoutDoNotAllowFootprints; } void SetIsRuleArea( bool aEnable ) { m_isRuleArea = aEnable; } - void SetRuleAreaType( RULE_AREA_TYPE aType ) { m_ruleAreaType = aType; } + void SetRuleAreaPlacementEnabled( bool aEnabled ) { m_ruleAreaPlacementEnabled = aEnabled; } void SetRuleAreaPlacementSourceType( RULE_AREA_PLACEMENT_SOURCE_TYPE aType ) { m_ruleAreaPlacementSourceType = aType; diff --git a/pcbnew/zones.h b/pcbnew/zones.h index 9bee79e44d..cab6617c4a 100644 --- a/pcbnew/zones.h +++ b/pcbnew/zones.h @@ -70,6 +70,7 @@ inline wxString PrintZoneConnection( ZONE_CONNECTION aConnection ) class ZONE; class ZONE_SETTINGS; class PCB_BASE_FRAME; +class BOARD; /** * Function InvokeNonCopperZonesEditor @@ -105,6 +106,6 @@ int InvokeCopperZonesEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aSettings, * @return int - tells if user aborted, changed only one zone, or all of them. */ int InvokeRuleAreaEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aSettings, - CONVERT_SETTINGS* aConvertSettings = nullptr ); + BOARD* aBoard = nullptr, CONVERT_SETTINGS* aConvertSettings = nullptr ); #endif // ZONES_H_ diff --git a/pcbnew/zones_functions_for_undo_redo.cpp b/pcbnew/zones_functions_for_undo_redo.cpp index bc75f51191..aacf599188 100644 --- a/pcbnew/zones_functions_for_undo_redo.cpp +++ b/pcbnew/zones_functions_for_undo_redo.cpp @@ -67,29 +67,29 @@ bool ZONE::IsSame( const ZONE& aZoneToCompare ) if( GetIsRuleArea() != aZoneToCompare.GetIsRuleArea() ) return false; - if( GetIsRuleArea() && GetRuleAreaType() == RULE_AREA_TYPE::KEEPOUT ) - { - if( GetDoNotAllowCopperPour() != aZoneToCompare.GetDoNotAllowCopperPour() ) - return false; + if( GetDoNotAllowCopperPour() != aZoneToCompare.GetDoNotAllowCopperPour() ) + return false; - if( GetDoNotAllowVias() != aZoneToCompare.GetDoNotAllowVias() ) - return false; + if( GetDoNotAllowVias() != aZoneToCompare.GetDoNotAllowVias() ) + return false; - if( GetDoNotAllowTracks() != aZoneToCompare.GetDoNotAllowTracks() ) - return false; + if( GetDoNotAllowTracks() != aZoneToCompare.GetDoNotAllowTracks() ) + return false; - if( GetDoNotAllowPads() != aZoneToCompare.GetDoNotAllowPads() ) - return false; + if( GetDoNotAllowPads() != aZoneToCompare.GetDoNotAllowPads() ) + return false; - if( GetDoNotAllowFootprints() != aZoneToCompare.GetDoNotAllowFootprints() ) - return false; - } + if( GetDoNotAllowFootprints() != aZoneToCompare.GetDoNotAllowFootprints() ) + return false; - if( GetIsRuleArea() && GetRuleAreaType() == RULE_AREA_TYPE::PLACEMENT ) - { - if( GetRuleAreaExpression() != aZoneToCompare.GetRuleAreaExpression() ) - return false; - } + if( GetRuleAreaPlacementEnabled() != aZoneToCompare.GetRuleAreaPlacementEnabled() ) + return false; + + if( GetRuleAreaPlacementSourceType() != aZoneToCompare.GetRuleAreaPlacementSourceType() ) + return false; + + if( GetRuleAreaPlacementSource() != aZoneToCompare.GetRuleAreaPlacementSource() ) + return false; if( m_ZoneClearance != aZoneToCompare.m_ZoneClearance ) return false;