KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pg_properties.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) 2020-2023 CERN
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * @author Maciej Suminski <[email protected]>
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 3
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License along
20 * with this program. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23#ifndef PG_PROPERTIES_H
24#define PG_PROPERTIES_H
25
26#include <wx/propgrid/propgrid.h>
27#include <wx/propgrid/property.h>
28#include <wx/propgrid/props.h>
29#include <wx/propgrid/advprops.h>
30#include <common.h>
31#include <gal/color4d.h>
32#include <origin_transforms.h>
33
34class PROPERTY_BASE;
35class REGEX_VALIDATOR;
36class EDA_DRAW_FRAME;
37
38wxPGProperty* PGPropertyFactory( const PROPERTY_BASE* aProperty, EDA_DRAW_FRAME* aFrame );
39
42{
43public:
46 virtual ~PGPROPERTY_DISTANCE() = 0;
47
49
50protected:
51#if wxCHECK_VERSION( 3, 3, 0 )
52 bool StringToDistance( wxVariant& aVariant, const wxString& aText,
53 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const;
54 wxString DistanceToString( wxVariant& aVariant,
55 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const;
56#else
57 bool StringToDistance( wxVariant& aVariant, const wxString& aText, int aArgFlags = 0 ) const;
58 wxString DistanceToString( wxVariant& aVariant, int aArgFlags = 0 ) const;
59#endif
60
61protected:
64};
65
66
67class PGPROPERTY_AREA : public wxIntProperty
68{
69public:
70 PGPROPERTY_AREA( EDA_DRAW_FRAME* aParentFrame );
71
72 virtual ~PGPROPERTY_AREA() = default;
73
74protected:
75#if wxCHECK_VERSION( 3, 3, 0 )
76 bool StringToValue( wxVariant& aVariant, const wxString& aText,
77 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
78
79 wxString ValueToString( wxVariant& aVariant,
80 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
81#else
82 bool StringToValue( wxVariant& aVariant, const wxString& aText,
83 int aArgFlags = 0 ) const override;
84
85 wxString ValueToString( wxVariant& aVariant, int aArgFlags = 0 ) const override;
86#endif
87
88 wxValidator* DoGetValidator() const override;
89
90protected:
92};
93
94
95class PGPROPERTY_SIZE : public wxUIntProperty, public PGPROPERTY_DISTANCE
96{
97public:
98 PGPROPERTY_SIZE( EDA_DRAW_FRAME* aParentFrame );
99
100 virtual ~PGPROPERTY_SIZE() = default;
101
102#if wxCHECK_VERSION( 3, 3, 0 )
103 bool StringToValue( wxVariant& aVariant, const wxString& aText,
104 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override
105 {
106 return StringToDistance( aVariant, aText, aFlags );
107 }
108
109 wxString ValueToString( wxVariant& aVariant,
110 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override
111 {
112 return DistanceToString( aVariant, aFlags );
113 }
114#else
115 bool StringToValue( wxVariant& aVariant, const wxString& aText,
116 int aArgFlags = 0 ) const override
117 {
118 return StringToDistance( aVariant, aText, aArgFlags );
119 }
120
121 wxString ValueToString( wxVariant& aVariant, int aArgFlags = 0 ) const override
122 {
123 return DistanceToString( aVariant, aArgFlags );
124 }
125#endif
126
127 bool ValidateValue( wxVariant& aValue, wxPGValidationInfo& aValidationInfo ) const override;
128
129 wxValidator* DoGetValidator() const override;
130};
131
132
133class PGPROPERTY_COORD : public wxIntProperty, public PGPROPERTY_DISTANCE
134{
135public:
137
138 virtual ~PGPROPERTY_COORD() = default;
139
140#if wxCHECK_VERSION( 3, 3, 0 )
141 bool StringToValue( wxVariant& aVariant, const wxString& aText,
142 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override
143 {
144 return StringToDistance( aVariant, aText, aFlags );
145 }
146
147 wxString ValueToString( wxVariant& aVariant,
148 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override
149 {
150 return DistanceToString( aVariant, aFlags );
151 }
152#else
153 bool StringToValue( wxVariant& aVariant, const wxString& aText,
154 int aArgFlags = 0 ) const override
155 {
156 return StringToDistance( aVariant, aText, aArgFlags );
157 }
158
159 wxString ValueToString( wxVariant& aVariant, int aArgFlags = 0 ) const override
160 {
161 return DistanceToString( aVariant, aArgFlags );
162 }
163#endif
164
165 wxValidator* DoGetValidator() const override;
166};
167
168
170class PGPROPERTY_ANGLE : public wxFloatProperty
171{
172public:
174 wxFloatProperty( wxPG_LABEL, wxPG_LABEL, 0 ),
175 m_scale( 1.0 )
176 {
177 }
178
179 virtual ~PGPROPERTY_ANGLE() = default;
180
181#if wxCHECK_VERSION( 3, 3, 0 )
182 bool StringToValue( wxVariant& aVariant, const wxString& aText,
183 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
184
185 wxString ValueToString( wxVariant& aVariant,
186 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
187#else
188 bool StringToValue( wxVariant& aVariant, const wxString& aText,
189 int aArgFlags = 0 ) const override;
190 wxString ValueToString( wxVariant& aVariant, int aArgFlags = 0 ) const override;
191#endif
192
193 void SetScale( double aScale )
194 {
195 m_scale = aScale;
196 }
197
198 wxValidator* DoGetValidator() const override;
199
201 bool ValidateValue( wxVariant&, wxPGValidationInfo& ) const override { return true; }
202
203protected:
205 double m_scale;
206};
207
208
210class PGPROPERTY_COLORENUM : public wxEnumProperty
211{
212public:
213 PGPROPERTY_COLORENUM( wxPGChoices* aChoices ) :
214 wxEnumProperty( wxPG_LABEL, wxPG_LABEL, *aChoices, 0 ),
215 m_colorFunc( []( int aDummy ) { return wxNullColour; } )
216 {
217#if wxCHECK_VERSION( 3, 3, 1 )
218 SetFlag( wxPGFlags::CustomImage );
219#elif wxCHECK_VERSION( 3, 3, 0 )
220 SetFlag( wxPGPropertyFlags::CustomImage );
221#else
222 SetFlag( wxPG_PROP_CUSTOMIMAGE );
223#endif
224 }
225
226 virtual ~PGPROPERTY_COLORENUM() = default;
227
228 wxSize OnMeasureImage( int aItem = -1 ) const override;
229
230 void OnCustomPaint( wxDC& aDC, const wxRect& aRect, wxPGPaintData& aPaintData ) override;
231
232 void SetColorFunc( std::function<wxColour( int aValue )> aFunc )
233 {
234 m_colorFunc = aFunc;
235 }
236
237 wxColour GetColor( int aValue )
238 {
239 return m_colorFunc( aValue );
240 }
241
242protected:
243 std::function<wxColour( int aValue )> m_colorFunc;
244};
245
246
247class PGPROPERTY_RATIO : public wxFloatProperty
248{
249public:
251
252 const wxPGEditor* DoGetEditorClass() const override;
253
254 virtual ~PGPROPERTY_RATIO() = default;
255
256#if wxCHECK_VERSION( 3, 3, 0 )
257 bool StringToValue( wxVariant& aVariant, const wxString& aText,
258 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
259
260 wxString ValueToString( wxVariant& aVariant,
261 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
262#else
263 bool StringToValue( wxVariant& aVariant, const wxString& aText,
264 int aArgFlags = 0 ) const override;
265
266 wxString ValueToString( wxVariant& aVariant, int aArgFlags = 0 ) const override;
267#endif
268
269 bool ValidateValue( wxVariant& aValue, wxPGValidationInfo& aValidationInfo ) const override;
270
271 wxValidator* DoGetValidator() const override;
272};
273
274
275class PGPROPERTY_STRING : public wxStringProperty
276{
277public:
279 wxStringProperty( wxPG_LABEL, wxPG_LABEL, wxEmptyString )
280 {}
281
282 virtual ~PGPROPERTY_STRING() = default;
283
284#if wxCHECK_VERSION( 3, 3, 0 )
285 bool StringToValue( wxVariant& aVariant, const wxString& aText,
286 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
287
288 wxString ValueToString( wxVariant& aVariant,
289 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
290#else
291 wxString ValueToString( wxVariant& aValue, int aFlags = 0 ) const override;
292
293 bool StringToValue( wxVariant& aVariant, const wxString& aString,
294 int aFlags = 0 ) const override;
295#endif
296};
297
298
299class PGPROPERTY_BOOL : public wxBoolProperty
300{
301public:
302 PGPROPERTY_BOOL( const wxString& aLabel = wxPG_LABEL, const wxString& aName = wxPG_LABEL,
303 bool aValue = false );
304
305 virtual ~PGPROPERTY_BOOL() = default;
306
307 const wxPGEditor* DoGetEditorClass() const override;
308};
309
310
311class PGPROPERTY_COLOR4D : public wxStringProperty
312{
313public:
314 PGPROPERTY_COLOR4D( const wxString& aLabel = wxPG_LABEL, const wxString& aName = wxPG_LABEL,
317
318 virtual ~PGPROPERTY_COLOR4D() = default;
319
320#if wxCHECK_VERSION( 3, 3, 0 )
321 bool StringToValue( wxVariant& aVariant, const wxString& aText,
322 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
323
324 wxString ValueToString( wxVariant& aVariant,
325 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
326#else
327 wxString ValueToString( wxVariant& aValue, int aFlags = 0 ) const override;
328
329 bool StringToValue( wxVariant &aVariant, const wxString &aText,
330 int aFlags = 0 ) const override;
331#endif
332
333 void SetBackgroundColor( const KIGFX::COLOR4D& aColor ) { m_backgroundColor = aColor; }
335
336 private:
339};
340
341
342class PGPROPERTY_TIME : public wxIntProperty
343{
344public:
345 PGPROPERTY_TIME( EDA_DRAW_FRAME* aParentFrame );
346
347 virtual ~PGPROPERTY_TIME() = default;
348
349protected:
350#if wxCHECK_VERSION( 3, 3, 0 )
351 bool StringToValue( wxVariant& aVariant, const wxString& aText,
352 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
353
354 wxString ValueToString( wxVariant& aVariant,
355 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
356#else
357 bool StringToValue( wxVariant& aVariant, const wxString& aText,
358 int aArgFlags = 0 ) const override;
359
360 wxString ValueToString( wxVariant& aVariant, int aArgFlags = 0 ) const override;
361#endif
362
363 bool ValidateValue( wxVariant& aValue, wxPGValidationInfo& aValidationInfo ) const override;
364
365 wxValidator* DoGetValidator() const override;
366
367protected:
369};
370
371
372class PGPROPERTY_NET : public wxEnumProperty
373{
374public:
375 PGPROPERTY_NET( const wxPGChoices& aChoices = wxPGChoices() );
376
377 virtual ~PGPROPERTY_NET() = default;
378
379 const wxPGEditor* DoGetEditorClass() const override;
380};
381
382#endif /* PG_PROPERTIES_H */
The base class for create windows for drawing purpose.
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:104
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:398
COORD_TYPES_T
The supported Display Origin Transform types.
void SetScale(double aScale)
wxString ValueToString(wxVariant &aVariant, int aArgFlags=0) const override
double m_scale
< Scale factor to convert between raw and displayed value
wxValidator * DoGetValidator() const override
Do not perform PG validation; the UX is not what we want.
virtual ~PGPROPERTY_ANGLE()=default
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const override
bool ValidateValue(wxVariant &, wxPGValidationInfo &) const override
PGPROPERTY_AREA(EDA_DRAW_FRAME *aParentFrame)
wxString ValueToString(wxVariant &aVariant, int aArgFlags=0) const override
wxValidator * DoGetValidator() const override
virtual ~PGPROPERTY_AREA()=default
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const override
EDA_DRAW_FRAME * m_parentFrame
const wxPGEditor * DoGetEditorClass() const override
PGPROPERTY_BOOL(const wxString &aLabel=wxPG_LABEL, const wxString &aName=wxPG_LABEL, bool aValue=false)
virtual ~PGPROPERTY_BOOL()=default
virtual ~PGPROPERTY_COLOR4D()=default
KIGFX::COLOR4D m_backgroundColor
Used for rendering colors with opacity.
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aFlags=0) const override
wxString ValueToString(wxVariant &aValue, int aFlags=0) const override
const KIGFX::COLOR4D & GetBackgroundColor() const
void SetBackgroundColor(const KIGFX::COLOR4D &aColor)
PGPROPERTY_COLOR4D(const wxString &aLabel=wxPG_LABEL, const wxString &aName=wxPG_LABEL, KIGFX::COLOR4D aValue=KIGFX::COLOR4D::UNSPECIFIED, KIGFX::COLOR4D aBackground=KIGFX::COLOR4D::UNSPECIFIED)
void SetColorFunc(std::function< wxColour(int aValue)> aFunc)
wxColour GetColor(int aValue)
wxSize OnMeasureImage(int aItem=-1) const override
void OnCustomPaint(wxDC &aDC, const wxRect &aRect, wxPGPaintData &aPaintData) override
virtual ~PGPROPERTY_COLORENUM()=default
std::function< wxColour(int aValue)> m_colorFunc
PGPROPERTY_COLORENUM(wxPGChoices *aChoices)
wxString ValueToString(wxVariant &aVariant, int aArgFlags=0) const override
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const override
virtual ~PGPROPERTY_COORD()=default
PGPROPERTY_COORD(EDA_DRAW_FRAME *aParentFrame, ORIGIN_TRANSFORMS::COORD_TYPES_T aCoordType)
wxValidator * DoGetValidator() const override
EDA_DRAW_FRAME * m_parentFrame
ORIGIN_TRANSFORMS::COORD_TYPES_T CoordType() const
wxString DistanceToString(wxVariant &aVariant, int aArgFlags=0) const
bool StringToDistance(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const
virtual ~PGPROPERTY_DISTANCE()=0
ORIGIN_TRANSFORMS::COORD_TYPES_T m_coordType
PGPROPERTY_DISTANCE(EDA_DRAW_FRAME *aParentFrame, ORIGIN_TRANSFORMS::COORD_TYPES_T aCoordType)
PGPROPERTY_NET(const wxPGChoices &aChoices=wxPGChoices())
virtual ~PGPROPERTY_NET()=default
const wxPGEditor * DoGetEditorClass() const override
wxValidator * DoGetValidator() const override
bool ValidateValue(wxVariant &aValue, wxPGValidationInfo &aValidationInfo) const override
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const override
wxString ValueToString(wxVariant &aVariant, int aArgFlags=0) const override
virtual ~PGPROPERTY_RATIO()=default
const wxPGEditor * DoGetEditorClass() const override
virtual ~PGPROPERTY_SIZE()=default
wxValidator * DoGetValidator() const override
bool ValidateValue(wxVariant &aValue, wxPGValidationInfo &aValidationInfo) const override
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const override
wxString ValueToString(wxVariant &aVariant, int aArgFlags=0) const override
PGPROPERTY_SIZE(EDA_DRAW_FRAME *aParentFrame)
wxString ValueToString(wxVariant &aValue, int aFlags=0) const override
bool StringToValue(wxVariant &aVariant, const wxString &aString, int aFlags=0) const override
virtual ~PGPROPERTY_STRING()=default
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const override
wxString ValueToString(wxVariant &aVariant, int aArgFlags=0) const override
EDA_DRAW_FRAME * m_parentFrame
virtual ~PGPROPERTY_TIME()=default
PGPROPERTY_TIME(EDA_DRAW_FRAME *aParentFrame)
wxValidator * DoGetValidator() const override
bool ValidateValue(wxVariant &aValue, wxPGValidationInfo &aValidationInfo) const override
The common library.
wxPGProperty * PGPropertyFactory(const PROPERTY_BASE *aProperty, EDA_DRAW_FRAME *aFrame)
Customized abstract wxPGProperty class to handle coordinate/size units.