*/
#define wxPG_ATTR_INLINE_HELP wxS("InlineHelp")
-/** 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")
Helper class for managing choices of wxPropertyGrid properties.
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.
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 )
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()
}
// 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()
// 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() ) );
+ // AddPrivateChild( new wxStringProperty("Subprop 1",
+ // wxPG_LABEL,
+ // value.GetSubProp1() ) );
}
@endcode
*/
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 )
*/
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 );
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,
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 AdaptListToValue( wxVariant& list, wxVariant* value ) const;
+#if wxPG_COMPATIBILITY_1_4
+ /**
+ Adds a private child property.
+
+ @deprecated Use AddPrivateChild() instead.
+
+ @see AddPrivateChild()
+ */
+ wxDEPRECATED( void AddChild( wxPGProperty* prop ) );
+#endif
+
/**
- Adds a child property. If you use this instead of
+ 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.
// Puts correct indexes to children
void FixIndicesOfChildren( unsigned int starthere = 0 );
+ /**
+ Converts image width into full image offset, with margins.
+ */
+ int GetImageOffset( int imageWidth ) const;
+
#ifndef SWIG
// Returns wxPropertyGridPageState in which this property resides.
wxPropertyGridPageState* GetParentState() const { return m_parentState; }
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,
// Removes child property with given pointer. Does not delete it.
void RemoveChild( wxPGProperty* p );
+ void DoPreAddChild( int index, wxPGProperty* prop );
+
void SetParentState( wxPropertyGridPageState* pstate )
{ m_parentState = pstate; }
public:
/** Constructor. */
- wxPGRootProperty();
+ wxPGRootProperty( const wxString& name = wxS("<Root>") );
virtual ~wxPGRootProperty();
virtual bool StringToValue( wxVariant&, const wxString&, int ) const