1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/propgeid/propgridiface.h
3 // Purpose: wxPropertyGridInterface class
4 // Author: Jaakko Salli
8 // Copyright: (c) Jaakko Salli
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef __WX_PROPGRID_PROPGRIDIFACE_H__
13 #define __WX_PROPGRID_PROPGRIDIFACE_H__
17 #include "wx/propgrid/property.h"
18 #include "wx/propgrid/propgridpagestate.h"
20 // -----------------------------------------------------------------------
22 /** @section wxPGPropArgCls
24 Most property grid functions have this type as their argument, as it can
25 convey a property by either a pointer or name.
27 class WXDLLIMPEXP_PROPGRID wxPGPropArgCls
31 wxPGPropArgCls( const wxPGProperty
* property
)
33 m_ptr
.property
= (wxPGProperty
*) property
;
36 wxPGPropArgCls( const wxString
& str
)
38 m_ptr
.stringName
= &str
;
41 wxPGPropArgCls( const wxPGPropArgCls
& id
)
46 // This is only needed for wxPython bindings
47 wxPGPropArgCls( wxString
* str
, bool WXUNUSED(deallocPtr
) )
49 m_ptr
.stringName
= str
;
50 m_flags
= IsWxString
| OwnsWxString
;
54 if ( m_flags
& OwnsWxString
)
55 delete m_ptr
.stringName
;
57 wxPGProperty
* GetPtr() const
59 wxCHECK( m_flags
== IsProperty
, NULL
);
60 return m_ptr
.property
;
62 wxPGPropArgCls( const char* str
)
68 wxPGPropArgCls( const wchar_t* str
)
70 m_ptr
.wcharName
= str
;
74 /** This constructor is required for NULL. */
77 m_ptr
.property
= NULL
;
80 wxPGProperty
* GetPtr( wxPropertyGridInterface
* iface
) const;
81 wxPGProperty
* GetPtr( const wxPropertyGridInterface
* iface
) const
83 return GetPtr((wxPropertyGridInterface
*)iface
);
85 wxPGProperty
* GetPtr0() const { return m_ptr
.property
; }
86 bool HasName() const { return (m_flags
!= IsProperty
); }
87 const wxString
& GetName() const { return *m_ptr
.stringName
; }
101 wxPGProperty
* property
;
102 const char* charName
;
104 const wchar_t* wcharName
;
106 const wxString
* stringName
;
108 unsigned char m_flags
;
111 typedef const wxPGPropArgCls
& wxPGPropArg
;
113 // -----------------------------------------------------------------------
116 void wxPGTypeOperationFailed( const wxPGProperty
* p
,
117 const wxString
& typestr
,
118 const wxString
& op
);
120 void wxPGGetFailed( const wxPGProperty
* p
, const wxString
& typestr
);
122 // -----------------------------------------------------------------------
124 // Helper macro that does necessary preparations when calling
125 // some wxPGProperty's member function.
126 #define wxPG_PROP_ARG_CALL_PROLOG_0(PROPERTY) \
127 PROPERTY *p = (PROPERTY*)id.GetPtr(this); \
130 #define wxPG_PROP_ARG_CALL_PROLOG_RETVAL_0(PROPERTY, RETVAL) \
131 PROPERTY *p = (PROPERTY*)id.GetPtr(this); \
132 if ( !p ) return RETVAL;
134 #define wxPG_PROP_ARG_CALL_PROLOG() \
135 wxPG_PROP_ARG_CALL_PROLOG_0(wxPGProperty)
137 #define wxPG_PROP_ARG_CALL_PROLOG_RETVAL(RVAL) \
138 wxPG_PROP_ARG_CALL_PROLOG_RETVAL_0(wxPGProperty, RVAL)
140 #define wxPG_PROP_ID_CONST_CALL_PROLOG() \
141 wxPG_PROP_ARG_CALL_PROLOG_0(const wxPGProperty)
143 #define wxPG_PROP_ID_CONST_CALL_PROLOG_RETVAL(RVAL) \
144 wxPG_PROP_ARG_CALL_PROLOG_RETVAL_0(const wxPGProperty, RVAL)
146 // -----------------------------------------------------------------------
149 /** @class wxPropertyGridInterface
151 Most of the shared property manipulation interface shared by wxPropertyGrid,
152 wxPropertyGridPage, and wxPropertyGridManager is defined in this class.
155 - In separate wxPropertyGrid component this class was known as
156 wxPropertyContainerMethods.
161 class WXDLLIMPEXP_PROPGRID wxPropertyGridInterface
166 virtual ~wxPropertyGridInterface() { }
169 Appends property to the list.
171 wxPropertyGrid assumes ownership of the object.
172 Becomes child of most recently added category.
174 - wxPropertyGrid takes the ownership of the property pointer.
175 - If appending a category with name identical to a category already in
176 the wxPropertyGrid, then newly created category is deleted, and most
177 recently added category (under which properties are appended) is set
178 to the one with same name. This allows easier adding of items to same
179 categories in multiple passes.
180 - Does not automatically redraw the control, so you may need to call
181 Refresh when calling this function after control has been shown for
184 wxPGProperty
* Append( wxPGProperty
* property
);
186 wxPGProperty
* AppendIn( wxPGPropArg id
, wxPGProperty
* newproperty
);
189 In order to add new items into a property with fixed children (for
190 instance, wxFlagsProperty), you need to call this method. After
191 populating has been finished, you need to call EndAddChildren.
193 void BeginAddChildren( wxPGPropArg id
);
195 /** Deletes all properties.
197 virtual void Clear() = 0;
200 Clears current selection, if any.
203 If set to @false, deselecting the property will always work,
204 even if its editor had invalid value in it.
206 @return Returns @true if successful or if there was no selection. May
207 fail if validation was enabled and active editor had invalid
210 @remarks In wxPropertyGrid 1.4, this member function used to send
211 wxPG_EVT_SELECTED. In wxWidgets 2.9 and later, it no longer
214 bool ClearSelection( bool validation
= false );
216 /** Resets modified status of all properties.
218 void ClearModifiedStatus();
220 /** Collapses given category or property with children.
221 Returns true if actually collapses.
223 bool Collapse( wxPGPropArg id
);
225 /** Collapses all items that can be collapsed.
228 Return false if failed (may fail if editor value cannot be validated).
230 bool CollapseAll() { return ExpandAll(false); }
233 Changes value of a property, as if from an editor.
234 Use this instead of SetPropertyValue() if you need the value to run
235 through validation process, and also send the property change event.
238 Returns true if value was successfully changed.
240 bool ChangePropertyValue( wxPGPropArg id
, wxVariant newValue
);
243 Deletes a property by id. If category is deleted, all children are
244 automatically deleted as well.
246 void DeleteProperty( wxPGPropArg id
);
249 Removes and returns a property.
252 Pointer or name of a property.
254 @remarks Removed property cannot have any children.
256 wxPGProperty
* RemoveProperty( wxPGPropArg id
);
258 /** Disables property. */
259 bool DisableProperty( wxPGPropArg id
) { return EnableProperty(id
,false); }
262 Returns true if all property grid data changes have been committed.
264 Usually only returns false if value in active editor has been
265 invalidated by a wxValidator.
267 bool EditorValidate();
270 Enables or disables property, depending on whether enable is true or
273 bool EnableProperty( wxPGPropArg id
, bool enable
= true );
275 /** Called after population of property with fixed children has finished.
277 void EndAddChildren( wxPGPropArg id
);
279 /** Expands given category or property with children.
280 Returns true if actually expands.
282 bool Expand( wxPGPropArg id
);
284 /** Expands all items that can be expanded.
286 bool ExpandAll( bool expand
= true );
288 /** Returns id of first child of given property.
290 Does not return sub-properties!
292 wxPGProperty
* GetFirstChild( wxPGPropArg id
)
294 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty
)
296 if ( !p
->GetChildCount() || p
->HasFlag(wxPG_PROP_AGGREGATE
) )
297 return wxNullProperty
;
303 /** Returns iterator class instance.
305 See @ref propgrid_iterator_flags. Value wxPG_ITERATE_DEFAULT causes
306 iteration over everything except private child properties.
308 Property to start iteration from. If NULL, then first child of root
311 Either wxTOP or wxBOTTOM. wxTOP will indicate that iterations start
312 from the first property from the top, and wxBOTTOM means that the
313 iteration will instead begin from bottommost valid item.
315 wxPropertyGridIterator
GetIterator( int flags
= wxPG_ITERATE_DEFAULT
,
316 wxPGProperty
* firstProp
= NULL
)
318 return wxPropertyGridIterator( m_pState
, flags
, firstProp
);
321 wxPropertyGridConstIterator
322 GetIterator( int flags
= wxPG_ITERATE_DEFAULT
,
323 wxPGProperty
* firstProp
= NULL
) const
325 return wxPropertyGridConstIterator( m_pState
, flags
, firstProp
);
328 wxPropertyGridIterator
GetIterator( int flags
, int startPos
)
330 return wxPropertyGridIterator( m_pState
, flags
, startPos
);
333 wxPropertyGridConstIterator
GetIterator( int flags
, int startPos
) const
335 return wxPropertyGridConstIterator( m_pState
, flags
, startPos
);
339 /** Returns id of first item, whether it is a category or property.
341 @link iteratorflags List of iterator flags@endlink
343 wxPGProperty
* GetFirst( int flags
= wxPG_ITERATE_ALL
)
345 wxPropertyGridIterator
it( m_pState
, flags
, wxNullProperty
, 1 );
349 const wxPGProperty
* GetFirst( int flags
= wxPG_ITERATE_ALL
) const
351 return ((wxPropertyGridInterface
*)this)->GetFirst(flags
);
355 Returns pointer to a property with given name (case-sensitive).
356 If there is no property with such name, @NULL pointer is returned.
358 @remarks Properties which have non-category, non-root parent
359 can not be accessed globally by their name. Instead, use
360 "<property>.<subproperty>" instead of "<subproperty>".
362 wxPGProperty
* GetProperty( const wxString
& name
) const
364 return GetPropertyByName(name
);
367 /** Returns map-like storage of property's attributes.
369 Note that if extra style wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES is set,
370 then builtin-attributes are not included in the storage.
372 const wxPGAttributeStorage
& GetPropertyAttributes( wxPGPropArg id
) const
374 // If 'id' refers to invalid property, then we will return dummy
375 // attributes (ie. root property's attributes, which contents should
376 // should always be empty and of no consequence).
377 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_pState
->DoGetRoot()->GetAttributes());
378 return p
->GetAttributes();
381 /** Adds to 'targetArr' pointers to properties that have given
382 flags 'flags' set. However, if 'inverse' is set to true, then
383 only properties without given flags are stored.
385 Property flags to use.
387 Iterator flags to use. Default is everything expect private children.
389 void GetPropertiesWithFlag( wxArrayPGProperty
* targetArr
,
390 wxPGProperty::FlagType flags
,
391 bool inverse
= false,
392 int iterFlags
= wxPG_ITERATE_PROPERTIES
|
393 wxPG_ITERATE_HIDDEN
|
394 wxPG_ITERATE_CATEGORIES
) const;
396 /** Returns value of given attribute. If none found, returns NULL-variant.
398 wxVariant
GetPropertyAttribute( wxPGPropArg id
,
399 const wxString
& attrName
) const
401 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullVariant
)
402 return p
->GetAttribute(attrName
);
405 /** Returns pointer of property's nearest parent category. If no category
408 wxPropertyCategory
* GetPropertyCategory( wxPGPropArg id
) const
410 wxPG_PROP_ID_CONST_CALL_PROLOG_RETVAL(NULL
)
411 return m_pState
->GetPropertyCategory(p
);
414 /** Returns client data (void*) of a property. */
415 void* GetPropertyClientData( wxPGPropArg id
) const
417 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL
)
418 return p
->GetClientData();
422 Returns first property which label matches given string.
424 NULL if none found. Note that this operation is extremely slow when
425 compared to GetPropertyByName().
427 wxPGProperty
* GetPropertyByLabel( const wxString
& label
) const;
429 /** Returns property with given name. NULL if none found.
431 wxPGProperty
* GetPropertyByName( const wxString
& name
) const;
433 /** Returns child property 'subname' of property 'name'. Same as
434 calling GetPropertyByName("name.subname"), albeit slightly faster.
436 wxPGProperty
* GetPropertyByName( const wxString
& name
,
437 const wxString
& subname
) const;
439 /** Returns property's editor. */
440 const wxPGEditor
* GetPropertyEditor( wxPGPropArg id
) const
442 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL
)
443 return p
->GetEditorClass();
446 /** Returns help string associated with a property. */
447 wxString
GetPropertyHelpString( wxPGPropArg id
) const
449 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString
)
450 return p
->GetHelpString();
453 /** Returns property's custom value image (NULL of none). */
454 wxBitmap
* GetPropertyImage( wxPGPropArg id
) const
456 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL
)
457 return p
->GetValueImage();
460 /** Returns label of a property. */
461 const wxString
& GetPropertyLabel( wxPGPropArg id
)
463 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString
)
464 return p
->GetLabel();
467 /** Returns name of a property, by which it is globally accessible. */
468 wxString
GetPropertyName( wxPGProperty
* property
)
470 return property
->GetName();
473 /** Returns parent item of a property. */
474 wxPGProperty
* GetPropertyParent( wxPGPropArg id
)
476 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxNullProperty
)
477 return p
->GetParent();
481 /** Returns validator of a property as a reference, which you
482 can pass to any number of SetPropertyValidator.
484 wxValidator
* GetPropertyValidator( wxPGPropArg id
)
486 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(NULL
)
487 return p
->GetValidator();
491 /** Returns value as wxVariant. To get wxObject pointer from it,
492 you will have to use WX_PG_VARIANT_TO_WXOBJECT(VARIANT,CLASSNAME) macro.
494 If property value is unspecified, Null variant is returned.
496 wxVariant
GetPropertyValue( wxPGPropArg id
)
498 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxVariant())
499 return p
->GetValue();
502 wxString
GetPropertyValueAsString( wxPGPropArg id
) const;
503 long GetPropertyValueAsLong( wxPGPropArg id
) const;
504 unsigned long GetPropertyValueAsULong( wxPGPropArg id
) const
506 return (unsigned long) GetPropertyValueAsLong(id
);
508 int GetPropertyValueAsInt( wxPGPropArg id
) const
509 { return (int)GetPropertyValueAsLong(id
); }
510 bool GetPropertyValueAsBool( wxPGPropArg id
) const;
511 double GetPropertyValueAsDouble( wxPGPropArg id
) const;
513 #define wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(TYPENAME, DEFVAL) \
514 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(DEFVAL) \
515 wxString typeName(wxS(TYPENAME)); \
516 wxVariant value = p->GetValue(); \
517 if ( value.GetType() != typeName ) \
519 wxPGGetFailed(p, typeName); \
523 #define wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK(TYPENAME, DEFVAL) \
524 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(DEFVAL) \
525 wxVariant value = p->GetValue(); \
526 if ( value.GetType() != wxS(TYPENAME) ) \
529 wxArrayString GetPropertyValueAsArrayString( wxPGPropArg id ) const
531 wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL("arrstring",
533 return value
.GetArrayString();
537 wxLongLong_t
GetPropertyValueAsLongLong( wxPGPropArg id
) const
539 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(0)
540 return p
->GetValue().GetLongLong().GetValue();
543 wxULongLong_t
GetPropertyValueAsULongLong( wxPGPropArg id
) const
545 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(0)
546 return p
->GetValue().GetULongLong().GetValue();
550 wxArrayInt
GetPropertyValueAsArrayInt( wxPGPropArg id
) const
552 wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL("wxArrayInt",
560 wxDateTime
GetPropertyValueAsDateTime( wxPGPropArg id
) const
562 wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL("datetime",
564 return value
.GetDateTime();
568 /** Returns a wxVariant list containing wxVariant versions of all
569 property values. Order is not guaranteed.
571 Use wxPG_KEEP_STRUCTURE to retain category structure; each sub
572 category will be its own wxVariantList of wxVariant.
573 Use wxPG_INC_ATTRIBUTES to include property attributes as well.
574 Each attribute will be stored as list variant named
575 "@@<propname>@@attr."
578 wxVariant
GetPropertyValues( const wxString
& listname
= wxEmptyString
,
579 wxPGProperty
* baseparent
= NULL
, long flags
= 0 ) const
581 return m_pState
->DoGetPropertyValues(listname
, baseparent
, flags
);
585 Returns currently selected property. NULL if none.
587 @remarks When wxPG_EX_MULTIPLE_SELECTION extra style is used, this
588 member function returns the focused property, that is the
589 one which can have active editor.
591 wxPGProperty
* GetSelection() const;
594 Returns list of currently selected properties.
596 @remarks wxArrayPGProperty should be compatible with std::vector API.
598 const wxArrayPGProperty
& GetSelectedProperties() const
600 return m_pState
->m_selection
;
603 wxPropertyGridPageState
* GetState() const { return m_pState
; }
605 /** Similar to GetIterator(), but instead returns wxPGVIterator instance,
606 which can be useful for forward-iterating through arbitrary property
610 See @ref propgrid_iterator_flags.
612 virtual wxPGVIterator
GetVIterator( int flags
) const;
614 /** Hides or reveals a property.
616 If true, hides property, otherwise reveals it.
618 By default changes are applied recursively. Set this paramter
619 wxPG_DONT_RECURSE to prevent this.
621 bool HideProperty( wxPGPropArg id
,
623 int flags
= wxPG_RECURSE
);
625 #if wxPG_INCLUDE_ADVPROPS
626 /** Initializes *all* property types. Causes references to most object
627 files in the library, so calling this may cause significant increase
628 in executable size when linking with static library.
630 static void InitAllTypeHandlers();
632 static void InitAllTypeHandlers() { }
636 /** Inserts property to the property container.
639 New property is inserted just prior to this. Available only
640 in the first variant. There are two versions of this function
641 to allow this parameter to be either an id or name to
645 Pointer to the inserted property. wxPropertyGrid will take
646 ownership of this object.
649 New property is inserted under this category. Available only
650 in the second variant. There are two versions of this function
651 to allow this parameter to be either an id or name to
655 Index under category. Available only in the second variant.
656 If index is < 0, property is appended in category.
659 Returns id for the property,
663 - wxPropertyGrid takes the ownership of the property pointer.
665 - While Append may be faster way to add items, make note that when
666 both types of data storage (categoric and
667 non-categoric) are active, Insert becomes even more slow. This is
668 especially true if current mode is non-categoric.
675 wxPGProperty* my_cat_id = propertygrid->Append(
676 new wxPropertyCategory("My Category") );
680 // insert into category - using second variant
681 wxPGProperty* my_item_id_1 = propertygrid->Insert(
682 my_cat_id, 0, new wxStringProperty("My String 1") );
684 // insert before to first item - using first variant
685 wxPGProperty* my_item_id_2 = propertygrid->Insert(
686 my_item_id, new wxStringProperty("My String 2") );
691 wxPGProperty
* Insert( wxPGPropArg priorThis
, wxPGProperty
* newproperty
);
692 wxPGProperty
* Insert( wxPGPropArg parent
,
694 wxPGProperty
* newproperty
);
697 /** Returns true if property is a category. */
698 bool IsPropertyCategory( wxPGPropArg id
) const
700 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
701 return p
->IsCategory();
704 /** Returns true if property is enabled. */
705 bool IsPropertyEnabled( wxPGPropArg id
) const
707 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
708 return (!(p
->GetFlags() & wxPG_PROP_DISABLED
))?true:false;
712 Returns true if given property is expanded.
714 Naturally, always returns false for properties that cannot be expanded.
716 bool IsPropertyExpanded( wxPGPropArg id
) const;
719 Returns true if property has been modified after value set or modify
720 flag clear by software.
722 bool IsPropertyModified( wxPGPropArg id
) const
724 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
725 return ( (p
->GetFlags() & wxPG_PROP_MODIFIED
) ? true : false );
729 Returns true if property is selected.
731 bool IsPropertySelected( wxPGPropArg id
) const
733 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
734 return m_pState
->DoIsPropertySelected(p
);
738 Returns true if property is shown (ie hideproperty with true not
741 bool IsPropertyShown( wxPGPropArg id
) const
743 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
744 return (!(p
->GetFlags() & wxPG_PROP_HIDDEN
))?true:false;
747 /** Returns true if property value is set to unspecified.
749 bool IsPropertyValueUnspecified( wxPGPropArg id
) const
751 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
752 return p
->IsValueUnspecified();
756 Disables (limit = true) or enables (limit = false) wxTextCtrl editor of
757 a property, if it is not the sole mean to edit the value.
759 void LimitPropertyEditing( wxPGPropArg id
, bool limit
= true );
761 /** If state is shown in it's grid, refresh it now.
763 virtual void RefreshGrid( wxPropertyGridPageState
* state
= NULL
);
765 #if wxPG_INCLUDE_ADVPROPS
767 Initializes additional property editors (SpinCtrl etc.). Causes
768 references to most object files in the library, so calling this may
769 cause significant increase in executable size when linking with static
772 static void RegisterAdditionalEditors();
774 static void RegisterAdditionalEditors() { }
777 /** Replaces property with id with newly created property. For example,
778 this code replaces existing property named "Flags" with one that
779 will have different set of items:
781 pg->ReplaceProperty("Flags",
782 wxFlagsProperty("Flags", wxPG_LABEL, newItems))
784 For more info, see wxPropertyGrid::Insert.
786 wxPGProperty
* ReplaceProperty( wxPGPropArg id
, wxPGProperty
* property
);
788 /** @anchor propgridinterface_editablestate_flags
790 Flags for wxPropertyGridInterface::SaveEditableState() and
791 wxPropertyGridInterface::RestoreEditableState().
793 enum EditableStateFlags
795 /** Include selected property. */
796 SelectionState
= 0x01,
797 /** Include expanded/collapsed property information. */
798 ExpandedState
= 0x02,
799 /** Include scrolled position. */
800 ScrollPosState
= 0x04,
801 /** Include selected page information.
802 Only applies to wxPropertyGridManager. */
804 /** Include splitter position. Stored for each page. */
805 SplitterPosState
= 0x10,
806 /** Include description box size.
807 Only applies to wxPropertyGridManager. */
811 Include all supported user editable state information.
812 This is usually the default value. */
813 AllStates
= SelectionState
|
822 Restores user-editable state.
824 See also wxPropertyGridInterface::SaveEditableState().
827 String generated by SaveEditableState.
830 Which parts to restore from source string. See @ref
831 propgridinterface_editablestate_flags "list of editable state
835 False if there was problem reading the string.
838 If some parts of state (such as scrolled or splitter position) fail to
839 restore correctly, please make sure that you call this function after
840 wxPropertyGrid size has been set (this may sometimes be tricky when
843 bool RestoreEditableState( const wxString
& src
,
844 int restoreStates
= AllStates
);
847 Used to acquire user-editable state (selected property, expanded
848 properties, scrolled position, splitter positions).
850 @param includedStates
851 Which parts of state to include. See @ref
852 propgridinterface_editablestate_flags "list of editable state flags".
854 wxString
SaveEditableState( int includedStates
= AllStates
) const;
857 Lets user to set the strings listed in the choice dropdown of a
858 wxBoolProperty. Defaults are "True" and "False", so changing them to,
859 say, "Yes" and "No" may be useful in some less technical applications.
861 static void SetBoolChoices( const wxString
& trueChoice
,
862 const wxString
& falseChoice
);
864 /** Sets an attribute for this property.
866 Text identifier of attribute. See @ref propgrid_property_attributes.
870 Optional. Use wxPG_RECURSE to set the attribute to child properties
873 void SetPropertyAttribute( wxPGPropArg id
,
874 const wxString
& attrName
,
878 DoSetPropertyAttribute(id
,attrName
,value
,argFlags
);
881 /** Sets property attribute for all applicapple properties.
882 Be sure to use this method only after all properties have been
885 void SetPropertyAttributeAll( const wxString
& attrName
, wxVariant value
);
888 Sets background colour of a property.
891 Property name or pointer.
894 New background colour.
897 Default is wxPG_RECURSE which causes colour to be set recursively.
898 Omit this flag to only set colour for the property in question
899 and not any of its children.
901 void SetPropertyBackgroundColour( wxPGPropArg id
,
902 const wxColour
& colour
,
903 int flags
= wxPG_RECURSE
);
905 /** Resets text and background colours of given property.
907 void SetPropertyColoursToDefault( wxPGPropArg id
);
910 Sets text colour of a property.
913 Property name or pointer.
916 New background colour.
919 Default is wxPG_RECURSE which causes colour to be set recursively.
920 Omit this flag to only set colour for the property in question
921 and not any of its children.
923 void SetPropertyTextColour( wxPGPropArg id
,
925 int flags
= wxPG_RECURSE
);
928 Returns background colour of first cell of a property.
930 wxColour
GetPropertyBackgroundColour( wxPGPropArg id
) const
932 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxColour())
933 return p
->GetCell(0).GetBgCol();
937 Returns text colour of first cell of a property.
939 wxColour
GetPropertyTextColour( wxPGPropArg id
) const
941 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxColour())
942 return p
->GetCell(0).GetFgCol();
945 /** Sets text, bitmap, and colours for given column's cell.
948 - You can set label cell by setting column to 0.
949 - You can use wxPG_LABEL as text to use default text for column.
951 void SetPropertyCell( wxPGPropArg id
,
953 const wxString
& text
= wxEmptyString
,
954 const wxBitmap
& bitmap
= wxNullBitmap
,
955 const wxColour
& fgCol
= wxNullColour
,
956 const wxColour
& bgCol
= wxNullColour
);
958 /** Sets client data (void*) of a property.
960 This untyped client data has to be deleted manually.
962 void SetPropertyClientData( wxPGPropArg id
, void* clientData
)
964 wxPG_PROP_ARG_CALL_PROLOG()
965 p
->SetClientData(clientData
);
968 /** Sets editor for a property.
971 For builtin editors, use wxPGEditor_X, where X is builtin editor's
972 name (TextCtrl, Choice, etc. see wxPGEditor documentation for full
975 For custom editors, use pointer you received from
976 wxPropertyGrid::RegisterEditorClass().
978 void SetPropertyEditor( wxPGPropArg id
, const wxPGEditor
* editor
)
980 wxPG_PROP_ARG_CALL_PROLOG()
981 wxCHECK_RET( editor
, wxT("unknown/NULL editor") );
982 p
->SetEditor(editor
);
986 /** Sets editor control of a property. As editor argument, use
987 editor name string, such as "TextCtrl" or "Choice".
989 void SetPropertyEditor( wxPGPropArg id
, const wxString
& editorName
)
991 SetPropertyEditor(id
,GetEditorByName(editorName
));
994 /** Sets label of a property.
996 void SetPropertyLabel( wxPGPropArg id
, const wxString
& newproplabel
);
999 Sets name of a property.
1002 Name or pointer of property which name to change.
1005 New name for property.
1007 void SetPropertyName( wxPGPropArg id
, const wxString
& newName
)
1009 wxPG_PROP_ARG_CALL_PROLOG()
1010 m_pState
->DoSetPropertyName( p
, newName
);
1014 Sets property (and, recursively, its children) to have read-only value.
1015 In other words, user cannot change the value in the editor, but they
1018 This is mainly for use with textctrl editor. Not all other editors fully
1021 By default changes are applied recursively. Set this paramter
1022 wxPG_DONT_RECURSE to prevent this.
1024 void SetPropertyReadOnly( wxPGPropArg id
,
1026 int flags
= wxPG_RECURSE
)
1028 wxPG_PROP_ARG_CALL_PROLOG()
1029 if ( flags
& wxPG_RECURSE
)
1030 p
->SetFlagRecursively(wxPG_PROP_READONLY
, set
);
1032 p
->ChangeFlag(wxPG_PROP_READONLY
, set
);
1035 /** Sets property's value to unspecified.
1036 If it has children (it may be category), then the same thing is done to
1039 void SetPropertyValueUnspecified( wxPGPropArg id
)
1041 wxPG_PROP_ARG_CALL_PROLOG()
1042 p
->SetValueToUnspecified();
1046 Sets property values from a list of wxVariants.
1048 void SetPropertyValues( const wxVariantList
& list
,
1049 wxPGPropArg defaultCategory
= wxNullProperty
)
1052 if ( defaultCategory
.HasName() ) p
= defaultCategory
.GetPtr(this);
1053 else p
= defaultCategory
.GetPtr0();
1054 m_pState
->DoSetPropertyValues(list
, p
);
1058 Sets property values from a list of wxVariants.
1060 void SetPropertyValues( const wxVariant
& list
,
1061 wxPGPropArg defaultCategory
= wxNullProperty
)
1063 SetPropertyValues(list
.GetList(),defaultCategory
);
1066 /** Associates the help string with property.
1068 By default, text is shown either in the manager's "description"
1069 text box or in the status bar. If extra window style
1070 wxPG_EX_HELP_AS_TOOLTIPS is used, then the text will appear as a
1073 void SetPropertyHelpString( wxPGPropArg id
, const wxString
& helpString
)
1075 wxPG_PROP_ARG_CALL_PROLOG()
1076 p
->SetHelpString(helpString
);
1079 /** Set wxBitmap in front of the value.
1081 - Bitmap will be scaled to a size returned by
1082 wxPropertyGrid::GetImageSize();
1084 void SetPropertyImage( wxPGPropArg id
, wxBitmap
& bmp
)
1086 wxPG_PROP_ARG_CALL_PROLOG()
1087 p
->SetValueImage(bmp
);
1091 /** Sets max length of property's text.
1093 bool SetPropertyMaxLength( wxPGPropArg id
, int maxLen
);
1095 #if wxUSE_VALIDATORS
1096 /** Sets validator of a property.
1098 void SetPropertyValidator( wxPGPropArg id
, const wxValidator
& validator
)
1100 wxPG_PROP_ARG_CALL_PROLOG()
1101 p
->SetValidator(validator
);
1105 /** Sets value (long integer) of a property.
1107 void SetPropertyValue( wxPGPropArg id
, long value
)
1110 SetPropVal( id
, v
);
1113 /** Sets value (integer) of a property.
1115 void SetPropertyValue( wxPGPropArg id
, int value
)
1117 wxVariant
v((long)value
);
1118 SetPropVal( id
, v
);
1120 /** Sets value (floating point) of a property.
1122 void SetPropertyValue( wxPGPropArg id
, double value
)
1125 SetPropVal( id
, v
);
1127 /** Sets value (bool) of a property.
1129 void SetPropertyValue( wxPGPropArg id
, bool value
)
1132 SetPropVal( id
, v
);
1135 void SetPropertyValue( wxPGPropArg id
, const wchar_t* value
)
1137 SetPropertyValueString( id
, wxString(value
) );
1140 void SetPropertyValue( wxPGPropArg id
, const char* value
)
1142 SetPropertyValueString( id
, wxString(value
) );
1144 void SetPropertyValue( wxPGPropArg id
, const wxString
& value
)
1146 SetPropertyValueString( id
, value
);
1149 /** Sets value (wxArrayString) of a property.
1151 void SetPropertyValue( wxPGPropArg id
, const wxArrayString
& value
)
1154 SetPropVal( id
, v
);
1158 void SetPropertyValue( wxPGPropArg id
, const wxDateTime
& value
)
1161 SetPropVal( id
, v
);
1165 /** Sets value (wxObject*) of a property.
1167 void SetPropertyValue( wxPGPropArg id
, wxObject
* value
)
1170 SetPropVal( id
, v
);
1173 void SetPropertyValue( wxPGPropArg id
, wxObject
& value
)
1175 wxVariant
v(&value
);
1176 SetPropVal( id
, v
);
1180 /** Sets value (wxLongLong&) of a property.
1182 void SetPropertyValue( wxPGPropArg id
, wxLongLong_t value
)
1184 wxVariant v
= WXVARIANT(wxLongLong(value
));
1185 SetPropVal( id
, v
);
1187 /** Sets value (wxULongLong&) of a property.
1189 void SetPropertyValue( wxPGPropArg id
, wxULongLong_t value
)
1191 wxVariant v
= WXVARIANT(wxULongLong(value
));
1192 SetPropVal( id
, v
);
1196 /** Sets value (wxArrayInt&) of a property.
1198 void SetPropertyValue( wxPGPropArg id
, const wxArrayInt
& value
)
1200 wxVariant v
= WXVARIANT(value
);
1201 SetPropVal( id
, v
);
1204 /** Sets value (wxString) of a property.
1207 This method uses wxPGProperty::SetValueFromString, which all properties
1208 should implement. This means that there should not be a type error,
1209 and instead the string is converted to property's actual value type.
1211 void SetPropertyValueString( wxPGPropArg id
, const wxString
& value
);
1213 /** Sets value (wxVariant&) of a property.
1216 Use wxPropertyGrid::ChangePropertyValue() instead if you need to run
1217 through validation process and send property change event.
1219 void SetPropertyValue( wxPGPropArg id
, wxVariant value
)
1221 SetPropVal( id
, value
);
1224 /** Sets value (wxVariant&) of a property. Same as SetPropertyValue, but
1225 accepts reference. */
1226 void SetPropVal( wxPGPropArg id
, wxVariant
& value
);
1228 /** Adjusts how wxPropertyGrid behaves when invalid value is entered
1231 See @link vfbflags list of valid flags values@endlink
1233 void SetValidationFailureBehavior( int vfbFlags
);
1236 Sorts all properties recursively.
1239 This can contain any of the following options:
1240 wxPG_SORT_TOP_LEVEL_ONLY: Only sort categories and their
1241 immediate children. Sorting done by wxPG_AUTO_SORT option
1244 @see SortChildren, wxPropertyGrid::SetSortFunction
1246 void Sort( int flags
= 0 );
1249 Sorts children of a property.
1252 Name or pointer to a property.
1255 This can contain any of the following options:
1256 wxPG_RECURSE: Sorts recursively.
1258 @see Sort, wxPropertyGrid::SetSortFunction
1260 void SortChildren( wxPGPropArg id
, int flags
= 0 )
1262 wxPG_PROP_ARG_CALL_PROLOG()
1263 m_pState
->DoSortChildren(p
, flags
);
1266 // GetPropertyByName With nice assertion error message.
1267 wxPGProperty
* GetPropertyByNameA( const wxString
& name
) const;
1269 static wxPGEditor
* GetEditorByName( const wxString
& editorName
);
1271 // NOTE: This function reselects the property and may cause
1272 // excess flicker, so to just call Refresh() on a rect
1273 // of single property, call DrawItem() instead.
1274 virtual void RefreshProperty( wxPGProperty
* p
) = 0;
1278 bool DoClearSelection( bool validation
= false,
1282 In derived class, implement to set editable state component with
1283 given name to given value.
1285 virtual bool SetEditableStateItem( const wxString
& name
, wxVariant value
)
1293 In derived class, implement to return editable state component with
1296 virtual wxVariant
GetEditableStateItem( const wxString
& name
) const
1299 return wxNullVariant
;
1302 // Returns page state data for given (sub) page (-1 means current page).
1303 virtual wxPropertyGridPageState
* GetPageState( int pageIndex
) const
1305 if ( pageIndex
<= 0 )
1310 virtual bool DoSelectPage( int WXUNUSED(index
) ) { return true; }
1312 // Default call's m_pState's BaseGetPropertyByName
1313 virtual wxPGProperty
* DoGetPropertyByName( const wxString
& name
) const;
1315 // Deriving classes must set this (it must be only or current page).
1316 wxPropertyGridPageState
* m_pState
;
1318 // Intermediate version needed due to wxVariant copying inefficiency
1319 void DoSetPropertyAttribute( wxPGPropArg id
,
1320 const wxString
& name
,
1321 wxVariant
& value
, long argFlags
);
1323 // Empty string object to return from member functions returning const
1325 wxString m_emptyString
;
1328 // Cannot be GetGrid() due to ambiguity issues.
1329 wxPropertyGrid
* GetPropertyGrid()
1333 return m_pState
->GetGrid();
1336 // Cannot be GetGrid() due to ambiguity issues.
1337 const wxPropertyGrid
* GetPropertyGrid() const
1341 return static_cast<const wxPropertyGrid
*>(m_pState
->GetGrid());
1344 friend class wxPropertyGrid
;
1345 friend class wxPropertyGridManager
;
1348 #endif // wxUSE_PROPGRID
1350 #endif // __WX_PROPGRID_PROPGRIDIFACE_H__