implement column reordering support in wxMSW wxHeaderCtrl; use it in wxDataViewCtrl (and make difference between column indices and positions more clear in it)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57232 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-12-10 15:56:11 +00:00
parent fbc25b5107
commit 702f5349c6
7 changed files with 323 additions and 57 deletions

View File

@@ -86,6 +86,20 @@
or the resizing was cancelled. If wxHeaderCtrlEvent::IsCancelled()
returns @true, nothing should be done, otherwise the column should
normally be resized to the value of wxHeaderCtrlEvent::GetWidth().
@event{EVT_HEADER_BEGIN_REORDER(id, func)}
The user started to drag the column with the specified index (this
can only happen for the controls with wxHD_DRAGDROP style). This
event can be vetoed to prevent the column from being reordered,
otherwise the end reorder message will be generated later.
@event{EVT_HEADER_END_REORDER(id, func)}
Either the user dropped the column in its new location or the
drag operation was cancelled. If wxHeaderCtrlEvent::IsCancelled()
returns @true, nothing should be done, otherwise the event can be
vetoed to prevent the column from being placed at the new position
or handled to update the display of the data in the associated
control to match the new column location (available from
wxHeaderCtrlEvent::GetNewOrder()).
@endEventTable
@library{wxcore}
@@ -195,6 +209,62 @@ public:
*/
void UpdateColumn(unsigned int idx);
/**
Change the columns display order.
The display order defines the order in which the columns appear on the
screen and does @em not affect the interpretation of indices by all the
other class methods.
The @a order array specifies the column indices corresponding to the
display positions.
@param order
A permutation of all column indices, i.e. an array of size
GetColumnsOrder() containing all column indices exactly once. The
n-th element of this array defines the index of the column shown at
the n-th position from left (for the default left-to-right writing
direction).
@see wxListCtrl::SetColumnsOrder()
*/
void SetColumnsOrder(const wxArrayInt& order);
/**
Return the array describing the columns display order.
For the controls without wxHD_DRAGDROP style the returned array will be
the same as was passed to SetColumnsOrder() previously or define the
default order (with n-th element being n) if it hadn't been called. But
for the controls with wxHD_DRAGDROP style, the columns can be also
reordered by user.
*/
wxArrayInt GetColumnsOrder() const;
/**
Return the index of the column displayed at the given position.
@param pos
The display position, e.g. 0 for the left-most column, 1 for the
next one and so on until GetColumnCount() - 1.
@see GetColumnPos()
*/
unsigned int GetColumnAt(unsigned int pos) const;
/**
Get the position at which this column is currently displayed.
Notice that a valid position is returned even for the hidden columns
currently.
@param idx
The column index, must be less than GetColumnCount().
@see GetColumnAt()
*/
unsigned int GetColumnPos(unsigned int idx) const;
protected:
/**
Method to be implemented by the derived classes to return the
@@ -430,6 +500,16 @@ public:
*/
int GetWidth() const;
/**
Return the new order of the column.
This method can only be called for end reorder event for which it
indicates the tentative new position for the column GetColumn()
selected by the user. If the event is not vetoed, this will become the
new column position in wxHeaderCtrl::GetColumnsOrder().
*/
unsigned int GetNewOrder() const;
/**
Return @true if the drag operation was cancelled.