]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/headercol.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/headercol.h
3 // Purpose: interface of wxHeaderColumn
4 // Author: Vadim Zeitlin
7 // Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
12 Column width special values.
16 /// Special value used for column width meaning unspecified or default.
17 wxCOL_WIDTH_DEFAULT
= -1,
19 /// Size the column automatically to fit all values.
20 wxCOL_WIDTH_AUTOSIZE
= -2
24 Bit flags used as wxHeaderColumn flags.
28 /// Column can be resized (included in default flags).
31 /// Column can be clicked to toggle the sort order by its contents.
34 /// Column can be dragged to change its order (included in default).
35 wxCOL_REORDERABLE
= 4,
37 /// Column is not shown at all.
40 /// Default flags for wxHeaderColumn ctor.
41 wxCOL_DEFAULT_FLAGS
= wxCOL_RESIZABLE
| wxCOL_REORDERABLE
47 Represents a column header in controls displaying tabular data such as
48 wxDataViewCtrl or wxGrid.
50 Notice that this is an abstract base class which is implemented (usually
51 using the information stored in the associated control) by the different
52 controls using wxHeaderCtrl. As the control only needs to retrieve the
53 information about the column, this class defines only the methods for
54 accessing the various column properties but not for changing them as the
55 setters might not be needed at all, e.g. if the column attributes can only
56 be changed via the methods of the main associated control (this is the case
57 for wxGrid for example). If you do want to allow changing them directly
58 using the column itself, you should inherit from wxSettableHeaderColumn
59 instead of this class.
61 Finally, if you don't already store the column information at all anywhere,
62 you should use the concrete wxHeaderColumnSimple class and
72 Get the text shown in the column header.
74 virtual wxString
GetTitle() const = 0;
77 Returns the bitmap in the header of the column, if any.
79 If the column has no associated bitmap, wxNullBitmap should be returned.
81 virtual wxBitmap
GetBitmap() const = 0;
84 Returns the current width of the column.
87 Width of the column in pixels, never wxCOL_WIDTH_DEFAULT or
90 virtual int GetWidth() const = 0;
93 Return the minimal column width.
96 The minimal width such that the user can't resize the column to
97 lesser size (notice that it is still possible to set the column
98 width to smaller value from the program code). Return 0 from here
99 to allow resizing the column to arbitrarily small size.
101 virtual int GetMinWidth() const = 0;
104 Returns the current column alignment.
107 One of wxALIGN_CENTRE, wxALIGN_LEFT or wxALIGN_RIGHT.
109 virtual wxAlignment
GetAlignment() const = 0;
113 Get the column flags.
115 This method retrieves all the flags at once, you can also use HasFlag()
116 to test for any individual flag or IsResizeable(), IsSortable(),
117 IsReorderable() and IsHidden() to test for particular flags.
119 virtual int GetFlags() const = 0;
122 Return @true if the specified flag is currently set for this column.
124 bool HasFlag(int flag
) const;
128 Return true if the column can be resized by the user.
130 Equivalent to HasFlag(wxCOL_RESIZABLE).
132 virtual bool IsResizeable() const;
135 Returns @true if the column can be clicked by user to sort the control
136 contents by the field in this column.
138 This corresponds to wxCOL_SORTABLE flag which is off by default.
140 virtual bool IsSortable() const;
143 Returns @true if the column can be dragged by user to change its order.
145 This corresponds to wxCOL_REORDERABLE flag which is on by default.
147 virtual bool IsReorderable() const;
150 Returns @true if the column is currently hidden.
152 This corresponds to wxCOL_HIDDEN flag which is off by default.
154 virtual bool IsHidden() const;
157 Returns @true if the column is currently shown.
159 This corresponds to the absence of wxCOL_HIDDEN flag.
161 bool IsShown() const;
165 Returns @true if the column is currently used for sorting.
167 virtual bool IsSortKey() const = 0;
170 Returns @true, if the sort order is ascending.
172 Notice that it only makes sense to call this function if the column is
173 used for sorting at all, i.e. if IsSortKey() returns @true.
175 virtual bool IsSortOrderAscending() const = 0;
179 @class wxSettableHeaderColumn
181 Adds methods to set the column attributes to wxHeaderColumn.
183 This class adds setters for the column attributes defined by
184 wxHeaderColumn. It is still an abstract base class and needs to be
185 implemented before using it with wxHeaderCtrl.
190 class wxSettableHeaderColumn
: public wxHeaderColumn
194 Set the text to display in the column header.
196 virtual void SetTitle(const wxString
& title
) = 0;
199 Set the bitmap to be displayed in the column header.
201 Notice that the bitmaps displayed in different columns of the same
202 control must all be of the same size.
204 virtual void SetBitmap(const wxBitmap
& bitmap
) = 0;
207 Set the column width.
210 The column width in pixels or the special wxCOL_WIDTH_DEFAULT
211 (meaning to use default width) or wxCOL_WIDTH_AUTOSIZE (size to
212 fit the content) value.
214 virtual void SetWidth(int width
) = 0;
217 Set the minimal column width.
219 This method can be used with resizeable columns (i.e. those for which
220 wxCOL_RESIZABLE flag is set in GetFlags() or, alternatively,
221 IsResizeable() returns @true) to prevent the user from making them
222 narrower than the given width.
225 The minimal column width in pixels, may be 0 to remove any
226 previously set restrictions.
228 virtual void SetMinWidth(int minWidth
) = 0;
231 Set the alignment of the column header.
234 The text alignment in horizontal direction only or wxALIGN_NOT to
235 use the default alignment, The possible values here are
236 wxALIGN_CENTRE, wxALIGN_LEFT or wxALIGN_RIGHT with
237 wxALIGN_CENTRE_HORIZONTAL being also supported as synonym for
238 wxALIGN_CENTRE for consistency (but notice that GetAlignment()
241 virtual void SetAlignment(wxAlignment align
) = 0;
245 Set the column flags.
247 This method allows to set all flags at once, see also generic
248 ChangeFlag(), SetFlag(), ClearFlag() and ToggleFlag() methods below as
249 well as specific SetResizeable(), SetSortable(), SetReorderable() and
253 Combination of wxCOL_RESIZABLE, wxCOL_SORTABLE, wxCOL_REORDERABLE
254 and wxCOL_HIDDEN bit flags.
256 virtual void SetFlags(int flags
) = 0;
259 Set or clear the given flag.
262 The flag to set or clear.
264 If @true, set the flag, i.e. equivalent to calling SetFlag(),
265 otherwise clear it, as ClearFlag().
269 void ChangeFlag(int flag
, bool set
);
272 Set the specified flag for the column.
276 void SetFlag(int flag
);
279 Clear the specified flag for the column.
283 void ClearFlag(int flag
);
286 Toggle the specified flag for the column.
288 If the flag is currently set, equivalent to ClearFlag(), otherwise --
293 void ToggleFlag(int flag
);
297 Call this to enable or disable interactive resizing of the column by
300 By default, the columns are resizeable.
302 Equivalent to ChangeFlag(wxCOL_RESIZABLE, resizeable).
304 virtual void SetResizeable(bool resizeable
);
307 Allow clicking the column to sort the control contents by the field in
310 By default, the columns are not sortable so you need to explicitly call
311 this function to allow sorting by the field corresponding to this
314 Equivalent to ChangeFlag(wxCOL_SORTABLE, sortable).
316 virtual void SetSortable(bool sortable
);
319 Allow changing the column order by dragging it.
321 Equivalent to ChangeFlag(wxCOL_REORDERABLE, reorderable).
323 virtual void SetReorderable(bool reorderable
);
326 Hide or show the column.
328 By default all columns are shown but some of them can be completely
329 hidden from view by calling this function.
331 Equivalent to ChangeFlag(wxCOL_HIDDEN, hidden).
333 virtual void SetHidden(bool hidden
);
337 Sets this column as the sort key for the associated control.
339 Calling this function with @true argument means that this column is
340 currently used for sorting the control contents and so should typically
341 display an arrow indicating it (the direction of the arrow depends on
342 IsSortOrderAscending() return value).
344 Don't confuse this function with SetSortable() which should be used to
345 indicate that the column @em may be used for sorting while this one is
346 used to indicate that it currently @em is used for sorting. Of course,
347 SetAsSortKey() can be only called for sortable columns.
350 Sort (default) or don't sort the control contents by this column.
352 virtual void SetAsSortKey(bool sort
= true) = 0;
355 Don't use this column for sorting.
357 This is equivalent to calling SetAsSortKey() with @false argument.
359 void UnsetAsSortKey();
362 Sets the sort order for this column.
364 This only makes sense for sortable columns which are currently used as
365 sort key, i.e. for which IsSortKey() returns @true and is only taken
366 into account by the control in which this column is inserted, this
367 function just stores the sort order in the wxHeaderColumn object.
370 If @true, sort in ascending order, otherwise in descending order.
372 virtual void SetSortOrder(bool ascending
) = 0;
375 Inverses the sort order.
377 This function is typically called when the user clicks on a column used
378 for sorting to change sort order from ascending to descending or vice
381 @see SetSortOrder(), IsSortOrderAscending()
383 void ToggleSortOrder();
387 @class wxHeaderColumnSimple
389 Simple container for the information about the column.
391 This is a concrete class implementing all wxSettableHeaderColumn class
392 methods in a trivial way, i.e. by just storing the information in the
393 object itself. It is used by and with wxHeaderCtrlSimple, e.g.
395 wxHeaderCtrlSimple * header = new wxHeaderCtrlSimple(...);
396 wxHeaderColumnSimple col("Title");
398 col.SetSortable(100);
399 header->AppendColumn(col);
405 class wxHeaderColumnSimple
: public wxHeaderColumn
410 Constructor for a column header.
412 The first constructor creates a header showing the given text @a title
413 while the second one creates one showing the specified @a bitmap image.
415 wxHeaderColumnSimple(const wxString
& title
,
416 int width
= wxCOL_WIDTH_DEFAULT
,
417 wxAlignment align
= wxALIGN_NOT
,
418 int flags
= wxCOL_DEFAULT_FLAGS
);
420 wxHeaderColumnSimple(const wxBitmap
&bitmap
,
421 int width
= wxDVC_DEFAULT_WIDTH
,
422 wxAlignment align
= wxALIGN_CENTER
,
423 int flags
= wxCOL_DEFAULT_FLAGS
);
428 /// Trivial implementations of the base class pure virtual functions.
430 virtual void SetTitle(const wxString
& title
);
431 virtual wxString
GetTitle() const;
432 virtual void SetBitmap(const wxBitmap
& bitmap
);
433 virtual wxBitmap
GetBitmap() const;
434 virtual void SetWidth(int width
);
435 virtual int GetWidth() const;
436 virtual void SetMinWidth(int minWidth
);
437 virtual int GetMinWidth() const;
438 virtual void SetAlignment(wxAlignment align
);
439 virtual wxAlignment
GetAlignment() const;
440 virtual void SetFlags(int flags
);
441 virtual int GetFlags() const;
442 virtual void SetAsSortKey(bool sort
= true);
443 virtual bool IsSortKey() const;
444 virtual void SetSortOrder(bool ascending
);
445 virtual bool IsSortOrderAscending() const;