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
|
// control, see wxHeaderCtrlSimple for a standalone version
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
|
#if 0// defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
|
||||||
#include "wx/msw/headerctrl.h"
|
#include "wx/msw/headerctrl.h"
|
||||||
#else
|
#else
|
||||||
#define wxHAS_GENERIC_HEADERCTRL
|
#define wxHAS_GENERIC_HEADERCTRL
|
||||||
@@ -288,8 +288,7 @@ public:
|
|||||||
: wxNotifyEvent(commandType, winid),
|
: wxNotifyEvent(commandType, winid),
|
||||||
m_col(-1),
|
m_col(-1),
|
||||||
m_width(0),
|
m_width(0),
|
||||||
m_order(static_cast<unsigned int>(-1)),
|
m_order(static_cast<unsigned int>(-1))
|
||||||
m_cancelled(false)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,8 +296,7 @@ public:
|
|||||||
: wxNotifyEvent(event),
|
: wxNotifyEvent(event),
|
||||||
m_col(event.m_col),
|
m_col(event.m_col),
|
||||||
m_width(event.m_width),
|
m_width(event.m_width),
|
||||||
m_order(event.m_order),
|
m_order(event.m_order)
|
||||||
m_cancelled(event.m_cancelled)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,10 +312,6 @@ public:
|
|||||||
unsigned int GetNewOrder() const { return m_order; }
|
unsigned int GetNewOrder() const { return m_order; }
|
||||||
void SetNewOrder(unsigned int order) { m_order = 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); }
|
virtual wxEvent *Clone() const { return new wxHeaderCtrlEvent(*this); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -330,9 +324,6 @@ protected:
|
|||||||
// the new column position for end reorder event
|
// the new column position for end reorder event
|
||||||
unsigned int m_order;
|
unsigned int m_order;
|
||||||
|
|
||||||
// was the drag operation cancelled?
|
|
||||||
bool m_cancelled;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHeaderCtrlEvent)
|
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_BEGIN_REORDER;
|
||||||
extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_HEADER_END_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&);
|
typedef void (wxEvtHandler::*wxHeaderCtrlEventFunction)(wxHeaderCtrlEvent&);
|
||||||
|
|
||||||
#define wxHeaderCtrlEventHandler(func) \
|
#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_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_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_
|
#endif // _WX_HEADERCTRL_H_
|
||||||
|
@@ -75,17 +75,17 @@
|
|||||||
with the specified index (this can only happen for the columns for
|
with the specified index (this can only happen for the columns for
|
||||||
which wxHeaderColumn::IsResizeable() returns true). The event can
|
which wxHeaderColumn::IsResizeable() returns true). The event can
|
||||||
be vetoed to prevent the column from being resized. If it isn't,
|
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)}
|
@event{EVT_HEADER_RESIZING(id, func)}
|
||||||
The user is dragging the column with the specified index resizing
|
The user is dragging the column with the specified index resizing
|
||||||
it and its current width is wxHeaderCtrlEvent::GetWidth(). The
|
it and its current width is wxHeaderCtrlEvent::GetWidth(). The
|
||||||
event can be vetoed to stop the dragging operation completely at
|
event can be vetoed to stop the dragging operation completely at
|
||||||
any time.
|
any time.
|
||||||
@event{EVT_HEADER_END_RESIZE(id, func)}
|
@event{EVT_HEADER_END_RESIZE(id, func)}
|
||||||
Either the user stopped dragging the column by releasing the mouse
|
The user stopped dragging the column by releasing the mouse. The
|
||||||
or the resizing was cancelled. If wxHeaderCtrlEvent::IsCancelled()
|
column should normally be resized to the value of
|
||||||
returns @true, nothing should be done, otherwise the column should
|
wxHeaderCtrlEvent::GetWidth().
|
||||||
normally be resized to the value of wxHeaderCtrlEvent::GetWidth().
|
|
||||||
|
|
||||||
@event{EVT_HEADER_BEGIN_REORDER(id, func)}
|
@event{EVT_HEADER_BEGIN_REORDER(id, func)}
|
||||||
The user started to drag the column with the specified index (this
|
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,
|
event can be vetoed to prevent the column from being reordered,
|
||||||
otherwise the end reorder message will be generated later.
|
otherwise the end reorder message will be generated later.
|
||||||
@event{EVT_HEADER_END_REORDER(id, func)}
|
@event{EVT_HEADER_END_REORDER(id, func)}
|
||||||
Either the user dropped the column in its new location or the
|
The user dropped the column in its new location. The event can be
|
||||||
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
|
vetoed to prevent the column from being placed at the new position
|
||||||
or handled to update the display of the data in the associated
|
or handled to update the display of the data in the associated
|
||||||
control to match the new column location (available from
|
control to match the new column location (available from
|
||||||
wxHeaderCtrlEvent::GetNewOrder()).
|
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
|
@endEventTable
|
||||||
|
|
||||||
@library{wxcore}
|
@library{wxcore}
|
||||||
@@ -509,11 +516,4 @@ public:
|
|||||||
new column position in wxHeaderCtrl::GetColumnsOrder().
|
new column position in wxHeaderCtrl::GetColumnsOrder().
|
||||||
*/
|
*/
|
||||||
unsigned int GetNewOrder() const;
|
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_BEGIN_REORDER = wxNewEventType();
|
||||||
const wxEventType wxEVT_COMMAND_HEADER_END_REORDER = wxNewEventType();
|
const wxEventType wxEVT_COMMAND_HEADER_END_REORDER = wxNewEventType();
|
||||||
|
|
||||||
|
const wxEventType wxEVT_COMMAND_HEADER_DRAGGING_CANCELLED = wxNewEventType();
|
||||||
|
@@ -175,14 +175,11 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OnEndResize(wxHeaderCtrlEvent& event)
|
void OnEndResize(wxHeaderCtrlEvent& event)
|
||||||
{
|
|
||||||
if ( !event.IsCancelled() )
|
|
||||||
{
|
{
|
||||||
const unsigned col = event.GetColumn();
|
const unsigned col = event.GetColumn();
|
||||||
GetColumn(col).SetWidth(event.GetWidth());
|
GetColumn(col).SetWidth(event.GetWidth());
|
||||||
GetOwner()->OnColumnChange(col);
|
GetOwner()->OnColumnChange(col);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void OnEndReorder(wxHeaderCtrlEvent& event)
|
void OnEndReorder(wxHeaderCtrlEvent& event)
|
||||||
{
|
{
|
||||||
|
@@ -300,17 +300,19 @@ void wxHeaderCtrl::EndResizing(int xPhysical)
|
|||||||
|
|
||||||
EndDragging();
|
EndDragging();
|
||||||
|
|
||||||
|
const bool cancelled = xPhysical == -1;
|
||||||
|
|
||||||
// if dragging was cancelled we must have already lost the mouse capture so
|
// if dragging was cancelled we must have already lost the mouse capture so
|
||||||
// don't try to release it
|
// don't try to release it
|
||||||
if ( xPhysical != -1 )
|
if ( !cancelled )
|
||||||
ReleaseMouse();
|
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.SetEventObject(this);
|
||||||
event.SetColumn(m_colBeingResized);
|
event.SetColumn(m_colBeingResized);
|
||||||
if ( xPhysical == -1 )
|
if ( !cancelled )
|
||||||
event.SetCancelled();
|
|
||||||
else
|
|
||||||
event.SetWidth(ConstrainByMinWidth(m_colBeingResized, xPhysical));
|
event.SetWidth(ConstrainByMinWidth(m_colBeingResized, xPhysical));
|
||||||
|
|
||||||
GetEventHandler()->ProcessEvent(event);
|
GetEventHandler()->ProcessEvent(event);
|
||||||
|
@@ -325,7 +325,6 @@ bool wxHeaderCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
int idx = nmhdr->iItem;
|
int idx = nmhdr->iItem;
|
||||||
int width = 0;
|
int width = 0;
|
||||||
int order = -1;
|
int order = -1;
|
||||||
bool cancelled = false;
|
|
||||||
bool veto = false;
|
bool veto = false;
|
||||||
const UINT code = nmhdr->hdr.code;
|
const UINT code = nmhdr->hdr.code;
|
||||||
switch ( code )
|
switch ( code )
|
||||||
@@ -432,7 +431,7 @@ bool wxHeaderCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NM_RELEASEDCAPTURE:
|
case NM_RELEASEDCAPTURE:
|
||||||
cancelled = true;
|
evtType = wxEVT_COMMAND_HEADER_DRAGGING_CANCELLED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,8 +445,6 @@ bool wxHeaderCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
event.SetWidth(width);
|
event.SetWidth(width);
|
||||||
if ( order != -1 )
|
if ( order != -1 )
|
||||||
event.SetNewOrder(order);
|
event.SetNewOrder(order);
|
||||||
if ( cancelled )
|
|
||||||
event.SetCancelled();
|
|
||||||
|
|
||||||
if ( GetEventHandler()->ProcessEvent(event) )
|
if ( GetEventHandler()->ProcessEvent(event) )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user