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 double GetScale() const { return m_scale; }
199
200 wxValidator* DoGetValidator() const override;
201
203 bool ValidateValue( wxVariant&, wxPGValidationInfo& ) const override { return true; }
204
205protected:
207 double m_scale;
208};
209
210
212class PGPROPERTY_COLORENUM : public wxEnumProperty
213{
214public:
215 PGPROPERTY_COLORENUM( wxPGChoices* aChoices ) :
216 wxEnumProperty( wxPG_LABEL, wxPG_LABEL, *aChoices, 0 ),
217 m_colorFunc( []( int aDummy ) { return wxNullColour; } )
218 {
219#if wxCHECK_VERSION( 3, 3, 1 )
220 SetFlag( wxPGFlags::CustomImage );
221#elif wxCHECK_VERSION( 3, 3, 0 )
222 SetFlag( wxPGPropertyFlags::CustomImage );
223#else
224 SetFlag( wxPG_PROP_CUSTOMIMAGE );
225#endif
226 }
227
228 virtual ~PGPROPERTY_COLORENUM() = default;
229
230 wxSize OnMeasureImage( int aItem = -1 ) const override;
231
232 void OnCustomPaint( wxDC& aDC, const wxRect& aRect, wxPGPaintData& aPaintData ) override;
233
234 void SetColorFunc( std::function<wxColour( int aValue )> aFunc )
235 {
236 m_colorFunc = aFunc;
237 }
238
239 wxColour GetColor( int aValue )
240 {
241 return m_colorFunc( aValue );
242 }
243
244protected:
245 std::function<wxColour( int aValue )> m_colorFunc;
246};
247
248
249class PGPROPERTY_RATIO : public wxFloatProperty
250{
251public:
253
254 const wxPGEditor* DoGetEditorClass() const override;
255
256 virtual ~PGPROPERTY_RATIO() = default;
257
258#if wxCHECK_VERSION( 3, 3, 0 )
259 bool StringToValue( wxVariant& aVariant, const wxString& aText,
260 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
261
262 wxString ValueToString( wxVariant& aVariant,
263 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
264#else
265 bool StringToValue( wxVariant& aVariant, const wxString& aText,
266 int aArgFlags = 0 ) const override;
267
268 wxString ValueToString( wxVariant& aVariant, int aArgFlags = 0 ) const override;
269#endif
270
271 bool ValidateValue( wxVariant& aValue, wxPGValidationInfo& aValidationInfo ) const override;
272
273 wxValidator* DoGetValidator() const override;
274};
275
276
277class PGPROPERTY_STRING : public wxStringProperty
278{
279public:
281 wxStringProperty( wxPG_LABEL, wxPG_LABEL, wxEmptyString )
282 {}
283
284 virtual ~PGPROPERTY_STRING() = default;
285
286#if wxCHECK_VERSION( 3, 3, 0 )
287 bool StringToValue( wxVariant& aVariant, const wxString& aText,
288 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
289
290 wxString ValueToString( wxVariant& aVariant,
291 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
292#else
293 wxString ValueToString( wxVariant& aValue, int aFlags = 0 ) const override;
294
295 bool StringToValue( wxVariant& aVariant, const wxString& aString,
296 int aFlags = 0 ) const override;
297#endif
298};
299
300
301class PGPROPERTY_BOOL : public wxBoolProperty
302{
303public:
304 PGPROPERTY_BOOL( const wxString& aLabel = wxPG_LABEL, const wxString& aName = wxPG_LABEL,
305 bool aValue = false );
306
307 virtual ~PGPROPERTY_BOOL() = default;
308
309 const wxPGEditor* DoGetEditorClass() const override;
310};
311
312
313class PGPROPERTY_COLOR4D : public wxStringProperty
314{
315public:
316 PGPROPERTY_COLOR4D( const wxString& aLabel = wxPG_LABEL, const wxString& aName = wxPG_LABEL,
319
320 virtual ~PGPROPERTY_COLOR4D() = default;
321
322#if wxCHECK_VERSION( 3, 3, 0 )
323 bool StringToValue( wxVariant& aVariant, const wxString& aText,
324 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
325
326 wxString ValueToString( wxVariant& aVariant,
327 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
328#else
329 wxString ValueToString( wxVariant& aValue, int aFlags = 0 ) const override;
330
331 bool StringToValue( wxVariant &aVariant, const wxString &aText,
332 int aFlags = 0 ) const override;
333#endif
334
335 void SetBackgroundColor( const KIGFX::COLOR4D& aColor ) { m_backgroundColor = aColor; }
337
338 private:
341};
342
343
344class PGPROPERTY_TIME : public wxIntProperty
345{
346public:
347 PGPROPERTY_TIME( EDA_DRAW_FRAME* aParentFrame );
348
349 virtual ~PGPROPERTY_TIME() = default;
350
351protected:
352#if wxCHECK_VERSION( 3, 3, 0 )
353 bool StringToValue( wxVariant& aVariant, const wxString& aText,
354 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
355
356 wxString ValueToString( wxVariant& aVariant,
357 wxPGPropValFormatFlags aFlags = wxPGPropValFormatFlags::Null ) const override;
358#else
359 bool StringToValue( wxVariant& aVariant, const wxString& aText,
360 int aArgFlags = 0 ) const override;
361
362 wxString ValueToString( wxVariant& aVariant, int aArgFlags = 0 ) const override;
363#endif
364
365 bool ValidateValue( wxVariant& aValue, wxPGValidationInfo& aValidationInfo ) const override;
366
367 wxValidator* DoGetValidator() const override;
368
369protected:
371};
372
373
374class PGPROPERTY_NET : public wxEnumProperty
375{
376public:
377 PGPROPERTY_NET( const wxPGChoices& aChoices = wxPGChoices() );
378
379 virtual ~PGPROPERTY_NET() = default;
380
381 const wxPGEditor* DoGetEditorClass() const override;
382};
383
384#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:105
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:402
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.
double GetScale() const
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.