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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llinspect.cpp
  3.  *
  4.  * $LicenseInfo:firstyear=2009&license=viewergpl$
  5.  * 
  6.  * Copyright (c) 2009-2010, Linden Research, Inc.
  7.  * 
  8.  * Second Life Viewer Source Code
  9.  * The source code in this file ("Source Code") is provided by Linden Lab
  10.  * to you under the terms of the GNU General Public License, version 2.0
  11.  * ("GPL"), unless you have obtained a separate licensing agreement
  12.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  13.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  14.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  15.  * 
  16.  * There are special exceptions to the terms and conditions of the GPL as
  17.  * it is applied to this Source Code. View the full text of the exception
  18.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  19.  * online at
  20.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  21.  * 
  22.  * By copying, modifying or distributing this software, you acknowledge
  23.  * that you have read and understood your obligations described above,
  24.  * and agree to abide by those obligations.
  25.  * 
  26.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  27.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  28.  * COMPLETENESS OR PERFORMANCE.
  29.  * $/LicenseInfo$
  30.  */
  31. #include "llviewerprecompiledheaders.h"
  32. #include "llinspect.h"
  33. #include "lltooltip.h"
  34. #include "llcontrol.h" // LLCachedControl
  35. #include "llui.h" // LLUI::sSettingsGroups
  36. #include "llviewermenu.h"
  37. LLInspect::LLInspect(const LLSD& key)
  38. : LLFloater(key),
  39. mCloseTimer(),
  40. mOpenTimer()
  41. {
  42. }
  43. LLInspect::~LLInspect()
  44. {
  45. }
  46. // virtual
  47. void LLInspect::draw()
  48. {
  49. static LLCachedControl<F32> FADE_TIME(*LLUI::sSettingGroups["config"], "InspectorFadeTime", 1.f);
  50. static LLCachedControl<F32> STAY_TIME(*LLUI::sSettingGroups["config"], "InspectorShowTime", 1.f);
  51. if (mOpenTimer.getStarted())
  52. {
  53. LLFloater::draw();
  54. if (mOpenTimer.getElapsedTimeF32() > STAY_TIME)
  55. {
  56. mOpenTimer.stop();
  57. mCloseTimer.start();
  58. }
  59. }
  60. else if (mCloseTimer.getStarted())
  61. {
  62. F32 alpha = clamp_rescale(mCloseTimer.getElapsedTimeF32(), 0.f, FADE_TIME, 1.f, 0.f);
  63. LLViewDrawContext context(alpha);
  64. LLFloater::draw();
  65. if (mCloseTimer.getElapsedTimeF32() > FADE_TIME)
  66. {
  67. closeFloater(false);
  68. }
  69. }
  70. else
  71. {
  72. LLFloater::draw();
  73. }
  74. }
  75. // virtual
  76. void LLInspect::onOpen(const LLSD& data)
  77. {
  78. LLFloater::onOpen(data);
  79. mCloseTimer.stop();
  80. mOpenTimer.start();
  81. }
  82. // virtual
  83. void LLInspect::onFocusLost()
  84. {
  85. LLFloater::onFocusLost();
  86. // Start closing when we lose focus
  87. mCloseTimer.start();
  88. mOpenTimer.stop();
  89. }
  90. // virtual
  91. BOOL LLInspect::handleHover(S32 x, S32 y, MASK mask)
  92. {
  93. mOpenTimer.pause();
  94. return LLView::handleHover(x, y, mask);
  95. }
  96. BOOL LLInspect::handleToolTip(S32 x, S32 y, MASK mask)
  97. {
  98. BOOL handled = FALSE;
  99. //delegate handling of tooltip to the hovered child
  100. LLView* child_handler = childFromPoint(x,y);
  101. if (child_handler && !child_handler->getToolTip().empty())// show tooltip if a view has non-empty tooltip message
  102. {
  103. //build LLInspector params to get correct tooltip setting, etc. background image
  104. LLInspector::Params params;
  105. params.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
  106. params.message = child_handler->getToolTip();
  107. //set up delay if there is no visible tooltip at this moment
  108. params.delay_time =  LLToolTipMgr::instance().toolTipVisible() ? 0.f : LLUI::sSettingGroups["config"]->getF32( "ToolTipDelay" );
  109. LLToolTipMgr::instance().show(params);
  110. handled = TRUE;
  111. }
  112. return handled;
  113. }
  114. // virtual
  115. void LLInspect::onMouseLeave(S32 x, S32 y, MASK mask)
  116. {
  117. mOpenTimer.unpause();
  118. }
  119. bool LLInspect::childHasVisiblePopupMenu()
  120. {
  121. // Child text-box may spawn a pop-up menu, if mouse is over the menu, Inspector 
  122. // will hide(which is not expected).
  123. // This is an attempt to find out if child control has spawned a menu.
  124. LLView* child_menu = gMenuHolder->getVisibleMenu();
  125. if(child_menu)
  126. {
  127. LLRect floater_rc = calcScreenRect();
  128. LLRect menu_screen_rc = child_menu->calcScreenRect();
  129. S32 mx, my;
  130. LLUI::getMousePositionScreen(&mx, &my);
  131. // This works wrong if we spawn a menu near Inspector and menu overlaps Inspector.
  132. if(floater_rc.overlaps(menu_screen_rc) && menu_screen_rc.pointInRect(mx, my))
  133. {
  134. return true;
  135. }
  136. }
  137. return false;
  138. }