24#ifndef DRC_RE_BASE_CONSTRAINT_DATA_H_
25#define DRC_RE_BASE_CONSTRAINT_DATA_H_
140 if( aRuleName.IsEmpty() )
141 return wxString( wxS(
"rule" ) );
144 result.reserve( aRuleName.length() );
146 for( wxUniChar c : aRuleName )
152 else if( wxIsalnum( c ) || c ==
'_' || c ==
'-' || c ==
'.' )
177 wxString
result( aValue );
179 if( !
result.Contains(
'.' ) )
185 if(
result.Last() ==
'.' )
193 wxString formatted = wxString::FromCDouble( aValue, aPrecision );
198 const std::vector<wxString>& aConstraintClauses )
const
203 if( !aContext.
comment.IsEmpty() )
205 wxArrayString lines = wxSplit( aContext.
comment,
'\n',
'\0' );
207 for(
const wxString& line : lines )
212 rule << wxS(
"\t# " ) << line << wxS(
"\n" );
220 if( aContext.
layerClause.StartsWith( wxS(
"(condition " ) ) )
222 wxString expr = aContext.
layerClause.AfterFirst(
'"' ).BeforeLast(
'"' );
224 if( !condExpr.IsEmpty() )
225 condExpr = expr + wxS(
" && " ) + condExpr;
231 rule << wxS(
"\t" ) << aContext.
layerClause << wxS(
"\n" );
235 for(
const wxString& clause : aConstraintClauses )
237 if( clause.IsEmpty() )
240 rule << wxS(
"\t" ) << clause << wxS(
"\n" );
243 if( !condExpr.IsEmpty() )
244 rule << wxS(
"\t(condition \"" ) <<
quoteString( condExpr ) << wxS(
"\")\n" );
BITMAPS
A list of all bitmap identifiers.
wxString GetConstraintCode() const
virtual VALIDATION_RESULT Validate() const
Validates the constraint data.
wxString m_layerSource
Original layer text: "inner", "outer", or layer name.
static wxString quoteString(const wxString &aCondition)
void SetConstraintCode(const wxString &aCode)
static wxString formatDouble(double aValue, int aPrecision=6)
void SetLayers(std::vector< PCB_LAYER_ID > aLayers)
void SetGeneratedRule(const wxString &aRule)
virtual ~DRC_RE_BASE_CONSTRAINT_DATA()=default
SEVERITY GetSeverity() const
void SetLayerSource(const wxString &aSource)
virtual std::vector< wxString > GetConstraintClauses(const RULE_GENERATION_CONTEXT &aContext) const
Returns just the constraint clauses without the rule wrapper.
wxString m_constraintCode
void SetWasEdited(bool aEdited)
virtual std::vector< DRC_RE_FIELD_POSITION > GetFieldPositions() const
Returns the field positions for controls overlaid on the constraint bitmap.
wxString buildRule(const RULE_GENERATION_CONTEXT &aContext, const std::vector< wxString > &aConstraintClauses) const
wxString GetLayerSource()
static wxString trimTrailingZeros(const wxString &aValue)
DRC_RE_BASE_CONSTRAINT_DATA(int aId, int aParentId, const wxString &aRuleName)
std::vector< PCB_LAYER_ID > m_layers
wxString GetRuleCondition()
void SetSeverity(SEVERITY aSeverity)
void SetRuleCondition(const wxString &aRuleCondition)
static wxString sanitizeRuleName(const wxString &aRuleName)
Sanitize a rule name for use in S-expression output.
virtual BITMAPS GetOverlayBitmap() const
Returns the bitmap to use for the overlay panel background.
void CopyFrom(const ICopyable &aSource) override
wxString m_originalRuleText
wxString GetOriginalRuleText() const
virtual wxString GenerateRule(const RULE_GENERATION_CONTEXT &aContext)
void SetOriginalRuleText(const wxString &aText)
std::vector< PCB_LAYER_ID > GetLayers()
wxString GetGeneratedRule() const
DRC_RE_BASE_CONSTRAINT_DATA()=default
Abstract interface class to enable polymorphic copying between objects.
RULE_EDITOR_DATA_BASE()=default
void CopyFrom(const ICopyable &aSource) override
Implementation of the polymorphic CopyFrom method.
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
wxString conditionExpression
Result of a validation operation.
wxString result
Test unit parsing edge cases and error handling.