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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llfloatersettingsdebug.cpp
  3.  * @brief floater for debugging internal viewer settings
  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 "llfloatersettingsdebug.h"
  34. #include "llfloater.h"
  35. #include "lluictrlfactory.h"
  36. //#include "llfirstuse.h"
  37. #include "llcombobox.h"
  38. #include "llspinctrl.h"
  39. #include "llcolorswatch.h"
  40. #include "llviewercontrol.h"
  41. #include "lltexteditor.h"
  42. LLFloaterSettingsDebug::LLFloaterSettingsDebug(const LLSD& key) 
  43. : LLFloater(key)
  44. {
  45. //LLUICtrlFactory::getInstance()->buildFloater(this, "floater_settings_debug.xml");
  46. mCommitCallbackRegistrar.add("SettingSelect", boost::bind(&LLFloaterSettingsDebug::onSettingSelect, this,_1));
  47. mCommitCallbackRegistrar.add("CommitSettings", boost::bind(&LLFloaterSettingsDebug::onCommitSettings, this));
  48. mCommitCallbackRegistrar.add("ClickDefault", boost::bind(&LLFloaterSettingsDebug::onClickDefault, this));
  49. }
  50. LLFloaterSettingsDebug::~LLFloaterSettingsDebug()
  51. {}
  52. BOOL LLFloaterSettingsDebug::postBuild()
  53. {
  54. LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
  55. struct f : public LLControlGroup::ApplyFunctor
  56. {
  57. LLComboBox* combo;
  58. f(LLComboBox* c) : combo(c) {}
  59. virtual void apply(const std::string& name, LLControlVariable* control)
  60. {
  61. if (!control->isHiddenFromSettingsEditor())
  62. {
  63. combo->add(name, (void*)control);
  64. }
  65. }
  66. } func(settings_combo);
  67. std::string key = getKey().asString();
  68. if (key == "all" || key == "base")
  69. {
  70. gSavedSettings.applyToAll(&func);
  71. }
  72. if (key == "all" || key == "account")
  73. {
  74. gSavedPerAccountSettings.applyToAll(&func);
  75. }
  76. settings_combo->sortByName();
  77. settings_combo->updateSelection();
  78. mComment = getChild<LLTextEditor>("comment_text");
  79. return TRUE;
  80. }
  81. void LLFloaterSettingsDebug::draw()
  82. {
  83. LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
  84. LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
  85. updateControl(controlp);
  86. LLFloater::draw();
  87. }
  88. //static 
  89. void LLFloaterSettingsDebug::onSettingSelect(LLUICtrl* ctrl)
  90. {
  91. LLComboBox* combo_box = (LLComboBox*)ctrl;
  92. LLControlVariable* controlp = (LLControlVariable*)combo_box->getCurrentUserdata();
  93. updateControl(controlp);
  94. }
  95. void LLFloaterSettingsDebug::onCommitSettings()
  96. {
  97. LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
  98. LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
  99. if (!controlp)
  100. {
  101. return;
  102. }
  103. LLVector3 vector;
  104. LLVector3d vectord;
  105. LLRect rect;
  106. LLColor4 col4;
  107. LLColor3 col3;
  108. LLColor4U col4U;
  109. LLColor4 color_with_alpha;
  110. switch(controlp->type())
  111. {
  112.   case TYPE_U32:
  113. controlp->set(childGetValue("val_spinner_1"));
  114. break;
  115.   case TYPE_S32:
  116. controlp->set(childGetValue("val_spinner_1"));
  117. break;
  118.   case TYPE_F32:
  119. controlp->set(LLSD(childGetValue("val_spinner_1").asReal()));
  120. break;
  121.   case TYPE_BOOLEAN:
  122. controlp->set(childGetValue("boolean_combo"));
  123. break;
  124.   case TYPE_STRING:
  125. controlp->set(LLSD(childGetValue("val_text").asString()));
  126. break;
  127.   case TYPE_VEC3:
  128. vector.mV[VX] = (F32)childGetValue("val_spinner_1").asReal();
  129. vector.mV[VY] = (F32)childGetValue("val_spinner_2").asReal();
  130. vector.mV[VZ] = (F32)childGetValue("val_spinner_3").asReal();
  131. controlp->set(vector.getValue());
  132. break;
  133.   case TYPE_VEC3D:
  134. vectord.mdV[VX] = childGetValue("val_spinner_1").asReal();
  135. vectord.mdV[VY] = childGetValue("val_spinner_2").asReal();
  136. vectord.mdV[VZ] = childGetValue("val_spinner_3").asReal();
  137. controlp->set(vectord.getValue());
  138. break;
  139.   case TYPE_RECT:
  140. rect.mLeft = childGetValue("val_spinner_1").asInteger();
  141. rect.mRight = childGetValue("val_spinner_2").asInteger();
  142. rect.mBottom = childGetValue("val_spinner_3").asInteger();
  143. rect.mTop = childGetValue("val_spinner_4").asInteger();
  144. controlp->set(rect.getValue());
  145. break;
  146.   case TYPE_COL4:
  147. col3.setValue(childGetValue("val_color_swatch"));
  148. col4 = LLColor4(col3, (F32)childGetValue("val_spinner_4").asReal());
  149. controlp->set(col4.getValue());
  150. break;
  151.   case TYPE_COL3:
  152. controlp->set(childGetValue("val_color_swatch"));
  153. //col3.mV[VRED] = (F32)floaterp->childGetValue("val_spinner_1").asC();
  154. //col3.mV[VGREEN] = (F32)floaterp->childGetValue("val_spinner_2").asReal();
  155. //col3.mV[VBLUE] = (F32)floaterp->childGetValue("val_spinner_3").asReal();
  156. //controlp->set(col3.getValue());
  157. break;
  158.   default:
  159. break;
  160. }
  161. }
  162. // static
  163. void LLFloaterSettingsDebug::onClickDefault()
  164. {
  165. LLComboBox* settings_combo = getChild<LLComboBox>("settings_combo");
  166. LLControlVariable* controlp = (LLControlVariable*)settings_combo->getCurrentUserdata();
  167. if (controlp)
  168. {
  169. controlp->resetToDefault();
  170. updateControl(controlp);
  171. }
  172. }
  173. // we've switched controls, or doing per-frame update, so update spinners, etc.
  174. void LLFloaterSettingsDebug::updateControl(LLControlVariable* controlp)
  175. {
  176. LLSpinCtrl* spinner1 = getChild<LLSpinCtrl>("val_spinner_1");
  177. LLSpinCtrl* spinner2 = getChild<LLSpinCtrl>("val_spinner_2");
  178. LLSpinCtrl* spinner3 = getChild<LLSpinCtrl>("val_spinner_3");
  179. LLSpinCtrl* spinner4 = getChild<LLSpinCtrl>("val_spinner_4");
  180. LLColorSwatchCtrl* color_swatch = getChild<LLColorSwatchCtrl>("val_color_swatch");
  181. if (!spinner1 || !spinner2 || !spinner3 || !spinner4 || !color_swatch)
  182. {
  183. llwarns << "Could not find all desired controls by name"
  184. << llendl;
  185. return;
  186. }
  187. spinner1->setVisible(FALSE);
  188. spinner2->setVisible(FALSE);
  189. spinner3->setVisible(FALSE);
  190. spinner4->setVisible(FALSE);
  191. color_swatch->setVisible(FALSE);
  192. childSetVisible("val_text", FALSE);
  193. mComment->setText(LLStringUtil::null);
  194. if (controlp)
  195. {
  196. eControlType type = controlp->type();
  197. //hide combo box only for non booleans, otherwise this will result in the combo box closing every frame
  198. childSetVisible("boolean_combo", type == TYPE_BOOLEAN);
  199. mComment->setText(controlp->getComment());
  200. spinner1->setMaxValue(F32_MAX);
  201. spinner2->setMaxValue(F32_MAX);
  202. spinner3->setMaxValue(F32_MAX);
  203. spinner4->setMaxValue(F32_MAX);
  204. spinner1->setMinValue(-F32_MAX);
  205. spinner2->setMinValue(-F32_MAX);
  206. spinner3->setMinValue(-F32_MAX);
  207. spinner4->setMinValue(-F32_MAX);
  208. if (!spinner1->hasFocus())
  209. {
  210. spinner1->setIncrement(0.1f);
  211. }
  212. if (!spinner2->hasFocus())
  213. {
  214. spinner2->setIncrement(0.1f);
  215. }
  216. if (!spinner3->hasFocus())
  217. {
  218. spinner3->setIncrement(0.1f);
  219. }
  220. if (!spinner4->hasFocus())
  221. {
  222. spinner4->setIncrement(0.1f);
  223. }
  224. LLSD sd = controlp->get();
  225. switch(type)
  226. {
  227.   case TYPE_U32:
  228. spinner1->setVisible(TRUE);
  229. spinner1->setLabel(std::string("value")); // Debug, don't translate
  230. if (!spinner1->hasFocus())
  231. {
  232. spinner1->setValue(sd);
  233. spinner1->setMinValue((F32)U32_MIN);
  234. spinner1->setMaxValue((F32)U32_MAX);
  235. spinner1->setIncrement(1.f);
  236. spinner1->setPrecision(0);
  237. }
  238. break;
  239.   case TYPE_S32:
  240. spinner1->setVisible(TRUE);
  241. spinner1->setLabel(std::string("value")); // Debug, don't translate
  242. if (!spinner1->hasFocus())
  243. {
  244. spinner1->setValue(sd);
  245. spinner1->setMinValue((F32)S32_MIN);
  246. spinner1->setMaxValue((F32)S32_MAX);
  247. spinner1->setIncrement(1.f);
  248. spinner1->setPrecision(0);
  249. }
  250. break;
  251.   case TYPE_F32:
  252. spinner1->setVisible(TRUE);
  253. spinner1->setLabel(std::string("value")); // Debug, don't translate
  254. if (!spinner1->hasFocus())
  255. {
  256. spinner1->setPrecision(3);
  257. spinner1->setValue(sd);
  258. }
  259. break;
  260.   case TYPE_BOOLEAN:
  261. if (!childHasFocus("boolean_combo"))
  262. {
  263. if (sd.asBoolean())
  264. {
  265. childSetValue("boolean_combo", LLSD("true"));
  266. }
  267. else
  268. {
  269. childSetValue("boolean_combo", LLSD(""));
  270. }
  271. }
  272. break;
  273.   case TYPE_STRING:
  274. childSetVisible("val_text", TRUE);
  275. if (!childHasFocus("val_text"))
  276. {
  277. childSetValue("val_text", sd);
  278. }
  279. break;
  280.   case TYPE_VEC3:
  281.   {
  282. LLVector3 v;
  283. v.setValue(sd);
  284. spinner1->setVisible(TRUE);
  285. spinner1->setLabel(std::string("X"));
  286. spinner2->setVisible(TRUE);
  287. spinner2->setLabel(std::string("Y"));
  288. spinner3->setVisible(TRUE);
  289. spinner3->setLabel(std::string("Z"));
  290. if (!spinner1->hasFocus())
  291. {
  292. spinner1->setPrecision(3);
  293. spinner1->setValue(v[VX]);
  294. }
  295. if (!spinner2->hasFocus())
  296. {
  297. spinner2->setPrecision(3);
  298. spinner2->setValue(v[VY]);
  299. }
  300. if (!spinner3->hasFocus())
  301. {
  302. spinner3->setPrecision(3);
  303. spinner3->setValue(v[VZ]);
  304. }
  305. break;
  306.   }
  307.   case TYPE_VEC3D:
  308.   {
  309. LLVector3d v;
  310. v.setValue(sd);
  311. spinner1->setVisible(TRUE);
  312. spinner1->setLabel(std::string("X"));
  313. spinner2->setVisible(TRUE);
  314. spinner2->setLabel(std::string("Y"));
  315. spinner3->setVisible(TRUE);
  316. spinner3->setLabel(std::string("Z"));
  317. if (!spinner1->hasFocus())
  318. {
  319. spinner1->setPrecision(3);
  320. spinner1->setValue(v[VX]);
  321. }
  322. if (!spinner2->hasFocus())
  323. {
  324. spinner2->setPrecision(3);
  325. spinner2->setValue(v[VY]);
  326. }
  327. if (!spinner3->hasFocus())
  328. {
  329. spinner3->setPrecision(3);
  330. spinner3->setValue(v[VZ]);
  331. }
  332. break;
  333.   }
  334.   case TYPE_RECT:
  335.   {
  336. LLRect r;
  337. r.setValue(sd);
  338. spinner1->setVisible(TRUE);
  339. spinner1->setLabel(std::string("Left"));
  340. spinner2->setVisible(TRUE);
  341. spinner2->setLabel(std::string("Right"));
  342. spinner3->setVisible(TRUE);
  343. spinner3->setLabel(std::string("Bottom"));
  344. spinner4->setVisible(TRUE);
  345. spinner4->setLabel(std::string("Top"));
  346. if (!spinner1->hasFocus())
  347. {
  348. spinner1->setPrecision(0);
  349. spinner1->setValue(r.mLeft);
  350. }
  351. if (!spinner2->hasFocus())
  352. {
  353. spinner2->setPrecision(0);
  354. spinner2->setValue(r.mRight);
  355. }
  356. if (!spinner3->hasFocus())
  357. {
  358. spinner3->setPrecision(0);
  359. spinner3->setValue(r.mBottom);
  360. }
  361. if (!spinner4->hasFocus())
  362. {
  363. spinner4->setPrecision(0);
  364. spinner4->setValue(r.mTop);
  365. }
  366. spinner1->setMinValue((F32)S32_MIN);
  367. spinner1->setMaxValue((F32)S32_MAX);
  368. spinner1->setIncrement(1.f);
  369. spinner2->setMinValue((F32)S32_MIN);
  370. spinner2->setMaxValue((F32)S32_MAX);
  371. spinner2->setIncrement(1.f);
  372. spinner3->setMinValue((F32)S32_MIN);
  373. spinner3->setMaxValue((F32)S32_MAX);
  374. spinner3->setIncrement(1.f);
  375. spinner4->setMinValue((F32)S32_MIN);
  376. spinner4->setMaxValue((F32)S32_MAX);
  377. spinner4->setIncrement(1.f);
  378. break;
  379.   }
  380.   case TYPE_COL4:
  381.   {
  382. LLColor4 clr;
  383. clr.setValue(sd);
  384. color_swatch->setVisible(TRUE);
  385. // only set if changed so color picker doesn't update
  386. if(clr != LLColor4(color_swatch->getValue()))
  387. {
  388. color_swatch->set(LLColor4(sd), TRUE, FALSE);
  389. }
  390. spinner4->setVisible(TRUE);
  391. spinner4->setLabel(std::string("Alpha"));
  392. if (!spinner4->hasFocus())
  393. {
  394. spinner4->setPrecision(3);
  395. spinner4->setMinValue(0.0);
  396. spinner4->setMaxValue(1.f);
  397. spinner4->setValue(clr.mV[VALPHA]);
  398. }
  399. break;
  400.   }
  401.   case TYPE_COL3:
  402.   {
  403. LLColor3 clr;
  404. clr.setValue(sd);
  405. color_swatch->setVisible(TRUE);
  406. color_swatch->setValue(sd);
  407. break;
  408.   }
  409.   default:
  410. mComment->setText(std::string("unknown"));
  411. break;
  412. }
  413. }
  414. }