diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h index 05e59d51f..3f0e8dd6c 100644 --- a/indra/llcommon/indra_constants.h +++ b/indra/llcommon/indra_constants.h @@ -63,6 +63,7 @@ enum LAND_STAT_FLAGS STAT_FILTER_BY_PARCEL = 0x00000001, STAT_FILTER_BY_OWNER = 0x00000002, STAT_FILTER_BY_OBJECT = 0x00000004, + STAT_FILTER_BY_PARCEL_NAME = 0x00000008, STAT_REQUEST_LAST_ENTRY = 0x80000000, }; diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp index d4d21f352..fc4287982 100644 --- a/indra/newview/llfloatergodtools.cpp +++ b/indra/newview/llfloatergodtools.cpp @@ -62,7 +62,6 @@ #include "llviewerwindow.h" #include "llworld.h" #include "llfloateravatarpicker.h" -#include "llnotify.h" #include "llxfermanager.h" #include "llvlcomposition.h" #include "llsurface.h" @@ -77,9 +76,9 @@ const F32 SECONDS_BETWEEN_UPDATE_REQUESTS = 5.0f; -// ***************************************************************************** +//***************************************************************************** // LLFloaterGodTools -// ***************************************************************************** +//***************************************************************************** void LLFloaterGodTools::onOpen() { @@ -100,6 +99,7 @@ void LLFloaterGodTools::onOpen() } } + // static void LLFloaterGodTools::refreshAll() { @@ -121,36 +121,31 @@ LLFloaterGodTools::LLFloaterGodTools() mCurrentHost(LLHost::invalid), mUpdateTimer() { - LLCallbackMap::map_t factory_map; - factory_map["grid"] = LLCallbackMap(createPanelGrid, this); - factory_map["region"] = LLCallbackMap(createPanelRegion, this); - factory_map["objects"] = LLCallbackMap(createPanelObjects, this); - factory_map["request"] = LLCallbackMap(createPanelRequest, this); - LLUICtrlFactory::getInstance()->buildFloater(this, "floater_god_tools.xml", &factory_map); + mFactoryMap["grid"] = LLCallbackMap(createPanelGrid, this); + mFactoryMap["region"] = LLCallbackMap(createPanelRegion, this); + mFactoryMap["objects"] = LLCallbackMap(createPanelObjects, this); + mFactoryMap["request"] = LLCallbackMap(createPanelRequest, this); + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_god_tools.xml", &getFactoryMap()); } BOOL LLFloaterGodTools::postBuild() { - getChild("GodTools Tabs")->setCommitCallback(boost::bind(&LLFloaterGodTools::onTabChanged,_1,_2)); - sendRegionInfoRequest(); getChild("GodTools Tabs")->selectTabByName("region"); - - childSetTextArg("land cost text", "[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol()); + getChild("land cost text")->setTextArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol()); return TRUE; } - // static void* LLFloaterGodTools::createPanelGrid(void *userdata) { - return new LLPanelGridTools("grid"); + return new LLPanelGridTools(); } // static void* LLFloaterGodTools::createPanelRegion(void *userdata) { LLFloaterGodTools* self = (LLFloaterGodTools*)userdata; - self->mPanelRegionTools = new LLPanelRegionTools("region"); + self->mPanelRegionTools = new LLPanelRegionTools(); return self->mPanelRegionTools; } @@ -158,14 +153,14 @@ void* LLFloaterGodTools::createPanelRegion(void *userdata) void* LLFloaterGodTools::createPanelObjects(void *userdata) { LLFloaterGodTools* self = (LLFloaterGodTools*)userdata; - self->mPanelObjectTools = new LLPanelObjectTools("objects"); + self->mPanelObjectTools = new LLPanelObjectTools(); return self->mPanelObjectTools; } // static void* LLFloaterGodTools::createPanelRequest(void *userdata) { - return new LLPanelRequestTools("region"); + return new LLPanelRequestTools(); } LLFloaterGodTools::~LLFloaterGodTools() @@ -226,14 +221,6 @@ void LLFloaterGodTools::showPanel(const std::string& panel_name) panel->setFocus(TRUE); } -//static -void LLFloaterGodTools::onTabChanged(LLUICtrl* ctrl, const LLSD& param) -{ - LLPanel* panel = (LLPanel*)ctrl->getChildView(param.asString(),false,false); - if (panel) - panel->setFocus(TRUE); -} - // static void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg) { @@ -403,9 +390,9 @@ void LLFloaterGodTools::sendGodUpdateRegionInfo() } } -// ***************************************************************************** +//***************************************************************************** // LLPanelRegionTools -// ***************************************************************************** +//***************************************************************************** // || Region |______________________________________ @@ -440,72 +427,37 @@ const F32 PRICE_PER_METER_MIN = 0.f; const F32 PRICE_PER_METER_MAX = 100.f; -LLPanelRegionTools::LLPanelRegionTools(const std::string& title) -: LLPanel(title) +LLPanelRegionTools::LLPanelRegionTools() +: LLPanel() { + mCommitCallbackRegistrar.add("RegionTools.ChangeAnything", boost::bind(&LLPanelRegionTools::onChangeAnything, this)); + mCommitCallbackRegistrar.add("RegionTools.ChangePrelude", boost::bind(&LLPanelRegionTools::onChangePrelude, this)); + mCommitCallbackRegistrar.add("RegionTools.BakeTerrain", boost::bind(&LLPanelRegionTools::onBakeTerrain, this)); + mCommitCallbackRegistrar.add("RegionTools.RevertTerrain", boost::bind(&LLPanelRegionTools::onRevertTerrain, this)); + mCommitCallbackRegistrar.add("RegionTools.SwapTerrain", boost::bind(&LLPanelRegionTools::onSwapTerrain, this)); + mCommitCallbackRegistrar.add("RegionTools.Refresh", boost::bind(&LLPanelRegionTools::onRefresh, this)); + mCommitCallbackRegistrar.add("RegionTools.ApplyChanges", boost::bind(&LLPanelRegionTools::onApplyChanges, this)); + mCommitCallbackRegistrar.add("RegionTools.SelectRegion", boost::bind(&LLPanelRegionTools::onSelectRegion, this)); + mCommitCallbackRegistrar.add("RegionTools.SaveState", boost::bind(&LLPanelRegionTools::onSaveState, this)); } BOOL LLPanelRegionTools::postBuild() { - LLLineEditor* region_name = getChild("region name"); - region_name->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - region_name->setKeystrokeCallback(boost::bind(&LLPanelRegionTools::onChangeSimName, this)); - region_name->setPrevalidate(&LLLineEditor::prevalidatePrintableNotPipe); + getChild("region name")->setKeystrokeCallback(boost::bind(&LLPanelRegionTools::onChangeSimName, this)); + getChild("region name")->setPrevalidate(&LLLineEditor::prevalidatePrintableNotPipe); + getChild("estate")->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); + getChild("parentestate")->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); + getChildView("parentestate")->setEnabled(FALSE); + getChild("gridposx")->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); + getChildView("gridposx")->setEnabled(FALSE); + getChild("gridposy")->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); + getChildView("gridposy")->setEnabled(FALSE); + + getChild("redirectx")->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); + getChild("redirecty")->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); - getChild("check prelude")->setCommitCallback(boost::bind(&LLPanelRegionTools:: onChangePrelude, this)); - getChild("check fixed sun")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - getChild("check reset home")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - getChild("check visible")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - getChild("check damage")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - getChild("block dwell")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - getChild("block terraform")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - getChild("allow transfer")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - getChild("is sandbox")->setCommitCallback( boost::bind(&LLPanelRegionTools::onChangeAnything, this)); getChild("is gaming")->setVisible((gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_GOD_FLOATER)); - getChild("is gaming")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); getChild("hide from search")->setVisible(!gHippoGridManager->getConnectedGrid()->isSecondLife()); - getChild("hide from search")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - - childSetAction("Bake Terrain", boost::bind(&LLPanelRegionTools::onBakeTerrain, this)); - childSetAction("Revert Terrain", boost::bind(&LLPanelRegionTools::onRevertTerrain, this)); - childSetAction("Swap Terrain", boost::bind(&LLPanelRegionTools::onSwapTerrain, this)); - - LLLineEditor* estate = getChild("estate name"); - estate->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - estate->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); - - LLLineEditor* parentestate = getChild("parentestate"); - parentestate->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - parentestate->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); - parentestate->setEnabled(false); - - LLLineEditor* gridposx = getChild("gridposx"); - gridposx->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - gridposx->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); - gridposx->setEnabled(false); - - LLLineEditor* gridposy = getChild("gridposy"); - gridposy->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - gridposy->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); - gridposy->setEnabled(false); - - LLLineEditor* redirectx = getChild("redirectx"); - redirectx->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - redirectx->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); - - LLLineEditor* redirecty = getChild("redirecty"); - redirecty->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - redirecty->setPrevalidate(&LLLineEditor::prevalidatePositiveS32); - - getChild("billable factor")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - - getChild("land cost")->setCommitCallback(boost::bind(&LLPanelRegionTools::onChangeAnything, this)); - - getChild("Refresh")->setClickedCallback(boost::bind(&LLPanelRegionTools::onRefresh, this)); - getChild("Apply")->setClickedCallback(boost::bind(&LLPanelRegionTools::onApplyChanges, this)); - - getChild("Select Region")->setClickedCallback(boost::bind(&LLPanelRegionTools::onSelectRegion, this)); - getChild("Autosave now")->setClickedCallback(boost::bind(&LLPanelRegionTools::onSaveState,(void*)NULL)); return TRUE; } @@ -592,8 +544,7 @@ void LLPanelRegionTools::enableAllWidgets() getChildView("Autosave now")->setEnabled(TRUE); } -//static -void LLPanelRegionTools::onSaveState(void*) +void LLPanelRegionTools::onSaveState(void* userdata) { if (gAgent.isGodlike()) { @@ -918,12 +869,13 @@ void LLPanelRegionTools::onSelectRegion() // LEFT R2 RIGHT const F32 HOURS_TO_RADIANS = (2.f*F_PI)/24.f; -const char FLOATER_GRID_ADMIN_TITLE[] = "Grid Administration"; -LLPanelGridTools::LLPanelGridTools(const std::string& name) : - LLPanel(name) +LLPanelGridTools::LLPanelGridTools() : + LLPanel() { + mCommitCallbackRegistrar.add("GridTools.KickAllUsers", boost::bind(&LLPanelGridTools::onClickKickAll, this)); + mCommitCallbackRegistrar.add("GridTools.FlushMapVisibilityCaches", boost::bind(&LLPanelGridTools::onClickFlushMapVisibilityCaches, this)); } // Destroys the object @@ -933,9 +885,6 @@ LLPanelGridTools::~LLPanelGridTools() BOOL LLPanelGridTools::postBuild() { - childSetAction("Kick all users", boost::bind(&LLPanelGridTools::onClickKickAll, this)); - childSetAction("Flush This Region's Map Visibility Caches", boost::bind(&LLPanelGridTools::onClickFlushMapVisibilityCaches, this)); - return TRUE; } @@ -943,7 +892,6 @@ void LLPanelGridTools::refresh() { } - void LLPanelGridTools::onClickKickAll() { LLNotificationsUtil::add("KickAllUsers", LLSD(), LLSD(), LLPanelGridTools::confirmKick); @@ -952,7 +900,7 @@ void LLPanelGridTools::onClickKickAll() // static bool LLPanelGridTools::confirmKick(const LLSD& notification, const LLSD& response) { - if (LLNotification::getSelectedOption(notification, response) == 0) + if (LLNotificationsUtil::getSelectedOption(notification, response) == 0) { LLSD payload; payload["kick_message"] = response["message"].asString(); @@ -964,7 +912,7 @@ bool LLPanelGridTools::confirmKick(const LLSD& notification, const LLSD& respons // static bool LLPanelGridTools::finishKick(const LLSD& notification, const LLSD& response) { - S32 option = LLNotification::getSelectedOption(notification, response); + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); if (option == 0) { @@ -1036,10 +984,19 @@ bool LLPanelGridTools::flushMapVisibilityCachesConfirm(const LLSD& notification, // LEFT RIGHT // Default constructor -LLPanelObjectTools::LLPanelObjectTools(const std::string& title) - : LLPanel(title), +LLPanelObjectTools::LLPanelObjectTools() + : LLPanel(), mTargetAvatar() { + mCommitCallbackRegistrar.add("ObjectTools.ChangeAnything", boost::bind(&LLPanelObjectTools::onChangeAnything, this)); + mCommitCallbackRegistrar.add("ObjectTools.DeletePublicOwnedBy", boost::bind(&LLPanelObjectTools::onClickDeletePublicOwnedBy, this)); + mCommitCallbackRegistrar.add("ObjectTools.DeleteAllScriptedOwnedBy", boost::bind(&LLPanelObjectTools::onClickDeleteAllScriptedOwnedBy, this)); + mCommitCallbackRegistrar.add("ObjectTools.DeleteAllOwnedBy", boost::bind(&LLPanelObjectTools::onClickDeleteAllOwnedBy, this)); + mCommitCallbackRegistrar.add("ObjectTools.ApplyChanges", boost::bind(&LLPanelObjectTools::onApplyChanges, this)); + mCommitCallbackRegistrar.add("ObjectTools.Set", boost::bind(&LLPanelObjectTools::onClickSet, this)); + mCommitCallbackRegistrar.add("ObjectTools.GetTopColliders", boost::bind(&LLPanelObjectTools::onGetTopColliders, this)); + mCommitCallbackRegistrar.add("ObjectTools.GetTopScripts", boost::bind(&LLPanelObjectTools::onGetTopScripts, this)); + mCommitCallbackRegistrar.add("ObjectTools.GetScriptDigest", boost::bind(&LLPanelObjectTools::onGetScriptDigest, this)); } // Destroys the object @@ -1050,22 +1007,6 @@ LLPanelObjectTools::~LLPanelObjectTools() BOOL LLPanelObjectTools::postBuild() { - getChild("disable scripts")->setCommitCallback(boost::bind(&LLPanelObjectTools::onChangeAnything, this)); - getChild("disable collisions")->setCommitCallback(boost::bind(&LLPanelObjectTools::onChangeAnything, this)); - getChild("disable physics")->setCommitCallback(boost::bind(&LLPanelObjectTools::onChangeAnything, this)); - - childSetAction("Apply", boost::bind(&LLPanelObjectTools::onApplyChanges, this)); - - childSetAction("Set Target", boost::bind(&LLPanelObjectTools::onClickSet, this)); - - childSetAction("Delete Target's Scripted Objects On Others Land", boost::bind(&LLPanelObjectTools::onClickDeletePublicOwnedBy, this)); - childSetAction("Delete Target's Scripted Objects On *Any* Land", boost::bind(&LLPanelObjectTools::onClickDeleteAllScriptedOwnedBy, this)); - childSetAction("Delete *ALL* Of Target's Objects", boost::bind(&LLPanelObjectTools::onClickDeleteAllOwnedBy, this)); - - childSetAction("Get Top Colliders", boost::bind(&LLPanelObjectTools::onGetTopColliders, this)); - childSetAction("Get Top Scripts", boost::bind(&LLPanelObjectTools::onGetTopScripts, this)); - childSetAction("Scripts digest", boost::bind(&LLPanelObjectTools::onGetScriptDigest, this)); - refresh(); return TRUE; } @@ -1154,29 +1095,30 @@ void LLPanelObjectTools::enableAllWidgets() getChildView("Get Top Scripts")->setEnabled(TRUE); } + void LLPanelObjectTools::onGetTopColliders() { - LLFloaterGodTools* god_tools = LLFloaterGodTools::instanceExists() ? LLFloaterGodTools::getInstance() : NULL; - if(!god_tools) - return; + LLFloaterTopObjects* instance = LLFloaterTopObjects::getInstance(); + if(!instance) return; + if (gAgent.isGodlike()) { - LLFloaterTopObjects::show(); + instance->open(); LLFloaterTopObjects::setMode(STAT_REPORT_TOP_COLLIDERS); - LLFloaterTopObjects::onRefresh(NULL); + instance->onRefresh(); } } void LLPanelObjectTools::onGetTopScripts() { - LLFloaterGodTools* god_tools = LLFloaterGodTools::instanceExists() ? LLFloaterGodTools::getInstance() : NULL; - if(!god_tools) - return; + LLFloaterTopObjects* instance = LLFloaterTopObjects::getInstance(); + if(!instance) return; + if (gAgent.isGodlike()) { - LLFloaterTopObjects::show(); + instance->open(); LLFloaterTopObjects::setMode(STAT_REPORT_TOP_SCRIPTS); - LLFloaterTopObjects::onRefresh(NULL); + instance->onRefresh(); } } @@ -1282,7 +1224,7 @@ void LLPanelObjectTools::onClickSetBySelection(void* data) LLPanelObjectTools* panelp = (LLPanelObjectTools*) data; if (!panelp) return; - const BOOL non_root_ok = TRUE; + const BOOL non_root_ok = TRUE; LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(NULL, non_root_ok); if (!node) return; @@ -1336,9 +1278,10 @@ void LLPanelObjectTools::onApplyChanges() const std::string SELECTION = "Selection"; const std::string AGENT_REGION = "Agent Region"; -LLPanelRequestTools::LLPanelRequestTools(const std::string& name): - LLPanel(name) +LLPanelRequestTools::LLPanelRequestTools(): + LLPanel() { + mCommitCallbackRegistrar.add("GodTools.Request", boost::bind(&LLPanelRequestTools::onClickRequest, this)); } LLPanelRequestTools::~LLPanelRequestTools() @@ -1347,8 +1290,6 @@ LLPanelRequestTools::~LLPanelRequestTools() BOOL LLPanelRequestTools::postBuild() { - childSetAction("Make Request", boost::bind(&LLPanelRequestTools::onClickRequest, this)); - refresh(); return TRUE; diff --git a/indra/newview/llfloatergodtools.h b/indra/newview/llfloatergodtools.h index ecfdd98b4..f01c0ac44 100644 --- a/indra/newview/llfloatergodtools.h +++ b/indra/newview/llfloatergodtools.h @@ -52,7 +52,7 @@ class LLTextBox; class LLMessageSystem; class LLFloaterGodTools -: public LLFloater, public LLSingleton + : public LLFloater, public LLSingleton { public: @@ -94,8 +94,6 @@ public: // Send possibly changed values to simulator. void sendGodUpdateRegionInfo(); - static void onTabChanged(LLUICtrl* ctrl, const LLSD& param); - public: LLFloaterGodTools(); @@ -128,14 +126,14 @@ class LLPanelRegionTools : public LLPanel { public: - LLPanelRegionTools(const std::string& name); + LLPanelRegionTools(); /*virtual*/ ~LLPanelRegionTools(); BOOL postBuild(); /*virtual*/ void refresh(); - static void onSaveState(void*); + static void onSaveState(void* userdata); void onChangeSimName(); void onChangeAnything(); @@ -190,7 +188,7 @@ class LLPanelGridTools : public LLPanel { public: - LLPanelGridTools(const std::string& name); + LLPanelGridTools(); virtual ~LLPanelGridTools(); BOOL postBuild(); @@ -217,7 +215,7 @@ class LLPanelObjectTools : public LLPanel { public: - LLPanelObjectTools(const std::string& name); + LLPanelObjectTools(); /*virtual*/ ~LLPanelObjectTools(); BOOL postBuild(); @@ -258,7 +256,7 @@ protected: class LLPanelRequestTools : public LLPanel { public: - LLPanelRequestTools(const std::string& name); + LLPanelRequestTools(); /*virtual*/ ~LLPanelRequestTools(); BOOL postBuild(); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index e05e2f5e1..8719cf98f 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -1081,8 +1081,10 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data) strings_t strings; strings.push_back("1"); // one physics step LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); - LLFloaterTopObjects::show(); - LLFloaterTopObjects::clearList(); + LLFloaterTopObjects* instance = LLFloaterTopObjects::getInstance(); + if(!instance) return; + instance->open(); + instance->clearList(); self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings); } @@ -1093,8 +1095,10 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data) strings_t strings; strings.push_back("6"); // top 5 scripts LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); - LLFloaterTopObjects::show(); - LLFloaterTopObjects::clearList(); + LLFloaterTopObjects* instance = LLFloaterTopObjects::getInstance(); + if(!instance) return; + instance->open(); + instance->clearList(); self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings); } diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index 215a8940e..4b16cb28c 100644 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -34,11 +34,11 @@ #include "llfloatertopobjects.h" +// library includes #include "message.h" #include "llfontgl.h" #include "llagent.h" -#include "llavataractions.h" #include "llbutton.h" #include "llfloatergodtools.h" #include "llnotificationsutil.h" @@ -56,13 +56,13 @@ #include "llagentcamera.h" #include "llviewerobjectlist.h" -void cmdline_printchat(std::string message); +#include "llavataractions.h" -LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL; +//LLFloaterTopObjects* LLFloaterTopObjects::sInstance = NULL; // Globals // const U32 TIME_STR_LENGTH = 30; - +/* // static void LLFloaterTopObjects::show() { @@ -73,89 +73,76 @@ void LLFloaterTopObjects::show() } sInstance = new LLFloaterTopObjects(); - LLUICtrlFactory::getInstance()->buildFloater(sInstance, "floater_top_objects.xml"); sInstance->center(); } - +*/ LLFloaterTopObjects::LLFloaterTopObjects() : LLFloater(std::string("top_objects")), mInitialized(FALSE), mtotalScore(0.f) { - sInstance = this; + mCommitCallbackRegistrar.add("TopObjects.ShowBeacon", boost::bind(&LLFloaterTopObjects::onClickShowBeacon, this)); + mCommitCallbackRegistrar.add("TopObjects.ReturnSelected", boost::bind(&LLFloaterTopObjects::onReturnSelected, this)); + mCommitCallbackRegistrar.add("TopObjects.ReturnAll", boost::bind(&LLFloaterTopObjects::onReturnAll, this)); + mCommitCallbackRegistrar.add("TopObjects.DisableSelected", boost::bind(&LLFloaterTopObjects::onDisableSelected, this)); + mCommitCallbackRegistrar.add("TopObjects.DisableAll", boost::bind(&LLFloaterTopObjects::onDisableAll, this)); + mCommitCallbackRegistrar.add("TopObjects.Refresh", boost::bind(&LLFloaterTopObjects::onRefresh, this)); + mCommitCallbackRegistrar.add("TopObjects.GetByObjectName", boost::bind(&LLFloaterTopObjects::onGetByObjectName, this)); + mCommitCallbackRegistrar.add("TopObjects.GetByOwnerName", boost::bind(&LLFloaterTopObjects::onGetByOwnerName, this)); + mCommitCallbackRegistrar.add("TopObjects.GetByParcelName", boost::bind(&LLFloaterTopObjects::onGetByParcelName, this)); + mCommitCallbackRegistrar.add("TopObjects.CommitObjectsList",boost::bind(&LLFloaterTopObjects::onCommitObjectsList, this)); + + mCommitCallbackRegistrar.add("TopObjects.TeleportToObject", boost::bind(&LLFloaterTopObjects::onTeleportToObject, this)); + mCommitCallbackRegistrar.add("TopObjects.Kick", boost::bind(&LLFloaterTopObjects::onKick, this)); + mCommitCallbackRegistrar.add("TopObjects.Profile", boost::bind(&LLFloaterTopObjects::onProfile, this)); + + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_top_objects.xml"); } LLFloaterTopObjects::~LLFloaterTopObjects() { - sInstance = NULL; } // virtual BOOL LLFloaterTopObjects::postBuild() { - LLScrollListCtrl *objects_list = getChild("objects_list"); - if (objects_list) - { - objects_list->setCommitCallback(boost::bind(&LLFloaterTopObjects::onCommitObjectsList,_1,this)); - objects_list->setDoubleClickCallback(boost::bind(&LLFloaterTopObjects::onDoubleClickObjectsList,this)); - objects_list->setFocus(true); - objects_list->setCommitOnSelectionChange(TRUE); - } + getChild("objects_list")->setFocus(TRUE); + objects_list->setDoubleClickCallback(onDoubleClickObjectsList, this); + objects_list->setCommitOnSelectionChange(TRUE); - childSetAction("show_beacon_btn", onClickShowBeacon, this); setDefaultBtn("show_beacon_btn"); - childSetAction("return_selected_btn", onReturnSelected, this); - childSetAction("return_all_btn", onReturnAll, this); - childSetAction("disable_selected_btn", onDisableSelected, this); - childSetAction("disable_all_btn", onDisableAll, this); - childSetAction("refresh_btn", onRefresh, this); - - childSetAction("lagwarning", onLagWarningBtn, this); - childSetAction("profile", onProfileBtn, this); - childSetAction("kick", onKickBtn, this); - childSetAction("tpto", onTPBtn, this); - - - childSetAction("filter_object_btn", onGetByObjectNameClicked, this); - childSetAction("filter_owner_btn", onGetByOwnerNameClicked, this); - - - /* - LLLineEditor* line_editor = getChild("owner_name_editor"); - if (line_editor) - { - line_editor->setCommitOnFocusLost(FALSE); - line_editor->setCommitCallback(onGetByOwnerName, this); - } - - line_editor = getChild("object_name_editor"); - if (line_editor) - { - line_editor->setCommitOnFocusLost(FALSE); - line_editor->setCommitCallback(onGetByObjectName, this); - }*/ - mCurrentMode = STAT_REPORT_TOP_SCRIPTS; mFlags = 0; mFilter.clear(); + center(); return TRUE; } +// static +void LLFloaterTopObjects::setMode(U32 mode) +{ + LLFloaterTopObjects* instance = instanceExists() ? getInstance() : NULL; + if(!instance) return; + instance->mCurrentMode = mode; +} +// static void LLFloaterTopObjects::handle_land_reply(LLMessageSystem* msg, void** data) { + LLFloaterTopObjects* instance = instanceExists() ? getInstance() : NULL; + if(!instance) return; // Make sure dialog is on screen - show(); - sInstance->handleReply(msg, data); + instance->open(); + instance->handleReply(msg, data); //HACK: for some reason sometimes top scripts originally comes back //with no results even though they're there - if (!sInstance->mObjectListIDs.size() && !sInstance->mInitialized) + if (!instance->mObjectListIDs.size() && !instance->mInitialized) { - sInstance->onRefresh(NULL); - sInstance->mInitialized = TRUE; + instance->onRefresh(); + instance->mInitialized = TRUE; } } @@ -170,7 +157,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) msg->getU32Fast(_PREHASH_RequestData, _PREHASH_ReportType, mCurrentMode); LLScrollListCtrl *list = getChild("objects_list"); - + S32 block_count = msg->getNumberOfBlocks("ReportData"); for (S32 block = 0; block < block_count; ++block) { @@ -181,9 +168,11 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) F32 score; std::string name_buf; std::string owner_buf; + std::string parcel_buf("unknown"); F32 mono_score = 0.f; bool have_extended_data = false; S32 public_urls = 0; + F32 script_memory = 0.f; msg->getU32Fast(_PREHASH_ReportData, _PREHASH_TaskLocalID, task_local_id, block); msg->getUUIDFast(_PREHASH_ReportData, _PREHASH_TaskID, task_id, block); @@ -193,12 +182,18 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) msg->getF32Fast(_PREHASH_ReportData, _PREHASH_Score, score, block); msg->getStringFast(_PREHASH_ReportData, _PREHASH_TaskName, name_buf, block); msg->getStringFast(_PREHASH_ReportData, _PREHASH_OwnerName, owner_buf, block); + if(msg->has("DataExtended")) { have_extended_data = true; msg->getU32("DataExtended", "TimeStamp", time_stamp, block); msg->getF32("DataExtended", "MonoScore", mono_score, block); - msg->getS32(_PREHASH_ReportData,"PublicURLs",public_urls,block); + msg->getS32("DataExtended", "PublicURLs", public_urls, block); + if (msg->getSize("DataExtended", "ParcelName") > 0) + { + msg->getString("DataExtended", "ParcelName", parcel_buf, block); + msg->getF32("DataExtended", "Size", script_memory, block); + } } LLSD element; @@ -206,39 +201,49 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) element["id"] = task_id; element["object_name"] = name_buf; element["owner_name"] = owner_buf; - element["columns"][0]["column"] = "score"; - element["columns"][0]["value"] = llformat("%0.3f", score); - element["columns"][0]["font"] = "SANSSERIF"; + + LLSD columns; + S32 column_num = 0; + columns[column_num]["column"] = "score"; + columns[column_num]["value"] = llformat("%0.3f", score); + columns[column_num++]["font"] = "SANSSERIF"; - element["columns"][1]["column"] = "name"; - element["columns"][1]["value"] = name_buf; - element["columns"][1]["font"] = "SANSSERIF"; - if (name_buf == owner_buf) + columns[column_num]["column"] = "name"; + columns[column_num]["value"] = name_buf; + if (name_buf == owner_buf) { - element["columns"][1]["color"] = LLColor4::red.getValue(); + columns[column_num]["color"] = LLColor4::red.getValue(); } - element["columns"][2]["column"] = "owner"; - element["columns"][2]["value"] = owner_buf; - element["columns"][2]["font"] = "SANSSERIF"; - element["columns"][3]["column"] = "location"; - element["columns"][3]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z); - element["columns"][3]["font"] = "SANSSERIF"; - element["columns"][4]["column"] = "time"; - element["columns"][4]["value"] = formatted_time((time_t)time_stamp); - element["columns"][4]["font"] = "SANSSERIF"; + columns[column_num++]["font"] = "SANSSERIF"; + + columns[column_num]["column"] = "owner"; + columns[column_num]["value"] = owner_buf; + columns[column_num++]["font"] = "SANSSERIF"; + + columns[column_num]["column"] = "location"; + columns[column_num]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z); + columns[column_num++]["font"] = "SANSSERIF"; + + columns[column_num]["column"] = "parcel"; + columns[column_num]["value"] = parcel_buf; + columns[column_num++]["font"] = "SANSSERIF"; + + columns[column_num]["column"] = "time"; + columns[column_num]["value"] = formatted_time((time_t)time_stamp); + columns[column_num++]["font"] = "SANSSERIF"; if (mCurrentMode == STAT_REPORT_TOP_SCRIPTS && have_extended_data) { - element["columns"][5]["column"] = "mono_time"; - element["columns"][5]["value"] = llformat("%0.3f", mono_score); - element["columns"][5]["font"] = "SANSSERIF"; + columns[column_num]["column"] = "memory"; + columns[column_num]["value"] = llformat("%0.0f", (script_memory / 1000.f)); + columns[column_num++]["font"] = "SANSSERIF"; - element["columns"][6]["column"] = "URLs"; - element["columns"][6]["value"] = llformat("%d", public_urls); - element["columns"][6]["font"] = "SANSSERIF"; + columns[column_num]["column"] = "URLs"; + columns[column_num]["value"] = llformat("%d", public_urls); + columns[column_num++]["font"] = "SANSSERIF"; } - + element["columns"] = columns; list->addElement(element); mObjectListData.append(element); @@ -260,30 +265,27 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data) { setTitle(getString("top_scripts_title")); list->setColumnLabel("score", getString("scripts_score_label")); - list->setColumnLabel("mono_time", getString("scripts_mono_time_label")); LLUIString format = getString("top_scripts_text"); format.setArg("[COUNT]", llformat("%d", total_count)); - format.setArg("[TIME]", llformat("%0.1f", mtotalScore)); - childSetValue("title_text", LLSD(format)); + format.setArg("[TIME]", llformat("%0.3f", mtotalScore)); + getChild("title_text")->setValue(LLSD(format)); } else { setTitle(getString("top_colliders_title")); list->setColumnLabel("score", getString("colliders_score_label")); - list->setColumnLabel("mono_time", ""); + list->setColumnLabel("URLs", ""); + list->setColumnLabel("memory", ""); LLUIString format = getString("top_colliders_text"); format.setArg("[COUNT]", llformat("%d", total_count)); - childSetValue("title_text", LLSD(format)); + getChild("title_text")->setValue(LLSD(format)); } } -// static -void LLFloaterTopObjects::onCommitObjectsList(LLUICtrl* ctrl, void* data) +void LLFloaterTopObjects::onCommitObjectsList() { - LLFloaterTopObjects* self = (LLFloaterTopObjects*)data; - - self->updateSelectionInfo(); + updateSelectionInfo(); } void LLFloaterTopObjects::updateSelectionInfo() @@ -297,9 +299,15 @@ void LLFloaterTopObjects::updateSelectionInfo() std::string object_id_string = object_id.asString(); - childSetValue("id_editor", LLSD(object_id_string)); - childSetValue("object_name_editor", list->getFirstSelected()->getColumn(1)->getValue().asString()); - childSetValue("owner_name_editor", list->getFirstSelected()->getColumn(2)->getValue().asString()); + getChild("id_editor")->setValue(LLSD(object_id_string)); + LLScrollListItem* sli = list->getFirstSelected(); + llassert(sli); + if (sli) + { + getChild("object_name_editor")->setValue(sli->getColumn(1)->getValue().asString()); + getChild("owner_name_editor")->setValue(sli->getColumn(2)->getValue().asString()); + getChild("parcel_name_editor")->setValue(sli->getColumn(4)->getValue().asString()); + } } // static @@ -307,36 +315,12 @@ void LLFloaterTopObjects::onDoubleClickObjectsList(void* data) { LLFloaterTopObjects* self = (LLFloaterTopObjects*)data; self->showBeacon(); - self->lookAtAvatar(); -} - -void LLFloaterTopObjects::lookAtAvatar() -{ - LLScrollListCtrl* list = getChild("objects_list"); - if (!list) return; - LLScrollListItem* first_selected = list->getFirstSelected(); - if (!first_selected) return; - LLUUID taskid = first_selected->getUUID(); - - LLVOAvatar* voavatar = gObjectList.findAvatar(taskid); - if(voavatar) - { - gAgentCamera.setFocusOnAvatar(FALSE, FALSE); - gAgentCamera.changeCameraToThirdPerson(); - gAgentCamera.setFocusGlobal(voavatar->getPositionGlobal(),taskid); - gAgentCamera.setCameraPosAndFocusGlobal(voavatar->getPositionGlobal() - + LLVector3d(3.5,1.35,0.75) * voavatar->getRotation(), - voavatar->getPositionGlobal(), - taskid ); - } } // static -void LLFloaterTopObjects::onClickShowBeacon(void* data) +void LLFloaterTopObjects::onClickShowBeacon() { - LLFloaterTopObjects* self = (LLFloaterTopObjects*)data; - if (!self) return; - self->showBeacon(); + showBeacon(); } void LLFloaterTopObjects::doToObjects(int action, bool all) @@ -346,10 +330,10 @@ void LLFloaterTopObjects::doToObjects(int action, bool all) LLViewerRegion* region = gAgent.getRegion(); if (!region) return; - LLCtrlListInterface *list = childGetListInterface("objects_list"); + LLCtrlListInterface *list = getChild("objects_list")->getListInterface(); if (!list || list->getItemCount() == 0) return; - std::vector::iterator id_itor; + uuid_vec_t::iterator id_itor; bool start_message = true; @@ -400,194 +384,76 @@ void LLFloaterTopObjects::doToObjects(int action, bool all) bool LLFloaterTopObjects::callbackReturnAll(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + LLFloaterTopObjects* instance = instanceExists() ? getInstance() : NULL; + if(!instance) return false; if (option == 0) { - sInstance->doToObjects(ACTION_RETURN, true); + instance->doToObjects(ACTION_RETURN, true); } return false; } -void LLFloaterTopObjects::onReturnAll(void* data) +void LLFloaterTopObjects::onReturnAll() { LLNotificationsUtil::add("ReturnAllTopObjects", LLSD(), LLSD(), &callbackReturnAll); } -void LLFloaterTopObjects::onReturnSelected(void* data) +void LLFloaterTopObjects::onReturnSelected() { - sInstance->doToObjects(ACTION_RETURN, false); + doToObjects(ACTION_RETURN, false); } -void LLFloaterTopObjects::onLagWarningBtn(void* data) -{ - LLFloaterTopObjects* self = (LLFloaterTopObjects*)data; - - self->onLagWarning(data); -} - -void LLFloaterTopObjects::onLagWarning(void* data) -{ - LLScrollListCtrl* list = getChild("objects_list"); - if (!list) return; - LLScrollListItem* first_selected = list->getFirstSelected(); - if (!first_selected) return; - LLUUID taskid = first_selected->getUUID(); - - std::string name = first_selected->getColumn(1)->getValue().asString(); - std::string score = first_selected->getColumn(0)->getValue().asString(); - - std::istringstream stm; - stm.str(score); - F32 f_score; - stm >> f_score; - F32 percentage = 100.f * (f_score / 22); - - std::string message = llformat( - "Hello %s, you are receiving this automated message because you are wearing heavily scripted attachments/HUDs, " - "causing excessive script lag (%5.2f ms, that's ca. %5.2f%% of the region's resources.)\n\n" - "Please remove resizer scripts or attachments to reduce your script time, thank you.", - name.c_str(), - (F32)f_score, - (F32)percentage - ); - - std::string my_name; - gAgent.buildFullname(my_name); - - cmdline_printchat(llformat("Script time warning sent to %s: (%5.2f ms)", - name.c_str(),(F32)f_score)); - - send_improved_im(LLUUID(taskid), - my_name, - message, - IM_ONLINE, - IM_NOTHING_SPECIAL, - LLUUID::null, - NO_TIMESTAMP, - (U8*)EMPTY_BINARY_BUCKET, - EMPTY_BINARY_BUCKET_SIZE); -} - -void LLFloaterTopObjects::onProfileBtn(void* data) -{ - LLFloaterTopObjects* self = (LLFloaterTopObjects*)data; - self->onProfile(data); -} - -void LLFloaterTopObjects::onProfile(void* data) -{ - LLScrollListCtrl* list = getChild("objects_list"); - if (!list) return; - LLScrollListItem* first_selected = list->getFirstSelected(); - if (!first_selected) return; - LLAvatarActions::showProfile(first_selected->getUUID()); -} - -void LLFloaterTopObjects::onKickBtn(void* data) -{ - LLFloaterTopObjects* self = (LLFloaterTopObjects*)data; - self->onKick(data); -} - -void LLFloaterTopObjects::onKick(void* data) -{ - LLScrollListCtrl* list = getChild("objects_list"); - if (!list) return; - LLScrollListItem* first_selected = list->getFirstSelected(); - if (!first_selected) return; - LLUUID taskid = first_selected->getUUID(); - - LLMessageSystem* msg = gMessageSystem; - msg->newMessage("EstateOwnerMessage"); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used - msg->nextBlock("MethodData"); - msg->addString("Method", "kickestate"); - msg->addUUID("Invoice", LLUUID::null); - msg->nextBlock("ParamList"); - msg->addString("Parameter", taskid.asString().c_str()); - msg->sendReliable(gAgent.getRegionHost()); -} -void LLFloaterTopObjects::onTPBtn(void* data) -{ - LLFloaterTopObjects* self = (LLFloaterTopObjects*)data; - self->onTP(data); -} - -void LLFloaterTopObjects::onTP(void* data) -{ - LLScrollListCtrl* list = getChild("objects_list"); - if (!list) return; - LLScrollListItem* first_selected = list->getFirstSelected(); - if (!first_selected) return; - - std::string name = first_selected->getColumn(1)->getValue().asString(); - std::string pos_string = first_selected->getColumn(3)->getValue().asString(); - - F32 x, y, z; - S32 matched = sscanf(pos_string.c_str(), "<%g,%g,%g>", &x, &y, &z); - if (matched != 3) return; - - LLVector3 pos_agent(x, y, z); - LLVector3d pos_global = gAgent.getPosGlobalFromAgent(pos_agent); - - gAgent.teleportViaLocation( pos_global ); -} - - //static bool LLFloaterTopObjects::callbackDisableAll(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + LLFloaterTopObjects* instance = instanceExists() ? getInstance() : NULL; + if(!instance) return false; if (option == 0) { - sInstance->doToObjects(ACTION_DISABLE, true); + instance->doToObjects(ACTION_DISABLE, true); } return false; } -void LLFloaterTopObjects::onDisableAll(void* data) +void LLFloaterTopObjects::onDisableAll() { LLNotificationsUtil::add("DisableAllTopObjects", LLSD(), LLSD(), callbackDisableAll); } -void LLFloaterTopObjects::onDisableSelected(void* data) +void LLFloaterTopObjects::onDisableSelected() { - sInstance->doToObjects(ACTION_DISABLE, false); + doToObjects(ACTION_DISABLE, false); } -//static + void LLFloaterTopObjects::clearList() { - LLCtrlListInterface *list = sInstance->childGetListInterface("objects_list"); + LLCtrlListInterface *list = childGetListInterface("objects_list"); if (list) { list->operateOnAll(LLCtrlListInterface::OP_DELETE); } - sInstance->mObjectListData.clear(); - sInstance->mObjectListIDs.clear(); - sInstance->mtotalScore = 0.f; + mObjectListData.clear(); + mObjectListIDs.clear(); + mtotalScore = 0.f; } -//static -void LLFloaterTopObjects::onRefresh(void* data) + +void LLFloaterTopObjects::onRefresh() { U32 mode = STAT_REPORT_TOP_SCRIPTS; U32 flags = 0; std::string filter = ""; - if (sInstance) - { - mode = sInstance->mCurrentMode; - flags = sInstance->mFlags; - filter = sInstance->mFilter; - sInstance->clearList(); - } + mode = mCurrentMode; + flags = mFlags; + filter = mFilter; + clearList(); LLMessageSystem *msg = gMessageSystem; msg->newMessageFast(_PREHASH_LandStatRequest); @@ -602,35 +468,35 @@ void LLFloaterTopObjects::onRefresh(void* data) msg->sendReliable(gAgent.getRegionHost()); - if (sInstance) - { - sInstance->mFilter.clear(); - sInstance->mFlags = 0; - } + mFilter.clear(); + mFlags = 0; } -void LLFloaterTopObjects::onGetByObjectName(LLUICtrl* ctrl, void* data) +void LLFloaterTopObjects::onGetByObjectName() { - if (sInstance) - { - sInstance->mFlags = STAT_FILTER_BY_OBJECT; - sInstance->mFilter = sInstance->childGetText("object_name_editor"); - onRefresh(NULL); - } + mFlags = STAT_FILTER_BY_OBJECT; + mFilter = getChild("object_name_editor")->getValue().asString(); + onRefresh(); } -void LLFloaterTopObjects::onGetByOwnerName(LLUICtrl* ctrl, void* data) +void LLFloaterTopObjects::onGetByOwnerName() { - if (sInstance) - { - sInstance->mFlags = STAT_FILTER_BY_OWNER; - sInstance->mFilter = sInstance->childGetText("owner_name_editor"); - onRefresh(NULL); - } + mFlags = STAT_FILTER_BY_OWNER; + mFilter = getChild("owner_name_editor")->getValue().asString(); + onRefresh(); } + +void LLFloaterTopObjects::onGetByParcelName() +{ + mFlags = STAT_FILTER_BY_PARCEL_NAME; + mFilter = getChild("parcel_name_editor")->getValue().asString(); + onRefresh(); +} + + void LLFloaterTopObjects::showBeacon() -{ +{ LLScrollListCtrl* list = getChild("objects_list"); if (!list) return; @@ -648,4 +514,68 @@ void LLFloaterTopObjects::showBeacon() LLVector3d pos_global = gAgent.getPosGlobalFromAgent(pos_agent); std::string tooltip(""); LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM); + + const LLUUID& taskid = first_selected->getUUID(); + if(LLVOAvatar* voavatar = gObjectList.findAvatar(taskid)) + { + gAgentCamera.setFocusOnAvatar(FALSE, FALSE); + gAgentCamera.changeCameraToThirdPerson(); + gAgentCamera.setFocusGlobal(voavatar->getPositionGlobal(),taskid); + gAgentCamera.setCameraPosAndFocusGlobal(voavatar->getPositionGlobal() + LLVector3d(3.5,1.35,0.75) * voavatar->getRotation(), voavatar->getPositionGlobal(), taskid); + } +} + +void LLFloaterTopObjects::onTeleportToObject() +{ + LLScrollListCtrl* list = getChild("objects_list"); + if (!list) return; + + LLScrollListItem* first_selected = list->getFirstSelected(); + if (!first_selected) return; + + std::string pos_string = first_selected->getColumn(3)->getValue().asString(); + + F32 x, y, z; + S32 matched = sscanf(pos_string.c_str(), "<%g,%g,%g>", &x, &y, &z); + if (matched != 3) return; + + LLVector3 pos_agent(x, y, z); + LLVector3d pos_global = gAgent.getPosGlobalFromAgent(pos_agent); + + gAgent.teleportViaLocation( pos_global ); +} + +void LLFloaterTopObjects::onKick() +{ + LLScrollListCtrl* list = getChild("objects_list"); + if (!list) return; + + LLScrollListItem* first_selected = list->getFirstSelected(); + if (!first_selected) return; + + const LLUUID& objectId = first_selected->getUUID(); + LLMessageSystem* msg = gMessageSystem; + msg->newMessage("EstateOwnerMessage"); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used + msg->nextBlock("MethodData"); + msg->addString("Method", "kickestate"); + msg->addUUID("Invoice", LLUUID::null); + msg->nextBlock("ParamList"); + msg->addString("Parameter", objectId.asString().c_str()); + msg->sendReliable(gAgent.getRegionHost()); +} + +void LLFloaterTopObjects::onProfile() +{ + LLScrollListCtrl* list = getChild("objects_list"); + if (!list) return; + + LLScrollListItem* first_selected = list->getFirstSelected(); + if (!first_selected) return; + + const LLUUID& objectId = first_selected->getUUID(); + LLAvatarActions::showProfile(objectId); } diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h index 74a7ed611..c96d4ccd2 100644 --- a/indra/newview/llfloatertopobjects.h +++ b/indra/newview/llfloatertopobjects.h @@ -37,29 +37,25 @@ class LLUICtrl; -class LLFloaterTopObjects : public LLFloater +class LLFloaterTopObjects : public LLFloater, public LLSingleton { + friend class LLSingleton; public: // Opens the floater on screen. - static void show(); +// static void show(); // Opens the floater if it's not on-screen. // Juggles the UI based on method = "scripts" or "colliders" static void handle_land_reply(LLMessageSystem* msg, void** data); void handleReply(LLMessageSystem* msg, void** data); - static void clearList(); + void clearList(); void updateSelectionInfo(); virtual BOOL postBuild(); - static void onRefresh(void* data); + void onRefresh(); - static void setMode(U32 mode) { if (sInstance) sInstance->mCurrentMode = mode; } - - void onProfile(void* data); - void onKick(void* data); - void onTP(void* data); - void onLagWarning(void* data); + static void setMode(U32 mode); private: LLFloaterTopObjects(); @@ -67,31 +63,27 @@ private: void initColumns(LLCtrlListInterface *list); - static void onCommitObjectsList(LLUICtrl* ctrl, void* data); + void onCommitObjectsList(); static void onDoubleClickObjectsList(void* data); - void lookAtAvatar(); - static void onClickShowBeacon(void* data); + void onClickShowBeacon(); void doToObjects(int action, bool all); - static void onReturnAll(void* data); - static void onReturnSelected(void* data); - static void onDisableAll(void* data); - static void onDisableSelected(void* data); + void onReturnAll(); + void onReturnSelected(); + void onDisableAll(); + void onDisableSelected(); + + void onTeleportToObject(); + void onKick(); + void onProfile(); - static void onProfileBtn(void* data); - static void onKickBtn(void* data); - static void onTPBtn(void* data); - static void onLagWarningBtn(void* data); - static bool callbackReturnAll(const LLSD& notification, const LLSD& response); static bool callbackDisableAll(const LLSD& notification, const LLSD& response); - static void onGetByOwnerName(LLUICtrl* ctrl, void* data); - static void onGetByObjectName(LLUICtrl* ctrl, void* data); - - static void onGetByOwnerNameClicked(void* data) { onGetByOwnerName(NULL, data); }; - static void onGetByObjectNameClicked(void* data) { onGetByObjectName(NULL, data); }; + void onGetByOwnerName(); + void onGetByObjectName(); + void onGetByParcelName(); void showBeacon(); @@ -99,7 +91,7 @@ private: std::string mMethod; LLSD mObjectListData; - std::vector mObjectListIDs; + uuid_vec_t mObjectListIDs; U32 mCurrentMode; U32 mFlags; diff --git a/indra/newview/skins/default/xui/de/floater_top_objects.xml b/indra/newview/skins/default/xui/de/floater_top_objects.xml index 586d13491..e30fe8147 100644 --- a/indra/newview/skins/default/xui/de/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/de/floater_top_objects.xml @@ -1,40 +1,65 @@ - - Wird geladen... + + + Top-Skripte + + + [COUNT] Skripts benötigen insgesamt [TIME] ms + + + Zeit + + + Top-Kollisionsobjekte + + + Top [COUNT] Objekte mit vielen potenziellen Kollisionen + + + Wertung + + + Nicht gefunden. + + + Wird geladen... + - + + - - - - Objekt-ID: - + + + + + Objekt-ID: + + @@ -25,55 +31,97 @@ + max_length="63" mouse_opaque="true" name="region name" width="208"> + + + width="180"> + + + width="180"> + + + width="180"> + + + tool_tip="Set this to make the region visible to non-gods." width="180"> + + + width="180"> + + + tool_tip="Set this to make the region not compute traffic." width="180"> + + + tool_tip="Set this to disallow people terraforming their land" width="180"> + + - - + width="180"> + + + + + + + + + max_length="10" mouse_opaque="true" name="estate" width="50"> + + + tool_tip="This is the parent estate for this region" width="50"> + + + tool_tip="This is the grid x position for this region" width="50"> + + + tool_tip="This is the grid y position for this region" width="40"> + + + max_length="10" mouse_opaque="true" name="redirectx" width="50"> + + + max_length="10" mouse_opaque="true" name="redirecty" width="40"> + + + mouse_opaque="true" name="billable factor" width="80"> + + + name="land cost" width="80"> + + + tool_tip="Click here to refresh the above information." width="110"> + + @@ -175,24 +259,39 @@ + tool_tip="Set this to disable all scripts in this region" width="110"> + + + width="121"> + + + tool_tip="Set this to disable all physics in this region" width="130"> + + + width="380"> + + @@ -285,7 +402,10 @@ max_length="63" mouse_opaque="true" name="parameter" width="290" /> diff --git a/indra/newview/skins/default/xui/en-us/floater_top_objects.xml b/indra/newview/skins/default/xui/en-us/floater_top_objects.xml index 6b59ee391..ec4f7d736 100644 --- a/indra/newview/skins/default/xui/en-us/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/en-us/floater_top_objects.xml @@ -1,90 +1,299 @@ - - - Loading... - - - - - - - - - - - - Object ID: - - - + + Object name: + + + + + Owner: + + + + + Parcel: + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/es/floater_top_objects.xml b/indra/newview/skins/default/xui/es/floater_top_objects.xml index 7e30241f7..56fee7a04 100644 --- a/indra/newview/skins/default/xui/es/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/es/floater_top_objects.xml @@ -1,40 +1,7 @@ - - - Cargando... - - - - - - - - - - - - ID del Objeto: - -