]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/stc.cpp
New module definition file for the ever chaning treectrl class interface.
[wxWidgets.git] / src / stc / stc.cpp
index 506493658e4447fe3ec83d3a43ad1fe61d41ed99..6adfd80a8452e4c8a1f78bad4ffa4b0f9ca40ab7 100644 (file)
@@ -66,14 +66,36 @@ int wxForceScintillaLexers(void)
 
 const wxChar* wxSTCNameStr = "stcwindow";
 
 
 const wxChar* wxSTCNameStr = "stcwindow";
 
+
+DEFINE_EVENT_TYPE( wxEVT_STC_CHANGE )
+DEFINE_EVENT_TYPE( wxEVT_STC_STYLENEEDED )
+DEFINE_EVENT_TYPE( wxEVT_STC_CHARADDED )
+DEFINE_EVENT_TYPE( wxEVT_STC_UPDATEUI )
+DEFINE_EVENT_TYPE( wxEVT_STC_SAVEPOINTREACHED )
+DEFINE_EVENT_TYPE( wxEVT_STC_SAVEPOINTLEFT )
+DEFINE_EVENT_TYPE( wxEVT_STC_ROMODIFYATTEMPT )
+DEFINE_EVENT_TYPE( wxEVT_STC_DOUBLECLICK )
+DEFINE_EVENT_TYPE( wxEVT_STC_MODIFIED )
+DEFINE_EVENT_TYPE( wxEVT_STC_KEY )
+DEFINE_EVENT_TYPE( wxEVT_STC_MACRORECORD )
+DEFINE_EVENT_TYPE( wxEVT_STC_MARGINCLICK )
+DEFINE_EVENT_TYPE( wxEVT_STC_NEEDSHOWN )
+DEFINE_EVENT_TYPE( wxEVT_STC_POSCHANGED )
+
+
 BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl)
     EVT_PAINT                   (wxStyledTextCtrl::OnPaint)
     EVT_SCROLLWIN               (wxStyledTextCtrl::OnScrollWin)
     EVT_SIZE                    (wxStyledTextCtrl::OnSize)
     EVT_LEFT_DOWN               (wxStyledTextCtrl::OnMouseLeftDown)
 BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl)
     EVT_PAINT                   (wxStyledTextCtrl::OnPaint)
     EVT_SCROLLWIN               (wxStyledTextCtrl::OnScrollWin)
     EVT_SIZE                    (wxStyledTextCtrl::OnSize)
     EVT_LEFT_DOWN               (wxStyledTextCtrl::OnMouseLeftDown)
+#ifdef __WXMSW__
+    // Let Scintilla see the double click as a second click
+    EVT_LEFT_DCLICK             (wxStyledTextCtrl::OnMouseLeftDown)
+#endif
     EVT_MOTION                  (wxStyledTextCtrl::OnMouseMove)
     EVT_LEFT_UP                 (wxStyledTextCtrl::OnMouseLeftUp)
     EVT_RIGHT_UP                (wxStyledTextCtrl::OnMouseRightUp)
     EVT_MOTION                  (wxStyledTextCtrl::OnMouseMove)
     EVT_LEFT_UP                 (wxStyledTextCtrl::OnMouseLeftUp)
     EVT_RIGHT_UP                (wxStyledTextCtrl::OnMouseRightUp)
+    EVT_MOUSEWHEEL              (wxStyledTextCtrl::OnMouseWheel)
     EVT_CHAR                    (wxStyledTextCtrl::OnChar)
     EVT_KEY_DOWN                (wxStyledTextCtrl::OnKeyDown)
     EVT_KILL_FOCUS              (wxStyledTextCtrl::OnLoseFocus)
     EVT_CHAR                    (wxStyledTextCtrl::OnChar)
     EVT_KEY_DOWN                (wxStyledTextCtrl::OnKeyDown)
     EVT_KILL_FOCUS              (wxStyledTextCtrl::OnLoseFocus)
@@ -98,7 +120,7 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
                                    long style,
                                    const wxString& name) :
     wxControl(parent, id, pos, size,
                                    long style,
                                    const wxString& name) :
     wxControl(parent, id, pos, size,
-              style | wxVSCROLL | wxHSCROLL | wxWANTS_CHARS,
+              style | wxVSCROLL | wxHSCROLL | wxWANTS_CHARS | wxCLIP_CHILDREN,
               wxDefaultValidator, name)
 {
     m_swx = new ScintillaWX(this);
               wxDefaultValidator, name)
 {
     m_swx = new ScintillaWX(this);
@@ -119,6 +141,10 @@ long wxStyledTextCtrl::SendMsg(int msg, long wp, long lp) {
 }
 
 
 }
 
 
+#ifdef MAKELONG
+#undef MAKELONG
+#endif
+
 #define MAKELONG(a, b) ((a) | ((b) << 16))
 
 
 #define MAKELONG(a, b) ((a) | ((b) << 16))
 
 
@@ -227,8 +253,9 @@ void wxStyledTextCtrl::SetSavePoint() {
 wxString wxStyledTextCtrl::GetStyledText(int startPos, int endPos) {
                           wxString text;
                           int len = endPos - startPos;
 wxString wxStyledTextCtrl::GetStyledText(int startPos, int endPos) {
                           wxString text;
                           int len = endPos - startPos;
+                          if (!len) return "";
                           TextRange tr;
                           TextRange tr;
-                          tr.lpstrText = text.GetWriteBuf(len*2+1);
+                          tr.lpstrText = text.GetWriteBuf(len*2);
                           tr.chrg.cpMin = startPos;
                           tr.chrg.cpMax = endPos;
                           SendMsg(2015, 0, (long)&tr);
                           tr.chrg.cpMin = startPos;
                           tr.chrg.cpMax = endPos;
                           SendMsg(2015, 0, (long)&tr);
@@ -293,10 +320,11 @@ void wxStyledTextCtrl::SetAnchor(int posAnchor) {
 wxString wxStyledTextCtrl::GetCurLine(int* linePos) {
                        wxString text;
                        int len = LineLength(GetCurrentLine());
 wxString wxStyledTextCtrl::GetCurLine(int* linePos) {
                        wxString text;
                        int len = LineLength(GetCurrentLine());
-                       char* buf = text.GetWriteBuf(len+1);
+                       if (!len) return "";
+                       char* buf = text.GetWriteBuf(len);
 
                        int pos = SendMsg(2027, len, (long)buf);
 
                        int pos = SendMsg(2027, len, (long)buf);
-                       text.UngetWriteBuf();
+                       text.UngetWriteBuf(len);
                        if (linePos)  *linePos = pos;
 
                        return text;
                        if (linePos)  *linePos = pos;
 
                        return text;
@@ -895,10 +923,11 @@ int wxStyledTextCtrl::GetFirstVisibleLine() {
 wxString wxStyledTextCtrl::GetLine(int line) {
                        wxString text;
                        int len = LineLength(line);
 wxString wxStyledTextCtrl::GetLine(int line) {
                        wxString text;
                        int len = LineLength(line);
-                       char* buf = text.GetWriteBuf(len+1);
+                       if (!len) return "";
+                       char* buf = text.GetWriteBuf(len);
 
                        int pos = SendMsg(2153, line, (long)buf);
 
                        int pos = SendMsg(2153, line, (long)buf);
-                       text.UngetWriteBuf();
+                       text.UngetWriteBuf(len);
 
                        return text;
 }
 
                        return text;
 }
@@ -946,10 +975,11 @@ wxString wxStyledTextCtrl::GetSelectedText() {
 
                             GetSelection(&start, &end);
                             int   len  = end - start;
 
                             GetSelection(&start, &end);
                             int   len  = end - start;
-                            char* buff = text.GetWriteBuf(len+1);
+                            if (!len) return "";
+                            char* buff = text.GetWriteBuf(len);
 
                             SendMsg(2161, 0, (long)buff);
 
                             SendMsg(2161, 0, (long)buff);
-                            text.UngetWriteBuf();
+                            text.UngetWriteBuf(len);
                             return text;
 }
 
                             return text;
 }
 
@@ -957,14 +987,15 @@ wxString wxStyledTextCtrl::GetSelectedText() {
 wxString wxStyledTextCtrl::GetTextRange(int startPos, int endPos) {
                             wxString text;
                             int   len  = endPos - startPos;
 wxString wxStyledTextCtrl::GetTextRange(int startPos, int endPos) {
                             wxString text;
                             int   len  = endPos - startPos;
-                            char* buff = text.GetWriteBuf(len+1);
+                            if (!len) return "";
+                            char* buff = text.GetWriteBuf(len);
                             TextRange tr;
                             tr.lpstrText = buff;
                             tr.chrg.cpMin = startPos;
                             tr.chrg.cpMax = endPos;
 
                             SendMsg(2162, 0, (long)&tr);
                             TextRange tr;
                             tr.lpstrText = buff;
                             tr.chrg.cpMin = startPos;
                             tr.chrg.cpMax = endPos;
 
                             SendMsg(2162, 0, (long)&tr);
-                            text.UngetWriteBuf();
+                            text.UngetWriteBuf(len);
                             return text;
 }
 
                             return text;
 }
 
@@ -1051,12 +1082,11 @@ void wxStyledTextCtrl::SetText(const wxString& text) {
 // Retrieve all the text in the document.
 wxString wxStyledTextCtrl::GetText() {
                         wxString text;
 // Retrieve all the text in the document.
 wxString wxStyledTextCtrl::GetText() {
                         wxString text;
-                        int   len  = GetTextLength();
-                        char* buff = text.GetWriteBuf(len+1);
+                        int   len  = GetTextLength()+1;
+                        char* buff = text.GetWriteBuf(len);
 
                         SendMsg(2182, len, (long)buff);
 
                         SendMsg(2182, len, (long)buff);
-                        buff[len] = 0;
-                        text.UngetWriteBuf();
+                        text.UngetWriteBuf(len-1);
                         return text;
 }
 
                         return text;
 }
 
@@ -1477,6 +1507,17 @@ wxPoint wxStyledTextCtrl::PointFromPosition(int pos) {
     return wxPoint(x, y);
 }
 
     return wxPoint(x, y);
 }
 
+// Scroll enough to make the given line visible
+void wxStyledTextCtrl::ScrollToLine(int line) {
+    m_swx->DoScrollToLine(line);
+}
+
+
+// Scroll enough to make the given column visible
+void wxStyledTextCtrl::ScrollToColumn(int column) {
+    m_swx->DoScrollToColumn(column);
+}
+
 
 
 //----------------------------------------------------------------------
 
 
 //----------------------------------------------------------------------
@@ -1524,6 +1565,14 @@ void wxStyledTextCtrl::OnMouseRightUp(wxMouseEvent& evt) {
     m_swx->DoContextMenu(Point(pt.x, pt.y));
 }
 
     m_swx->DoContextMenu(Point(pt.x, pt.y));
 }
 
+
+void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) {
+    m_swx->DoMouseWheel(evt.GetWheelRotation(),
+                        evt.GetWheelDelta(),
+                        evt.GetLinesPerAction());
+}
+
+
 void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
     long key = evt.KeyCode();
     if ((key > WXK_ESCAPE) &&
 void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) {
     long key = evt.KeyCode();
     if ((key > WXK_ESCAPE) &&