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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llscrolllistitem.cpp
  3.  * @brief Scroll lists are composed of rows (items), each of which 
  4.  * contains columns (cells).
  5.  *
  6.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2001-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. #include "linden_common.h"
  34. #include "llscrolllistitem.h"
  35. #include "llrect.h"
  36. #include "llui.h"
  37. //---------------------------------------------------------------------------
  38. // LLScrollListItem
  39. //---------------------------------------------------------------------------
  40. LLScrollListItem::LLScrollListItem( const Params& p )
  41. : mSelected(FALSE),
  42. mHighlighted(FALSE),
  43. mEnabled(p.enabled),
  44. mUserdata(p.userdata),
  45. mItemValue(p.value)
  46. {
  47. }
  48. LLScrollListItem::~LLScrollListItem()
  49. {
  50. std::for_each(mColumns.begin(), mColumns.end(), DeletePointer());
  51. }
  52. void LLScrollListItem::addColumn(const LLScrollListCell::Params& p)
  53. {
  54. mColumns.push_back(LLScrollListCell::create(p));
  55. }
  56. void LLScrollListItem::setNumColumns(S32 columns)
  57. {
  58. S32 prev_columns = mColumns.size();
  59. if (columns < prev_columns)
  60. {
  61. std::for_each(mColumns.begin()+columns, mColumns.end(), DeletePointer());
  62. }
  63. mColumns.resize(columns);
  64. for (S32 col = prev_columns; col < columns; ++col)
  65. {
  66. mColumns[col] = NULL;
  67. }
  68. }
  69. void LLScrollListItem::setColumn( S32 column, LLScrollListCell *cell )
  70. {
  71. if (column < (S32)mColumns.size())
  72. {
  73. delete mColumns[column];
  74. mColumns[column] = cell;
  75. }
  76. else
  77. {
  78. llerrs << "LLScrollListItem::setColumn: bad column: " << column << llendl;
  79. }
  80. }
  81. S32 LLScrollListItem::getNumColumns() const
  82. {
  83. return mColumns.size();
  84. }
  85. LLScrollListCell* LLScrollListItem::getColumn(const S32 i) const
  86. {
  87. if (0 <= i && i < (S32)mColumns.size())
  88. {
  89. return mColumns[i];
  90. return NULL;
  91. }
  92. std::string LLScrollListItem::getContentsCSV() const
  93. {
  94. std::string ret;
  95. S32 count = getNumColumns();
  96. for (S32 i=0; i<count; ++i)
  97. {
  98. ret += getColumn(i)->getValue().asString();
  99. if (i < count-1)
  100. {
  101. ret += ", ";
  102. }
  103. }
  104. return ret;
  105. }
  106. void LLScrollListItem::draw(const LLRect& rect, const LLColor4& fg_color, const LLColor4& bg_color, const LLColor4& highlight_color, S32 column_padding)
  107. {
  108. // draw background rect
  109. gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
  110. LLRect bg_rect = rect;
  111. gl_rect_2d( bg_rect, bg_color );
  112. S32 cur_x = rect.mLeft;
  113. S32 num_cols = getNumColumns();
  114. S32 cur_col = 0;
  115. for (LLScrollListCell* cell = getColumn(0); cur_col < num_cols; cell = getColumn(++cur_col))
  116. {
  117. // Two ways a cell could be hidden
  118. if (cell->getWidth() < 0
  119. || !cell->getVisible()) continue;
  120. LLUI::pushMatrix();
  121. {
  122. LLUI::translate((F32) cur_x, (F32) rect.mBottom, 0.0f);
  123. cell->draw( fg_color, highlight_color );
  124. }
  125. LLUI::popMatrix();
  126. cur_x += cell->getWidth() + column_padding;
  127. }
  128. }