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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llfloatergodtools.cpp
  3.  * @brief The on-screen rectangle with tool options.
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-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 "llfloatergodtools.h"
  34. #include "llcoord.h"
  35. #include "llfontgl.h"
  36. #include "llframetimer.h"
  37. #include "llgl.h"
  38. #include "llhost.h"
  39. #include "llnotificationsutil.h"
  40. #include "llregionflags.h"
  41. #include "llstring.h"
  42. #include "message.h"
  43. #include "llagent.h"
  44. #include "llbutton.h"
  45. #include "llcheckboxctrl.h"
  46. #include "llcombobox.h"
  47. #include "lldraghandle.h"
  48. #include "llfloater.h"
  49. #include "llfloaterreg.h"
  50. #include "llfocusmgr.h"
  51. #include "llfloatertopobjects.h"
  52. #include "lllineeditor.h"
  53. #include "llmenugl.h"
  54. #include "llresmgr.h"
  55. #include "llselectmgr.h"
  56. #include "llsky.h"
  57. #include "llspinctrl.h"
  58. #include "llstatusbar.h"
  59. #include "lltabcontainer.h"
  60. #include "lltextbox.h"
  61. #include "lluictrl.h"
  62. #include "llviewerparcelmgr.h"
  63. #include "llviewerregion.h"
  64. #include "llviewerwindow.h"
  65. #include "llworld.h"
  66. #include "llfloateravatarpicker.h"
  67. #include "llxfermanager.h"
  68. #include "llvlcomposition.h"
  69. #include "llsurface.h"
  70. #include "llviewercontrol.h"
  71. #include "lluictrlfactory.h"
  72. #include "lltrans.h"
  73. #include "lltransfertargetfile.h"
  74. #include "lltransfersourcefile.h"
  75. const F32 SECONDS_BETWEEN_UPDATE_REQUESTS = 5.0f;
  76. //*****************************************************************************
  77. // LLFloaterGodTools
  78. //*****************************************************************************
  79. void LLFloaterGodTools::onOpen(const LLSD& key)
  80. {
  81. center();
  82. setFocus(TRUE);
  83. //  LLPanel *panel = childGetVisibleTab("GodTools Tabs");
  84. //  if (panel)
  85. //  panel->setFocus(TRUE);
  86. if (mPanelObjectTools)
  87. mPanelObjectTools->setTargetAvatar(LLUUID::null);
  88. if (gAgent.getRegionHost() != mCurrentHost)
  89. {
  90. // we're in a new region
  91. sendRegionInfoRequest();
  92. }
  93. }
  94.  
  95. // static
  96. void LLFloaterGodTools::refreshAll()
  97. {
  98. LLFloaterGodTools* god_tools = LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools");
  99. if (god_tools)
  100. {
  101. if (gAgent.getRegionHost() != god_tools->mCurrentHost)
  102. {
  103. // we're in a new region
  104. god_tools->sendRegionInfoRequest();
  105. }
  106. }
  107. }
  108. LLFloaterGodTools::LLFloaterGodTools(const LLSD& key)
  109. : LLFloater(key),
  110. mCurrentHost(LLHost::invalid),
  111. mUpdateTimer()
  112. {
  113. mFactoryMap["grid"] = LLCallbackMap(createPanelGrid, this);
  114. mFactoryMap["region"] = LLCallbackMap(createPanelRegion, this);
  115. mFactoryMap["objects"] = LLCallbackMap(createPanelObjects, this);
  116. mFactoryMap["request"] = LLCallbackMap(createPanelRequest, this);
  117. // LLUICtrlFactory::getInstance()->buildFloater(this, "floater_god_tools.xml");
  118. }
  119. BOOL LLFloaterGodTools::postBuild()
  120. {
  121. sendRegionInfoRequest();
  122. childShowTab("GodTools Tabs", "region");
  123. return TRUE;
  124. }
  125. // static
  126. void* LLFloaterGodTools::createPanelGrid(void *userdata)
  127. {
  128. return new LLPanelGridTools();
  129. }
  130. // static
  131. void* LLFloaterGodTools::createPanelRegion(void *userdata)
  132. {
  133. LLFloaterGodTools* self = (LLFloaterGodTools*)userdata;
  134. self->mPanelRegionTools = new LLPanelRegionTools();
  135. return self->mPanelRegionTools;
  136. }
  137. // static
  138. void* LLFloaterGodTools::createPanelObjects(void *userdata)
  139. {
  140. LLFloaterGodTools* self = (LLFloaterGodTools*)userdata;
  141. self->mPanelObjectTools = new LLPanelObjectTools();
  142. return self->mPanelObjectTools;
  143. }
  144. // static
  145. void* LLFloaterGodTools::createPanelRequest(void *userdata)
  146. {
  147. return new LLPanelRequestTools();
  148. }
  149. LLFloaterGodTools::~LLFloaterGodTools()
  150. {
  151. // children automatically deleted
  152. }
  153. U32 LLFloaterGodTools::computeRegionFlags() const
  154. {
  155. U32 flags = gAgent.getRegion()->getRegionFlags();
  156. if (mPanelRegionTools) flags = mPanelRegionTools->computeRegionFlags(flags);
  157. if (mPanelObjectTools) flags = mPanelObjectTools->computeRegionFlags(flags);
  158. return flags;
  159. }
  160. void LLFloaterGodTools::updatePopup(LLCoordGL center, MASK mask)
  161. {
  162. }
  163. // virtual
  164. void LLFloaterGodTools::draw()
  165. {
  166. if (mCurrentHost == LLHost::invalid)
  167. {
  168. if (mUpdateTimer.getElapsedTimeF32() > SECONDS_BETWEEN_UPDATE_REQUESTS)
  169. {
  170. sendRegionInfoRequest();
  171. }
  172. }
  173. else if (gAgent.getRegionHost() != mCurrentHost)
  174. {
  175. sendRegionInfoRequest();
  176. }
  177. LLFloater::draw();
  178. }
  179. void LLFloaterGodTools::showPanel(const std::string& panel_name)
  180. {
  181. childShowTab("GodTools Tabs", panel_name);
  182. openFloater();
  183. LLPanel *panel = childGetVisibleTab("GodTools Tabs");
  184. if (panel)
  185. panel->setFocus(TRUE);
  186. }
  187. // static
  188. void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
  189. {
  190. llassert(msg);
  191. if (!msg) return;
  192. LLHost host = msg->getSender();
  193. if (host != gAgent.getRegionHost())
  194. {
  195. // update is for a different region than the one we're in
  196. return;
  197. }
  198. //const S32 SIM_NAME_BUF = 256;
  199. U32 region_flags;
  200. U8 sim_access;
  201. U8 agent_limit;
  202. std::string sim_name;
  203. U32 estate_id;
  204. U32 parent_estate_id;
  205. F32 water_height;
  206. F32 billable_factor;
  207. F32 object_bonus_factor;
  208. F32 terrain_raise_limit;
  209. F32 terrain_lower_limit;
  210. S32 price_per_meter;
  211. S32 redirect_grid_x;
  212. S32 redirect_grid_y;
  213. LLUUID cache_id;
  214. msg->getStringFast(_PREHASH_RegionInfo, _PREHASH_SimName, sim_name);
  215. msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_EstateID, estate_id);
  216. msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_ParentEstateID, parent_estate_id);
  217. msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_RegionFlags, region_flags);
  218. msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_SimAccess, sim_access);
  219. msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_MaxAgents, agent_limit);
  220. msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_ObjectBonusFactor, object_bonus_factor);
  221. msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_BillableFactor, billable_factor);
  222. msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_WaterHeight, water_height);
  223. msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainRaiseLimit, terrain_raise_limit);
  224. msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainLowerLimit, terrain_lower_limit);
  225. msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_PricePerMeter, price_per_meter);
  226. msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridX, redirect_grid_x);
  227. msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridY, redirect_grid_y);
  228. // push values to the current LLViewerRegion
  229. LLViewerRegion *regionp = gAgent.getRegion();
  230. if (regionp)
  231. {
  232. regionp->setRegionNameAndZone(sim_name);
  233. regionp->setRegionFlags(region_flags);
  234. regionp->setSimAccess(sim_access);
  235. regionp->setWaterHeight(water_height);
  236. regionp->setBillableFactor(billable_factor);
  237. }
  238. LLFloaterGodTools* god_tools = LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools");
  239. if (!god_tools) return;
  240. // push values to god tools, if available
  241. if ( gAgent.isGodlike()
  242. && LLFloaterReg::instanceVisible("god_tools")
  243. && god_tools->mPanelRegionTools
  244. && god_tools->mPanelObjectTools)
  245. {
  246. LLPanelRegionTools* rtool = god_tools->mPanelRegionTools;
  247. god_tools->mCurrentHost = host;
  248. // store locally
  249. rtool->setSimName(sim_name);
  250. rtool->setEstateID(estate_id);
  251. rtool->setParentEstateID(parent_estate_id);
  252. rtool->setCheckFlags(region_flags);
  253. rtool->setBillableFactor(billable_factor);
  254. rtool->setPricePerMeter(price_per_meter);
  255. rtool->setRedirectGridX(redirect_grid_x);
  256. rtool->setRedirectGridY(redirect_grid_y);
  257. rtool->enableAllWidgets();
  258. LLPanelObjectTools *otool = god_tools->mPanelObjectTools;
  259. otool->setCheckFlags(region_flags);
  260. otool->enableAllWidgets();
  261. LLViewerRegion *regionp = gAgent.getRegion();
  262. if ( !regionp )
  263. {
  264. // -1 implies non-existent
  265. rtool->setGridPosX(-1);
  266. rtool->setGridPosY(-1);
  267. }
  268. else
  269. {
  270. //compute the grid position of the region
  271. LLVector3d global_pos = regionp->getPosGlobalFromRegion(LLVector3::zero);
  272. S32 grid_pos_x = (S32) (global_pos.mdV[VX] / 256.0f);
  273. S32 grid_pos_y = (S32) (global_pos.mdV[VY] / 256.0f);
  274. rtool->setGridPosX(grid_pos_x);
  275. rtool->setGridPosY(grid_pos_y);
  276. }
  277. }
  278. }
  279. void LLFloaterGodTools::sendRegionInfoRequest()
  280. {
  281. if (mPanelRegionTools) mPanelRegionTools->clearAllWidgets();
  282. if (mPanelObjectTools) mPanelObjectTools->clearAllWidgets();
  283. mCurrentHost = LLHost::invalid;
  284. mUpdateTimer.reset();
  285. LLMessageSystem* msg = gMessageSystem;
  286. msg->newMessage("RequestRegionInfo");
  287. msg->nextBlock("AgentData");
  288. msg->addUUID("AgentID", gAgent.getID());
  289. msg->addUUID("SessionID", gAgent.getSessionID());
  290. gAgent.sendReliableMessage();
  291. }
  292. void LLFloaterGodTools::sendGodUpdateRegionInfo()
  293. {
  294. LLFloaterGodTools* god_tools = LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools");
  295. if (!god_tools) return;
  296. LLViewerRegion *regionp = gAgent.getRegion();
  297. if (gAgent.isGodlike()
  298. && god_tools->mPanelRegionTools
  299. && regionp
  300. && gAgent.getRegionHost() == mCurrentHost)
  301. {
  302. LLMessageSystem *msg = gMessageSystem;
  303. LLPanelRegionTools *rtool = god_tools->mPanelRegionTools;
  304. msg->newMessage("GodUpdateRegionInfo");
  305. msg->nextBlockFast(_PREHASH_AgentData);
  306. msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
  307. msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
  308. msg->nextBlockFast(_PREHASH_RegionInfo);
  309. msg->addStringFast(_PREHASH_SimName, rtool->getSimName());
  310. msg->addU32Fast(_PREHASH_EstateID, rtool->getEstateID());
  311. msg->addU32Fast(_PREHASH_ParentEstateID, rtool->getParentEstateID());
  312. msg->addU32Fast(_PREHASH_RegionFlags, computeRegionFlags());
  313. msg->addF32Fast(_PREHASH_BillableFactor, rtool->getBillableFactor());
  314. msg->addS32Fast(_PREHASH_PricePerMeter, rtool->getPricePerMeter());
  315. msg->addS32Fast(_PREHASH_RedirectGridX, rtool->getRedirectGridX());
  316. msg->addS32Fast(_PREHASH_RedirectGridY, rtool->getRedirectGridY());
  317. gAgent.sendReliableMessage();
  318. }
  319. }
  320. //*****************************************************************************
  321. // LLPanelRegionTools
  322. //*****************************************************************************
  323. //   || Region |______________________________________
  324. //   |                                                |
  325. //   |  Sim Name: [________________________________]  |
  326. //   |  ^         ^                                   |
  327. //   |  LEFT      R1         Estate id:   [----]      |
  328. //   |                       Parent id:   [----]      |
  329. //   |  [X] Prelude          Grid Pos:     [--] [--]  |
  330. //   |  [X] Visible          Redirect Pos: [--] [--]  |
  331. //   |  [X] Damage           Bill Factor  [8_______]  |
  332. //   |  [X] Block Terraform  PricePerMeter[8_______]  |
  333. //   |                                    [Apply]     |
  334. //   |                                                |
  335. //   |  [Bake Terrain]            [Select Region]     |
  336. //   |  [Revert Terrain]          [Autosave Now]      |
  337. //   |  [Swap Terrain]                                | 
  338. //   |                                   | 
  339. //   |________________________________________________|
  340. //      ^                    ^                     ^
  341. //      LEFT                 R2                   RIGHT
  342. // Floats because spinners only support floats. JC
  343. const F32 BILLABLE_FACTOR_DEFAULT = 1;
  344. const F32 BILLABLE_FACTOR_MIN = 0.0f;
  345. const F32 BILLABLE_FACTOR_MAX = 4.f;
  346. // floats because spinners only understand floats. JC
  347. const F32 PRICE_PER_METER_DEFAULT = 1.f;
  348. const F32 PRICE_PER_METER_MIN = 0.f;
  349. const F32 PRICE_PER_METER_MAX = 100.f;
  350. LLPanelRegionTools::LLPanelRegionTools()
  351. :  LLPanel()
  352. {
  353. mCommitCallbackRegistrar.add("RegionTools.ChangeAnything", boost::bind(&LLPanelRegionTools::onChangeAnything, this));
  354. mCommitCallbackRegistrar.add("RegionTools.ChangePrelude", boost::bind(&LLPanelRegionTools::onChangePrelude, this));
  355. mCommitCallbackRegistrar.add("RegionTools.BakeTerrain", boost::bind(&LLPanelRegionTools::onBakeTerrain, this));
  356. mCommitCallbackRegistrar.add("RegionTools.RevertTerrain", boost::bind(&LLPanelRegionTools::onRevertTerrain, this));
  357. mCommitCallbackRegistrar.add("RegionTools.SwapTerrain", boost::bind(&LLPanelRegionTools::onSwapTerrain, this));
  358. mCommitCallbackRegistrar.add("RegionTools.Refresh", boost::bind(&LLPanelRegionTools::onRefresh, this));
  359. mCommitCallbackRegistrar.add("RegionTools.ApplyChanges", boost::bind(&LLPanelRegionTools::onApplyChanges, this));
  360. mCommitCallbackRegistrar.add("RegionTools.SelectRegion", boost::bind(&LLPanelRegionTools::onSelectRegion, this));
  361. mCommitCallbackRegistrar.add("RegionTools.SaveState", boost::bind(&LLPanelRegionTools::onSaveState, this));
  362. }
  363. BOOL LLPanelRegionTools::postBuild()
  364. {
  365. getChild<LLLineEditor>("region name")->setKeystrokeCallback(onChangeSimName, this);
  366. childSetPrevalidate("region name", &LLTextValidate::validateASCIIPrintableNoPipe);
  367. childSetPrevalidate("estate", &LLTextValidate::validatePositiveS32);
  368. childSetPrevalidate("parentestate", &LLTextValidate::validatePositiveS32);
  369. childDisable("parentestate");
  370. childSetPrevalidate("gridposx", &LLTextValidate::validatePositiveS32);
  371. childDisable("gridposx");
  372. childSetPrevalidate("gridposy", &LLTextValidate::validatePositiveS32);
  373. childDisable("gridposy");
  374. childSetPrevalidate("redirectx", &LLTextValidate::validatePositiveS32);
  375. childSetPrevalidate("redirecty", &LLTextValidate::validatePositiveS32);
  376.  
  377. return TRUE;
  378. }
  379. // Destroys the object
  380. LLPanelRegionTools::~LLPanelRegionTools()
  381. {
  382. // base class will take care of everything
  383. }
  384. U32 LLPanelRegionTools::computeRegionFlags(U32 flags) const
  385. {
  386. flags &= getRegionFlagsMask();
  387. flags |= getRegionFlags();
  388. return flags;
  389. }
  390. void LLPanelRegionTools::refresh()
  391. {
  392. }
  393. void LLPanelRegionTools::clearAllWidgets()
  394. {
  395. // clear all widgets
  396. childSetValue("region name", "unknown");
  397. childSetFocus("region name", FALSE);
  398. childSetValue("check prelude", FALSE);
  399. childDisable("check prelude");
  400. childSetValue("check fixed sun", FALSE);
  401. childDisable("check fixed sun");
  402. childSetValue("check reset home", FALSE);
  403. childDisable("check reset home");
  404. childSetValue("check damage", FALSE);
  405. childDisable("check damage");
  406. childSetValue("check visible", FALSE);
  407. childDisable("check visible");
  408. childSetValue("block terraform", FALSE);
  409. childDisable("block terraform");
  410. childSetValue("block dwell", FALSE);
  411. childDisable("block dwell");
  412. childSetValue("is sandbox", FALSE);
  413. childDisable("is sandbox");
  414. childSetValue("billable factor", BILLABLE_FACTOR_DEFAULT);
  415. childDisable("billable factor");
  416. childSetValue("land cost", PRICE_PER_METER_DEFAULT);
  417. childDisable("land cost");
  418. childDisable("Apply");
  419. childDisable("Bake Terrain");
  420. childDisable("Autosave now");
  421. }
  422. void LLPanelRegionTools::enableAllWidgets()
  423. {
  424. // enable all of the widgets
  425. childEnable("check prelude");
  426. childEnable("check fixed sun");
  427. childEnable("check reset home");
  428. childEnable("check damage");
  429. childDisable("check visible"); // use estates to update...
  430. childEnable("block terraform");
  431. childEnable("block dwell");
  432. childEnable("is sandbox");
  433. childEnable("billable factor");
  434. childEnable("land cost");
  435. childDisable("Apply"); // don't enable this one
  436. childEnable("Bake Terrain");
  437. childEnable("Autosave now");
  438. }
  439. void LLPanelRegionTools::onSaveState(void* userdata)
  440. {
  441. if (gAgent.isGodlike())
  442. {
  443. // Send message to save world state
  444. gMessageSystem->newMessageFast(_PREHASH_StateSave);
  445. gMessageSystem->nextBlockFast(_PREHASH_AgentData);
  446. gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
  447. gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
  448. gMessageSystem->nextBlockFast(_PREHASH_DataBlock);
  449. gMessageSystem->addStringFast(_PREHASH_Filename, NULL);
  450. gAgent.sendReliableMessage();
  451. }
  452. }
  453. const std::string LLPanelRegionTools::getSimName() const
  454. {
  455. return childGetValue("region name");
  456. }
  457. U32 LLPanelRegionTools::getEstateID() const
  458. {
  459. U32 id = (U32)childGetValue("estate").asInteger();
  460. return id;
  461. }
  462. U32 LLPanelRegionTools::getParentEstateID() const
  463. {
  464. U32 id = (U32)childGetValue("parentestate").asInteger();
  465. return id;
  466. }
  467. S32 LLPanelRegionTools::getRedirectGridX() const
  468. {
  469. return childGetValue("redirectx").asInteger();
  470. }
  471. S32 LLPanelRegionTools::getRedirectGridY() const
  472. {
  473. return childGetValue("redirecty").asInteger();
  474. }
  475. S32 LLPanelRegionTools::getGridPosX() const
  476. {
  477. return childGetValue("gridposx").asInteger();
  478. }
  479. S32 LLPanelRegionTools::getGridPosY() const
  480. {
  481. return childGetValue("gridposy").asInteger();
  482. }
  483. U32 LLPanelRegionTools::getRegionFlags() const
  484. {
  485. U32 flags = 0x0;
  486. flags = childGetValue("check prelude").asBoolean()  
  487. ? set_prelude_flags(flags)
  488. : unset_prelude_flags(flags);
  489. // override prelude
  490. if (childGetValue("check fixed sun").asBoolean())
  491. {
  492. flags |= REGION_FLAGS_SUN_FIXED;
  493. }
  494. if (childGetValue("check reset home").asBoolean())
  495. {
  496. flags |= REGION_FLAGS_RESET_HOME_ON_TELEPORT;
  497. }
  498. if (childGetValue("check visible").asBoolean())
  499. {
  500. flags |= REGION_FLAGS_EXTERNALLY_VISIBLE;
  501. }
  502. if (childGetValue("check damage").asBoolean())
  503. {
  504. flags |= REGION_FLAGS_ALLOW_DAMAGE;
  505. }
  506. if (childGetValue("block terraform").asBoolean())
  507. {
  508. flags |= REGION_FLAGS_BLOCK_TERRAFORM;
  509. }
  510. if (childGetValue("block dwell").asBoolean())
  511. {
  512. flags |= REGION_FLAGS_BLOCK_DWELL;
  513. }
  514. if (childGetValue("is sandbox").asBoolean())
  515. {
  516. flags |= REGION_FLAGS_SANDBOX;
  517. }
  518. return flags;
  519. }
  520. U32 LLPanelRegionTools::getRegionFlagsMask() const
  521. {
  522. U32 flags = 0xffffffff;
  523. flags = childGetValue("check prelude").asBoolean()
  524. ? set_prelude_flags(flags)
  525. : unset_prelude_flags(flags);
  526. if (!childGetValue("check fixed sun").asBoolean())
  527. {
  528. flags &= ~REGION_FLAGS_SUN_FIXED;
  529. }
  530. if (!childGetValue("check reset home").asBoolean())
  531. {
  532. flags &= ~REGION_FLAGS_RESET_HOME_ON_TELEPORT;
  533. }
  534. if (!childGetValue("check visible").asBoolean())
  535. {
  536. flags &= ~REGION_FLAGS_EXTERNALLY_VISIBLE;
  537. }
  538. if (!childGetValue("check damage").asBoolean())
  539. {
  540. flags &= ~REGION_FLAGS_ALLOW_DAMAGE;
  541. }
  542. if (!childGetValue("block terraform").asBoolean())
  543. {
  544. flags &= ~REGION_FLAGS_BLOCK_TERRAFORM;
  545. }
  546. if (!childGetValue("block dwell").asBoolean())
  547. {
  548. flags &= ~REGION_FLAGS_BLOCK_DWELL;
  549. }
  550. if (!childGetValue("is sandbox").asBoolean())
  551. {
  552. flags &= ~REGION_FLAGS_SANDBOX;
  553. }
  554. return flags;
  555. }
  556. F32 LLPanelRegionTools::getBillableFactor() const
  557. {
  558. return (F32)childGetValue("billable factor").asReal();
  559. }
  560. S32 LLPanelRegionTools::getPricePerMeter() const
  561. {
  562. return childGetValue("land cost");
  563. }
  564. void LLPanelRegionTools::setSimName(const std::string& name)
  565. {
  566. childSetValue("region name", name);
  567. }
  568. void LLPanelRegionTools::setEstateID(U32 id)
  569. {
  570. childSetValue("estate", (S32)id);
  571. }
  572. void LLPanelRegionTools::setGridPosX(S32 pos)
  573. {
  574. childSetValue("gridposx", pos);
  575. }
  576. void LLPanelRegionTools::setGridPosY(S32 pos)
  577. {
  578. childSetValue("gridposy", pos);
  579. }
  580. void LLPanelRegionTools::setRedirectGridX(S32 pos)
  581. {
  582. childSetValue("redirectx", pos);
  583. }
  584. void LLPanelRegionTools::setRedirectGridY(S32 pos)
  585. {
  586. childSetValue("redirecty", pos);
  587. }
  588. void LLPanelRegionTools::setParentEstateID(U32 id)
  589. {
  590. childSetValue("parentestate", (S32)id);
  591. }
  592. void LLPanelRegionTools::setCheckFlags(U32 flags)
  593. {
  594. childSetValue("check prelude", is_prelude(flags) ? TRUE : FALSE);
  595. childSetValue("check fixed sun", flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE);
  596. childSetValue("check reset home", flags & REGION_FLAGS_RESET_HOME_ON_TELEPORT ? TRUE : FALSE);
  597. childSetValue("check damage", flags & REGION_FLAGS_ALLOW_DAMAGE ? TRUE : FALSE);
  598. childSetValue("check visible", flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE);
  599. childSetValue("block terraform", flags & REGION_FLAGS_BLOCK_TERRAFORM ? TRUE : FALSE);
  600. childSetValue("block dwell", flags & REGION_FLAGS_BLOCK_DWELL ? TRUE : FALSE);
  601. childSetValue("is sandbox", flags & REGION_FLAGS_SANDBOX ? TRUE : FALSE );
  602. }
  603. void LLPanelRegionTools::setBillableFactor(F32 billable_factor)
  604. {
  605. childSetValue("billable factor", billable_factor);
  606. }
  607. void LLPanelRegionTools::setPricePerMeter(S32 price)
  608. {
  609. childSetValue("land cost", price);
  610. }
  611. void LLPanelRegionTools::onChangeAnything()
  612. {
  613. if (gAgent.isGodlike())
  614. {
  615. childEnable("Apply");
  616. }
  617. }
  618. void LLPanelRegionTools::onChangePrelude()
  619. {
  620. // checking prelude auto-checks fixed sun
  621. if (childGetValue("check prelude").asBoolean())
  622. {
  623. childSetValue("check fixed sun", TRUE);
  624. childSetValue("check reset home", TRUE);
  625. onChangeAnything();
  626. }
  627. // pass on to default onChange handler
  628. }
  629. // static
  630. void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata )
  631. {
  632. if (userdata && gAgent.isGodlike())
  633. {
  634. LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
  635. region_tools->childEnable("Apply");
  636. }
  637. }
  638. void LLPanelRegionTools::onRefresh()
  639. {
  640. LLFloaterGodTools* god_tools = LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools");
  641. if(!god_tools) return;
  642. LLViewerRegion *region = gAgent.getRegion();
  643. if (region && gAgent.isGodlike())
  644. {
  645. god_tools->sendRegionInfoRequest();
  646. //LLFloaterGodTools::getInstance()->sendRegionInfoRequest();
  647. //LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools")->sendRegionInfoRequest();
  648. }
  649. }
  650. void LLPanelRegionTools::onApplyChanges()
  651. {
  652. LLFloaterGodTools* god_tools = LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools");
  653. if(!god_tools) return;
  654. LLViewerRegion *region = gAgent.getRegion();
  655. if (region && gAgent.isGodlike())
  656. {
  657. childDisable("Apply");
  658. god_tools->sendGodUpdateRegionInfo();
  659. //LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools")->sendGodUpdateRegionInfo();
  660. }
  661. }
  662. void LLPanelRegionTools::onBakeTerrain()
  663. {
  664. LLPanelRequestTools::sendRequest("terrain", "bake", gAgent.getRegionHost());
  665. }
  666. void LLPanelRegionTools::onRevertTerrain()
  667. {
  668. LLPanelRequestTools::sendRequest("terrain", "revert", gAgent.getRegionHost());
  669. }
  670. void LLPanelRegionTools::onSwapTerrain()
  671. {
  672. LLPanelRequestTools::sendRequest("terrain", "swap", gAgent.getRegionHost());
  673. }
  674. void LLPanelRegionTools::onSelectRegion()
  675. {
  676. llinfos << "LLPanelRegionTools::onSelectRegion" << llendl;
  677. LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromPosGlobal(gAgent.getPositionGlobal());
  678. if (!regionp)
  679. {
  680. return;
  681. }
  682. LLVector3d north_east(REGION_WIDTH_METERS, REGION_WIDTH_METERS, 0);
  683. LLViewerParcelMgr::getInstance()->selectLand(regionp->getOriginGlobal(), 
  684.    regionp->getOriginGlobal() + north_east, FALSE);
  685. }
  686. //*****************************************************************************
  687. // Class LLPanelGridTools
  688. //*****************************************************************************
  689. //   || Grid   |_____________________________________
  690. //   |                                               |
  691. //   |                                               |
  692. //   |  Sun Phase: >--------[]---------< [________]  |
  693. //   |                                               |
  694. //   |  ^         ^                                  |
  695. //   |  LEFT      R1                                 |
  696. //   |                                               |
  697. //   |  [Kick all users]                             | 
  698. //   |                                               |
  699. //   |                                               |
  700. //   |                                               |
  701. //   |                                               |
  702. //   |                                               |
  703. //   |_______________________________________________|
  704. //      ^                                ^        ^
  705. //      LEFT                             R2       RIGHT
  706. const F32 HOURS_TO_RADIANS = (2.f*F_PI)/24.f;
  707. LLPanelGridTools::LLPanelGridTools() :
  708. LLPanel()
  709. {
  710. mCommitCallbackRegistrar.add("GridTools.KickAll", boost::bind(&LLPanelGridTools::onClickKickAll, this));
  711. mCommitCallbackRegistrar.add("GridTools.FlushMapVisibilityCaches", boost::bind(&LLPanelGridTools::onClickFlushMapVisibilityCaches, this));
  712. }
  713. // Destroys the object
  714. LLPanelGridTools::~LLPanelGridTools()
  715. {
  716. }
  717. BOOL LLPanelGridTools::postBuild()
  718. {
  719. return TRUE;
  720. }
  721. void LLPanelGridTools::refresh()
  722. {
  723. }
  724. void LLPanelGridTools::onClickKickAll()
  725. {
  726. LLNotificationsUtil::add("KickAllUsers", LLSD(), LLSD(), LLPanelGridTools::confirmKick);
  727. }
  728. bool LLPanelGridTools::confirmKick(const LLSD& notification, const LLSD& response)
  729. {
  730. if (LLNotificationsUtil::getSelectedOption(notification, response) == 0)
  731. {
  732. LLSD payload;
  733. payload["kick_message"] = response["message"].asString();
  734. LLNotificationsUtil::add("ConfirmKick", LLSD(), payload, LLPanelGridTools::finishKick);
  735. }
  736. return false;
  737. }
  738. // static
  739. bool LLPanelGridTools::finishKick(const LLSD& notification, const LLSD& response)
  740. {
  741. S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
  742. if (option == 0)
  743. {
  744. LLMessageSystem* msg = gMessageSystem;
  745. msg->newMessageFast(_PREHASH_GodKickUser);
  746. msg->nextBlockFast(_PREHASH_UserInfo);
  747. msg->addUUIDFast(_PREHASH_GodID, gAgent.getID());
  748. msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID());
  749. msg->addUUIDFast(_PREHASH_AgentID,   LL_UUID_ALL_AGENTS );
  750. msg->addU32("KickFlags", KICK_FLAGS_DEFAULT );
  751. msg->addStringFast(_PREHASH_Reason,    notification["payload"]["kick_message"].asString());
  752. gAgent.sendReliableMessage();
  753. }
  754. return false;
  755. }
  756. void LLPanelGridTools::onClickFlushMapVisibilityCaches()
  757. {
  758. LLNotificationsUtil::add("FlushMapVisibilityCaches", LLSD(), LLSD(), flushMapVisibilityCachesConfirm);
  759. }
  760. // static
  761. bool LLPanelGridTools::flushMapVisibilityCachesConfirm(const LLSD& notification, const LLSD& response)
  762. {
  763. S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
  764. if (option != 0) return false;
  765. // HACK: Send this as an EstateOwnerRequest so it gets routed
  766. // correctly by the spaceserver. JC
  767. LLMessageSystem* msg = gMessageSystem;
  768. msg->newMessage("EstateOwnerMessage");
  769. msg->nextBlockFast(_PREHASH_AgentData);
  770. msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
  771. msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
  772. msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
  773. msg->nextBlock("MethodData");
  774. msg->addString("Method", "refreshmapvisibility");
  775. msg->addUUID("Invoice", LLUUID::null);
  776. msg->nextBlock("ParamList");
  777. msg->addString("Parameter", gAgent.getID().asString());
  778. gAgent.sendReliableMessage();
  779. return false;
  780. }
  781. //*****************************************************************************
  782. // LLPanelObjectTools
  783. //*****************************************************************************
  784. //   || Object |_______________________________________________________
  785. //   |                                                                 |
  786. //   |  Sim Name: Foo                                                  |
  787. //   |  ^         ^                                                    |
  788. //   |  LEFT      R1                                                   |
  789. //   |                                                                 |
  790. //   |  [X] Disable Scripts [X] Disable Collisions [X] Disable Physics |
  791. //   |                                                  [ Apply  ]     |
  792. //   |                                                                 |
  793. //   |  [Set Target Avatar] Avatar Name                                |
  794. //   |  [Delete Target's Objects on Public Land    ]                   |
  795. //   |  [Delete All Target's Objects    ]                   |
  796. //   |  [Delete All Scripted Objects on Public Land]                   |
  797. //   |  [Get Top Colliders ]                                           |
  798. //   |  [Get Top Scripts   ]                                           |
  799. //   |_________________________________________________________________|
  800. //      ^                                         ^
  801. //      LEFT                                      RIGHT
  802. // Default constructor
  803. LLPanelObjectTools::LLPanelObjectTools() 
  804. :  LLPanel(),
  805. mTargetAvatar()
  806. {
  807. mCommitCallbackRegistrar.add("ObjectTools.ChangeAnything", boost::bind(&LLPanelObjectTools::onChangeAnything, this));
  808. mCommitCallbackRegistrar.add("ObjectTools.DeletePublicOwnedBy", boost::bind(&LLPanelObjectTools::onClickDeletePublicOwnedBy, this));
  809. mCommitCallbackRegistrar.add("ObjectTools.DeleteAllScriptedOwnedBy", boost::bind(&LLPanelObjectTools::onClickDeleteAllScriptedOwnedBy, this));
  810. mCommitCallbackRegistrar.add("ObjectTools.DeleteAllOwnedBy", boost::bind(&LLPanelObjectTools::onClickDeleteAllOwnedBy, this));
  811. mCommitCallbackRegistrar.add("ObjectTools.ApplyChanges", boost::bind(&LLPanelObjectTools::onApplyChanges, this));
  812. mCommitCallbackRegistrar.add("ObjectTools.Set", boost::bind(&LLPanelObjectTools::onClickSet, this));
  813. mCommitCallbackRegistrar.add("ObjectTools.GetTopColliders", boost::bind(&LLPanelObjectTools::onGetTopColliders, this));
  814. mCommitCallbackRegistrar.add("ObjectTools.GetTopScripts", boost::bind(&LLPanelObjectTools::onGetTopScripts, this));
  815. mCommitCallbackRegistrar.add("ObjectTools.GetScriptDigest", boost::bind(&LLPanelObjectTools::onGetScriptDigest, this));
  816. }
  817. // Destroys the object
  818. LLPanelObjectTools::~LLPanelObjectTools()
  819. {
  820. // base class will take care of everything
  821. }
  822. BOOL LLPanelObjectTools::postBuild()
  823. {
  824. return TRUE;
  825. }
  826. void LLPanelObjectTools::setTargetAvatar(const LLUUID &target_id)
  827. {
  828. mTargetAvatar = target_id;
  829. if (target_id.isNull())
  830. {
  831. childSetValue("target_avatar_name", getString("no_target"));
  832. }
  833. void LLPanelObjectTools::refresh()
  834. {
  835. LLViewerRegion *regionp = gAgent.getRegion();
  836. if (regionp)
  837. {
  838. childSetText("region name", regionp->getName());
  839. }
  840. }
  841. U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const
  842. {
  843. if (childGetValue("disable scripts").asBoolean())
  844. {
  845. flags |= REGION_FLAGS_SKIP_SCRIPTS;
  846. }
  847. else
  848. {
  849. flags &= ~REGION_FLAGS_SKIP_SCRIPTS;
  850. }
  851. if (childGetValue("disable collisions").asBoolean())
  852. {
  853. flags |= REGION_FLAGS_SKIP_COLLISIONS;
  854. }
  855. else
  856. {
  857. flags &= ~REGION_FLAGS_SKIP_COLLISIONS;
  858. }
  859. if (childGetValue("disable physics").asBoolean())
  860. {
  861. flags |= REGION_FLAGS_SKIP_PHYSICS;
  862. }
  863. else
  864. {
  865. flags &= ~REGION_FLAGS_SKIP_PHYSICS;
  866. }
  867. return flags;
  868. }
  869. void LLPanelObjectTools::setCheckFlags(U32 flags)
  870. {
  871. childSetValue("disable scripts", flags & REGION_FLAGS_SKIP_SCRIPTS ? TRUE : FALSE);
  872. childSetValue("disable collisions", flags & REGION_FLAGS_SKIP_COLLISIONS ? TRUE : FALSE);
  873. childSetValue("disable physics", flags & REGION_FLAGS_SKIP_PHYSICS ? TRUE : FALSE);
  874. }
  875. void LLPanelObjectTools::clearAllWidgets()
  876. {
  877. childSetValue("disable scripts", FALSE);
  878. childDisable("disable scripts");
  879. childDisable("Apply");
  880. childDisable("Set Target");
  881. childDisable("Delete Target's Scripted Objects On Others Land");
  882. childDisable("Delete Target's Scripted Objects On *Any* Land");
  883. childDisable("Delete *ALL* Of Target's Objects");
  884. }
  885. void LLPanelObjectTools::enableAllWidgets()
  886. {
  887. childEnable("disable scripts");
  888. childDisable("Apply"); // don't enable this one
  889. childEnable("Set Target");
  890. childEnable("Delete Target's Scripted Objects On Others Land");
  891. childEnable("Delete Target's Scripted Objects On *Any* Land");
  892. childEnable("Delete *ALL* Of Target's Objects");
  893. childEnable("Get Top Colliders");
  894. childEnable("Get Top Scripts");
  895. }
  896. void LLPanelObjectTools::onGetTopColliders()
  897. {
  898. LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
  899. if(!instance) return;
  900. if (gAgent.isGodlike())
  901. {
  902. LLFloaterReg::showInstance("top_objects");
  903. LLFloaterTopObjects::setMode(STAT_REPORT_TOP_COLLIDERS);
  904. instance->onRefresh();
  905. }
  906. }
  907. void LLPanelObjectTools::onGetTopScripts()
  908. {
  909. LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance<LLFloaterTopObjects>("top_objects");
  910. if(!instance) return;
  911. if (gAgent.isGodlike()) 
  912. {
  913. LLFloaterReg::showInstance("top_objects");
  914. LLFloaterTopObjects::setMode(STAT_REPORT_TOP_SCRIPTS);
  915. instance->onRefresh();
  916. }
  917. }
  918. void LLPanelObjectTools::onGetScriptDigest()
  919. {
  920. if (gAgent.isGodlike())
  921. {
  922. // get the list of scripts and number of occurences of each
  923. // (useful for finding self-replicating objects)
  924. LLPanelRequestTools::sendRequest("scriptdigest","0",gAgent.getRegionHost());
  925. }
  926. }
  927. void LLPanelObjectTools::onClickDeletePublicOwnedBy()
  928. {
  929. // Bring up view-modal dialog
  930. if (!mTargetAvatar.isNull())
  931. {
  932. mSimWideDeletesFlags = 
  933. SWD_SCRIPTED_ONLY | SWD_OTHERS_LAND_ONLY;
  934. LLSD args;
  935. args["AVATAR_NAME"] = childGetValue("target_avatar_name").asString();
  936. LLSD payload;
  937. payload["avatar_id"] = mTargetAvatar;
  938. payload["flags"] = (S32)mSimWideDeletesFlags;
  939. LLNotificationsUtil::add( "GodDeleteAllScriptedPublicObjectsByUser",
  940. args,
  941. payload,
  942. callbackSimWideDeletes);
  943. }
  944. }
  945. void LLPanelObjectTools::onClickDeleteAllScriptedOwnedBy()
  946. {
  947. // Bring up view-modal dialog
  948. if (!mTargetAvatar.isNull())
  949. {
  950. mSimWideDeletesFlags = SWD_SCRIPTED_ONLY;
  951. LLSD args;
  952. args["AVATAR_NAME"] = childGetValue("target_avatar_name").asString();
  953. LLSD payload;
  954. payload["avatar_id"] = mTargetAvatar;
  955. payload["flags"] = (S32)mSimWideDeletesFlags;
  956. LLNotificationsUtil::add( "GodDeleteAllScriptedObjectsByUser",
  957. args,
  958. payload,
  959. callbackSimWideDeletes);
  960. }
  961. }
  962. void LLPanelObjectTools::onClickDeleteAllOwnedBy()
  963. {
  964. // Bring up view-modal dialog
  965. if (!mTargetAvatar.isNull())
  966. {
  967. mSimWideDeletesFlags = 0;
  968. LLSD args;
  969. args["AVATAR_NAME"] = childGetValue("target_avatar_name").asString();
  970. LLSD payload;
  971. payload["avatar_id"] = mTargetAvatar;
  972. payload["flags"] = (S32)mSimWideDeletesFlags;
  973. LLNotificationsUtil::add( "GodDeleteAllObjectsByUser",
  974. args,
  975. payload,
  976. callbackSimWideDeletes);
  977. }
  978. }
  979. // static
  980. bool LLPanelObjectTools::callbackSimWideDeletes( const LLSD& notification, const LLSD& response )
  981. {
  982. S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
  983. if (option == 0)
  984. {
  985. if (!notification["payload"]["avatar_id"].asUUID().isNull())
  986. {
  987. send_sim_wide_deletes(notification["payload"]["avatar_id"].asUUID(), 
  988.   notification["payload"]["flags"].asInteger());
  989. }
  990. }
  991. return false;
  992. }
  993. void LLPanelObjectTools::onClickSet()
  994. {
  995. // grandparent is a floater, which can have a dependent
  996. gFloaterView->getParentFloater(this)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLPanelObjectTools::callbackAvatarID, this, _1,_2)));
  997. }
  998. void LLPanelObjectTools::onClickSetBySelection(void* data)
  999. {
  1000. LLPanelObjectTools* panelp = (LLPanelObjectTools*) data;
  1001. if (!panelp) return;
  1002. const BOOL non_root_ok = TRUE; 
  1003. LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(NULL, non_root_ok);
  1004. if (!node) return;
  1005. std::string owner_name;
  1006. LLUUID owner_id;
  1007. LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
  1008. panelp->mTargetAvatar = owner_id;
  1009. LLStringUtil::format_map_t args;
  1010. args["[OBJECT]"] = node->mName;
  1011. args["[OWNER]"] = owner_name;
  1012. std::string name = LLTrans::getString("GodToolsObjectOwnedBy", args);
  1013. panelp->childSetValue("target_avatar_name", name);
  1014. }
  1015. void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids)
  1016. {
  1017. if (ids.empty() || names.empty()) return;
  1018. mTargetAvatar = ids[0];
  1019. childSetValue("target_avatar_name", names[0]);
  1020. refresh();
  1021. }
  1022. void LLPanelObjectTools::onChangeAnything()
  1023. {
  1024. if (gAgent.isGodlike())
  1025. {
  1026. childEnable("Apply");
  1027. }
  1028. }
  1029. void LLPanelObjectTools::onApplyChanges()
  1030. {
  1031. LLFloaterGodTools* god_tools = LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools");
  1032. if(!god_tools) return;
  1033. LLViewerRegion *region = gAgent.getRegion();
  1034. if (region && gAgent.isGodlike())
  1035. {
  1036. // TODO -- implement this
  1037. childDisable("Apply");
  1038. god_tools->sendGodUpdateRegionInfo();
  1039. //LLFloaterReg::getTypedInstance<LLFloaterGodTools>("god_tools")->sendGodUpdateRegionInfo();
  1040. }
  1041. }
  1042. // --------------------
  1043. // LLPanelRequestTools
  1044. // --------------------
  1045. const std::string SELECTION = "Selection";
  1046. const std::string AGENT_REGION = "Agent Region";
  1047. LLPanelRequestTools::LLPanelRequestTools():
  1048. LLPanel()
  1049. {
  1050. mCommitCallbackRegistrar.add("GodTools.Request", boost::bind(&LLPanelRequestTools::onClickRequest, this));
  1051. }
  1052. LLPanelRequestTools::~LLPanelRequestTools()
  1053. {
  1054. }
  1055. BOOL LLPanelRequestTools::postBuild()
  1056. {
  1057. refresh();
  1058. return TRUE;
  1059. }
  1060. void LLPanelRequestTools::refresh()
  1061. {
  1062. std::string buffer = childGetValue("destination");
  1063. LLCtrlListInterface *list = childGetListInterface("destination");
  1064. if (!list) return;
  1065. S32 last_item = list->getItemCount();
  1066. if (last_item >=3)
  1067. {
  1068. list->selectItemRange(2,last_item);
  1069. list->operateOnSelection(LLCtrlListInterface::OP_DELETE);
  1070. }
  1071. for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
  1072.  iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
  1073. {
  1074. LLViewerRegion* regionp = *iter;
  1075. std::string name = regionp->getName();
  1076. if (!name.empty())
  1077. {
  1078. list->addSimpleElement(name);
  1079. }
  1080. }
  1081. if(!buffer.empty())
  1082. {
  1083. list->selectByValue(buffer);
  1084. }
  1085. else
  1086. {
  1087. list->operateOnSelection(LLCtrlListInterface::OP_DESELECT);
  1088. }
  1089. }
  1090. // static
  1091. void LLPanelRequestTools::sendRequest(const std::string& request, 
  1092.   const std::string& parameter, 
  1093.   const LLHost& host)
  1094. {
  1095. llinfos << "Sending request '" << request << "', '"
  1096. << parameter << "' to " << host << llendl;
  1097. LLMessageSystem* msg = gMessageSystem;
  1098. msg->newMessage("GodlikeMessage");
  1099. msg->nextBlockFast(_PREHASH_AgentData);
  1100. msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
  1101. msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
  1102. msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
  1103. msg->nextBlock("MethodData");
  1104. msg->addString("Method", request);
  1105. msg->addUUID("Invoice", LLUUID::null);
  1106. msg->nextBlock("ParamList");
  1107. msg->addString("Parameter", parameter);
  1108. msg->sendReliable(host);
  1109. }
  1110. void LLPanelRequestTools::onClickRequest()
  1111. {
  1112. const std::string dest = childGetValue("destination").asString();
  1113. if(dest == SELECTION)
  1114. {
  1115. std::string req =childGetValue("request");
  1116. req = req.substr(0, req.find_first_of(" "));
  1117. std::string param = childGetValue("parameter");
  1118. LLSelectMgr::getInstance()->sendGodlikeRequest(req, param);
  1119. }
  1120. else if(dest == AGENT_REGION)
  1121. {
  1122. sendRequest(gAgent.getRegionHost());
  1123. }
  1124. else
  1125. {
  1126. // find region by name
  1127. for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
  1128.  iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
  1129. {
  1130. LLViewerRegion* regionp = *iter;
  1131. if(dest == regionp->getName())
  1132. {
  1133. // found it
  1134. sendRequest(regionp->getHost());
  1135. }
  1136. }
  1137. }
  1138. }
  1139. void terrain_download_done(void** data, S32 status, LLExtStat ext_status)
  1140. {
  1141. LLNotificationsUtil::add("TerrainDownloaded");
  1142. }
  1143. void test_callback(const LLTSCode status)
  1144. {
  1145. llinfos << "Test transfer callback returned!" << llendl;
  1146. }
  1147. void LLPanelRequestTools::sendRequest(const LLHost& host)
  1148. {
  1149. // intercept viewer local actions here
  1150. std::string req = childGetValue("request");
  1151. if (req == "terrain download")
  1152. {
  1153. gXferManager->requestFile(std::string("terrain.raw"), std::string("terrain.raw"), LL_PATH_NONE,
  1154.   host,
  1155.   FALSE,
  1156.   terrain_download_done,
  1157.   NULL);
  1158. }
  1159. else
  1160. {
  1161. req = req.substr(0, req.find_first_of(" "));
  1162. sendRequest(req, childGetValue("parameter").asString(), host);
  1163. }
  1164. }
  1165. // Flags are SWD_ flags.
  1166. void send_sim_wide_deletes(const LLUUID& owner_id, U32 flags)
  1167. {
  1168. LLMessageSystem* msg = gMessageSystem;
  1169. msg->newMessageFast(_PREHASH_SimWideDeletes);
  1170. msg->nextBlockFast(_PREHASH_AgentData);
  1171. msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
  1172. msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
  1173. msg->nextBlockFast(_PREHASH_DataBlock);
  1174. msg->addUUIDFast(_PREHASH_TargetID, owner_id);
  1175. msg->addU32Fast(_PREHASH_Flags, flags);
  1176. gAgent.sendReliableMessage();
  1177. }