]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/scrolbar_osx.cpp
Don't dereference invalid iterator in wxDateTime::ParseDate().
[wxWidgets.git] / src / osx / scrolbar_osx.cpp
index f9e695b48b509b14b1d07a239a728f6b352354c7..6767de28b68c2c7e7e274a5294dc06365270977b 100644 (file)
@@ -21,6 +21,8 @@
 
 #include "wx/osx/private.h"
 
+#if wxUSE_SCROLLBAR
+
 IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl)
 
 BEGIN_EVENT_TABLE(wxScrollBar, wxControl)
@@ -39,7 +41,7 @@ bool wxScrollBar::Create( wxWindow *parent,
 
     if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) )
         return false;
-        
+
     m_peer = wxWidgetImpl::CreateScrollBar( this, parent, id, pos, size, style, GetExtraStyle() );
 
     MacPostControlCreate( pos, size );
@@ -72,7 +74,7 @@ void wxScrollBar::SetScrollbar( int position,
     m_objectSize = range;
 
    int range1 = wxMax( (m_objectSize - m_viewSize), 0 );
-   
+
    m_peer->SetMaximum( range1 );
    m_peer->SetScrollThumb( position, m_viewSize );
 }
@@ -83,7 +85,7 @@ void wxScrollBar::Command( wxCommandEvent& event )
     ProcessCommand( event );
 }
 
-bool wxScrollBar::HandleClicked( double timestampsec )
+bool wxScrollBar::OSXHandleClicked( double WXUNUSED(timestampsec) )
 {
     int new_pos = m_peer->GetValue();
 
@@ -124,3 +126,56 @@ wxSize wxScrollBar::DoGetBestSize() const
     CacheBestSize(best);
     return best;
 }
+
+void wxScrollBar::TriggerScrollEvent( wxEventType scrollEvent )
+{
+    int position = m_peer->GetValue();
+    int minPos = 0 ;
+    int maxPos = m_peer->GetMaximum();
+    int nScrollInc = 0;
+
+    if ( scrollEvent == wxEVT_SCROLL_LINEUP )
+    {
+        nScrollInc = -1;
+    }
+    else if ( scrollEvent == wxEVT_SCROLL_LINEDOWN )
+    {
+        nScrollInc = 1;
+    }
+    else if ( scrollEvent == wxEVT_SCROLL_PAGEUP )
+    {
+        nScrollInc = -m_pageSize;
+    }
+    else if ( scrollEvent == wxEVT_SCROLL_PAGEDOWN )
+    {
+        nScrollInc = m_pageSize;
+    }
+
+    int new_pos = position + nScrollInc;
+
+    if (new_pos < minPos)
+        new_pos = minPos;
+    else if (new_pos > maxPos)
+        new_pos = maxPos;
+
+    if ( nScrollInc )
+        SetThumbPosition( new_pos );
+
+    wxScrollEvent event( scrollEvent, m_windowId );
+    if ( m_windowStyle & wxHORIZONTAL )
+        event.SetOrientation( wxHORIZONTAL );
+    else
+        event.SetOrientation( wxVERTICAL );
+
+    event.SetPosition( new_pos );
+    event.SetEventObject( this );
+
+    wxWindow* window = GetParent();
+    if (window && window->MacIsWindowScrollbar( this ))
+        // this is hardcoded
+        window->MacOnScroll( event );
+    else
+        HandleWindowEvent( event );
+}
+
+#endif
\ No newline at end of file