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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llfloaterbeacons.cpp
  3.  * @brief Front-end to LLPipeline controls for highlighting various kinds of objects.
  4.  * @author Coco
  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 "llviewerprecompiledheaders.h"
  34. #include "llfloaterbeacons.h"
  35. #include "llviewercontrol.h"
  36. #include "lluictrlfactory.h"
  37. #include "llcheckboxctrl.h"
  38. #include "pipeline.h"
  39. LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed)
  40. : LLFloater(seed)
  41. {
  42. // LLUICtrlFactory::getInstance()->buildFloater(this, "floater_beacons.xml");
  43. // Initialize pipeline states from saved settings.
  44. // OK to do at floater constructor time because beacons do not display unless the floater is open
  45. // therefore it is OK to not initialize the pipeline state before needed.
  46. // Note also that we should replace those pipeline statics with direct lookup of the saved settings
  47. // eliminating the need to keep these states in sync.
  48. LLPipeline::setRenderScriptedTouchBeacons(gSavedSettings.getBOOL("scripttouchbeacon"));
  49. LLPipeline::setRenderScriptedBeacons(     gSavedSettings.getBOOL("scriptsbeacon"));
  50. LLPipeline::setRenderPhysicalBeacons(     gSavedSettings.getBOOL("physicalbeacon"));
  51. LLPipeline::setRenderSoundBeacons(        gSavedSettings.getBOOL("soundsbeacon"));
  52. LLPipeline::setRenderParticleBeacons(     gSavedSettings.getBOOL("particlesbeacon"));
  53. LLPipeline::setRenderHighlights(          gSavedSettings.getBOOL("renderhighlights"));
  54. LLPipeline::setRenderBeacons(             gSavedSettings.getBOOL("renderbeacons"));
  55. mCommitCallbackRegistrar.add("Beacons.UICheck", boost::bind(&LLFloaterBeacons::onClickUICheck, this,_1));
  56. }
  57. BOOL LLFloaterBeacons::postBuild()
  58. {
  59. return TRUE;
  60. }
  61. // Callback attached to each check box control to both affect their main purpose
  62. // and to implement the couple screwy interdependency rules that some have.
  63. void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl)
  64. {
  65. LLCheckBoxCtrl *check = (LLCheckBoxCtrl *)ctrl;
  66. std::string name = check->getName();
  67. if(     name == "touch_only")
  68. {
  69. LLPipeline::toggleRenderScriptedTouchBeacons(NULL);
  70. // Don't allow both to be ON at the same time. Toggle the other one off if both now on.
  71. if (
  72. LLPipeline::getRenderScriptedTouchBeacons(NULL) &&
  73. LLPipeline::getRenderScriptedBeacons(NULL) )
  74. {
  75. LLPipeline::setRenderScriptedBeacons(FALSE);
  76. getChild<LLCheckBoxCtrl>("scripted")->setControlValue(LLSD(FALSE));
  77. getChild<LLCheckBoxCtrl>("touch_only")->setControlValue(LLSD(TRUE)); // just to be sure it's in sync with llpipeline
  78. }
  79. }
  80. else if(name == "scripted")
  81. {
  82. LLPipeline::toggleRenderScriptedBeacons(NULL);
  83. // Don't allow both to be ON at the same time. Toggle the other one off if both now on.
  84. if (
  85. LLPipeline::getRenderScriptedTouchBeacons(NULL) &&
  86. LLPipeline::getRenderScriptedBeacons(NULL) )
  87. {
  88. LLPipeline::setRenderScriptedTouchBeacons(FALSE);
  89. getChild<LLCheckBoxCtrl>("touch_only")->setControlValue(LLSD(FALSE));
  90. getChild<LLCheckBoxCtrl>("scripted")->setControlValue(LLSD(TRUE)); // just to be sure it's in sync with llpipeline
  91. }
  92. }
  93. else if(name == "physical")       LLPipeline::setRenderPhysicalBeacons(check->get());
  94. else if(name == "sounds")         LLPipeline::setRenderSoundBeacons(check->get());
  95. else if(name == "particles")      LLPipeline::setRenderParticleBeacons(check->get());
  96. else if(name == "highlights")
  97. {
  98. LLPipeline::toggleRenderHighlights(NULL);
  99. // Don't allow both to be OFF at the same time. Toggle the other one on if both now off.
  100. if (
  101. !LLPipeline::getRenderBeacons(NULL) &&
  102. !LLPipeline::getRenderHighlights(NULL) )
  103. {
  104. LLPipeline::setRenderBeacons(TRUE);
  105. getChild<LLCheckBoxCtrl>("beacons")->setControlValue(LLSD(TRUE));
  106. getChild<LLCheckBoxCtrl>("highlights")->setControlValue(LLSD(FALSE)); // just to be sure it's in sync with llpipeline
  107. }
  108. }
  109. else if(name == "beacons")
  110. {
  111. LLPipeline::toggleRenderBeacons(NULL);
  112. // Don't allow both to be OFF at the same time. Toggle the other one on if both now off.
  113. if (
  114. !LLPipeline::getRenderBeacons(NULL) &&
  115. !LLPipeline::getRenderHighlights(NULL) )
  116. {
  117. LLPipeline::setRenderHighlights(TRUE);
  118. getChild<LLCheckBoxCtrl>("highlights")->setControlValue(LLSD(TRUE));
  119. getChild<LLCheckBoxCtrl>("beacons")->setControlValue(LLSD(FALSE)); // just to be sure it's in sync with llpipeline
  120. }
  121. }
  122. }