]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/property.h
Added wxPGCell::SetFont() and GetFont(); Documented wxPGCell class.
[wxWidgets.git] / include / wx / propgrid / property.h
index 106d983896437aadb8ab9422128eff9ed466ec67..b585a68823778e0a194477af6cb1f14e15f89e4d 100644 (file)
@@ -64,12 +64,12 @@ struct wxPGPaintData
 
     Base class for wxPropertyGrid cell renderers.
 */
 
     Base class for wxPropertyGrid cell renderers.
 */
-class WXDLLIMPEXP_PROPGRID wxPGCellRenderer
+class WXDLLIMPEXP_PROPGRID wxPGCellRenderer : public wxObjectRefData
 {
 public:
 
 {
 public:
 
-    wxPGCellRenderer( unsigned int refCount = 1 )
-        : m_refCount(refCount) { }
+    wxPGCellRenderer()
+        : wxObjectRefData() { }
     virtual ~wxPGCellRenderer() { }
 
     // Render flags
     virtual ~wxPGCellRenderer() { }
 
     // Render flags
@@ -137,30 +137,28 @@ public:
                           wxPGProperty* property,
                           const wxPGEditor* editor ) const;
 
                           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;
 
     */
     int PreDrawCell( wxDC& dc,
                      const wxRect& rect,
                      const wxPGCell& cell,
                      int flags ) const;
 
-    void IncRef()
-    {
-        m_refCount++;
-    }
-
-    void DecRef()
-    {
-        m_refCount--;
-        if ( !m_refCount )
-            delete this;
-    }
-protected:
+    /**
+        Utility to be called after drawing is done, to revert whatever
+        changes PreDrawCell() did.
 
 
-private:
-    unsigned int    m_refCount;
+        @param flags
+            Same as those passed to PreDrawCell().
+    */
+    void PostDrawCell( wxDC& dc,
+                       const wxPropertyGrid* propGrid,
+                       const wxPGCell& cell,
+                       int flags ) const;
 };
 
 
 };
 
 
@@ -178,6 +176,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 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() { }
 
 protected:
     virtual ~wxPGCellData() { }
@@ -186,14 +185,16 @@ protected:
     wxBitmap    m_bitmap;
     wxColour    m_fgCol;
     wxColour    m_bgCol;
     wxBitmap    m_bitmap;
     wxColour    m_fgCol;
     wxColour    m_bgCol;
+    wxFont      m_font;
 
     // True if m_text is valid and specified
     bool        m_hasValidText;
 };
 
 
     // True if m_text is valid and specified
     bool        m_hasValidText;
 };
 
-/** @class wxPGCell
+/**
+    @class wxPGCell
 
 
-    Base class for simple wxPropertyGrid cell information.
+    Base class for wxPropertyGrid cell information.
 */
 class WXDLLIMPEXP_PROPGRID wxPGCell : public wxObject
 {
 */
 class WXDLLIMPEXP_PROPGRID wxPGCell : public wxObject
 {
@@ -234,11 +235,32 @@ public:
     void SetText( const wxString& text );
     void SetBitmap( const wxBitmap& bitmap );
     void SetFgCol( const wxColour& col );
     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; }
     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 )
     const wxColour& GetBgCol() const { return GetData()->m_bgCol; }
 
     wxPGCell& operator=( const wxPGCell& other )
@@ -451,7 +473,11 @@ wxPG_PROP_CLASS_SPECIFIC_1          = 0x00080000,
 
 /** Indicates the bit useable by derived properties.
 */
 
 /** Indicates the bit useable by derived properties.
 */
-wxPG_PROP_CLASS_SPECIFIC_2          = 0x00100000
+wxPG_PROP_CLASS_SPECIFIC_2          = 0x00100000,
+
+/** Indicates that the property is being deleted and should be ignored.
+*/
+wxPG_PROP_BEING_DELETED             = 0x00200000
 
 };
 
 
 };
 
@@ -697,7 +723,7 @@ protected:
 
 typedef void* wxPGChoicesId;
 
 
 typedef void* wxPGChoicesId;
 
-class WXDLLIMPEXP_PROPGRID wxPGChoicesData
+class WXDLLIMPEXP_PROPGRID wxPGChoicesData : public wxObjectRefData
 {
     friend class wxPGChoices;
 public:
 {
     friend class wxPGChoices;
 public:
@@ -728,20 +754,9 @@ public:
         return m_items[i];
     }
 
         return m_items[i];
     }
 
-    void DecRef()
-    {
-        m_refCount--;
-        wxASSERT( m_refCount >= 0 );
-        if ( m_refCount == 0 )
-            delete this;
-    }
-
 private:
     wxVector<wxPGChoiceEntry>   m_items;
 
 private:
     wxVector<wxPGChoiceEntry>   m_items;
 
-    // So that multiple properties can use the same set
-    int             m_refCount;
-
     virtual ~wxPGChoicesData();
 };
 
     virtual ~wxPGChoicesData();
 };
 
@@ -754,7 +769,7 @@ private:
     Helper class for managing choices of wxPropertyGrid properties.
     Each entry can have label, value, bitmap, text colour, and background
     colour.
     Helper class for managing choices of wxPropertyGrid properties.
     Each entry can have label, value, bitmap, text colour, and background
     colour.
+
     wxPGChoices uses reference counting, similar to other wxWidgets classes.
     This means that assignment operator and copy constructor only copy the
     reference and not the actual data. Use Copy() member function to create a
     wxPGChoices uses reference counting, similar to other wxWidgets classes.
     This means that assignment operator and copy constructor only copy the
     reference and not the actual data. Use Copy() member function to create a
@@ -785,7 +800,7 @@ public:
         if ( a.m_data != wxPGChoicesEmptyData )
         {
             m_data = a.m_data;
         if ( a.m_data != wxPGChoicesEmptyData )
         {
             m_data = a.m_data;
-            m_data->m_refCount++;
+            m_data->IncRef();
         }
     }
 
         }
     }
 
@@ -825,7 +840,7 @@ public:
     {
         wxASSERT(data);
         m_data = data;
     {
         wxASSERT(data);
         m_data = data;
-        data->m_refCount++;
+        data->IncRef();
     }
 
     /** Destructor. */
     }
 
     /** Destructor. */
@@ -998,8 +1013,8 @@ public:
     // Returns data, increases refcount.
     wxPGChoicesData* GetData()
     {
     // 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;
     }
 
         return m_data;
     }
 
@@ -1065,35 +1080,16 @@ class WXDLLIMPEXP_PROPGRID wxPGProperty : public wxObject
 public:
     typedef wxUint32 FlagType;
 
 public:
     typedef wxUint32 FlagType;
 
-    /** Basic constructor.
+    /**
+        Default constructor.
     */
     wxPGProperty();
 
     */
     wxPGProperty();
 
-    /** Constructor.
-        Non-abstract property classes should have constructor of this style:
-
-        @code
-
-        // If T is a class, then it should be a constant reference
-        // (e.g. const T& ) instead.
-        MyProperty( const wxString& label, const wxString& name, T value )
-            : wxPGProperty()
-        {
-            // Generally recommended way to set the initial value
-            // (as it should work in pretty much 100% of cases).
-            wxVariant variant;
-            variant << value;
-            SetValue(variant);
-
-            // If has private child properties then create them here. Also
-            // set flag that indicates presence of private children. E.g.:
-            //
-            //     AddPrivateChild( new wxStringProperty("Subprop 1",
-            //                                           wxPG_LABEL,
-            //                                           value.GetSubProp1() ) );
-        }
+    /**
+        Constructor.
 
 
-        @endcode
+        All non-abstract property classes should have a constructor with
+        the same first two arguments as this one.
     */
     wxPGProperty( const wxString& label, const wxString& name );
 
     */
     wxPGProperty( const wxString& label, const wxString& name );
 
@@ -1603,10 +1599,25 @@ public:
 
     /**
         Returns wxPGCell of given column.
 
     /**
         Returns wxPGCell of given column.
+
+        @remarks const version of this member function returns 'default'
+                 wxPGCell object if the property itself didn't hold
+                 cell data.
     */
     const wxPGCell& GetCell( unsigned int column ) const;
 
     */
     const wxPGCell& GetCell( unsigned int column ) const;
 
-    wxPGCell& GetCell( unsigned int column );
+    /**
+        Returns wxPGCell of given column, creating one if necessary.
+    */
+    wxPGCell& GetCell( unsigned int column )
+    {
+        return GetOrCreateCell(column);
+    }
+
+    /**
+        Returns wxPGCell of given column, creating one if necessary.
+    */
+    wxPGCell& GetOrCreateCell( unsigned int column );
 
     /** Return number of displayed common values for this property.
     */
 
     /** Return number of displayed common values for this property.
     */
@@ -2003,7 +2014,7 @@ public:
 
     void SetLabel( const wxString& label ) { m_label = label; }
 
 
     void SetLabel( const wxString& label ) { m_label = label; }
 
-    inline void SetName( const wxString& newName );
+    void SetName( const wxString& newName );
 
     /**
         Changes what sort of parent this property is for its children.
 
     /**
         Changes what sort of parent this property is for its children.
@@ -2284,6 +2295,13 @@ protected:
     /** Deletes all sub-properties. */
     void Empty();
 
     /** Deletes all sub-properties. */
     void Empty();
 
+    bool HasCell( unsigned int column ) const
+    {
+        if ( m_cells.size() > column )
+            return true;
+        return false;
+    }
+
     void InitAfterAdded( wxPropertyGridPageState* pageState,
                          wxPropertyGrid* propgrid );
 
     void InitAfterAdded( wxPropertyGridPageState* pageState,
                          wxPropertyGrid* propgrid );