// Created: 2008-08-23
// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PROPGRID_PROPERTY_H_
#define _WX_PROPGRID_PROPERTY_H_
+#include "wx/defs.h"
+
#if wxUSE_PROPGRID
#include "wx/propgrid/propgriddefs.h"
};
-#ifndef SWIG
-
-
// space between vertical sides of a custom image
#define wxPG_CUSTOM_IMAGE_SPACINGY 1
Base class for wxPropertyGrid cell renderers.
*/
-class WXDLLIMPEXP_PROPGRID wxPGCellRenderer
+class WXDLLIMPEXP_PROPGRID wxPGCellRenderer : public wxObjectRefData
{
public:
- wxPGCellRenderer( unsigned int refCount = 1 )
- : m_refCount(refCount) { }
+ wxPGCellRenderer()
+ : wxObjectRefData() { }
virtual ~wxPGCellRenderer() { }
// Render flags
DontUseCellBgCol
};
- virtual void Render( wxDC& dc,
+ /**
+ Returns @true if rendered something in the foreground (text or
+ bitmap.
+ */
+ virtual bool Render( wxDC& dc,
const wxRect& rect,
const wxPropertyGrid* propertyGrid,
wxPGProperty* property,
wxPGProperty* property,
const wxPGEditor* editor ) const;
- /** Utility to render cell bitmap and set text colour plus bg brush colour.
+ /** Utility to render cell bitmap and set text colour plus bg brush
+ colour.
- Returns image width that, for instance, can be passed to DrawText.
+ @return Returns image width, which, for instance, can be passed to
+ DrawText.
*/
int PreDrawCell( wxDC& dc,
const wxRect& rect,
const wxPGCell& cell,
int flags ) const;
- void IncRef()
- {
- m_refCount++;
- }
+ /**
+ Utility to be called after drawing is done, to revert whatever
+ changes PreDrawCell() did.
- void DecRef()
- {
- m_refCount--;
- if ( !m_refCount )
- delete this;
- }
-protected:
+ @param flags
+ Same as those passed to PreDrawCell().
+ */
+ void PostDrawCell( wxDC& dc,
+ const wxPropertyGrid* propGrid,
+ const wxPGCell& cell,
+ int flags ) const;
+};
-private:
- unsigned int m_refCount;
+
+/**
+ @class wxPGDefaultRenderer
+
+ Default cell renderer, that can handles the common
+ scenarios.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGDefaultRenderer : public wxPGCellRenderer
+{
+public:
+ virtual bool Render( wxDC& dc,
+ const wxRect& rect,
+ const wxPropertyGrid* propertyGrid,
+ wxPGProperty* property,
+ int column,
+ int item,
+ int flags ) const;
+
+ virtual wxSize GetImageSize( const wxPGProperty* property,
+ int column,
+ int item ) const;
+
+protected:
};
void SetBitmap( const wxBitmap& bitmap ) { m_bitmap = bitmap; }
void SetFgCol( const wxColour& col ) { m_fgCol = col; }
void SetBgCol( const wxColour& col ) { m_bgCol = col; }
+ void SetFont( const wxFont& font ) { m_font = font; }
protected:
virtual ~wxPGCellData() { }
wxBitmap m_bitmap;
wxColour m_fgCol;
wxColour m_bgCol;
+ wxFont m_font;
// True if m_text is valid and specified
bool m_hasValidText;
};
-/** @class wxPGCell
- Base class for simple wxPropertyGrid cell information.
+/**
+ @class wxPGCell
+
+ Base class for wxPropertyGrid cell information.
*/
class WXDLLIMPEXP_PROPGRID wxPGCell : public wxObject
{
public:
wxPGCell();
- wxPGCell( const wxPGCell& other )
+ wxPGCell(const wxPGCell& other)
+ : wxObject(other)
{
- m_refData = other.m_refData;
- if ( m_refData )
- m_refData->IncRef();
}
wxPGCell( const wxString& text,
return (m_refData && GetData()->m_hasValidText);
}
+ /**
+ Sets empty but valid data to this cell object.
+ */
+ void SetEmptyData();
+
/**
Merges valid data from srcCell into this.
*/
void SetText( const wxString& text );
void SetBitmap( const wxBitmap& bitmap );
void SetFgCol( const wxColour& col );
+
+ /**
+ Sets font of the cell.
+
+ @remarks Because wxPropertyGrid does not support rows of
+ different height, it makes little sense to change
+ size of the font. Therefore it is recommended
+ to use return value of wxPropertyGrid::GetFont()
+ or wxPropertyGrid::GetCaptionFont() as a basis
+ for the font that, after modifications, is passed
+ to this member function.
+ */
+ void SetFont( const wxFont& font );
+
void SetBgCol( const wxColour& col );
const wxString& GetText() const { return GetData()->m_text; }
const wxBitmap& GetBitmap() const { return GetData()->m_bitmap; }
const wxColour& GetFgCol() const { return GetData()->m_fgCol; }
+
+ /**
+ Returns font of the cell. If no specific font is set for this
+ cell, then the font will be invalid.
+ */
+ const wxFont& GetFont() const { return GetData()->m_font; }
+
const wxColour& GetBgCol() const { return GetData()->m_bgCol; }
wxPGCell& operator=( const wxPGCell& other )
return *this;
}
-protected:
+ // Used mostly internally to figure out if this cell is supposed
+ // to have default values when attached to a grid.
+ bool IsInvalid() const
+ {
+ return ( m_refData == NULL );
+ }
+
+private:
virtual wxObjectRefData *CreateRefData() const
{ return new wxPGCellData(); }
virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;
};
-
-/** @class wxPGDefaultRenderer
-
- Default cell renderer, that can handles the common
- scenarios.
-*/
-class WXDLLIMPEXP_PROPGRID wxPGDefaultRenderer : public wxPGCellRenderer
-{
-public:
- virtual void Render( wxDC& dc,
- const wxRect& rect,
- const wxPropertyGrid* propertyGrid,
- wxPGProperty* property,
- int column,
- int item,
- int flags ) const;
-
- virtual wxSize GetImageSize( const wxPGProperty* property,
- int column,
- int item ) const;
-
-protected:
-};
-
// -----------------------------------------------------------------------
/** @class wxPGAttributeStorage
data->IncRef();
variant.SetData(data);
variant.SetName(it->first);
- it++;
+ ++it;
return true;
}
wxPGHashMapS2P m_map;
};
-#endif // !SWIG
// -----------------------------------------------------------------------
@{
*/
-enum wxPG_PROPERTY_FLAGS
+enum wxPGPropertyFlags
{
/** Indicates bold font.
*/
wxPG_PROP_MISC_PARENT = 0x4000,
-/** Property is read-only. Editor is still created.
+/** 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,
@remarks
This flag cannot be used with property iterators.
+
+ @see wxPGProperty::SetAutoUnspecified()
*/
wxPG_PROP_AUTO_UNSPECIFIED = 0x00040000,
/** Indicates the bit useable by derived properties.
*/
-wxPG_PROP_CLASS_SPECIFIC_2 = 0x00100000
+wxPG_PROP_CLASS_SPECIFIC_2 = 0x00100000,
+
+/** Indicates that the property is being deleted and should be ignored.
+*/
+wxPG_PROP_BEING_DELETED = 0x00200000
};
Code should automatically take care of this, however.
*/
#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))
/** @}
*/
// -----------------------------------------------------------------------
-#ifndef SWIG
-
/**
@section propgrid_property_attributes wxPropertyGrid Property Attribute
Identifiers.
*/
#define wxPG_ATTR_UNITS wxS("Units")
-/** Universal, string. When set, will be shown in property's value cell
- when displayed value string is empty, or value is unspecified.
+/** When set, will be shown as 'greyed' text in property's value cell when
+ the actual displayed value is blank.
+*/
+#define wxPG_ATTR_HINT wxS("Hint")
+
+#if wxPG_COMPATIBILITY_1_4
+/**
+ @deprecated Use "Hint" (wxPG_ATTR_HINT) instead.
*/
#define wxPG_ATTR_INLINE_HELP wxS("InlineHelp")
+#endif
-/** wxBoolProperty specific, int, default 0. When 1 sets bool property to
- use checkbox instead of choice.
+/** Universal, wxArrayString. Set to enable auto-completion in any
+ wxTextCtrl-based property editor.
+*/
+#define wxPG_ATTR_AUTOCOMPLETE wxS("AutoComplete")
+
+/** wxBoolProperty and wxFlagsProperty specific. Value type is bool.
+ Default value is False.
+
+ When set to True, bool property will use check box instead of a
+ combo box as its editor control. If you set this attribute
+ for a wxFlagsProperty, it is automatically applied to child
+ bool properties.
*/
#define wxPG_BOOL_USE_CHECKBOX wxS("UseCheckbox")
-/** wxBoolProperty specific, int, default 0. When 1 sets bool property value
- to cycle on double click (instead of showing the popup listbox).
+/** wxBoolProperty and wxFlagsProperty specific. Value type is bool.
+ Default value is False.
+
+ Set to True for the bool property to cycle value on double click
+ (instead of showing the popup listbox). If you set this attribute
+ for a wxFlagsProperty, it is automatically applied to child
+ bool properties.
*/
#define wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING wxS("UseDClickCycling")
*/
#define wxPG_DIR_DIALOG_MESSAGE wxS("DialogMessage")
+/**
+ wxArrayStringProperty's string delimiter character. If this is aquotation
+ mark or hyphen, then strings will be quoted instead (with given
+ character).
+
+ Default delimiter is quotation mark.
+*/
+#define wxPG_ARRAY_DELIMITER wxS("Delimiter")
+
/** Sets displayed date format for wxDateProperty.
*/
#define wxPG_DATE_FORMAT wxS("DateFormat")
*/
#define wxPG_COLOUR_ALLOW_CUSTOM wxS("AllowCustom")
+/**
+ wxColourProperty and its kind: Set to True in order to support editing
+ alpha colour component.
+*/
+#define wxPG_COLOUR_HAS_ALPHA wxS("HasAlpha")
+
/** @}
*/
// Redefine attribute macros to use cached strings
+#undef wxPG_ATTR_DEFAULT_VALUE
+#define wxPG_ATTR_DEFAULT_VALUE wxPGGlobalVars->m_strDefaultValue
#undef wxPG_ATTR_MIN
#define wxPG_ATTR_MIN wxPGGlobalVars->m_strMin
#undef wxPG_ATTR_MAX
#define wxPG_ATTR_MAX wxPGGlobalVars->m_strMax
#undef wxPG_ATTR_UNITS
#define wxPG_ATTR_UNITS wxPGGlobalVars->m_strUnits
+#undef wxPG_ATTR_HINT
+#define wxPG_ATTR_HINT wxPGGlobalVars->m_strHint
+#if wxPG_COMPATIBILITY_1_4
#undef wxPG_ATTR_INLINE_HELP
#define wxPG_ATTR_INLINE_HELP wxPGGlobalVars->m_strInlineHelp
-
-#endif // !SWIG
+#endif
// -----------------------------------------------------------------------
-#ifndef SWIG
-
/** @class wxPGChoiceEntry
Data of a single wxPGChoices choice.
*/
public:
wxPGChoiceEntry();
wxPGChoiceEntry(const wxPGChoiceEntry& other)
+ : wxPGCell(other)
{
- m_refData = other.m_refData;
- if ( m_refData )
- m_refData->IncRef();
m_value = other.m_value;
}
wxPGChoiceEntry( const wxString& label,
typedef void* wxPGChoicesId;
-class WXDLLIMPEXP_PROPGRID wxPGChoicesData
+class WXDLLIMPEXP_PROPGRID wxPGChoicesData : public wxObjectRefData
{
friend class wxPGChoices;
public:
return m_items[i];
}
- void DecRef()
- {
- m_refCount--;
- wxASSERT( m_refCount >= 0 );
- if ( m_refCount == 0 )
- delete this;
- }
-
private:
wxVector<wxPGChoiceEntry> m_items;
- // So that multiple properties can use the same set
- int m_refCount;
-
virtual ~wxPGChoicesData();
};
#define wxPGChoicesEmptyData ((wxPGChoicesData*)NULL)
-#endif // SWIG
/** @class wxPGChoices
Each entry can have label, value, bitmap, text colour, and background
colour.
+ wxPGChoices uses reference counting, similar to other wxWidgets classes.
+ This means that assignment operator and copy constructor only copy the
+ reference and not the actual data. Use Copy() member function to create a
+ real copy.
+
@remarks If you do not specify value for entry, index is used.
@library{wxpropgrid}
Init();
}
- /** Copy constructor. */
+ /**
+ Copy constructor, uses reference counting. To create a real copy,
+ use Copy() member function instead.
+ */
wxPGChoices( const wxPGChoices& a )
{
if ( a.m_data != wxPGChoicesEmptyData )
{
m_data = a.m_data;
- m_data->m_refCount++;
+ m_data->IncRef();
}
}
@param values
Values for choices. If NULL, indexes are used.
*/
- wxPGChoices( const wxChar** labels, const long* values = NULL )
+ wxPGChoices( const wxChar* const* labels, const long* values = NULL )
{
Init();
Set(labels,values);
{
wxASSERT(data);
m_data = data;
- data->m_refCount++;
+ data->IncRef();
}
/** Destructor. */
@param values
Values for added choices. If empty, relevant entry indexes are used.
*/
- void Add( const wxChar** labels, const ValArrItem* values = NULL );
+ void Add( const wxChar* const* labels, const ValArrItem* values = NULL );
/** Version that works with wxArrayString and wxArrayInt. */
void Add( const wxArrayString& arr, const wxArrayInt& arrint = wxArrayInt() );
wxPGChoiceEntry& AddAsSorted( const wxString& label,
int value = wxPG_INVALID_VALUE );
+ /**
+ Assigns choices data, using reference counting. To create a real copy,
+ use Copy() member function instead.
+ */
void Assign( const wxPGChoices& a )
{
AssignData(a.m_data);
void AssignData( wxPGChoicesData* data );
/** Delete all choices. */
- void Clear()
+ void Clear();
+
+ /**
+ Returns a real copy of the choices.
+ */
+ wxPGChoices Copy() const
{
- if ( m_data != wxPGChoicesEmptyData )
- m_data->Clear();
+ wxPGChoices dst;
+ dst.EnsureData();
+ dst.m_data->CopyDataFrom(m_data);
+ return dst;
}
void EnsureData()
/** Removes count items starting at position nIndex. */
void RemoveAt(size_t nIndex, size_t count = 1);
-#ifndef SWIG
- /** Does not create copies for itself. */
- void Set( const wxChar** labels, const long* values = NULL )
+ /** Does not create copies for itself.
+ TODO: Deprecate.
+ */
+ void Set( const wxChar* const* labels, const long* values = NULL )
{
Free();
Add(labels,values);
}
-#endif // SWIG
/** Version that works with wxArrayString and wxArrayInt. */
void Set( const wxArrayString& labels,
}
// Creates exclusive copy of current choices
- void SetExclusive()
- {
- if ( m_data->m_refCount != 1 )
- {
- wxPGChoicesData* data = new wxPGChoicesData();
- data->CopyDataFrom(m_data);
- Free();
- m_data = data;
- }
- }
+ void AllocExclusive();
// Returns data, increases refcount.
wxPGChoicesData* GetData()
{
- wxASSERT( m_data->m_refCount != 0xFFFFFFF );
- m_data->m_refCount++;
+ wxASSERT( m_data->GetRefCount() != -1 );
+ m_data->IncRef();
return m_data;
}
wxArrayString GetLabels() const;
-#ifndef SWIG
void operator= (const wxPGChoices& a)
{
- AssignData(a.m_data);
+ if (this != &a)
+ AssignData(a.m_data);
}
wxPGChoiceEntry& operator[](unsigned int i)
void Init();
void Free();
-#endif // !SWIG
};
// -----------------------------------------------------------------------
friend class wxPropertyGridPageState;
friend class wxPropertyGridPopulator;
friend class wxStringProperty; // Proper "<composed>" support requires this
-#ifndef SWIG
+
DECLARE_ABSTRACT_CLASS(wxPGProperty)
-#endif
public:
typedef wxUint32 FlagType;
- /** Basic constructor.
+ /**
+ Default constructor.
*/
wxPGProperty();
- /** Constructor.
- Non-abstract property classes should have constructor of this style:
-
- @code
-
- // If T is a class, then it should be a constant reference
- // (e.g. const T& ) instead.
- MyProperty( const wxString& label, const wxString& name, T value )
- : wxPGProperty()
- {
- // Generally recommended way to set the initial value
- // (as it should work in pretty much 100% of cases).
- wxVariant variant;
- variant << value;
- SetValue(variant);
-
- // If has private child properties then create them here. Also
- // set flag that indicates presence of private children. E.g.:
- //
- // SetParentalType(wxPG_PROP_AGGREGATE);
- //
- // AddChild( new wxStringProperty( "Subprop 1",
- // wxPG_LABEL,
- // value.GetSubProp1() ) );
- }
+ /**
+ Constructor.
- @endcode
+ All non-abstract property classes should have a constructor with
+ the same first two arguments as this one.
*/
wxPGProperty( const wxString& label, const wxString& name );
*/
virtual wxVariant DoGetValue() const { return m_value; }
-#if !defined(SWIG) || defined(CREATE_VCW)
/** Implement this function in derived class to check the value.
Return true if it is ok. Returning false prevents property change events
from occurring.
virtual bool IntToValue( wxVariant& value,
int number,
int argFlags = 0 ) const;
-#endif // !defined(SWIG) || defined(CREATE_VCW)
+
/**
Converts property value into a text representation.
wxEvent& event );
/**
- Called after value of a child property has been altered.
+ Called after value of a child property has been altered. Must return
+ new value of the whole property (after any alterations warrented by
+ child's new value).
Note that this function is usually called at the time that value of
- this property, or given child property, is still pending for change.
+ this property, or given child property, is still pending for change,
+ and as such, result of GetValue() or m_value should not be relied
+ on.
Sample pseudo-code implementation:
@code
- void MyProperty::ChildChanged( wxVariant& thisValue,
- int childIndex,
- wxVariant& childValue ) const
+ wxVariant MyProperty::ChildChanged( wxVariant& thisValue,
+ int childIndex,
+ wxVariant& childValue ) const
{
// Acquire reference to actual type of data stored in variant
// (TFromVariant only exists if wxPropertyGrid's wxVariant-macros
break;
...
}
+
+ // Return altered data
+ return data;
}
@endcode
@param thisValue
- Value of this property, that should be altered.
+ Value of this property. Changed value should be returned (in
+ previous versions of wxPropertyGrid it was only necessary to
+ write value back to this argument).
@param childIndex
- Index of child changed (you can use Item(childIndex) to get).
+ Index of child changed (you can use Item(childIndex) to get
+ child property).
@param childValue
- Value of the child property.
+ (Pending) value of the child property.
+
+ @return
+ Modified value of the whole property.
*/
- virtual void ChildChanged( wxVariant& thisValue,
- int childIndex,
- wxVariant& childValue ) const;
+ virtual wxVariant ChildChanged( wxVariant& thisValue,
+ int childIndex,
+ wxVariant& childValue ) const;
/** Returns pointer to an instance of used editor.
*/
*/
virtual void RefreshChildren();
- /** Special handling for attributes of this property.
+ /**
+ Reimplement this member function to add special handling for
+ attributes of this property.
- If returns false, then the attribute will be automatically stored in
- m_attributes.
+ @return Return @false to have the attribute automatically stored in
+ m_attributes. Default implementation simply does that and
+ nothing else.
- Default implementation simply returns false.
+ @remarks To actually set property attribute values from the
+ application, use wxPGProperty::SetAttribute() instead.
*/
virtual bool DoSetAttribute( const wxString& name, wxVariant& value );
*/
virtual wxPGEditorDialogAdapter* GetEditorDialog() const;
+ /**
+ Called whenever validation has failed with given pending value.
+
+ @remarks If you implement this in your custom property class, please
+ remember to call the baser implementation as well, since they
+ may use it to revert property into pre-change state.
+ */
+ virtual void OnValidationFailure( wxVariant& pendingValue );
+
/** Append a new choice to property's list of choices.
*/
int AddChoice( const wxString& label, int value = wxPG_INVALID_VALUE )
return false;
}
+ /**
+ Deletes children of the property.
+ */
+ void DeleteChildren();
+
/**
Removes entry from property's wxPGChoices and editor control (if it is
active).
*/
void DeleteChoice( int index );
+ /**
+ Enables or disables the property. Disabled property usually appears
+ as having grey text.
+
+ @param enable
+ If @false, property is disabled instead.
+
+ @see wxPropertyGridInterface::EnableProperty()
+ */
+ void Enable( bool enable = true );
+
/**
Call to enable or disable usage of common value (integer value that can
be selected for properties instead of their normal values) for this
return DoGetValue();
}
-#ifndef SWIG
/** Returns reference to the internal stored value. GetValue is preferred
way to get the actual value, since GetValueRef ignores DoGetValue,
which may override stored value.
{
return m_value;
}
-#endif
+
+ // Helper function (for wxPython bindings and such) for settings protected
+ // m_value.
+ wxVariant GetValuePlain() const
+ {
+ return m_value;
+ }
/** Returns text representation of property's value.
*/
wxDEPRECATED( wxString GetValueString( int argFlags = 0 ) const );
- void UpdateControl( wxWindow* primary );
-
/**
Returns wxPGCell of given column.
+
+ @remarks const version of this member function returns 'default'
+ wxPGCell object if the property itself didn't hold
+ cell data.
*/
const wxPGCell& GetCell( unsigned int column ) const;
- wxPGCell& GetCell( unsigned int column );
+ /**
+ Returns wxPGCell of given column, creating one if necessary.
+ */
+ wxPGCell& GetCell( unsigned int column )
+ {
+ return GetOrCreateCell(column);
+ }
+
+ /**
+ Returns wxPGCell of given column, creating one if necessary.
+ */
+ wxPGCell& GetOrCreateCell( unsigned int column );
/** Return number of displayed common values for this property.
*/
return GetValueAsString(0);
}
+ /**
+ Returns property's hint text (shown in empty value cell).
+ */
+ inline wxString GetHintText() const;
+
/** Returns property grid where property lies. */
wxPropertyGrid* GetGrid() const;
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 );
}
*/
wxVariant GetAttributesAsList() const;
+ /**
+ Returns property flags.
+ */
FlagType GetFlags() const
{
return m_flags;
*/
bool HasVisibleChildren() const;
+ /**
+ Use this member function to add independent (ie. regular) children to
+ a property.
+
+ @return Inserted childProperty.
+
+ @remarks wxPropertyGrid is not automatically refreshed by this
+ function.
+
+ @see AddPrivateChild()
+ */
+ wxPGProperty* InsertChild( int index, wxPGProperty* childProperty );
+
/** Inserts a new choice to property's list of choices.
*/
int InsertChoice( const wxString& label, int index, int value = wxPG_INVALID_VALUE );
By default changes are applied recursively. Set this paramter
wxPG_DONT_RECURSE to prevent this.
*/
- inline bool Hide( bool hide, int flags = wxPG_RECURSE );
+ bool Hide( bool hide, int flags = wxPG_RECURSE );
bool IsExpanded() const
{ return (!(m_flags & wxPG_PROP_COLLAPSED) && GetChildCount()); }
void SetAttributes( const wxPGAttributeStorage& attributes );
+ /**
+ Set if user can change the property's value to unspecified by
+ modifying the value of the editor control (usually by clearing
+ it). Currently, this can work with following properties:
+ wxIntProperty, wxUIntProperty, wxFloatProperty, wxEditEnumProperty.
+
+ @param enable
+ Whether to enable or disable this behavior (it is disabled by
+ default).
+ */
+ void SetAutoUnspecified( bool enable = true )
+ {
+ ChangeFlag(wxPG_PROP_AUTO_UNSPECIFIED, enable);
+ }
+
/**
Sets property's background colour.
@param colour
Background colour to use.
- @param recursively
- If @true, children are affected recursively, and any categories
- are not.
+ @param flags
+ Default is wxPG_RECURSE which causes colour to be set recursively.
+ Omit this flag to only set colour for the property in question
+ and not any of its children.
*/
void SetBackgroundColour( const wxColour& colour,
- bool recursively = false );
+ int flags = wxPG_RECURSE );
/**
Sets property's text colour.
@param colour
Text colour to use.
- @param recursively
- If @true, children are affected recursively, and any categories
- are not.
+ @param flags
+ Default is wxPG_RECURSE which causes colour to be set recursively.
+ Omit this flag to only set colour for the property in question
+ and not any of its children.
*/
void SetTextColour( const wxColour& colour,
- bool recursively = false );
+ int flags = wxPG_RECURSE );
+
+ /** Set default value of a property. Synonymous to
+
+ @code
+ SetAttribute("DefaultValue", value);
+ @endcode
+ */
+ void SetDefaultValue( wxVariant& value );
-#ifndef SWIG
/** Sets editor for a property.
@param editor
{
m_customEditor = editor;
}
-#endif
/** Sets editor for a property.
*/
SetValueInEvent() instead.
@param pList
- Pointer to list variant that contains child values. Used to indicate
- which children should be marked as modified.
+ Pointer to list variant that contains child values. Used to
+ indicate which children should be marked as modified.
+
@param flags
- Various flags (for instance, wxPG_SETVAL_REFRESH_EDITOR).
+ Various flags (for instance, wxPG_SETVAL_REFRESH_EDITOR, which is
+ enabled by default).
*/
- void SetValue( wxVariant value, wxVariant* pList = NULL, int flags = 0 );
+ void SetValue( wxVariant value, wxVariant* pList = NULL,
+ int flags = wxPG_SETVAL_REFRESH_EDITOR );
/** Set wxBitmap in front of the value. This bitmap may be ignored
by custom cell renderers.
*/
void SetValueImage( wxBitmap& bmp );
- /** If property has choices and they are not yet exclusive, new such copy
- of them will be created.
- */
- void SetChoicesExclusive()
- {
- m_choices.SetExclusive();
- }
-
/** Sets selected choice and changes property value.
Tries to retain value type, although currently if it is not string,
else m_flags &= ~wxPG_PROP_COLLAPSED;
}
- void SetFlag( FlagType flag ) { m_flags |= flag; }
+ /**
+ Sets or clears given property flag. Mainly for internal use.
- void SetFlagRecursively( FlagType flag, bool set );
+ @remarks Setting a property flag never has any side-effect, and is
+ intended almost exclusively for internal use. So, for
+ example, if you want to disable a property, call
+ Enable(false) instead of setting wxPG_PROP_DISABLED flag.
+
+ @see HasFlag(), GetFlags()
+ */
+ void ChangeFlag( wxPGPropertyFlags flag, bool set )
+ {
+ if ( set )
+ m_flags |= flag;
+ else
+ m_flags &= ~flag;
+ }
+
+ /**
+ Sets or clears given property flag, recursively. This function is
+ primarily intended for internal use.
+
+ @see ChangeFlag()
+ */
+ void SetFlagRecursively( wxPGPropertyFlags flag, bool set );
void SetHelpString( const wxString& helpString )
{
void SetLabel( const wxString& label ) { m_label = label; }
- inline void SetName( const wxString& newName );
+ void SetName( const wxString& newName );
/**
Changes what sort of parent this property is for its children.
@param flag
- Use one of the following values: wxPG_PROP_MISC_PARENT (for generic
- parents), wxPG_PROP_CATEGORY (for categories), or
+ Use one of the following values: wxPG_PROP_MISC_PARENT (for
+ generic parents), wxPG_PROP_CATEGORY (for categories), or
wxPG_PROP_AGGREGATE (for derived property classes with private
children).
- @remarks You only need to call this if you use AddChild() to add
- child properties. Adding properties with
- wxPropertyGridInterface::Insert() or
- wxPropertyGridInterface::AppendIn() will automatically set
- property to use wxPG_PROP_MISC_PARENT style.
+ @remarks You generally do not need to call this function.
*/
void SetParentalType( int flag )
{
void SetValueToUnspecified()
{
wxVariant val; // Create NULL variant
- SetValue(val);
+ SetValue(val, NULL, wxPG_SETVAL_REFRESH_EDITOR);
+ }
+
+ // Helper function (for wxPython bindings and such) for settings protected
+ // m_value.
+ void SetValuePlain( wxVariant value )
+ {
+ m_value = value;
}
#if wxUSE_VALIDATORS
return m_validator;
return DoGetValidator();
}
-#endif // #if wxUSE_VALIDATORS
+#endif // wxUSE_VALIDATORS
-#ifndef SWIG
/** Returns client data (void*) of a property.
*/
void* GetClientData() const
/** Sets managed client object of a property.
*/
wxClientData *GetClientObject() const { return m_clientObject; }
-#endif
- /** Sets new set of choices for property.
+ /**
+ Sets new set of choices for the property.
- @remarks
- This operation clears the property value.
+ @remarks This operation deselects the property and clears its
+ value.
*/
- bool SetChoices( wxPGChoices& choices );
+ bool SetChoices( const wxPGChoices& choices );
/** Set max length of text in text editor.
*/
return m_helpString;
}
- void ClearFlag( FlagType flag ) { m_flags &= ~(flag); }
-
// Use, for example, to detect if item is inside collapsed section.
bool IsSomeParent( wxPGProperty* candidate_parent ) const;
*/
void AdaptListToValue( wxVariant& list, wxVariant* value ) const;
+#if wxPG_COMPATIBILITY_1_4
/**
- Adds a child property. If you use this instead of
+ Adds a private child property.
+
+ @deprecated Use AddPrivateChild() instead.
+
+ @see AddPrivateChild()
+ */
+ wxDEPRECATED( void AddChild( wxPGProperty* prop ) );
+#endif
+
+ /**
+ Adds a private child property. If you use this instead of
wxPropertyGridInterface::Insert() or
- wxPropertyGridInterface::AppendIn(), then you must set up
- property's parental type before making the call. To do this,
- call property's SetParentalType() function with either
- wxPG_PROP_MISC_PARENT (normal, public children) or with
- wxPG_PROP_AGGREGATE (private children for subclassed property).
- For instance:
+ wxPropertyGridInterface::AppendIn(), then property's parental
+ type will automatically be set up to wxPG_PROP_AGGREGATE. In other
+ words, all properties of this property will become private.
+ */
+ void AddPrivateChild( wxPGProperty* prop );
- @code
- wxPGProperty* prop = new wxStringProperty(wxS("Property"));
- prop->SetParentalType(wxPG_PROP_MISC_PARENT);
- wxPGProperty* prop2 = new wxStringProperty(wxS("Property2"));
- prop->AddChild(prop2);
- @endcode
+ /**
+ Appends a new child property.
*/
- void AddChild( wxPGProperty* prop );
+ wxPGProperty* AppendChild( wxPGProperty* prop )
+ {
+ return InsertChild(-1, prop);
+ }
/** Returns height of children, recursively, and
by taking expanded/collapsed status into account.
/** Returns index of given child property. */
int Index( const wxPGProperty* p ) const;
- /** Deletes all sub-properties. */
- void Empty();
-
// Puts correct indexes to children
void FixIndicesOfChildren( unsigned int starthere = 0 );
-#ifndef SWIG
+ /**
+ Converts image width into full image offset, with margins.
+ */
+ int GetImageOffset( int imageWidth ) const;
+
// Returns wxPropertyGridPageState in which this property resides.
wxPropertyGridPageState* GetParentState() const { return m_parentState; }
-#endif
wxPGProperty* GetItemAtY( unsigned int y,
unsigned int lh,
unsigned int* nextItemY ) const;
+ /** Returns property at given virtual y coordinate.
+ */
+ wxPGProperty* GetItemAtY( unsigned int y ) const;
+
/** Returns (direct) child property with given name (or NULL if not found).
*/
wxPGProperty* GetPropertyByName( const wxString& name ) const;
-#ifdef SWIG
- %extend {
- DocStr(GetClientData,
- "Returns the client data object for a property", "");
- PyObject* GetClientData() {
- wxPyClientData* data = (wxPyClientData*)self->GetClientObject();
- if (data) {
- Py_INCREF(data->m_obj);
- return data->m_obj;
- } else {
- Py_INCREF(Py_None);
- return Py_None;
- }
- }
-
- DocStr(SetClientData,
- "Associate the given client data.", "");
- void SetClientData(PyObject* clientData) {
- wxPyClientData* data = new wxPyClientData(clientData);
- self->SetClientObject(data);
- }
- }
- %pythoncode {
- GetClientObject = GetClientData
- SetClientObject = SetClientData
- }
-#endif
-
-#ifndef SWIG
-
// Returns various display-related information for given column
void GetDisplayInfo( unsigned int column,
int choiceIndex,
unsigned int hintIndex ) const;
/** This is used by Insert etc. */
- void AddChild2( wxPGProperty* prop,
- int index = -1,
- bool correct_mode = true );
+ void DoAddChild( wxPGProperty* prop,
+ int index = -1,
+ bool correct_mode = true );
void DoGenerateComposedValue( wxString& text,
int argFlags = wxPG_VALUE_IS_CURRENT,
const wxVariantList* valueOverrides = NULL,
wxPGHashMapS2S* childResults = NULL ) const;
+ bool DoHide( bool hide, int flags );
+
void DoSetName(const wxString& str) { m_name = str; }
+ /** Deletes all sub-properties. */
+ void Empty();
+
+ bool HasCell( unsigned int column ) const
+ {
+ if ( m_cells.size() > column )
+ return true;
+ return false;
+ }
+
void InitAfterAdded( wxPropertyGridPageState* pageState,
wxPropertyGrid* propgrid );
// Removes child property with given pointer. Does not delete it.
void RemoveChild( wxPGProperty* p );
+ void DoEnable( bool enable );
+
+ void DoPreAddChild( int index, wxPGProperty* prop );
+
void SetParentState( wxPropertyGridPageState* pstate )
{ m_parentState = pstate; }
+ 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;
+ }
+
+ void ClearFlag( FlagType flag ) { m_flags &= ~(flag); }
+
+ // Called when the property is being removed from the grid and/or
+ // page state (but *not* when it is also deleted).
+ void OnDetached(wxPropertyGridPageState* state,
+ wxPropertyGrid* propgrid);
+
// Call after fixed sub-properties added/removed after creation.
// if oldSelInd >= 0 and < new max items, then selection is
// moved to it.
// Called in constructors.
void Init();
void Init( const wxString& label, const wxString& name );
-#endif // #ifndef SWIG
};
// -----------------------------------------------------------------------
#define WX_PG_DECLARE_DOGETEDITORCLASS \
virtual const wxPGEditor* DoGetEditorClass() const;
-#ifndef SWIG
+#ifndef WX_PG_DECLARE_PROPERTY_CLASS
#define WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME) \
public: \
DECLARE_DYNAMIC_CLASS(CLASSNAME) \
WX_PG_DECLARE_DOGETEDITORCLASS \
private:
-#else
- #define WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME)
#endif
// Implements sans constructor function. Also, first arg is class name, not
// -----------------------------------------------------------------------
-#ifndef SWIG
-
/** @class wxPGRootProperty
@ingroup classes
Root parent property.
public:
/** Constructor. */
- wxPGRootProperty();
+ wxPGRootProperty( const wxString& name = wxS("<Root>") );
virtual ~wxPGRootProperty();
virtual bool StringToValue( wxVariant&, const wxString&, int ) const
int GetTextExtent( const wxWindow* wnd, const wxFont& font ) const;
-protected:
virtual wxString ValueToString( wxVariant& value, int argFlags ) const;
+ virtual wxString GetValueAsString( int argFlags = 0 ) const;
+protected:
void SetTextColIndex( unsigned int colInd )
{ m_capFgColIndex = (wxByte) colInd; }
unsigned int GetTextColIndex() const
void Init();
};
-#endif // !SWIG
-
// -----------------------------------------------------------------------
#endif // wxUSE_PROPGRID