23#include <wx/propgrid/propgrid.h>
44 : wxAnyToVariantRegistration( factory )
66 return wxTypeId(a) == wxTypeId(b);
74 new wxAnyValueTypeImpl<std::optional<int>>() );
78 s_wxAnyToSTD_OPTIONAL_INT_VARIANTRegistration(
86 : wxAnyToVariantRegistration( factory )
108 return wxTypeId(a) == wxTypeId(b);
116 new wxAnyValueTypeImpl<std::optional<double>>() );
120 s_wxAnyToSTD_OPTIONAL_DOUBLE_VARIANTRegistration(
128 : wxAnyToVariantRegistration( factory )
150 return wxTypeId(a) == wxTypeId(b);
157wxAnyValueTypeScopedPtr
169 : wxAnyToVariantRegistration( factory )
191 return wxTypeId(a) == wxTypeId(b);
199 new wxAnyValueTypeImpl<KIGFX::COLOR4D>() );
208 wxPGProperty* ret =
nullptr;
257 size_t typeId = aProperty->
TypeHash();
263 ret =
new wxEnumProperty( wxPG_LABEL, wxPG_LABEL,
264 const_cast<wxPGChoices&
>( aProperty->
Choices() ) );
268 ret =
new wxIntProperty();
270 else if( typeId ==
TYPE_HASH(
unsigned int ) || typeId ==
TYPE_HASH(
unsigned long ) )
272 ret =
new wxUIntProperty();
276 ret =
new wxFloatProperty();
282 else if( typeId ==
TYPE_HASH( wxString ) )
292 wxFAIL_MSG( wxString::Format( wxS(
"Property %s not supported by PGPropertyFactory" ),
293 aProperty->
Name() ) );
294 ret =
new wxPropertyCategory();
295 ret->Enable(
false );
304 ret->SetLabel( wxGetTranslation( aProperty->
Name() ) );
305 ret->SetName( aProperty->
Name() );
306 ret->SetHelpString( wxGetTranslation( aProperty->
Name() ) );
307 ret->SetClientData(
const_cast<PROPERTY_BASE*
>( aProperty ) );
316 m_parentFrame( aParentFrame ),
317 m_coordType( aCoordType )
327#if wxCHECK_VERSION( 3, 3, 0 )
329 wxPGPropValFormatFlags aFlags )
const
336 wxCHECK_MSG(
false,
false, wxS(
"PGPROPERTY_DISTANCE::StringToDistance should not be used." ) );
340#if wxCHECK_VERSION( 3, 3, 0 )
342 wxPGPropValFormatFlags aFlags )
const
349 if( aVariant.GetType() == wxT(
"std::optional<int>" ) )
353 if( !variantData->Value().has_value() )
354 return wxEmptyString;
356 distanceIU = variantData->
Value().value();
358 else if( aVariant.GetType() == wxPG_VARIANT_TYPE_LONG )
360 distanceIU = aVariant.GetLong();
364 wxFAIL_MSG( wxT(
"Expected int (or std::optional<int>) value type" ) );
365 return wxEmptyString;
370 distanceIU = transforms.
ToDisplay(
static_cast<long long int>( distanceIU ), m_coordType );
377 wxIntProperty( wxPG_LABEL, wxPG_LABEL, 0 ),
378 m_parentFrame( aParentFrame )
383#if wxCHECK_VERSION( 3, 3, 0 )
385 wxPGPropValFormatFlags aArgFlags )
const
388 int aArgFlags )
const
392 wxCHECK_MSG(
false,
false, wxS(
"PGPROPERTY_AREA::StringToValue should not be used." ) );
396#if wxCHECK_VERSION( 3, 3, 0 )
398 wxPGPropValFormatFlags aArgFlags )
const
403 wxCHECK( aVariant.GetType() == wxPG_VARIANT_TYPE_LONGLONG, wxEmptyString );
405 wxLongLongNative areaIU = aVariant.GetLongLong();
418 wxUIntProperty( wxPG_LABEL, wxPG_LABEL, 0 ),
426 if( aValue.GetType() == wxT(
"std::optional<int>" ) )
430 if( !data->Value().has_value() )
431 return wxEmptyString;
433 wxVariant value( data->Value().value() );
434 return wxUIntProperty::ValidateValue( value, aValidationInfo );
437 return wxUIntProperty::ValidateValue( aValue, aValidationInfo );
449 wxIntProperty( wxPG_LABEL, wxPG_LABEL, 0 ),
462 wxFloatProperty( wxPG_LABEL, wxPG_LABEL, 0 )
470 wxCHECK_MSG( m_customEditor, wxPGEditor_TextCtrl,
471 wxT(
"Make sure to RegisterEditorClass() for PGPROPERTY_RATIO!" ) );
472 return m_customEditor;
476#if wxCHECK_VERSION( 3, 3, 0 )
478 wxPGPropValFormatFlags aArgFlags )
const
481 int aArgFlags )
const
485 wxCHECK_MSG(
false,
false, wxS(
"PGPROPERTY_RATIO::StringToValue should not be used." ) );
489#if wxCHECK_VERSION( 3, 3, 0 )
491 wxPGPropValFormatFlags aArgFlags )
const
498 if( aVariant.GetType() == wxT(
"std::optional<double>" ) )
502 if( !variantData->Value().has_value() )
503 return wxEmptyString;
505 value = variantData->
Value().value();
507 else if( aVariant.GetType() == wxPG_VARIANT_TYPE_DOUBLE )
509 value = aVariant.GetDouble();
513 wxFAIL_MSG( wxT(
"Expected double (or std::optional<double>) value type" ) );
514 return wxEmptyString;
517 return wxString::Format( wxS(
"%g" ), value );
523 if( aValue.GetType() == wxT(
"std::optional<double>" ) )
527 if( !data->Value().has_value() )
528 return wxEmptyString;
530 wxVariant value( data->Value().value() );
531 return wxFloatProperty::ValidateValue( value, aValidationInfo );
534 return wxFloatProperty::ValidateValue( aValue, aValidationInfo );
544#if wxCHECK_VERSION( 3, 3, 0 )
546 wxPGPropValFormatFlags aArgFlags )
const
549 int aArgFlags )
const
554 if( !aText.ToDouble( &value ) )
562 if( aVariant.IsNull() || aVariant.GetDouble() != value )
572#if wxCHECK_VERSION( 3, 3, 0 )
574 wxPGPropValFormatFlags aArgFlags )
const
579 if( aVariant.GetType() == wxT(
"std::optional<double>" ) )
583 if( variantData->Value().has_value() )
584 return wxString::Format( wxS(
"%g\u00B0" ), variantData->Value().value() / m_scale );
586 return wxEmptyString;
588 else if( aVariant.GetType() == wxPG_VARIANT_TYPE_DOUBLE )
590 return wxString::Format( wxS(
"%g\u00B0" ), aVariant.GetDouble() / m_scale );
592 else if( aVariant.GetType() == wxS(
"EDA_ANGLE" ) )
600 wxCHECK_MSG(
false, wxEmptyString, wxS(
"Unexpected variant type in PGPROPERTY_ANGLE" ) );
613 wxSize size( 16, -1 );
615 if( wxPropertyGrid* pg = GetGrid() )
616 size = pg->FromDIP( size );
623 wxPGPaintData& aPaintData )
625 int index = aPaintData.m_choiceItem;
631 if( index < 0 || index >=
static_cast<int>( GetChoices().GetCount() ) )
636 if(
color == wxNullColour )
639 aDC.SetPen( *wxTRANSPARENT_PEN );
640 aDC.SetBrush( wxBrush(
color ) );
641 aDC.DrawRectangle( aRect );
643 aPaintData.m_drawnWidth = aRect.width;
647#if wxCHECK_VERSION( 3, 3, 0 )
649 wxPGPropValFormatFlags aFlags )
const
654 if( aValue.GetType() != wxPG_VARIANT_TYPE_STRING )
655 return wxEmptyString;
661#if wxCHECK_VERSION( 3, 3, 0 )
663 wxPGPropValFormatFlags aArgFlags )
const
675 wxBoolProperty( aLabel, aName, aValue )
683 wxCHECK_MSG( m_customEditor, wxPGEditor_CheckBox,
684 wxT(
"Make sure to RegisterEditorClass() for PGPROPERTY_BOOL!" ) );
685 return m_customEditor;
691 wxStringProperty( aLabel, aName, aValue.ToCSSString() ),
692 m_backgroundColor( aBackgroundColor )
695#if wxCHECK_VERSION( 3, 3, 0 )
696 SetFlag( wxPGPropertyFlags::NoEditor );
698 SetFlag( wxPG_PROP_NOEDITOR );
703#if wxCHECK_VERSION( 3, 3, 0 )
705 wxPGPropValFormatFlags aArgFlags )
const
716#if wxCHECK_VERSION( 3, 3, 0 )
718 wxPGPropValFormatFlags aFlags )
const
725 if( aValue.IsType( wxS(
"COLOR4D" ) ) )
728 return wxStringProperty::ValueToString( aValue, aFlags );
735 wxIntProperty( wxPG_LABEL, wxPG_LABEL, 0 ),
736 m_parentFrame( aParentFrame )
741#if wxCHECK_VERSION( 3, 3, 0 )
743 wxPGPropValFormatFlags aArgFlags )
const
746 int aArgFlags )
const
749 wxCHECK_MSG(
false,
false, wxS(
"PGPROPERTY_RATIO::StringToValue should not be used." ) );
753#if wxCHECK_VERSION( 3, 3, 0 )
755 wxPGPropValFormatFlags aArgFlags )
const
762 if( aVariant.GetType() == wxT(
"std::optional<int>" ) )
766 if( !variantData->Value().has_value() )
767 return wxEmptyString;
769 value = variantData->
Value().value();
771 else if( aVariant.GetType() == wxPG_VARIANT_TYPE_LONG )
773 value =
static_cast<int>( aVariant.GetInteger() );
777 wxFAIL_MSG( wxT(
"Expected int (or std::optional<int>) value type" ) );
778 return wxEmptyString;
static wxVariantData * VariantDataFactory(const wxAny &aAny)
static wxVariantData * VariantDataFactory(const wxAny &aAny)
The base class for create windows for drawing purpose.
A color representation with 4 components: red, green, blue, alpha.
A wxEnumProperty that displays a color next to the enum value.
void SetScale(double aScale)
wxString ValueToString(wxVariant &aVariant, int aArgFlags=0) const override
wxValidator * DoGetValidator() const override
Do not perform PG validation; the UX is not what we want.
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const override
PGPROPERTY_AREA(EDA_DRAW_FRAME *aParentFrame)
wxString ValueToString(wxVariant &aVariant, int aArgFlags=0) const override
wxValidator * DoGetValidator() const override
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const override
const wxPGEditor * DoGetEditorClass() const override
PGPROPERTY_BOOL(const wxString &aLabel=wxPG_LABEL, const wxString &aName=wxPG_LABEL, bool aValue=false)
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aFlags=0) const override
wxString ValueToString(wxVariant &aValue, int aFlags=0) const override
PGPROPERTY_COLOR4D(const wxString &aLabel=wxPG_LABEL, const wxString &aName=wxPG_LABEL, KIGFX::COLOR4D aValue=KIGFX::COLOR4D::UNSPECIFIED, KIGFX::COLOR4D aBackground=KIGFX::COLOR4D::UNSPECIFIED)
wxColour GetColor(int aValue)
wxSize OnMeasureImage(int aItem=-1) const override
void OnCustomPaint(wxDC &aDC, const wxRect &aRect, wxPGPaintData &aPaintData) override
Customized wxPGProperty class to handle angles.
PGPROPERTY_COORD(EDA_DRAW_FRAME *aParentFrame, ORIGIN_TRANSFORMS::COORD_TYPES_T aCoordType)
wxValidator * DoGetValidator() const override
wxString DistanceToString(wxVariant &aVariant, int aArgFlags=0) const
bool StringToDistance(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const
virtual ~PGPROPERTY_DISTANCE()=0
PGPROPERTY_DISTANCE(EDA_DRAW_FRAME *aParentFrame, ORIGIN_TRANSFORMS::COORD_TYPES_T aCoordType)
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
const wxPGEditor * DoGetEditorClass() const override
wxValidator * DoGetValidator() const override
bool ValidateValue(wxVariant &aValue, wxPGValidationInfo &aValidationInfo) 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
bool StringToValue(wxVariant &aVariant, const wxString &aText, int aArgFlags=0) const override
wxString ValueToString(wxVariant &aVariant, int aArgFlags=0) const override
PGPROPERTY_TIME(EDA_DRAW_FRAME *aParentFrame)
wxValidator * DoGetValidator() const override
bool ValidateValue(wxVariant &aValue, wxPGValidationInfo &aValidationInfo) const override
static const wxString EDITOR_NAME
static const wxString EDITOR_NAME
static const wxString EDITOR_NAME
static wxString BuildEditorName(EDA_DRAW_FRAME *aFrame)
virtual size_t TypeHash() const =0
Return type-id of the property type.
PROPERTY_DISPLAY Display() const
ORIGIN_TRANSFORMS::COORD_TYPES_T CoordType() const
virtual bool HasChoices() const
Return true if this PROPERTY has a limited set of possible values.
const wxString & Name() const
virtual const wxPGChoices & Choices() const
Return a limited set of possible values (e.g.
std::optional< double > Value() const
static wxVariantData * VariantDataFactory(const wxAny &aAny)
std::optional< int > Value() const
static wxVariantData * VariantDataFactory(const wxAny &aAny)
wxAnyToCOLOR4D_VARIANTRegistrationImpl(wxVariantDataFactory factory)
static wxAnyValueType * GetInstance()
static bool AreSameClasses(const wxAnyValueType &a, const wxAnyValueType &b)
static bool IsSameClass(const wxAnyValueType *otherType)
virtual wxAnyValueType * GetAssociatedType() override
static wxAnyValueTypeScopedPtr s_instance
static wxAnyValueTypeScopedPtr s_instance
static bool IsSameClass(const wxAnyValueType *otherType)
virtual wxAnyValueType * GetAssociatedType() override
static wxAnyValueType * GetInstance()
wxAnyToEDA_ANGLE_VARIANTRegistrationImpl(wxVariantDataFactory factory)
static bool AreSameClasses(const wxAnyValueType &a, const wxAnyValueType &b)
static bool IsSameClass(const wxAnyValueType *otherType)
static wxAnyValueType * GetInstance()
wxAnyToSTD_OPTIONAL_DOUBLE_VARIANTRegistrationImpl(wxVariantDataFactory factory)
static wxAnyValueTypeScopedPtr s_instance
virtual wxAnyValueType * GetAssociatedType() override
static bool AreSameClasses(const wxAnyValueType &a, const wxAnyValueType &b)
static bool AreSameClasses(const wxAnyValueType &a, const wxAnyValueType &b)
static wxAnyValueTypeScopedPtr s_instance
virtual wxAnyValueType * GetAssociatedType() override
static wxAnyValueType * GetInstance()
static bool IsSameClass(const wxAnyValueType *otherType)
wxAnyToSTD_OPTIONAL_INT_VARIANTRegistrationImpl(wxVariantDataFactory factory)
This file contains miscellaneous commonly used macros and functions.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
wxPGProperty * PGPropertyFactory(const PROPERTY_BASE *aProperty, EDA_DRAW_FRAME *aFrame)
Customized abstract wxPGProperty class to handle coordinate/size units.
PROPERTY_DISPLAY
Common property types.
@ PT_DEGREE
Angle expressed in degrees.
@ PT_COORD
Coordinate expressed in distance units (mm/inch)
@ PT_DECIDEGREE
Angle expressed in decidegrees.
@ PT_AREA
Area expressed in distance units-squared (mm/inch)
@ PT_DEFAULT
Default property for a given type.
@ PT_SIZE
Size expressed in distance units (mm/inch)
@ PT_TIME
Time expressed in ps.
wxString UnescapeString(const wxString &aSource)
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
Custom text control validator definitions.