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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lltextbox.cpp
  3.  * @brief A text display widget
  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 "linden_common.h"
  33. #define LLTEXTBOX_CPP
  34. #include "lltextbox.h"
  35. #include "lluictrlfactory.h"
  36. #include "llfocusmgr.h"
  37. #include "llwindow.h"
  38. #include "llurlregistry.h"
  39. #include "llstyle.h"
  40. static LLDefaultChildRegistry::Register<LLTextBox> r("text");
  41. // Compiler optimization, generate extern template
  42. template class LLTextBox* LLView::getChild<class LLTextBox>(
  43. const std::string& name, BOOL recurse) const;
  44. LLTextBox::LLTextBox(const LLTextBox::Params& p)
  45. : LLTextBase(p),
  46. mClickedCallback(NULL)
  47. {}
  48. LLTextBox::~LLTextBox()
  49. {}
  50. BOOL LLTextBox::handleMouseDown(S32 x, S32 y, MASK mask)
  51. {
  52. BOOL handled = LLTextBase::handleMouseDown(x, y, mask);
  53. if (getSoundFlags() & MOUSE_DOWN)
  54. {
  55. make_ui_sound("UISndClick");
  56. }
  57. if (!handled && mClickedCallback)
  58. {
  59. // Route future Mouse messages here preemptively.  (Release on mouse up.)
  60. gFocusMgr.setMouseCapture( this );
  61. handled = TRUE;
  62. }
  63. return handled;
  64. }
  65. BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)
  66. {
  67. BOOL handled = FALSE;
  68. if (getSoundFlags() & MOUSE_UP)
  69. {
  70. make_ui_sound("UISndClickRelease");
  71. }
  72. // We only handle the click if the click both started and ended within us
  73. if (hasMouseCapture())
  74. {
  75. // Release the mouse
  76. gFocusMgr.setMouseCapture( NULL );
  77. // DO THIS AT THE VERY END to allow the button  to be destroyed
  78. // as a result of being clicked.  If mouseup in the widget,
  79. // it's been clicked
  80. if (mClickedCallback && !handled)
  81. {
  82. mClickedCallback();
  83. handled = TRUE;
  84. }
  85. }
  86. else
  87. {
  88. handled = LLTextBase::handleMouseUp(x, y, mask);
  89. }
  90. return handled;
  91. }
  92. BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)
  93. {
  94. BOOL handled = LLTextBase::handleHover(x, y, mask);
  95. if (!handled && mClickedCallback)
  96. {
  97. // Clickable text boxes change the cursor to a hand
  98. LLUI::getWindow()->setCursor(UI_CURSOR_HAND);
  99. return TRUE;
  100. }
  101. return handled;
  102. }
  103. void LLTextBox::setText(const LLStringExplicit& text , const LLStyle::Params& input_params )
  104. {
  105. // does string argument insertion
  106. mText.assign(text);
  107. LLTextBase::setText(mText.getString(), input_params );
  108. }
  109. void LLTextBox::setClickedCallback( boost::function<void (void*)> cb, void* userdata /*= NULL */ )
  110. {
  111. mClickedCallback = boost::bind(cb, userdata);
  112. }
  113. S32 LLTextBox::getTextPixelWidth()
  114. {
  115. return getTextBoundingRect().getWidth();
  116. }
  117. S32 LLTextBox::getTextPixelHeight()
  118. {
  119. return getTextBoundingRect().getHeight();
  120. }
  121. LLSD LLTextBox::getValue() const
  122. {
  123. return LLSD(getText());
  124. }
  125. BOOL LLTextBox::setTextArg( const std::string& key, const LLStringExplicit& text )
  126. {
  127. mText.setArg(key, text);
  128. LLTextBase::setText(mText.getString());
  129. return TRUE;
  130. }
  131. void LLTextBox::reshapeToFitText()
  132. {
  133. reflow();
  134. S32 width = getTextPixelWidth();
  135. S32 height = getTextPixelHeight();
  136. reshape( width + 2 * mHPad, height + 2 * mVPad, FALSE );
  137. }
  138. void LLTextBox::onUrlLabelUpdated(const std::string &url, const std::string &label)
  139. {
  140. needsReflow();
  141. }