]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/propgridiface.h
another fix for wxUSE_DRAG_AND_DROP==0 build
[wxWidgets.git] / include / wx / propgrid / propgridiface.h
index bace16830ae8a18bf4f0ffe39ce44dfb2657bc0d..c83dc78c9ec00134b4d5c2cc99d470165a81b6a8 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2008-08-24
-// RCS-ID:      $Id:
+// RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
@@ -12,6 +12,8 @@
 #ifndef __WX_PROPGRID_PROPGRIDIFACE_H__
 #define __WX_PROPGRID_PROPGRIDIFACE_H__
 
+#if wxUSE_PROPGRID
+
 #include "wx/propgrid/property.h"
 #include "wx/propgrid/propgridpagestate.h"
 
@@ -74,7 +76,7 @@ public:
     /** This constructor is required for NULL. */
     wxPGPropArgCls( int )
     {
-        m_ptr.property = (wxPGProperty*) NULL;
+        m_ptr.property = NULL;
         m_flags = IsProperty;
     }
     wxPGProperty* GetPtr( wxPropertyGridInterface* iface ) const;
@@ -116,10 +118,10 @@ typedef const wxPGPropArgCls& wxPGPropArg;
 
 WXDLLIMPEXP_PROPGRID
 void wxPGTypeOperationFailed( const wxPGProperty* p,
-                              const wxChar* typestr,
-                              const wxChar* op );
+                              const wxString& typestr,
+                              const wxString& op );
 WXDLLIMPEXP_PROPGRID
-void wxPGGetFailed( const wxPGProperty* p, const wxChar* typestr );
+void wxPGGetFailed( const wxPGProperty* p, const wxString& typestr );
 
 // -----------------------------------------------------------------------
 
@@ -167,20 +169,6 @@ public:
     /** Destructor */
     virtual ~wxPropertyGridInterface() { }
 
-    /** Adds choice to a property that can accept one.
-        @remarks
-        - If you need to make sure that you modify only the set of choices of
-          a single property (and not also choices of other properties with
-          initially identical set), call
-          wxPropertyGrid::SetPropertyChoicesPrivate.
-        - This usually only works for wxEnumProperty and derivatives
-          (wxFlagsProperty can get accept new items but its items may not get
-          updated).
-    */
-    void AddPropertyChoice( wxPGPropArg id,
-                            const wxString& label,
-                            int value = wxPG_INVALID_VALUE );
-
     /**
         Appends property to the list.
 
@@ -212,17 +200,22 @@ public:
     */
     virtual void Clear() = 0;
 
-    /** Deselect current selection, if any. Returns true if success
-        (ie. validator did not intercept). */
-    bool ClearSelection();
+    /**
+        Clears current selection, if any.
+
+        @param validation
+            If set to @false, deselecting the property will always work,
+            even if its editor had invalid value in it.
+
+        @return Returns @true if successful or if there was no selection. May
+                fail if validation was enabled and active editor had invalid
+                value.
+    */
+    bool ClearSelection( bool validation = false);
 
     /** Resets modified status of all properties.
     */
-    void ClearModifiedStatus()
-    {
-        SetPropertyModifiedStatus(m_pState->m_properties, false);
-        m_pState->m_anyModified = false;
-    }
+    void ClearModifiedStatus();
 
     /** Collapses given category or property with children.
         Returns true if actually collapses.
@@ -246,28 +239,21 @@ public:
     */
     bool ChangePropertyValue( wxPGPropArg id, wxVariant newValue );
 
-    /** Resets value of a property to its default. */
-    bool ClearPropertyValue( wxPGPropArg id )
-    {
-        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(false)
-        p->SetValue(p->GetDefaultValue());
-        RefreshProperty(p);
-        return true;
-    }
-
     /**
         Deletes a property by id. If category is deleted, all children are
         automatically deleted as well.
      */
     void DeleteProperty( wxPGPropArg id );
 
-    /** Deletes choice from a property.
+    /**
+        Removes and returns a property.
 
-        If selected item is deleted, then the value is set to unspecified.
+        @param id
+            Pointer or name of a property.
 
-        See AddPropertyChoice for more details.
+        @remarks Removed property cannot have any children.
     */
-    void DeletePropertyChoice( wxPGPropArg id, int index );
+    wxPGProperty* RemoveProperty( wxPGPropArg id );
 
     /** Disables property. */
     bool DisableProperty( wxPGPropArg id ) { return EnableProperty(id,false); }
@@ -299,16 +285,6 @@ public:
     */
     bool ExpandAll( bool expand = true );
 
-    /** Returns list of expanded properties.
-    */
-    wxArrayPGProperty GetExpandedProperties() const
-    {
-        wxArrayPGProperty array;
-        GetPropertiesWithFlag(&array, wxPG_PROP_COLLAPSED, true,
-            wxPG_ITERATE_ALL_PARENTS_RECURSIVELY|wxPG_ITERATE_HIDDEN);
-        return array;
-    }
-
     /** Returns id of first child of given property.
         @remarks
         Does not return sub-properties!
@@ -397,7 +373,10 @@ public:
     */
     const wxPGAttributeStorage& GetPropertyAttributes( wxPGPropArg id ) const
     {
-        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(*((const wxPGAttributeStorage*)NULL));
+        // If 'id' refers to invalid property, then we will return dummy
+        // attributes (ie. root property's attributes, which contents should
+        // should always be empty and of no consequence).
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_pState->DoGetRoot()->GetAttributes());
         return p->GetAttributes();
     }
 
@@ -461,12 +440,6 @@ public:
     wxPGProperty* GetPropertyByName( const wxString& name,
                                      const wxString& subname ) const;
 
-    /** Returns writable reference to property's list of choices (and relevant
-        values). If property does not have any choices, will return reference
-        to an invalid set of choices that will return false on IsOk call.
-    */
-    wxPGChoices& GetPropertyChoices( wxPGPropArg id );
-
     /** Returns property's editor. */
     const wxPGEditor* GetPropertyEditor( wxPGPropArg id ) const
     {
@@ -488,13 +461,6 @@ public:
         return p->GetValueImage();
     }
 
-    /** Returns property's position under its parent. */
-    unsigned int GetPropertyIndex( wxPGPropArg id )
-    {
-        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(INT_MAX)
-        return p->GetIndexInParent();
-    }
-
     /** Returns label of a property. */
     const wxString& GetPropertyLabel( wxPGPropArg id )
     {
@@ -503,10 +469,9 @@ public:
     }
 
     /** Returns name of a property, by which it is globally accessible. */
-    wxString GetPropertyName( wxPGPropArg id )
+    wxString GetPropertyName( wxPGProperty* property )
     {
-        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
-        return p->GetName();
+        return property->GetName();
     }
 
     /** Returns parent item of a property. */
@@ -550,74 +515,65 @@ public:
 #endif
     bool GetPropertyValueAsBool( wxPGPropArg id ) const;
     double GetPropertyValueAsDouble( wxPGPropArg id ) const;
-    wxObject* GetPropertyValueAsWxObjectPtr( wxPGPropArg id ) const;
-    void* GetPropertyValueAsVoidPtr( wxPGPropArg id ) const;
 
 #define wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(TYPENAME, DEFVAL) \
     wxPG_PROP_ARG_CALL_PROLOG_RETVAL(DEFVAL) \
-    if ( p->m_value.GetType() != TYPENAME ) \
+    wxString typeName(wxS(TYPENAME)); \
+    wxVariant value = p->GetValue(); \
+    if ( value.GetType() != typeName ) \
     { \
-        wxPGGetFailed(p, TYPENAME); \
+        wxPGGetFailed(p, typeName); \
         return DEFVAL; \
     }
 
 #define wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK(TYPENAME, DEFVAL) \
     wxPG_PROP_ARG_CALL_PROLOG_RETVAL(DEFVAL) \
-    if ( p->m_value.GetType() != TYPENAME ) \
+    wxVariant value = p->GetValue(); \
+    if ( value.GetType() != wxS(TYPENAME) ) \
         return DEFVAL; \
 
     wxArrayString GetPropertyValueAsArrayString( wxPGPropArg id ) const
     {
-        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("arrstring"),
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL("arrstring",
                                                    wxArrayString())
-        return p->m_value.GetArrayString();
-    }
-
-    wxPoint GetPropertyValueAsPoint( wxPGPropArg id ) const
-    {
-        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxPoint"), wxPoint())
-        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxPoint);
-    }
-
-    wxSize GetPropertyValueAsSize( wxPGPropArg id ) const
-    {
-        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxSize"), wxSize())
-        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxSize);
+        return value.GetArrayString();
     }
 
+#if wxUSE_LONGLONG_NATIVE
     wxLongLong_t GetPropertyValueAsLongLong( wxPGPropArg id ) const
     {
-        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK(wxT("wxLongLong"),
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK("wxLongLong",
                                              (long) GetPropertyValueAsLong(id))
-        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxLongLong).GetValue();
+        wxLongLong ll;
+        ll << value;
+        return ll.GetValue();
     }
 
     wxULongLong_t GetPropertyValueAsULongLong( wxPGPropArg id ) const
     {
-        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK(wxT("wxULongLong"),
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL_WFALLBACK("wxULongLong",
                                     (unsigned long) GetPropertyValueAsULong(id))
-        return WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxULongLong).GetValue();
+        wxULongLong ull;
+        ull << value;
+        return ull.GetValue();
     }
+#endif
 
     wxArrayInt GetPropertyValueAsArrayInt( wxPGPropArg id ) const
     {
-        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL(wxT("wxArrayInt"),
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL("wxArrayInt",
                                                    wxArrayInt())
-        wxArrayInt arr = WX_PG_VARIANT_GETVALUEREF(p->GetValue(), wxArrayInt);
+        wxArrayInt arr;
+        arr << value;
         return arr;
     }
 
 #if wxUSE_DATETIME
     wxDateTime GetPropertyValueAsDateTime( wxPGPropArg id ) const
     {
-        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxDateTime())
-
-        if ( wxStrcmp(p->m_value.GetType(), wxT("datetime")) != 0 )
-        {
-            wxPGGetFailed(p, wxT("datetime"));
-            return wxDateTime();
-        }
-        return p->m_value.GetDateTime();
+        wxPG_PROP_ID_GETPROPVAL_CALL_PROLOG_RETVAL("datetime",
+                                                   wxDateTime())
+        return value.GetDateTime();
     }
 #endif
 
@@ -639,12 +595,6 @@ public:
     }
 #endif
 
-    wxString GetPropertyValueType( wxPGPropArg id )
-    {
-        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(m_emptyString)
-        return p->GetValueType();
-    }
-
     /** Returns currently selected property. */
     wxPGProperty* GetSelection() const
     {
@@ -754,15 +704,6 @@ public:
         return p->IsCategory();
     }
 
-    /** Inserts choice to a property that can accept one.
-
-        See AddPropertyChoice for more details.
-    */
-    void InsertPropertyChoice( wxPGPropArg id,
-                               const wxString& label,
-                               int index,
-                               int value = wxPG_INVALID_VALUE );
-
     /** Returns true if property is enabled. */
     bool IsPropertyEnabled( wxPGPropArg id ) const
     {
@@ -856,6 +797,9 @@ public:
         PageState        = 0x08,
         /** Include splitter position. Stored for each page. */
         SplitterPosState = 0x10,
+        /** Include description box size.
+            Only applies to wxPropertyGridManager. */
+        DescBoxState     = 0x20,
 
         /**
             Include all supported user editable state information.
@@ -864,7 +808,8 @@ public:
                            ExpandedState |
                            ScrollPosState |
                            PageState |
-                           SplitterPosState
+                           SplitterPosState |
+                           DescBoxState
     };
 
     /**
@@ -910,16 +855,6 @@ public:
     static void SetBoolChoices( const wxString& trueChoice,
                                 const wxString& falseChoice );
 
-    /** Sets or clears flag(s) of all properties in given array.
-        @param flags
-        Property flags to set or clear.
-        @param inverse
-        Set to true if you want to clear flag instead of setting them.
-    */
-    void SetPropertiesFlag( const wxArrayPGProperty& srcArr,
-                            wxPGProperty::FlagType flags,
-                            bool inverse = false );
-
     /** Sets an attribute for this property.
         @param name
             Text identifier of attribute. See @ref propgrid_property_attributes.
@@ -937,13 +872,66 @@ public:
         DoSetPropertyAttribute(id,attrName,value,argFlags);
     }
 
-    /** Sets attributes from a wxPGAttributeStorage.
+    /** Sets property attribute for all applicapple properties.
+        Be sure to use this method only after all properties have been
+        added to the grid.
+    */
+    void SetPropertyAttributeAll( const wxString& attrName, wxVariant value );
+
+    /**
+        Sets background colour of a property.
+
+        @param id
+            Property name or pointer.
+
+        @param colour
+            New background colour.
+
+        @param recursively
+            If True, child properties are affected recursively. Property
+            categories are skipped if this flag is used.
     */
-    void SetPropertyAttributes( wxPGPropArg id,
-                                const wxPGAttributeStorage& attributes )
+    void SetPropertyBackgroundColour( wxPGPropArg id,
+                                      const wxColour& colour,
+                                      bool recursively = true );
+
+    /** Resets text and background colours of given property.
+    */
+    void SetPropertyColoursToDefault( wxPGPropArg id );
+
+    /**
+        Sets text colour of a property.
+
+        @param id
+            Property name or pointer.
+
+        @param colour
+            New background colour.
+
+        @param recursively
+            If True, child properties are affected recursively. Property
+            categories are skipped if this flag is used.
+    */
+    void SetPropertyTextColour( wxPGPropArg id,
+                                const wxColour& col,
+                                bool recursively = true );
+
+    /**
+        Returns background colour of first cell of a property.
+    */
+    wxColour GetPropertyBackgroundColour( wxPGPropArg id ) const
     {
-        wxPG_PROP_ARG_CALL_PROLOG()
-        p->SetAttributes(attributes);
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxColour())
+        return p->GetCell(0).GetBgCol();
+    }
+
+    /**
+        Returns text colour of first cell of a property.
+    */
+    wxColour GetPropertyTextColour( wxPGPropArg id ) const
+    {
+        wxPG_PROP_ARG_CALL_PROLOG_RETVAL(wxColour())
+        return p->GetCell(0).GetFgCol();
     }
 
     /** Sets text, bitmap, and colours for given column's cell.
@@ -957,33 +945,7 @@ public:
                           const wxString& text = wxEmptyString,
                           const wxBitmap& bitmap = wxNullBitmap,
                           const wxColour& fgCol = wxNullColour,
-                          const wxColour& bgCol = wxNullColour )
-    {
-        wxPG_PROP_ARG_CALL_PROLOG()
-        p->SetCell( column, new wxPGCell(text, bitmap, fgCol, bgCol) );
-    }
-
-    /** Set choices of a property to specified set of labels and values.
-
-        @remarks
-        This operation clears the property value.
-    */
-    void SetPropertyChoices( wxPGPropArg id, wxPGChoices& choices)
-    {
-        wxPG_PROP_ARG_CALL_PROLOG()
-        p->SetChoices(choices);
-    }
-
-
-    /**
-        If property's set of choices is shared, then calling this method
-        converts it to private.
-    */
-    void SetPropertyChoicesExclusive( wxPGPropArg id )
-    {
-        wxPG_PROP_ARG_CALL_PROLOG()
-        p->SetChoicesExclusive();
-    }
+                          const wxColour& bgCol = wxNullColour );
 
 #ifndef SWIG
     /** Sets client data (void*) of a property.
@@ -1027,12 +989,19 @@ public:
     */
     void SetPropertyLabel( wxPGPropArg id, const wxString& newproplabel );
 
-    /** Set modified status of a property and all its children.
+    /**
+        Sets name of a property.
+
+        @param id
+            Name or pointer of property which name to change.
+
+        @param newName
+            New name for property.
     */
-    void SetPropertyModifiedStatus( wxPGPropArg id, bool modified )
+    void SetPropertyName( wxPGPropArg id, const wxString& newName )
     {
         wxPG_PROP_ARG_CALL_PROLOG()
-        p->SetModifiedStatus(modified);
+        m_pState->DoSetPropertyName( p, newName );
     }
 
     /**
@@ -1061,7 +1030,12 @@ public:
         If it has children (it may be category), then the same thing is done to
         them.
     */
-    void SetPropertyValueUnspecified( wxPGPropArg id );
+    void SetPropertyValueUnspecified( wxPGPropArg id )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        wxVariant nullVariant;
+        SetPropVal(p, nullVariant);
+    }
 
 #ifndef SWIG
     /** Sets various property values from a list of wxVariants. If property with
@@ -1153,7 +1127,13 @@ public:
         wxVariant v(value);
         SetPropVal( id, v );
     }
-    void SetPropertyValue( wxPGPropArg id, const wxChar* value )
+#if wxUSE_WCHAR_T
+    void SetPropertyValue( wxPGPropArg id, const wchar_t* value )
+    {
+        SetPropertyValueString( id, wxString(value) );
+    }
+#endif
+    void SetPropertyValue( wxPGPropArg id, const char* value )
     {
         SetPropertyValueString( id, wxString(value) );
     }
@@ -1192,20 +1172,7 @@ public:
         SetPropVal( id, v );
     }
 
-    /** Sets value (wxPoint&) of a property.
-    */
-    void SetPropertyValue( wxPGPropArg id, const wxPoint& value )
-    {
-        wxVariant v = WXVARIANT(value);
-        SetPropVal( id, v );
-    }
-    /** Sets value (wxSize&) of a property.
-    */
-    void SetPropertyValue( wxPGPropArg id, const wxSize& value )
-    {
-        wxVariant v = WXVARIANT(value);
-        SetPropVal( id, v );
-    }
+#if wxUSE_LONGLONG_NATIVE
     /** Sets value (wxLongLong&) of a property.
     */
     void SetPropertyValue( wxPGPropArg id, wxLongLong_t value )
@@ -1220,6 +1187,8 @@ public:
         wxVariant v = WXVARIANT(wxULongLong(value));
         SetPropVal( id, v );
     }
+#endif
+
     /** Sets value (wxArrayInt&) of a property.
     */
     void SetPropertyValue( wxPGPropArg id, const wxArrayInt& value )
@@ -1262,6 +1231,37 @@ public:
     */
     void SetValidationFailureBehavior( int vfbFlags );
 
+    /**
+        Sorts all properties recursively.
+
+        @param flags
+            This can contain any of the following options:
+              wxPG_SORT_TOP_LEVEL_ONLY: Only sort categories and their
+                immediate children. Sorting done by wxPG_AUTO_SORT option
+                uses this.
+
+        @see SortChildren, wxPropertyGrid::SetSortFunction
+    */
+    void Sort( int flags = 0 );
+
+    /**
+        Sorts children of a property.
+
+        @param id
+            Name or pointer to a property.
+
+        @param flags
+            This can contain any of the following options:
+              wxPG_RECURSE: Sorts recursively.
+
+        @see Sort, wxPropertyGrid::SetSortFunction
+    */
+    void SortChildren( wxPGPropArg id, int flags = 0 )
+    {
+        wxPG_PROP_ARG_CALL_PROLOG()
+        m_pState->DoSortChildren(p, flags);
+    }
+
 #ifdef SWIG
     %pythoncode {
         def MapType(class_,factory):
@@ -1511,6 +1511,27 @@ public:
 
 protected:
 
+    /**
+        In derived class, implement to set editable state component with
+        given name to given value.
+    */
+    virtual bool SetEditableStateItem( const wxString& name, wxVariant value )
+    {
+        wxUnusedVar(name);
+        wxUnusedVar(value);
+        return false;
+    }
+
+    /**
+        In derived class, implement to return editable state component with
+        given name.
+    */
+    virtual wxVariant GetEditableStateItem( const wxString& name ) const
+    {
+        wxUnusedVar(name);
+        return wxNullVariant;
+    }
+
     // Returns page state data for given (sub) page (-1 means current page).
     virtual wxPropertyGridPageState* GetPageState( int pageIndex ) const
     {
@@ -1556,4 +1577,6 @@ private:
     friend class wxPropertyGridManager;
 };
 
+#endif // wxUSE_PROPGRID
+
 #endif // __WX_PROPGRID_PROPGRIDIFACE_H__