1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxPGProperty
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
9 // -----------------------------------------------------------------------
12 @class wxPropertyGridInterface
14 Most of the shared property manipulation interface shared by wxPropertyGrid,
15 wxPropertyGridPage, and wxPropertyGridManager is defined in this class.
18 - In separate wxPropertyGrid component this class was known as
19 wxPropertyContainerMethods.
21 - wxPropertyGridInterface's property operation member functions all accept
22 a special wxPGPropArg id argument, using which you can refer to properties
23 either by their pointer (for performance) or by their name (for conveniency).
28 class WXDLLIMPEXP_PROPGRID wxPropertyGridInterface
33 virtual ~wxPropertyGridInterface() { }
36 Appends property to the list. wxPropertyGrid assumes ownership of the
37 object. Becomes child of most recently added category.
40 - wxPropertyGrid takes the ownership of the property pointer.
41 - If appending a category with name identical to a category already in
42 the wxPropertyGrid, then newly created category is deleted, and most
43 recently added category (under which properties are appended) is set
44 to the one with same name. This allows easier adding of items to same
45 categories in multiple passes.
46 - Does not automatically redraw the control, so you may need to call
47 Refresh() when calling this function after control has been shown for
50 wxPGProperty
* Append( wxPGProperty
* property
);
53 Same as Append(), but appends under given parent property.
56 Name or pointer to parent property.
61 wxPGProperty
* AppendIn( wxPGPropArg id
, wxPGProperty
* newProperty
);
64 In order to add new items into a property with private children (for
65 instance, wxFlagsProperty), you need to call this method.
66 After populating has been finished, you need to call EndAddChildren().
70 void BeginAddChildren( wxPGPropArg id
);
73 Deletes all properties.
75 virtual void Clear() = 0;
78 Deselect current selection, if any.
80 @return Returns @true if success (ie. validator did not intercept).
82 bool ClearSelection();
85 Resets modified status of all properties.
87 void ClearModifiedStatus();
90 Collapses given category or property with children.
92 @return Returns @true if actually collapsed.
94 bool Collapse( wxPGPropArg id
);
97 Collapses all items that can be collapsed.
99 @return Returns @false if failed (may fail if value in active
100 editor cannot be validated).
105 Changes value of a property, as if by user. Use this instead of
106 SetPropertyValue() if you need the value to run through validation
107 process, and also send the property change event.
109 @return Returns @true if value was successfully changed.
111 bool ChangePropertyValue( wxPGPropArg id
, wxVariant newValue
);
116 void DeleteProperty( wxPGPropArg id
);
121 bool DisableProperty( wxPGPropArg id
);
124 Returns @true if all property grid data changes have been committed. Usually
125 only returns @false if value in active editor has been invalidated by a
128 bool EditorValidate();
131 Enables or disables property.
134 Name or pointer to a property.
136 If @false, property is disabled instead.
138 bool EnableProperty( wxPGPropArg id
, bool enable
= true );
141 Called after population of property with fixed children has finished.
143 @see BeginAddChildren()
145 void EndAddChildren( wxPGPropArg id
);
148 Expands given category or property with children.
150 @return Returns @true if actually expanded.
152 bool Expand( wxPGPropArg id
);
155 Expands all items that can be expanded.
157 bool ExpandAll( bool expand
= true );
160 Returns id of first child of given property.
162 @remarks Does not return private children!
164 wxPGProperty
* GetFirstChild( wxPGPropArg id
);
168 Returns iterator class instance.
171 See @ref propgrid_iterator_flags. Value wxPG_ITERATE_DEFAULT causes
172 iteration over everything except private child properties.
174 Property to start iteration from. If @NULL, then first child of root
178 <b>wxPython Note:</b> Instead of ++ operator, use Next() method, and
179 instead of * operator, use GetProperty() method.
182 wxPropertyGridIterator
GetIterator( int flags
= wxPG_ITERATE_DEFAULT
,
183 wxPGProperty
* firstProp
= NULL
);
184 wxPropertyGridConstIterator
GetIterator( int flags
= wxPG_ITERATE_DEFAULT
,
185 wxPGProperty
* firstProp
= NULL
) const;
190 Returns iterator class instance.
193 See @ref propgrid_iterator_flags. Value wxPG_ITERATE_DEFAULT causes
194 iteration over everything except private child properties.
196 Either wxTOP or wxBOTTOM. wxTOP will indicate that iterations start
197 from the first property from the top, and wxBOTTOM means that the
198 iteration will instead begin from bottommost valid item.
201 <b>wxPython Note:</b> Instead of ++ operator, use Next() method, and
202 instead of * operator, use GetProperty() method.
205 wxPropertyGridIterator
GetIterator( int flags
, int startPos
);
206 wxPropertyGridConstIterator
GetIterator( int flags
, int startPos
) const;
210 Returns id of first item that matches given criteria.
213 See @ref propgrid_iterator_flags.
215 wxPGProperty
* GetFirst( int flags
= wxPG_ITERATE_ALL
);
218 Returns id of property with given name (case-sensitive).
220 wxPGProperty
* GetProperty( const wxString
& name
) const;
223 Adds to 'targetArr' pointers to properties that have given flags 'flags' set.
224 However, if @a 'inverse' is set to @true, then only properties without
225 given flags are stored.
230 Property flags to use.
234 Iterator flags to use. Default is everything expect private children.
235 See @ref propgrid_iterator_flags.
237 void GetPropertiesWithFlag( wxArrayPGProperty
* targetArr
,
238 wxPGProperty::FlagType flags
,
239 bool inverse
= false,
240 int iterFlags
= (wxPG_ITERATE_PROPERTIES
|wxPG_ITERATE_HIDDEN
|wxPG_ITERATE_CATEGORIES
) ) const;
243 Returns value of given attribute. If none found, returns wxNullVariant.
245 wxVariant
GetPropertyAttribute( wxPGPropArg id
, const wxString
& attrName
) const;
248 Returns pointer of property's nearest parent category. If no category
249 found, returns @NULL.
251 wxPropertyCategory
* GetPropertyCategory( wxPGPropArg id
) const;
253 /** Returns client data (void*) of a property. */
254 void* GetPropertyClientData( wxPGPropArg id
) const;
257 Returns first property which label matches given string. @NULL if none
258 found. Note that this operation is very slow when compared to
261 wxPGProperty
* GetPropertyByLabel( const wxString
& label
) const;
264 Returns property with given name. @NULL if none found.
266 wxPGProperty
* GetPropertyByName( const wxString
& name
) const;
269 Returns child property 'subname' of property 'name'. Same as
270 calling GetPropertyByName("name.subname"), albeit slightly faster.
272 wxPGProperty
* GetPropertyByName( const wxString
& name
,
273 const wxString
& subname
) const;
276 Returns property's editor.
278 const wxPGEditor
* GetPropertyEditor( wxPGPropArg id
) const;
281 Returns help string associated with a property.
283 wxString
GetPropertyHelpString( wxPGPropArg id
) const;
286 Returns property's custom value image (@NULL of none).
288 wxBitmap
* GetPropertyImage( wxPGPropArg id
) const;
290 /** Returns label of a property. */
291 const wxString
& GetPropertyLabel( wxPGPropArg id
);
293 /** Returns property's name, by which it is globally accessible. */
294 wxString
GetPropertyName( wxPGProperty
* property
);
297 Returns validator of a property as a reference, which you
298 can pass to any number of SetPropertyValidator.
300 wxValidator
* GetPropertyValidator( wxPGPropArg id
);
303 Returns property's value as wxVariant.
305 If property value is unspecified, Null variant is returned.
307 wxVariant
GetPropertyValue( wxPGPropArg id
);
309 /** Return's property's value as wxArrayInt. */
310 wxArrayInt
GetPropertyValueAsArrayInt( wxPGPropArg id
) const;
312 /** Returns property's value as wxArrayString. */
313 wxArrayString
GetPropertyValueAsArrayString( wxPGPropArg id
) const;
315 /** Returns property's value as bool */
316 bool GetPropertyValueAsBool( wxPGPropArg id
) const;
318 /** Return's property's value as wxDateTime. */
319 wxDateTime
GetPropertyValueAsDateTime( wxPGPropArg id
) const;
321 /** Returns property's value as double-precision floating point number. */
322 double GetPropertyValueAsDouble( wxPGPropArg id
) const;
324 /** Returns property's value as integer */
325 int GetPropertyValueAsInt( wxPGPropArg id
) const;
327 /** Returns property's value as integer */
328 long GetPropertyValueAsLong( wxPGPropArg id
) const;
330 /** Returns property's value as native signed 64-bit integer. */
331 wxLongLong_t
GetPropertyValueAsLongLong( wxPGPropArg id
) const;
334 Returns property's value as wxString. If property does not
335 use string value type, then its value is converted using
336 wxPGProperty::GetValueAsString().
338 wxString
GetPropertyValueAsString( wxPGPropArg id
) const;
340 /** Returns property's value as unsigned integer */
341 unsigned long GetPropertyValueAsULong( wxPGPropArg id
) const;
343 /** Returns property's value as native unsigned 64-bit integer. */
344 wxULongLong_t
GetPropertyValueAsULongLong( wxPGPropArg id
) const;
347 Returns a wxVariant list containing wxVariant versions of all
348 property values. Order is not guaranteed.
355 Use wxPG_KEEP_STRUCTURE to retain category structure; each sub
356 category will be its own wxVariantList of wxVariant.
358 Use wxPG_INC_ATTRIBUTES to include property attributes as well.
359 Each attribute will be stored as list variant named
360 "@@<propname>@@attr."
362 wxVariant
GetPropertyValues( const wxString
& listname
= wxEmptyString
,
363 wxPGProperty
* baseparent
= NULL
, long flags
= 0 ) const;
365 /** Returns currently selected property. */
366 wxPGProperty
* GetSelection() const;
369 Similar to GetIterator(), but instead returns wxPGVIterator instance,
370 which can be useful for forward-iterating through arbitrary property
374 See @ref propgrid_iterator_flags.
376 <b>wxPython Note:</b> Instead of ++ operator, use Next() method, and
377 instead of * operator, use GetProperty() method.
379 virtual wxPGVIterator
GetVIterator( int flags
) const;
382 Hides or reveals a property.
387 If @true, hides property, otherwise reveals it.
389 By default changes are applied recursively. Set this parameter
390 wxPG_DONT_RECURSE to prevent this.
392 bool HideProperty( wxPGPropArg id
, bool hide
= true, int flags
= wxPG_RECURSE
);
395 Initializes *all* property types. Causes references to most object
396 files in the library, so calling this may cause significant increase
397 in executable size when linking with static library.
399 static void InitAllTypeHandlers();
402 Inserts property to the property container.
405 New property is inserted just prior to this. Available only
406 in the first variant. There are two versions of this function
407 to allow this parameter to be either an id or name to
410 Pointer to the inserted property. wxPropertyGrid will take
411 ownership of this object.
413 @return Returns newProperty.
417 - wxPropertyGrid takes the ownership of the property pointer.
419 - While Append may be faster way to add items, make note that when
420 both types of data storage (categoric and
421 non-categoric) are active, Insert becomes even more slow. This is
422 especially true if current mode is non-categoric.
429 wxPGProperty* my_cat_id = propertygrid->Append( new wxPropertyCategory("My Category") );
433 // insert into category - using second variant
434 wxPGProperty* my_item_id_1 = propertygrid->Insert( my_cat_id, 0, new wxStringProperty("My String 1") );
436 // insert before to first item - using first variant
437 wxPGProperty* my_item_id_2 = propertygrid->Insert( my_item_id, new wxStringProperty("My String 2") );
441 wxPGProperty
* Insert( wxPGPropArg priorThis
, wxPGProperty
* newProperty
);
444 Inserts property to the property container.
445 See the other overload for more details.
448 New property is inserted under this category. Available only
449 in the second variant. There are two versions of this function
450 to allow this parameter to be either an id or name to
453 Index under category. Available only in the second variant.
454 If index is < 0, property is appended in category.
456 Pointer to the inserted property. wxPropertyGrid will take
457 ownership of this object.
459 @return Returns newProperty.
461 wxPGProperty
* Insert( wxPGPropArg parent
, int index
, wxPGProperty
* newProperty
);
463 /** Returns @true if property is a category. */
464 bool IsPropertyCategory( wxPGPropArg id
) const;
466 /** Returns @true if property is enabled. */
467 bool IsPropertyEnabled( wxPGPropArg id
) const;
470 Returns @true if given property is expanded. Naturally, always returns
471 @false for properties that cannot be expanded.
473 bool IsPropertyExpanded( wxPGPropArg id
) const;
476 Returns @true if property has been modified after value set or modify
477 flag clear by software.
479 bool IsPropertyModified( wxPGPropArg id
) const;
482 Returns @true if property is shown (ie. HideProperty() with @true not
485 bool IsPropertyShown( wxPGPropArg id
) const;
488 Returns @true if property value is set to unspecified.
490 bool IsPropertyValueUnspecified( wxPGPropArg id
) const;
493 Disables (limit = @true) or enables (limit = @false) wxTextCtrl editor
494 of a property, if it is not the sole mean to edit the value.
496 void LimitPropertyEditing( wxPGPropArg id
, bool limit
= true );
499 Initializes additional property editors (SpinCtrl etc.). Causes
500 references to most object files in the library, so calling this may
501 cause significant increase in executable size when linking with static
504 static void RegisterAdditionalEditors();
507 Replaces property with id with newly created one. For example,
508 this code replaces existing property named "Flags" with one that
509 will have different set of items:
512 pg->ReplaceProperty("Flags",
513 wxFlagsProperty("Flags", wxPG_LABEL, newItems))
518 wxPGProperty
* ReplaceProperty( wxPGPropArg id
, wxPGProperty
* property
);
521 @anchor propgridinterface_editablestate_flags
523 Flags for wxPropertyGridInterface::SaveEditableState() and
524 wxPropertyGridInterface::RestoreEditableState().
526 enum EditableStateFlags
528 /** Include selected property. */
529 SelectionState
= 0x01,
530 /** Include expanded/collapsed property information. */
531 ExpandedState
= 0x02,
532 /** Include scrolled position. */
533 ScrollPosState
= 0x04,
534 /** Include selected page information. Only applies to
535 wxPropertyGridManager. */
537 /** Include splitter position. Stored for each page. */
538 SplitterPosState
= 0x10,
539 /** Include description box size.
540 Only applies to wxPropertyGridManager. */
544 Include all supported user editable state information.
545 This is usually the default value. */
546 AllStates
= SelectionState
|
555 Restores user-editable state. See also wxPropertyGridInterface::SaveEditableState().
558 String generated by SaveEditableState.
561 Which parts to restore from source string. See @ref propgridinterface_editablestate_flags
562 "list of editable state flags".
564 @return Returns @false if there was problem reading the string.
566 @remarks If some parts of state (such as scrolled or splitter position)
567 fail to restore correctly, please make sure that you call this
568 function after wxPropertyGrid size has been set (this may
569 sometimes be tricky when sizers are used).
571 bool RestoreEditableState( const wxString
& src
,
572 int restoreStates
= AllStates
);
575 Used to acquire user-editable state (selected property, expanded
576 properties, scrolled position, splitter positions).
578 @param includedStates
579 Which parts of state to include. See @ref propgridinterface_editablestate_flags
580 "list of editable state flags".
582 wxString
SaveEditableState( int includedStates
= AllStates
) const;
585 Sets strings listed in the choice dropdown of a wxBoolProperty.
587 Defaults are "True" and "False", so changing them to, say, "Yes" and
588 "No" may be useful in some less technical applications.
590 static void SetBoolChoices( const wxString
& trueChoice
,
591 const wxString
& falseChoice
);
594 Sets an attribute for this property.
599 Text identifier of attribute. See @ref propgrid_property_attributes.
604 Use wxPG_RECURSE to set the attribute to child properties recursively.
606 @remarks Setting attribute's value to Null variant will simply remove it
607 from property's set of attributes.
609 void SetPropertyAttribute( wxPGPropArg id
, const wxString
& attrName
,
610 wxVariant value
, long argFlags
= 0 );
613 Sets property attribute for all applicapple properties.
614 Be sure to use this method only after all properties have been
617 void SetPropertyAttributeAll( const wxString
& attrName
, wxVariant value
);
620 Sets text, bitmap, and colours for given column's cell.
623 - You can set label cell by using column 0.
624 - You can use wxPG_LABEL as text to use default text for column.
626 void SetPropertyCell( wxPGPropArg id
,
628 const wxString
& text
= wxEmptyString
,
629 const wxBitmap
& bitmap
= wxNullBitmap
,
630 const wxColour
& fgCol
= wxNullColour
,
631 const wxColour
& bgCol
= wxNullColour
);
634 Sets client data (void*) of a property.
637 This untyped client data has to be deleted manually.
639 void SetPropertyClientData( wxPGPropArg id
, void* clientData
);
642 Sets editor for a property.
647 For builtin editors, use wxPGEditor_X, where X is builtin editor's
648 name (TextCtrl, Choice, etc. see wxPGEditor documentation for full
651 For custom editors, use pointer you received from wxPropertyGrid::RegisterEditorClass().
653 void SetPropertyEditor( wxPGPropArg id
, const wxPGEditor
* editor
);
656 Sets editor control of a property. As editor argument, use
657 editor name string, such as "TextCtrl" or "Choice".
659 void SetPropertyEditor( wxPGPropArg id
, const wxString
& editorName
);
662 Sets label of a property.
665 - Properties under same parent may have same labels. However,
666 property names must still remain unique.
668 void SetPropertyLabel( wxPGPropArg id
, const wxString
& newproplabel
);
671 Sets name of a property.
674 Name or pointer of property which name to change.
677 New name for property.
679 void SetPropertyName( wxPGPropArg id
, const wxString
& newName
);
682 Sets property (and, recursively, its children) to have read-only value.
683 In other words, user cannot change the value in the editor, but they can
686 @remarks This is mainly for use with textctrl editor. Only some other
687 editors fully support it.
690 Property name or pointer.
693 Use @true to enable read-only, @false to disable it.
696 By default changes are applied recursively. Set this parameter
697 wxPG_DONT_RECURSE to prevent this.
699 void SetPropertyReadOnly( wxPGPropArg id
, bool set
= true,
700 int flags
= wxPG_RECURSE
);
703 Sets property's value to unspecified. If it has children (it may be
704 category), then the same thing is done to them.
706 void SetPropertyValueUnspecified( wxPGPropArg id
);
709 Sets various property values from a list of wxVariants. If property with
710 name is missing from the grid, new property is created under given
711 default category (or root if omitted).
713 void SetPropertyValues( const wxVariantList
& list
,
714 wxPGPropArg defaultCategory
= wxNullProperty
);
716 void SetPropertyValues( const wxVariant
& list
,
717 wxPGPropArg defaultCategory
= wxNullProperty
);
720 Associates the help string with property.
722 @remarks By default, text is shown either in the manager's "description"
723 text box or in the status bar. If extra window style
724 wxPG_EX_HELP_AS_TOOLTIPS is used, then the text will appear as
727 void SetPropertyHelpString( wxPGPropArg id
, const wxString
& helpString
);
730 Set wxBitmap in front of the value.
732 @remarks Bitmap will be scaled to a size returned by
733 wxPropertyGrid::GetImageSize();
735 void SetPropertyImage( wxPGPropArg id
, wxBitmap
& bmp
);
738 Sets max length of property's text.
740 bool SetPropertyMaxLength( wxPGPropArg id
, int maxLen
);
743 Sets validator of a property.
745 void SetPropertyValidator( wxPGPropArg id
, const wxValidator
& validator
);
747 /** Sets value (integer) of a property. */
748 void SetPropertyValue( wxPGPropArg id
, long value
);
750 /** Sets value (integer) of a property. */
751 void SetPropertyValue( wxPGPropArg id
, int value
);
753 /** Sets value (floating point) of a property. */
754 void SetPropertyValue( wxPGPropArg id
, double value
);
756 /** Sets value (bool) of a property. */
757 void SetPropertyValue( wxPGPropArg id
, bool value
);
759 /** Sets value (string) of a property. */
760 void SetPropertyValue( wxPGPropArg id
, const wxString
& value
);
762 /** Sets value (wxArrayString) of a property. */
763 void SetPropertyValue( wxPGPropArg id
, const wxArrayString
& value
);
765 /** Sets value (wxDateTime) of a property. */
766 void SetPropertyValue( wxPGPropArg id
, const wxDateTime
& value
);
768 /** Sets value (wxObject*) of a property. */
769 void SetPropertyValue( wxPGPropArg id
, wxObject
* value
);
771 /** Sets value (wxObject&) of a property. */
772 void SetPropertyValue( wxPGPropArg id
, wxObject
& value
);
774 /** Sets value (native 64-bit int) of a property. */
775 void SetPropertyValue( wxPGPropArg id
, wxLongLong_t value
);
777 /** Sets value (native 64-bit unsigned int) of a property. */
778 void SetPropertyValue( wxPGPropArg id
, wxULongLong_t value
);
780 /** Sets value (wxArrayInt&) of a property. */
781 void SetPropertyValue( wxPGPropArg id
, const wxArrayInt
& value
);
784 Sets value (wxString) of a property.
786 @remarks This method uses wxPGProperty::SetValueFromString(), which all
787 properties should implement. This means that there should not be
788 a type error, and instead the string is converted to property's
791 void SetPropertyValueString( wxPGPropArg id
, const wxString
& value
);
794 Sets value (wxVariant&) of a property.
796 @remarks Use wxPropertyGrid::ChangePropertyValue() instead if you need to
797 run through validation process and send property change event.
799 void SetPropertyValue( wxPGPropArg id
, wxVariant value
);
802 Adjusts how wxPropertyGrid behaves when invalid value is entered
806 See @ref propgrid_vfbflags for possible values.
808 void SetValidationFailureBehavior( int vfbFlags
);
811 Returns editor pointer of editor with given name;
813 static wxPGEditor
* GetEditorByName( const wxString
& editorName
);