]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/headercol.h
fix memory leak; allocate the DC before SetFont() is called on the status bar
[wxWidgets.git] / include / wx / headercol.h
index 87c2e15082491a599e34c2d3ee54fc3144757a30..a52713d2285f7d343d06287c0309c811effd95ce 100644 (file)
@@ -13,6 +13,8 @@
 
 #include "wx/bitmap.h"
 
+#if wxUSE_HEADERCTRL
+
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
@@ -43,11 +45,11 @@ enum
 };
 
 // ----------------------------------------------------------------------------
-// wxHeaderColumnBase: interface for a column in a header of controls such as
-//                     wxListCtrl, wxDataViewCtrl or wxGrid
+// wxHeaderColumn: interface for a column in a header of controls such as
+//                 wxListCtrl, wxDataViewCtrl or wxGrid
 // ----------------------------------------------------------------------------
 
-class WXDLLIMPEXP_CORE wxHeaderColumnBase
+class WXDLLIMPEXP_CORE wxHeaderColumn
 {
 public:
     // ctors and dtor
@@ -67,77 +69,67 @@ public:
                    int flags = wxCOL_DEFAULT_FLAGS);
     */
 
+    // virtual dtor for the base class to avoid gcc warnings even though we
+    // don't normally delete the objects of this class via a pointer to
+    // wxHeaderColumn so it's not necessary, strictly speaking
+    virtual ~wxHeaderColumn() { }
+
+    // getters for various attributes
+    // ------------------------------
 
-    // setters and getters for various attributes
-    // ------------------------------------------
+    // notice that wxHeaderColumn only provides getters as this is all the
+    // wxHeaderCtrl needs, various derived class must also provide some way to
+    // change these attributes but this can be done either at the column level
+    // (in which case they should inherit from wxSettableHeaderColumn) or via
+    // the methods of the main control in which case you don't need setters in
+    // the column class at all
 
     // title is the string shown for this column
-    virtual void SetTitle(const wxString& title) = 0;
     virtual wxString GetTitle() const = 0;
 
     // bitmap shown (instead of text) in the column header
-    virtual void SetBitmap(const wxBitmap& bitmap) = 0;
     virtual wxBitmap GetBitmap() const = 0;                                   \
 
     // width of the column in pixels, can be set to wxCOL_WIDTH_DEFAULT meaning
     // unspecified/default
-    virtual void SetWidth(int width) = 0;
     virtual int GetWidth() const = 0;
 
     // minimal width can be set for resizeable columns to forbid resizing them
     // below the specified size (set to 0 to remove)
-    virtual void SetMinWidth(int minWidth) = 0;
     virtual int GetMinWidth() const = 0;
 
     // alignment of the text: wxALIGN_CENTRE, wxALIGN_LEFT or wxALIGN_RIGHT
-    virtual void SetAlignment(wxAlignment align) = 0;
     virtual wxAlignment GetAlignment() const = 0;
 
 
     // flags manipulations:
     // --------------------
 
-    // notice that while we make Set/GetFlags() pure virtual here and implement
-    // the individual flags access in terms of them, for some derived classes
-    // it is more natural to implement access to each flag individually, in
-    // which case they can use SetIndividualFlags() and GetFromIndividualFlags() 
-    // below to implement Set/GetFlags()
+    // notice that while we make GetFlags() pure virtual here and implement the
+    // individual flags access in terms of it, for some derived classes it is
+    // more natural to implement access to each flag individually, in which
+    // case they can use our GetFromIndividualFlags() helper below to implement
+    // GetFlags()
 
-    // set or retrieve all column flags at once: combination of wxCOL_XXX
-    // values above
-    virtual void SetFlags(int flags) = 0;
+    // retrieve all column flags at once: combination of wxCOL_XXX values above
     virtual int GetFlags() const = 0;
 
-    // change, set, clear, toggle or test for any individual flag
-    void ChangeFlag(int flag, bool set);
-    void SetFlag(int flag);
-    void ClearFlag(int flag);
-    void ToggleFlag(int flag);
-
     bool HasFlag(int flag) const { return (GetFlags() & flag) != 0; }
 
 
     // wxCOL_RESIZABLE
-    virtual void SetResizeable(bool resizeable)
-        { ChangeFlag(wxCOL_RESIZABLE, resizeable); }
     virtual bool IsResizeable() const
         { return HasFlag(wxCOL_RESIZABLE); }
 
     // wxCOL_SORTABLE
-    virtual void SetSortable(bool sortable)
-        { ChangeFlag(wxCOL_SORTABLE, sortable); }
     virtual bool IsSortable() const
         { return HasFlag(wxCOL_SORTABLE); }
 
     // wxCOL_REORDERABLE
-    virtual void SetReorderable(bool reorderable)
-        { ChangeFlag(wxCOL_REORDERABLE, reorderable); }
     virtual bool IsReorderable() const
         { return HasFlag(wxCOL_REORDERABLE); }
 
     // wxCOL_HIDDEN
-    virtual void SetHidden(bool hidden)
-        { ChangeFlag(wxCOL_HIDDEN, hidden); }
     virtual bool IsHidden() const
         { return HasFlag(wxCOL_HIDDEN); }
     bool IsShown() const
@@ -147,30 +139,67 @@ public:
     // sorting
     // -------
 
-    // set this column as the one used to sort the control
-    virtual void SetAsSortKey(bool sort = true) = 0;
-    void UnsetAsSortKey() { SetAsSortKey(false); }
-
-    // return true if the column is used for sorting
+    // return true if the column is the one currently used for sorting
     virtual bool IsSortKey() const = 0;
 
     // for sortable columns indicate whether we should sort in ascending or
     // descending order (this should only be taken into account if IsSortKey())
+    virtual bool IsSortOrderAscending() const = 0;
+
+protected:
+    // helper for the class overriding IsXXX()
+    int GetFromIndividualFlags() const;
+};
+
+// ----------------------------------------------------------------------------
+// wxSettableHeaderColumn: column which allows to change its fields too
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxSettableHeaderColumn : public wxHeaderColumn
+{
+public:
+    virtual void SetTitle(const wxString& title) = 0;
+    virtual void SetBitmap(const wxBitmap& bitmap) = 0;
+    virtual void SetWidth(int width) = 0;
+    virtual void SetMinWidth(int minWidth) = 0;
+    virtual void SetAlignment(wxAlignment align) = 0;
+
+    // see comment for wxHeaderColumn::GetFlags() about the relationship
+    // between SetFlags() and Set{Sortable,Reorderable,...}
+
+    // change, set, clear, toggle or test for any individual flag
+    virtual void SetFlags(int flags) = 0;
+    void ChangeFlag(int flag, bool set);
+    void SetFlag(int flag);
+    void ClearFlag(int flag);
+    void ToggleFlag(int flag);
+
+    virtual void SetResizeable(bool resizeable)
+        { ChangeFlag(wxCOL_RESIZABLE, resizeable); }
+    virtual void SetSortable(bool sortable)
+        { ChangeFlag(wxCOL_SORTABLE, sortable); }
+    virtual void SetReorderable(bool reorderable)
+        { ChangeFlag(wxCOL_REORDERABLE, reorderable); }
+    virtual void SetHidden(bool hidden)
+        { ChangeFlag(wxCOL_HIDDEN, hidden); }
+
+    virtual void SetAsSortKey(bool sort = true) = 0;
+    void UnsetAsSortKey() { SetAsSortKey(false); }
+
     virtual void SetSortOrder(bool ascending) = 0;
     void ToggleSortOrder() { SetSortOrder(!IsSortOrderAscending()); }
-    virtual bool IsSortOrderAscending() const = 0;
 
 protected:
-    // helpers for the class overriding Set/IsXXX()
+    // helper for the class overriding individual SetXXX() methods instead of
+    // overriding SetFlags()
     void SetIndividualFlags(int flags);
-    int GetFromIndividualFlags() const;
 };
 
 // ----------------------------------------------------------------------------
-// wxHeaderColumnSimple: trivial generic implementation of wxHeaderColumnBase
+// wxHeaderColumnSimple: trivial generic implementation of wxHeaderColumn
 // ----------------------------------------------------------------------------
 
-class wxHeaderColumnSimple : public wxHeaderColumnBase
+class wxHeaderColumnSimple : public wxSettableHeaderColumn
 {
 public:
     // ctors and dtor
@@ -241,5 +270,8 @@ private:
     bool m_sort,
          m_sortAscending;
 };
+
+#endif // wxUSE_HEADERCTRL
+
 #endif // _WX_HEADERCOL_H_