X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/65ec6247df6af7b6489257b1ac04ca2242dc14ec..c6ac78a61edd08ccfd0f1e5b37ee48ceb7bfa474:/src/stc/stc.cpp diff --git a/src/stc/stc.cpp b/src/stc/stc.cpp index 944df02c53..f56024c0ca 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,8 +93,11 @@ DEFINE_EVENT_TYPE( wxEVT_STC_USERLISTSELECTION ) DEFINE_EVENT_TYPE( wxEVT_STC_URIDROPPED ) DEFINE_EVENT_TYPE( wxEVT_STC_DWELLSTART ) DEFINE_EVENT_TYPE( wxEVT_STC_DWELLEND ) - - +#if wxUSE_DRAG_AND_DROP +DEFINE_EVENT_TYPE( wxEVT_STC_START_DRAG ) +DEFINE_EVENT_TYPE( wxEVT_STC_DRAG_OVER ) +DEFINE_EVENT_TYPE( wxEVT_STC_DO_DROP ) +#endif BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl) @@ -137,6 +142,7 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent, { m_swx = new ScintillaWX(this); m_stopWatch.Start(); + m_lastKeyDownConsumed = FALSE; } @@ -338,10 +344,14 @@ void wxStyledTextCtrl::SetAnchor(int posAnchor) { 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; @@ -1141,11 +1151,11 @@ void wxStyledTextCtrl::SetText(const wxString& text) { // 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; } @@ -1197,6 +1207,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) { @@ -1205,6 +1216,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 @@ -1216,7 +1228,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) { @@ -1526,12 +1538,12 @@ int wxStyledTextCtrl::GetModEventMask() { } // 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; } @@ -1829,42 +1841,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 && !iscntrl(key) && !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 } @@ -1887,6 +1917,7 @@ void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) { void wxStyledTextCtrl::NotifyChange() { wxStyledTextEvent evt(wxEVT_STC_CHANGE, GetId()); + evt.SetEventObject(this); GetEventHandler()->ProcessEvent(evt); } @@ -1894,6 +1925,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); @@ -1999,7 +2031,6 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) { } - //---------------------------------------------------------------------- //---------------------------------------------------------------------- //---------------------------------------------------------------------- @@ -2023,6 +2054,10 @@ wxStyledTextEvent::wxStyledTextEvent(wxEventType commandType, int id) m_listType = 0; m_x = 0; m_y = 0; +#if wxUSE_DRAG_AND_DROP + m_dragAllowMove = FALSE; + m_dragResult = wxDragNone; +#endif } bool wxStyledTextEvent::GetShift() const { return (m_modifiers & SCI_SHIFT) != 0; } @@ -2054,8 +2089,16 @@ void wxStyledTextEvent::CopyObject(wxObject& obj) const { o->m_x = m_x; o->m_y = m_y; +#if wxUSE_DRAG_AND_DROP + o->m_dragText = m_dragText; + o->m_dragAllowMove =m_dragAllowMove; + o->m_dragResult = m_dragResult; +#endif } //---------------------------------------------------------------------- //---------------------------------------------------------------------- + + +