]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/property.h
Fixed auto-resizing behavior when double-clicking a splitter; Added wxPropertyGrid...
[wxWidgets.git] / include / wx / propgrid / property.h
index ca40fb77658ffe5ba0a99948e6ef1a83e0effb42..0e34bcf2ed0702cea156c237bfc880cbc8014067 100644 (file)
@@ -47,9 +47,6 @@ struct wxPGPaintData
 };
 
 
-#ifndef SWIG
-
-
 // space between vertical sides of a custom image
 #define wxPG_CUSTOM_IMAGE_SPACINGY      1
 
@@ -98,7 +95,11 @@ public:
                               DontUseCellBgCol
     };
 
-    virtual void Render( wxDC& dc,
+    /**
+        Returns @true if rendered something in the foreground (text or
+        bitmap.
+    */
+    virtual bool Render( wxDC& dc,
                          const wxRect& rect,
                          const wxPropertyGrid* propertyGrid,
                          wxPGProperty* property,
@@ -137,14 +138,53 @@ public:
                           wxPGProperty* property,
                           const wxPGEditor* editor ) const;
 
-    /** Utility to render cell bitmap and set text colour plus bg brush colour.
+    /** Utility to render cell bitmap and set text colour plus bg brush
+        colour.
 
-        Returns image width that, for instance, can be passed to DrawText.
+        @return Returns image width, which, for instance, can be passed to
+                DrawText.
     */
     int PreDrawCell( wxDC& dc,
                      const wxRect& rect,
                      const wxPGCell& cell,
                      int flags ) const;
+
+    /**
+        Utility to be called after drawing is done, to revert whatever
+        changes PreDrawCell() did.
+
+        @param flags
+            Same as those passed to PreDrawCell().
+    */
+    void PostDrawCell( wxDC& dc,
+                       const wxPropertyGrid* propGrid,
+                       const wxPGCell& cell,
+                       int flags ) const;
+};
+
+
+/**
+    @class wxPGDefaultRenderer
+
+    Default cell renderer, that can handles the common
+    scenarios.
+*/
+class WXDLLIMPEXP_PROPGRID wxPGDefaultRenderer : public wxPGCellRenderer
+{
+public:
+    virtual bool Render( wxDC& dc,
+                         const wxRect& rect,
+                         const wxPropertyGrid* propertyGrid,
+                         wxPGProperty* property,
+                         int column,
+                         int item,
+                         int flags ) const;
+
+    virtual wxSize GetImageSize( const wxPGProperty* property,
+                                 int column,
+                                 int item ) const;
+
+protected:
 };
 
 
@@ -162,6 +202,7 @@ public:
     void SetBitmap( const wxBitmap& bitmap ) { m_bitmap = bitmap; }
     void SetFgCol( const wxColour& col ) { m_fgCol = col; }
     void SetBgCol( const wxColour& col ) { m_bgCol = col; }
+    void SetFont( const wxFont& font ) { m_font = font; }
 
 protected:
     virtual ~wxPGCellData() { }
@@ -170,14 +211,17 @@ protected:
     wxBitmap    m_bitmap;
     wxColour    m_fgCol;
     wxColour    m_bgCol;
+    wxFont      m_font;
 
     // True if m_text is valid and specified
     bool        m_hasValidText;
 };
 
-/** @class wxPGCell
 
-    Base class for simple wxPropertyGrid cell information.
+/**
+    @class wxPGCell
+
+    Base class for wxPropertyGrid cell information.
 */
 class WXDLLIMPEXP_PROPGRID wxPGCell : public wxObject
 {
@@ -210,6 +254,11 @@ public:
         return (m_refData && GetData()->m_hasValidText);
     }
 
+    /**
+        Sets empty but valid data to this cell object.
+    */
+    void SetEmptyData();
+
     /**
         Merges valid data from srcCell into this.
     */
@@ -218,11 +267,32 @@ public:
     void SetText( const wxString& text );
     void SetBitmap( const wxBitmap& bitmap );
     void SetFgCol( const wxColour& col );
+
+    /**
+        Sets font of the cell.
+
+        @remarks Because wxPropertyGrid does not support rows of
+                 different height, it makes little sense to change
+                 size of the font. Therefore it is recommended
+                 to use return value of wxPropertyGrid::GetFont()
+                 or wxPropertyGrid::GetCaptionFont() as a basis
+                 for the font that, after modifications, is passed
+                 to this member function.
+    */
+    void SetFont( const wxFont& font );
+
     void SetBgCol( const wxColour& col );
 
     const wxString& GetText() const { return GetData()->m_text; }
     const wxBitmap& GetBitmap() const { return GetData()->m_bitmap; }
     const wxColour& GetFgCol() const { return GetData()->m_fgCol; }
+
+    /**
+        Returns font of the cell. If no specific font is set for this
+        cell, then the font will be invalid.
+    */
+    const wxFont& GetFont() const { return GetData()->m_font; }
+
     const wxColour& GetBgCol() const { return GetData()->m_bgCol; }
 
     wxPGCell& operator=( const wxPGCell& other )
@@ -234,37 +304,13 @@ public:
         return *this;
     }
 
-protected:
+private:
     virtual wxObjectRefData *CreateRefData() const
         { return new wxPGCellData(); }
 
     virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;
 };
 
-
-/** @class wxPGDefaultRenderer
-
-    Default cell renderer, that can handles the common
-    scenarios.
-*/
-class WXDLLIMPEXP_PROPGRID wxPGDefaultRenderer : public wxPGCellRenderer
-{
-public:
-    virtual void Render( wxDC& dc,
-                         const wxRect& rect,
-                         const wxPropertyGrid* propertyGrid,
-                         wxPGProperty* property,
-                         int column,
-                         int item,
-                         int flags ) const;
-
-    virtual wxSize GetImageSize( const wxPGProperty* property,
-                                 int column,
-                                 int item ) const;
-
-protected:
-};
-
 // -----------------------------------------------------------------------
 
 /** @class wxPGAttributeStorage
@@ -314,7 +360,6 @@ protected:
     wxPGHashMapS2P  m_map;
 };
 
-#endif  // !SWIG
 
 // -----------------------------------------------------------------------
 
@@ -399,7 +444,9 @@ wxPG_PROP_CATEGORY                  = 0x2000,
 */
 wxPG_PROP_MISC_PARENT               = 0x4000,
 
-/** Property is read-only. Editor is still created.
+/** Property is read-only. Editor is still created for wxTextCtrl-based
+    property editors. For others, editor is not usually created because
+    they do implement wxTE_READONLY style or equivalent.
 */
 wxPG_PROP_READONLY                  = 0x8000,
 
@@ -463,8 +510,6 @@ wxPG_PROP_BEING_DELETED             = 0x00200000
 
 // -----------------------------------------------------------------------
 
-#ifndef SWIG
-
 /**
     @section propgrid_property_attributes wxPropertyGrid Property Attribute
     Identifiers.
@@ -498,10 +543,17 @@ wxPG_PROP_BEING_DELETED             = 0x00200000
 */
 #define wxPG_ATTR_UNITS                     wxS("Units")
 
-/** Universal, string. When set, will be shown in property's value cell
-    when displayed value string is empty, or value is unspecified.
+/** When set, will be shown as 'greyed' text in property's value cell when
+    the actual displayed value is blank.
+*/
+#define wxPG_ATTR_HINT                      wxS("Hint")
+
+#if wxPG_COMPATIBILITY_1_4
+/**
+    @deprecated Use "Hint" (wxPG_ATTR_HINT) instead.
 */
 #define wxPG_ATTR_INLINE_HELP               wxS("InlineHelp")
+#endif
 
 /** Universal, wxArrayString. Set to enable auto-completion in any
     wxTextCtrl-based property editor.
@@ -635,15 +687,15 @@ wxPG_PROP_BEING_DELETED             = 0x00200000
 #define wxPG_ATTR_MAX                     wxPGGlobalVars->m_strMax
 #undef wxPG_ATTR_UNITS
 #define wxPG_ATTR_UNITS                   wxPGGlobalVars->m_strUnits
+#undef wxPG_ATTR_HINT
+#define wxPG_ATTR_HINT                    wxPGGlobalVars->m_strHint
+#if wxPG_COMPATIBILITY_1_4
 #undef wxPG_ATTR_INLINE_HELP
 #define wxPG_ATTR_INLINE_HELP             wxPGGlobalVars->m_strInlineHelp
-
-#endif  // !SWIG
+#endif
 
 // -----------------------------------------------------------------------
 
-#ifndef SWIG
-
 /** @class wxPGChoiceEntry
     Data of a single wxPGChoices choice.
 */
@@ -724,7 +776,6 @@ private:
 
 #define wxPGChoicesEmptyData    ((wxPGChoicesData*)NULL)
 
-#endif // SWIG
 
 /** @class wxPGChoices
 
@@ -775,7 +826,7 @@ public:
         @param values
             Values for choices. If NULL, indexes are used.
     */
-    wxPGChoices( const wxChar** labels, const long* values = NULL )
+    wxPGChoices( const wxChar* const* labels, const long* values = NULL )
     {
         Init();
         Set(labels,values);
@@ -823,7 +874,7 @@ public:
         @param values
             Values for added choices. If empty, relevant entry indexes are used.
     */
-    void Add( const wxChar** labels, const ValArrItem* values = NULL );
+    void Add( const wxChar* const* labels, const ValArrItem* values = NULL );
 
     /** Version that works with wxArrayString and wxArrayInt. */
     void Add( const wxArrayString& arr, const wxArrayInt& arrint = wxArrayInt() );
@@ -949,14 +1000,14 @@ public:
     /** Removes count items starting at position nIndex. */
     void RemoveAt(size_t nIndex, size_t count = 1);
 
-#ifndef SWIG
-    /** Does not create copies for itself. */
-    void Set( const wxChar** labels, const long* values = NULL )
+    /** Does not create copies for itself.
+        TODO: Deprecate.
+    */
+    void Set( const wxChar* const* labels, const long* values = NULL )
     {
         Free();
         Add(labels,values);
     }
-#endif // SWIG
 
     /** Version that works with wxArrayString and wxArrayInt. */
     void Set( const wxArrayString& labels,
@@ -993,7 +1044,6 @@ public:
 
     wxArrayString GetLabels() const;
 
-#ifndef SWIG
     void operator= (const wxPGChoices& a)
     {
         if (this != &a)
@@ -1015,7 +1065,6 @@ protected:
 
     void Init();
     void Free();
-#endif  // !SWIG
 };
 
 // -----------------------------------------------------------------------
@@ -1078,7 +1127,6 @@ public:
     */
     virtual wxVariant DoGetValue() const { return m_value; }
 
-#if !defined(SWIG) || defined(CREATE_VCW)
     /** Implement this function in derived class to check the value.
         Return true if it is ok. Returning false prevents property change events
         from occurring.
@@ -1150,7 +1198,7 @@ public:
     virtual bool IntToValue( wxVariant& value,
                              int number,
                              int argFlags = 0 ) const;
-#endif  // !defined(SWIG) || defined(CREATE_VCW)
+
     /**
         Converts property value into a text representation.
 
@@ -1393,12 +1441,16 @@ public:
     */
     virtual void RefreshChildren();
 
-    /** Special handling for attributes of this property.
+    /**
+        Reimplement this member function to add special handling for
+        attributes of this property.
 
-        If returns false, then the attribute will be automatically stored in
-        m_attributes.
+        @return Return @false to have the attribute automatically stored in
+                m_attributes. Default implementation simply does that and
+                nothing else.
 
-        Default implementation simply returns false.
+        @remarks To actually set property attribute values from the
+                 application, use wxPGProperty::SetAttribute() instead.
     */
     virtual bool DoSetAttribute( const wxString& name, wxVariant& value );
 
@@ -1590,6 +1642,11 @@ public:
         return GetValueAsString(0);
     }
 
+    /**
+        Returns property's hint text (shown in empty value cell).
+    */
+    inline wxString GetHintText() const;
+
     /** Returns property grid where property lies. */
     wxPropertyGrid* GetGrid() const;
 
@@ -1827,12 +1884,13 @@ public:
         @param colour
             Background colour to use.
 
-        @param recursively
-            If @true, children are affected recursively, and any categories
-            are not.
+        @param flags
+            Default is wxPG_RECURSE which causes colour to be set recursively.
+            Omit this flag to only set colour for the property in question
+            and not any of its children.
     */
     void SetBackgroundColour( const wxColour& colour,
-                              bool recursively = false );
+                              int flags = wxPG_RECURSE );
 
     /**
         Sets property's text colour.
@@ -1840,12 +1898,13 @@ public:
         @param colour
             Text colour to use.
 
-        @param recursively
-            If @true, children are affected recursively, and any categories
-            are not.
+        @param flags
+            Default is wxPG_RECURSE which causes colour to be set recursively.
+            Omit this flag to only set colour for the property in question
+            and not any of its children.
     */
     void SetTextColour( const wxColour& colour,
-                        bool recursively = false );
+                        int flags = wxPG_RECURSE );
 
     /** Set default value of a property. Synonymous to
 
@@ -1855,7 +1914,6 @@ public:
     */
     void SetDefaultValue( wxVariant& value );
 
-#ifndef SWIG
     /** Sets editor for a property.
 
         @param editor
@@ -1870,7 +1928,6 @@ public:
     {
         m_customEditor = editor;
     }
-#endif
 
     /** Sets editor for a property.
     */
@@ -1998,7 +2055,7 @@ public:
     void SetValueToUnspecified()
     {
         wxVariant val;  // Create NULL variant
-        SetValue(val);
+        SetValue(val, NULL, wxPG_SETVAL_REFRESH_EDITOR);
     }
 
     // Helper function (for wxPython bindings and such) for settings protected
@@ -2022,9 +2079,8 @@ public:
             return m_validator;
         return DoGetValidator();
     }
-#endif // #if wxUSE_VALIDATORS
+#endif // wxUSE_VALIDATORS
 
-#ifndef SWIG
     /** Returns client data (void*) of a property.
     */
     void* GetClientData() const
@@ -2052,7 +2108,6 @@ public:
     /** Sets managed client object of a property.
     */
     wxClientData *GetClientObject() const { return m_clientObject; }
-#endif
 
     /** Sets new set of choices for property.
 
@@ -2150,16 +2205,12 @@ public:
     */
     int GetImageOffset( int imageWidth ) const;
 
-#ifndef SWIG
     // Returns wxPropertyGridPageState in which this property resides.
     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.
     */
@@ -2169,8 +2220,6 @@ public:
     */
     wxPGProperty* GetPropertyByName( const wxString& name ) const;
 
-#ifndef SWIG
-
     // Returns various display-related information for given column
     void GetDisplayInfo( unsigned int column,
                          int choiceIndex,
@@ -2338,7 +2387,6 @@ private:
     // Called in constructors.
     void Init();
     void Init( const wxString& label, const wxString& name );
-#endif // #ifndef SWIG
 };
 
 // -----------------------------------------------------------------------
@@ -2351,14 +2399,12 @@ private:
 #define WX_PG_DECLARE_DOGETEDITORCLASS \
     virtual const wxPGEditor* DoGetEditorClass() const;
 
-#ifndef SWIG
+#ifndef WX_PG_DECLARE_PROPERTY_CLASS
     #define WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME) \
         public: \
             DECLARE_DYNAMIC_CLASS(CLASSNAME) \
             WX_PG_DECLARE_DOGETEDITORCLASS \
         private:
-#else
-    #define WX_PG_DECLARE_PROPERTY_CLASS(CLASSNAME)
 #endif
 
 // Implements sans constructor function. Also, first arg is class name, not
@@ -2371,8 +2417,6 @@ const wxPGEditor* PROPNAME::DoGetEditorClass() const \
 
 // -----------------------------------------------------------------------
 
-#ifndef SWIG
-
 /** @class wxPGRootProperty
     @ingroup classes
     Root parent property.
@@ -2418,6 +2462,7 @@ public:
     int GetTextExtent( const wxWindow* wnd, const wxFont& font ) const;
 
     virtual wxString ValueToString( wxVariant& value, int argFlags ) const;
+    virtual wxString GetValueAsString( int argFlags = 0 ) const;
 
 protected:
     void SetTextColIndex( unsigned int colInd )
@@ -2434,8 +2479,6 @@ private:
     void Init();
 };
 
-#endif  // !SWIG
-
 // -----------------------------------------------------------------------
 
 #endif // wxUSE_PROPGRID