/* * Copyright 2010 Inalogic® Inc. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License, as * published by the Free Software Foundation; either version 2.1 or 3.0 * of the License. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR * PURPOSE. See the applicable version of the GNU Lesser General Public * License for more details. * * You should have received a copy of both the GNU Lesser General Public * License along with this program. If not, see * * Authored by: Jay Taoko * */ #ifndef HSCROLLBAR_H #define HSCROLLBAR_H #include "TimerProc.h" #include "ScrollBar.h" namespace nux { class HLayout; class HScrollBar : public ScrollBar { public: HScrollBar(NUX_FILE_LINE_PROTO); ~HScrollBar(); void DrawLeftTriangle(GraphicsEngine &graphics_engine, int width, int height, const Geometry &geo, BasePainter &painter); void DrawRightTriangle(GraphicsEngine &graphics_engine, int width, int height, const Geometry &geo, BasePainter &painter); virtual void Draw(GraphicsEngine &graphics_engine, bool force_draw); private: virtual void DrawContent(GraphicsEngine & /* graphics_engine */, bool /* force_draw */) {}; void HScrollBarHandler(void *v); void ScrollRight(void *v); void ScrollLeft(void *v); void TrackLeft(void *v); void TrackRight(void *v); public: void SetContainerSize(int x, int y, int w, int h); void SetContentSize(int x, int y, int w, int h); void SetContentOffset(float dx, float dy); void ComputeScrolling(); ///////////////// // RECEIVERS // ///////////////// void SetValue(float value); void SetParameterName(const char *parameter_name); //////////////// // EMITTERS // //////////////// void RecvStartScrollRight(int x, int y, unsigned long button_flags, unsigned long key_flags); void RecvStartScrollLeft(int x, int y, unsigned long button_flags, unsigned long key_flags); void RecvEndScrollRight(int x, int y, unsigned long button_flags, unsigned long key_flags); void RecvEndScrollLeft(int x, int y, unsigned long button_flags, unsigned long key_flags); void RecvTrackMouseDown(int x, int y, unsigned long button_flags, unsigned long key_flags); void RecvTrackMouseUp(int x, int y, unsigned long button_flags, unsigned long key_flags); void RecvTrackMouseDrag(int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags); void OnSliderMouseDown(int x, int y, unsigned long button_flags, unsigned long key_flags); void OnSliderMouseUp(int x, int y, unsigned long button_flags, unsigned long key_flags); void OnSliderMouseDrag(int x, int y, int dx, int dy, unsigned long button_flags, unsigned long key_flags); /////////////// // SIGNALS // /////////////// sigc::signal sigClick; sigc::signal OnScrollLeft; sigc::signal OnScrollRight; sigc::signal sigHScrollBarSliderMouseDown; bool b_MouseDownTimer; bool b_MouseUpTimer; float m_color_factor; protected: // When the Scrollbar is used standalone, it is necessary to call ComputeScrolling at the end of the layout. virtual long PostLayoutManagement(long LayoutResult); virtual Area* FindAreaUnderMouse(const Point& mouse_position, NuxEventType event_type); bool AtMinimum(); bool AtMaximum(); HLayout *hlayout; BasicView *_slider; BasicView *_scroll_left_button; BasicView *_scroll_right_button; BasicView *_track; int content_width_; int content_height_; float content_offset_x_; float content_offset_y_; int container_width_; int container_height_; int m_TrackWidth; int m_TrackHeight; int m_SlideBarOffsetX; int m_SlideBarOffsetY; float stepX; float stepY; int m_SliderDragPositionX; int m_SliderDragPositionY; TimerFunctor *callback; TimerFunctor *left_callback; TimerFunctor *right_callback; TimerFunctor *trackleft_callback; TimerFunctor *trackright_callback; TimerHandle m_LeftTimerHandler; TimerHandle m_RightTimerHandler; TimerHandle m_TrackLeftTimerHandler; TimerHandle m_TrackRightTimerHandler; Point m_TrackMouseCoord; friend class HLayout; friend class ScrollView; }; } #endif // HSCROLLBAR_H