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
);
865 Set proportion of a auto-stretchable column. wxPG_SPLITTER_AUTO_CENTER
866 window style needs to be used to indicate that columns are auto-
869 @returns Returns @false on failure.
871 @remarks You should call this for individual pages of
872 wxPropertyGridManager (if used).
874 bool SetColumnProportion( unsigned int column
, int proportion
);
876 /** Sets an attribute for this property.
878 Text identifier of attribute. See @ref propgrid_property_attributes.
882 Optional. Use wxPG_RECURSE to set the attribute to child properties
885 void SetPropertyAttribute( wxPGPropArg id
,
886 const wxString
& attrName
,
890 DoSetPropertyAttribute(id
,attrName
,value
,argFlags
);
893 /** Sets property attribute for all applicapple properties.
894 Be sure to use this method only after all properties have been
897 void SetPropertyAttributeAll( const wxString
& attrName
, wxVariant value
);
900 Sets background colour of a property.
903 Property name or pointer.
906 New background colour.
909 Default is wxPG_RECURSE which causes colour to be set recursively.
910 Omit this flag to only set colour for the property in question
911 and not any of its children.
913 void SetPropertyBackgroundColour( wxPGPropArg id
,
914 const wxColour
& colour
,
915 int flags
= wxPG_RECURSE
);
917 /** Resets text and background colours of given property.
919 void SetPropertyColoursToDefault( wxPGPropArg id
);
922 Sets text colour of a property.
925 Property name or pointer.
928 New background colour.
931 Default is wxPG_RECURSE which causes colour to be set recursively.
932 Omit this flag to only set colour for the property in question
933 and not any of its children.
935 void SetPropertyTextColour( wxPGPropArg id
,
937 int flags
= wxPG_RECURSE
);
940 Returns background colour of first cell of a property.
942 wxColour
GetPropertyBackgroundColour( wxPGPropArg id
) const
944 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxColour())
945 return p
->GetCell(0).GetBgCol();
949 Returns text colour of first cell of a property.
951 wxColour
GetPropertyTextColour( wxPGPropArg id
) const
953 wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxColour())
954 return p
->GetCell(0).GetFgCol();
957 /** Sets text, bitmap, and colours for given column's cell.
960 - You can set label cell by setting column to 0.
961 - You can use wxPG_LABEL as text to use default text for column.
963 void SetPropertyCell( wxPGPropArg id
,
965 const wxString
& text
= wxEmptyString
,
966 const wxBitmap
& bitmap
= wxNullBitmap
,
967 const wxColour
& fgCol
= wxNullColour
,
968 const wxColour
& bgCol
= wxNullColour
);
970 /** Sets client data (void*) of a property.
972 This untyped client data has to be deleted manually.
974 void SetPropertyClientData( wxPGPropArg id
, void* clientData
)
976 wxPG_PROP_ARG_CALL_PROLOG()
977 p
->SetClientData(clientData
);
980 /** Sets editor for a property.
983 For builtin editors, use wxPGEditor_X, where X is builtin editor's
984 name (TextCtrl, Choice, etc. see wxPGEditor documentation for full
987 For custom editors, use pointer you received from
988 wxPropertyGrid::RegisterEditorClass().
990 void SetPropertyEditor( wxPGPropArg id
, const wxPGEditor
* editor
)
992 wxPG_PROP_ARG_CALL_PROLOG()
993 wxCHECK_RET( editor
, wxT("unknown/NULL editor") );
994 p
->SetEditor(editor
);
998 /** Sets editor control of a property. As editor argument, use
999 editor name string, such as "TextCtrl" or "Choice".
1001 void SetPropertyEditor( wxPGPropArg id
, const wxString
& editorName
)
1003 SetPropertyEditor(id
,GetEditorByName(editorName
));
1006 /** Sets label of a property.
1008 void SetPropertyLabel( wxPGPropArg id
, const wxString
& newproplabel
);
1011 Sets name of a property.
1014 Name or pointer of property which name to change.
1017 New name for property.
1019 void SetPropertyName( wxPGPropArg id
, const wxString
& newName
)
1021 wxPG_PROP_ARG_CALL_PROLOG()
1022 m_pState
->DoSetPropertyName( p
, newName
);
1026 Sets property (and, recursively, its children) to have read-only value.
1027 In other words, user cannot change the value in the editor, but they
1030 This is mainly for use with textctrl editor. Not all other editors fully
1033 By default changes are applied recursively. Set this paramter
1034 wxPG_DONT_RECURSE to prevent this.
1036 void SetPropertyReadOnly( wxPGPropArg id
,
1038 int flags
= wxPG_RECURSE
)
1040 wxPG_PROP_ARG_CALL_PROLOG()
1041 if ( flags
& wxPG_RECURSE
)
1042 p
->SetFlagRecursively(wxPG_PROP_READONLY
, set
);
1044 p
->ChangeFlag(wxPG_PROP_READONLY
, set
);
1047 /** Sets property's value to unspecified.
1048 If it has children (it may be category), then the same thing is done to
1051 void SetPropertyValueUnspecified( wxPGPropArg id
)
1053 wxPG_PROP_ARG_CALL_PROLOG()
1054 p
->SetValueToUnspecified();
1058 Sets property values from a list of wxVariants.
1060 void SetPropertyValues( const wxVariantList
& list
,
1061 wxPGPropArg defaultCategory
= wxNullProperty
)
1064 if ( defaultCategory
.HasName() ) p
= defaultCategory
.GetPtr(this);
1065 else p
= defaultCategory
.GetPtr0();
1066 m_pState
->DoSetPropertyValues(list
, p
);
1070 Sets property values from a list of wxVariants.
1072 void SetPropertyValues( const wxVariant
& list
,
1073 wxPGPropArg defaultCategory
= wxNullProperty
)
1075 SetPropertyValues(list
.GetList(),defaultCategory
);
1078 /** Associates the help string with property.
1080 By default, text is shown either in the manager's "description"
1081 text box or in the status bar. If extra window style
1082 wxPG_EX_HELP_AS_TOOLTIPS is used, then the text will appear as a
1085 void SetPropertyHelpString( wxPGPropArg id
, const wxString
& helpString
)
1087 wxPG_PROP_ARG_CALL_PROLOG()
1088 p
->SetHelpString(helpString
);
1091 /** Set wxBitmap in front of the value.
1093 - Bitmap will be scaled to a size returned by
1094 wxPropertyGrid::GetImageSize();
1096 void SetPropertyImage( wxPGPropArg id
, wxBitmap
& bmp
)
1098 wxPG_PROP_ARG_CALL_PROLOG()
1099 p
->SetValueImage(bmp
);
1103 /** Sets max length of property's text.
1105 bool SetPropertyMaxLength( wxPGPropArg id
, int maxLen
);
1107 #if wxUSE_VALIDATORS
1108 /** Sets validator of a property.
1110 void SetPropertyValidator( wxPGPropArg id
, const wxValidator
& validator
)
1112 wxPG_PROP_ARG_CALL_PROLOG()
1113 p
->SetValidator(validator
);
1117 /** Sets value (long integer) of a property.
1119 void SetPropertyValue( wxPGPropArg id
, long value
)
1122 SetPropVal( id
, v
);
1125 /** Sets value (integer) of a property.
1127 void SetPropertyValue( wxPGPropArg id
, int value
)
1129 wxVariant
v((long)value
);
1130 SetPropVal( id
, v
);
1132 /** Sets value (floating point) of a property.
1134 void SetPropertyValue( wxPGPropArg id
, double value
)
1137 SetPropVal( id
, v
);
1139 /** Sets value (bool) of a property.
1141 void SetPropertyValue( wxPGPropArg id
, bool value
)
1144 SetPropVal( id
, v
);
1147 void SetPropertyValue( wxPGPropArg id
, const wchar_t* value
)
1149 SetPropertyValueString( id
, wxString(value
) );
1152 void SetPropertyValue( wxPGPropArg id
, const char* value
)
1154 SetPropertyValueString( id
, wxString(value
) );
1156 void SetPropertyValue( wxPGPropArg id
, const wxString
& value
)
1158 SetPropertyValueString( id
, value
);
1161 /** Sets value (wxArrayString) of a property.
1163 void SetPropertyValue( wxPGPropArg id
, const wxArrayString
& value
)
1166 SetPropVal( id
, v
);
1170 void SetPropertyValue( wxPGPropArg id
, const wxDateTime
& value
)
1173 SetPropVal( id
, v
);
1177 /** Sets value (wxObject*) of a property.
1179 void SetPropertyValue( wxPGPropArg id
, wxObject
* value
)
1182 SetPropVal( id
, v
);
1185 void SetPropertyValue( wxPGPropArg id
, wxObject
& value
)
1187 wxVariant
v(&value
);
1188 SetPropVal( id
, v
);
1192 /** Sets value (wxLongLong&) of a property.
1194 void SetPropertyValue( wxPGPropArg id
, wxLongLong_t value
)
1196 wxVariant v
= WXVARIANT(wxLongLong(value
));
1197 SetPropVal( id
, v
);
1199 /** Sets value (wxULongLong&) of a property.
1201 void SetPropertyValue( wxPGPropArg id
, wxULongLong_t value
)
1203 wxVariant v
= WXVARIANT(wxULongLong(value
));
1204 SetPropVal( id
, v
);
1208 /** Sets value (wxArrayInt&) of a property.
1210 void SetPropertyValue( wxPGPropArg id
, const wxArrayInt
& value
)
1212 wxVariant v
= WXVARIANT(value
);
1213 SetPropVal( id
, v
);
1216 /** Sets value (wxString) of a property.
1219 This method uses wxPGProperty::SetValueFromString, which all properties
1220 should implement. This means that there should not be a type error,
1221 and instead the string is converted to property's actual value type.
1223 void SetPropertyValueString( wxPGPropArg id
, const wxString
& value
);
1225 /** Sets value (wxVariant&) of a property.
1228 Use wxPropertyGrid::ChangePropertyValue() instead if you need to run
1229 through validation process and send property change event.
1231 void SetPropertyValue( wxPGPropArg id
, wxVariant value
)
1233 SetPropVal( id
, value
);
1236 /** Sets value (wxVariant&) of a property. Same as SetPropertyValue, but
1237 accepts reference. */
1238 void SetPropVal( wxPGPropArg id
, wxVariant
& value
);
1240 /** Adjusts how wxPropertyGrid behaves when invalid value is entered
1243 See @link vfbflags list of valid flags values@endlink
1245 void SetValidationFailureBehavior( int vfbFlags
);
1248 Sorts all properties recursively.
1251 This can contain any of the following options:
1252 wxPG_SORT_TOP_LEVEL_ONLY: Only sort categories and their
1253 immediate children. Sorting done by wxPG_AUTO_SORT option
1256 @see SortChildren, wxPropertyGrid::SetSortFunction
1258 void Sort( int flags
= 0 );
1261 Sorts children of a property.
1264 Name or pointer to a property.
1267 This can contain any of the following options:
1268 wxPG_RECURSE: Sorts recursively.
1270 @see Sort, wxPropertyGrid::SetSortFunction
1272 void SortChildren( wxPGPropArg id
, int flags
= 0 )
1274 wxPG_PROP_ARG_CALL_PROLOG()
1275 m_pState
->DoSortChildren(p
, flags
);
1278 // GetPropertyByName With nice assertion error message.
1279 wxPGProperty
* GetPropertyByNameA( const wxString
& name
) const;
1281 static wxPGEditor
* GetEditorByName( const wxString
& editorName
);
1283 // NOTE: This function reselects the property and may cause
1284 // excess flicker, so to just call Refresh() on a rect
1285 // of single property, call DrawItem() instead.
1286 virtual void RefreshProperty( wxPGProperty
* p
) = 0;
1290 bool DoClearSelection( bool validation
= false,
1294 In derived class, implement to set editable state component with
1295 given name to given value.
1297 virtual bool SetEditableStateItem( const wxString
& name
, wxVariant value
)
1305 In derived class, implement to return editable state component with
1308 virtual wxVariant
GetEditableStateItem( const wxString
& name
) const
1311 return wxNullVariant
;
1314 // Returns page state data for given (sub) page (-1 means current page).
1315 virtual wxPropertyGridPageState
* GetPageState( int pageIndex
) const
1317 if ( pageIndex
<= 0 )
1322 virtual bool DoSelectPage( int WXUNUSED(index
) ) { return true; }
1324 // Default call's m_pState's BaseGetPropertyByName
1325 virtual wxPGProperty
* DoGetPropertyByName( const wxString
& name
) const;
1327 // Deriving classes must set this (it must be only or current page).
1328 wxPropertyGridPageState
* m_pState
;
1330 // Intermediate version needed due to wxVariant copying inefficiency
1331 void DoSetPropertyAttribute( wxPGPropArg id
,
1332 const wxString
& name
,
1333 wxVariant
& value
, long argFlags
);
1335 // Empty string object to return from member functions returning const
1337 wxString m_emptyString
;
1340 // Cannot be GetGrid() due to ambiguity issues.
1341 wxPropertyGrid
* GetPropertyGrid()
1345 return m_pState
->GetGrid();
1348 // Cannot be GetGrid() due to ambiguity issues.
1349 const wxPropertyGrid
* GetPropertyGrid() const
1353 return static_cast<const wxPropertyGrid
*>(m_pState
->GetGrid());
1356 friend class wxPropertyGrid
;
1357 friend class wxPropertyGridManager
;
1360 #endif // wxUSE_PROPGRID
1362 #endif // __WX_PROPGRID_PROPGRIDIFACE_H__