diff options
Diffstat (limited to 'indra/newview/llfloaterscriptlimits.cpp')
-rw-r--r-- | indra/newview/llfloaterscriptlimits.cpp | 1184 |
1 files changed, 592 insertions, 592 deletions
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp index 40fe11b309..8f3260ca3e 100644 --- a/indra/newview/llfloaterscriptlimits.cpp +++ b/indra/newview/llfloaterscriptlimits.cpp @@ -1,4 +1,4 @@ -/** +/** * @file llfloaterscriptlimits.cpp * @author Gabriel Lee * @brief Implementation of the region info and controls floater and panels. @@ -6,21 +6,21 @@ * $LicenseInfo:firstyear=2004&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -84,27 +84,27 @@ const S32 FAKE_AVAILABLE_MEMORY = 895577; const S32 SIZE_OF_ONE_KB = 1024; LLFloaterScriptLimits::LLFloaterScriptLimits(const LLSD& seed) - : LLFloater(seed) + : LLFloater(seed) { } BOOL LLFloaterScriptLimits::postBuild() { - mTab = getChild<LLTabContainer>("scriptlimits_panels"); - - if(!mTab) - { - LL_WARNS() << "Error! couldn't get scriptlimits_panels, aborting Script Information setup" << LL_ENDL; - return FALSE; - } - - // contruct the panel - LLPanelScriptLimitsRegionMemory* panel_memory = new LLPanelScriptLimitsRegionMemory; - mInfoPanels.push_back(panel_memory); - panel_memory->buildFromFile( "panel_script_limits_region_memory.xml"); - mTab->addTabPanel(panel_memory); - mTab->selectTab(0); - return TRUE; + mTab = getChild<LLTabContainer>("scriptlimits_panels"); + + if(!mTab) + { + LL_WARNS() << "Error! couldn't get scriptlimits_panels, aborting Script Information setup" << LL_ENDL; + return FALSE; + } + + // contruct the panel + LLPanelScriptLimitsRegionMemory* panel_memory = new LLPanelScriptLimitsRegionMemory; + mInfoPanels.push_back(panel_memory); + panel_memory->buildFromFile( "panel_script_limits_region_memory.xml"); + mTab->addTabPanel(panel_memory); + mTab->selectTab(0); + return TRUE; } LLFloaterScriptLimits::~LLFloaterScriptLimits() @@ -114,11 +114,11 @@ LLFloaterScriptLimits::~LLFloaterScriptLimits() // public void LLFloaterScriptLimits::refresh() { - for(info_panels_t::iterator iter = mInfoPanels.begin(); - iter != mInfoPanels.end(); ++iter) - { - (*iter)->refresh(); - } + for(info_panels_t::iterator iter = mInfoPanels.begin(); + iter != mInfoPanels.end(); ++iter) + { + (*iter)->refresh(); + } } ///---------------------------------------------------------------------------- @@ -126,7 +126,7 @@ void LLFloaterScriptLimits::refresh() ///---------------------------------------------------------------------------- LLPanelScriptLimitsInfo::LLPanelScriptLimitsInfo() - : LLPanel() + : LLPanel() { } @@ -134,11 +134,11 @@ LLPanelScriptLimitsInfo::LLPanelScriptLimitsInfo() // virtual BOOL LLPanelScriptLimitsInfo::postBuild() { - refresh(); - return TRUE; + refresh(); + return TRUE; } -// virtual +// virtual void LLPanelScriptLimitsInfo::updateChild(LLUICtrl* child_ctr) { } @@ -149,29 +149,29 @@ void LLPanelScriptLimitsInfo::updateChild(LLUICtrl* child_ctr) LLPanelScriptLimitsRegionMemory::~LLPanelScriptLimitsRegionMemory() { - if(!mParcelId.isNull()) - { - LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this); - mParcelId.setNull(); - } + if(!mParcelId.isNull()) + { + LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this); + mParcelId.setNull(); + } }; BOOL LLPanelScriptLimitsRegionMemory::getLandScriptResources() { - if (!gAgent.getRegion()) return FALSE; + if (!gAgent.getRegion()) return FALSE; - LLSD body; - std::string url = gAgent.getRegion()->getCapability("LandResources"); - if (!url.empty()) - { + LLSD body; + std::string url = gAgent.getRegion()->getCapability("LandResources"); + if (!url.empty()) + { LLCoros::instance().launch("LLPanelScriptLimitsRegionMemory::getLandScriptResourcesCoro", boost::bind(&LLPanelScriptLimitsRegionMemory::getLandScriptResourcesCoro, this, url)); - return TRUE; - } - else - { - return FALSE; - } + return TRUE; + } + else + { + return FALSE; + } } void LLPanelScriptLimitsRegionMemory::getLandScriptResourcesCoro(std::string url) @@ -196,9 +196,9 @@ void LLPanelScriptLimitsRegionMemory::getLandScriptResourcesCoro(std::string url return; } - // We could retrieve these sequentially inline from this coroutine. But - // since the original code retrieved them in parallel I'll spawn two - // coroutines to do the retrieval. + // We could retrieve these sequentially inline from this coroutine. But + // since the original code retrieved them in parallel I'll spawn two + // coroutines to do the retrieval. // The summary service: if (result.has("ScriptResourceSummary")) @@ -215,7 +215,7 @@ void LLPanelScriptLimitsRegionMemory::getLandScriptResourcesCoro(std::string url boost::bind(&LLPanelScriptLimitsRegionMemory::getLandScriptDetailsCoro, this, urlResourceDetails)); } - + } void LLPanelScriptLimitsRegionMemory::getLandScriptSummaryCoro(std::string url) @@ -317,42 +317,42 @@ void LLPanelScriptLimitsRegionMemory::getLandScriptDetailsCoro(std::string url) void LLPanelScriptLimitsRegionMemory::processParcelInfo(const LLParcelData& parcel_data) { - if(!getLandScriptResources()) - { - std::string msg_error = LLTrans::getString("ScriptLimitsRequestError"); - getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_error)); - } - else - { - std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting"); - getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); - } + if(!getLandScriptResources()) + { + std::string msg_error = LLTrans::getString("ScriptLimitsRequestError"); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_error)); + } + else + { + std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting"); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); + } } void LLPanelScriptLimitsRegionMemory::setParcelID(const LLUUID& parcel_id) { - if (!parcel_id.isNull()) - { - if(!mParcelId.isNull()) - { - LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this); - mParcelId.setNull(); - } - mParcelId = parcel_id; - LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this); - LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id); - } - else - { - std::string msg_error = LLTrans::getString("ScriptLimitsRequestError"); - getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_error)); - } + if (!parcel_id.isNull()) + { + if(!mParcelId.isNull()) + { + LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mParcelId, this); + mParcelId.setNull(); + } + mParcelId = parcel_id; + LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this); + LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id); + } + else + { + std::string msg_error = LLTrans::getString("ScriptLimitsRequestError"); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_error)); + } } // virtual void LLPanelScriptLimitsRegionMemory::setErrorStatus(S32 status, const std::string& reason) { - LL_WARNS() << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<LL_ENDL; + LL_WARNS() << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<LL_ENDL; } // callback from the name cache with an owner name to add to the list @@ -365,577 +365,577 @@ void LLPanelScriptLimitsRegionMemory::onAvatarNameCache( // callback from the name cache with an owner name to add to the list void LLPanelScriptLimitsRegionMemory::onNameCache( - const LLUUID& id, - const std::string& full_name) + const LLUUID& id, + const std::string& full_name) { - LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); - if(!list) - { - return; - } - - std::string name = LLCacheName::buildUsername(full_name); - - std::vector<LLSD>::iterator id_itor; - for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor) - { - LLSD element = *id_itor; - if(element["owner_id"].asUUID() == id) - { - LLScrollListItem* item = list->getItem(element["id"].asUUID()); - - if(item) - { - item->getColumn(3)->setValue(LLSD(name)); - element["columns"][3]["value"] = name; - } - } - } + LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); + if(!list) + { + return; + } + + std::string name = LLCacheName::buildUsername(full_name); + + std::vector<LLSD>::iterator id_itor; + for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor) + { + LLSD element = *id_itor; + if(element["owner_id"].asUUID() == id) + { + LLScrollListItem* item = list->getItem(element["id"].asUUID()); + + if(item) + { + item->getColumn(3)->setValue(LLSD(name)); + element["columns"][3]["value"] = name; + } + } + } } void LLPanelScriptLimitsRegionMemory::setRegionDetails(LLSD content) { - LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); - - if(!list) - { - LL_WARNS() << "Error getting the scripts_list control" << LL_ENDL; - return; - } - - S32 number_parcels = content["parcels"].size(); - - LLStringUtil::format_map_t args_parcels; - args_parcels["[PARCELS]"] = llformat ("%d", number_parcels); - std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels); - getChild<LLUICtrl>("parcels_listed")->setValue(LLSD(msg_parcels)); - - uuid_vec_t names_requested; - - // This makes the assumption that all objects will have the same set - // of attributes, ie they will all have, or none will have locations - // This is a pretty safe assumption as it's reliant on server version. - bool has_locations = false; - bool has_local_ids = false; - - for(S32 i = 0; i < number_parcels; i++) - { - std::string parcel_name = content["parcels"][i]["name"].asString(); - S32 number_objects = content["parcels"][i]["objects"].size(); - - S32 local_id = 0; - if(content["parcels"][i].has("local_id")) - { - // if any locations are found flag that we can use them and turn on the highlight button - has_local_ids = true; - local_id = content["parcels"][i]["local_id"].asInteger(); - } - - for(S32 j = 0; j < number_objects; j++) - { - S32 size = content["parcels"][i]["objects"][j]["resources"]["memory"].asInteger() / SIZE_OF_ONE_KB; - - S32 urls = content["parcels"][i]["objects"][j]["resources"]["urls"].asInteger(); - - std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString(); - LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID(); - LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID(); - // This field may not be sent by all server versions, but it's OK if - // it uses the LLSD default of false - bool is_group_owned = content["parcels"][i]["objects"][j]["is_group_owned"].asBoolean(); - - F32 location_x = 0.0f; - F32 location_y = 0.0f; - F32 location_z = 0.0f; - - if(content["parcels"][i]["objects"][j].has("location")) - { - // if any locations are found flag that we can use them and turn on the highlight button - LLVector3 vec = ll_vector3_from_sd(content["parcels"][i]["objects"][j]["location"]); - has_locations = true; - location_x = vec.mV[0]; - location_y = vec.mV[1]; - location_z = vec.mV[2]; - } - - std::string owner_buf; - - // in the future the server will give us owner names, so see if we're there yet: - if(content["parcels"][i]["objects"][j].has("owner_name")) - { - owner_buf = content["parcels"][i]["objects"][j]["owner_name"].asString(); - } - // ...and if not use the slightly more painful method of disovery: - else - { - BOOL name_is_cached; - if (is_group_owned) - { - name_is_cached = gCacheName->getGroupName(owner_id, owner_buf); - } - else - { - LLAvatarName av_name; - name_is_cached = LLAvatarNameCache::get(owner_id, &av_name); - owner_buf = av_name.getUserName(); - owner_buf = LLCacheName::buildUsername(owner_buf); - } - if(!name_is_cached) - { - if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end()) - { - names_requested.push_back(owner_id); - if (is_group_owned) - { - gCacheName->getGroup(owner_id, - boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache, - this, _1, _2)); - } - else - { - LLAvatarNameCache::get(owner_id, - boost::bind(&LLPanelScriptLimitsRegionMemory::onAvatarNameCache, - this, _1, _2)); - } - } - } - } - - LLScrollListItem::Params item_params; - item_params.value = task_id; - - LLScrollListCell::Params cell_params; - cell_params.font = LLFontGL::getFontSansSerif(); - // Start out right justifying numeric displays - cell_params.font_halign = LLFontGL::RIGHT; - - cell_params.column = "size"; - cell_params.value = size; - item_params.columns.add(cell_params); - - cell_params.column = "urls"; - cell_params.value = urls; - item_params.columns.add(cell_params); - - cell_params.font_halign = LLFontGL::LEFT; - // The rest of the columns are text to left justify them - cell_params.column = "name"; - cell_params.value = name_buf; - item_params.columns.add(cell_params); - - cell_params.column = "owner"; - cell_params.value = owner_buf; - item_params.columns.add(cell_params); - - cell_params.column = "parcel"; - cell_params.value = parcel_name; - item_params.columns.add(cell_params); - - cell_params.column = "location"; - cell_params.value = has_locations - ? llformat("<%0.0f, %0.0f, %0.0f>", location_x, location_y, location_z) - : ""; - item_params.columns.add(cell_params); - - list->addRow(item_params); - - LLSD element; - element["owner_id"] = owner_id; - - element["id"] = task_id; - element["local_id"] = local_id; - mObjectListItems.push_back(element); - } - } - - if (has_locations) - { - LLButton* btn = getChild<LLButton>("highlight_btn"); - if(btn) - { - btn->setVisible(true); - } - } - - if (has_local_ids) - { - LLButton* btn = getChild<LLButton>("return_btn"); - if(btn) - { - btn->setVisible(true); - } - } - - // save the structure to make object return easier - mContent = content; + LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); + + if(!list) + { + LL_WARNS() << "Error getting the scripts_list control" << LL_ENDL; + return; + } + + S32 number_parcels = content["parcels"].size(); + + LLStringUtil::format_map_t args_parcels; + args_parcels["[PARCELS]"] = llformat ("%d", number_parcels); + std::string msg_parcels = LLTrans::getString("ScriptLimitsParcelsOwned", args_parcels); + getChild<LLUICtrl>("parcels_listed")->setValue(LLSD(msg_parcels)); + + uuid_vec_t names_requested; + + // This makes the assumption that all objects will have the same set + // of attributes, ie they will all have, or none will have locations + // This is a pretty safe assumption as it's reliant on server version. + bool has_locations = false; + bool has_local_ids = false; + + for(S32 i = 0; i < number_parcels; i++) + { + std::string parcel_name = content["parcels"][i]["name"].asString(); + S32 number_objects = content["parcels"][i]["objects"].size(); + + S32 local_id = 0; + if(content["parcels"][i].has("local_id")) + { + // if any locations are found flag that we can use them and turn on the highlight button + has_local_ids = true; + local_id = content["parcels"][i]["local_id"].asInteger(); + } + + for(S32 j = 0; j < number_objects; j++) + { + S32 size = content["parcels"][i]["objects"][j]["resources"]["memory"].asInteger() / SIZE_OF_ONE_KB; + + S32 urls = content["parcels"][i]["objects"][j]["resources"]["urls"].asInteger(); + + std::string name_buf = content["parcels"][i]["objects"][j]["name"].asString(); + LLUUID task_id = content["parcels"][i]["objects"][j]["id"].asUUID(); + LLUUID owner_id = content["parcels"][i]["objects"][j]["owner_id"].asUUID(); + // This field may not be sent by all server versions, but it's OK if + // it uses the LLSD default of false + bool is_group_owned = content["parcels"][i]["objects"][j]["is_group_owned"].asBoolean(); + + F32 location_x = 0.0f; + F32 location_y = 0.0f; + F32 location_z = 0.0f; + + if(content["parcels"][i]["objects"][j].has("location")) + { + // if any locations are found flag that we can use them and turn on the highlight button + LLVector3 vec = ll_vector3_from_sd(content["parcels"][i]["objects"][j]["location"]); + has_locations = true; + location_x = vec.mV[0]; + location_y = vec.mV[1]; + location_z = vec.mV[2]; + } + + std::string owner_buf; + + // in the future the server will give us owner names, so see if we're there yet: + if(content["parcels"][i]["objects"][j].has("owner_name")) + { + owner_buf = content["parcels"][i]["objects"][j]["owner_name"].asString(); + } + // ...and if not use the slightly more painful method of disovery: + else + { + BOOL name_is_cached; + if (is_group_owned) + { + name_is_cached = gCacheName->getGroupName(owner_id, owner_buf); + } + else + { + LLAvatarName av_name; + name_is_cached = LLAvatarNameCache::get(owner_id, &av_name); + owner_buf = av_name.getUserName(); + owner_buf = LLCacheName::buildUsername(owner_buf); + } + if(!name_is_cached) + { + if(std::find(names_requested.begin(), names_requested.end(), owner_id) == names_requested.end()) + { + names_requested.push_back(owner_id); + if (is_group_owned) + { + gCacheName->getGroup(owner_id, + boost::bind(&LLPanelScriptLimitsRegionMemory::onNameCache, + this, _1, _2)); + } + else + { + LLAvatarNameCache::get(owner_id, + boost::bind(&LLPanelScriptLimitsRegionMemory::onAvatarNameCache, + this, _1, _2)); + } + } + } + } + + LLScrollListItem::Params item_params; + item_params.value = task_id; + + LLScrollListCell::Params cell_params; + cell_params.font = LLFontGL::getFontSansSerif(); + // Start out right justifying numeric displays + cell_params.font_halign = LLFontGL::RIGHT; + + cell_params.column = "size"; + cell_params.value = size; + item_params.columns.add(cell_params); + + cell_params.column = "urls"; + cell_params.value = urls; + item_params.columns.add(cell_params); + + cell_params.font_halign = LLFontGL::LEFT; + // The rest of the columns are text to left justify them + cell_params.column = "name"; + cell_params.value = name_buf; + item_params.columns.add(cell_params); + + cell_params.column = "owner"; + cell_params.value = owner_buf; + item_params.columns.add(cell_params); + + cell_params.column = "parcel"; + cell_params.value = parcel_name; + item_params.columns.add(cell_params); + + cell_params.column = "location"; + cell_params.value = has_locations + ? llformat("<%0.0f, %0.0f, %0.0f>", location_x, location_y, location_z) + : ""; + item_params.columns.add(cell_params); + + list->addRow(item_params); + + LLSD element; + element["owner_id"] = owner_id; + + element["id"] = task_id; + element["local_id"] = local_id; + mObjectListItems.push_back(element); + } + } + + if (has_locations) + { + LLButton* btn = getChild<LLButton>("highlight_btn"); + if(btn) + { + btn->setVisible(true); + } + } + + if (has_local_ids) + { + LLButton* btn = getChild<LLButton>("return_btn"); + if(btn) + { + btn->setVisible(true); + } + } + + // save the structure to make object return easier + mContent = content; } void LLPanelScriptLimitsRegionMemory::setRegionSummary(LLSD content) { - if(content["summary"]["used"][0]["type"].asString() == std::string("memory")) - { - mParcelMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; - mParcelMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; - mGotParcelMemoryUsed = true; - } - else if(content["summary"]["used"][1]["type"].asString() == std::string("memory")) - { - mParcelMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; - mParcelMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; - mGotParcelMemoryUsed = true; - } - else - { - LL_WARNS() << "summary doesn't contain memory info" << LL_ENDL; - return; - } - - if(content["summary"]["used"][0]["type"].asString() == std::string("urls")) - { - mParcelURLsUsed = content["summary"]["used"][0]["amount"].asInteger(); - mParcelURLsMax = content["summary"]["available"][0]["amount"].asInteger(); - mGotParcelURLsUsed = true; - } - else if(content["summary"]["used"][1]["type"].asString() == std::string("urls")) - { - mParcelURLsUsed = content["summary"]["used"][1]["amount"].asInteger(); - mParcelURLsMax = content["summary"]["available"][1]["amount"].asInteger(); - mGotParcelURLsUsed = true; - } - else - { - LL_WARNS() << "summary doesn't contain urls info" << LL_ENDL; - return; - } - - if((mParcelMemoryUsed >= 0) && (mParcelMemoryMax >= 0)) - { - LLStringUtil::format_map_t args_parcel_memory; - args_parcel_memory["[COUNT]"] = llformat ("%d", mParcelMemoryUsed); - std::string translate_message = "ScriptLimitsMemoryUsedSimple"; - - if (0 < mParcelMemoryMax) - { - S32 parcel_memory_available = mParcelMemoryMax - mParcelMemoryUsed; - - args_parcel_memory["[MAX]"] = llformat ("%d", mParcelMemoryMax); - args_parcel_memory["[AVAILABLE]"] = llformat ("%d", parcel_memory_available); - translate_message = "ScriptLimitsMemoryUsed"; - } - - std::string msg_parcel_memory = LLTrans::getString(translate_message, args_parcel_memory); - getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_parcel_memory)); - } - - if((mParcelURLsUsed >= 0) && (mParcelURLsMax >= 0)) - { - S32 parcel_urls_available = mParcelURLsMax - mParcelURLsUsed; - - LLStringUtil::format_map_t args_parcel_urls; - args_parcel_urls["[COUNT]"] = llformat ("%d", mParcelURLsUsed); - args_parcel_urls["[MAX]"] = llformat ("%d", mParcelURLsMax); - args_parcel_urls["[AVAILABLE]"] = llformat ("%d", parcel_urls_available); - std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_parcel_urls); - getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_parcel_urls)); - } + if(content["summary"]["used"][0]["type"].asString() == std::string("memory")) + { + mParcelMemoryUsed = content["summary"]["used"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; + mParcelMemoryMax = content["summary"]["available"][0]["amount"].asInteger() / SIZE_OF_ONE_KB; + mGotParcelMemoryUsed = true; + } + else if(content["summary"]["used"][1]["type"].asString() == std::string("memory")) + { + mParcelMemoryUsed = content["summary"]["used"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; + mParcelMemoryMax = content["summary"]["available"][1]["amount"].asInteger() / SIZE_OF_ONE_KB; + mGotParcelMemoryUsed = true; + } + else + { + LL_WARNS() << "summary doesn't contain memory info" << LL_ENDL; + return; + } + + if(content["summary"]["used"][0]["type"].asString() == std::string("urls")) + { + mParcelURLsUsed = content["summary"]["used"][0]["amount"].asInteger(); + mParcelURLsMax = content["summary"]["available"][0]["amount"].asInteger(); + mGotParcelURLsUsed = true; + } + else if(content["summary"]["used"][1]["type"].asString() == std::string("urls")) + { + mParcelURLsUsed = content["summary"]["used"][1]["amount"].asInteger(); + mParcelURLsMax = content["summary"]["available"][1]["amount"].asInteger(); + mGotParcelURLsUsed = true; + } + else + { + LL_WARNS() << "summary doesn't contain urls info" << LL_ENDL; + return; + } + + if((mParcelMemoryUsed >= 0) && (mParcelMemoryMax >= 0)) + { + LLStringUtil::format_map_t args_parcel_memory; + args_parcel_memory["[COUNT]"] = llformat ("%d", mParcelMemoryUsed); + std::string translate_message = "ScriptLimitsMemoryUsedSimple"; + + if (0 < mParcelMemoryMax) + { + S32 parcel_memory_available = mParcelMemoryMax - mParcelMemoryUsed; + + args_parcel_memory["[MAX]"] = llformat ("%d", mParcelMemoryMax); + args_parcel_memory["[AVAILABLE]"] = llformat ("%d", parcel_memory_available); + translate_message = "ScriptLimitsMemoryUsed"; + } + + std::string msg_parcel_memory = LLTrans::getString(translate_message, args_parcel_memory); + getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_parcel_memory)); + } + + if((mParcelURLsUsed >= 0) && (mParcelURLsMax >= 0)) + { + S32 parcel_urls_available = mParcelURLsMax - mParcelURLsUsed; + + LLStringUtil::format_map_t args_parcel_urls; + args_parcel_urls["[COUNT]"] = llformat ("%d", mParcelURLsUsed); + args_parcel_urls["[MAX]"] = llformat ("%d", mParcelURLsMax); + args_parcel_urls["[AVAILABLE]"] = llformat ("%d", parcel_urls_available); + std::string msg_parcel_urls = LLTrans::getString("ScriptLimitsURLsUsed", args_parcel_urls); + getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_parcel_urls)); + } } BOOL LLPanelScriptLimitsRegionMemory::postBuild() { - childSetAction("refresh_list_btn", onClickRefresh, this); - childSetAction("highlight_btn", onClickHighlight, this); - childSetAction("return_btn", onClickReturn, this); - - std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting"); - getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); - - LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); - if(!list) - { - return FALSE; - } - list->setCommitCallback(boost::bind(&LLPanelScriptLimitsRegionMemory::checkButtonsEnabled, this)); - checkButtonsEnabled(); - - //set all columns to resizable mode even if some columns will be empty - for(S32 column = 0; column < list->getNumColumns(); column++) - { - LLScrollListColumn* columnp = list->getColumn(column); - columnp->mHeader->setHasResizableElement(TRUE); - } - - return StartRequestChain(); + childSetAction("refresh_list_btn", onClickRefresh, this); + childSetAction("highlight_btn", onClickHighlight, this); + childSetAction("return_btn", onClickReturn, this); + + std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting"); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); + + LLScrollListCtrl *list = getChild<LLScrollListCtrl>("scripts_list"); + if(!list) + { + return FALSE; + } + list->setCommitCallback(boost::bind(&LLPanelScriptLimitsRegionMemory::checkButtonsEnabled, this)); + checkButtonsEnabled(); + + //set all columns to resizable mode even if some columns will be empty + for(S32 column = 0; column < list->getNumColumns(); column++) + { + LLScrollListColumn* columnp = list->getColumn(column); + columnp->mHeader->setHasResizableElement(TRUE); + } + + return StartRequestChain(); } BOOL LLPanelScriptLimitsRegionMemory::StartRequestChain() { - LLUUID region_id; - - LLFloaterLand* instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); - if(!instance) - { - getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string(""))); - //might have to do parent post build here - //if not logic below could use early outs - return FALSE; - } - LLParcel* parcel = instance->getCurrentSelectedParcel(); - LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); - - if ((region) && (parcel)) - { - LLUUID current_region_id = gAgent.getRegion()->getRegionID(); - LLVector3 parcel_center = parcel->getCenterpoint(); - - region_id = region->getRegionID(); - - if(region_id != current_region_id) - { - std::string msg_wrong_region = LLTrans::getString("ScriptLimitsRequestWrongRegion"); - getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_wrong_region)); - return FALSE; - } - - LLVector3d pos_global = region->getCenterGlobal(); - - LLSD body; - std::string url = region->getCapability("RemoteParcelRequest"); - if (!url.empty()) - { - LLRemoteParcelInfoProcessor::getInstance()->requestRegionParcelInfo(url, + LLUUID region_id; + + LLFloaterLand* instance = LLFloaterReg::getTypedInstance<LLFloaterLand>("about_land"); + if(!instance) + { + getChild<LLUICtrl>("loading_text")->setValue(LLSD(std::string(""))); + //might have to do parent post build here + //if not logic below could use early outs + return FALSE; + } + LLParcel* parcel = instance->getCurrentSelectedParcel(); + LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion(); + + if ((region) && (parcel)) + { + LLUUID current_region_id = gAgent.getRegion()->getRegionID(); + LLVector3 parcel_center = parcel->getCenterpoint(); + + region_id = region->getRegionID(); + + if(region_id != current_region_id) + { + std::string msg_wrong_region = LLTrans::getString("ScriptLimitsRequestWrongRegion"); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_wrong_region)); + return FALSE; + } + + LLVector3d pos_global = region->getCenterGlobal(); + + LLSD body; + std::string url = region->getCapability("RemoteParcelRequest"); + if (!url.empty()) + { + LLRemoteParcelInfoProcessor::getInstance()->requestRegionParcelInfo(url, region_id, parcel_center, pos_global, getObserverHandle()); - } - else - { - LL_WARNS() << "Can't get parcel info for script information request" << region_id - << ". Region: " << region->getName() - << " does not support RemoteParcelRequest" << LL_ENDL; - - std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError"); - getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); - } - } - else - { - std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestNoParcelSelected"); - getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); - } - - return LLPanelScriptLimitsInfo::postBuild(); + } + else + { + LL_WARNS() << "Can't get parcel info for script information request" << region_id + << ". Region: " << region->getName() + << " does not support RemoteParcelRequest" << LL_ENDL; + + std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestError"); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); + } + } + else + { + std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestNoParcelSelected"); + getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting)); + } + + return LLPanelScriptLimitsInfo::postBuild(); } void LLPanelScriptLimitsRegionMemory::clearList() { - LLCtrlListInterface *list = childGetListInterface("scripts_list"); - - if (list) - { - list->operateOnAll(LLCtrlListInterface::OP_DELETE); - } - - mGotParcelMemoryUsed = false; - mGotParcelMemoryMax = false; - mGotParcelURLsUsed = false; - mGotParcelURLsMax = false; - - LLStringUtil::format_map_t args_parcel_memory; - std::string msg_empty_string(""); - getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_empty_string)); - getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_empty_string)); - getChild<LLUICtrl>("parcels_listed")->setValue(LLSD(msg_empty_string)); - - mObjectListItems.clear(); - checkButtonsEnabled(); + LLCtrlListInterface *list = childGetListInterface("scripts_list"); + + if (list) + { + list->operateOnAll(LLCtrlListInterface::OP_DELETE); + } + + mGotParcelMemoryUsed = false; + mGotParcelMemoryMax = false; + mGotParcelURLsUsed = false; + mGotParcelURLsMax = false; + + LLStringUtil::format_map_t args_parcel_memory; + std::string msg_empty_string(""); + getChild<LLUICtrl>("memory_used")->setValue(LLSD(msg_empty_string)); + getChild<LLUICtrl>("urls_used")->setValue(LLSD(msg_empty_string)); + getChild<LLUICtrl>("parcels_listed")->setValue(LLSD(msg_empty_string)); + + mObjectListItems.clear(); + checkButtonsEnabled(); } void LLPanelScriptLimitsRegionMemory::checkButtonsEnabled() { - LLScrollListCtrl* list = getChild<LLScrollListCtrl>("scripts_list"); - getChild<LLButton>("highlight_btn")->setEnabled(list->getNumSelected() > 0); - getChild<LLButton>("return_btn")->setEnabled(list->getNumSelected() > 0); + LLScrollListCtrl* list = getChild<LLScrollListCtrl>("scripts_list"); + getChild<LLButton>("highlight_btn")->setEnabled(list->getNumSelected() > 0); + getChild<LLButton>("return_btn")->setEnabled(list->getNumSelected() > 0); } // static void LLPanelScriptLimitsRegionMemory::onClickRefresh(void* userdata) { - LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); - if(instance) - { - LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); - if(tab) - { - LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); - if(panel_memory) - { - //To stop people from hammering the refesh button and accidentally dosing themselves - enough requests can crash the viewer! - //turn the button off, then turn it on when we get a response - LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn"); - if(btn) - { - btn->setEnabled(false); - } - panel_memory->clearList(); - - panel_memory->StartRequestChain(); - } - } - return; - } - else - { - LL_WARNS() << "could not find LLPanelScriptLimitsRegionMemory instance after refresh button clicked" << LL_ENDL; - return; - } + LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); + if(instance) + { + LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); + if(tab) + { + LLPanelScriptLimitsRegionMemory* panel_memory = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); + if(panel_memory) + { + //To stop people from hammering the refesh button and accidentally dosing themselves - enough requests can crash the viewer! + //turn the button off, then turn it on when we get a response + LLButton* btn = panel_memory->getChild<LLButton>("refresh_list_btn"); + if(btn) + { + btn->setEnabled(false); + } + panel_memory->clearList(); + + panel_memory->StartRequestChain(); + } + } + return; + } + else + { + LL_WARNS() << "could not find LLPanelScriptLimitsRegionMemory instance after refresh button clicked" << LL_ENDL; + return; + } } void LLPanelScriptLimitsRegionMemory::showBeacon() -{ - LLScrollListCtrl* list = getChild<LLScrollListCtrl>("scripts_list"); - if (!list) return; +{ + LLScrollListCtrl* list = getChild<LLScrollListCtrl>("scripts_list"); + if (!list) return; + + LLScrollListItem* first_selected = list->getFirstSelected(); + if (!first_selected) return; - LLScrollListItem* first_selected = list->getFirstSelected(); - if (!first_selected) return; + std::string name = first_selected->getColumn(2)->getValue().asString(); + std::string pos_string = first_selected->getColumn(5)->getValue().asString(); - std::string name = first_selected->getColumn(2)->getValue().asString(); - std::string pos_string = first_selected->getColumn(5)->getValue().asString(); - - F32 x, y, z; - S32 matched = sscanf(pos_string.c_str(), "<%g,%g,%g>", &x, &y, &z); - if (matched != 3) return; + 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); + LLVector3 pos_agent(x, y, z); + LLVector3d pos_global = gAgent.getPosGlobalFromAgent(pos_agent); - std::string tooltip(""); - LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM); + std::string tooltip(""); + LLTracker::trackLocation(pos_global, name, tooltip, LLTracker::LOCATION_ITEM); } // static void LLPanelScriptLimitsRegionMemory::onClickHighlight(void* userdata) { - LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); - if(instance) - { - LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); - if(tab) - { - LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); - if(panel) - { - panel->showBeacon(); - } - } - return; - } - else - { - LL_WARNS() << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << LL_ENDL; - return; - } + LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); + if(instance) + { + LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); + if(tab) + { + LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); + if(panel) + { + panel->showBeacon(); + } + } + return; + } + else + { + LL_WARNS() << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << LL_ENDL; + return; + } } void LLPanelScriptLimitsRegionMemory::returnObjectsFromParcel(S32 local_id) { - LLMessageSystem *msg = gMessageSystem; - - LLViewerRegion* region = gAgent.getRegion(); - if (!region) return; - - LLCtrlListInterface *list = childGetListInterface("scripts_list"); - if (!list || list->getItemCount() == 0) return; - - std::vector<LLSD>::iterator id_itor; - - bool start_message = true; - - for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor) - { - LLSD element = *id_itor; - if (!list->isSelected(element["id"].asUUID())) - { - // Selected only - continue; - } - - if(element["local_id"].asInteger() != local_id) - { - // Not the parcel we are looking for - continue; - } - - if (start_message) - { - msg->newMessageFast(_PREHASH_ParcelReturnObjects); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); - msg->nextBlockFast(_PREHASH_ParcelData); - msg->addS32Fast(_PREHASH_LocalID, element["local_id"].asInteger()); - msg->addU32Fast(_PREHASH_ReturnType, RT_LIST); - start_message = false; - } - - msg->nextBlockFast(_PREHASH_TaskIDs); - msg->addUUIDFast(_PREHASH_TaskID, element["id"].asUUID()); - - if (msg->isSendFullFast(_PREHASH_TaskIDs)) - { - msg->sendReliable(region->getHost()); - start_message = true; - } - } - - if (!start_message) - { - msg->sendReliable(region->getHost()); - } + LLMessageSystem *msg = gMessageSystem; + + LLViewerRegion* region = gAgent.getRegion(); + if (!region) return; + + LLCtrlListInterface *list = childGetListInterface("scripts_list"); + if (!list || list->getItemCount() == 0) return; + + std::vector<LLSD>::iterator id_itor; + + bool start_message = true; + + for (id_itor = mObjectListItems.begin(); id_itor != mObjectListItems.end(); ++id_itor) + { + LLSD element = *id_itor; + if (!list->isSelected(element["id"].asUUID())) + { + // Selected only + continue; + } + + if(element["local_id"].asInteger() != local_id) + { + // Not the parcel we are looking for + continue; + } + + if (start_message) + { + msg->newMessageFast(_PREHASH_ParcelReturnObjects); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_ParcelData); + msg->addS32Fast(_PREHASH_LocalID, element["local_id"].asInteger()); + msg->addU32Fast(_PREHASH_ReturnType, RT_LIST); + start_message = false; + } + + msg->nextBlockFast(_PREHASH_TaskIDs); + msg->addUUIDFast(_PREHASH_TaskID, element["id"].asUUID()); + + if (msg->isSendFullFast(_PREHASH_TaskIDs)) + { + msg->sendReliable(region->getHost()); + start_message = true; + } + } + + if (!start_message) + { + msg->sendReliable(region->getHost()); + } } void LLPanelScriptLimitsRegionMemory::returnObjects() { - if(!mContent.has("parcels")) - { - return; - } - - S32 number_parcels = mContent["parcels"].size(); - - // a message per parcel containing all objects to be returned from that parcel - for(S32 i = 0; i < number_parcels; i++) - { - S32 local_id = 0; - if(mContent["parcels"][i].has("local_id")) - { - local_id = mContent["parcels"][i]["local_id"].asInteger(); - returnObjectsFromParcel(local_id); - } - } - - onClickRefresh(NULL); + if(!mContent.has("parcels")) + { + return; + } + + S32 number_parcels = mContent["parcels"].size(); + + // a message per parcel containing all objects to be returned from that parcel + for(S32 i = 0; i < number_parcels; i++) + { + S32 local_id = 0; + if(mContent["parcels"][i].has("local_id")) + { + local_id = mContent["parcels"][i]["local_id"].asInteger(); + returnObjectsFromParcel(local_id); + } + } + + onClickRefresh(NULL); } // static void LLPanelScriptLimitsRegionMemory::onClickReturn(void* userdata) { - LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); - if(instance) - { - LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); - if(tab) - { - LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); - if(panel) - { - panel->returnObjects(); - } - } - return; - } - else - { - LL_WARNS() << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << LL_ENDL; - return; - } + LLFloaterScriptLimits* instance = LLFloaterReg::getTypedInstance<LLFloaterScriptLimits>("script_limits"); + if(instance) + { + LLTabContainer* tab = instance->getChild<LLTabContainer>("scriptlimits_panels"); + if(tab) + { + LLPanelScriptLimitsRegionMemory* panel = (LLPanelScriptLimitsRegionMemory*)tab->getChild<LLPanel>("script_limits_region_memory_panel"); + if(panel) + { + panel->returnObjects(); + } + } + return; + } + else + { + LL_WARNS() << "could not find LLPanelScriptLimitsRegionMemory instance after highlight button clicked" << LL_ENDL; + return; + } } |