extern LexerModule lmAVE;
extern LexerModule lmConf;
extern LexerModule lmCPP;
+ extern LexerModule lmNncrontab;
extern LexerModule lmEiffel;
extern LexerModule lmHTML;
extern LexerModule lmLISP;
&& &lmAVE
&& &lmConf
&& &lmCPP
+ && &lmNncrontab
&& &lmEiffel
&& &lmHTML
&& &lmLISP
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)
+ EVT_SCROLL (wxStyledTextCtrl::OnScroll)
EVT_SIZE (wxStyledTextCtrl::OnSize)
EVT_LEFT_DOWN (wxStyledTextCtrl::OnMouseLeftDown)
#ifdef __WXMSW__
#endif
EVT_MOTION (wxStyledTextCtrl::OnMouseMove)
EVT_LEFT_UP (wxStyledTextCtrl::OnMouseLeftUp)
+#ifdef __WXGTK__
+ EVT_RIGHT_UP (wxStyledTextCtrl::OnMouseRightUp)
+#else
EVT_CONTEXT_MENU (wxStyledTextCtrl::OnContextMenu)
+#endif
EVT_MOUSEWHEEL (wxStyledTextCtrl::OnMouseWheel)
EVT_CHAR (wxStyledTextCtrl::OnChar)
EVT_KEY_DOWN (wxStyledTextCtrl::OnKeyDown)
style | wxVSCROLL | wxHSCROLL | wxWANTS_CHARS | wxCLIP_CHILDREN,
wxDefaultValidator, name)
{
+ wxForceScintillaLexers();
m_swx = new ScintillaWX(this);
m_stopWatch.Start();
+ m_lastKeyDownConsumed = FALSE;
+ m_vScrollBar = NULL;
+ m_hScrollBar = NULL;
}
// 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;
wxString wxStyledTextCtrl::GetCurLine(int* linePos) {
wxString text;
int len = LineLength(GetCurrentLine());
- if (!len) return "";
- char* buf = text.GetWriteBuf(len);
-
- int pos = SendMsg(2027, len, (long)buf);
+ if (!len) {
+ if (linePos) *linePos = 0;
+ return "";
+ }
+ // Need an extra byte because SCI_GETCURLINE writes a null to the string
+ char* buf = text.GetWriteBuf(len+1);
+
+ int pos = SendMsg(2027, len+1, (long)buf);
text.UngetWriteBuf(len);
if (linePos) *linePos = pos;
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();
// 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);
// Retrieve all the text in the document.
wxString wxStyledTextCtrl::GetText() {
wxString text;
- int len = GetTextLength()+1;
- char* buff = text.GetWriteBuf(len);
+ int len = GetTextLength();
+ char* buff = text.GetWriteBuf(len+1); // leave room for the null...
- SendMsg(2182, len, (long)buff);
- text.UngetWriteBuf(len-1);
+ SendMsg(2182, len+1, (long)buff);
+ text.UngetWriteBuf(len);
return text;
}
}
// Replace the target text with the argument text.
+// Text is counted so it can contain nulls.
// Returns the length of the replacement text.
int wxStyledTextCtrl::ReplaceTarget(const wxString& text) {
}
// Replace the target text with the argument text after \d processing.
+// Text is counted so it can contain nulls.
// Looks for \d where d is between 1 and 9 and replaces these with the strings
// matched in the last search operation which were surrounded by \( and \).
// Returns the length of the replacement text including any change
}
// Search for a counted string in the target and set the target to the found
-// range.
+// range. Text is counted so it can contain nulls.
// Returns length of range or -1 for failure in which case target is not moved.
int wxStyledTextCtrl::SearchInTarget(const wxString& text) {
}
// Change internal focus flag
-void wxStyledTextCtrl::SetFocus(bool focus) {
+void wxStyledTextCtrl::SetSTCFocus(bool focus) {
SendMsg(2380, focus, 0);
}
// Get internal focus flag
-bool wxStyledTextCtrl::GetFocus() {
+bool wxStyledTextCtrl::GetSTCFocus() {
return SendMsg(2381, 0, 0) != 0;
}
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::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::OnChar(wxKeyEvent& evt) {
long key = evt.KeyCode();
- if ((key > WXK_ESCAPE) &&
- (key != WXK_DELETE) && (key < 255) &&
- !evt.ControlDown() && !evt.AltDown()) {
+// printf("OnChar key:%d consumed:%d ctrl:%d alt:%d\n",
+// key, m_lastKeyDownConsumed, evt.ControlDown(), evt.AltDown());
+
+ // AltGr keys???
+ // \|@#¬[]{}?£$~ ã,õ,Ã,Õ, ñ, Ñ
+
+ // On (some?) non-US keyboards the AltGr key is required to enter some
+ // common characters. It comes to us as both Alt and Ctrl down so we need
+ // to let the char through in that case, otherwise if only ctrl or only
+ // alt let's skip it.
+ bool ctrl = evt.ControlDown();
+ bool alt = evt.AltDown();
+ bool skip = ((ctrl || alt) && ! (ctrl && alt));
+
+ if (key <= 0xff && key >= 32 && !m_lastKeyDownConsumed && !skip) {
m_swx->DoAddChar(key);
+ return;
}
- else {
- evt.Skip();
- }
+ evt.Skip();
}
+
void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
long key = evt.KeyCode();
- //key = toupper(key); //**** ????
- bool consumed = FALSE;
- int processed = m_swx->DoKeyDown(key,
- evt.ShiftDown(),
- evt.ControlDown(),
- evt.AltDown(),
- &consumed);
- if (!processed && !consumed)
+ bool shift = evt.ShiftDown(),
+ ctrl = evt.ControlDown(),
+ alt = evt.AltDown();
+
+ int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed);
+
+// printf("key: %d shift: %d ctrl: %d alt: %d processed: %d consumed: %d\n",
+// key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
+
+ if (!processed && !m_lastKeyDownConsumed)
evt.Skip();
}
+
void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
m_swx->DoLoseFocus();
}
+
void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
m_swx->DoGainFocus();
}
+
void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
m_swx->DoSysColourChange();
}
+
void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
// do nothing to help avoid flashing
}
void wxStyledTextCtrl::NotifyChange() {
wxStyledTextEvent evt(wxEVT_STC_CHANGE, GetId());
+ evt.SetEventObject(this);
GetEventHandler()->ProcessEvent(evt);
}
SCNotification& scn = *_scn;
wxStyledTextEvent evt(0, GetId());
+ evt.SetEventObject(this);
evt.SetPosition(scn.position);
evt.SetKey(scn.ch);
evt.SetModifiers(scn.modifiers);
}
-
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//----------------------------------------------------------------------
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; }
-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;
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
+
+
+
+
+
+
+
+