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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lltoolview.cpp
  3.  * @brief A UI contains for tool palette tools
  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. #include "llviewerprecompiledheaders.h"
  33. #include "lltoolview.h"
  34. #include "llfontgl.h"
  35. #include "llrect.h"
  36. #include "llagent.h"
  37. #include "llbutton.h"
  38. #include "llpanel.h"
  39. #include "lltool.h"
  40. #include "lltoolmgr.h"
  41. #include "lltextbox.h"
  42. #include "llresmgr.h"
  43. LLToolContainer::LLToolContainer(LLToolView* parent)
  44. : mParent(parent),
  45. mButton(NULL),
  46. mPanel(NULL),
  47. mTool(NULL)
  48. { }
  49. LLToolContainer::~LLToolContainer()
  50. {
  51. // mParent is a pointer to the tool view
  52. // mButton is owned by the tool view
  53. // mPanel is owned by the tool view
  54. delete mTool;
  55. mTool = NULL;
  56. }
  57. LLToolView::LLToolView(const std::string& name, const LLRect& rect)
  58. : mButtonCount(0)
  59. {
  60. LLView::init(LLView::Params().name(name).rect(rect).mouse_opaque(true));
  61. }
  62. LLToolView::~LLToolView()
  63. {
  64. for_each(mContainList.begin(), mContainList.end(), DeletePointer());
  65. mContainList.clear();
  66. }
  67. //*TODO:translate?
  68. // void LLToolView::addTool(const std::string& icon_off, const std::string& icon_on, LLPanel* panel, LLTool* tool, LLView* hoverView, const char* label)
  69. // {
  70. //  llassert(tool);
  71. //  LLToolContainer* contain = new LLToolContainer(this);
  72. //  LLRect btn_rect = getButtonRect(mButtonCount);
  73. //  contain->mButton = new LLButton("ToolBtn",
  74. //  btn_rect, 
  75. //  icon_off,
  76. //  icon_on, 
  77. //  "",
  78. //  &LLToolView::onClickToolButton,
  79. //  contain,
  80. //  LLFontGL::getFontSansSerif());
  81. //  contain->mPanel = panel;
  82. //  contain->mTool = tool;
  83. //  addChild(contain->mButton);
  84. //  mButtonCount++;
  85. //  const S32 LABEL_TOP_SPACING = 0;
  86. //  const LLFontGL* font = LLResMgr::getInstance()->getRes( LLFONT_SANSSERIF_SMALL );
  87. //  S32 label_width = font->getWidth( label );
  88. //  LLRect label_rect;
  89. //  label_rect.setLeftTopAndSize( 
  90. //  btn_rect.mLeft + btn_rect.getWidth() / 2 - label_width / 2,
  91. //  btn_rect.mBottom - LABEL_TOP_SPACING,
  92. //  label_width, 
  93. //  llfloor(font->getLineHeight()));
  94. //  addChild( new LLTextBox( "tool label", label_rect, label, font ) );
  95. //  // Can optionally ignore panel
  96. //  if (contain->mPanel)
  97. //  {
  98. //  contain->mPanel->setBackgroundVisible( FALSE );
  99. //  contain->mPanel->setBorderVisible( FALSE );
  100. //  addChild(contain->mPanel);
  101. //  }
  102. //  mContainList.push_back(contain);
  103. // }
  104. LLRect LLToolView::getButtonRect(S32 button_index)
  105. {
  106. const S32 HPAD = 7;
  107. const S32 VPAD = 7;
  108. const S32 TOOL_SIZE = 32;
  109. const S32 HORIZ_SPACING = TOOL_SIZE + 5;
  110. const S32 VERT_SPACING = TOOL_SIZE + 14;
  111. S32 tools_per_row = getRect().getWidth() / HORIZ_SPACING;
  112. S32 row = button_index / tools_per_row;
  113. S32 column = button_index % tools_per_row; 
  114. // Build the rectangle, recalling the origin is at lower left
  115. // and we want the icons to build down from the top.
  116. LLRect rect;
  117. rect.setLeftTopAndSize( HPAD + (column * HORIZ_SPACING),
  118. -VPAD + getRect().getHeight() - (row * VERT_SPACING),
  119. TOOL_SIZE,
  120. TOOL_SIZE
  121. );
  122. return rect;
  123. }
  124. void LLToolView::draw()
  125. {
  126. // turn off highlighting for all containers 
  127. // and hide all option panels except for the selected one.
  128. LLTool* selected = LLToolMgr::getInstance()->getCurrentToolset()->getSelectedTool();
  129. for (contain_list_t::iterator iter = mContainList.begin();
  130.  iter != mContainList.end(); ++iter)
  131. {
  132. LLToolContainer* contain = *iter;
  133. BOOL state = (contain->mTool == selected);
  134. contain->mButton->setToggleState( state );
  135. if (contain->mPanel)
  136. {
  137. contain->mPanel->setVisible( state );
  138. }
  139. }
  140. // Draw children normally
  141. LLView::draw();
  142. }
  143. // protected
  144. LLToolContainer* LLToolView::findToolContainer( LLTool *tool )
  145. {
  146. // Find the container for this tool
  147. llassert( tool );
  148. for (contain_list_t::iterator iter = mContainList.begin();
  149.  iter != mContainList.end(); ++iter)
  150. {
  151. LLToolContainer* contain = *iter;
  152. if( contain->mTool == tool )
  153. {
  154. return contain;
  155. }
  156. }
  157. llerrs << "LLToolView::findToolContainer - tool not found" << llendl;
  158. return NULL;
  159. }
  160. // static
  161. void LLToolView::onClickToolButton(void* userdata)
  162. {
  163. LLToolContainer* clicked = (LLToolContainer*) userdata;
  164. // Switch to this one
  165. LLToolMgr::getInstance()->getCurrentToolset()->selectTool( clicked->mTool );
  166. }