From 9e9f6ff48e58eccbe4ef3d5b9de35d085631fc8e Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 20 Jan 2015 15:31:23 +0100 Subject: [PATCH] Add Alchemy region tracker; by Drake Arconis & Cinder Roxley --- indra/newview/CMakeLists.txt | 2 + indra/newview/alfloaterregiontracker.cpp | 282 ++++++++++++++++++ indra/newview/alfloaterregiontracker.h | 66 ++++ indra/newview/app_settings/commands.xml | 10 + indra/newview/llfloaterworldmap.cpp | 31 +- indra/newview/llfloaterworldmap.h | 2 + indra/newview/llviewerfloaterreg.cpp | 6 +- indra/newview/llworldmap.h | 4 + .../skins/default/textures/textures.xml | 1 + .../textures/toolbar_icons/regiontracker.png | Bin 0 -> 912 bytes .../default/xui/de/floater_world_map.xml | 5 +- .../default/xui/en/floater_region_tracker.xml | 92 ++++++ .../default/xui/en/floater_world_map.xml | 33 +- .../skins/default/xui/en/notifications.xml | 21 ++ .../newview/skins/default/xui/en/strings.xml | 2 + .../default/xui/es/floater_world_map.xml | 4 +- .../default/xui/fr/floater_world_map.xml | 6 +- .../default/xui/pt/floater_world_map.xml | 8 +- .../starlight/xui/en/floater_world_map.xml | 33 +- .../starlightcui/xui/en/floater_world_map.xml | 34 ++- 20 files changed, 598 insertions(+), 44 deletions(-) create mode 100644 indra/newview/alfloaterregiontracker.cpp create mode 100644 indra/newview/alfloaterregiontracker.h create mode 100644 indra/newview/skins/default/textures/toolbar_icons/regiontracker.png create mode 100644 indra/newview/skins/default/xui/en/floater_region_tracker.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index b172d0e301..8b5551ae5f 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -119,6 +119,7 @@ include_directories(SYSTEM set(viewer_SOURCE_FILES # + alfloaterregiontracker.cpp animationexplorer.cpp ao.cpp aoengine.cpp @@ -848,6 +849,7 @@ set(viewer_HEADER_FILES ViewerInstall.cmake # + alfloaterregiontracker.h animationexplorer.h ao.h aoengine.h diff --git a/indra/newview/alfloaterregiontracker.cpp b/indra/newview/alfloaterregiontracker.cpp new file mode 100644 index 0000000000..bd9bd47053 --- /dev/null +++ b/indra/newview/alfloaterregiontracker.cpp @@ -0,0 +1,282 @@ +/** +* @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" + +// newview +#include "llagent.h" +#include "llfloaterworldmap.h" +#include "llfloaterreg.h" +#include "llnotificationsutil.h" +#include "llviewermessage.h" +#include "llworldmap.h" +#include "llworldmapmessage.h" + +const std::string TRACKER_FILE = "tracked_regions.json"; + +ALFloaterRegionTracker::ALFloaterRegionTracker(const LLSD& key) + : LLFloater(key), + LLEventTimer(5.f), + mRefreshRegionListBtn(NULL), + mRemoveRegionBtn(NULL), + mOpenMapBtn(NULL), + mRegionScrollList(NULL) +{ + 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(); +} + +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()); + + 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() +{ + typedef std::vector item_t; + item_t items = mRegionScrollList->getAllSelected(); + for (item_t::const_iterator it = items.begin(); it != items.end(); ++it) + { + mRegionMap.erase((*it)->getValue().asString()); + } + mRegionScrollList->deleteSelectedItems(); + saveToJSON(); + updateHeader(); +} + +bool ALFloaterRegionTracker::saveToJSON() +{ + const std::string& filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, TRACKER_FILE); + llofstream out_file; + out_file.open(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(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 = LLFloaterWorldMap::getInstance(); + if (!region.empty() && worldmap_floaterp) + { + worldmap_floaterp->trackURL(region, 128, 128, 0); + LLFloaterReg::showInstance("world_map", "center"); + } +} diff --git a/indra/newview/alfloaterregiontracker.h b/indra/newview/alfloaterregiontracker.h new file mode 100644 index 0000000000..f2c27d3393 --- /dev/null +++ b/indra/newview/alfloaterregiontracker.h @@ -0,0 +1,66 @@ +/** +* @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 +{ + friend class LLFloaterReg; +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(); + +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/commands.xml b/indra/newview/app_settings/commands.xml index b111f19479..39f8f65317 100755 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -540,4 +540,14 @@ tooltip_ref="Command_ResyncAnimations_Tooltip" execute_function="Tools.ResyncAnimations" /> + diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 02146f5ee4..2716282b53 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -80,6 +80,7 @@ // [/RLVa:KB] #include "llsdutil.h" #include "llsdutil_math.h" +#include "alfloaterregiontracker.h" //--------------------------------------------------------------------------- // Constants @@ -316,7 +317,9 @@ LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key) 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)); - + // Alchemy region tracker + mCommitCallbackRegistrar.add("WMap.TrackRegion", boost::bind(&LLFloaterWorldMap::onTrackRegion, this)); + gSavedSettings.getControl("PreferredMaturity")->getSignal()->connect(boost::bind(&LLFloaterWorldMap::onChangeMaturity, this)); } @@ -602,6 +605,8 @@ void LLFloaterWorldMap::draw() copy_slurl_btn->setEnabled((mSLURL.isValid()) ); go_home_btn->setEnabled((!rlv_handler_t::isEnabled()) || !(gRlvHandler.hasBehaviour(RLV_BHVR_TPLM) && gRlvHandler.hasBehaviour(RLV_BHVR_TPLOC))); // Performance improvement + // Alchemy region tracker + getChild("track_region")->setEnabled((BOOL) tracking_status || LLWorldMap::getInstance()->isTracking()); setMouseOpaque(TRUE); getDragHandle()->setMouseOpaque(TRUE); @@ -1606,6 +1611,30 @@ void LLFloaterWorldMap::onCopySLURL() LLNotificationsUtil::add("CopySLURL", args); } +// Alchemy region tracker +void LLFloaterWorldMap::onTrackRegion() +{ + ALFloaterRegionTracker* floaterp = LLFloaterReg::getTypedInstance("region_tracker"); + 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 d104ac6004..784edc0640 100755 --- a/indra/newview/llfloaterworldmap.h +++ b/indra/newview/llfloaterworldmap.h @@ -151,6 +151,8 @@ protected: void onShowTargetBtn(); void onShowAgentBtn(); void onCopySLURL(); + // Alchemy region tracker + void onTrackRegion(); void centerOnTarget(BOOL animate); void updateLocation(); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 489ebb7c32..6d755e98c0 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -156,6 +156,7 @@ #include "rlvfloaters.h" // [/RLVa:KB] // ND: And for FS please put yours after this line, for easier merges too +#include "alfloaterregiontracker.h" #include "animationexplorer.h" #include "ao.h" #include "daeexport.h" @@ -434,8 +435,9 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add(PHOTOTOOLS_FLOATER, "floater_phototools.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("phototools_camera", "floater_phototools_camera.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("publish_classified_fs", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); - LLFloaterReg::add("quickprefs", "floater_quickprefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); - LLFloaterReg::add("search_replace", "floater_search_replace.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("quickprefs", "floater_quickprefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("region_tracker", "floater_region_tracker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("search_replace", "floater_search_replace.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("secondary_inventory", "floater_my_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("script_recover", "floater_script_recover.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("sound_explorer", "floater_NACL_explore_sounds.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h index 993281a36a..69ea08636e 100755 --- a/indra/newview/llworldmap.h +++ b/indra/newview/llworldmap.h @@ -126,6 +126,10 @@ public: std::string getName() const { return mName; } const std::string getFlagsString() const { return LLViewerRegion::regionFlagsToString(mRegionFlags); } const std::string getAccessString() const { return LLViewerRegion::accessToString((U8)mAccess); } + // Alchemy region tracker + const std::string getShortAccessString() const { return LLViewerRegion::accessToShortString(static_cast(mAccess)); } + const std::string getAccessIcon() const { return LLViewerRegion::getAccessIcon(static_cast(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/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index c99aab4f41..f386e09554 100755 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -160,6 +160,7 @@ with the same filename but different name + diff --git a/indra/newview/skins/default/textures/toolbar_icons/regiontracker.png b/indra/newview/skins/default/textures/toolbar_icons/regiontracker.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/xui/de/floater_world_map.xml b/indra/newview/skins/default/xui/de/floater_world_map.xml index ed66ca9024..7b1cdbcfeb 100755 --- a/indra/newview/skins/default/xui/de/floater_world_map.xml +++ b/indra/newview/skins/default/xui/de/floater_world_map.xml @@ -80,9 +80,10 @@ Standort: @@ -683,40 +683,53 @@ height="23" label="Copy SLurl" layout="topleft" - left_pad="4" + left_pad="3" name="copy_slurl" tool_tip="Copies current location as SLurl to be used on the web." top_delta="0" - width="123"> + width="82"> + diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index a867d8c4c7..5a23c9f9ed 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -12045,4 +12045,25 @@ Flickr verification failed. Please try again, and be sure to double check the ve Your snapshot can now be viewed [http://www.flickr.com/photos/upload/edit/?ids=[ID] here]. + + +What label would you like to use for +the region "[REGION]"? + confirm +
+ [LABEL] +
@@ -684,40 +684,53 @@ height="23" label="Copy SLurl" layout="topleft" - left_pad="4" + left_pad="3" name="copy_slurl" tool_tip="Copies current location as SLurl to be used on the web." top_delta="0" - width="123"> + width="82"> + diff --git a/indra/newview/skins/starlightcui/xui/en/floater_world_map.xml b/indra/newview/skins/starlightcui/xui/en/floater_world_map.xml index bdc3fb9279..eb4398f770 100644 --- a/indra/newview/skins/starlightcui/xui/en/floater_world_map.xml +++ b/indra/newview/skins/starlightcui/xui/en/floater_world_map.xml @@ -679,7 +679,7 @@ name="Teleport" tool_tip="Teleport to selected location" top_pad="8" - width="123"> + width="81"> @@ -688,41 +688,53 @@ height="23" label="Copy SLurl" layout="topleft" - left_pad="4" + left_pad="3" name="copy_slurl" tool_tip="Copies current location as SLurl to be used on the web." top_delta="0" - width="123"> + width="82"> - +