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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llscrollcolumnheader.h
  3.  * @brief Scroll lists are composed of rows (items), each of which 
  4.  * contains columns (cells).
  5.  *
  6.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2007-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #ifndef LLSCROLLLISTCOLUMN_H
  34. #define LLSCROLLLISTCOLUMN_H
  35. #include "llrect.h"
  36. #include "lluistring.h"
  37. #include "llbutton.h"
  38. #include "llinitparam.h"
  39. class LLScrollListColumn;
  40. class LLResizeBar;
  41. class LLScrollListCtrl;
  42. class LLScrollColumnHeader : public LLButton
  43. {
  44. public:
  45. struct Params : public LLInitParam::Block<Params, LLButton::Params>
  46. {
  47. Mandatory<LLScrollListColumn*> column;
  48. Params();
  49. };
  50. LLScrollColumnHeader(const Params&);
  51. ~LLScrollColumnHeader();
  52. /*virtual*/ void draw();
  53. /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
  54. /*virtual*/ LLView* findSnapEdge(S32& new_edge_val, const LLCoordGL& mouse_dir, ESnapEdge snap_edge, ESnapType snap_type, S32 threshold, S32 padding);
  55. /*virtual*/ void handleReshape(const LLRect& new_rect, bool by_user = false);
  56. LLScrollListColumn* getColumn() { return mColumn; }
  57. void setHasResizableElement(BOOL resizable);
  58. void updateResizeBars();
  59. BOOL canResize();
  60. void enableResizeBar(BOOL enable);
  61. void onClick(const LLSD& data);
  62. private:
  63. LLScrollListColumn* mColumn;
  64. LLResizeBar* mResizeBar;
  65. BOOL mHasResizableElement;
  66. };
  67. /*
  68.  * A simple data class describing a column within a scroll list.
  69.  */
  70. class LLScrollListColumn
  71. {
  72. public:
  73. typedef enum e_sort_direction
  74. {
  75. DESCENDING,
  76. ASCENDING
  77. } ESortDirection;
  78. struct SortNames
  79. : public LLInitParam::TypeValuesHelper<LLScrollListColumn::ESortDirection, SortNames>
  80. {
  81. static void declareValues();
  82. };
  83. struct Params : public LLInitParam::Block<Params>
  84. {
  85. Optional<std::string> name,
  86. tool_tip;
  87. Optional<std::string> sort_column;
  88. Optional<ESortDirection, SortNames> sort_direction;
  89. Optional<bool> sort_ascending;
  90. struct Width : public LLInitParam::Choice<Width>
  91. {
  92. Alternative<bool> dynamic_width;
  93. Alternative<S32> pixel_width;
  94. Alternative<F32> relative_width;
  95. Width()
  96. : dynamic_width("dynamic_width", false),
  97. pixel_width("width"),
  98. relative_width("relative_width", -1.f)
  99. {
  100. addSynonym(relative_width, "relwidth");
  101. }
  102. };
  103. Optional<Width> width;
  104. // either an image or label is used in column header
  105. struct Header : public LLInitParam::Choice<Header>
  106. {
  107. Alternative<std::string> label;
  108. Alternative<LLUIImage*> image;
  109. Header()
  110. : label("label"),
  111. image("image")
  112. {}
  113. };
  114. Optional<Header> header;
  115. Optional<LLFontGL::HAlign> halign;
  116. Params()
  117. : name("name"),
  118. tool_tip("tool_tip"),
  119. sort_column("sort_column"),
  120. sort_direction("sort_direction"),
  121. sort_ascending("sort_ascending", true),
  122. halign("halign", LLFontGL::LEFT)
  123. {
  124. // default choice to "dynamic_width"
  125. width.dynamic_width = true;
  126. addSynonym(sort_column, "sort");
  127. }
  128. };
  129. static const Params& getDefaultParams();
  130. //NOTE: this is default constructible so we can store it in a map.
  131. LLScrollListColumn(const Params& p = getDefaultParams(), LLScrollListCtrl* = NULL);
  132. void setWidth(S32 width);
  133. S32 getWidth() const { return mWidth; }
  134. public:
  135. // Public data is fine so long as this remains a simple struct-like data class.
  136. // If it ever gets any smarter than that, these should all become private
  137. // with protected or public accessor methods added as needed. -MG
  138. std::string mName;
  139. std::string mSortingColumn;
  140. ESortDirection mSortDirection;
  141. LLUIString mLabel;
  142. F32 mRelWidth;
  143. BOOL mDynamicWidth;
  144. S32 mMaxContentWidth;
  145. S32 mIndex;
  146. LLScrollListCtrl* mParentCtrl;
  147. LLScrollColumnHeader* mHeader;
  148. LLFontGL::HAlign mFontAlignment;
  149. private:
  150. S32 mWidth;
  151. };
  152. #endif