From 7811d8857c52904f770508a17cfce4c050745227 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Sat, 21 Mar 2015 03:45:09 -0400 Subject: [PATCH] Port Region Tracker Floater from Alchemy~ Added getGridSpecificFile function to append the grid when it's not SL. Also slightly rearrange Singularity menu. --- indra/newview/CMakeLists.txt | 2 + indra/newview/alfloaterregiontracker.cpp | 294 ++++++++++++++++++ indra/newview/alfloaterregiontracker.h | 69 ++++ indra/newview/app_settings/settings.xml | 16 + .../newview/app_settings/settings_ascent.xml | 11 + indra/newview/llfloaterworldmap.cpp | 28 +- indra/newview/llfloaterworldmap.h | 1 + indra/newview/llmenucommands.cpp | 2 + indra/newview/llworldmap.cpp | 2 +- indra/newview/llworldmap.h | 2 + .../textures/icn_toolbar_region_tracker.png | Bin 0 -> 912 bytes .../textures/icn_toolbar_region_tracker.png | Bin 0 -> 49 bytes .../skins/default/textures/textures.xml | 5 +- .../xui/en-us/floater_toolbar_prefs.xml | 21 +- .../default/xui/en-us/floater_world_map.xml | 8 +- .../skins/default/xui/en-us/menu_viewer.xml | 12 +- .../skins/default/xui/en-us/notifications.xml | 21 ++ .../skins/default/xui/en-us/panel_toolbar.xml | 5 + 18 files changed, 479 insertions(+), 20 deletions(-) create mode 100644 indra/newview/alfloaterregiontracker.cpp create mode 100644 indra/newview/alfloaterregiontracker.h create mode 100644 indra/newview/skins/dark/textures/icn_toolbar_region_tracker.png create mode 100644 indra/newview/skins/default/textures/icn_toolbar_region_tracker.png diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index e88b5d638..40f866638 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -82,6 +82,7 @@ set(viewer_SOURCE_FILES NACLantispam.cpp aihttpview.cpp aixmllindengenepool.cpp + alfloaterregiontracker.cpp aoremotectrl.cpp ascentfloatercontactgroups.cpp ascentkeyword.cpp @@ -611,6 +612,7 @@ set(viewer_HEADER_FILES NACLantispam.h aihttpview.h aixmllindengenepool.h + alfloaterregiontracker.h aoremotectrl.h ascentfloatercontactgroups.h ascentkeyword.h diff --git a/indra/newview/alfloaterregiontracker.cpp b/indra/newview/alfloaterregiontracker.cpp new file mode 100644 index 000000000..e812d4e51 --- /dev/null +++ b/indra/newview/alfloaterregiontracker.cpp @@ -0,0 +1,294 @@ +/** +* @file alfloaterregiontracker.cpp +* @brief Region tracking floater +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Alchemy Viewer Source Code +* Copyright (C) 2014, Alchemy Viewer Project. +* +* 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 +* +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "alfloaterregiontracker.h" + +// library +#include "llbutton.h" +#include "lldir.h" +#include "llfile.h" +#include "llscrolllistctrl.h" +#include "llsd.h" +#include "llsdserialize.h" +#include "llsdserialize_xml.h" +#include "lltextbox.h" +#include "lluictrlfactory.h" + +// newview +#include "hippogridmanager.h" +#include "llagent.h" +#include "llfloaterworldmap.h" +//#include "llfloaterreg.h" +#include "llnotificationsutil.h" +#include "llviewermessage.h" +#include "llworldmap.h" +#include "llworldmapmessage.h" + +#include + +const std::string TRACKER_FILE = "tracked_regions.json"; + +ALFloaterRegionTracker::ALFloaterRegionTracker(const LLSD&) + : LLFloater(), + LLEventTimer(5.f), + mRefreshRegionListBtn(NULL), + mRemoveRegionBtn(NULL), + mOpenMapBtn(NULL), + mRegionScrollList(NULL) +{ + LLUICtrlFactory::instance().buildFloater(this, "floater_region_tracker.xml"); + loadFromJSON(); +} + +ALFloaterRegionTracker::~ALFloaterRegionTracker() +{ + saveToJSON(); +} + +BOOL ALFloaterRegionTracker::postBuild() +{ + mRefreshRegionListBtn = getChild("refresh"); + mRefreshRegionListBtn->setClickedCallback(boost::bind(&ALFloaterRegionTracker::refresh, this)); + + mRemoveRegionBtn = getChild("remove"); + mRemoveRegionBtn->setClickedCallback(boost::bind(&ALFloaterRegionTracker::removeRegions, this)); + + mOpenMapBtn = getChild("open_map"); + mOpenMapBtn->setClickedCallback(boost::bind(&ALFloaterRegionTracker::openMap, this)); + + mRegionScrollList = getChild("region_list"); + mRegionScrollList->setCommitOnSelectionChange(TRUE); + mRegionScrollList->setCommitCallback(boost::bind(&ALFloaterRegionTracker::updateHeader, this)); + mRegionScrollList->setDoubleClickCallback(boost::bind(&ALFloaterRegionTracker::openMap, this)); + + updateHeader(); + + return LLFloater::postBuild(); +} + +void ALFloaterRegionTracker::onOpen(/*const LLSD& key*/) +{ + requestRegionData(); + mEventTimer.start(); +} + +void ALFloaterRegionTracker::onClose(bool app_quitting) +{ + mEventTimer.stop(); + app_quitting ? destroy() : setVisible(false); +} + +void ALFloaterRegionTracker::updateHeader() +{ + S32 num_selected(mRegionScrollList->getNumSelected()); + mRefreshRegionListBtn->setEnabled(mRegionMap.size() != 0); + mRemoveRegionBtn->setEnabled(!!num_selected); + mOpenMapBtn->setEnabled(num_selected == 1); +} + +void ALFloaterRegionTracker::refresh() +{ + if (!mRegionMap.size()) + { + updateHeader(); + return; + } + + const std::string& saved_selected_value = mRegionScrollList->getSelectedValue().asString(); + mRegionScrollList->deleteAllItems(); + + const std::string& cur_region_name = gAgent.getRegion()->getName(); + + for (LLSD::map_const_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++) + { + const std::string& sim_name = it->first; + const LLSD& data = it->second; + if (data.isMap()) // Assume the rest is correct. + { + LLScrollListCell::Params label; + LLScrollListCell::Params maturity; + LLScrollListCell::Params region; + LLScrollListCell::Params count; + label.column("region_label").type("text").value(data["label"].asString()); + maturity.column("region_maturity_icon").type("icon").font_halign(LLFontGL::HCENTER); + region.column("region_name").type("text").value(sim_name); + count.column("region_agent_count").type("text").value("..."); + if (LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromName(sim_name)) + { + maturity.value(info->getAccessIcon()); + maturity.tool_tip(info->getShortAccessString()); + + info->updateAgentCount(LLTimer::getElapsedSeconds()); + S32 agent_count = info->getAgentCount(); + if (info->isDown()) + { + label.color(LLColor4::red); + maturity.color(LLColor4::red); + region.color(LLColor4::red); + count.color(LLColor4::red); + count.value(0); + } + else + count.value((sim_name == cur_region_name) ? agent_count + 1 : agent_count); + } + else + { + label.color(LLColor4::grey); + maturity.color(LLColor4::grey); + region.color(LLColor4::grey); + count.color(LLColor4::grey); + + LLWorldMapMessage::getInstance()->sendNamedRegionRequest(sim_name); + if (!mEventTimer.getStarted()) mEventTimer.start(); + } + LLScrollListItem::Params row; + row.value = sim_name; + row.columns.add(label); + row.columns.add(maturity); + row.columns.add(region); + row.columns.add(count); + mRegionScrollList->addRow(row); + } + } + if (!saved_selected_value.empty()) + mRegionScrollList->selectByValue(saved_selected_value); +} + +BOOL ALFloaterRegionTracker::tick() +{ + refresh(); + return FALSE; +} + +void ALFloaterRegionTracker::requestRegionData() +{ + if (!mRegionMap.size()) + return; + + for (LLSD::map_const_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++) + { + const std::string& name = it->first; + if (LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromName(name)) + { + info->updateAgentCount(LLTimer::getElapsedSeconds()); + } + else + { + LLWorldMapMessage::getInstance()->sendNamedRegionRequest(name); + } + } + mEventTimer.start(); +} + +void ALFloaterRegionTracker::removeRegions() +{ + BOOST_FOREACH(const LLScrollListItem* item, mRegionScrollList->getAllSelected()) + { + mRegionMap.erase(item->getValue().asString()); + } + mRegionScrollList->deleteSelectedItems(); + saveToJSON(); + updateHeader(); +} + +std::string getGridSpecificFile(const std::string& file, const char& sep = '_') +{ + const HippoGridInfo& grid(*gHippoGridManager->getConnectedGrid()); + if (grid.isSecondLife()) return file; + return file + sep + grid.getGridNick(); +} + +bool ALFloaterRegionTracker::saveToJSON() +{ + const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, TRACKER_FILE); + llofstream out_file; + out_file.open(getGridSpecificFile(filename)); + if (out_file.is_open()) + { + LLSDSerialize::toPrettyNotation(mRegionMap, out_file); + out_file.close(); + return true; + } + return false; +} + +bool ALFloaterRegionTracker::loadFromJSON() +{ + const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, TRACKER_FILE); + llifstream in_file; + in_file.open(getGridSpecificFile(filename)); + if (in_file.is_open()) + { + LLSDSerialize::fromNotation(mRegionMap, in_file, LLSDSerialize::SIZE_UNLIMITED); + in_file.close(); + return true; + } + return false; +} + +std::string ALFloaterRegionTracker::getRegionLabelIfExists(const std::string& name) +{ + return mRegionMap.get(name)["label"].asString(); +} + +void ALFloaterRegionTracker::onRegionAddedCallback(const LLSD& notification, const LLSD& response) +{ + const S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option == 0) + { + const std::string& name = notification["payload"]["name"].asString(); + std::string label = response["label"].asString(); + LLStringUtil::trim(label); + if (!name.empty() && !label.empty()) + { + if (mRegionMap.has(name)) + { + for (LLSD::map_iterator it = mRegionMap.beginMap(); it != mRegionMap.endMap(); it++) + if (it->first == name) it->second["label"] = label; + } + else + { + LLSD region; + region["label"] = label; + mRegionMap.insert(name, region); + } + saveToJSON(); + refresh(); + } + } +} + +void ALFloaterRegionTracker::openMap() +{ + const std::string& region = mRegionScrollList->getFirstSelected()->getValue().asString(); + LLFloaterWorldMap* worldmap_floaterp = gFloaterWorldMap; + if (!region.empty() && worldmap_floaterp) + { + worldmap_floaterp->trackURL(region, 128, 128, 0); + worldmap_floaterp->show(true); + } +} diff --git a/indra/newview/alfloaterregiontracker.h b/indra/newview/alfloaterregiontracker.h new file mode 100644 index 000000000..3683820ab --- /dev/null +++ b/indra/newview/alfloaterregiontracker.h @@ -0,0 +1,69 @@ +/** +* @file alfloaterregiontracker.h +* @brief Region tracking floater +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Alchemy Viewer Source Code +* Copyright (C) 2014, Alchemy Viewer Project. +* +* 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 +* +* $/LicenseInfo$ +*/ + +#pragma once + +#include "lleventtimer.h" +#include "llfloater.h" + +class LLButton; +class LLSD; +class LLScrollListCtrl; + +class ALFloaterRegionTracker : public LLFloater, public LLEventTimer +, public LLFloaterSingleton +{ + //friend class LLFloaterReg; + friend class LLUISingleton >; +private: + ALFloaterRegionTracker(const LLSD& key); + virtual ~ALFloaterRegionTracker(); +public: + /*virtual*/ BOOL postBuild(); + /*virtual*/ void onOpen(/*const LLSD& key*/); + /*virtual*/ void onClose(bool app_quitting); + /*virtual*/ void refresh(); + /*virtual*/ BOOL tick(); + using LLUIFactory::getInstance; + +private: + void updateHeader(); + void requestRegionData(); + void removeRegions(); + bool saveToJSON(); + bool loadFromJSON(); + void openMap(); + +public: + std::string getRegionLabelIfExists(const std::string& name); + void onRegionAddedCallback(const LLSD& notification, const LLSD& response); + +private: + LLSD mRegionMap; + LLButton* mRefreshRegionListBtn; + LLButton* mRemoveRegionBtn; + LLButton* mOpenMapBtn; + LLScrollListCtrl* mRegionScrollList; +}; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b99ae171b..5e3fc7ed2 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -18521,6 +18521,22 @@ This should be as low as possible, but too low may break functionality 0 + FloaterRegionTrackerRect + + Comment + Rectangle for Region Tracker Floater + Persist + 1 + Type + Rect + Value + + 500 + 450 + 850 + 400 + + WindEnabled Comment diff --git a/indra/newview/app_settings/settings_ascent.xml b/indra/newview/app_settings/settings_ascent.xml index 883d13313..af0f4a826 100644 --- a/indra/newview/app_settings/settings_ascent.xml +++ b/indra/newview/app_settings/settings_ascent.xml @@ -1747,6 +1747,17 @@ Value 0 + ToolbarVisibleRegionTracker + + Comment + Whether or not the button for the region tracker is on the toolbar + Persist + 1 + Type + Boolean + Value + 0 + ToolbarVisibleScriptErrors Comment diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index c71a1c425..aa4dfa578 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -39,6 +39,7 @@ #include "llfloaterworldmap.h" +#include "alfloaterregiontracker.h" #include "llagent.h" #include "llagentcamera.h" #include "llbutton.h" @@ -268,6 +269,7 @@ LLFloaterWorldMap::LLFloaterWorldMap() mCommitCallbackRegistrar.add("WMap.ShowAgent", boost::bind(&LLFloaterWorldMap::onShowAgentBtn, this)); mCommitCallbackRegistrar.add("WMap.Clear", boost::bind(&LLFloaterWorldMap::onClearBtn, this)); mCommitCallbackRegistrar.add("WMap.CopySLURL", boost::bind(&LLFloaterWorldMap::onCopySLURL, this)); + mCommitCallbackRegistrar.add("WMap.TrackRegion", boost::bind(&LLFloaterWorldMap::onTrackRegion, this)); LLUICtrlFactory::getInstance()->buildFloater(this, "floater_world_map.xml", &getFactoryMap()); gSavedSettings.getControl("PreferredMaturity")->getSignal()->connect(boost::bind(&LLFloaterWorldMap::onChangeMaturity, this)); @@ -535,8 +537,10 @@ void LLFloaterWorldMap::draw() getChildView("Teleport")->setEnabled((BOOL)tracking_status); // getChildView("Clear")->setEnabled((BOOL)tracking_status); - getChildView("Show Destination")->setEnabled((BOOL)tracking_status || LLWorldMap::getInstance()->isTracking()); + bool is_tracking((BOOL)tracking_status || LLWorldMap::instance().isTracking()); + getChildView("Show Destination")->setEnabled(is_tracking); getChildView("copy_slurl")->setEnabled((mSLURL.isValid()) ); + getChild("track_region")->setEnabled(is_tracking); setMouseOpaque(TRUE); getDragHandle()->setMouseOpaque(TRUE); @@ -1427,6 +1431,28 @@ void LLFloaterWorldMap::onCopySLURL() LLNotificationsUtil::add("CopySLURL", args); } +void LLFloaterWorldMap::onTrackRegion() +{ + ALFloaterRegionTracker* floaterp = ALFloaterRegionTracker::getInstance(); + if (floaterp) + { + if (LLTracker::getTrackingStatus() != LLTracker::TRACKING_NOTHING) + { + std::string sim_name; + LLWorldMap::getInstance()->simNameFromPosGlobal(LLTracker::getTrackedPositionGlobal(), sim_name); + if (!sim_name.empty()) + { + const std::string& temp_label = floaterp->getRegionLabelIfExists(sim_name); + LLSD args, payload; + args["REGION"] = sim_name; + args["LABEL"] = !temp_label.empty() ? temp_label : sim_name; + payload["name"] = sim_name; + LLNotificationsUtil::add("RegionTrackerAdd", args, payload, boost::bind(&ALFloaterRegionTracker::onRegionAddedCallback, floaterp, _1, _2)); + } + } + } +} + // protected void LLFloaterWorldMap::centerOnTarget(BOOL animate) { diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h index 652c23e1f..952570287 100644 --- a/indra/newview/llfloaterworldmap.h +++ b/indra/newview/llfloaterworldmap.h @@ -132,6 +132,7 @@ protected: void onShowTargetBtn(); void onShowAgentBtn(); void onCopySLURL(); + void onTrackRegion(); void centerOnTarget(BOOL animate); void updateLocation(); diff --git a/indra/newview/llmenucommands.cpp b/indra/newview/llmenucommands.cpp index fdd533257..e7684b034 100644 --- a/indra/newview/llmenucommands.cpp +++ b/indra/newview/llmenucommands.cpp @@ -35,6 +35,7 @@ #include "llmenucommands.h" #include "aihttpview.h" +#include "alfloaterregiontracker.h" #include "floaterao.h" #include "floaterlocalassetbrowse.h" #include "hbfloatergrouptitles.h" @@ -239,6 +240,7 @@ struct MenuFloaterDict : public LLSingleton registerFloater ("pathfinding_linksets"); registerFloater ("perm prefs"); registerFloater ("radar"); + registerFloater ("region_tracker"); registerFloater ("script info"); registerFloater ("stat bar"); registerFloater ("teleport history"); diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index 37db6e081..1770aeacd 100644 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -54,7 +54,7 @@ bool LLWorldMap::sGotMapURL = false; // Timers to temporise database requests -const F32 AGENTS_UPDATE_TIMER = 60.0; // Seconds between 2 agent requests for a region +const F32 AGENTS_UPDATE_TIMER = 30.0; // Seconds between 2 agent requests for a region const F32 REQUEST_ITEMS_TIMER = 10.f * 60.f; // Seconds before we consider re-requesting item data for the grid //--------------------------------------------------------------------------- diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h index 7037d9f05..17e312b1f 100644 --- a/indra/newview/llworldmap.h +++ b/indra/newview/llworldmap.h @@ -157,6 +157,8 @@ public: const std::string getFlagsString() const { return LLViewerRegion::regionFlagsToString(mRegionFlags); } const U64 getRegionFlags() const { return mRegionFlags; } const std::string getAccessString() const { return LLViewerRegion::accessToString((U8)mAccess); } + const std::string getShortAccessString() const { return LLViewerRegion::accessToShortString(static_cast(mAccess)); } // + const std::string getAccessIcon() const { return LLViewerRegion::getAccessIcon(static_cast(mAccess)); } const U8 getAccess() const { return mAccess; } const S32 getAgentCount() const; // Compute the total agents count LLPointer getLandForSaleImage(); // Get the overlay image, fetch it if necessary diff --git a/indra/newview/skins/dark/textures/icn_toolbar_region_tracker.png b/indra/newview/skins/dark/textures/icn_toolbar_region_tracker.png new file mode 100644 index 0000000000000000000000000000000000000000..aef16414fd8e0c259f7356278fc0a5f3f8b87625 GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QWgP7*7QFgt-3y|6fO2`|8!J|Ni}Z z_39OnjRzIv=kMIP^Zonx&Q4B$|NfmjXO5MnC9?VefB%&$S3=AIn*8R?n;$=Z9653% zB_#!@?B&asXHK8~_3M|Nt?lGVlZ=gw5)%@D_MSO&=ID_lo}Qi#_Vz}GhQUEWAKt%z z@!~~kNy&*5CyELSfg<6dp+HNI9zAMdZVogGX!7dStAGFg4Rprm&z}qO^6Kj9fW81) z3Isqm0L39}2>J2DhpenDD+`Nx^X37afh=|V_U)TDZ+`pw6(V@((4iUArd3x}efjd` z#*G{A-o0DAXwkK6*A5&w05t#LfdkjBUIhli&!0bmMghG8^z5sbFHfI74RprN9Xo*D z`TXhAw{PD*efl(a?%eO+zu&oY=k@E?^XJb8y7}YBj}IO^`19w_)hk!tzJ0rV`EsB; zf#Lb+(W9qNp4`8G|K7cOmoH!b^ZWOc$B%)&+qQM<`Sa(0eE)v(i!o7ry`f?amz0 zImf>3|8zc+Uw!9FsqY^qdq{P}OU~3xN`G|@m~v!2T^vIsE+;1(V3LrGym`aYV&@J? z$A;$i>5Yy3@eTnV5iTJ9{Mn(qb!l+LZw=SFmiUm(sKbLh*2~7ZQIsRP$ literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/icn_toolbar_region_tracker.png b/indra/newview/skins/default/textures/icn_toolbar_region_tracker.png new file mode 100644 index 0000000000000000000000000000000000000000..49e5d11a21f391e18b563286837733b8990f34b7 GIT binary patch literal 49 rcmZQz;9`IQMg~R(1rCP)|Np~87(#+VUBf(sJ^lT3BiuZFT=f_Lkxd94 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 574f2b3a7..b6420d4e0 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -162,8 +162,6 @@ - - @@ -416,4 +414,7 @@ + + + diff --git a/indra/newview/skins/default/xui/en-us/floater_toolbar_prefs.xml b/indra/newview/skins/default/xui/en-us/floater_toolbar_prefs.xml index f6e5da685..dbbfe6dbe 100644 --- a/indra/newview/skins/default/xui/en-us/floater_toolbar_prefs.xml +++ b/indra/newview/skins/default/xui/en-us/floater_toolbar_prefs.xml @@ -14,9 +14,10 @@ + - - + + @@ -31,8 +32,8 @@ - - + + @@ -47,8 +48,8 @@ - - + + @@ -65,8 +66,8 @@ - - + + @@ -81,8 +82,8 @@ - - + + diff --git a/indra/newview/skins/default/xui/en-us/floater_world_map.xml b/indra/newview/skins/default/xui/en-us/floater_world_map.xml index 580286dda..c34bbec61 100644 --- a/indra/newview/skins/default/xui/en-us/floater_world_map.xml +++ b/indra/newview/skins/default/xui/en-us/floater_world_map.xml @@ -204,11 +204,15 @@ function="WMap.ShowAgent" /> + + + + + + + + + @@ -1056,10 +1064,6 @@ - - - - diff --git a/indra/newview/skins/default/xui/en-us/notifications.xml b/indra/newview/skins/default/xui/en-us/notifications.xml index bd5e03a64..9a7bb44b9 100644 --- a/indra/newview/skins/default/xui/en-us/notifications.xml +++ b/indra/newview/skins/default/xui/en-us/notifications.xml @@ -10361,6 +10361,27 @@ Changes won't take effect until after you restart [APP_NAME]. + +What label would you like to use for +the region "[REGION]"? + confirm +
+ [LABEL] +
+ + +