Added DnD related events to wxSTC
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12156 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -121,17 +121,31 @@ void ScintillaWX::Finalise() {
|
||||
|
||||
|
||||
void ScintillaWX::StartDrag() {
|
||||
wxDropSource source(wMain.GetID());
|
||||
wxTextDataObject data(wxString(drag.s, drag.len));
|
||||
wxDragResult result;
|
||||
wxString dragText(drag.s, drag.len);
|
||||
|
||||
dropWentOutside = true;
|
||||
source.SetData(data);
|
||||
result = source.DoDragDrop(TRUE);
|
||||
if (result == wxDragMove && dropWentOutside)
|
||||
ClearSelection();
|
||||
inDragDrop = FALSE;
|
||||
SetDragPosition(invalidPosition);
|
||||
// Send an event to allow the drag text to be changed
|
||||
wxStyledTextEvent evt(wxEVT_STC_START_DRAG, stc->GetId());
|
||||
evt.SetEventObject(stc);
|
||||
evt.SetDragText(dragText);
|
||||
evt.SetDragAllowMove(TRUE);
|
||||
evt.SetPosition(wxMin(stc->GetSelectionStart(),
|
||||
stc->GetSelectionEnd()));
|
||||
stc->GetEventHandler()->ProcessEvent(evt);
|
||||
dragText = evt.GetDragText();
|
||||
|
||||
if (dragText.Length()) {
|
||||
wxDropSource source(wMain.GetID());
|
||||
wxTextDataObject data(dragText);
|
||||
wxDragResult result;
|
||||
|
||||
source.SetData(data);
|
||||
dropWentOutside = TRUE;
|
||||
result = source.DoDragDrop(evt.GetDragAllowMove());
|
||||
if (result == wxDragMove && dropWentOutside)
|
||||
ClearSelection();
|
||||
inDragDrop = FALSE;
|
||||
SetDragPosition(invalidPosition);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -489,9 +503,26 @@ void ScintillaWX::DoOnListBox() {
|
||||
|
||||
bool ScintillaWX::DoDropText(long x, long y, const wxString& data) {
|
||||
SetDragPosition(invalidPosition);
|
||||
int movePos = PositionFromLocation(Point(x,y));
|
||||
DropAt(movePos, data, dragResult == wxDragMove, FALSE); // TODO: rectangular?
|
||||
return TRUE;
|
||||
|
||||
// Send an event to allow the drag details to be changed
|
||||
wxStyledTextEvent evt(wxEVT_STC_DO_DROP, stc->GetId());
|
||||
evt.SetEventObject(stc);
|
||||
evt.SetDragResult(dragResult);
|
||||
evt.SetX(x);
|
||||
evt.SetY(y);
|
||||
evt.SetPosition(PositionFromLocation(Point(x,y)));
|
||||
evt.SetDragText(data);
|
||||
stc->GetEventHandler()->ProcessEvent(evt);
|
||||
|
||||
dragResult = evt.GetDragResult();
|
||||
if (dragResult == wxDragMove || dragResult == wxDragCopy) {
|
||||
DropAt(evt.GetPosition(),
|
||||
evt.GetDragText(),
|
||||
dragResult == wxDragMove,
|
||||
FALSE); // TODO: rectangular?
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -503,7 +534,17 @@ wxDragResult ScintillaWX::DoDragEnter(wxCoord x, wxCoord y, wxDragResult def) {
|
||||
|
||||
wxDragResult ScintillaWX::DoDragOver(wxCoord x, wxCoord y, wxDragResult def) {
|
||||
SetDragPosition(PositionFromLocation(Point(x, y)));
|
||||
dragResult = def;
|
||||
|
||||
// Send an event to allow the drag result to be changed
|
||||
wxStyledTextEvent evt(wxEVT_STC_DRAG_OVER, stc->GetId());
|
||||
evt.SetEventObject(stc);
|
||||
evt.SetDragResult(def);
|
||||
evt.SetX(x);
|
||||
evt.SetY(y);
|
||||
evt.SetPosition(PositionFromLocation(Point(x,y)));
|
||||
stc->GetEventHandler()->ProcessEvent(evt);
|
||||
|
||||
dragResult = evt.GetDragResult();
|
||||
return dragResult;
|
||||
}
|
||||
|
||||
|
||||
@@ -93,8 +93,9 @@ DEFINE_EVENT_TYPE( wxEVT_STC_USERLISTSELECTION )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_URIDROPPED )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_DWELLSTART )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_DWELLEND )
|
||||
|
||||
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_START_DRAG )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_DRAG_OVER )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_DO_DROP )
|
||||
|
||||
|
||||
BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl)
|
||||
@@ -1914,6 +1915,7 @@ void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) {
|
||||
|
||||
void wxStyledTextCtrl::NotifyChange() {
|
||||
wxStyledTextEvent evt(wxEVT_STC_CHANGE, GetId());
|
||||
evt.SetEventObject(this);
|
||||
GetEventHandler()->ProcessEvent(evt);
|
||||
}
|
||||
|
||||
@@ -1921,6 +1923,7 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) {
|
||||
SCNotification& scn = *_scn;
|
||||
wxStyledTextEvent evt(0, GetId());
|
||||
|
||||
evt.SetEventObject(this);
|
||||
evt.SetPosition(scn.position);
|
||||
evt.SetKey(scn.ch);
|
||||
evt.SetModifiers(scn.modifiers);
|
||||
@@ -2026,7 +2029,6 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------
|
||||
@@ -2050,6 +2052,8 @@ wxStyledTextEvent::wxStyledTextEvent(wxEventType commandType, int id)
|
||||
m_listType = 0;
|
||||
m_x = 0;
|
||||
m_y = 0;
|
||||
m_dragAllowMove = FALSE;
|
||||
m_dragResult = wxDragNone;
|
||||
}
|
||||
|
||||
bool wxStyledTextEvent::GetShift() const { return (m_modifiers & SCI_SHIFT) != 0; }
|
||||
@@ -2081,8 +2085,14 @@ void wxStyledTextEvent::CopyObject(wxObject& obj) const {
|
||||
o->m_x = m_x;
|
||||
o->m_y = m_y;
|
||||
|
||||
o->m_dragText = m_dragText;
|
||||
o->m_dragAllowMove =m_dragAllowMove;
|
||||
o->m_dragResult = m_dragResult;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -93,8 +93,9 @@ DEFINE_EVENT_TYPE( wxEVT_STC_USERLISTSELECTION )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_URIDROPPED )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_DWELLSTART )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_DWELLEND )
|
||||
|
||||
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_START_DRAG )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_DRAG_OVER )
|
||||
DEFINE_EVENT_TYPE( wxEVT_STC_DO_DROP )
|
||||
|
||||
|
||||
BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl)
|
||||
@@ -458,6 +459,7 @@ void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) {
|
||||
|
||||
void wxStyledTextCtrl::NotifyChange() {
|
||||
wxStyledTextEvent evt(wxEVT_STC_CHANGE, GetId());
|
||||
evt.SetEventObject(this);
|
||||
GetEventHandler()->ProcessEvent(evt);
|
||||
}
|
||||
|
||||
@@ -465,6 +467,7 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) {
|
||||
SCNotification& scn = *_scn;
|
||||
wxStyledTextEvent evt(0, GetId());
|
||||
|
||||
evt.SetEventObject(this);
|
||||
evt.SetPosition(scn.position);
|
||||
evt.SetKey(scn.ch);
|
||||
evt.SetModifiers(scn.modifiers);
|
||||
@@ -570,7 +573,6 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------
|
||||
@@ -594,6 +596,8 @@ wxStyledTextEvent::wxStyledTextEvent(wxEventType commandType, int id)
|
||||
m_listType = 0;
|
||||
m_x = 0;
|
||||
m_y = 0;
|
||||
m_dragAllowMove = FALSE;
|
||||
m_dragResult = wxDragNone;
|
||||
}
|
||||
|
||||
bool wxStyledTextEvent::GetShift() const { return (m_modifiers & SCI_SHIFT) != 0; }
|
||||
@@ -625,8 +629,14 @@ void wxStyledTextEvent::CopyObject(wxObject& obj) const {
|
||||
o->m_x = m_x;
|
||||
o->m_y = m_y;
|
||||
|
||||
o->m_dragText = m_dragText;
|
||||
o->m_dragAllowMove =m_dragAllowMove;
|
||||
o->m_dragResult = m_dragResult;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include <wx/dnd.h>
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// BEGIN generated section. The following code is automatically generated
|
||||
@@ -175,6 +176,7 @@ private:
|
||||
void NotifyChange();
|
||||
void NotifyParent(SCNotification* scn);
|
||||
|
||||
|
||||
private:
|
||||
DECLARE_EVENT_TABLE()
|
||||
DECLARE_CLASS(wxStyledTextCtrl)
|
||||
@@ -196,23 +198,26 @@ public:
|
||||
wxStyledTextEvent(wxEventType commandType=0, int id=0);
|
||||
~wxStyledTextEvent() {}
|
||||
|
||||
void SetPosition(int pos) { m_position = pos; }
|
||||
void SetKey(int k) { m_key = k; }
|
||||
void SetModifiers(int m) { m_modifiers = m; }
|
||||
void SetModificationType(int t) { m_modificationType = t; }
|
||||
void SetText(const char* t) { m_text = t; }
|
||||
void SetLength(int len) { m_length = len; }
|
||||
void SetLinesAdded(int num) { m_linesAdded = num; }
|
||||
void SetLine(int val) { m_line = val; }
|
||||
void SetFoldLevelNow(int val) { m_foldLevelNow = val; }
|
||||
void SetFoldLevelPrev(int val) { m_foldLevelPrev = val; }
|
||||
void SetMargin(int val) { m_margin = val; }
|
||||
void SetMessage(int val) { m_message = val; }
|
||||
void SetWParam(int val) { m_wParam = val; }
|
||||
void SetLParam(int val) { m_lParam = val; }
|
||||
void SetListType(int val) { m_listType = val; }
|
||||
void SetX(int val) { m_x = val; }
|
||||
void SetY(int val) { m_y = val; }
|
||||
void SetPosition(int pos) { m_position = pos; }
|
||||
void SetKey(int k) { m_key = k; }
|
||||
void SetModifiers(int m) { m_modifiers = m; }
|
||||
void SetModificationType(int t) { m_modificationType = t; }
|
||||
void SetText(const char* t) { m_text = t; }
|
||||
void SetLength(int len) { m_length = len; }
|
||||
void SetLinesAdded(int num) { m_linesAdded = num; }
|
||||
void SetLine(int val) { m_line = val; }
|
||||
void SetFoldLevelNow(int val) { m_foldLevelNow = val; }
|
||||
void SetFoldLevelPrev(int val) { m_foldLevelPrev = val; }
|
||||
void SetMargin(int val) { m_margin = val; }
|
||||
void SetMessage(int val) { m_message = val; }
|
||||
void SetWParam(int val) { m_wParam = val; }
|
||||
void SetLParam(int val) { m_lParam = val; }
|
||||
void SetListType(int val) { m_listType = val; }
|
||||
void SetX(int val) { m_x = val; }
|
||||
void SetY(int val) { m_y = val; }
|
||||
void SetDragText(const wxString& val) { m_dragText = val; }
|
||||
void SetDragAllowMove(bool val) { m_dragAllowMove = val; }
|
||||
void SetDragResult(wxDragResult val) { m_dragResult = val; }
|
||||
|
||||
int GetPosition() const { return m_position; }
|
||||
int GetKey() const { return m_key; }
|
||||
@@ -231,6 +236,9 @@ public:
|
||||
int GetListType() const { return m_listType; }
|
||||
int GetX() const { return m_x; }
|
||||
int GetY() const { return m_y; }
|
||||
wxString GetDragText() { return m_dragText; }
|
||||
bool GetDragAllowMove() { return m_dragAllowMove; }
|
||||
wxDragResult GetDragResult() { return m_dragResult; }
|
||||
|
||||
bool GetShift() const;
|
||||
bool GetControl() const;
|
||||
@@ -263,6 +271,11 @@ private:
|
||||
int m_listType;
|
||||
int m_x;
|
||||
int m_y;
|
||||
|
||||
wxString m_dragText; // wxEVT_STC_START_DRAG, wxEVT_STC_DO_DROP
|
||||
bool m_dragAllowMove; // wxEVT_STC_START_DRAG
|
||||
|
||||
wxDragResult m_dragResult; // wxEVT_STC_DRAG_OVER,wxEVT_STC_DO_DROP
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -287,6 +300,9 @@ BEGIN_DECLARE_EVENT_TYPES()
|
||||
DECLARE_LOCAL_EVENT_TYPE(wxEVT_STC_URIDROPPED, 1666)
|
||||
DECLARE_LOCAL_EVENT_TYPE(wxEVT_STC_DWELLSTART, 1667)
|
||||
DECLARE_LOCAL_EVENT_TYPE(wxEVT_STC_DWELLEND, 1668)
|
||||
DECLARE_LOCAL_EVENT_TYPE(wxEVT_STC_START_DRAG, 1669)
|
||||
DECLARE_LOCAL_EVENT_TYPE(wxEVT_STC_DRAG_OVER, 1670)
|
||||
DECLARE_LOCAL_EVENT_TYPE(wxEVT_STC_DO_DROP, 1671)
|
||||
END_DECLARE_EVENT_TYPES()
|
||||
#else
|
||||
enum {
|
||||
@@ -309,6 +325,9 @@ END_DECLARE_EVENT_TYPES()
|
||||
wxEVT_STC_URIDROPPED,
|
||||
wxEVT_STC_DWELLSTART,
|
||||
wxEVT_STC_DWELLEND,
|
||||
wxEVT_STC_START_DRAG,
|
||||
wxEVT_STC_DRAG_OVER,
|
||||
wxEVT_STC_DO_DROP,
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -336,7 +355,9 @@ typedef void (wxEvtHandler::*wxStyledTextEventFunction)(wxStyledTextEvent&);
|
||||
#define EVT_STC_URIDROPPED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_URIDROPPED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL ),
|
||||
#define EVT_STC_DWELLSTART(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_DWELLSTART, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL ),
|
||||
#define EVT_STC_DWELLEND(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_DWELLEND, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL ),
|
||||
|
||||
#define EVT_STC_START_DRAG(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_START_DRAG, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL ),
|
||||
#define EVT_STC_DRAG_OVER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_DRAG_OVER, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL ),
|
||||
#define EVT_STC_DO_DROP(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_STC_DO_DROP, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL ),
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user