Use explicit wxPGPropertyFlags enum type with wxPGProperty::SetFlag() and similar member functions (thus preventing use of incorrect set of flags). Also now document wxPGProperty flags.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63700 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli
2010-03-17 18:17:19 +00:00
parent bf06fbce41
commit 6cf5edea27
3 changed files with 215 additions and 11 deletions

View File

@@ -367,7 +367,7 @@ protected:
@{ @{
*/ */
enum wxPG_PROPERTY_FLAGS enum wxPGPropertyFlags
{ {
/** Indicates bold font. /** Indicates bold font.
@@ -499,7 +499,9 @@ wxPG_PROP_BEING_DELETED = 0x00200000
Code should automatically take care of this, however. Code should automatically take care of this, however.
*/ */
#define wxPG_PROP_PARENTAL_FLAGS \ #define wxPG_PROP_PARENTAL_FLAGS \
(wxPG_PROP_AGGREGATE|wxPG_PROP_CATEGORY|wxPG_PROP_MISC_PARENT) ((wxPGPropertyFlags)(wxPG_PROP_AGGREGATE | \
wxPG_PROP_CATEGORY | \
wxPG_PROP_MISC_PARENT))
/** @} /** @}
*/ */
@@ -1679,7 +1681,12 @@ public:
return m_value.IsNull(); return m_value.IsNull();
} }
FlagType HasFlag( FlagType flag ) const /**
Returns non-zero if property has given flag set.
@see propgrid_propflags
*/
FlagType HasFlag( wxPGPropertyFlags flag ) const
{ {
return ( m_flags & flag ); return ( m_flags & flag );
} }
@@ -1695,6 +1702,9 @@ public:
*/ */
wxVariant GetAttributesAsList() const; wxVariant GetAttributesAsList() const;
/**
Returns property flags.
*/
FlagType GetFlags() const FlagType GetFlags() const
{ {
return m_flags; return m_flags;
@@ -2009,14 +2019,25 @@ public:
} }
/** /**
Sets given property flag(s). Sets given property flag.
@see propgrid_propflags
*/ */
void SetFlag( FlagType flag ) { m_flags |= flag; } void SetFlag( wxPGPropertyFlags flag )
{
//
// NB: While using wxPGPropertyFlags here makes it difficult to
// combine different flags, it usefully prevents user from
// using incorrect flags (say, wxWindow styles).
m_flags |= flag;
}
/** /**
Sets or clears given property flag(s). Sets or clears given property flag.
@see propgrid_propflags
*/ */
void ChangeFlag( FlagType flag, bool set ) void ChangeFlag( wxPGPropertyFlags flag, bool set )
{ {
if ( set ) if ( set )
m_flags |= flag; m_flags |= flag;
@@ -2024,7 +2045,12 @@ public:
m_flags &= ~flag; m_flags &= ~flag;
} }
void SetFlagRecursively( FlagType flag, bool set ); /**
Sets or clears given property flag, recursively.
@see propgrid_propflags
*/
void SetFlagRecursively( wxPGPropertyFlags flag, bool set );
void SetHelpString( const wxString& helpString ) void SetHelpString( const wxString& helpString )
{ {

View File

@@ -168,6 +168,149 @@
*/ */
/** @section propgrid_propflags wxPGProperty Flags
@{
*/
enum wxPGPropertyFlags
{
/** Indicates bold font.
*/
wxPG_PROP_MODIFIED = 0x0001,
/** Disables ('greyed' text and editor does not activate) property.
*/
wxPG_PROP_DISABLED = 0x0002,
/** Hider button will hide this property.
*/
wxPG_PROP_HIDDEN = 0x0004,
/** This property has custom paint image just in front of its value.
If property only draws custom images into a popup list, then this
flag should not be set.
*/
wxPG_PROP_CUSTOMIMAGE = 0x0008,
/** Do not create text based editor for this property (but button-triggered
dialog and choice are ok).
*/
wxPG_PROP_NOEDITOR = 0x0010,
/** Property is collapsed, ie. it's children are hidden.
*/
wxPG_PROP_COLLAPSED = 0x0020,
/**
If property is selected, then indicates that validation failed for pending
value.
If property is not selected, then indicates that the the actual property
value has failed validation (NB: this behavior is not currently supported,
but may be used in future).
*/
wxPG_PROP_INVALID_VALUE = 0x0040,
// 0x0080,
/** Switched via SetWasModified(). Temporary flag - only used when
setting/changing property value.
*/
wxPG_PROP_WAS_MODIFIED = 0x0200,
/**
If set, then child properties (if any) are private, and should be
"invisible" to the application.
*/
wxPG_PROP_AGGREGATE = 0x0400,
/** If set, then child properties (if any) are copies and should not
be deleted in dtor.
*/
wxPG_PROP_CHILDREN_ARE_COPIES = 0x0800,
/**
Classifies this item as a non-category.
Used for faster item type identification.
*/
wxPG_PROP_PROPERTY = 0x1000,
/**
Classifies this item as a category.
Used for faster item type identification.
*/
wxPG_PROP_CATEGORY = 0x2000,
/** Classifies this item as a property that has children, but is not aggregate
(ie children are not private).
*/
wxPG_PROP_MISC_PARENT = 0x4000,
/** Property is read-only. Editor is still created for wxTextCtrl-based
property editors. For others, editor is not usually created because
they do implement wxTE_READONLY style or equivalent.
*/
wxPG_PROP_READONLY = 0x8000,
//
// NB: FLAGS ABOVE 0x8000 CANNOT BE USED WITH PROPERTY ITERATORS
//
/** Property's value is composed from values of child properties.
@remarks
This flag cannot be used with property iterators.
*/
wxPG_PROP_COMPOSED_VALUE = 0x00010000,
/** Common value of property is selectable in editor.
@remarks
This flag cannot be used with property iterators.
*/
wxPG_PROP_USES_COMMON_VALUE = 0x00020000,
/** Property can be set to unspecified value via editor.
Currently, this applies to following properties:
- wxIntProperty, wxUIntProperty, wxFloatProperty, wxEditEnumProperty:
Clear the text field
@remarks
This flag cannot be used with property iterators.
*/
wxPG_PROP_AUTO_UNSPECIFIED = 0x00040000,
/** Indicates the bit useable by derived properties.
*/
wxPG_PROP_CLASS_SPECIFIC_1 = 0x00080000,
/** Indicates the bit useable by derived properties.
*/
wxPG_PROP_CLASS_SPECIFIC_2 = 0x00100000,
/** Indicates that the property is being deleted and should be ignored.
*/
wxPG_PROP_BEING_DELETED = 0x00200000
};
/** Topmost flag.
*/
#define wxPG_PROP_MAX wxPG_PROP_AUTO_UNSPECIFIED
/** Property with children must have one of these set, otherwise iterators
will not work correctly.
Code should automatically take care of this, however.
*/
#define wxPG_PROP_PARENTAL_FLAGS \
((wxPGPropertyFlags)(wxPG_PROP_AGGREGATE | \
wxPG_PROP_CATEGORY | \
wxPG_PROP_MISC_PARENT))
/** @}
*/
/** /**
@class wxPGProperty @class wxPGProperty
@@ -987,6 +1130,13 @@ public:
*/ */
bool AreChildrenComponents() const; bool AreChildrenComponents() const;
/**
Sets or clears given property flag.
@see propgrid_propflags
*/
void ChangeFlag( wxPGPropertyFlags flag, bool set );
/** /**
Deletes children of the property. Deletes children of the property.
*/ */
@@ -1105,6 +1255,11 @@ public:
*/ */
const wxPGEditor* GetEditorClass() const; const wxPGEditor* GetEditorClass() const;
/**
Returns property flags.
*/
FlagType GetFlags() const;
/** Returns property grid where property lies. */ /** Returns property grid where property lies. */
wxPropertyGrid* GetGrid() const; wxPropertyGrid* GetGrid() const;
@@ -1209,6 +1364,13 @@ public:
*/ */
int GetY() const; int GetY() const;
/**
Returns non-zero if property has given flag set.
@see propgrid_propflags
*/
FlagType HasFlag( wxPGPropertyFlags flag ) const;
/** /**
Returns @true if property has even one visible child. Returns @true if property has even one visible child.
*/ */
@@ -1398,6 +1560,20 @@ public:
*/ */
void SetDefaultValue( wxVariant& value ); void SetDefaultValue( wxVariant& value );
/**
Sets given property flag.
@see propgrid_propflags
*/
void SetFlag( wxPGPropertyFlags flag );
/**
Sets or clears given property flag, recursively.
@see propgrid_propflags
*/
void SetFlagRecursively( wxPGPropertyFlags flag, bool set );
/** /**
Sets property's help string, which is shown, for example, in Sets property's help string, which is shown, for example, in
wxPropertyGridManager's description text box. wxPropertyGridManager's description text box.

View File

@@ -1067,7 +1067,8 @@ bool wxPGProperty::StringToValue( wxVariant& variant, const wxString& text, int
// Add only if editable or setting programmatically // Add only if editable or setting programmatically
if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) || if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) ||
!child->HasFlag(wxPG_PROP_DISABLED|wxPG_PROP_READONLY) ) (!child->HasFlag(wxPG_PROP_DISABLED) &&
!child->HasFlag(wxPG_PROP_READONLY)) )
{ {
if ( len > 0 ) if ( len > 0 )
{ {
@@ -1147,7 +1148,8 @@ bool wxPGProperty::StringToValue( wxVariant& variant, const wxString& text, int
wxVariant variant(oldChildValue); wxVariant variant(oldChildValue);
if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) || if ( (argFlags & wxPG_PROGRAMMATIC_VALUE) ||
!child->HasFlag(wxPG_PROP_DISABLED|wxPG_PROP_READONLY) ) (!child->HasFlag(wxPG_PROP_DISABLED) &&
!child->HasFlag(wxPG_PROP_READONLY)) )
{ {
wxString childName = child->GetBaseName(); wxString childName = child->GetBaseName();
@@ -1427,7 +1429,7 @@ void wxPGProperty::SetValueInEvent( wxVariant value ) const
GetGrid()->ValueChangeInEvent(value); GetGrid()->ValueChangeInEvent(value);
} }
void wxPGProperty::SetFlagRecursively( FlagType flag, bool set ) void wxPGProperty::SetFlagRecursively( wxPGPropertyFlags flag, bool set )
{ {
ChangeFlag(flag, set); ChangeFlag(flag, set);