From: Vadim Zeitlin Date: Wed, 10 Dec 2008 16:05:21 +0000 (+0000) Subject: added EVT_HEADER_DRAGGING_CANCELLED event sent when either resizing or reordering... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/565804f2b9ec017360122cda08181d287919160b 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 --- diff --git a/include/wx/headerctrl.h b/include/wx/headerctrl.h index 322ac6134d..0e998b79fb 100644 --- a/include/wx/headerctrl.h +++ b/include/wx/headerctrl.h @@ -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(-1)), - m_cancelled(false) + m_order(static_cast(-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_ diff --git a/interface/wx/headerctrl.h b/interface/wx/headerctrl.h index a05fff563d..ce8dd8b2ca 100644 --- a/interface/wx/headerctrl.h +++ b/interface/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; }; diff --git a/src/common/headerctrlcmn.cpp b/src/common/headerctrlcmn.cpp index 02a18b889e..0199090a84 100644 --- a/src/common/headerctrlcmn.cpp +++ b/src/common/headerctrlcmn.cpp @@ -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(); diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index b5f7c321e7..b15e2eb4d4 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -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) diff --git a/src/generic/headerctrlg.cpp b/src/generic/headerctrlg.cpp index 0887b94cfc..9c4aaeb89a 100644 --- a/src/generic/headerctrlg.cpp +++ b/src/generic/headerctrlg.cpp @@ -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); diff --git a/src/msw/headerctrl.cpp b/src/msw/headerctrl.cpp index 2e2f75482b..5388eca4e1 100644 --- a/src/msw/headerctrl.cpp +++ b/src/msw/headerctrl.cpp @@ -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) ) {