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;
 
  261        size_t typeId = aProperty->
TypeHash();
 
  269            ret = 
new wxEnumProperty( wxPG_LABEL, wxPG_LABEL,
 
  270                                      const_cast<wxPGChoices&
>( aProperty->
Choices() ) );
 
  274            ret = 
new wxIntProperty();
 
  276        else if( typeId == 
TYPE_HASH( 
unsigned int ) || typeId == 
TYPE_HASH( 
unsigned long ) )
 
  278            ret = 
new wxUIntProperty();
 
  282            ret = 
new wxFloatProperty();
 
  288        else if( typeId == 
TYPE_HASH( wxString ) )
 
  298            wxFAIL_MSG( wxString::Format( wxS( 
"Property %s not supported by PGPropertyFactory" ),
 
  299                                          aProperty->
Name() ) );
 
  300            ret = 
new wxPropertyCategory();
 
  301            ret->Enable( 
false );
 
  310        ret->SetLabel( wxGetTranslation( aProperty->
Name() ) );
 
  311        ret->SetName( aProperty->
Name() );
 
  312        ret->SetHelpString( wxGetTranslation( aProperty->
Name() ) );
 
  313        ret->SetClientData( 
const_cast<PROPERTY_BASE*
>( aProperty ) );
 
 
  333#if wxCHECK_VERSION( 3, 3, 0 ) 
  335                                            wxPGPropValFormatFlags aFlags ) 
const 
  342    wxCHECK_MSG( 
false, 
false, wxS( 
"PGPROPERTY_DISTANCE::StringToDistance should not be used." ) );
 
 
  346#if wxCHECK_VERSION( 3, 3, 0 ) 
  348                                                wxPGPropValFormatFlags aFlags ) 
const 
  353    if( aVariant.GetType() == wxPG_VARIANT_TYPE_DOUBLE )
 
  355        double distanceIU = aVariant.GetDouble();
 
  363    if( aVariant.GetType() == wxT( 
"std::optional<int>" ) )
 
  367        if( !variantData->Value().has_value() )
 
  368            return wxEmptyString;
 
  370        distanceIU = variantData->
Value().value();
 
  372    else if( aVariant.GetType() == wxPG_VARIANT_TYPE_LONG )
 
  374        distanceIU = aVariant.GetLong();
 
  378        wxFAIL_MSG( wxT( 
"Expected int (or std::optional<int>) value type" ) );
 
  379        return wxEmptyString;
 
 
  391        wxIntProperty( wxPG_LABEL, wxPG_LABEL, 0 ),
 
 
  397#if wxCHECK_VERSION( 3, 3, 0 ) 
  399                                     wxPGPropValFormatFlags aArgFlags ) 
const 
  402                                    int aArgFlags ) 
const 
  406    wxCHECK_MSG( 
false, 
false, wxS( 
"PGPROPERTY_AREA::StringToValue should not be used." ) );
 
 
  410#if wxCHECK_VERSION( 3, 3, 0 ) 
  412                                         wxPGPropValFormatFlags aArgFlags ) 
const 
  417    wxCHECK( aVariant.GetType() == wxPG_VARIANT_TYPE_LONGLONG, wxEmptyString );
 
  419    wxLongLongNative areaIU = aVariant.GetLongLong();
 
 
  432        wxUIntProperty( wxPG_LABEL, wxPG_LABEL, 0 ),
 
 
  440    if( aValue.GetType() == wxT( 
"std::optional<int>" ) )
 
  444        if( !data->Value().has_value() )
 
  445            return wxEmptyString;
 
  447        wxVariant value( data->Value().value() );
 
  448        return wxUIntProperty::ValidateValue( value, aValidationInfo );
 
  451    return wxUIntProperty::ValidateValue( aValue, aValidationInfo );
 
 
  463        wxIntProperty( wxPG_LABEL, wxPG_LABEL, 0 ),
 
 
  476        wxFloatProperty( wxPG_LABEL, wxPG_LABEL, 0 )
 
 
  484    wxCHECK_MSG( m_customEditor, wxPGEditor_TextCtrl,
 
  485                 wxT( 
"Make sure to RegisterEditorClass() for PGPROPERTY_RATIO!" ) );
 
  486    return m_customEditor;
 
 
  490#if wxCHECK_VERSION( 3, 3, 0 ) 
  492                                      wxPGPropValFormatFlags aArgFlags ) 
const 
  495                                      int aArgFlags ) 
const 
  499    wxCHECK_MSG( 
false, 
false, wxS( 
"PGPROPERTY_RATIO::StringToValue should not be used." ) );
 
 
  503#if wxCHECK_VERSION( 3, 3, 0 ) 
  505                                          wxPGPropValFormatFlags aArgFlags ) 
const 
  512    if( aVariant.GetType() == wxT( 
"std::optional<double>" ) )
 
  516        if( !variantData->Value().has_value() )
 
  517            return wxEmptyString;
 
  519        value = variantData->
Value().value();
 
  521    else if( aVariant.GetType() == wxPG_VARIANT_TYPE_DOUBLE )
 
  523        value = aVariant.GetDouble();
 
  527        wxFAIL_MSG( wxT( 
"Expected double (or std::optional<double>) value type" ) );
 
  528        return wxEmptyString;
 
  531    return wxString::Format( wxS( 
"%g" ), value );
 
 
  537    if( aValue.GetType() == wxT( 
"std::optional<double>" ) )
 
  541        if( !data->Value().has_value() )
 
  542            return wxEmptyString;
 
  544        wxVariant value( data->Value().value() );
 
  545        return wxFloatProperty::ValidateValue( value, aValidationInfo );
 
  548    return wxFloatProperty::ValidateValue( aValue, aValidationInfo );
 
 
  558#if wxCHECK_VERSION( 3, 3, 0 ) 
  560                                      wxPGPropValFormatFlags aArgFlags ) 
const 
  563                                      int aArgFlags ) 
const 
  568    if( !aText.ToDouble( &value ) )
 
  576    if( aVariant.IsNull() || aVariant.GetDouble() != value )
 
 
  586#if wxCHECK_VERSION( 3, 3, 0 ) 
  588                                          wxPGPropValFormatFlags aArgFlags ) 
const 
  593    if( aVariant.GetType() == wxT( 
"std::optional<double>" ) )
 
  597        if( variantData->Value().has_value() )
 
  598            return wxString::Format( wxS( 
"%g\u00B0" ), variantData->Value().value() / 
m_scale );
 
  600            return wxEmptyString;
 
  602    else if( aVariant.GetType() == wxPG_VARIANT_TYPE_DOUBLE )
 
  604        return wxString::Format( wxS( 
"%g\u00B0" ), aVariant.GetDouble() / 
m_scale );
 
  606    else if( aVariant.GetType() == wxS( 
"EDA_ANGLE" ) )
 
  614        wxCHECK_MSG( 
false, wxEmptyString, wxS( 
"Unexpected variant type in PGPROPERTY_ANGLE" ) );
 
 
  627    wxSize size( 16, -1 );
 
  629    if( wxPropertyGrid* pg = GetGrid() )
 
  630        size = pg->FromDIP( size );
 
 
  637                                          wxPGPaintData& aPaintData )
 
  639    int index = aPaintData.m_choiceItem;
 
  645    if( index < 0 || index >= 
static_cast<int>( GetChoices().GetCount() ) )
 
  650    if( 
color == wxNullColour )
 
  653    aDC.SetPen( *wxTRANSPARENT_PEN );
 
  654    aDC.SetBrush( wxBrush( 
color ) );
 
  655    aDC.DrawRectangle( aRect );
 
  657    aPaintData.m_drawnWidth = aRect.width;
 
 
  661#if wxCHECK_VERSION( 3, 3, 0 ) 
  663                                           wxPGPropValFormatFlags aFlags ) 
const 
  668    if( aValue.GetType() != wxPG_VARIANT_TYPE_STRING )
 
  669        return wxEmptyString;
 
 
  675#if wxCHECK_VERSION( 3, 3, 0 ) 
  677                                       wxPGPropValFormatFlags aArgFlags ) 
const 
  689            wxBoolProperty( aLabel, aName, aValue )
 
 
  697    wxCHECK_MSG( m_customEditor, wxPGEditor_CheckBox,
 
  698                 wxT( 
"Make sure to RegisterEditorClass() for PGPROPERTY_BOOL!" ) );
 
  699    return m_customEditor;
 
 
  705        wxStringProperty( aLabel, aName, aValue.ToCSSString() ),
 
  709#if wxCHECK_VERSION( 3, 3, 1 ) 
  710    SetFlag( wxPGFlags::NoEditor );
 
  711#elif wxCHECK_VERSION( 3, 3, 0 ) 
  712    SetFlag( wxPGPropertyFlags::NoEditor );
 
  714    SetFlag( wxPG_PROP_NOEDITOR );
 
 
  719#if wxCHECK_VERSION( 3, 3, 0 ) 
  721                                        wxPGPropValFormatFlags aArgFlags ) 
const 
  732#if wxCHECK_VERSION( 3, 3, 0 ) 
  734                                            wxPGPropValFormatFlags aFlags ) 
const 
  741    if( aValue.IsType( wxS( 
"COLOR4D" ) ) )
 
  744        return wxStringProperty::ValueToString( aValue, aFlags );
 
 
  751        wxIntProperty( wxPG_LABEL, wxPG_LABEL, 0 ),
 
 
  757#if wxCHECK_VERSION( 3, 3, 0 ) 
  759                                     wxPGPropValFormatFlags aArgFlags ) 
const 
  762                                    int aArgFlags ) 
const 
  765    wxCHECK_MSG( 
false, 
false, wxS( 
"PGPROPERTY_RATIO::StringToValue should not be used." ) );
 
 
  769#if wxCHECK_VERSION( 3, 3, 0 ) 
  771                                         wxPGPropValFormatFlags aArgFlags ) 
const 
  778    if( aVariant.GetType() == wxT( 
"std::optional<int>" ) )
 
  782        if( !variantData->Value().has_value() )
 
  783            return wxEmptyString;
 
  785        value = variantData->
Value().value();
 
  787    else if( aVariant.GetType() == wxPG_VARIANT_TYPE_LONG )
 
  789        value = 
static_cast<int>( aVariant.GetInteger() );
 
  793        wxFAIL_MSG( wxT( 
"Expected int (or std::optional<int>) value type" ) );
 
  794        return wxEmptyString;
 
 
  814        wxEnumProperty( wxPG_LABEL, wxPG_LABEL, const_cast<wxPGChoices&>( aChoices ) )
 
  816    SetEditor( wxS( 
"PG_NET_SELECTOR_EDITOR" ) );
 
 
  822    wxCHECK_MSG( m_customEditor, wxPGEditor_Choice,
 
  823                 wxT( 
"Make sure to RegisterEditorClass() for PGPROPERTY_NET!" ) );
 
  825    return m_customEditor;
 
 
bool Write(wxString &aString) const override
 
static wxVariantData * VariantDataFactory(const wxAny &aAny)
 
static wxVariantData * VariantDataFactory(const wxAny &aAny)
 
bool Write(wxString &aString) const override
 
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
 
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.
 
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
 
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)
 
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
 
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
 
EDA_DRAW_FRAME * m_parentFrame
 
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())
 
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
 
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
 
EDA_DRAW_FRAME * m_parentFrame
 
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_NET
Net selection property.
 
@ 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.