llscrollcontainer.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llscrollcontainer.h
  3.  * @brief LLScrollContainer class header file.
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLSCROLLCONTAINER_H
  33. #define LL_LLSCROLLCONTAINER_H
  34. #include "lluictrl.h"
  35. #ifndef LL_V4COLOR_H
  36. #include "v4color.h"
  37. #endif
  38. #include "stdenums.h"
  39. #include "llcoord.h"
  40. #include "llscrollbar.h"
  41. class LLViewBorder;
  42. class LLUICtrlFactory;
  43. /*****************************************************************************
  44.  * 
  45.  * A decorator view class meant to encapsulate a clipped region which is
  46.  * scrollable. It automatically takes care of pixel perfect scrolling
  47.  * and cliipping, as well as turning the scrollbars on or off based on
  48.  * the width and height of the view you're scrolling.
  49.  *
  50.  *****************************************************************************/
  51. struct ScrollContainerRegistry : public LLChildRegistry<ScrollContainerRegistry>
  52. {};
  53. class LLScrollContainer : public LLUICtrl
  54. {
  55. public:
  56. // Note: vertical comes before horizontal because vertical
  57. // scrollbars have priority for mouse and keyboard events.
  58. enum SCROLL_ORIENTATION { VERTICAL, HORIZONTAL, SCROLLBAR_COUNT };
  59. struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
  60. {
  61. Optional<bool> is_opaque,
  62. reserve_scroll_corner,
  63. border_visible,
  64. hide_scrollbar;
  65. Optional<F32> min_auto_scroll_rate,
  66. max_auto_scroll_rate;
  67. Optional<LLUIColor> bg_color;
  68. Optional<LLScrollbar::callback_t> scroll_callback;
  69. Params();
  70. };
  71. // my valid children are stored in this registry
  72.   typedef ScrollContainerRegistry child_registry_t;
  73. protected:
  74. LLScrollContainer(const Params&);
  75. friend class LLUICtrlFactory;
  76. public:
  77. virtual ~LLScrollContainer( void );
  78. virtual void  setValue(const LLSD& value) { mInnerRect.setValue(value); }
  79. void setBorderVisible( BOOL b );
  80. void scrollToShowRect( const LLRect& rect, const LLRect& constraint);
  81. void scrollToShowRect( const LLRect& rect) { scrollToShowRect(rect, LLRect(0, mInnerRect.getHeight(), mInnerRect.getWidth(), 0)); }
  82. void setReserveScrollCorner( BOOL b ) { mReserveScrollCorner = b; }
  83. LLRect getVisibleContentRect();
  84. LLRect getContentWindowRect();
  85. const LLRect& getScrolledViewRect() const { return mScrolledView ? mScrolledView->getRect() : LLRect::null; }
  86. void pageUp(S32 overlap = 0);
  87. void pageDown(S32 overlap = 0);
  88. void goToTop();
  89. void goToBottom();
  90. bool isAtTop() { return mScrollbar[VERTICAL]->isAtBeginning(); }
  91. bool isAtBottom() { return mScrollbar[VERTICAL]->isAtEnd(); }
  92. S32 getBorderWidth() const;
  93. // LLView functionality
  94. virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
  95. virtual BOOL handleKeyHere(KEY key, MASK mask);
  96. virtual BOOL handleScrollWheel( S32 x, S32 y, S32 clicks );
  97. virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
  98.    EDragAndDropType cargo_type,
  99.    void* cargo_data,
  100.    EAcceptance* accept,
  101.    std::string& tooltip_msg);
  102. virtual void draw();
  103. virtual bool addChild(LLView* view, S32 tab_group = 0);
  104. bool autoScroll(S32 x, S32 y);
  105. private:
  106. // internal scrollbar handlers
  107. virtual void scrollHorizontal( S32 new_pos );
  108. virtual void scrollVertical( S32 new_pos );
  109. void updateScroll();
  110. void calcVisibleSize( S32 *visible_width, S32 *visible_height, BOOL* show_h_scrollbar, BOOL* show_v_scrollbar ) const;
  111. LLScrollbar* mScrollbar[SCROLLBAR_COUNT];
  112. LLView* mScrolledView;
  113. S32 mSize;
  114. BOOL mIsOpaque;
  115. LLUIColor mBackgroundColor;
  116. LLRect mInnerRect;
  117. LLViewBorder* mBorder;
  118. BOOL mReserveScrollCorner;
  119. BOOL mAutoScrolling;
  120. F32 mAutoScrollRate;
  121. F32 mMinAutoScrollRate;
  122. F32 mMaxAutoScrollRate;
  123. bool mHideScrollbar;
  124. };
  125. #endif // LL_LLSCROLLCONTAINER_H