]> git.saurik.com Git - wxWidgets.git/commitdiff
Added ability for wxSTC's scrollbars to be supplieed externally, such
authorRobin Dunn <robin@alldunn.com>
Sun, 25 Nov 2001 08:53:33 +0000 (08:53 +0000)
committerRobin Dunn <robin@alldunn.com>
Sun, 25 Nov 2001 08:53:33 +0000 (08:53 +0000)
as those that are created in wxDynamicSashWindows,

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12672 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

contrib/include/wx/stc/stc.h
contrib/src/stc/ScintillaWX.cpp
contrib/src/stc/stc.cpp
contrib/src/stc/stc.cpp.in
contrib/src/stc/stc.h.in
include/wx/stc/stc.h
src/stc/ScintillaWX.cpp
src/stc/stc.cpp
src/stc/stc.cpp.in
src/stc/stc.h.in

index 9eadfcd66ade1c04c523d6283ee9ffdecad7b59d..49effbce94f77c0896d75a5d36dd5b8002aa378b 100644 (file)
@@ -1594,6 +1594,14 @@ public:
     // Send a message to Scintilla
     long SendMsg(int msg, long wp=0, long lp=0);
 
+
+    // Set the vertical scrollbar to use instead of the ont that's built-in.
+    void SetVScrollBar(wxScrollBar* bar) { m_vScrollBar = bar; }
+
+
+    // Set the horizontal scrollbar to use instead of the ont that's built-in.
+    void SetHScrollBar(wxScrollBar* bar) { m_hScrollBar = bar; }
+
 //----------------------------------------------------------------------
 
 
@@ -1602,6 +1610,7 @@ private:
     // Event handlers
     void OnPaint(wxPaintEvent& evt);
     void OnScrollWin(wxScrollWinEvent& evt);
+    void OnScroll(wxScrollEvent& evt);
     void OnSize(wxSizeEvent& evt);
     void OnMouseLeftDown(wxMouseEvent& evt);
     void OnMouseMove(wxMouseEvent& evt);
@@ -1629,6 +1638,8 @@ private:
 
     ScintillaWX*        m_swx;
     wxStopWatch         m_stopWatch;
+    wxScrollBar*        m_vScrollBar;
+    wxScrollBar*        m_hScrollBar;
 
     bool                m_lastKeyDownConsumed;
 
@@ -1695,7 +1706,6 @@ public:
     bool GetControl() const;
     bool GetAlt() const;
 
-//    void CopyObject(wxObject& obj) const;
     virtual wxEvent* Clone() const { return new wxStyledTextEvent(*this); }
 
 #ifndef SWIG
index be6b36b4de86b72d7623bf87b978c87583805040..6630a7d59c334eef737a4df417265b1d3e9bff13 100644 (file)
@@ -22,7 +22,7 @@
 
 //----------------------------------------------------------------------
 
-const int H_SCROLL_MAX  = 2000;
+const int H_SCROLL_MAX  = 4000;
 const int H_SCROLL_STEP = 20;
 const int H_SCROLL_PAGE = 200;
 
@@ -138,7 +138,7 @@ void ScintillaWX::StartDrag() {
     dragText = evt.GetDragText();
 
     if (dragText.Length()) {
-        wxDropSource        source(wMain.GetID());
+        wxDropSource        source(stc);
         wxTextDataObject    data(dragText);
         wxDragResult        result;
 
@@ -175,9 +175,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,37 +189,68 @@ 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;
+        }
     }
 
+
     if (horizontalScrollBarVisible) {
-        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 (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;
@@ -282,7 +313,7 @@ bool ScintillaWX::CanPaste() {
 }
 
 void ScintillaWX::CreateCallTipWindow(PRectangle) {
-    ct.wCallTip = new wxSTCCallTip(wMain.GetID(), -1, &ct);
+    ct.wCallTip = new wxSTCCallTip(stc, -1, &ct);
     ct.wDraw = ct.wCallTip;
 }
 
@@ -347,19 +378,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);
@@ -367,19 +398,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);
@@ -567,13 +598,13 @@ void ScintillaWX::FullPaint() {
     paintState = painting;
     rcPaint = GetTextRectangle();
     paintingAllText = true;
-    wxClientDC dc(wMain.GetID());
+    wxClientDC dc(stc);
     Surface surfaceWindow;
     surfaceWindow.Init(&dc);
     Paint(&surfaceWindow, rcPaint);
     surfaceWindow.Release();
 
-//     wMain.GetID()->Refresh(FALSE);
+//     stc->Refresh(FALSE);
 
     paintState = notPainting;
 }
index 0868e08296810640ff8e13b387eda61e3f0afda2..4435d6db064b493e0bc85351aa72a0369453bb49 100644 (file)
@@ -103,6 +103,7 @@ 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__
@@ -143,6 +144,8 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
     m_swx = new ScintillaWX(this);
     m_stopWatch.Start();
     m_lastKeyDownConsumed = FALSE;
+    m_vScrollBar = NULL;
+    m_hScrollBar = NULL;
 }
 
 
@@ -1801,6 +1804,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);
@@ -2064,6 +2077,7 @@ 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; }
 
+
 wxStyledTextEvent::wxStyledTextEvent(const wxStyledTextEvent& event):
   wxCommandEvent(event)
 {
@@ -2101,3 +2115,8 @@ wxStyledTextEvent::wxStyledTextEvent(const wxStyledTextEvent& event):
 
 
 
+
+
+
+
+
index 991ae203ac7e32eee1c42c11047cdf267ff90d77..eff7ed29368172453cb7bfb17d262ff90826ccdb 100644 (file)
@@ -103,6 +103,7 @@ 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__
@@ -143,6 +144,8 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
     m_swx = new ScintillaWX(this);
     m_stopWatch.Start();
     m_lastKeyDownConsumed = FALSE;
+    m_vScrollBar = NULL;
+    m_hScrollBar = NULL;
 }
 
 
@@ -345,6 +348,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);
@@ -608,35 +621,35 @@ 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;
-
-    o->m_margin =        m_margin;
-
-    o->m_message =       m_message;
-    o->m_wParam =        m_wParam;
-    o->m_lParam =        m_lParam;
 
-    o->m_listType =     m_listType;
-    o->m_x =            m_x;
-    o->m_y =            m_y;
+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;
+
+    m_margin =        event.m_margin;
+
+    m_message =       event.m_message;
+    m_wParam =        event.m_wParam;
+    m_lParam =        event.m_lParam;
+
+    m_listType =     event.m_listType;
+    m_x =            event.m_x;
+    m_y =            event.m_y;
 
 #if wxUSE_DRAG_AND_DROP
-    o->m_dragText =     m_dragText;
-    o->m_dragAllowMove =m_dragAllowMove;
-    o->m_dragResult =   m_dragResult;
+    m_dragText =     event.m_dragText;
+    m_dragAllowMove =event.m_dragAllowMove;
+    m_dragResult =   event.m_dragResult;
 #endif
 }
 
@@ -646,3 +659,8 @@ void wxStyledTextEvent::CopyObject(wxObject& obj) const {
 
 
 
+
+
+
+
+
index cf6d8110490b9d26de9c8e2d1bdae5e8edc715ec..e49b8ce97ded20ab4defe4d661ed7725b2c5a3fc 100644 (file)
@@ -148,6 +148,14 @@ public:
     // Send a message to Scintilla
     long SendMsg(int msg, long wp=0, long lp=0);
 
+
+    // Set the vertical scrollbar to use instead of the ont that's built-in.
+    void SetVScrollBar(wxScrollBar* bar) { m_vScrollBar = bar; }
+
+
+    // Set the horizontal scrollbar to use instead of the ont that's built-in.
+    void SetHScrollBar(wxScrollBar* bar) { m_hScrollBar = bar; }
+
 //----------------------------------------------------------------------
 
 
@@ -156,6 +164,7 @@ private:
     // Event handlers
     void OnPaint(wxPaintEvent& evt);
     void OnScrollWin(wxScrollWinEvent& evt);
+    void OnScroll(wxScrollEvent& evt);
     void OnSize(wxSizeEvent& evt);
     void OnMouseLeftDown(wxMouseEvent& evt);
     void OnMouseMove(wxMouseEvent& evt);
@@ -183,6 +192,8 @@ private:
 
     ScintillaWX*        m_swx;
     wxStopWatch         m_stopWatch;
+    wxScrollBar*        m_vScrollBar;
+    wxScrollBar*        m_hScrollBar;
 
     bool                m_lastKeyDownConsumed;
 
@@ -195,6 +206,7 @@ private:
 
 class wxStyledTextEvent : public wxCommandEvent {
 public:
+    wxStyledTextEvent(const wxStyledTextEvent& event);
     wxStyledTextEvent(wxEventType commandType=0, int id=0);
     ~wxStyledTextEvent() {}
 
@@ -248,7 +260,7 @@ public:
     bool GetControl() const;
     bool GetAlt() const;
 
-    void CopyObject(wxObject& obj) const;
+    virtual wxEvent* Clone() const { return new wxStyledTextEvent(*this); }
 
 #ifndef SWIG
 private:
index 9eadfcd66ade1c04c523d6283ee9ffdecad7b59d..49effbce94f77c0896d75a5d36dd5b8002aa378b 100644 (file)
@@ -1594,6 +1594,14 @@ public:
     // Send a message to Scintilla
     long SendMsg(int msg, long wp=0, long lp=0);
 
+
+    // Set the vertical scrollbar to use instead of the ont that's built-in.
+    void SetVScrollBar(wxScrollBar* bar) { m_vScrollBar = bar; }
+
+
+    // Set the horizontal scrollbar to use instead of the ont that's built-in.
+    void SetHScrollBar(wxScrollBar* bar) { m_hScrollBar = bar; }
+
 //----------------------------------------------------------------------
 
 
@@ -1602,6 +1610,7 @@ private:
     // Event handlers
     void OnPaint(wxPaintEvent& evt);
     void OnScrollWin(wxScrollWinEvent& evt);
+    void OnScroll(wxScrollEvent& evt);
     void OnSize(wxSizeEvent& evt);
     void OnMouseLeftDown(wxMouseEvent& evt);
     void OnMouseMove(wxMouseEvent& evt);
@@ -1629,6 +1638,8 @@ private:
 
     ScintillaWX*        m_swx;
     wxStopWatch         m_stopWatch;
+    wxScrollBar*        m_vScrollBar;
+    wxScrollBar*        m_hScrollBar;
 
     bool                m_lastKeyDownConsumed;
 
@@ -1695,7 +1706,6 @@ public:
     bool GetControl() const;
     bool GetAlt() const;
 
-//    void CopyObject(wxObject& obj) const;
     virtual wxEvent* Clone() const { return new wxStyledTextEvent(*this); }
 
 #ifndef SWIG
index be6b36b4de86b72d7623bf87b978c87583805040..6630a7d59c334eef737a4df417265b1d3e9bff13 100644 (file)
@@ -22,7 +22,7 @@
 
 //----------------------------------------------------------------------
 
-const int H_SCROLL_MAX  = 2000;
+const int H_SCROLL_MAX  = 4000;
 const int H_SCROLL_STEP = 20;
 const int H_SCROLL_PAGE = 200;
 
@@ -138,7 +138,7 @@ void ScintillaWX::StartDrag() {
     dragText = evt.GetDragText();
 
     if (dragText.Length()) {
-        wxDropSource        source(wMain.GetID());
+        wxDropSource        source(stc);
         wxTextDataObject    data(dragText);
         wxDragResult        result;
 
@@ -175,9 +175,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,37 +189,68 @@ 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;
+        }
     }
 
+
     if (horizontalScrollBarVisible) {
-        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 (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;
@@ -282,7 +313,7 @@ bool ScintillaWX::CanPaste() {
 }
 
 void ScintillaWX::CreateCallTipWindow(PRectangle) {
-    ct.wCallTip = new wxSTCCallTip(wMain.GetID(), -1, &ct);
+    ct.wCallTip = new wxSTCCallTip(stc, -1, &ct);
     ct.wDraw = ct.wCallTip;
 }
 
@@ -347,19 +378,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);
@@ -367,19 +398,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);
@@ -567,13 +598,13 @@ void ScintillaWX::FullPaint() {
     paintState = painting;
     rcPaint = GetTextRectangle();
     paintingAllText = true;
-    wxClientDC dc(wMain.GetID());
+    wxClientDC dc(stc);
     Surface surfaceWindow;
     surfaceWindow.Init(&dc);
     Paint(&surfaceWindow, rcPaint);
     surfaceWindow.Release();
 
-//     wMain.GetID()->Refresh(FALSE);
+//     stc->Refresh(FALSE);
 
     paintState = notPainting;
 }
index 0868e08296810640ff8e13b387eda61e3f0afda2..4435d6db064b493e0bc85351aa72a0369453bb49 100644 (file)
@@ -103,6 +103,7 @@ 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__
@@ -143,6 +144,8 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
     m_swx = new ScintillaWX(this);
     m_stopWatch.Start();
     m_lastKeyDownConsumed = FALSE;
+    m_vScrollBar = NULL;
+    m_hScrollBar = NULL;
 }
 
 
@@ -1801,6 +1804,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);
@@ -2064,6 +2077,7 @@ 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; }
 
+
 wxStyledTextEvent::wxStyledTextEvent(const wxStyledTextEvent& event):
   wxCommandEvent(event)
 {
@@ -2101,3 +2115,8 @@ wxStyledTextEvent::wxStyledTextEvent(const wxStyledTextEvent& event):
 
 
 
+
+
+
+
+
index 991ae203ac7e32eee1c42c11047cdf267ff90d77..eff7ed29368172453cb7bfb17d262ff90826ccdb 100644 (file)
@@ -103,6 +103,7 @@ 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__
@@ -143,6 +144,8 @@ wxStyledTextCtrl::wxStyledTextCtrl(wxWindow *parent,
     m_swx = new ScintillaWX(this);
     m_stopWatch.Start();
     m_lastKeyDownConsumed = FALSE;
+    m_vScrollBar = NULL;
+    m_hScrollBar = NULL;
 }
 
 
@@ -345,6 +348,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);
@@ -608,35 +621,35 @@ 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;
-
-    o->m_margin =        m_margin;
-
-    o->m_message =       m_message;
-    o->m_wParam =        m_wParam;
-    o->m_lParam =        m_lParam;
 
-    o->m_listType =     m_listType;
-    o->m_x =            m_x;
-    o->m_y =            m_y;
+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;
+
+    m_margin =        event.m_margin;
+
+    m_message =       event.m_message;
+    m_wParam =        event.m_wParam;
+    m_lParam =        event.m_lParam;
+
+    m_listType =     event.m_listType;
+    m_x =            event.m_x;
+    m_y =            event.m_y;
 
 #if wxUSE_DRAG_AND_DROP
-    o->m_dragText =     m_dragText;
-    o->m_dragAllowMove =m_dragAllowMove;
-    o->m_dragResult =   m_dragResult;
+    m_dragText =     event.m_dragText;
+    m_dragAllowMove =event.m_dragAllowMove;
+    m_dragResult =   event.m_dragResult;
 #endif
 }
 
@@ -646,3 +659,8 @@ void wxStyledTextEvent::CopyObject(wxObject& obj) const {
 
 
 
+
+
+
+
+
index cf6d8110490b9d26de9c8e2d1bdae5e8edc715ec..e49b8ce97ded20ab4defe4d661ed7725b2c5a3fc 100644 (file)
@@ -148,6 +148,14 @@ public:
     // Send a message to Scintilla
     long SendMsg(int msg, long wp=0, long lp=0);
 
+
+    // Set the vertical scrollbar to use instead of the ont that's built-in.
+    void SetVScrollBar(wxScrollBar* bar) { m_vScrollBar = bar; }
+
+
+    // Set the horizontal scrollbar to use instead of the ont that's built-in.
+    void SetHScrollBar(wxScrollBar* bar) { m_hScrollBar = bar; }
+
 //----------------------------------------------------------------------
 
 
@@ -156,6 +164,7 @@ private:
     // Event handlers
     void OnPaint(wxPaintEvent& evt);
     void OnScrollWin(wxScrollWinEvent& evt);
+    void OnScroll(wxScrollEvent& evt);
     void OnSize(wxSizeEvent& evt);
     void OnMouseLeftDown(wxMouseEvent& evt);
     void OnMouseMove(wxMouseEvent& evt);
@@ -183,6 +192,8 @@ private:
 
     ScintillaWX*        m_swx;
     wxStopWatch         m_stopWatch;
+    wxScrollBar*        m_vScrollBar;
+    wxScrollBar*        m_hScrollBar;
 
     bool                m_lastKeyDownConsumed;
 
@@ -195,6 +206,7 @@ private:
 
 class wxStyledTextEvent : public wxCommandEvent {
 public:
+    wxStyledTextEvent(const wxStyledTextEvent& event);
     wxStyledTextEvent(wxEventType commandType=0, int id=0);
     ~wxStyledTextEvent() {}
 
@@ -248,7 +260,7 @@ public:
     bool GetControl() const;
     bool GetAlt() const;
 
-    void CopyObject(wxObject& obj) const;
+    virtual wxEvent* Clone() const { return new wxStyledTextEvent(*this); }
 
 #ifndef SWIG
 private: