KiCad PCB EDA Suite
Loading...
Searching...
No Matches
drc_re_custom_rule_constraint_data.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_RE_CUSTOM_RULE_CONSTRAINT_DATA_H_
21#define DRC_RE_CUSTOM_RULE_CONSTRAINT_DATA_H_
22
24
30{
31public:
33
34 DRC_RE_CUSTOM_RULE_CONSTRAINT_DATA( int aId, int aParentId, const wxString& aRuleName ) :
35 DRC_RE_BASE_CONSTRAINT_DATA( aId, aParentId, aRuleName )
36 {
37 }
38
41 {
42 }
43
44 wxString GetRuleText() const { return m_ruleText; }
45
46 void SetRuleText( const wxString& aText ) { m_ruleText = aText; }
47
48 wxString GenerateRule( const RULE_GENERATION_CONTEXT& aContext ) override
49 {
50 if( m_ruleText.IsEmpty() )
51 return wxEmptyString;
52
53 wxString ruleName = aContext.ruleName;
54 ruleName.Replace( wxS( "\"" ), wxS( "\\\"" ) );
55
56 wxString rule;
57 rule << wxS( "(rule \"" ) << ruleName << wxS( "\"\n" );
58
59 if( !aContext.comment.IsEmpty() )
60 {
61 wxArrayString lines = wxSplit( aContext.comment, '\n', '\0' );
62
63 for( const wxString& line : lines )
64 {
65 if( line.IsEmpty() )
66 continue;
67
68 rule << wxS( "\t# " ) << line << wxS( "\n" );
69 }
70 }
71
72 rule << m_ruleText << wxS( ")" );
73
74 return rule;
75 }
76
77 VALIDATION_RESULT Validate() const override
78 {
80
81 if( m_ruleText.IsEmpty() )
82 result.AddError( _( "Rule text cannot be empty" ) );
83
84 return result;
85 }
86
87 void CopyFrom( const ICopyable& aSource ) override
88 {
89 const auto& src = dynamic_cast<const DRC_RE_CUSTOM_RULE_CONSTRAINT_DATA&>( aSource );
91 m_ruleText = src.m_ruleText;
92 }
93
94private:
95 wxString m_ruleText;
96};
97
98#endif // DRC_RE_CUSTOM_RULE_CONSTRAINT_DATA_H_
void CopyFrom(const ICopyable &aSource) override
DRC_RE_CUSTOM_RULE_CONSTRAINT_DATA(const DRC_RE_BASE_CONSTRAINT_DATA &aBaseData)
DRC_RE_CUSTOM_RULE_CONSTRAINT_DATA(int aId, int aParentId, const wxString &aRuleName)
VALIDATION_RESULT Validate() const override
Validates the constraint data.
wxString GenerateRule(const RULE_GENERATION_CONTEXT &aContext) override
void CopyFrom(const ICopyable &aSource) override
Abstract interface class to enable polymorphic copying between objects.
#define _(s)
Result of a validation operation.
wxString result
Test unit parsing edge cases and error handling.