added EVT_HEADER_DRAGGING_CANCELLED event sent when either resizing or reordering operation is cancelled instead of having a special cancelled flag in normal END_RESIZE/REORDER events
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57233 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -151,7 +151,7 @@ private:
|
||||
// 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
|
||||
@@ -288,8 +288,7 @@ public:
|
||||
: 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))
|
||||
{
|
||||
}
|
||||
|
||||
@@ -297,8 +296,7 @@ public:
|
||||
: 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)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -314,10 +312,6 @@ public:
|
||||
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:
|
||||
@@ -330,9 +324,6 @@ 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)
|
||||
};
|
||||
@@ -355,6 +346,8 @@ extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_HEADER_END_RESIZE;
|
||||
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) \
|
||||
@@ -381,4 +374,6 @@ typedef void (wxEvtHandler::*wxHeaderCtrlEventFunction)(wxHeaderCtrlEvent&);
|
||||
#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_
|
||||
|
@@ -75,17 +75,17 @@
|
||||
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
|
||||
@@ -93,13 +93,20 @@
|
||||
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}
|
||||
@@ -509,11 +516,4 @@ public:
|
||||
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;
|
||||
};
|
||||
|
@@ -247,3 +247,5 @@ const wxEventType wxEVT_COMMAND_HEADER_END_RESIZE = wxNewEventType();
|
||||
|
||||
const wxEventType wxEVT_COMMAND_HEADER_BEGIN_REORDER = wxNewEventType();
|
||||
const wxEventType wxEVT_COMMAND_HEADER_END_REORDER = wxNewEventType();
|
||||
|
||||
const wxEventType wxEVT_COMMAND_HEADER_DRAGGING_CANCELLED = wxNewEventType();
|
||||
|
@@ -176,12 +176,9 @@ private:
|
||||
|
||||
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)
|
||||
|
@@ -300,17 +300,19 @@ void wxHeaderCtrl::EndResizing(int xPhysical)
|
||||
|
||||
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);
|
||||
|
@@ -325,7 +325,6 @@ bool wxHeaderCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
||||
int idx = nmhdr->iItem;
|
||||
int width = 0;
|
||||
int order = -1;
|
||||
bool cancelled = false;
|
||||
bool veto = false;
|
||||
const UINT code = nmhdr->hdr.code;
|
||||
switch ( code )
|
||||
@@ -432,7 +431,7 @@ bool wxHeaderCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
||||
break;
|
||||
|
||||
case NM_RELEASEDCAPTURE:
|
||||
cancelled = true;
|
||||
evtType = wxEVT_COMMAND_HEADER_DRAGGING_CANCELLED;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -446,8 +445,6 @@ bool wxHeaderCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
||||
event.SetWidth(width);
|
||||
if ( order != -1 )
|
||||
event.SetNewOrder(order);
|
||||
if ( cancelled )
|
||||
event.SetCancelled();
|
||||
|
||||
if ( GetEventHandler()->ProcessEvent(event) )
|
||||
{
|
||||
|
Reference in New Issue
Block a user