]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/ScintillaWX.cpp
fixed MSLU check
[wxWidgets.git] / src / stc / ScintillaWX.cpp
index 1effa1fe99d8ba60ffe677b52ad69f3cff1690ae..1b65391a5923369da8ce3a3bfba2dd48d2d32a6d 100644 (file)
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
-#include <ctype.h>
 
 #include "ScintillaWX.h"
 #include "wx/stc/stc.h"
+#include "PlatWX.h"
 
 
 //----------------------------------------------------------------------
 
-const int H_SCROLL_MAX  = 2000;
+const int H_SCROLL_MAX  = 4000;
 const int H_SCROLL_STEP = 20;
 const int H_SCROLL_PAGE = 200;
 
@@ -63,30 +63,53 @@ void  wxSTCDropTarget::OnLeave() {
 #endif
 
 
-class wxSTCCallTip : public wxWindow {
+#if wxUSE_POPUPWIN
+#include <wx/popupwin.h>
+#define wxSTCCallTipBase wxPopupWindow
+#define param2  wxBORDER_NONE  // popup's 2nd param is flags
+#else
+#define wxSTCCallTipBase wxWindow
+#define param2 -1 // wxWindows 2nd param is ID
+#endif
+
+class wxSTCCallTip : public wxSTCCallTipBase {
 public:
-    wxSTCCallTip(wxWindow* parent, int ID, CallTip* ct)
-        : wxWindow(parent, ID)
+    wxSTCCallTip(wxWindow* parent, CallTip* ct)
+        : wxSTCCallTipBase(parent, param2)
         {
             m_ct = ct;
         }
 
     void OnPaint(wxPaintEvent& evt) {
         wxPaintDC dc(this);
-        Surface surfaceWindow;
-        surfaceWindow.Init(&dc);
-        m_ct->PaintCT(&surfaceWindow);
-        surfaceWindow.Release();
+        Surface* surfaceWindow = Surface::Allocate();
+        surfaceWindow->Init(&dc);
+        m_ct->PaintCT(surfaceWindow);
+        delete surfaceWindow;
     }
 
+#if wxUSE_POPUPWIN
+    virtual void DoSetSize(int x, int y,
+                           int width, int height,
+                           int sizeFlags = wxSIZE_AUTO) {
+        if (x != -1)
+            GetParent()->ClientToScreen(&x, NULL);
+        if (y != -1)
+            GetParent()->ClientToScreen(NULL, &y);
+        wxSTCCallTipBase::DoSetSize(x, y, width, height, sizeFlags);
+    }
+#endif
+
+private:
     CallTip*    m_ct;
     DECLARE_EVENT_TABLE()
 };
 
-BEGIN_EVENT_TABLE(wxSTCCallTip, wxWindow)
+BEGIN_EVENT_TABLE(wxSTCCallTip, wxSTCCallTipBase)
     EVT_PAINT(wxSTCCallTip::OnPaint)
 END_EVENT_TABLE()
 
+
 //----------------------------------------------------------------------
 // Constructor/Destructor
 
@@ -138,7 +161,7 @@ void ScintillaWX::StartDrag() {
     dragText = evt.GetDragText();
 
     if (dragText.Length()) {
-        wxDropSource        source(wMain.GetID());
+        wxDropSource        source(stc);
         wxTextDataObject    data(dragText);
         wxDragResult        result;
 
@@ -161,7 +184,7 @@ void ScintillaWX::SetTicking(bool on) {
         if (timer.ticking) {
             steTimer = new wxSTCTimer(this);
             steTimer->Start(timer.tickSize);
-            timer.tickerID = (int)steTimer;
+            timer.tickerID = steTimer;
         } else {
             steTimer = (wxSTCTimer*)timer.tickerID;
             steTimer->Stop();
@@ -175,9 +198,9 @@ void ScintillaWX::SetTicking(bool on) {
 
 void ScintillaWX::SetMouseCapture(bool on) {
     if (on && !capturedMouse)
-        wMain.GetID()->CaptureMouse();
+        stc->CaptureMouse();
     else if (!on && capturedMouse)
-        wMain.GetID()->ReleaseMouse();
+        stc->ReleaseMouse();
     capturedMouse = on;
 }
 
@@ -189,36 +212,69 @@ bool ScintillaWX::HaveMouseCapture() {
 
 void ScintillaWX::ScrollText(int linesToMove) {
     int dy = vs.lineHeight * (linesToMove);
-    wMain.GetID()->ScrollWindow(0, dy);
-    wMain.GetID()->Update();
+    stc->ScrollWindow(0, dy);
+    stc->Update();
 }
 
 void ScintillaWX::SetVerticalScrollPos() {
-    wMain.GetID()->SetScrollPos(wxVERTICAL, topLine);
+    if (stc->m_vScrollBar == NULL) {  // Use built-in scrollbar
+        stc->SetScrollPos(wxVERTICAL, topLine);
+    }
+    else { // otherwise use the one that's been given to us
+        stc->m_vScrollBar->SetThumbPosition(topLine);
+    }
 }
 
 void ScintillaWX::SetHorizontalScrollPos() {
-    wMain.GetID()->SetScrollPos(wxHORIZONTAL, xOffset);
+    if (stc->m_hScrollBar == NULL) {  // Use built-in scrollbar
+        stc->SetScrollPos(wxHORIZONTAL, xOffset);
+    }
+    else { // otherwise use the one that's been given to us
+        stc->m_hScrollBar->SetThumbPosition(xOffset);
+    }
 }
 
 
 bool ScintillaWX::ModifyScrollBars(int nMax, int nPage) {
     bool modified = false;
-    int  sbMax    = wMain.GetID()->GetScrollRange(wxVERTICAL);
-    int  sbThumb  = wMain.GetID()->GetScrollThumb(wxVERTICAL);
-    int  sbPos    = wMain.GetID()->GetScrollPos(wxVERTICAL);
-
 
-    if (sbMax != nMax || sbThumb != nPage) {
-        wMain.GetID()->SetScrollbar(wxVERTICAL, sbPos, nPage, nMax);
-        modified = true;
+    if (stc->m_vScrollBar == NULL) {  // Use built-in scrollbar
+        int  sbMax    = stc->GetScrollRange(wxVERTICAL);
+        int  sbThumb  = stc->GetScrollThumb(wxVERTICAL);
+        int  sbPos    = stc->GetScrollPos(wxVERTICAL);
+        if (sbMax != nMax || sbThumb != nPage) {
+            stc->SetScrollbar(wxVERTICAL, sbPos, nPage, nMax);
+            modified = true;
+        }
     }
+    else { // otherwise use the one that's been given to us
+        int  sbMax    = stc->m_vScrollBar->GetRange();
+        int  sbPage   = stc->m_vScrollBar->GetPageSize();
+        int  sbPos    = stc->m_vScrollBar->GetThumbPosition();
+        if (sbMax != nMax || sbPage != nPage) {
+            stc->m_vScrollBar->SetScrollbar(sbPos, nPage, nMax, nPage);
+            modified = true;
+        }
+    }
+
 
-    sbMax    = wMain.GetID()->GetScrollRange(wxHORIZONTAL);
-    sbThumb  = wMain.GetID()->GetScrollThumb(wxHORIZONTAL);
-    if ((sbMax != H_SCROLL_MAX) || (sbThumb != H_SCROLL_STEP)) {
-        wMain.GetID()->SetScrollbar(wxHORIZONTAL, 0, H_SCROLL_STEP, H_SCROLL_MAX);
-        modified = true;
+    if (horizontalScrollBarVisible) {
+        if (stc->m_hScrollBar == NULL) {  // Use built-in scrollbar
+            int sbMax    = stc->GetScrollRange(wxHORIZONTAL);
+            int sbThumb  = stc->GetScrollThumb(wxHORIZONTAL);
+            if ((sbMax != H_SCROLL_MAX) || (sbThumb != H_SCROLL_STEP)) {
+                stc->SetScrollbar(wxHORIZONTAL, 0, H_SCROLL_STEP, H_SCROLL_MAX);
+                modified = true;
+            }
+        }
+        else { // otherwise use the one that's been given to us
+            int  sbMax    = stc->m_hScrollBar->GetRange();
+            int  sbPage   = stc->m_hScrollBar->GetPageSize();
+            if ((sbMax != H_SCROLL_MAX) || (sbPage != H_SCROLL_STEP)) {
+                stc->m_hScrollBar->SetScrollbar(0, H_SCROLL_STEP, H_SCROLL_MAX, H_SCROLL_STEP);
+                modified = true;
+            }
+        }
     }
     return modified;
 }
@@ -280,19 +336,19 @@ bool ScintillaWX::CanPaste() {
 }
 
 void ScintillaWX::CreateCallTipWindow(PRectangle) {
-    ct.wCallTip = new wxSTCCallTip(wMain.GetID(), -1, &ct);
+    ct.wCallTip = new wxSTCCallTip(stc, &ct);
     ct.wDraw = ct.wCallTip;
 }
 
 
 void ScintillaWX::AddToPopUp(const char *label, int cmd, bool enabled) {
     if (!label[0])
-        popup.GetID()->AppendSeparator();
+        ((wxMenu*)popup.GetID())->AppendSeparator();
     else
-        popup.GetID()->Append(cmd, label);
+        ((wxMenu*)popup.GetID())->Append(cmd, label);
 
     if (!enabled)
-        popup.GetID()->Enable(cmd, enabled);
+        ((wxMenu*)popup.GetID())->Enable(cmd, enabled);
 }
 
 
@@ -323,13 +379,13 @@ long ScintillaWX::WndProc(unsigned int iMessage, unsigned long wParam, long lPar
 void ScintillaWX::DoPaint(wxDC* dc, wxRect rect) {
 
     paintState = painting;
-    Surface surfaceWindow;
-    surfaceWindow.Init(dc);
+    Surface* surfaceWindow = Surface::Allocate();
+    surfaceWindow->Init(dc);
     PRectangle rcPaint = PRectangleFromwxRect(rect);
     dc->BeginDrawing();
-    Paint(&surfaceWindow, rcPaint);
+    Paint(surfaceWindow, rcPaint);
     dc->EndDrawing();
-    surfaceWindow.Release();
+    delete surfaceWindow;
     if (paintState == paintAbandoned) {
         // Painting area was insufficient to cover new styling or brace highlight positions
         FullPaint();
@@ -345,19 +401,19 @@ void ScintillaWX::DoPaint(wxDC* dc, wxRect rect) {
 
 void ScintillaWX::DoHScroll(int type, int pos) {
     int xPos = xOffset;
-    if (type == wxEVT_SCROLLWIN_LINEUP)
+    if (type == wxEVT_SCROLLWIN_LINEUP || type == wxEVT_SCROLL_LINEUP)
         xPos -= H_SCROLL_STEP;
-    else if (type == wxEVT_SCROLLWIN_LINEDOWN)
+    else if (type == wxEVT_SCROLLWIN_LINEDOWN || type == wxEVT_SCROLL_LINEDOWN)
         xPos += H_SCROLL_STEP;
-    else if (type == wxEVT_SCROLLWIN_PAGEUP)
+    else if (type == wxEVT_SCROLLWIN_PAGEUP || type == wxEVT_SCROLL_PAGEUP)
         xPos -= H_SCROLL_PAGE;
-    else if (type == wxEVT_SCROLLWIN_PAGEDOWN)
+    else if (type == wxEVT_SCROLLWIN_PAGEDOWN || type == wxEVT_SCROLL_PAGEDOWN)
         xPos += H_SCROLL_PAGE;
-    else if (type == wxEVT_SCROLLWIN_TOP)
+    else if (type == wxEVT_SCROLLWIN_TOP || type == wxEVT_SCROLL_TOP)
         xPos = 0;
-    else if (type == wxEVT_SCROLLWIN_BOTTOM)
+    else if (type == wxEVT_SCROLLWIN_BOTTOM || type == wxEVT_SCROLL_BOTTOM)
         xPos = H_SCROLL_MAX;
-    else if (type == wxEVT_SCROLLWIN_THUMBTRACK)
+    else if (type == wxEVT_SCROLLWIN_THUMBTRACK || type == wxEVT_SCROLL_THUMBTRACK)
         xPos = pos;
 
     HorizontalScrollTo(xPos);
@@ -365,19 +421,19 @@ void ScintillaWX::DoHScroll(int type, int pos) {
 
 void ScintillaWX::DoVScroll(int type, int pos) {
     int topLineNew = topLine;
-    if (type == wxEVT_SCROLLWIN_LINEUP)
+    if (type == wxEVT_SCROLLWIN_LINEUP || type == wxEVT_SCROLL_LINEUP)
         topLineNew -= 1;
-    else if (type == wxEVT_SCROLLWIN_LINEDOWN)
+    else if (type == wxEVT_SCROLLWIN_LINEDOWN || type == wxEVT_SCROLL_LINEDOWN)
         topLineNew += 1;
-    else if (type ==  wxEVT_SCROLLWIN_PAGEUP)
+    else if (type ==  wxEVT_SCROLLWIN_PAGEUP || type == wxEVT_SCROLL_PAGEUP)
         topLineNew -= LinesToScroll();
-    else if (type ==  wxEVT_SCROLLWIN_PAGEDOWN)
+    else if (type ==  wxEVT_SCROLLWIN_PAGEDOWN || type == wxEVT_SCROLL_PAGEDOWN)
         topLineNew += LinesToScroll();
-    else if (type ==  wxEVT_SCROLLWIN_TOP)
+    else if (type ==  wxEVT_SCROLLWIN_TOP || type == wxEVT_SCROLL_TOP)
         topLineNew = 0;
-    else if (type ==  wxEVT_SCROLLWIN_BOTTOM)
+    else if (type ==  wxEVT_SCROLLWIN_BOTTOM || type == wxEVT_SCROLL_BOTTOM)
         topLineNew = MaxScrollPos();
-    else if (type ==   wxEVT_SCROLLWIN_THUMBTRACK)
+    else if (type ==   wxEVT_SCROLLWIN_THUMBTRACK || type == wxEVT_SCROLL_THUMBTRACK)
         topLineNew = pos;
 
     ScrollTo(topLineNew);
@@ -410,9 +466,10 @@ void ScintillaWX::DoMouseWheel(int rotation, int delta, int linesPerAction, int
 
 
 void ScintillaWX::DoSize(int width, int height) {
-    PRectangle rcClient(0,0,width,height);
-    SetScrollBarsTo(rcClient);
-    DropGraphics();
+//      PRectangle rcClient(0,0,width,height);
+//      SetScrollBarsTo(rcClient);
+//      DropGraphics();
+    ChangeSize();
 }
 
 void ScintillaWX::DoLoseFocus(){
@@ -565,13 +622,13 @@ void ScintillaWX::FullPaint() {
     paintState = painting;
     rcPaint = GetTextRectangle();
     paintingAllText = true;
-    wxClientDC dc(wMain.GetID());
-    Surface surfaceWindow;
-    surfaceWindow.Init(&dc);
-    Paint(&surfaceWindow, rcPaint);
-    surfaceWindow.Release();
+    wxClientDC dc(stc);
+    Surface* surfaceWindow = Surface::Allocate();
+    surfaceWindow->Init(&dc);
+    Paint(surfaceWindow, rcPaint);
+    delete surfaceWindow;
 
-//     wMain.GetID()->Refresh(FALSE);
+//     stc->Refresh(FALSE);
 
     paintState = notPainting;
 }