X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8de28db94f9d03acfcbbbac841c26a2c40223618..16e8bf31bb4ba1f6374ea86f1ef1dcb1872fda69:/src/stc/stc.cpp diff --git a/src/stc/stc.cpp b/src/stc/stc.cpp index ba9cf82838..520ebd5cb9 100644 --- a/src/stc/stc.cpp +++ b/src/stc/stc.cpp @@ -32,6 +32,7 @@ int wxForceScintillaLexers(void) extern LexerModule lmAVE; extern LexerModule lmConf; extern LexerModule lmCPP; + extern LexerModule lmNncrontab; extern LexerModule lmEiffel; extern LexerModule lmHTML; extern LexerModule lmLISP; @@ -48,6 +49,7 @@ int wxForceScintillaLexers(void) && &lmAVE && &lmConf && &lmCPP + && &lmNncrontab && &lmEiffel && &lmHTML && &lmLISP @@ -91,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_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__ @@ -106,7 +110,11 @@ BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl) #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) @@ -135,8 +143,12 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent, 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; } @@ -264,6 +276,11 @@ void wxStyledTextCtrl::SetSavePoint() { // 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; @@ -961,6 +978,11 @@ int wxStyledTextCtrl::FindText(int minPos, int maxPos, 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(); @@ -1049,6 +1071,11 @@ wxString wxStyledTextCtrl::GetSelectedText() { // 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); @@ -1201,6 +1228,7 @@ int wxStyledTextCtrl::GetTargetEnd() { } // 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) { @@ -1209,6 +1237,7 @@ int wxStyledTextCtrl::GetTargetEnd() { } // 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 @@ -1220,7 +1249,7 @@ int wxStyledTextCtrl::GetTargetEnd() { } // 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) { @@ -1793,6 +1822,16 @@ void wxStyledTextCtrl::OnScrollWin(wxScrollWinEvent& evt) { 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); @@ -1816,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); @@ -1833,42 +1878,60 @@ void wxStyledTextCtrl::OnMouseWheel(wxMouseEvent& evt) { 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 } @@ -1891,6 +1954,7 @@ void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) { void wxStyledTextCtrl::NotifyChange() { wxStyledTextEvent evt(wxEVT_STC_CHANGE, GetId()); + evt.SetEventObject(this); GetEventHandler()->ProcessEvent(evt); } @@ -1898,6 +1962,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); @@ -2003,7 +2068,6 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) { } - //---------------------------------------------------------------------- //---------------------------------------------------------------------- //---------------------------------------------------------------------- @@ -2027,39 +2091,52 @@ 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; } 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; } //---------------------------------------------------------------------- //---------------------------------------------------------------------- + + + + + + + +