// control, see wxHeaderCtrlSimple for a standalone version
// ----------------------------------------------------------------------------
-#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
+#if 0// defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
#include "wx/msw/headerctrl.h"
#else
#define wxHAS_GENERIC_HEADERCTRL
: wxNotifyEvent(commandType, winid),
m_col(-1),
m_width(0),
- m_order(static_cast<unsigned int>(-1)),
- m_cancelled(false)
+ m_order(static_cast<unsigned int>(-1))
{
}
: wxNotifyEvent(event),
m_col(event.m_col),
m_width(event.m_width),
- m_order(event.m_order),
- m_cancelled(event.m_cancelled)
+ m_order(event.m_order)
{
}
unsigned int GetNewOrder() const { return m_order; }
void SetNewOrder(unsigned int order) { m_order = order; }
- // was the drag operation cancelled or did it complete successfully?
- bool IsCancelled() const { return m_cancelled; }
- void SetCancelled() { m_cancelled = true; }
-
virtual wxEvent *Clone() const { return new wxHeaderCtrlEvent(*this); }
protected:
// the new column position for end reorder event
unsigned int m_order;
- // was the drag operation cancelled?
- bool m_cancelled;
-
private:
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHeaderCtrlEvent)
};
extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_HEADER_BEGIN_REORDER;
extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_HEADER_END_REORDER;
+extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_HEADER_DRAGGING_CANCELLED;
+
typedef void (wxEvtHandler::*wxHeaderCtrlEventFunction)(wxHeaderCtrlEvent&);
#define wxHeaderCtrlEventHandler(func) \
#define EVT_HEADER_BEGIN_REORDER(id, fn) wx__DECLARE_HEADER_EVT(BEGIN_REORDER, id, fn)
#define EVT_HEADER_END_REORDER(id, fn) wx__DECLARE_HEADER_EVT(END_REORDER, id, fn)
+#define EVT_HEADER_DRAGGING_CANCELLED(id, fn) wx__DECLARE_HEADER_EVT(DRAGGING_CANCELLED, id, fn)
+
#endif // _WX_HEADERCTRL_H_
with the specified index (this can only happen for the columns for
which wxHeaderColumn::IsResizeable() returns true). The event can
be vetoed to prevent the column from being resized. If it isn't,
- the resizing and end resize events will be generated later.
+ the resizing and end resize (or dragging cancelled) events will be
+ generated later.
@event{EVT_HEADER_RESIZING(id, func)}
The user is dragging the column with the specified index resizing
it and its current width is wxHeaderCtrlEvent::GetWidth(). The
event can be vetoed to stop the dragging operation completely at
any time.
@event{EVT_HEADER_END_RESIZE(id, func)}
- Either the user stopped dragging the column by releasing the mouse
- 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().
+ The user stopped dragging the column by releasing the mouse. 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
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
+ The user dropped the column in its new location. 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()).
+
+ @event{EVT_HEADER_DRAGGING_CANCELLED(id, func)}
+ The resizing or reordering operation currently in progress was
+ cancelled. This can happen if the user pressed Esc key while
+ dragging the mouse or the mouse capture was lost for some other
+ reason. You only need to handle this event if your application
+ entered into some modal mode when resizing or reordering began, in
+ which case it should handle this event in addition to the matching
+ end resizing or reordering ones.
@endEventTable
@library{wxcore}
new column position in wxHeaderCtrl::GetColumnsOrder().
*/
unsigned int GetNewOrder() const;
-
- /**
- Return @true if the drag operation was cancelled.
-
- This method can only be called for the end drag event.
- */
- bool IsCancelled() const;
};
const wxEventType wxEVT_COMMAND_HEADER_BEGIN_REORDER = wxNewEventType();
const wxEventType wxEVT_COMMAND_HEADER_END_REORDER = wxNewEventType();
+
+const wxEventType wxEVT_COMMAND_HEADER_DRAGGING_CANCELLED = wxNewEventType();
void OnEndResize(wxHeaderCtrlEvent& event)
{
- if ( !event.IsCancelled() )
- {
- const unsigned col = event.GetColumn();
- GetColumn(col).SetWidth(event.GetWidth());
- GetOwner()->OnColumnChange(col);
- }
+ const unsigned col = event.GetColumn();
+ GetColumn(col).SetWidth(event.GetWidth());
+ GetOwner()->OnColumnChange(col);
}
void OnEndReorder(wxHeaderCtrlEvent& event)
EndDragging();
+ const bool cancelled = xPhysical == -1;
+
// if dragging was cancelled we must have already lost the mouse capture so
// don't try to release it
- if ( xPhysical != -1 )
+ if ( !cancelled )
ReleaseMouse();
- wxHeaderCtrlEvent event(wxEVT_COMMAND_HEADER_END_RESIZE, GetId());
+ wxHeaderCtrlEvent event(cancelled ? wxEVT_COMMAND_HEADER_DRAGGING_CANCELLED
+ : wxEVT_COMMAND_HEADER_END_RESIZE,
+ GetId());
event.SetEventObject(this);
event.SetColumn(m_colBeingResized);
- if ( xPhysical == -1 )
- event.SetCancelled();
- else
+ if ( !cancelled )
event.SetWidth(ConstrainByMinWidth(m_colBeingResized, xPhysical));
GetEventHandler()->ProcessEvent(event);
int idx = nmhdr->iItem;
int width = 0;
int order = -1;
- bool cancelled = false;
bool veto = false;
const UINT code = nmhdr->hdr.code;
switch ( code )
break;
case NM_RELEASEDCAPTURE:
- cancelled = true;
+ evtType = wxEVT_COMMAND_HEADER_DRAGGING_CANCELLED;
break;
}
event.SetWidth(width);
if ( order != -1 )
event.SetNewOrder(order);
- if ( cancelled )
- event.SetCancelled();
if ( GetEventHandler()->ProcessEvent(event) )
{