/** * @file llscrollbar.h * @brief Scrollbar UI widget * * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. * $License$ */ #ifndef LL_SCROLLBAR_H #define LL_SCROLLBAR_H #include "stdtypes.h" #include "lluictrl.h" #include "v4color.h" // // Constants // const S32 SCROLLBAR_SIZE = 16; // // Classes // class LLScrollbar : public LLUICtrl { public: enum ORIENTATION { HORIZONTAL, VERTICAL }; LLScrollbar(const LLString& name, LLRect rect, ORIENTATION orientation, S32 doc_size, S32 doc_pos, S32 page_size, void(*change_callback)( S32 new_pos, LLScrollbar* self, void* userdata ), void* callback_user_data = NULL, S32 step_size = 1); virtual ~LLScrollbar(); virtual void setValue(const LLSD& value); virtual EWidgetType getWidgetType() const; virtual LLString getWidgetTag() const; // Overrides from LLView virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); virtual BOOL handleHover(S32 x, S32 y, MASK mask); virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *carge_data, EAcceptance *accept, LLString &tooltip_msg); virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); virtual void draw(); void setDocParams( S32 size, S32 pos ); // How long the "document" is. void setDocSize( S32 size ); S32 getDocSize() { return mDocSize; } // How many "lines" the "document" has scrolled. // 0 <= DocPos <= DocSize - DocVisibile void setDocPos( S32 pos ); S32 getDocPos() { return mDocPos; } // How many "lines" of the "document" is can appear on a page. void setPageSize( S32 page_size ); S32 getPageSize() { return mPageSize; } // The farthest the document can be scrolled (top of the last page). S32 getDocPosMax() { return llmax( 0, mDocSize - mPageSize); } void pageUp(S32 overlap); void pageDown(S32 overlap); static void onLineUpBtnPressed(void* userdata); static void onLineDownBtnPressed(void* userdata); void setTrackColor( const LLColor4& color ) { mTrackColor = color; } void setThumbColor( const LLColor4& color ) { mThumbColor = color; } void setHighlightColor( const LLColor4& color ) { mHighlightColor = color; } void setShadowColor( const LLColor4& color ) { mShadowColor = color; } void setOnScrollEndCallback(void (*callback)(void*), void* userdata) { mOnScrollEndCallback = callback; mOnScrollEndData = userdata;} protected: void updateThumbRect(); void changeLine(S32 delta, BOOL update_thumb ); protected: void (*mChangeCallback)( S32 new_pos, LLScrollbar* self, void* userdata ); void* mCallbackUserData; ORIENTATION mOrientation; S32 mDocSize; // Size of the document that the scrollbar is modeling. Units depend on the user. 0 <= mDocSize. S32 mDocPos; // Position within the doc that the scrollbar is modeling, in "lines" (user size) S32 mPageSize; // Maximum number of lines that can be seen at one time. S32 mStepSize; BOOL mDocChanged; LLRect mThumbRect; S32 mDragStartX; S32 mDragStartY; F32 mHoverGlowStrength; F32 mCurGlowStrength; LLRect mOrigRect; S32 mLastDelta; LLColor4 mTrackColor; LLColor4 mThumbColor; LLColor4 mFocusColor; LLColor4 mHighlightColor; LLColor4 mShadowColor; void (*mOnScrollEndCallback)(void*); void *mOnScrollEndData; }; #endif // LL_SCROLLBAR_H