KiCad PCB EDA Suite
dialog_rule_area_properties.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include <kiface_base.h>
27#include <confirm.h>
28#include <pcb_edit_frame.h>
29#include <pcbnew_settings.h>
30#include <zone_settings.h>
32#include <widgets/unit_binder.h>
33#include <wx/statbox.h>
34
35#define LAYER_LIST_COLUMN_CHECK 0
36#define LAYER_LIST_COLUMN_ICON 1
37#define LAYER_LIST_COLUMN_NAME 2
38#define LAYER_LIST_ROW_ALL_INNER_LAYERS 1
39
40
42{
43public:
45 CONVERT_SETTINGS* aConvertSettings );
46
47private:
48 bool TransferDataToWindow() override;
49 bool TransferDataFromWindow() override;
50
51 void OnLayerSelection( wxDataViewEvent& event ) override;
52
53private:
59
63};
64
65
67 CONVERT_SETTINGS* aConvertSettings )
68{
69 DIALOG_RULE_AREA_PROPERTIES dlg( aCaller, aZoneSettings, aConvertSettings );
70
71 return dlg.ShowModal();
72}
73
74
76 ZONE_SETTINGS* aSettings,
77 CONVERT_SETTINGS* aConvertSettings ) :
79 m_outlineHatchPitch( aParent, m_stBorderHatchPitchText,
80 m_outlineHatchPitchCtrl, m_outlineHatchUnits ),
81 m_convertSettings( aConvertSettings ),
82 m_cbIgnoreLineWidths( nullptr ),
83 m_cbDeleteOriginals( nullptr )
84{
85 m_parent = aParent;
86
87 m_ptr = aSettings;
88 m_zonesettings = *aSettings;
89
90 if( aConvertSettings )
91 {
92 wxBoxSizer* bConvertSizer = new wxBoxSizer( wxVERTICAL );
93
94 wxStaticText* conversionSettingsLabel = new wxStaticText( this, wxID_ANY,
95 _( "Conversion settings:" ) );
96 bConvertSizer->Add( conversionSettingsLabel, 0, wxLEFT|wxRIGHT|wxEXPAND, 5 );
97
98 m_cbIgnoreLineWidths = new wxCheckBox( this, wxID_ANY,
99 _( "Ignore source object line widths" ) );
100 bConvertSizer->Add( m_cbIgnoreLineWidths, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
101
102 m_cbDeleteOriginals = new wxCheckBox( this, wxID_ANY,
103 _( "Delete source objects after conversion" ) );
104 bConvertSizer->Add( m_cbDeleteOriginals, 0, wxALL, 5 );
105
106 GetSizer()->Insert( 0, bConvertSizer, 0, wxALL|wxEXPAND, 10 );
107
108 wxStaticLine* line = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
109 wxLI_HORIZONTAL );
110 GetSizer()->Insert( 1, line, 0, wxLEFT|wxRIGHT|wxEXPAND, 10 );
111
112 SetTitle( _( "Convert to Rule Area" ) );
113 }
114
116
117 BOARD* board = m_parent->GetBoard();
119
121
123
125}
126
127
129{
131 {
134 }
135
136 // Init keepout parameters:
142
144
145 m_tcName->SetValue( m_zonesettings.m_Name );
146
148 {
149 case ZONE_BORDER_DISPLAY_STYLE::NO_HATCH: m_OutlineDisplayCtrl->SetSelection( 0 ); break;
152 }
153
155
157
158 return true;
159}
160
161
163{
164 if( event.GetColumn() != 0 )
165 return;
166
167 int row = m_layers->ItemToRow( event.GetItem() );
168 wxVariant layerID;
169 m_layers->GetValue( layerID, row, LAYER_LIST_COLUMN_NAME );
170 bool selected = m_layers->GetToggleValue( row, LAYER_LIST_COLUMN_CHECK );
171
172 // In footprint editor, we have only 3 possible layer selection: C_Cu, inner layers, B_Cu.
173 // So row LAYER_LIST_ROW_ALL_INNER_LAYERS selection is fp editor specific.
174 // in board editor, this row is a normal selection
176 {
177 if( selected )
179 else
180 m_zonesettings.m_Layers &= ~LSET::InternalCuMask();
181 }
182 else
183 {
184 m_zonesettings.m_Layers.set( ToLAYER_ID( layerID.GetInteger() ), selected );
185 }
186}
187
188
190{
192 {
195 }
196
197 // Init keepout parameters:
204
205 if( m_zonesettings.m_Layers.count() == 0 )
206 {
207 DisplayError( this, _( "No layers selected." ) );
208 return false;
209 }
210
211 switch( m_OutlineDisplayCtrl->GetSelection() )
212 {
213 case 0:
215 break;
216 case 1:
218 break;
219 case 2:
221 break;
222 }
223
226 return false;
227
229
230 m_zonesettings.m_Locked = m_cbLocked->GetValue();
231 m_zonesettings.m_ZonePriority = 0; // for a keepout, this param is not used.
232
233 m_zonesettings.m_Name = m_tcName->GetValue();
234
236 return true;
237}
238
239
constexpr EDA_IU_SCALE pcbIUScale
Definition: base_units.h:109
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:265
int GetCopperLayerCount() const
Definition: board.cpp:488
Class DIALOG_RULE_AREA_PROPERTIES_BASE.
void OnLayerSelection(wxDataViewEvent &event) override
ZONE_SETTINGS m_zonesettings
the working copy of zone settings
ZONE_SETTINGS * m_ptr
the pointer to the zone settings of the zone to edit
DIALOG_RULE_AREA_PROPERTIES(PCB_BASE_FRAME *aParent, ZONE_SETTINGS *aSettings, CONVERT_SETTINGS *aConvertSettings)
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
Definition: dialog_shim.h:97
void SetupStandardButtons(std::map< int, wxString > aLabels={})
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
bool IsType(FRAME_T aType) const
LSET is a set of PCB_LAYER_IDs.
Definition: layer_ids.h:530
static LSET AllBoardTechMask()
Return a mask holding board technical layers (no CU layer) on both side.
Definition: lset.cpp:848
static LSET InternalCuMask()
Return a complete set of internal copper layers which is all Cu layers except F_Cu and B_Cu.
Definition: lset.cpp:733
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:773
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
BOARD * GetBoard() const
virtual long long int GetValue()
Return the current value in Internal Units.
virtual bool Validate(double aMin, double aMax, EDA_UNITS aUnits=EDA_UNITS::UNSCALED)
Validate the control against the given range, informing the user of any errors found.
virtual void SetValue(long long int aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion.
ZONE_SETTINGS handles zones parameters.
Definition: zone_settings.h:70
void SetIsRuleArea(bool aEnable)
const bool GetDoNotAllowCopperPour() const
void SetDoNotAllowVias(bool aEnable)
const bool GetDoNotAllowFootprints() const
const bool GetDoNotAllowVias() const
void SetDoNotAllowTracks(bool aEnable)
const bool GetDoNotAllowTracks() const
unsigned m_ZonePriority
Definition: zone_settings.h:81
void SetupLayersList(wxDataViewListCtrl *aList, PCB_BASE_FRAME *aFrame, LSET aLayers, bool aFpEditorMode)
A helper routine for the various zone dialogs (copper, non-copper, keepout).
wxString m_Name
Definition: zone_settings.h:97
void SetDoNotAllowFootprints(bool aEnable)
void SetDoNotAllowPads(bool aEnable)
const bool GetDoNotAllowPads() const
ZONE_BORDER_DISPLAY_STYLE m_ZoneBorderDisplayStyle
Option to show the zone area (outlines only, short hatches or full hatches.
void SetDoNotAllowCopperPour(bool aEnable)
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:280
This file is part of the common library.
#define LAYER_LIST_ROW_ALL_INNER_LAYERS
int InvokeRuleAreaEditor(PCB_BASE_FRAME *aCaller, ZONE_SETTINGS *aZoneSettings, CONVERT_SETTINGS *aConvertSettings)
Function InvokeRuleAreaEditor invokes up a modal dialog window for copper zone editing.
#define LAYER_LIST_COLUMN_NAME
#define LAYER_LIST_COLUMN_CHECK
#define _(s)
@ FRAME_FOOTPRINT_EDITOR
Definition: frame_type.h:41
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition: lset.cpp:926
constexpr int mmToIU(double mm) const
Definition: base_units.h:89
#define ZONE_BORDER_HATCH_MINDIST_MM
Definition: zones.h:40
#define ZONE_BORDER_HATCH_MAXDIST_MM
Definition: zones.h:41