KiCad PCB EDA Suite
Loading...
Searching...
No Matches
drc_rule_editor_utils.h
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) 2024 KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20#ifndef DRC_RULE_EDITOR_UTILS_H_
21#define DRC_RULE_EDITOR_UTILS_H_
22
23#include <wx/wx.h>
24#include <wx/object.h>
25
26#include <optional>
27#include <memory>
28#include <vector>
29#include <bitmaps.h>
30
33
34class BOARD;
35class DRC_RULE;
37
39{
40public:
41 using RuleConverter = std::function<std::shared_ptr<DRC_RE_BASE_CONSTRAINT_DATA>( const std::shared_ptr<DRC_RULE>& )>;
42
43 static void RegisterRuleConverter( RuleConverter aConverter );
44
45 static bool IsBoolInputType( const DRC_RULE_EDITOR_CONSTRAINT_NAME& aConstraintType );
46
47 static bool IsNumericInputType( const DRC_RULE_EDITOR_CONSTRAINT_NAME& aConstraintType );
48
49 static std::shared_ptr<DRC_RE_NUMERIC_INPUT_CONSTRAINT_DATA> CreateNumericConstraintData( DRC_RULE_EDITOR_CONSTRAINT_NAME aType );
50
51 static std::shared_ptr<DRC_RE_NUMERIC_INPUT_CONSTRAINT_DATA>
53 const DRC_RE_BASE_CONSTRAINT_DATA& aBase );
54
55 static wxString FormatErrorMessage( int aErrorCount, const wxString& aErrorMessage );
56
57 static std::vector<std::shared_ptr<DRC_RE_BASE_CONSTRAINT_DATA>> ParseRules( const wxString& aRules );
58
59 static bool SaveRules( const wxString& aFilename,
60 const std::vector<std::shared_ptr<DRC_RE_BASE_CONSTRAINT_DATA>>& aRules,
61 const BOARD* aBoard );
62
71 static wxString GetConstraintCode( DRC_RULE_EDITOR_CONSTRAINT_NAME aConstraintType );
72
81 static std::optional<DRC_RULE_EDITOR_CONSTRAINT_NAME> GetConstraintTypeFromCode( const wxString& aCode );
82
90
98 static bool ConstraintFromKicadDrc( const wxString& aCode, DRC_RE_BASE_CONSTRAINT_DATA* aData );
99
111 static bool ValidateNumericCtrl( wxTextCtrl* aTextCtrl, const wxString& aLabel, bool aCanBeZero, int* aErrorCount,
112 wxString* aValidationMessage );
113
125 static bool ValidateIntegerCtrl( wxTextCtrl* aTextCtrl, const wxString& aLabel, bool aCanBeZero, int* aErrorCount,
126 wxString* aValidationMessage );
127
138 static bool ValidateComboCtrl( wxComboBox* aComboBox, const wxString& aLabel, int* aErrorCount,
139 wxString* aValidationMessage );
140
153 static bool ValidateMinMaxCtrl( wxTextCtrl* aMinTextCtrl, wxTextCtrl* aMaxTextCtrl, const wxString& aMinLabel,
154 const wxString& aMaxLabel, int* aErrorCount, wxString* aValidationMessage );
155
173 static bool ValidateMinPreferredMaxCtrl( wxTextCtrl* aMinTextCtrl, wxTextCtrl* aPreferredTextCtrl,
174 wxTextCtrl* aMaxTextCtrl, const wxString& aMinLabel,
175 const wxString& aPreferredLabel, const wxString& aMaxLabel,
176 int* aErrorCount, wxString* aValidationMessage );
177
188 static bool ValidateCheckBoxCtrls( const std::vector<wxCheckBox*>& aCheckboxes, const wxString& aLabel,
189 int* aErrorCount, wxString* aValidationMessage );
190
191 // ==================== Pure Validators (No GUI Dependencies) ====================
192 // These can be used in headless tests and by constraint data classes.
193
203 static bool ValidateNumericValue( double aValue, bool aCanBeZero, const wxString& aLabel,
204 VALIDATION_RESULT* aResult );
205
216 static bool ValidateNumericString( const wxString& aValueStr, bool aCanBeZero, bool aIntegerOnly,
217 const wxString& aLabel, VALIDATION_RESULT* aResult );
218
229 static bool ValidateMinMax( double aMin, double aMax, const wxString& aMinLabel,
230 const wxString& aMaxLabel, VALIDATION_RESULT* aResult );
231
244 static bool ValidateMinPreferredMax( double aMin, double aPreferred, double aMax,
245 const wxString& aMinLabel, const wxString& aPrefLabel,
246 const wxString& aMaxLabel, VALIDATION_RESULT* aResult );
247
256 static bool ValidateAtLeastOneSelected( const std::vector<bool>& aSelected, const wxString& aLabel,
257 VALIDATION_RESULT* aResult );
258
267 static bool ValidateSelection( int aSelectionIndex, const wxString& aLabel,
268 VALIDATION_RESULT* aResult );
269
270 // ==================== Layer Filtering ====================
271
280
290 static wxString TranslateTopBottomLayer( DRC_RULE_EDITOR_CONSTRAINT_NAME aConstraintType, bool aIsTop );
291};
292
293#endif // DRC_RULE_EDITOR_UTILS_H_
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:372
static bool IsNumericInputType(const DRC_RULE_EDITOR_CONSTRAINT_NAME &aConstraintType)
static wxString ConstraintToKicadDrc(DRC_RULE_EDITOR_CONSTRAINT_NAME aType)
Convert a constraint type into the keyword used in a .kicad_drc file.
static bool ValidateNumericValue(double aValue, bool aCanBeZero, const wxString &aLabel, VALIDATION_RESULT *aResult)
Validates a numeric value.
static bool ValidateAtLeastOneSelected(const std::vector< bool > &aSelected, const wxString &aLabel, VALIDATION_RESULT *aResult)
Validates that at least one option is selected.
static bool ValidateSelection(int aSelectionIndex, const wxString &aLabel, VALIDATION_RESULT *aResult)
Validates that a selection has been made (index >= 0).
static wxString GetConstraintCode(DRC_RULE_EDITOR_CONSTRAINT_NAME aConstraintType)
Translate a rule tree node type into the keyword used by the rules file for that constraint.
static bool ValidateNumericCtrl(wxTextCtrl *aTextCtrl, const wxString &aLabel, bool aCanBeZero, int *aErrorCount, wxString *aValidationMessage)
Validates a numeric input control, checking if the value is valid, non-empty, and greater than zero.
static bool ValidateMinMax(double aMin, double aMax, const wxString &aMinLabel, const wxString &aMaxLabel, VALIDATION_RESULT *aResult)
Validates that min <= max.
static bool ConstraintFromKicadDrc(const wxString &aCode, DRC_RE_BASE_CONSTRAINT_DATA *aData)
Populate a constraint data object using a keyword from a .kicad_drc file.
static bool ValidateMinPreferredMaxCtrl(wxTextCtrl *aMinTextCtrl, wxTextCtrl *aPreferredTextCtrl, wxTextCtrl *aMaxTextCtrl, const wxString &aMinLabel, const wxString &aPreferredLabel, const wxString &aMaxLabel, int *aErrorCount, wxString *aValidationMessage)
Validates the minimum, preferred, and maximum value controls, ensuring that:
static wxString FormatErrorMessage(int aErrorCount, const wxString &aErrorMessage)
static std::optional< DRC_RULE_EDITOR_CONSTRAINT_NAME > GetConstraintTypeFromCode(const wxString &aCode)
Resolve a constraint keyword from a rules file into the corresponding rule tree enumeration value.
static bool ValidateComboCtrl(wxComboBox *aComboBox, const wxString &aLabel, int *aErrorCount, wxString *aValidationMessage)
Validates a combo box control, ensuring that a selection has been made.
static bool SaveRules(const wxString &aFilename, const std::vector< std::shared_ptr< DRC_RE_BASE_CONSTRAINT_DATA > > &aRules, const BOARD *aBoard)
static void RegisterRuleConverter(RuleConverter aConverter)
static wxString TranslateTopBottomLayer(DRC_RULE_EDITOR_CONSTRAINT_NAME aConstraintType, bool aIsTop)
Translate a top/bottom selection to the appropriate layer clause or condition.
static bool ValidateCheckBoxCtrls(const std::vector< wxCheckBox * > &aCheckboxes, const wxString &aLabel, int *aErrorCount, wxString *aValidationMessage)
Validates a list of checkboxes, ensuring that at least one option is selected.
static bool ValidateNumericString(const wxString &aValueStr, bool aCanBeZero, bool aIntegerOnly, const wxString &aLabel, VALIDATION_RESULT *aResult)
Validates that a string represents a valid numeric value.
static bool ValidateMinMaxCtrl(wxTextCtrl *aMinTextCtrl, wxTextCtrl *aMaxTextCtrl, const wxString &aMinLabel, const wxString &aMaxLabel, int *aErrorCount, wxString *aValidationMessage)
Validates the minimum and maximum value controls, ensuring that the minimum value is not greater than...
std::function< std::shared_ptr< DRC_RE_BASE_CONSTRAINT_DATA >(const std::shared_ptr< DRC_RULE > &)> RuleConverter
static std::shared_ptr< DRC_RE_NUMERIC_INPUT_CONSTRAINT_DATA > CreateNumericConstraintData(DRC_RULE_EDITOR_CONSTRAINT_NAME aType)
static DRC_LAYER_CATEGORY GetLayerCategoryForConstraint(DRC_RULE_EDITOR_CONSTRAINT_NAME aConstraintType)
Get the layer category for a constraint type.
static bool ValidateMinPreferredMax(double aMin, double aPreferred, double aMax, const wxString &aMinLabel, const wxString &aPrefLabel, const wxString &aMaxLabel, VALIDATION_RESULT *aResult)
Validates that min <= preferred <= max.
static bool ValidateIntegerCtrl(wxTextCtrl *aTextCtrl, const wxString &aLabel, bool aCanBeZero, int *aErrorCount, wxString *aValidationMessage)
Validates an integer input control, ensuring the value is a valid integer, non-empty,...
static bool IsBoolInputType(const DRC_RULE_EDITOR_CONSTRAINT_NAME &aConstraintType)
static std::vector< std::shared_ptr< DRC_RE_BASE_CONSTRAINT_DATA > > ParseRules(const wxString &aRules)
DRC_RULE_EDITOR_CONSTRAINT_NAME
DRC_LAYER_CATEGORY
Layer categories for filtering the layer selector dropdown.
Result of a validation operation.