X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/48a32cf671d960423138e567ae6835449d7dbd51..86ac84b8ce086e6bbda58f422d41f84268606e35:/include/wx/propgrid/property.h diff --git a/include/wx/propgrid/property.h b/include/wx/propgrid/property.h index 334ec1351f..a4e3fbddc4 100644 --- a/include/wx/propgrid/property.h +++ b/include/wx/propgrid/property.h @@ -64,12 +64,12 @@ struct wxPGPaintData Base class for wxPropertyGrid cell renderers. */ -class WXDLLIMPEXP_PROPGRID wxPGCellRenderer +class WXDLLIMPEXP_PROPGRID wxPGCellRenderer : public wxObjectRefData { public: - wxPGCellRenderer( unsigned int refCount = 1 ) - : m_refCount(refCount) { } + wxPGCellRenderer() + : wxObjectRefData() { } virtual ~wxPGCellRenderer() { } // Render flags @@ -145,22 +145,6 @@ public: const wxRect& rect, const wxPGCell& cell, int flags ) const; - - void IncRef() - { - m_refCount++; - } - - void DecRef() - { - m_refCount--; - if ( !m_refCount ) - delete this; - } -protected: - -private: - unsigned int m_refCount; }; @@ -520,13 +504,23 @@ wxPG_PROP_CLASS_SPECIFIC_2 = 0x00100000 */ #define wxPG_ATTR_AUTOCOMPLETE wxS("AutoComplete") -/** wxBoolProperty specific, int, default 0. When 1 sets bool property to - use checkbox instead of choice. +/** wxBoolProperty and wxFlagsProperty specific. Value type is bool. + Default value is False. + + When set to True, bool property will use check box instead of a + combo box as its editor control. If you set this attribute + for a wxFlagsProperty, it is automatically applied to child + bool properties. */ #define wxPG_BOOL_USE_CHECKBOX wxS("UseCheckbox") -/** wxBoolProperty specific, int, default 0. When 1 sets bool property value - to cycle on double click (instead of showing the popup listbox). +/** wxBoolProperty and wxFlagsProperty specific. Value type is bool. + Default value is False. + + Set to True for the bool property to cycle value on double click + (instead of showing the popup listbox). If you set this attribute + for a wxFlagsProperty, it is automatically applied to child + bool properties. */ #define wxPG_BOOL_USE_DOUBLE_CLICK_CYCLING wxS("UseDClickCycling") @@ -629,6 +623,8 @@ wxPG_PROP_CLASS_SPECIFIC_2 = 0x00100000 */ // Redefine attribute macros to use cached strings +#undef wxPG_ATTR_DEFAULT_VALUE +#define wxPG_ATTR_DEFAULT_VALUE wxPGGlobalVars->m_strDefaultValue #undef wxPG_ATTR_MIN #define wxPG_ATTR_MIN wxPGGlobalVars->m_strMin #undef wxPG_ATTR_MAX @@ -685,7 +681,7 @@ protected: typedef void* wxPGChoicesId; -class WXDLLIMPEXP_PROPGRID wxPGChoicesData +class WXDLLIMPEXP_PROPGRID wxPGChoicesData : public wxObjectRefData { friend class wxPGChoices; public: @@ -716,20 +712,9 @@ public: return m_items[i]; } - void DecRef() - { - m_refCount--; - wxASSERT( m_refCount >= 0 ); - if ( m_refCount == 0 ) - delete this; - } - private: wxVector m_items; - // So that multiple properties can use the same set - int m_refCount; - virtual ~wxPGChoicesData(); }; @@ -773,7 +758,7 @@ public: if ( a.m_data != wxPGChoicesEmptyData ) { m_data = a.m_data; - m_data->m_refCount++; + m_data->IncRef(); } } @@ -813,7 +798,7 @@ public: { wxASSERT(data); m_data = data; - data->m_refCount++; + data->IncRef(); } /** Destructor. */ @@ -986,8 +971,8 @@ public: // Returns data, increases refcount. wxPGChoicesData* GetData() { - wxASSERT( m_data->m_refCount != 0xFFFFFFF ); - m_data->m_refCount++; + wxASSERT( m_data->GetRefCount() != -1 ); + m_data->IncRef(); return m_data; } @@ -1048,9 +1033,8 @@ class WXDLLIMPEXP_PROPGRID wxPGProperty : public wxObject friend class wxPropertyGridPageState; friend class wxPropertyGridPopulator; friend class wxStringProperty; // Proper "" support requires this -#ifndef SWIG + DECLARE_ABSTRACT_CLASS(wxPGProperty) -#endif public: typedef wxUint32 FlagType; @@ -1263,17 +1247,21 @@ public: wxEvent& event ); /** - Called after value of a child property has been altered. + Called after value of a child property has been altered. Must return + new value of the whole property (after any alterations warrented by + child's new value). Note that this function is usually called at the time that value of - this property, or given child property, is still pending for change. + this property, or given child property, is still pending for change, + and as such, result of GetValue() or m_value should not be relied + on. Sample pseudo-code implementation: @code - void MyProperty::ChildChanged( wxVariant& thisValue, - int childIndex, - wxVariant& childValue ) const + wxVariant MyProperty::ChildChanged( wxVariant& thisValue, + int childIndex, + wxVariant& childValue ) const { // Acquire reference to actual type of data stored in variant // (TFromVariant only exists if wxPropertyGrid's wxVariant-macros @@ -1291,19 +1279,28 @@ public: break; ... } + + // Return altered data + return data; } @endcode @param thisValue - Value of this property, that should be altered. + Value of this property. Changed value should be returned (in + previous versions of wxPropertyGrid it was only necessary to + write value back to this argument). @param childIndex - Index of child changed (you can use Item(childIndex) to get). + Index of child changed (you can use Item(childIndex) to get + child property). @param childValue - Value of the child property. + (Pending) value of the child property. + + @return + Modified value of the whole property. */ - virtual void ChildChanged( wxVariant& thisValue, - int childIndex, - wxVariant& childValue ) const; + virtual wxVariant ChildChanged( wxVariant& thisValue, + int childIndex, + wxVariant& childValue ) const; /** Returns pointer to an instance of used editor. */ @@ -1530,7 +1527,6 @@ public: return DoGetValue(); } -#ifndef SWIG /** Returns reference to the internal stored value. GetValue is preferred way to get the actual value, since GetValueRef ignores DoGetValue, which may override stored value. @@ -1544,7 +1540,13 @@ public: { return m_value; } -#endif + + // Helper function (for wxPython bindings and such) for settings protected + // m_value. + wxVariant GetValuePlain() const + { + return m_value; + } /** Returns text representation of property's value. @@ -1845,6 +1847,14 @@ public: void SetTextColour( const wxColour& colour, bool recursively = false ); + /** Set default value of a property. Synonymous to + + @code + SetAttribute("DefaultValue", value); + @endcode + */ + void SetDefaultValue( wxVariant& value ); + #ifndef SWIG /** Sets editor for a property. @@ -1941,8 +1951,22 @@ public: else m_flags &= ~wxPG_PROP_COLLAPSED; } + /** + Sets given property flag(s). + */ void SetFlag( FlagType flag ) { m_flags |= flag; } + /** + Sets or clears given property flag(s). + */ + void ChangeFlag( FlagType flag, bool set ) + { + if ( set ) + m_flags |= flag; + else + m_flags &= ~flag; + } + void SetFlagRecursively( FlagType flag, bool set ); void SetHelpString( const wxString& helpString ) @@ -1977,6 +2001,13 @@ public: SetValue(val); } + // Helper function (for wxPython bindings and such) for settings protected + // m_value. + void SetValuePlain( wxVariant value ) + { + m_value = value; + } + #if wxUSE_VALIDATORS /** Sets wxValidator for a property*/ void SetValidator( const wxValidator& validator ) @@ -2124,42 +2155,20 @@ public: wxPropertyGridPageState* GetParentState() const { return m_parentState; } #endif +#ifndef SWIG wxPGProperty* GetItemAtY( unsigned int y, unsigned int lh, unsigned int* nextItemY ) const; +#endif + + /** Returns property at given virtual y coordinate. + */ + wxPGProperty* GetItemAtY( unsigned int y ) const; /** Returns (direct) child property with given name (or NULL if not found). */ wxPGProperty* GetPropertyByName( const wxString& name ) const; -#ifdef SWIG - %extend { - DocStr(GetClientData, - "Returns the client data object for a property", ""); - PyObject* GetClientData() { - wxPyClientData* data = (wxPyClientData*)self->GetClientObject(); - if (data) { - Py_INCREF(data->m_obj); - return data->m_obj; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - - DocStr(SetClientData, - "Associate the given client data.", ""); - void SetClientData(PyObject* clientData) { - wxPyClientData* data = new wxPyClientData(clientData); - self->SetClientObject(data); - } - } - %pythoncode { - GetClientObject = GetClientData - SetClientObject = SetClientData - } -#endif - #ifndef SWIG // Returns various display-related information for given column