X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/be5a51fb592f3fa2ba38ac6cd1e488d6d806058c..6c783b03a0e0953d98a444de69dcdc598fce1ed5:/src/stc/ScintillaWX.cpp diff --git a/src/stc/ScintillaWX.cpp b/src/stc/ScintillaWX.cpp index 6fd051521e..05709cb689 100644 --- a/src/stc/ScintillaWX.cpp +++ b/src/stc/ScintillaWX.cpp @@ -67,21 +67,29 @@ void wxSTCDropTarget::OnLeave() { #define param2 -1 // wxWindow's 2nd param is ID #endif +#include + class wxSTCCallTip : public wxSTCCallTipBase { public: wxSTCCallTip(wxWindow* parent, CallTip* ct, ScintillaWX* swx) : wxSTCCallTipBase(parent, param2), - m_ct(ct), m_swx(swx) + m_ct(ct), m_swx(swx), m_cx(wxDefaultCoord), m_cy(wxDefaultCoord) { } ~wxSTCCallTip() { +#if wxUSE_POPUPWIN && wxSTC_USE_POPUP && defined(__WXGTK__) + wxRect rect = GetRect(); + rect.x = m_cx; + rect.y = m_cy; + GetParent()->Refresh(false, &rect); +#endif } - bool AcceptsFocus() const { return FALSE; } + bool AcceptsFocus() const { return false; } void OnPaint(wxPaintEvent& WXUNUSED(evt)) { - wxPaintDC dc(this); + wxBufferedPaintDC dc(this); Surface* surfaceWindow = Surface::Allocate(); surfaceWindow->Init(&dc, m_ct->wDraw.GetID()); m_ct->PaintCT(surfaceWindow); @@ -105,17 +113,26 @@ public: virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO) { - if (x != -1) + if (x != wxDefaultCoord) { + m_cx = x; GetParent()->ClientToScreen(&x, NULL); - if (y != -1) + } + if (y != wxDefaultCoord) { + m_cy = y; GetParent()->ClientToScreen(NULL, &y); + } wxSTCCallTipBase::DoSetSize(x, y, width, height, sizeFlags); } #endif + wxPoint GetMyPosition() { + return wxPoint(m_cx, m_cy); + } + private: CallTip* m_ct; ScintillaWX* m_swx; + int m_cx, m_cy; DECLARE_EVENT_TABLE() }; @@ -126,6 +143,33 @@ BEGIN_EVENT_TABLE(wxSTCCallTip, wxSTCCallTipBase) END_EVENT_TABLE() +//---------------------------------------------------------------------- + +static wxTextFileType wxConvertEOLMode(int scintillaMode) +{ + wxTextFileType type; + + switch (scintillaMode) { + case wxSTC_EOL_CRLF: + type = wxTextFileType_Dos; + break; + + case wxSTC_EOL_CR: + type = wxTextFileType_Mac; + break; + + case wxSTC_EOL_LF: + type = wxTextFileType_Unix; + break; + + default: + type = wxTextBuffer::typeDefault; + break; + } + return type; +} + + //---------------------------------------------------------------------- // Constructor/Destructor @@ -178,7 +222,7 @@ void ScintillaWX::StartDrag() { wxStyledTextEvent evt(wxEVT_STC_START_DRAG, stc->GetId()); evt.SetEventObject(stc); evt.SetDragText(dragText); - evt.SetDragAllowMove(TRUE); + evt.SetDragAllowMove(true); evt.SetPosition(wxMin(stc->GetSelectionStart(), stc->GetSelectionEnd())); stc->GetEventHandler()->ProcessEvent(evt); @@ -190,11 +234,11 @@ void ScintillaWX::StartDrag() { wxDragResult result; source.SetData(data); - dropWentOutside = TRUE; + dropWentOutside = true; result = source.DoDragDrop(evt.GetDragAllowMove()); if (result == wxDragMove && dropWentOutside) ClearSelection(); - inDragDrop = FALSE; + inDragDrop = false; SetDragPosition(invalidPosition); } #endif @@ -204,18 +248,18 @@ void ScintillaWX::StartDrag() { bool ScintillaWX::SetIdle(bool on) { if (idler.state != on) { // connect or disconnect the EVT_IDLE handler - if (on) - stc->Connect(-1, wxEVT_IDLE, + if (on) + stc->Connect(wxID_ANY, wxEVT_IDLE, (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxStyledTextCtrl::OnIdle); else - stc->Disconnect(-1, wxEVT_IDLE, + stc->Disconnect(wxID_ANY, wxEVT_IDLE, (wxObjectEventFunction) (wxEventFunction) (wxIdleEventFunction) &wxStyledTextCtrl::OnIdle); idler.state = on; } return idler.state; } - + void ScintillaWX::SetTicking(bool on) { wxSTCTimer* steTimer; if (timer.ticking != on) { @@ -381,15 +425,17 @@ void ScintillaWX::Paste() { ClearSelection(); wxTextDataObject data; - bool gotData = FALSE; + bool gotData = false; if (wxTheClipboard->Open()) { - wxTheClipboard->UsePrimarySelection(FALSE); + wxTheClipboard->UsePrimarySelection(false); gotData = wxTheClipboard->GetData(data); wxTheClipboard->Close(); } if (gotData) { - wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(data.GetText()); + wxString text = wxTextBuffer::Translate(data.GetText(), + wxConvertEOLMode(pdoc->eolMode)); + wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); int len = strlen(buf); pdoc->InsertString(currentPos, buf, len); SetEmptySelection(currentPos + len); @@ -403,7 +449,7 @@ void ScintillaWX::Paste() { void ScintillaWX::CopyToClipboard(const SelectionText& st) { if (wxTheClipboard->Open()) { - wxTheClipboard->UsePrimarySelection(FALSE); + wxTheClipboard->UsePrimarySelection(false); wxString text = wxTextBuffer::Translate(stc2wx(st.s, st.len)); wxTheClipboard->SetData(new wxTextDataObject(text)); wxTheClipboard->Close(); @@ -412,7 +458,7 @@ void ScintillaWX::CopyToClipboard(const SelectionText& st) { bool ScintillaWX::CanPaste() { - bool canPaste = FALSE; + bool canPaste = false; bool didOpen; if (Editor::CanPaste()) { @@ -421,7 +467,7 @@ bool ScintillaWX::CanPaste() { wxTheClipboard->Open(); if (wxTheClipboard->IsOpened()) { - wxTheClipboard->UsePrimarySelection(FALSE); + wxTheClipboard->UsePrimarySelection(false); canPaste = wxTheClipboard->IsSupported(wxUSE_UNICODE ? wxDF_UNICODETEXT : wxDF_TEXT); if (didOpen) wxTheClipboard->Close(); @@ -462,10 +508,10 @@ void ScintillaWX::ClaimSelection() { SelectionText st; CopySelectionRange(&st); if (wxTheClipboard->Open()) { - wxTheClipboard->UsePrimarySelection(TRUE); + wxTheClipboard->UsePrimarySelection(true); wxString text = stc2wx(st.s, st.len); wxTheClipboard->SetData(new wxTextDataObject(text)); - wxTheClipboard->UsePrimarySelection(FALSE); + wxTheClipboard->UsePrimarySelection(false); wxTheClipboard->Close(); } } @@ -515,7 +561,7 @@ long ScintillaWX::WndProc(unsigned int iMessage, unsigned long wParam, long lPar } #ifdef SCI_LEXER - case SCI_LOADLEXERLIBRARY: + case SCI_LOADLEXERLIBRARY: LexerManager::GetInstance()->Load((const char*)lParam); break; #endif @@ -633,9 +679,6 @@ void ScintillaWX::DoMouseWheel(int rotation, int delta, void ScintillaWX::DoSize(int WXUNUSED(width), int WXUNUSED(height)) { -// PRectangle rcClient(0,0,width,height); -// SetScrollBarsTo(rcClient); -// DropGraphics(); ChangeSize(); } @@ -676,15 +719,17 @@ void ScintillaWX::DoMiddleButtonUp(Point pt) { pdoc->BeginUndoAction(); wxTextDataObject data; - bool gotData = FALSE; + bool gotData = false; if (wxTheClipboard->Open()) { - wxTheClipboard->UsePrimarySelection(TRUE); + wxTheClipboard->UsePrimarySelection(true); gotData = wxTheClipboard->GetData(data); - wxTheClipboard->UsePrimarySelection(FALSE); + wxTheClipboard->UsePrimarySelection(false); wxTheClipboard->Close(); } if (gotData) { - wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(data.GetText()); + wxString text = wxTextBuffer::Translate(data.GetText(), + wxConvertEOLMode(pdoc->eolMode)); + wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(text); int len = strlen(buf); pdoc->InsertString(currentPos, buf, len); SetEmptySelection(currentPos + len); @@ -705,12 +750,12 @@ void ScintillaWX::DoMiddleButtonUp(Point WXUNUSED(pt)) { void ScintillaWX::DoAddChar(int key) { #if wxUSE_UNICODE wxChar wszChars[2]; - wszChars[0] = key; + wszChars[0] = (wxChar)key; wszChars[1] = 0; wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(wszChars); AddCharUTF((char*)buf.data(), strlen(buf)); #else - AddChar(key); + AddChar((char)key); #endif } @@ -771,7 +816,7 @@ int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool WXUNU } } #endif - + int rv = KeyDown(key, shift, ctrl, alt, consumed); if (key) @@ -795,7 +840,7 @@ void ScintillaWX::DoOnListBox() { AutoCompleteCompleted(); } - + void ScintillaWX::DoOnIdle(wxIdleEvent& evt) { if ( Idle() ) @@ -803,13 +848,16 @@ void ScintillaWX::DoOnIdle(wxIdleEvent& evt) { else SetIdle(false); } - + //---------------------------------------------------------------------- #if wxUSE_DRAG_AND_DROP bool ScintillaWX::DoDropText(long x, long y, const wxString& data) { SetDragPosition(invalidPosition); + wxString text = wxTextBuffer::Translate(data, + wxConvertEOLMode(pdoc->eolMode)); + // Send an event to allow the drag details to be changed wxStyledTextEvent evt(wxEVT_STC_DO_DROP, stc->GetId()); evt.SetEventObject(stc); @@ -817,7 +865,7 @@ bool ScintillaWX::DoDropText(long x, long y, const wxString& data) { evt.SetX(x); evt.SetY(y); evt.SetPosition(PositionFromLocation(Point(x,y))); - evt.SetDragText(data); + evt.SetDragText(text); stc->GetEventHandler()->ProcessEvent(evt); dragResult = evt.GetDragResult(); @@ -825,10 +873,10 @@ bool ScintillaWX::DoDropText(long x, long y, const wxString& data) { DropAt(evt.GetPosition(), wx2stc(evt.GetDragText()), dragResult == wxDragMove, - FALSE); // TODO: rectangular? - return TRUE; + false); // TODO: rectangular? + return true; } - return FALSE; + return false; } @@ -885,7 +933,11 @@ void ScintillaWX::ClipChildren(wxDC& dc, PRectangle rect) { rgn.Subtract(childRect); } if (ct.inCallTipMode) { - wxRect childRect = ((wxWindow*)ct.wCallTip.GetID())->GetRect(); + wxSTCCallTip* tip = (wxSTCCallTip*)ct.wCallTip.GetID(); + wxRect childRect = tip->GetRect(); +#if wxUSE_POPUPWIN && wxSTC_USE_POPUP + childRect.SetPosition(tip->GetMyPosition()); +#endif rgn.Subtract(childRect); } @@ -905,6 +957,6 @@ void ScintillaWX::SetUseAntiAliasing(bool useAA) { bool ScintillaWX::GetUseAntiAliasing() { return vs.extraFontFlag; } - + //---------------------------------------------------------------------- //----------------------------------------------------------------------