]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/headercol.h
extract (and expand and clean up and document) the header window implementation used...
[wxWidgets.git] / interface / wx / headercol.h
diff --git a/interface/wx/headercol.h b/interface/wx/headercol.h
new file mode 100644 (file)
index 0000000..3aaee0d
--- /dev/null
@@ -0,0 +1,336 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/headercol.h
+// Purpose:     interface of wxHeaderColumn
+// Author:      Vadim Zeitlin
+// Created:     2008-12-01
+// RCS-ID:      $Id$
+// Copyright:   (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+    Special value used for column width meaning unspecified or default.
+ */
+enum { wxCOL_WIDTH_DEFAULT = -1 };
+
+/**
+    Bit flags used as wxHeaderColumn flags.
+ */
+enum
+{
+    /// Column can be resized (included in default flags).
+    wxCOL_RESIZABLE   = 1,
+
+    /// Column can be clicked to toggle the sort order by its contents.
+    wxCOL_SORTABLE    = 2,
+
+    /// Column can be dragged to change its order (included in default).
+    wxCOL_REORDERABLE = 4,
+
+    /// Column is not shown at all.
+    wxCOL_HIDDEN      = 8,
+
+    /// Default flags for wxHeaderColumn ctor.
+    wxCOL_DEFAULT_FLAGS = wxCOL_RESIZABLE | wxCOL_REORDERABLE
+};
+
+/**
+    @class wxHeaderColumn
+
+    Represents a column header in controls displaying tabular data such as
+    wxHeaderCtrl, wxDataViewCtrl or wxGrid.
+
+    @library{wxcore}
+    @category{ctrl}
+
+    @see wxHeaderCtrl
+ */
+class wxHeaderColumn
+{
+public:
+    //@{
+    /**
+        Constructor for a column header.
+
+        The first constructor creates a header showing the given text @a title
+        while the second one creates one showing the specified @a bitmap image.
+     */
+    wxHeaderColumn(const wxString& title,
+                   int width = wxCOL_WIDTH_DEFAULT,
+                   wxAlignment align = wxALIGN_NOT,
+                   int flags = wxCOL_DEFAULT_FLAGS);
+    wxHeaderColumn(const wxBitmap &bitmap,
+                   int width = wxDVC_DEFAULT_WIDTH,
+                   wxAlignment align = wxALIGN_CENTER,
+                   int flags = wxCOL_DEFAULT_FLAGS);
+    //@}
+
+    /**
+        Set the text to display in the column header.
+     */
+    virtual void SetTitle(const wxString& title);
+
+    /**
+        Get the text shown in the column header.
+     */
+    virtual wxString GetTitle() const;
+
+    /**
+        Set the bitmap to be displayed in the column header.
+
+        Notice that the bitmaps displayed in different columns of the same
+        control must all be of the same size.
+     */
+    virtual void SetBitmap(const wxBitmap& bitmap);
+
+    /**
+        Returns the bitmap in the header of the column, if any.
+
+        If the column has no associated bitmap, wxNullBitmap is returned.
+    */
+    virtual wxBitmap GetBitmap() const;                                   \
+
+    /**
+        Set the column width.
+
+        @param width
+            The column width in pixels or the special wxCOL_WIDTH_DEFAULT value
+            meaning to use default width.
+     */
+    virtual void SetWidth(int width);
+
+    /**
+        Returns the current width of the column.
+
+        @return
+            Width of the column in pixels, never wxCOL_WIDTH_DEFAULT.
+    */
+    virtual int GetWidth() const;
+
+    /**
+        Set the minimal column width.
+
+        This method can be used with resizeable columns (i.e. those for which
+        wxCOL_RESIZABLE flag is set in GetFlags() or, alternatively,
+        IsResizeable() returns @true) to prevent the user from making them
+        narrower than the given width.
+
+        @param minWidth
+            The minimal column width in pixels, may be 0 to remove any
+            previously set restrictions.
+     */
+    virtual void SetMinWidth(int minWidth);
+
+    /**
+        Return the minimal column width.
+
+        @return
+            The value previously set by SetMinWidth() or 0 by default.
+     */
+    virtual int GetMinWidth() const;
+
+    /**
+        Set the alignment of the column header.
+
+        @param align
+            The text alignment in horizontal direction only or wxALIGN_NOT to
+            use the default alignment, The possible values here are
+            wxALIGN_CENTRE, wxALIGN_LEFT or wxALIGN_RIGHT with
+            wxALIGN_CENTRE_HORIZONTAL being also supported as synonym for
+            wxALIGN_CENTRE for consistency (but notice that GetAlignment()
+            never returns it).
+    */
+    virtual void SetAlignment(wxAlignment align);
+
+    /**
+        Returns the current column alignment.
+
+        @return
+            One of wxALIGN_CENTRE, wxALIGN_LEFT or wxALIGN_RIGHT.
+     */
+    virtual wxAlignment GetAlignment() const;
+
+
+    // not documented because I'm not sure if it should be in the public API at
+    // all
+#if 0
+    // arbitrary client data associated with the column (currently only
+    // implemented in MSW because it is used in MSW wxDataViewCtrl
+    // implementation)
+    virtual void SetClientData(wxUIntPtr data);
+    virtual wxUIntPtr GetClientData() const;
+#endif
+
+
+    /**
+        Set the column flags.
+
+        This method allows to set all flags at once, see also generic
+        ChangeFlag(), SetFlag(), ClearFlag() and ToggleFlag() methods below as
+        well as specific SetResizeable(), SetSortable(), SetReorderable() and
+        SetHidden() ones.
+
+        @param flags
+            Combination of wxCOL_RESIZABLE, wxCOL_SORTABLE, wxCOL_REORDERABLE
+            and wxCOL_HIDDEN bit flags.
+     */
+    virtual void SetFlags(int flags);
+
+    /**
+        Set or clear the given flag.
+
+        @param flag
+            The flag to set or clear.
+        @param set
+            If @true, set the flag, i.e. equivalent to calling SetFlag(),
+            otherwise clear it, as ClearFlag().
+
+        @see SetFlags()
+     */
+    void ChangeFlag(int flag, bool set);
+
+    /**
+        Set the specified flag for the column.
+
+        @see SetFlags()
+     */
+    void SetFlag(int flag);
+
+    /**
+        Clear the specified flag for the column.
+
+        @see SetFlags()
+     */
+    void ClearFlag(int flag);
+
+    /**
+        Toggle the specified flag for the column.
+
+        If the flag is currently set, equivalent to ClearFlag(), otherwise --
+        to SetFlag().
+
+        @see SetFlags()
+     */
+    void ToggleFlag(int flag);
+
+    /**
+        Get the column flags.
+
+        This method retrieves all the flags at once, you can also use HasFlag()
+        to test for any individual flag or IsResizeable(), IsSortable(),
+        IsReorderable() and IsHidden() to test for particular flags.
+
+        @see SetFlags()
+     */
+    virtual int GetFlags() const;
+
+    /**
+        Return @true if the specified flag is currently set for this column.
+     */
+    bool HasFlag(int flag) const;
+
+
+    /**
+        Call this to enable or disable interactive resizing of the column by
+        the user.
+
+        By default, the columns are resizeable.
+
+        Equivalent to ChangeFlag(wxCOL_RESIZABLE, resizeable).
+     */
+    virtual void SetResizeable(bool resizeable);
+
+    /**
+        Return true if the column can be resized by the user.
+
+        Equivalent to HasFlag(wxCOL_RESIZABLE).
+     */
+    virtual bool IsResizeable() const;
+
+    /**
+        Allow clicking the column to sort the control contents by the field in
+        this column.
+
+        By default, the columns are not sortable so you need to explicitly call
+        this function to allow sorting by the field corresponding to this
+        column.
+
+        Equivalent to ChangeFlag(wxCOL_SORTABLE, sortable).
+     */
+    virtual void SetSortable(bool sortable);
+
+    /**
+        Returns @true if the column can be clicked by user to sort the control
+        contents by the field in this column.
+
+        This corresponds to wxCOL_SORTABLE flag which is off by default.
+
+        @see SetSortable()
+    */
+    virtual bool IsSortable() const;
+
+    /**
+        Allow changing the column order by dragging it.
+
+        Equivalent to ChangeFlag(wxCOL_REORDERABLE, reorderable).
+     */
+    virtual void SetReorderable(bool reorderable);
+
+    /**
+        Returns @true if the column can be dragged by user to change its order.
+
+        This corresponds to wxCOL_REORDERABLE flag which is on by default.
+
+        @see SetReorderable()
+    */
+    virtual bool IsReorderable() const;
+
+    /**
+        Hide or show the column.
+
+        By default all columns are shown but some of them can be completely
+        hidden from view by calling this function.
+
+        Equivalent to ChangeFlag(wxCOL_HIDDEN, hidden).
+     */
+    virtual void SetHidden(bool hidden);
+
+    /**
+        Returns @true if the column is currently hidden.
+
+        This corresponds to wxCOL_HIDDEN flag which is off by default.
+     */
+    virtual bool IsHidden() const;
+
+    /**
+        Sets the sort order for this column.
+
+        This only makes sense for sortable columns and is only taken into
+        account by the control in which this column is inserted, this function
+        just stores the sort order in the wxHeaderColumn object.
+
+        @param ascending
+            If @true, sort in ascending order, otherwise in descending order.
+     */
+    virtual void SetSortOrder(bool ascending);
+
+    /**
+        Inverses the sort order.
+
+        This function is typically called when the user clicks on a column used
+        for sorting to change sort order from ascending to descending or vice
+        versa.
+
+        @see SetSortOrder(), IsSortOrderAscending()
+     */
+    void ToggleSortOrder();
+
+    /**
+        Returns @true, if the sort order is ascending.
+
+        @see SetSortOrder()
+    */
+    virtual bool IsSortOrderAscending() const;
+};
+
+