]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/stc.cpp
Various changes to make pop up menus work
[wxWidgets.git] / src / stc / stc.cpp
index 99645adb29333632c863296d4ad08458720271c7..520ebd5cb99d1e59ee6cbbeed5ca14939d7ad4b4 100644 (file)
@@ -93,13 +93,15 @@ 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_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)
     EVT_PAINT                   (wxStyledTextCtrl::OnPaint)
     EVT_SCROLLWIN               (wxStyledTextCtrl::OnScrollWin)
 
 
 BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl)
     EVT_PAINT                   (wxStyledTextCtrl::OnPaint)
     EVT_SCROLLWIN               (wxStyledTextCtrl::OnScrollWin)
+    EVT_SCROLL                  (wxStyledTextCtrl::OnScroll)
     EVT_SIZE                    (wxStyledTextCtrl::OnSize)
     EVT_LEFT_DOWN               (wxStyledTextCtrl::OnMouseLeftDown)
 #ifdef __WXMSW__
     EVT_SIZE                    (wxStyledTextCtrl::OnSize)
     EVT_LEFT_DOWN               (wxStyledTextCtrl::OnMouseLeftDown)
 #ifdef __WXMSW__
@@ -108,7 +110,11 @@ BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl)
 #endif
     EVT_MOTION                  (wxStyledTextCtrl::OnMouseMove)
     EVT_LEFT_UP                 (wxStyledTextCtrl::OnMouseLeftUp)
 #endif
     EVT_MOTION                  (wxStyledTextCtrl::OnMouseMove)
     EVT_LEFT_UP                 (wxStyledTextCtrl::OnMouseLeftUp)
+#ifdef __WXGTK__
+    EVT_RIGHT_UP                (wxStyledTextCtrl::OnMouseRightUp)
+#else
     EVT_CONTEXT_MENU            (wxStyledTextCtrl::OnContextMenu)
     EVT_CONTEXT_MENU            (wxStyledTextCtrl::OnContextMenu)
+#endif
     EVT_MOUSEWHEEL              (wxStyledTextCtrl::OnMouseWheel)
     EVT_CHAR                    (wxStyledTextCtrl::OnChar)
     EVT_KEY_DOWN                (wxStyledTextCtrl::OnKeyDown)
     EVT_MOUSEWHEEL              (wxStyledTextCtrl::OnMouseWheel)
     EVT_CHAR                    (wxStyledTextCtrl::OnChar)
     EVT_KEY_DOWN                (wxStyledTextCtrl::OnKeyDown)
@@ -137,9 +143,12 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
               style | wxVSCROLL | wxHSCROLL | wxWANTS_CHARS | wxCLIP_CHILDREN,
               wxDefaultValidator, name)
 {
               style | wxVSCROLL | wxHSCROLL | wxWANTS_CHARS | wxCLIP_CHILDREN,
               wxDefaultValidator, name)
 {
+    wxForceScintillaLexers();
     m_swx = new ScintillaWX(this);
     m_stopWatch.Start();
     m_lastKeyDownConsumed = FALSE;
     m_swx = new ScintillaWX(this);
     m_stopWatch.Start();
     m_lastKeyDownConsumed = FALSE;
+    m_vScrollBar = NULL;
+    m_hScrollBar = NULL;
 }
 
 
 }
 
 
@@ -267,6 +276,11 @@ void wxStyledTextCtrl::SetSavePoint() {
 // Retrieve a buffer of cells.
 wxString wxStyledTextCtrl::GetStyledText(int startPos, int endPos) {
                           wxString text;
 // Retrieve a buffer of cells.
 wxString wxStyledTextCtrl::GetStyledText(int startPos, int endPos) {
                           wxString text;
+                          if (endPos < startPos) {
+                              int temp = startPos;
+                              startPos = endPos;
+                              endPos = temp;
+                          }
                           int len = endPos - startPos;
                           if (!len) return "";
                           TextRange tr;
                           int len = endPos - startPos;
                           if (!len) return "";
                           TextRange tr;
@@ -964,6 +978,11 @@ int wxStyledTextCtrl::FindText(int minPos, int maxPos,
                                 wxRect pageRect) {
                             RangeToFormat fr;
 
                                 wxRect pageRect) {
                             RangeToFormat fr;
 
+                            if (endPos < startPos) {
+                                int temp = startPos;
+                                startPos = endPos;
+                                endPos = temp;
+                            }
                             fr.hdc = draw;
                             fr.hdcTarget = target;
                             fr.rc.top = renderRect.GetTop();
                             fr.hdc = draw;
                             fr.hdcTarget = target;
                             fr.rc.top = renderRect.GetTop();
@@ -1052,6 +1071,11 @@ wxString wxStyledTextCtrl::GetSelectedText() {
 // Retrieve a range of text.
 wxString wxStyledTextCtrl::GetTextRange(int startPos, int endPos) {
                             wxString text;
 // Retrieve a range of text.
 wxString wxStyledTextCtrl::GetTextRange(int startPos, int endPos) {
                             wxString text;
+                            if (endPos < startPos) {
+                                int temp = startPos;
+                                startPos = endPos;
+                                endPos = temp;
+                            }
                             int   len  = endPos - startPos;
                             if (!len) return "";
                             char* buff = text.GetWriteBuf(len);
                             int   len  = endPos - startPos;
                             if (!len) return "";
                             char* buff = text.GetWriteBuf(len);
@@ -1798,6 +1822,16 @@ void wxStyledTextCtrl::OnScrollWin(wxScrollWinEvent& evt) {
         m_swx->DoVScroll(evt.GetEventType(), evt.GetPosition());
 }
 
         m_swx->DoVScroll(evt.GetEventType(), evt.GetPosition());
 }
 
+void wxStyledTextCtrl::OnScroll(wxScrollEvent& evt) {
+    wxScrollBar* sb = wxDynamicCast(evt.GetEventObject(), wxScrollBar);
+    if (sb) {
+        if (sb->IsVertical())
+            m_swx->DoVScroll(evt.GetEventType(), evt.GetPosition());
+        else
+            m_swx->DoHScroll(evt.GetEventType(), evt.GetPosition());
+    }
+}
+
 void wxStyledTextCtrl::OnSize(wxSizeEvent& evt) {
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
 void wxStyledTextCtrl::OnSize(wxSizeEvent& evt) {
     wxSize sz = GetClientSize();
     m_swx->DoSize(sz.x, sz.y);
@@ -1821,6 +1855,12 @@ void wxStyledTextCtrl::OnMouseLeftUp(wxMouseEvent& evt) {
 }
 
 
 }
 
 
+void wxStyledTextCtrl::OnMouseRightUp(wxMouseEvent& evt) {
+    wxPoint pt = evt.GetPosition();
+    m_swx->DoContextMenu(Point(pt.x, pt.y));
+}
+
+
 void wxStyledTextCtrl::OnContextMenu(wxContextMenuEvent& evt) {
     wxPoint pt = evt.GetPosition();
     ScreenToClient(&pt.x, &pt.y);
 void wxStyledTextCtrl::OnContextMenu(wxContextMenuEvent& evt) {
     wxPoint pt = evt.GetPosition();
     ScreenToClient(&pt.x, &pt.y);
@@ -1851,9 +1891,9 @@ void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
     // alt let's skip it.
     bool ctrl = evt.ControlDown();
     bool alt  = evt.AltDown();
     // alt let's skip it.
     bool ctrl = evt.ControlDown();
     bool alt  = evt.AltDown();
-    bool skip = (ctrl || alt && ! (ctrl && alt));
+    bool skip = ((ctrl || alt) && ! (ctrl && alt));
 
 
-    if (key <= 0xff && !iscntrl(key) && !m_lastKeyDownConsumed && !skip) {
+    if (key <= 0xff && key >= 32 && !m_lastKeyDownConsumed && !skip) {
         m_swx->DoAddChar(key);
         return;
     }
         m_swx->DoAddChar(key);
         return;
     }
@@ -1914,6 +1954,7 @@ void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) {
 
 void wxStyledTextCtrl::NotifyChange() {
     wxStyledTextEvent evt(wxEVT_STC_CHANGE, GetId());
 
 void wxStyledTextCtrl::NotifyChange() {
     wxStyledTextEvent evt(wxEVT_STC_CHANGE, GetId());
+    evt.SetEventObject(this);
     GetEventHandler()->ProcessEvent(evt);
 }
 
     GetEventHandler()->ProcessEvent(evt);
 }
 
@@ -1921,6 +1962,7 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) {
     SCNotification& scn = *_scn;
     wxStyledTextEvent evt(0, GetId());
 
     SCNotification& scn = *_scn;
     wxStyledTextEvent evt(0, GetId());
 
+    evt.SetEventObject(this);
     evt.SetPosition(scn.position);
     evt.SetKey(scn.ch);
     evt.SetModifiers(scn.modifiers);
     evt.SetPosition(scn.position);
     evt.SetKey(scn.ch);
     evt.SetModifiers(scn.modifiers);
@@ -2026,7 +2068,6 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) {
 }
 
 
 }
 
 
-
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
@@ -2050,39 +2091,52 @@ wxStyledTextEvent::wxStyledTextEvent(wxEventType commandType, int id)
     m_listType = 0;
     m_x = 0;
     m_y = 0;
     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; }
 bool wxStyledTextEvent::GetControl() const { return (m_modifiers & SCI_CTRL) != 0; }
 bool wxStyledTextEvent::GetAlt() const { return (m_modifiers & SCI_ALT) != 0; }
 
 }
 
 bool wxStyledTextEvent::GetShift() const { return (m_modifiers & SCI_SHIFT) != 0; }
 bool wxStyledTextEvent::GetControl() const { return (m_modifiers & SCI_CTRL) != 0; }
 bool wxStyledTextEvent::GetAlt() const { return (m_modifiers & SCI_ALT) != 0; }
 
-void wxStyledTextEvent::CopyObject(wxObject& obj) const {
-    wxCommandEvent::CopyObject(obj);
 
 
-    wxStyledTextEvent* o = (wxStyledTextEvent*)&obj;
-    o->m_position =      m_position;
-    o->m_key =           m_key;
-    o->m_modifiers =     m_modifiers;
-    o->m_modificationType = m_modificationType;
-    o->m_text =          m_text;
-    o->m_length =        m_length;
-    o->m_linesAdded =    m_linesAdded;
-    o->m_line =          m_line;
-    o->m_foldLevelNow =  m_foldLevelNow;
-    o->m_foldLevelPrev = m_foldLevelPrev;
+wxStyledTextEvent::wxStyledTextEvent(const wxStyledTextEvent& event):
+  wxCommandEvent(event)
+{
+    m_position =      event.m_position;
+    m_key =           event.m_key;
+    m_modifiers =     event.m_modifiers;
+    m_modificationType = event.m_modificationType;
+    m_text =          event.m_text;
+    m_length =        event.m_length;
+    m_linesAdded =    event.m_linesAdded;
+    m_line =          event.m_line;
+    m_foldLevelNow =  event.m_foldLevelNow;
+    m_foldLevelPrev = event.m_foldLevelPrev;
 
 
-    o->m_margin =        m_margin;
+    m_margin =        event.m_margin;
 
 
-    o->m_message =       m_message;
-    o->m_wParam =        m_wParam;
-    o->m_lParam =        m_lParam;
+    m_message =       event.m_message;
+    m_wParam =        event.m_wParam;
+    m_lParam =        event.m_lParam;
 
 
-    o->m_listType =     m_listType;
-    o->m_x =            m_x;
-    o->m_y =            m_y;
+    m_listType =     event.m_listType;
+    m_x =            event.m_x;
+    m_y =            event.m_y;
 
 
+    m_dragText =     event.m_dragText;
+    m_dragAllowMove =event.m_dragAllowMove;
+    m_dragResult =   event.m_dragResult;
 }
 
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 
 }
 
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 
+
+
+
+
+
+
+
+