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)
+#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_MOUSEWHEEL (wxStyledTextCtrl::OnMouseWheel)
EVT_CHAR (wxStyledTextCtrl::OnChar)
EVT_KEY_DOWN (wxStyledTextCtrl::OnKeyDown)
EVT_KILL_FOCUS (wxStyledTextCtrl::OnLoseFocus)
wxString wxStyledTextCtrl::GetStyledText(int startPos, int endPos) {
wxString text;
int len = endPos - startPos;
+ if (!len) return "";
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);
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);
- text.UngetWriteBuf();
+ text.UngetWriteBuf(len);
if (linePos) *linePos = pos;
return text;
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);
- text.UngetWriteBuf();
+ text.UngetWriteBuf(len);
return text;
}
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);
- text.UngetWriteBuf();
+ text.UngetWriteBuf(len);
return text;
}
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);
- text.UngetWriteBuf();
+ text.UngetWriteBuf(len);
return 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);
- buff[len] = 0;
- text.UngetWriteBuf();
+ text.UngetWriteBuf(len-1);
return text;
}
return wxPoint(x, y);
}
-
// Scroll enough to make the given line visible
void wxStyledTextCtrl::ScrollToLine(int line) {
m_swx->DoScrollToLine(line);
}
+
//----------------------------------------------------------------------
// Event handlers
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) &&