X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e39af974ef7846e26686ae39d74e4696c1fef0c3..e69d5138dc8f95e294ae6d03beb4f321406f4e34:/src/univ/scrolbar.cpp diff --git a/src/univ/scrolbar.cpp b/src/univ/scrolbar.cpp index 372b3b3fe9..c9f56e5c74 100644 --- a/src/univ/scrolbar.cpp +++ b/src/univ/scrolbar.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: univ/scrolbar.cpp +// Name: src/univ/scrolbar.cpp // Purpose: wxScrollBar implementation // Author: Vadim Zeitlin // Modified by: @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "univscrolbar.h" -#endif - #include "wx/wxprec.h" #ifdef __BORLANDC__ @@ -29,12 +25,13 @@ #if wxUSE_SCROLLBAR +#include "wx/scrolbar.h" + #ifndef WX_PRECOMP #include "wx/timer.h" - #include "wx/dcclient.h" - #include "wx/scrolbar.h" #include "wx/validate.h" + #include "wx/log.h" #endif #include "wx/univ/scrtimer.h" @@ -42,7 +39,6 @@ #include "wx/univ/renderer.h" #include "wx/univ/inphand.h" #include "wx/univ/theme.h" -#include "wx/log.h" #define WXDEBUG_SCROLLBAR @@ -133,7 +129,7 @@ void wxScrollBar::Init() m_elementsState[n] = 0; } - m_dirty = FALSE; + m_dirty = false; } bool wxScrollBar::Create(wxWindow *parent, @@ -147,8 +143,8 @@ bool wxScrollBar::Create(wxWindow *parent, // the scrollbars never have the border style &= ~wxBORDER_MASK; - if ( !wxControl::Create(parent, id, pos, size, style, wxDefaultValidator, name) ) - return FALSE; + if ( !wxControl::Create(parent, id, pos, size, style, validator, name) ) + return false; SetBestSize(size); @@ -157,7 +153,7 @@ bool wxScrollBar::Create(wxWindow *parent, CreateInputHandler(wxINP_HANDLER_SCROLLBAR); - return TRUE; + return true; } wxScrollBar::~wxScrollBar() @@ -173,7 +169,7 @@ bool wxScrollBar::IsStandalone() const wxWindow *parent = GetParent(); if ( !parent ) { - return TRUE; + return true; } return (parent->GetScrollbar(wxHORIZONTAL) != this) && @@ -222,7 +218,7 @@ void wxScrollBar::DoSetThumb(int pos) m_elementsState[Element_Thumb] |= wxCONTROL_DIRTY; m_elementsState[m_thumbPos > m_thumbPosOld ? Element_Bar_1 : Element_Bar_2] |= wxCONTROL_DIRTY; - m_dirty = TRUE; + m_dirty = true; } int wxScrollBar::GetThumbPosition() const @@ -256,7 +252,7 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageSize, bool refresh) { - // we only refresh everythign when the range changes, thumb position + // we only refresh everything when the range changes, thumb position // changes are handled in OnIdle bool needsRefresh = (range != m_range) || (thumbSize != m_thumbSize) || @@ -324,6 +320,7 @@ wxScrollArrows::Arrow wxScrollBar::HitTest(const wxPoint& pt) const void wxScrollBar::OnInternalIdle() { UpdateThumb(); + wxControl::OnInternalIdle(); } void wxScrollBar::UpdateThumb() @@ -375,7 +372,7 @@ void wxScrollBar::UpdateThumb() } #ifdef WXDEBUG_SCROLLBAR - static bool s_refreshDebug = FALSE; + static bool s_refreshDebug = false; if ( s_refreshDebug ) { wxClientDC dc(this); @@ -391,14 +388,14 @@ void wxScrollBar::UpdateThumb() } #endif // WXDEBUG_SCROLLBAR - Refresh(FALSE, &rect); + Refresh(false, &rect); } m_elementsState[n] &= ~wxCONTROL_DIRTY; } } - m_dirty = FALSE; + m_dirty = false; } } @@ -407,7 +404,7 @@ void wxScrollBar::DoDraw(wxControlRenderer *renderer) renderer->DrawScrollbar(this, m_thumbPosOld); // clear all dirty flags - m_dirty = FALSE; + m_dirty = false; m_thumbPosOld = -1; } @@ -455,7 +452,7 @@ void wxScrollBar::SetState(Element which, int flags) { m_elementsState[which] = flags | wxCONTROL_DIRTY; - m_dirty = TRUE; + m_dirty = true; } } @@ -480,7 +477,7 @@ bool wxScrollBar::PerformAction(const wxControlAction& action, { int thumbOld = m_thumbPos; - bool notify = FALSE; // send an event about the change? + bool notify = false; // send an event about the change? wxEventType scrollType; @@ -535,7 +532,7 @@ bool wxScrollBar::PerformAction(const wxControlAction& action, else if ( action == wxACTION_SCROLL_THUMB_RELEASE ) { // always notify about this - notify = TRUE; + notify = true; scrollType = wxEVT_SCROLLWIN_THUMBRELEASE; } else @@ -553,15 +550,21 @@ bool wxScrollBar::PerformAction(const wxControlAction& action, // NB: we assume that scrollbar events are sequentially numbered // but this should be ok as other code relies on this as well scrollType += wxEVT_SCROLL_TOP - wxEVT_SCROLLWIN_TOP; + wxScrollEvent event(scrollType, this->GetId(), m_thumbPos, + IsVertical() ? wxVERTICAL : wxHORIZONTAL); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); + } + else // part of the window + { + wxScrollWinEvent event(scrollType, m_thumbPos, + IsVertical() ? wxVERTICAL : wxHORIZONTAL); + event.SetEventObject(this); + GetParent()->GetEventHandler()->ProcessEvent(event); } - - wxScrollWinEvent event(scrollType, m_thumbPos, - IsVertical() ? wxVERTICAL : wxHORIZONTAL); - event.SetEventObject(this); - GetParent()->GetEventHandler()->ProcessEvent(event); } - return TRUE; + return true; } void wxScrollBar::ScrollToStart() @@ -577,13 +580,22 @@ void wxScrollBar::ScrollToEnd() bool wxScrollBar::ScrollLines(int nLines) { DoSetThumb(m_thumbPos + nLines); - return TRUE; + return true; } bool wxScrollBar::ScrollPages(int nPages) { DoSetThumb(m_thumbPos + nPages*m_pageSize); - return TRUE; + return true; +} + +/* static */ +wxInputHandler *wxScrollBar::GetStdInputHandler(wxInputHandler *handlerDef) +{ + static wxStdScrollBarInputHandler + s_handler(wxTheme::Get()->GetRenderer(), handlerDef); + + return &s_handler; } // ============================================================================ @@ -653,12 +665,12 @@ bool wxStdScrollBarInputHandler::OnScrollTimer(wxScrollBar *scrollbar, int oldThumbPos = scrollbar->GetThumbPosition(); scrollbar->PerformAction(action); if ( scrollbar->GetThumbPosition() != oldThumbPos ) - return TRUE; + return true; // we scrolled till the end m_timerScroll->Stop(); - return FALSE; + return false; } void wxStdScrollBarInputHandler::StopScrolling(wxScrollBar *control) @@ -679,7 +691,7 @@ void wxStdScrollBarInputHandler::StopScrolling(wxScrollBar *control) } // unpress the arrow and highlight the current element - Press(control, FALSE); + Press(control, false); } wxCoord @@ -714,17 +726,15 @@ bool wxStdScrollBarInputHandler::HandleKey(wxInputConsumer *consumer, case WXK_LEFT: action = wxACTION_SCROLL_LINE_UP; break; case WXK_HOME: action = wxACTION_SCROLL_START; break; case WXK_END: action = wxACTION_SCROLL_END; break; - case WXK_PAGEUP: - case WXK_PRIOR: action = wxACTION_SCROLL_PAGE_UP; break; - case WXK_PAGEDOWN: - case WXK_NEXT: action = wxACTION_SCROLL_PAGE_DOWN; break; + case WXK_PAGEUP: action = wxACTION_SCROLL_PAGE_UP; break; + case WXK_PAGEDOWN: action = wxACTION_SCROLL_PAGE_DOWN; break; } - if ( !!action ) + if ( !action.IsEmpty() ) { consumer->PerformAction(action); - return TRUE; + return true; } } @@ -736,7 +746,7 @@ bool wxStdScrollBarInputHandler::HandleMouse(wxInputConsumer *consumer, { // is this a click event from an acceptable button? int btn = event.GetButton(); - if ( (btn != -1) && IsAllowedButton(btn) ) + if ( btn == wxMOUSE_BTN_LEFT ) { // determine which part of the window mouse is in wxScrollBar *scrollbar = wxStaticCast(consumer->GetInputWindow(), wxScrollBar); @@ -757,7 +767,7 @@ bool wxStdScrollBarInputHandler::HandleMouse(wxInputConsumer *consumer, m_winCapture->CaptureMouse(); // generate the command - bool hasAction = TRUE; + bool hasAction = true; wxControlAction action; switch ( ht ) { @@ -787,18 +797,18 @@ bool wxStdScrollBarInputHandler::HandleMouse(wxInputConsumer *consumer, // fall through: there is no immediate action default: - hasAction = FALSE; + hasAction = false; } // remove highlighting - Highlight(scrollbar, FALSE); + Highlight(scrollbar, false); m_htLast = ht; // and press the arrow or highlight thumb now instead if ( m_htLast == wxHT_SCROLLBAR_THUMB ) - Highlight(scrollbar, TRUE); + Highlight(scrollbar, true); else - Press(scrollbar, TRUE); + Press(scrollbar, true); // start dragging if ( hasAction ) @@ -826,7 +836,7 @@ bool wxStdScrollBarInputHandler::HandleMouse(wxInputConsumer *consumer, } m_htLast = ht; - Highlight(scrollbar, TRUE); + Highlight(scrollbar, true); } else { @@ -848,22 +858,22 @@ bool wxStdScrollBarInputHandler::HandleMouseMove(wxInputConsumer *consumer, if ( m_winCapture ) { - if ( (m_htLast == wxHT_SCROLLBAR_THUMB) && event.Moving() ) + if ( (m_htLast == wxHT_SCROLLBAR_THUMB) && event.Dragging() ) { // make the thumb follow the mouse by keeping the same offset // between the mouse position and the top/left of the thumb HandleThumbMove(scrollbar, event); - return TRUE; + return true; } // no other changes are possible while the mouse is captured - return FALSE; + return false; } bool isArrow = scrollbar->GetArrows().HandleMouseMove(event); - if ( event.Moving() ) + if ( event.Dragging() ) { wxHitTest ht = m_renderer->HitTestScrollbar ( @@ -873,46 +883,48 @@ bool wxStdScrollBarInputHandler::HandleMouseMove(wxInputConsumer *consumer, if ( ht == m_htLast ) { // nothing changed - return FALSE; + return false; } #ifdef DEBUG_MOUSE wxLogDebug("Scrollbar::OnMouseMove: ht = %d", ht); #endif // DEBUG_MOUSE - Highlight(scrollbar, FALSE); + Highlight(scrollbar, false); m_htLast = ht; if ( !isArrow ) - Highlight(scrollbar, TRUE); + Highlight(scrollbar, true); //else: already done by wxScrollArrows::HandleMouseMove } else if ( event.Leaving() ) { if ( !isArrow ) - Highlight(scrollbar, FALSE); + Highlight(scrollbar, false); m_htLast = wxHT_NOWHERE; } else // event.Entering() { // we don't process this event - return FALSE; + return false; } // we did something - return TRUE; + return true; } #endif // wxUSE_SCROLLBAR +#if wxUSE_TIMER + // ---------------------------------------------------------------------------- // wxScrollTimer // ---------------------------------------------------------------------------- wxScrollTimer::wxScrollTimer() { - m_skipNext = FALSE; + m_skipNext = false; } void wxScrollTimer::StartAutoScroll() @@ -927,7 +939,7 @@ void wxScrollTimer::StartAutoScroll() // there is an initial delay before the scrollbar starts scrolling - // implement it by ignoring the first timer expiration and only start // scrolling from the second one - m_skipNext = TRUE; + m_skipNext = true; Start(200); // FIXME: hardcoded delay } @@ -939,7 +951,7 @@ void wxScrollTimer::Notify() Stop(); Start(50); // FIXME: hardcoded delay - m_skipNext = FALSE; + m_skipNext = false; } else { @@ -949,3 +961,4 @@ void wxScrollTimer::Notify() } } +#endif // wxUSE_TIMER