CHANGED: default zone props now edited through Board Setup...

... rather than as a side-effect of editing a zone.
This commit is contained in:
Jeff Young
2025-11-11 13:13:25 +00:00
parent 781ddbd043
commit 77440fd9eb
26 changed files with 1083 additions and 138 deletions
+4
View File
@@ -187,6 +187,8 @@ set( PCBNEW_DIALOGS
dialogs/panel_assign_component_classes_base.cpp
dialogs/panel_setup_constraints.cpp
dialogs/panel_setup_constraints_base.cpp
dialogs/panel_setup_defaults.cpp
dialogs/panel_setup_defaults_base.cpp
dialogs/panel_setup_dimensions.cpp
dialogs/panel_setup_dimensions_base.cpp
dialogs/panel_setup_formatting.cpp
@@ -209,6 +211,8 @@ set( PCBNEW_DIALOGS
dialogs/panel_setup_tuning_profiles.cpp
dialogs/panel_setup_tuning_profile_info_base.cpp
dialogs/panel_setup_tuning_profile_info.cpp
dialogs/panel_setup_zones.cpp
dialogs/panel_setup_zones_base.cpp
dialogs/panel_setup_zone_hatch_offsets.cpp
dialogs/panel_setup_zone_hatch_offsets_base.cpp
dialogs/panel_zone_properties.cpp
+5 -5
View File
@@ -18,7 +18,7 @@
*/
#include <pcb_edit_frame.h>
#include <panel_setup_layers.h>
#include <panel_setup_text_and_graphics.h>
#include <panel_setup_defaults.h>
#include <panel_setup_constraints.h>
#include <panel_setup_tracks_and_vias.h>
#include <panel_setup_mask_and_paste.h>
@@ -71,7 +71,7 @@ DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP( PCB_EDIT_FRAME* aFrame, wxWindow* aParen
m_layersPage( 0 ),
m_physicalStackupPage( 0 ),
m_boardFinishPage( 0 ),
m_textAndGraphicsPage( 0 ),
m_defaultsPage( 0 ),
m_formattingPage( 0 ),
m_maskAndPastePage( 0 ),
m_zoneHatchOffsetsPage( 0 ),
@@ -139,11 +139,11 @@ DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP( PCB_EDIT_FRAME* aFrame, wxWindow* aParen
m_treebook->AddPage( new wxPanel( GetTreebook() ), _( "Text & Graphics" ) );
m_textAndGraphicsPage = m_treebook->GetPageCount();
m_defaultsPage = m_treebook->GetPageCount();
m_treebook->AddLazySubPage(
[this]( wxWindow* aParent ) -> wxWindow*
{
return new PANEL_SETUP_TEXT_AND_GRAPHICS( aParent, m_frame );
return new PANEL_SETUP_DEFAULTS( aParent, m_frame );
}, _( "Defaults" ) );
m_formattingPage = m_treebook->GetPageCount();
@@ -421,7 +421,7 @@ void DIALOG_BOARD_SETUP::onAuxiliaryAction( wxCommandEvent& aEvent )
}
if( importDlg.m_TextAndGraphicsOpt->GetValue() )
RESOLVE_PAGE( PANEL_SETUP_TEXT_AND_GRAPHICS, m_textAndGraphicsPage )->ImportSettingsFrom( otherBoard );
RESOLVE_PAGE( PANEL_SETUP_DEFAULTS, m_defaultsPage )->ImportSettingsFrom( otherBoard );
if( importDlg.m_FormattingOpt->GetValue() )
RESOLVE_PAGE( PANEL_SETUP_FORMATTING, m_formattingPage )->ImportSettingsFrom( otherBoard );
+2 -2
View File
@@ -26,7 +26,7 @@
class PCB_EDIT_FRAME;
class PANEL_SETUP_CONSTRAINTS;
class PANEL_SETUP_LAYERS;
class PANEL_SETUP_TEXT_AND_GRAPHICS;
class PANEL_SETUP_DEFAULTS;
class PANEL_SETUP_NETCLASSES;
class PANEL_SETUP_RULES;
class PANEL_SETUP_TRACKS_AND_VIAS;
@@ -63,7 +63,7 @@ private:
size_t m_layersPage;
size_t m_physicalStackupPage;
size_t m_boardFinishPage;
size_t m_textAndGraphicsPage;
size_t m_defaultsPage;
size_t m_formattingPage;
size_t m_maskAndPastePage;
size_t m_zoneHatchOffsetsPage;
+98
View File
@@ -0,0 +1,98 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "panel_setup_defaults.h"
#include <board_design_settings.h>
#include <dialogs/panel_setup_text_and_graphics.h>
#include <dialogs/panel_setup_dimensions.h>
#include <dialogs/panel_setup_zones.h>
#include <pcb_edit_frame.h>
#include <kidialog.h>
PANEL_SETUP_DEFAULTS::PANEL_SETUP_DEFAULTS( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame ) :
PANEL_SETUP_DEFAULTS_BASE( aParentWindow ),
m_Frame( aFrame ),
m_BrdSettings( &m_Frame->GetBoard()->GetDesignSettings() ),
m_textAndGraphicsPanel( new PANEL_SETUP_TEXT_AND_GRAPHICS( m_scrolledWindow, aFrame, m_BrdSettings ) ),
m_dimensionsPanel( new PANEL_SETUP_DIMENSIONS( m_scrolledWindow, *aFrame, *m_BrdSettings ) ),
m_zonesPanel( new PANEL_SETUP_ZONES( m_scrolledWindow, aFrame, *m_BrdSettings ) )
{
m_scrollSizer->Add( m_textAndGraphicsPanel, 0, wxEXPAND, 5 );
m_scrollSizer->AddSpacer( 10 );
m_scrollSizer->Add( m_dimensionsPanel, 0, wxEXPAND, 5 );
m_scrollSizer->AddSpacer( 10 );
m_scrollSizer->Add( m_zonesPanel, 0, wxEXPAND, 5 );
Layout();
GetSizer()->Fit( this );
}
bool PANEL_SETUP_DEFAULTS::TransferDataToWindow()
{
m_textAndGraphicsPanel->TransferDataToWindow();
m_dimensionsPanel->TransferDataToWindow();
m_zonesPanel->TransferDataToWindow();
Layout();
return true;
}
bool PANEL_SETUP_DEFAULTS::TransferDataFromWindow()
{
if( !m_textAndGraphicsPanel->TransferDataFromWindow() )
return false;
if( !m_dimensionsPanel->TransferDataFromWindow() )
return false;
if( !m_zonesPanel->TransferDataFromWindow() )
return false;
return true;
}
void PANEL_SETUP_DEFAULTS::ImportSettingsFrom( BOARD* aBoard )
{
if( !m_textAndGraphicsPanel->CommitPendingChanges() )
return;
if( !m_dimensionsPanel->CommitPendingChanges() )
return;
if( !m_zonesPanel->CommitPendingChanges() )
return;
BOARD_DESIGN_SETTINGS* savedSettings = m_BrdSettings;
m_BrdSettings = &aBoard->GetDesignSettings();
TransferDataToWindow();
m_BrdSettings = savedSettings;
}
+56
View File
@@ -0,0 +1,56 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#pragma once
#include <memory>
#include <board.h>
#include <panel_setup_defaults_base.h>
class BOARD_DESIGN_SETTINGS;
class PANEL_SETUP_TEXT_AND_GRAPHICS;
class PANEL_SETUP_DIMENSIONS;
class PANEL_SETUP_ZONES;
class PCB_EDIT_FRAME;
class PANEL_SETUP_DEFAULTS : public PANEL_SETUP_DEFAULTS_BASE
{
public:
PANEL_SETUP_DEFAULTS( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame );
~PANEL_SETUP_DEFAULTS( ) override = default;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
void ImportSettingsFrom( BOARD* aBoard );
private:
PCB_EDIT_FRAME* m_Frame;
BOARD_DESIGN_SETTINGS* m_BrdSettings;
PANEL_SETUP_TEXT_AND_GRAPHICS* m_textAndGraphicsPanel;
PANEL_SETUP_DIMENSIONS* m_dimensionsPanel;
PANEL_SETUP_ZONES* m_zonesPanel;
};
@@ -0,0 +1,35 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "panel_setup_defaults_base.h"
///////////////////////////////////////////////////////////////////////////
PANEL_SETUP_DEFAULTS_BASE::PANEL_SETUP_DEFAULTS_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
{
wxBoxSizer* mainSizer;
mainSizer = new wxBoxSizer( wxVERTICAL );
m_scrolledWindow = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
m_scrolledWindow->SetScrollRate( 5, 5 );
m_scrollSizer = new wxBoxSizer( wxVERTICAL );
m_scrolledWindow->SetSizer( m_scrollSizer );
m_scrolledWindow->Layout();
m_scrollSizer->Fit( m_scrolledWindow );
mainSizer->Add( m_scrolledWindow, 1, wxEXPAND | wxALL, 5 );
this->SetSizer( mainSizer );
this->Layout();
mainSizer->Fit( this );
}
PANEL_SETUP_DEFAULTS_BASE::~PANEL_SETUP_DEFAULTS_BASE()
{
}
@@ -0,0 +1,373 @@
<?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">1</property>
<property name="cpp_event_generation">connect</property>
<property name="cpp_help_provider">none</property>
<property name="cpp_namespace"></property>
<property name="cpp_precompiled_header"></property>
<property name="cpp_use_array_enum">0</property>
<property name="cpp_use_enum">1</property>
<property name="embedded_files_path">res</property>
<property name="encoding">UTF-8</property>
<property name="file">panel_setup_defaults_base</property>
<property name="first_id">1000</property>
<property name="internationalize">1</property>
<property name="lua_skip_events">1</property>
<property name="lua_ui_table">UI</property>
<property name="name">panel_setup_defaults_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"></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_SETUP_DEFAULTS_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">mainSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">1</property>
<object class="wxScrolledWindow" 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="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_scrolledWindow1</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="scroll_rate_x">5</property>
<property name="scroll_rate_y">5</property>
<property name="show">1</property>
<property name="size"></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">wxHSCROLL|wxVSCROLL</property>
<object class="wxBoxSizer" expanded="true">
<property name="minimum_size"></property>
<property name="name">m_scrollSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">protected</property>
<object class="sizeritem" expanded="true">
<property name="border">13</property>
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT|wxTOP</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">Default Properties for New Graphics and Text</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_staticTextDefProp</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"></property>
<property name="proportion">0</property>
<object class="spacer" expanded="true">
<property name="height">2</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxBOTTOM</property>
<property name="proportion">0</property>
<object class="wxStaticLine" 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="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_staticline11</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">wxLI_HORIZONTAL</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">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="spacer" expanded="true">
<property name="height">3</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxLEFT</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="true">
<property name="minimum_size"></property>
<property name="name">bMargins</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="false">
<property name="border">15</property>
<property name="flag">wxBOTTOM</property>
<property name="proportion">0</property>
<object class="wxGrid" expanded="false">
<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="autosize_cols">0</property>
<property name="autosize_rows">0</property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="cell_bg"></property>
<property name="cell_font"></property>
<property name="cell_horiz_alignment">wxALIGN_LEFT</property>
<property name="cell_text"></property>
<property name="cell_vert_alignment">wxALIGN_CENTER</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="col_label_horiz_alignment">wxALIGN_CENTER</property>
<property name="col_label_size">wxGRID_AUTOSIZE</property>
<property name="col_label_values">&quot;Line Thickness&quot; &quot;Text Width&quot; &quot;Text Height&quot; &quot;Text Thickness&quot; &quot;Italic&quot; &quot;Keep Upright&quot;</property>
<property name="col_label_vert_alignment">wxALIGN_CENTER</property>
<property name="cols">6</property>
<property name="column_sizes">140,140,140,140,80,120</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="drag_col_move">0</property>
<property name="drag_col_size">1</property>
<property name="drag_grid_size">0</property>
<property name="drag_row_size">0</property>
<property name="editing">1</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="grid_line_color"></property>
<property name="grid_lines">1</property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label_bg"></property>
<property name="label_font"></property>
<property name="label_text"></property>
<property name="margin_height">0</property>
<property name="margin_width">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">-1,-1</property>
<property name="moveable">1</property>
<property name="name">m_grid</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="row_label_horiz_alignment">wxALIGN_LEFT</property>
<property name="row_label_size">132</property>
<property name="row_label_values">&quot;Silk Layers&quot; &quot;Copper Layers&quot; &quot;Edge Cuts&quot; &quot;Courtyards&quot; &quot;Fab Layers&quot; &quot;Other Layers&quot;</property>
<property name="row_label_vert_alignment">wxALIGN_CENTER</property>
<property name="row_sizes"></property>
<property name="rows">6</property>
<property name="show">1</property>
<property name="size"></property>
<property name="subclass">WX_GRID; widgets/wx_grid.h; 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">wxTAB_TRAVERSAL</property>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>
@@ -0,0 +1,42 @@
///////////////////////////////////////////////////////////////////////////
// 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/sizer.h>
#include <wx/gdicmn.h>
#include <wx/scrolwin.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/string.h>
#include <wx/panel.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class PANEL_SETUP_DEFAULTS_BASE
///////////////////////////////////////////////////////////////////////////////
class PANEL_SETUP_DEFAULTS_BASE : public wxPanel
{
private:
protected:
wxScrolledWindow* m_scrolledWindow;
wxBoxSizer* m_scrollSizer;
public:
PANEL_SETUP_DEFAULTS_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_SETUP_DEFAULTS_BASE();
};
+3 -1
View File
@@ -21,7 +21,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#pragma once
#include <board.h>
@@ -30,6 +29,7 @@
#include <panel_setup_dimensions_base.h>
class BOARD_DESIGN_SETTINGS;
@@ -45,6 +45,8 @@ public:
void LoadFromSettings( const BOARD_DESIGN_SETTINGS& aBrdSettings );
bool CommitPendingChanges() { return true; }
private:
void onUnitsChanged( wxCommandEvent& aEvent );
@@ -111,7 +111,7 @@ PANEL_SETUP_DIMENSIONS_BASE::PANEL_SETUP_DIMENSIONS_BASE( wxWindow* parent, wxWi
gbSizer1->Add( m_dimensionExtensionOffsetUnits, wxGBPosition( 3, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
mainSizer->Add( gbSizer1, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
mainSizer->Add( gbSizer1, 1, wxEXPAND|wxALL, 5 );
this->SetSizer( mainSizer );
@@ -193,7 +193,7 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>
<property name="flag">wxEXPAND|wxALL</property>
<property name="proportion">1</property>
<object class="wxGridBagSizer" expanded="true">
<property name="empty_cell_size"></property>
@@ -56,12 +56,11 @@ enum
};
PANEL_SETUP_TEXT_AND_GRAPHICS::PANEL_SETUP_TEXT_AND_GRAPHICS( wxWindow* aParentWindow,
PCB_EDIT_FRAME* aFrame ) :
PANEL_SETUP_TEXT_AND_GRAPHICS::PANEL_SETUP_TEXT_AND_GRAPHICS( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame,
BOARD_DESIGN_SETTINGS* aBrdSettings) :
PANEL_SETUP_TEXT_AND_GRAPHICS_BASE( aParentWindow ),
m_Frame( aFrame ),
m_BrdSettings( &m_Frame->GetBoard()->GetDesignSettings() ),
m_dimensionsPanel( std::make_unique<PANEL_SETUP_DIMENSIONS>( this, *aFrame, *m_BrdSettings ) )
m_BrdSettings( aBrdSettings )
{
m_grid->SetUnitsProvider( m_Frame );
m_grid->SetAutoEvalCols( { COL_LINE_THICKNESS,
@@ -94,9 +93,6 @@ PANEL_SETUP_TEXT_AND_GRAPHICS::PANEL_SETUP_TEXT_AND_GRAPHICS( wxWindow* aP
m_grid->PushEventHandler( new GRID_TRICKS( m_grid ) );
GetSizer()->Add( m_dimensionsPanel.get(), 0, wxEXPAND, 5 );
Layout();
m_mainSizer->Fit( this );
m_Frame->Bind( EDA_EVT_UNITS_CHANGED, &PANEL_SETUP_TEXT_AND_GRAPHICS::onUnitsChanged, this );
@@ -180,10 +176,6 @@ bool PANEL_SETUP_TEXT_AND_GRAPHICS::TransferDataToWindow()
m_grid->SetRowLabelSize( m_grid->GetVisibleWidth( -1, true, true, true ) );
Layout();
m_dimensionsPanel->TransferDataToWindow();
return true;
}
@@ -284,27 +276,17 @@ bool PANEL_SETUP_TEXT_AND_GRAPHICS::TransferDataFromWindow()
wxGridCellBoolEditor::IsTrueValue( m_grid->GetCellValue( i, COL_TEXT_UPRIGHT ) );
}
m_dimensionsPanel->TransferDataFromWindow();
if( errorsMsg.IsEmpty() )
return true;
KIDIALOG dlg( wxGetTopLevelParent( this ), errorsMsg, KIDIALOG::KD_ERROR, _( "Parameter error" ) );
KIDIALOG dlg( wxGetTopLevelParent( m_grid ), errorsMsg, KIDIALOG::KD_ERROR, _( "Parameter error" ) );
dlg.ShowModal();
return false;
}
void PANEL_SETUP_TEXT_AND_GRAPHICS::ImportSettingsFrom( BOARD* aBoard )
bool PANEL_SETUP_TEXT_AND_GRAPHICS::CommitPendingChanges()
{
if( !m_grid->CommitPendingChanges() )
return;
BOARD_DESIGN_SETTINGS* savedSettings = m_BrdSettings;
m_BrdSettings = &aBoard->GetDesignSettings();
TransferDataToWindow();
m_BrdSettings = savedSettings;
}
return m_grid->CommitPendingChanges();
}
+5 -10
View File
@@ -24,27 +24,24 @@
#pragma once
#include <memory>
#include <board.h>
#include <widgets/unit_binder.h>
#include <widgets/paged_dialog.h>
#include <panel_setup_text_and_graphics_base.h>
class BOARD_DESIGN_SETTINGS;
class PANEL_SETUP_DIMENSIONS;
class PCB_EDIT_FRAME;
class PANEL_SETUP_TEXT_AND_GRAPHICS : public PANEL_SETUP_TEXT_AND_GRAPHICS_BASE
{
public:
PANEL_SETUP_TEXT_AND_GRAPHICS( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame );
PANEL_SETUP_TEXT_AND_GRAPHICS( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame,
BOARD_DESIGN_SETTINGS* aBrdSettings );
~PANEL_SETUP_TEXT_AND_GRAPHICS( ) override;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
void ImportSettingsFrom( BOARD* aBoard );
bool CommitPendingChanges();
private:
void onUnitsChanged( wxCommandEvent& aEvent );
@@ -52,6 +49,4 @@ private:
private:
PCB_EDIT_FRAME* m_Frame;
BOARD_DESIGN_SETTINGS* m_BrdSettings;
std::unique_ptr<PANEL_SETUP_DIMENSIONS> m_dimensionsPanel;
};
@@ -81,9 +81,6 @@ PANEL_SETUP_TEXT_AND_GRAPHICS_BASE::PANEL_SETUP_TEXT_AND_GRAPHICS_BASE( wxWindow
m_gridSizer->Add( bMargins, 1, wxEXPAND|wxLEFT, 5 );
m_gridSizer->Add( 0, 0, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 );
m_mainSizer->Add( m_gridSizer, 0, wxEXPAND, 5 );
@@ -310,16 +310,6 @@
</object>
</object>
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM</property>
<property name="proportion">0</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>
+66
View File
@@ -0,0 +1,66 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "panel_setup_zones.h"
#include <pcb_edit_frame.h>
#include <board_design_settings.h>
#include <dialogs/panel_zone_properties.h>
PANEL_SETUP_ZONES::PANEL_SETUP_ZONES( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame,
BOARD_DESIGN_SETTINGS& aBrdSettings ) :
PANEL_SETUP_ZONES_BASE( aParentWindow ),
m_brdSettings( aBrdSettings ),
m_zoneSettingsBag( nullptr, &aBrdSettings.GetDefaultZoneSettings() )
{
m_panelZoneProperties = new PANEL_ZONE_PROPERTIES( this, aFrame, m_zoneSettingsBag, false );
m_panelZoneProperties->SetZone( nullptr );
m_mainSizer->Add( m_panelZoneProperties, 1, 0, 5 );
}
bool PANEL_SETUP_ZONES::TransferDataToWindow()
{
return m_panelZoneProperties->TransferZoneSettingsToWindow();
}
bool PANEL_SETUP_ZONES::TransferDataFromWindow()
{
if( m_panelZoneProperties->TransferZoneSettingsFromWindow() )
{
ZONE_SETTINGS settings = *m_zoneSettingsBag.GetZoneSettings( nullptr );
settings.m_Netcode = NETINFO_LIST::ORPHANED;
m_brdSettings.SetDefaultZoneSettings( settings );
return true;
}
return false;
}
bool PANEL_SETUP_ZONES::CommitPendingChanges()
{
return m_panelZoneProperties->CommitPendingChanges();
}
+51
View File
@@ -0,0 +1,51 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright The KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#pragma once
#include <board.h>
#include <zone_settings_bag.h>
#include <panel_setup_zones_base.h>
class BOARD_DESIGN_SETTINGS;
class PANEL_ZONE_PROPERTIES;
class PANEL_SETUP_ZONES : public PANEL_SETUP_ZONES_BASE
{
public:
PANEL_SETUP_ZONES( wxWindow* aParentWindow, PCB_EDIT_FRAME* aFrame, BOARD_DESIGN_SETTINGS& aBrdSettings );
~PANEL_SETUP_ZONES( ) override = default;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
bool CommitPendingChanges();
private:
BOARD_DESIGN_SETTINGS& m_brdSettings;
ZONE_SETTINGS_BAG m_zoneSettingsBag;
PANEL_ZONE_PROPERTIES* m_panelZoneProperties;
};
+34
View File
@@ -0,0 +1,34 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "panel_setup_zones_base.h"
///////////////////////////////////////////////////////////////////////////
PANEL_SETUP_ZONES_BASE::PANEL_SETUP_ZONES_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
{
m_mainSizer = new wxBoxSizer( wxVERTICAL );
m_staticTextDefPropDim = new wxStaticText( this, wxID_ANY, _("Default Properties for New Zones"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextDefPropDim->Wrap( -1 );
m_mainSizer->Add( m_staticTextDefPropDim, 0, wxTOP|wxRIGHT|wxLEFT, 13 );
m_mainSizer->Add( 0, 2, 0, 0, 5 );
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
m_mainSizer->Add( m_staticline1, 0, wxEXPAND|wxBOTTOM, 5 );
this->SetSizer( m_mainSizer );
this->Layout();
m_mainSizer->Fit( this );
}
PANEL_SETUP_ZONES_BASE::~PANEL_SETUP_ZONES_BASE()
{
}
+197
View File
@@ -0,0 +1,197 @@
<?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">1</property>
<property name="cpp_event_generation">connect</property>
<property name="cpp_help_provider">none</property>
<property name="cpp_namespace"></property>
<property name="cpp_precompiled_header"></property>
<property name="cpp_use_array_enum">0</property>
<property name="cpp_use_enum">1</property>
<property name="embedded_files_path">res</property>
<property name="encoding">UTF-8</property>
<property name="file">panel_setup_zones_base</property>
<property name="first_id">1000</property>
<property name="internationalize">1</property>
<property name="lua_skip_events">1</property>
<property name="lua_ui_table">UI</property>
<property name="name">panel_setup_zones_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"></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_SETUP_ZONES_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">m_mainSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">protected</property>
<object class="sizeritem" expanded="true">
<property name="border">13</property>
<property name="flag">wxTOP|wxRIGHT|wxLEFT</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">Default Properties for New Zones</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_staticTextDefPropDim</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"></property>
<property name="proportion">0</property>
<object class="spacer" expanded="true">
<property name="height">2</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxBOTTOM</property>
<property name="proportion">0</property>
<object class="wxStaticLine" 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="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_staticline1</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">wxLI_HORIZONTAL</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>
</object>
</object>
</wxFormBuilder_Project>
+44
View File
@@ -0,0 +1,44 @@
///////////////////////////////////////////////////////////////////////////
// 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/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/statline.h>
#include <wx/sizer.h>
#include <wx/panel.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class PANEL_SETUP_ZONES_BASE
///////////////////////////////////////////////////////////////////////////////
class PANEL_SETUP_ZONES_BASE : public wxPanel
{
private:
protected:
wxBoxSizer* m_mainSizer;
wxStaticText* m_staticTextDefPropDim;
wxStaticLine* m_staticline1;
public:
PANEL_SETUP_ZONES_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_SETUP_ZONES_BASE();
};
+17 -3
View File
@@ -45,7 +45,7 @@ wxDEFINE_EVENT( EVT_ZONE_NAME_UPDATE, wxCommandEvent );
wxDEFINE_EVENT( EVT_ZONE_NET_UPDATE, wxCommandEvent );
PANEL_ZONE_PROPERTIES::PANEL_ZONE_PROPERTIES( wxWindow* aParent, PCB_BASE_FRAME* aFrame,
ZONE_SETTINGS_BAG& aZonesSettingsBag ) :
ZONE_SETTINGS_BAG& aZonesSettingsBag, bool allowNetSpec ) :
PANEL_ZONE_PROPERTIES_BASE( aParent ),
m_frame( aFrame ),
m_zonesSettingsBag( aZonesSettingsBag ),
@@ -60,7 +60,15 @@ PANEL_ZONE_PROPERTIES::PANEL_ZONE_PROPERTIES( wxWindow* aParent, PCB_BASE_FRAME*
m_gridStyleGap( aFrame, m_staticTextGridGap, m_tcGridStyleGap, m_GridStyleGapUnits ),
m_islandThreshold( aFrame, m_islandThresholdLabel, m_tcIslandThreshold, m_islandThresholdUnits )
{
m_netSelector->SetNetInfo( &m_frame->GetBoard()->GetNetInfo() );
if( allowNetSpec )
{
m_netSelector->SetNetInfo( &m_frame->GetBoard()->GetNetInfo() );
}
else
{
m_netLabel->Hide();
m_netSelector->Hide();
}
m_layerPropsTable = new LAYER_PROPERTIES_GRID_TABLE( m_frame,
[&]() -> LSET
@@ -245,7 +253,7 @@ void PANEL_ZONE_PROPERTIES::OnZoneNameChanged( wxCommandEvent& aEvent )
bool PANEL_ZONE_PROPERTIES::TransferZoneSettingsFromWindow()
{
if( !m_layerSpecificOverrides->CommitPendingChanges() )
if( !CommitPendingChanges() )
return false;
if( !m_settings )
@@ -258,6 +266,12 @@ bool PANEL_ZONE_PROPERTIES::TransferZoneSettingsFromWindow()
}
bool PANEL_ZONE_PROPERTIES::CommitPendingChanges()
{
return m_layerSpecificOverrides->CommitPendingChanges();
}
bool PANEL_ZONE_PROPERTIES::AcceptOptions( bool aUseExportableSetupOnly )
{
if( !m_clearance.Validate( 0, pcbIUScale.mmToIU( ZONE_CLEARANCE_MAX_VALUE_MM ) ) )
+4 -1
View File
@@ -41,7 +41,8 @@ class ZONE_SETTINGS_BAG;
class PANEL_ZONE_PROPERTIES : public PANEL_ZONE_PROPERTIES_BASE
{
public:
PANEL_ZONE_PROPERTIES( wxWindow* aParent, PCB_BASE_FRAME* aFrame, ZONE_SETTINGS_BAG& aZonesSettingsBag );
PANEL_ZONE_PROPERTIES( wxWindow* aParent, PCB_BASE_FRAME* aFrame, ZONE_SETTINGS_BAG& aZonesSettingsBag,
bool allowNetSpec = true );
~PANEL_ZONE_PROPERTIES() override;
@@ -53,6 +54,8 @@ public:
bool TransferZoneSettingsFromWindow();
bool TransferZoneSettingsToWindow();
bool CommitPendingChanges();
private:
static constexpr int INVALID_NET_CODE{ 0 };
+24 -3
View File
@@ -236,7 +236,29 @@ void DIALOG_ZONE_MANAGER::SelectZoneTableItem( wxDataViewItem const& aItem )
void DIALOG_ZONE_MANAGER::OnOk( wxCommandEvent& aEvt )
{
m_panelZoneProperties->TransferZoneSettingsFromWindow();
m_zoneSettingsBag.OnUserConfirmChange();
m_zoneSettingsBag.UpdateClonedZones();
for( const auto& [ zone, zoneClone ] : m_zoneSettingsBag.GetZonesCloneMap() )
{
std::map<PCB_LAYER_ID, std::shared_ptr<SHAPE_POLY_SET>> filled_zone_to_restore;
ZONE* internal_zone = zone; // Duplicate the zone pointer to allow capture on older MacOS (13)
zone->GetLayerSet().RunOnLayers(
[&]( PCB_LAYER_ID layer )
{
std::shared_ptr<SHAPE_POLY_SET> fill = internal_zone->GetFilledPolysList( layer );
if( fill )
filled_zone_to_restore[layer] = fill;
} );
*zone = *zoneClone;
for( const auto& [ layer, fill ] : filled_zone_to_restore )
zone->SetFilledPolysList( layer, *fill );
}
aEvt.Skip();
}
@@ -346,8 +368,7 @@ void DIALOG_ZONE_MANAGER::OnUpdateDisplayedZonesClick( wxCommandEvent& aEvent )
m_isFillingZones = true;
m_panelZoneProperties->TransferZoneSettingsFromWindow();
m_zoneSettingsBag.FlushZoneSettingsChange();
m_zoneSettingsBag.FlushPriorityChange();
m_zoneSettingsBag.UpdateClonedZones();
BOARD* board = m_pcbFrame->GetBoard();
board->IncrementTimeStamp();
+2 -10
View File
@@ -22,9 +22,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef MANAGED_ZONE_H
#define MANAGED_ZONE_H
#pragma once
#include <memory>
#include <utility>
@@ -43,8 +41,7 @@ public:
m_zone( std::move( aZone ) ),
m_initialPriority( aInitialIndex ),
m_currentPriority( aInitialIndex )
{
}
{ }
MANAGED_ZONE() = delete;
@@ -54,10 +51,7 @@ public:
unsigned GetCurrentPriority() const { return m_currentPriority; }
void OnUserConfirmChange() { m_zone->SetAssignedPriority( m_currentPriority ); }
ZONE const& GetZone() const { return *m_zone; }
ZONE& GetZone() { return *m_zone; }
private:
@@ -65,5 +59,3 @@ private:
const unsigned m_initialPriority;
unsigned m_currentPriority;
};
#endif
+7 -38
View File
@@ -79,50 +79,21 @@ std::shared_ptr<ZONE_SETTINGS> ZONE_SETTINGS_BAG::GetZoneSettings( ZONE* aZone )
}
void ZONE_SETTINGS_BAG::OnUserConfirmChange()
{
FlushZoneSettingsChange();
FlushPriorityChange();
for( const auto& [ zone, zoneClone ] : m_zonesCloneMap )
{
std::map<PCB_LAYER_ID, std::shared_ptr<SHAPE_POLY_SET>> filled_zone_to_restore;
ZONE* internal_zone = zone; // Duplicate the zone pointer to allow capture on older MacOS (13)
zone->GetLayerSet().RunOnLayers(
[&]( PCB_LAYER_ID layer )
{
std::shared_ptr<SHAPE_POLY_SET> fill = internal_zone->GetFilledPolysList( layer );
if( fill )
filled_zone_to_restore[layer] = fill;
} );
*zone = *zoneClone;
for( const auto& [ layer, fill ] : filled_zone_to_restore )
zone->SetFilledPolysList( layer, *fill );
}
}
void ZONE_SETTINGS_BAG::FlushZoneSettingsChange()
void ZONE_SETTINGS_BAG::UpdateClonedZones()
{
for( const std::shared_ptr<MANAGED_ZONE>& zone : m_managedZones )
{
if( auto ll = m_zoneSettings.find( &zone->GetZone() ); ll != m_zoneSettings.end() )
ll->second->ExportSetting( zone->GetZone() );
}
}
bool ZONE_SETTINGS_BAG::FlushPriorityChange()
{
// Prevent version-control churn by not updating sparse priorities if their order didn't
// change.
bool priorityChanged = false;
for( const std::shared_ptr<MANAGED_ZONE>& c : m_managedZones )
for( const std::shared_ptr<MANAGED_ZONE>& zone : m_managedZones )
{
if( c->PriorityChanged() )
if( zone->PriorityChanged() )
{
priorityChanged = true;
break;
@@ -131,9 +102,7 @@ bool ZONE_SETTINGS_BAG::FlushPriorityChange()
if( priorityChanged )
{
for( std::shared_ptr<MANAGED_ZONE>& c : m_managedZones )
c->OnUserConfirmChange();
for( std::shared_ptr<MANAGED_ZONE>& zone : m_managedZones )
zone->GetZone().SetAssignedPriority( zone->GetCurrentPriority() );
}
return priorityChanged;
}
+5 -25
View File
@@ -51,33 +51,13 @@ public:
std::shared_ptr<ZONE_SETTINGS> GetZoneSettings( ZONE* zone );
/**
* @brief Adapter for the zone filler ,zones are actually managed the smart ptr
*
* @return std::vector<ZONE*>&
* The cloned list is the working storage.
*/
std::vector<ZONE*>& GetClonedZoneList() { return m_clonedZoneList; }
void UpdateClonedZones();
/**
* @brief Used for restoring the zones in the board after refilling
*
* @return std::vector<ZONE*>&
*/
std::vector<ZONE*>& GetOriginalZoneList() { return m_originalZoneList; }
/**
* @brief Flush the zone settings change to the cloned ones
*
*/
void FlushZoneSettingsChange();
/**
* @brief Flush the priority change to the cloned ones
*
* @return true if priority changed
*/
bool FlushPriorityChange();
void OnUserConfirmChange();
std::vector<ZONE*>& GetOriginalZoneList() { return m_originalZoneList; }
std::vector<ZONE*>& GetClonedZoneList() { return m_clonedZoneList; }
std::unordered_map<ZONE*, std::shared_ptr<ZONE>>& GetZonesCloneMap() { return m_zonesCloneMap; }
private:
std::unordered_map<ZONE*, std::shared_ptr<ZONE>> m_zonesCloneMap;