00001
00032 #include "llviewerprecompiledheaders.h"
00033
00034 #include "llfloatergodtools.h"
00035
00036 #include "llcoord.h"
00037 #include "llfontgl.h"
00038 #include "llframetimer.h"
00039 #include "llgl.h"
00040 #include "llhost.h"
00041 #include "llregionflags.h"
00042 #include "llstring.h"
00043 #include "message.h"
00044
00045 #include "llagent.h"
00046 #include "llalertdialog.h"
00047 #include "llbutton.h"
00048 #include "llcheckboxctrl.h"
00049 #include "llcombobox.h"
00050 #include "lldraghandle.h"
00051 #include "llfloater.h"
00052 #include "llfocusmgr.h"
00053 #include "llfloatertopobjects.h"
00054 #include "lllineeditor.h"
00055 #include "llmenugl.h"
00056 #include "llresmgr.h"
00057 #include "llselectmgr.h"
00058 #include "llsky.h"
00059 #include "llspinctrl.h"
00060 #include "llstatusbar.h"
00061 #include "lltabcontainer.h"
00062 #include "lltextbox.h"
00063 #include "lluictrl.h"
00064 #include "llviewerparcelmgr.h"
00065 #include "llviewerregion.h"
00066 #include "llviewerwindow.h"
00067 #include "llworld.h"
00068 #include "llfloateravatarpicker.h"
00069 #include "llnotify.h"
00070 #include "llxfermanager.h"
00071 #include "llvlcomposition.h"
00072 #include "llsurface.h"
00073 #include "llviewercontrol.h"
00074 #include "llvieweruictrlfactory.h"
00075
00076 #include "lltransfertargetfile.h"
00077 #include "lltransfersourcefile.h"
00078
00079 const F32 SECONDS_BETWEEN_UPDATE_REQUESTS = 5.0f;
00080
00081 static LLFloaterGodTools* sGodTools = NULL;
00082
00083
00084
00085
00086
00087
00088 LLFloaterGodTools* LLFloaterGodTools::instance()
00089 {
00090 if (!sGodTools)
00091 {
00092 sGodTools = new LLFloaterGodTools();
00093 sGodTools->open();
00094 sGodTools->center();
00095 sGodTools->setFocus(TRUE);
00096 }
00097 return sGodTools;
00098 }
00099
00100
00101
00102 void LLFloaterGodTools::refreshAll()
00103 {
00104 LLFloaterGodTools* god_tools = instance();
00105 if (god_tools)
00106 {
00107 if (gAgent.getRegionHost() != god_tools->mCurrentHost)
00108 {
00109
00110 god_tools->sendRegionInfoRequest();
00111 }
00112 }
00113 }
00114
00115
00116
00117 LLFloaterGodTools::LLFloaterGodTools()
00118 : LLFloater("godtools floater"),
00119 mCurrentHost(LLHost::invalid),
00120 mUpdateTimer()
00121 {
00122 LLCallbackMap::map_t factory_map;
00123 factory_map["grid"] = LLCallbackMap(createPanelGrid, this);
00124 factory_map["region"] = LLCallbackMap(createPanelRegion, this);
00125 factory_map["objects"] = LLCallbackMap(createPanelObjects, this);
00126 factory_map["request"] = LLCallbackMap(createPanelRequest, this);
00127 gUICtrlFactory->buildFloater(this, "floater_god_tools.xml", &factory_map);
00128
00129 childSetTabChangeCallback("GodTools Tabs", "grid", onTabChanged, this);
00130 childSetTabChangeCallback("GodTools Tabs", "region", onTabChanged, this);
00131 childSetTabChangeCallback("GodTools Tabs", "objects", onTabChanged, this);
00132 childSetTabChangeCallback("GodTools Tabs", "request", onTabChanged, this);
00133
00134 sendRegionInfoRequest();
00135
00136 childShowTab("GodTools Tabs", "region");
00137 }
00138
00139
00140 void* LLFloaterGodTools::createPanelGrid(void *userdata)
00141 {
00142 return new LLPanelGridTools("grid");
00143 }
00144
00145
00146 void* LLFloaterGodTools::createPanelRegion(void *userdata)
00147 {
00148 LLFloaterGodTools* self = (LLFloaterGodTools*)userdata;
00149 self->mPanelRegionTools = new LLPanelRegionTools("region");
00150 return self->mPanelRegionTools;
00151 }
00152
00153
00154 void* LLFloaterGodTools::createPanelObjects(void *userdata)
00155 {
00156 LLFloaterGodTools* self = (LLFloaterGodTools*)userdata;
00157 self->mPanelObjectTools = new LLPanelObjectTools("objects");
00158 return self->mPanelObjectTools;
00159 }
00160
00161
00162 void* LLFloaterGodTools::createPanelRequest(void *userdata)
00163 {
00164 return new LLPanelRequestTools("region");
00165 }
00166
00167 LLFloaterGodTools::~LLFloaterGodTools()
00168 {
00169
00170 }
00171
00172 U32 LLFloaterGodTools::computeRegionFlags() const
00173 {
00174 U32 flags = gAgent.getRegion()->getRegionFlags();
00175 if (mPanelRegionTools) flags = mPanelRegionTools->computeRegionFlags(flags);
00176 if (mPanelObjectTools) flags = mPanelObjectTools->computeRegionFlags(flags);
00177 return flags;
00178 }
00179
00180
00181 void LLFloaterGodTools::updatePopup(LLCoordGL center, MASK mask)
00182 {
00183 }
00184
00185
00186 void LLFloaterGodTools::onClose(bool app_quitting)
00187 {
00188 if (sGodTools)
00189 {
00190 sGodTools->setVisible(FALSE);
00191 }
00192 }
00193
00194
00195 void LLFloaterGodTools::draw()
00196 {
00197 if (mCurrentHost == LLHost::invalid)
00198 {
00199 if (mUpdateTimer.getElapsedTimeF32() > SECONDS_BETWEEN_UPDATE_REQUESTS)
00200 {
00201 sendRegionInfoRequest();
00202 }
00203 }
00204 else if (gAgent.getRegionHost() != mCurrentHost)
00205 {
00206 sendRegionInfoRequest();
00207 }
00208 LLFloater::draw();
00209 }
00210
00211
00212 void LLFloaterGodTools::show(void *)
00213 {
00214 LLFloaterGodTools* god_tools = instance();
00215 god_tools->open();
00216 LLPanel *panel = god_tools->childGetVisibleTab("GodTools Tabs");
00217 if (panel) panel->setFocus(TRUE);
00218 if (god_tools->mPanelObjectTools) god_tools->mPanelObjectTools->setTargetAvatar(LLUUID::null);
00219
00220 if (gAgent.getRegionHost() != god_tools->mCurrentHost)
00221 {
00222
00223 god_tools->sendRegionInfoRequest();
00224 }
00225 }
00226
00227 void LLFloaterGodTools::showPanel(const LLString& panel_name)
00228 {
00229 childShowTab("GodTools Tabs", panel_name);
00230 open();
00231 LLPanel *panel = childGetVisibleTab("GodTools Tabs");
00232 if (panel) panel->setFocus(TRUE);
00233 }
00234
00235
00236
00237 void LLFloaterGodTools::onTabChanged(void* data, bool from_click)
00238 {
00239 LLPanel* panel = (LLPanel*)data;
00240 if (panel)
00241 {
00242 panel->setFocus(TRUE);
00243 }
00244 }
00245
00246
00247
00248 void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
00249 {
00250 LLHost host = msg->getSender();
00251 if (host != gAgent.getRegionHost())
00252 {
00253
00254 return;
00255 }
00256
00257
00258 U32 region_flags;
00259 U8 sim_access;
00260 U8 agent_limit;
00261 char sim_name[MAX_STRING];
00262 U32 estate_id;
00263 U32 parent_estate_id;
00264 F32 water_height;
00265 F32 billable_factor;
00266 F32 object_bonus_factor;
00267 F32 terrain_raise_limit;
00268 F32 terrain_lower_limit;
00269 S32 price_per_meter;
00270 S32 redirect_grid_x;
00271 S32 redirect_grid_y;
00272 LLUUID cache_id;
00273
00274 msg->getStringFast(_PREHASH_RegionInfo, _PREHASH_SimName, MAX_STRING, sim_name);
00275 msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_EstateID, estate_id);
00276 msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_ParentEstateID, parent_estate_id);
00277 msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_RegionFlags, region_flags);
00278 msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_SimAccess, sim_access);
00279 msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_MaxAgents, agent_limit);
00280 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_ObjectBonusFactor, object_bonus_factor);
00281 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_BillableFactor, billable_factor);
00282 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_WaterHeight, water_height);
00283 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainRaiseLimit, terrain_raise_limit);
00284 msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainLowerLimit, terrain_lower_limit);
00285 msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_PricePerMeter, price_per_meter);
00286 msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridX, redirect_grid_x);
00287 msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridY, redirect_grid_y);
00288
00289
00290 LLViewerRegion *regionp = gAgent.getRegion();
00291 if (regionp)
00292 {
00293 regionp->setRegionNameAndZone(sim_name);
00294 regionp->setRegionFlags(region_flags);
00295 regionp->setSimAccess(sim_access);
00296 regionp->setWaterHeight(water_height);
00297 regionp->setBillableFactor(billable_factor);
00298 }
00299
00300
00301 if (sGodTools
00302 && sGodTools->mPanelRegionTools
00303 && sGodTools->mPanelObjectTools
00304 && msg
00305 && gAgent.isGodlike())
00306 {
00307 LLPanelRegionTools* rtool = sGodTools->mPanelRegionTools;
00308 sGodTools->mCurrentHost = host;
00309
00310
00311 rtool->setSimName(sim_name);
00312 rtool->setEstateID(estate_id);
00313 rtool->setParentEstateID(parent_estate_id);
00314 rtool->setCheckFlags(region_flags);
00315 rtool->setBillableFactor(billable_factor);
00316 rtool->setPricePerMeter(price_per_meter);
00317 rtool->setRedirectGridX(redirect_grid_x);
00318 rtool->setRedirectGridY(redirect_grid_y);
00319 rtool->enableAllWidgets();
00320
00321 LLPanelObjectTools *otool = sGodTools->mPanelObjectTools;
00322 otool->setCheckFlags(region_flags);
00323 otool->enableAllWidgets();
00324
00325 LLViewerRegion *regionp = gAgent.getRegion();
00326 if ( !regionp )
00327 {
00328
00329 rtool->setGridPosX(-1);
00330 rtool->setGridPosY(-1);
00331 }
00332 else
00333 {
00334
00335 LLVector3d global_pos = regionp->getPosGlobalFromRegion(LLVector3::zero);
00336 S32 grid_pos_x = (S32) (global_pos.mdV[VX] / 256.0f);
00337 S32 grid_pos_y = (S32) (global_pos.mdV[VY] / 256.0f);
00338
00339 rtool->setGridPosX(grid_pos_x);
00340 rtool->setGridPosY(grid_pos_y);
00341 }
00342 }
00343 }
00344
00345
00346 void LLFloaterGodTools::sendRegionInfoRequest()
00347 {
00348 if (mPanelRegionTools) mPanelRegionTools->clearAllWidgets();
00349 if (mPanelObjectTools) mPanelObjectTools->clearAllWidgets();
00350 mCurrentHost = LLHost::invalid;
00351 mUpdateTimer.reset();
00352
00353 LLMessageSystem* msg = gMessageSystem;
00354 msg->newMessage("RequestRegionInfo");
00355 msg->nextBlock("AgentData");
00356 msg->addUUID("AgentID", gAgent.getID());
00357 msg->addUUID("SessionID", gAgent.getSessionID());
00358 gAgent.sendReliableMessage();
00359 }
00360
00361
00362 void LLFloaterGodTools::sendGodUpdateRegionInfo()
00363 {
00364 LLViewerRegion *regionp = gAgent.getRegion();
00365 if (gAgent.isGodlike()
00366 && sGodTools->mPanelRegionTools
00367 && regionp
00368 && gAgent.getRegionHost() == mCurrentHost)
00369 {
00370 LLMessageSystem *msg = gMessageSystem;
00371 LLPanelRegionTools *rtool = sGodTools->mPanelRegionTools;
00372
00373 msg->newMessage("GodUpdateRegionInfo");
00374 msg->nextBlockFast(_PREHASH_AgentData);
00375 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
00376 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
00377 msg->nextBlockFast(_PREHASH_RegionInfo);
00378 msg->addStringFast(_PREHASH_SimName, rtool->getSimName().c_str());
00379 msg->addU32Fast(_PREHASH_EstateID, rtool->getEstateID());
00380 msg->addU32Fast(_PREHASH_ParentEstateID, rtool->getParentEstateID());
00381 msg->addU32Fast(_PREHASH_RegionFlags, computeRegionFlags());
00382 msg->addF32Fast(_PREHASH_BillableFactor, rtool->getBillableFactor());
00383 msg->addS32Fast(_PREHASH_PricePerMeter, rtool->getPricePerMeter());
00384 msg->addS32Fast(_PREHASH_RedirectGridX, rtool->getRedirectGridX());
00385 msg->addS32Fast(_PREHASH_RedirectGridY, rtool->getRedirectGridY());
00386
00387 gAgent.sendReliableMessage();
00388 }
00389 }
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418 const F32 BILLABLE_FACTOR_DEFAULT = 1;
00419 const F32 BILLABLE_FACTOR_MIN = 0.0f;
00420 const F32 BILLABLE_FACTOR_MAX = 4.f;
00421
00422
00423 const F32 PRICE_PER_METER_DEFAULT = 1.f;
00424 const F32 PRICE_PER_METER_MIN = 0.f;
00425 const F32 PRICE_PER_METER_MAX = 100.f;
00426
00427
00428 LLPanelRegionTools::LLPanelRegionTools(const std::string& title)
00429 : LLPanel(title)
00430 {
00431 }
00432
00433 BOOL LLPanelRegionTools::postBuild()
00434 {
00435 childSetCommitCallback("region name", onChangeAnything, this);
00436 childSetKeystrokeCallback("region name", onChangeSimName, this);
00437 childSetPrevalidate("region name", &LLLineEditor::prevalidatePrintableNotPipe);
00438
00439 childSetCommitCallback("check prelude", onChangePrelude, this);
00440 childSetCommitCallback("check fixed sun", onChangeAnything, this);
00441 childSetCommitCallback("check reset home", onChangeAnything, this);
00442 childSetCommitCallback("check visible", onChangeAnything, this);
00443 childSetCommitCallback("check damage", onChangeAnything, this);
00444 childSetCommitCallback("block dwell", onChangeAnything, this);
00445 childSetCommitCallback("block terraform", onChangeAnything, this);
00446 childSetCommitCallback("allow transfer", onChangeAnything, this);
00447 childSetCommitCallback("is sandbox", onChangeAnything, this);
00448
00449 childSetAction("Bake Terrain", onBakeTerrain, this);
00450 childSetAction("Revert Terrain", onRevertTerrain, this);
00451 childSetAction("Swap Terrain", onSwapTerrain, this);
00452
00453 childSetCommitCallback("estate", onChangeAnything, this);
00454 childSetPrevalidate("estate", &LLLineEditor::prevalidatePositiveS32);
00455
00456 childSetCommitCallback("parentestate", onChangeAnything, this);
00457 childSetPrevalidate("parentestate", &LLLineEditor::prevalidatePositiveS32);
00458 childDisable("parentestate");
00459
00460 childSetCommitCallback("gridposx", onChangeAnything, this);
00461 childSetPrevalidate("gridposx", &LLLineEditor::prevalidatePositiveS32);
00462 childDisable("gridposx");
00463
00464 childSetCommitCallback("gridposy", onChangeAnything, this);
00465 childSetPrevalidate("gridposy", &LLLineEditor::prevalidatePositiveS32);
00466 childDisable("gridposy");
00467
00468 childSetCommitCallback("redirectx", onChangeAnything, this);
00469 childSetPrevalidate("redirectx", &LLLineEditor::prevalidatePositiveS32);
00470
00471 childSetCommitCallback("redirecty", onChangeAnything, this);
00472 childSetPrevalidate("redirecty", &LLLineEditor::prevalidatePositiveS32);
00473
00474 childSetCommitCallback("billable factor", onChangeAnything, this);
00475
00476 childSetCommitCallback("land cost", onChangeAnything, this);
00477
00478 childSetAction("Refresh", onRefresh, this);
00479 childSetAction("Apply", onApplyChanges, this);
00480
00481 childSetAction("Select Region", onSelectRegion, this);
00482 childSetAction("Autosave now", onSaveState, this);
00483
00484 return TRUE;
00485 }
00486
00487
00488 LLPanelRegionTools::~LLPanelRegionTools()
00489 {
00490
00491 }
00492
00493 U32 LLPanelRegionTools::computeRegionFlags(U32 flags) const
00494 {
00495 flags &= getRegionFlagsMask();
00496 flags |= getRegionFlags();
00497 return flags;
00498 }
00499
00500
00501 void LLPanelRegionTools::refresh()
00502 {
00503 }
00504
00505
00506 void LLPanelRegionTools::clearAllWidgets()
00507 {
00508
00509 childSetValue("region name", "unknown");
00510 childSetFocus("region name", FALSE);
00511
00512 childSetValue("check prelude", FALSE);
00513 childDisable("check prelude");
00514
00515 childSetValue("check fixed sun", FALSE);
00516 childDisable("check fixed sun");
00517
00518 childSetValue("check reset home", FALSE);
00519 childDisable("check reset home");
00520
00521 childSetValue("check damage", FALSE);
00522 childDisable("check damage");
00523
00524 childSetValue("check visible", FALSE);
00525 childDisable("check visible");
00526
00527 childSetValue("block terraform", FALSE);
00528 childDisable("block terraform");
00529
00530 childSetValue("block dwell", FALSE);
00531 childDisable("block dwell");
00532
00533 childSetValue("is sandbox", FALSE);
00534 childDisable("is sandbox");
00535
00536 childSetValue("billable factor", BILLABLE_FACTOR_DEFAULT);
00537 childDisable("billable factor");
00538
00539 childSetValue("land cost", PRICE_PER_METER_DEFAULT);
00540 childDisable("land cost");
00541
00542 childDisable("Apply");
00543 childDisable("Bake Terrain");
00544 childDisable("Autosave now");
00545 }
00546
00547
00548 void LLPanelRegionTools::enableAllWidgets()
00549 {
00550
00551
00552 childEnable("check prelude");
00553 childEnable("check fixed sun");
00554 childEnable("check reset home");
00555 childEnable("check damage");
00556 childDisable("check visible");
00557 childEnable("block terraform");
00558 childEnable("block dwell");
00559 childEnable("is sandbox");
00560
00561 childEnable("billable factor");
00562 childEnable("land cost");
00563
00564 childDisable("Apply");
00565 childEnable("Bake Terrain");
00566 childEnable("Autosave now");
00567 }
00568
00569
00570
00571 void LLPanelRegionTools::onSaveState(void* userdata)
00572 {
00573 if (gAgent.isGodlike())
00574 {
00575
00576 gMessageSystem->newMessageFast(_PREHASH_StateSave);
00577 gMessageSystem->nextBlockFast(_PREHASH_AgentData);
00578 gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
00579 gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
00580 gMessageSystem->nextBlockFast(_PREHASH_DataBlock);
00581 gMessageSystem->addStringFast(_PREHASH_Filename, NULL);
00582 gAgent.sendReliableMessage();
00583 }
00584 }
00585
00586 const std::string LLPanelRegionTools::getSimName() const
00587 {
00588 return childGetValue("region name");
00589 }
00590
00591 U32 LLPanelRegionTools::getEstateID() const
00592 {
00593 U32 id = (U32)childGetValue("estate").asInteger();
00594 return id;
00595 }
00596
00597 U32 LLPanelRegionTools::getParentEstateID() const
00598 {
00599 U32 id = (U32)childGetValue("parentestate").asInteger();
00600 return id;
00601 }
00602
00603 S32 LLPanelRegionTools::getRedirectGridX() const
00604 {
00605 return childGetValue("redirectx").asInteger();
00606 }
00607
00608 S32 LLPanelRegionTools::getRedirectGridY() const
00609 {
00610 return childGetValue("redirecty").asInteger();
00611 }
00612
00613 S32 LLPanelRegionTools::getGridPosX() const
00614 {
00615 return childGetValue("gridposx").asInteger();
00616 }
00617
00618 S32 LLPanelRegionTools::getGridPosY() const
00619 {
00620 return childGetValue("gridposy").asInteger();
00621 }
00622
00623 U32 LLPanelRegionTools::getRegionFlags() const
00624 {
00625 U32 flags = 0x0;
00626 flags = childGetValue("check prelude").asBoolean()
00627 ? set_prelude_flags(flags)
00628 : unset_prelude_flags(flags);
00629
00630
00631 if (childGetValue("check fixed sun").asBoolean())
00632 {
00633 flags |= REGION_FLAGS_SUN_FIXED;
00634 }
00635 if (childGetValue("check reset home").asBoolean())
00636 {
00637 flags |= REGION_FLAGS_RESET_HOME_ON_TELEPORT;
00638 }
00639 if (childGetValue("check visible").asBoolean())
00640 {
00641 flags |= REGION_FLAGS_EXTERNALLY_VISIBLE;
00642 }
00643 if (childGetValue("check damage").asBoolean())
00644 {
00645 flags |= REGION_FLAGS_ALLOW_DAMAGE;
00646 }
00647 if (childGetValue("block terraform").asBoolean())
00648 {
00649 flags |= REGION_FLAGS_BLOCK_TERRAFORM;
00650 }
00651 if (childGetValue("block dwell").asBoolean())
00652 {
00653 flags |= REGION_FLAGS_BLOCK_DWELL;
00654 }
00655 if (childGetValue("is sandbox").asBoolean())
00656 {
00657 flags |= REGION_FLAGS_SANDBOX;
00658 }
00659 return flags;
00660 }
00661
00662 U32 LLPanelRegionTools::getRegionFlagsMask() const
00663 {
00664 U32 flags = 0xffffffff;
00665 flags = childGetValue("check prelude").asBoolean()
00666 ? set_prelude_flags(flags)
00667 : unset_prelude_flags(flags);
00668
00669 if (!childGetValue("check fixed sun").asBoolean())
00670 {
00671 flags &= ~REGION_FLAGS_SUN_FIXED;
00672 }
00673 if (!childGetValue("check reset home").asBoolean())
00674 {
00675 flags &= ~REGION_FLAGS_RESET_HOME_ON_TELEPORT;
00676 }
00677 if (!childGetValue("check visible").asBoolean())
00678 {
00679 flags &= ~REGION_FLAGS_EXTERNALLY_VISIBLE;
00680 }
00681 if (!childGetValue("check damage").asBoolean())
00682 {
00683 flags &= ~REGION_FLAGS_ALLOW_DAMAGE;
00684 }
00685 if (!childGetValue("block terraform").asBoolean())
00686 {
00687 flags &= ~REGION_FLAGS_BLOCK_TERRAFORM;
00688 }
00689 if (!childGetValue("block dwell").asBoolean())
00690 {
00691 flags &= ~REGION_FLAGS_BLOCK_DWELL;
00692 }
00693 if (!childGetValue("is sandbox").asBoolean())
00694 {
00695 flags &= ~REGION_FLAGS_SANDBOX;
00696 }
00697 return flags;
00698 }
00699
00700 F32 LLPanelRegionTools::getBillableFactor() const
00701 {
00702 return (F32)childGetValue("billable factor").asReal();
00703 }
00704
00705 S32 LLPanelRegionTools::getPricePerMeter() const
00706 {
00707 return childGetValue("land cost");
00708 }
00709
00710 void LLPanelRegionTools::setSimName(char *name)
00711 {
00712 childSetValue("region name", name);
00713 }
00714
00715 void LLPanelRegionTools::setEstateID(U32 id)
00716 {
00717 childSetValue("estate", (S32)id);
00718 }
00719
00720 void LLPanelRegionTools::setGridPosX(S32 pos)
00721 {
00722 childSetValue("gridposx", pos);
00723 }
00724
00725 void LLPanelRegionTools::setGridPosY(S32 pos)
00726 {
00727 childSetValue("gridposy", pos);
00728 }
00729
00730 void LLPanelRegionTools::setRedirectGridX(S32 pos)
00731 {
00732 childSetValue("redirectx", pos);
00733 }
00734
00735 void LLPanelRegionTools::setRedirectGridY(S32 pos)
00736 {
00737 childSetValue("redirecty", pos);
00738 }
00739
00740 void LLPanelRegionTools::setParentEstateID(U32 id)
00741 {
00742 childSetValue("parentestate", (S32)id);
00743 }
00744
00745 void LLPanelRegionTools::setCheckFlags(U32 flags)
00746 {
00747 childSetValue("check prelude", is_prelude(flags) ? TRUE : FALSE);
00748 childSetValue("check fixed sun", flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE);
00749 childSetValue("check reset home", flags & REGION_FLAGS_RESET_HOME_ON_TELEPORT ? TRUE : FALSE);
00750 childSetValue("check damage", flags & REGION_FLAGS_ALLOW_DAMAGE ? TRUE : FALSE);
00751 childSetValue("check visible", flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE);
00752 childSetValue("block terraform", flags & REGION_FLAGS_BLOCK_TERRAFORM ? TRUE : FALSE);
00753 childSetValue("block dwell", flags & REGION_FLAGS_BLOCK_DWELL ? TRUE : FALSE);
00754 childSetValue("is sandbox", flags & REGION_FLAGS_SANDBOX ? TRUE : FALSE );
00755 }
00756
00757 void LLPanelRegionTools::setBillableFactor(F32 billable_factor)
00758 {
00759 childSetValue("billable factor", billable_factor);
00760 }
00761
00762 void LLPanelRegionTools::setPricePerMeter(S32 price)
00763 {
00764 childSetValue("land cost", price);
00765 }
00766
00767
00768 void LLPanelRegionTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
00769 {
00770 if (sGodTools
00771 && userdata
00772 && gAgent.isGodlike())
00773 {
00774 LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
00775 region_tools->childEnable("Apply");
00776 }
00777 }
00778
00779
00780 void LLPanelRegionTools::onChangePrelude(LLUICtrl* ctrl, void* data)
00781 {
00782
00783 LLPanelRegionTools* self = (LLPanelRegionTools*)data;
00784 if (self->childGetValue("check prelude").asBoolean())
00785 {
00786 self->childSetValue("check fixed sun", TRUE);
00787 self->childSetValue("check reset home", TRUE);
00788 }
00789
00790 onChangeAnything(ctrl, data);
00791 }
00792
00793
00794 void LLPanelRegionTools::onChangeSimName(LLLineEditor* caller, void* userdata )
00795 {
00796 if (sGodTools
00797 && userdata
00798 && gAgent.isGodlike())
00799 {
00800 LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
00801 region_tools->childEnable("Apply");
00802 }
00803 }
00804
00805
00806 void LLPanelRegionTools::onRefresh(void* userdata)
00807 {
00808 LLViewerRegion *region = gAgent.getRegion();
00809 if (region
00810 && sGodTools
00811 && gAgent.isGodlike())
00812 {
00813 sGodTools->sendRegionInfoRequest();
00814 }
00815 }
00816
00817
00818 void LLPanelRegionTools::onApplyChanges(void* userdata)
00819 {
00820 LLViewerRegion *region = gAgent.getRegion();
00821 if (region
00822 && sGodTools
00823 && userdata
00824 && gAgent.isGodlike())
00825 {
00826 LLPanelRegionTools* region_tools = (LLPanelRegionTools*) userdata;
00827
00828 region_tools->childDisable("Apply");
00829 sGodTools->sendGodUpdateRegionInfo();
00830 }
00831 }
00832
00833
00834 void LLPanelRegionTools::onBakeTerrain(void *userdata)
00835 {
00836 LLPanelRequestTools::sendRequest("terrain", "bake", gAgent.getRegionHost());
00837 }
00838
00839
00840 void LLPanelRegionTools::onRevertTerrain(void *userdata)
00841 {
00842 LLPanelRequestTools::sendRequest("terrain", "revert", gAgent.getRegionHost());
00843 }
00844
00845
00846 void LLPanelRegionTools::onSwapTerrain(void *userdata)
00847 {
00848 LLPanelRequestTools::sendRequest("terrain", "swap", gAgent.getRegionHost());
00849 }
00850
00851
00852 void LLPanelRegionTools::onSelectRegion(void* userdata)
00853 {
00854 llinfos << "LLPanelRegionTools::onSelectRegion" << llendl;
00855
00856 if (!gWorldp)
00857 {
00858 return;
00859 }
00860 LLViewerRegion *regionp = gWorldp->getRegionFromPosGlobal(gAgent.getPositionGlobal());
00861 if (!regionp)
00862 {
00863 return;
00864 }
00865
00866 LLVector3d north_east(REGION_WIDTH_METERS, REGION_WIDTH_METERS, 0);
00867 gParcelMgr->selectLand(regionp->getOriginGlobal(),
00868 regionp->getOriginGlobal() + north_east, FALSE);
00869
00870 }
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895 const F32 HOURS_TO_RADIANS = (2.f*F_PI)/24.f;
00896 const char FLOATER_GRID_ADMIN_TITLE[] = "Grid Administration";
00897
00898
00899 LLPanelGridTools::LLPanelGridTools(const std::string& name) :
00900 LLPanel(name)
00901 {
00902 }
00903
00904
00905 LLPanelGridTools::~LLPanelGridTools()
00906 {
00907 }
00908
00909 BOOL LLPanelGridTools::postBuild()
00910 {
00911 childSetAction("Kick all users", onClickKickAll, this);
00912 childSetAction("Flush This Region's Map Visibility Caches", onClickFlushMapVisibilityCaches, this);
00913
00914 return TRUE;
00915 }
00916
00917 void LLPanelGridTools::refresh()
00918 {
00919 }
00920
00921
00922
00923 void LLPanelGridTools::onClickKickAll(void* userdata)
00924 {
00925 LLPanelGridTools* self = (LLPanelGridTools*) userdata;
00926
00927 S32 left, top;
00928 gFloaterView->getNewFloaterPosition(&left, &top);
00929 LLRect rect(left, top, left+400, top-300);
00930
00931 gViewerWindow->alertXmlEditText("KickAllUsers", LLString::format_map_t(),
00932 NULL, NULL,
00933 LLPanelGridTools::confirmKick, self);
00934 }
00935
00936
00937 void LLPanelGridTools::confirmKick(S32 option, const LLString& text, void* userdata)
00938 {
00939 LLPanelGridTools* self = (LLPanelGridTools*) userdata;
00940
00941 if (option == 0)
00942 {
00943 self->mKickMessage = text;
00944 gViewerWindow->alertXml("ConfirmKick",LLPanelGridTools::finishKick, self);
00945 }
00946 }
00947
00948
00949
00950 void LLPanelGridTools::finishKick(S32 option, void* userdata)
00951 {
00952 LLPanelGridTools* self = (LLPanelGridTools*) userdata;
00953
00954 if (option == 0)
00955 {
00956 LLMessageSystem* msg = gMessageSystem;
00957
00958 msg->newMessageFast(_PREHASH_GodKickUser);
00959 msg->nextBlockFast(_PREHASH_UserInfo);
00960 msg->addUUIDFast(_PREHASH_GodID, gAgent.getID());
00961 msg->addUUIDFast(_PREHASH_GodSessionID, gAgent.getSessionID());
00962 msg->addUUIDFast(_PREHASH_AgentID, LL_UUID_ALL_AGENTS );
00963 msg->addU32("KickFlags", KICK_FLAGS_DEFAULT );
00964 msg->addStringFast(_PREHASH_Reason, self->mKickMessage.c_str() );
00965 gAgent.sendReliableMessage();
00966 }
00967 }
00968
00969
00970
00971 void LLPanelGridTools::onClickFlushMapVisibilityCaches(void* data)
00972 {
00973 gViewerWindow->alertXml("FlushMapVisibilityCaches",
00974 flushMapVisibilityCachesConfirm, data);
00975 }
00976
00977
00978 void LLPanelGridTools::flushMapVisibilityCachesConfirm(S32 option, void* data)
00979 {
00980 if (option != 0) return;
00981
00982 LLPanelGridTools* self = (LLPanelGridTools*)data;
00983 if (!self) return;
00984
00985
00986
00987 LLMessageSystem* msg = gMessageSystem;
00988 msg->newMessage("EstateOwnerMessage");
00989 msg->nextBlockFast(_PREHASH_AgentData);
00990 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
00991 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
00992 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null);
00993 msg->nextBlock("MethodData");
00994 msg->addString("Method", "refreshmapvisibility");
00995 msg->addUUID("Invoice", LLUUID::null);
00996 msg->nextBlock("ParamList");
00997 msg->addString("Parameter", gAgent.getID().asString());
00998 gAgent.sendReliableMessage();
00999 }
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027 LLPanelObjectTools::LLPanelObjectTools(const std::string& title)
01028 : LLPanel(title), mTargetAvatar()
01029 {
01030 }
01031
01032
01033 LLPanelObjectTools::~LLPanelObjectTools()
01034 {
01035
01036 }
01037
01038 BOOL LLPanelObjectTools::postBuild()
01039 {
01040 childSetCommitCallback("disable scripts", onChangeAnything, this);
01041 childSetCommitCallback("disable collisions", onChangeAnything, this);
01042 childSetCommitCallback("disable physics", onChangeAnything, this);
01043
01044 childSetAction("Apply", onApplyChanges, this);
01045
01046 childSetAction("Set Target", onClickSet, this);
01047
01048 childSetAction("Delete Target's Scripted Objects On Others Land", onClickDeletePublicOwnedBy, this);
01049 childSetAction("Delete Target's Scripted Objects On *Any* Land", onClickDeleteAllScriptedOwnedBy, this);
01050 childSetAction("Delete *ALL* Of Target's Objects", onClickDeleteAllOwnedBy, this);
01051
01052 childSetAction("Get Top Colliders", onGetTopColliders, this);
01053 childSetAction("Get Top Scripts", onGetTopScripts, this);
01054 childSetAction("Scripts digest", onGetScriptDigest, this);
01055
01056 return TRUE;
01057 }
01058
01059 void LLPanelObjectTools::setTargetAvatar(const LLUUID &target_id)
01060 {
01061 mTargetAvatar = target_id;
01062 if (target_id.isNull())
01063 {
01064 childSetValue("target_avatar_name", "(no target)");
01065 }
01066 }
01067
01068
01069 void LLPanelObjectTools::refresh()
01070 {
01071 LLViewerRegion *regionp = gAgent.getRegion();
01072 if (regionp)
01073 {
01074 childSetText("region name", regionp->getName());
01075 }
01076 }
01077
01078
01079 U32 LLPanelObjectTools::computeRegionFlags(U32 flags) const
01080 {
01081 if (childGetValue("disable scripts").asBoolean())
01082 {
01083 flags |= REGION_FLAGS_SKIP_SCRIPTS;
01084 }
01085 else
01086 {
01087 flags &= ~REGION_FLAGS_SKIP_SCRIPTS;
01088 }
01089 if (childGetValue("disable collisions").asBoolean())
01090 {
01091 flags |= REGION_FLAGS_SKIP_COLLISIONS;
01092 }
01093 else
01094 {
01095 flags &= ~REGION_FLAGS_SKIP_COLLISIONS;
01096 }
01097 if (childGetValue("disable physics").asBoolean())
01098 {
01099 flags |= REGION_FLAGS_SKIP_PHYSICS;
01100 }
01101 else
01102 {
01103 flags &= ~REGION_FLAGS_SKIP_PHYSICS;
01104 }
01105 return flags;
01106 }
01107
01108
01109 void LLPanelObjectTools::setCheckFlags(U32 flags)
01110 {
01111 childSetValue("disable scripts", flags & REGION_FLAGS_SKIP_SCRIPTS ? TRUE : FALSE);
01112 childSetValue("disable collisions", flags & REGION_FLAGS_SKIP_COLLISIONS ? TRUE : FALSE);
01113 childSetValue("disable physics", flags & REGION_FLAGS_SKIP_PHYSICS ? TRUE : FALSE);
01114 }
01115
01116
01117 void LLPanelObjectTools::clearAllWidgets()
01118 {
01119 childSetValue("disable scripts", FALSE);
01120 childDisable("disable scripts");
01121
01122 childDisable("Apply");
01123 childDisable("Set Target");
01124 childDisable("Delete Target's Scripted Objects On Others Land");
01125 childDisable("Delete Target's Scripted Objects On *Any* Land");
01126 childDisable("Delete *ALL* Of Target's Objects");
01127 }
01128
01129
01130 void LLPanelObjectTools::enableAllWidgets()
01131 {
01132 childEnable("disable scripts");
01133
01134 childDisable("Apply");
01135 childEnable("Set Target");
01136 childEnable("Delete Target's Scripted Objects On Others Land");
01137 childEnable("Delete Target's Scripted Objects On *Any* Land");
01138 childEnable("Delete *ALL* Of Target's Objects");
01139 childEnable("Get Top Colliders");
01140 childEnable("Get Top Scripts");
01141 }
01142
01143
01144
01145 void LLPanelObjectTools::onGetTopColliders(void* userdata)
01146 {
01147 if (sGodTools
01148 && gAgent.isGodlike())
01149 {
01150 LLFloaterTopObjects::show();
01151 LLFloaterTopObjects::setMode(STAT_REPORT_TOP_COLLIDERS);
01152 LLFloaterTopObjects::onRefresh(NULL);
01153 }
01154 }
01155
01156
01157 void LLPanelObjectTools::onGetTopScripts(void* userdata)
01158 {
01159 if (sGodTools
01160 && gAgent.isGodlike())
01161 {
01162 LLFloaterTopObjects::show();
01163 LLFloaterTopObjects::setMode(STAT_REPORT_TOP_SCRIPTS);
01164 LLFloaterTopObjects::onRefresh(NULL);
01165 }
01166 }
01167
01168
01169 void LLPanelObjectTools::onGetScriptDigest(void* userdata)
01170 {
01171 if (sGodTools
01172 && gAgent.isGodlike())
01173 {
01174
01175
01176 LLPanelRequestTools::sendRequest("scriptdigest","0",gAgent.getRegionHost());
01177 }
01178 }
01179
01180 void LLPanelObjectTools::onClickDeletePublicOwnedBy(void* userdata)
01181 {
01182
01183 LLPanelObjectTools* panelp = (LLPanelObjectTools*)userdata;
01184 if (!panelp->mTargetAvatar.isNull())
01185 {
01186 panelp->mSimWideDeletesFlags =
01187 SWD_SCRIPTED_ONLY | SWD_OTHERS_LAND_ONLY;
01188
01189 LLStringBase<char>::format_map_t args;
01190 args["[AVATAR_NAME]"] = panelp->childGetValue("target_avatar_name").asString();
01191
01192 gViewerWindow->alertXml( "GodDeleteAllScriptedPublicObjectsByUser",
01193 args,
01194 callbackSimWideDeletes,
01195 userdata);
01196 }
01197 }
01198
01199
01200 void LLPanelObjectTools::onClickDeleteAllScriptedOwnedBy(void* userdata)
01201 {
01202
01203 LLPanelObjectTools* panelp = (LLPanelObjectTools*)userdata;
01204 if (!panelp->mTargetAvatar.isNull())
01205 {
01206 panelp->mSimWideDeletesFlags = SWD_SCRIPTED_ONLY;
01207
01208 LLStringBase<char>::format_map_t args;
01209 args["[AVATAR_NAME]"] = panelp->childGetValue("target_avatar_name").asString();
01210
01211 gViewerWindow->alertXml( "GodDeleteAllScriptedObjectsByUser",
01212 args,
01213 callbackSimWideDeletes,
01214 userdata);
01215 }
01216 }
01217
01218
01219 void LLPanelObjectTools::onClickDeleteAllOwnedBy(void* userdata)
01220 {
01221
01222 LLPanelObjectTools* panelp = (LLPanelObjectTools*)userdata;
01223 if (!panelp->mTargetAvatar.isNull())
01224 {
01225 panelp->mSimWideDeletesFlags = 0;
01226
01227 LLStringBase<char>::format_map_t args;
01228 args["[AVATAR_NAME]"] = panelp->childGetValue("target_avatar_name").asString();
01229
01230 gViewerWindow->alertXml( "GodDeleteAllObjectsByUser",
01231 args,
01232 callbackSimWideDeletes,
01233 userdata);
01234 }
01235 }
01236
01237
01238 void LLPanelObjectTools::callbackSimWideDeletes( S32 option, void* userdata )
01239 {
01240 if (option == 0)
01241 {
01242 LLPanelObjectTools* object_tools = (LLPanelObjectTools*) userdata;
01243 if (!object_tools->mTargetAvatar.isNull())
01244 {
01245 send_sim_wide_deletes(object_tools->mTargetAvatar,
01246 object_tools->mSimWideDeletesFlags);
01247 }
01248 }
01249 }
01250
01251 void LLPanelObjectTools::onClickSet(void* data)
01252 {
01253 LLPanelObjectTools* panelp = (LLPanelObjectTools*) data;
01254
01255 gFloaterView->getParentFloater(panelp)->addDependentFloater(LLFloaterAvatarPicker::show(callbackAvatarID, data));
01256 }
01257
01258 void LLPanelObjectTools::onClickSetBySelection(void* data)
01259 {
01260 LLPanelObjectTools* panelp = (LLPanelObjectTools*) data;
01261 if (!panelp) return;
01262
01263 const BOOL non_root_ok = TRUE;
01264 LLSelectNode* node = gSelectMgr->getSelection()->getFirstRootNode(NULL, non_root_ok);
01265 if (!node) return;
01266
01267 LLString owner_name;
01268 LLUUID owner_id;
01269 gSelectMgr->selectGetOwner(owner_id, owner_name);
01270
01271 panelp->mTargetAvatar = owner_id;
01272 LLString name = "Object " + node->mName + " owned by " + owner_name;
01273 panelp->childSetValue("target_avatar_name", name);
01274 }
01275
01276
01277 void LLPanelObjectTools::callbackAvatarID(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* data)
01278 {
01279 LLPanelObjectTools* object_tools = (LLPanelObjectTools*) data;
01280 if (ids.empty() || names.empty()) return;
01281 object_tools->mTargetAvatar = ids[0];
01282 object_tools->childSetValue("target_avatar_name", names[0]);
01283 object_tools->refresh();
01284 }
01285
01286
01287
01288 void LLPanelObjectTools::onChangeAnything(LLUICtrl* ctrl, void* userdata)
01289 {
01290 if (sGodTools
01291 && userdata
01292 && gAgent.isGodlike())
01293 {
01294 LLPanelObjectTools* object_tools = (LLPanelObjectTools*) userdata;
01295 object_tools->childEnable("Apply");
01296 }
01297 }
01298
01299
01300 void LLPanelObjectTools::onApplyChanges(void* userdata)
01301 {
01302 LLViewerRegion *region = gAgent.getRegion();
01303 if (region
01304 && sGodTools
01305 && userdata
01306 && gAgent.isGodlike())
01307 {
01308 LLPanelObjectTools* object_tools = (LLPanelObjectTools*) userdata;
01309
01310
01311 object_tools->childDisable("Apply");
01312 sGodTools->sendGodUpdateRegionInfo();
01313 }
01314 }
01315
01316
01317
01318
01319
01320
01321 const char SELECTION[] = "Selection";
01322 const char AGENT_REGION[] = "Agent Region";
01323
01324 LLPanelRequestTools::LLPanelRequestTools(const std::string& name):
01325 LLPanel(name)
01326 {
01327 }
01328
01329 LLPanelRequestTools::~LLPanelRequestTools()
01330 {
01331 }
01332
01333 BOOL LLPanelRequestTools::postBuild()
01334 {
01335 childSetAction("Make Request", onClickRequest, this);
01336
01337 refresh();
01338
01339 return TRUE;
01340 }
01341
01342 void LLPanelRequestTools::refresh()
01343 {
01344 std::string buffer = childGetValue("destination");
01345 LLCtrlListInterface *list = childGetListInterface("destination");
01346 if (!list) return;
01347
01348 list->operateOnAll(LLCtrlListInterface::OP_DELETE);
01349 list->addSimpleElement(SELECTION);
01350 list->addSimpleElement(AGENT_REGION);
01351 for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin();
01352 iter != gWorldp->mActiveRegionList.end(); ++iter)
01353 {
01354 LLViewerRegion* regionp = *iter;
01355 LLString name = regionp->getName();
01356 if (!name.empty())
01357 {
01358 list->addSimpleElement(name);
01359 }
01360 }
01361 if(!buffer.empty())
01362 {
01363 list->selectByValue(buffer);
01364 }
01365 else
01366 {
01367 list->selectByValue(SELECTION);
01368 }
01369 }
01370
01371
01372
01373 void LLPanelRequestTools::sendRequest(const char *request,
01374 const char *parameter,
01375 const LLHost& host)
01376 {
01377 llinfos << "Sending request '" << request << "', '"
01378 << parameter << "' to " << host << llendl;
01379 LLMessageSystem* msg = gMessageSystem;
01380 msg->newMessage("GodlikeMessage");
01381 msg->nextBlockFast(_PREHASH_AgentData);
01382 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
01383 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
01384 msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null);
01385 msg->nextBlock("MethodData");
01386 msg->addString("Method", request);
01387 msg->addUUID("Invoice", LLUUID::null);
01388 msg->nextBlock("ParamList");
01389 msg->addString("Parameter", parameter);
01390 msg->sendReliable(host);
01391 }
01392
01393
01394 void LLPanelRequestTools::onClickRequest(void* data)
01395 {
01396 LLPanelRequestTools* self = (LLPanelRequestTools*)data;
01397 const std::string dest = self->childGetValue("destination").asString();
01398 if(dest == SELECTION)
01399 {
01400 std::string req = self->childGetValue("request");
01401 req = req.substr(0, req.find_first_of(" "));
01402 std::string param = self->childGetValue("parameter");
01403 gSelectMgr->sendGodlikeRequest(req, param);
01404 }
01405 else if(dest == AGENT_REGION)
01406 {
01407 self->sendRequest(gAgent.getRegionHost());
01408 }
01409 else
01410 {
01411
01412 for (LLWorld::region_list_t::iterator iter = gWorldp->mActiveRegionList.begin();
01413 iter != gWorldp->mActiveRegionList.end(); ++iter)
01414 {
01415 LLViewerRegion* regionp = *iter;
01416 if(dest == regionp->getName())
01417 {
01418
01419 self->sendRequest(regionp->getHost());
01420 }
01421 }
01422 }
01423 }
01424
01425 void terrain_download_done(void** data, S32 status, LLExtStat ext_status)
01426 {
01427 LLNotifyBox::showXml("TerrainDownloaded");
01428 }
01429
01430
01431 void test_callback(const LLTSCode status)
01432 {
01433 llinfos << "Test transfer callback returned!" << llendl;
01434 }
01435
01436
01437 void LLPanelRequestTools::sendRequest(const LLHost& host)
01438 {
01439
01440
01441 std::string req = childGetValue("request");
01442 if (req == "terrain download")
01443 {
01444 gXferManager->requestFile("terrain.raw", "terrain.raw", LL_PATH_NONE,
01445 host,
01446 FALSE,
01447 terrain_download_done,
01448 NULL);
01449 }
01450 else
01451 {
01452 req = req.substr(0, req.find_first_of(" "));
01453 sendRequest(req.c_str(), childGetValue("parameter").asString().c_str(), host);
01454 }
01455 }
01456
01457
01458 void send_sim_wide_deletes(const LLUUID& owner_id, U32 flags)
01459 {
01460 LLMessageSystem* msg = gMessageSystem;
01461 msg->newMessageFast(_PREHASH_SimWideDeletes);
01462 msg->nextBlockFast(_PREHASH_AgentData);
01463 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
01464 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
01465 msg->nextBlockFast(_PREHASH_DataBlock);
01466 msg->addUUIDFast(_PREHASH_TargetID, owner_id);
01467 msg->addU32Fast(_PREHASH_Flags, flags);
01468 gAgent.sendReliableMessage();
01469 }