diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml index 0fbf3b24a641cbcdab7bf9816bbc942aa4ddaf83..92cf017d4d7edec26c50046bb138f9ffd113362b 100644 --- a/indra/newview/app_settings/settings_alchemy.xml +++ b/indra/newview/app_settings/settings_alchemy.xml @@ -2490,5 +2490,19 @@ <key>Value</key> <string>All</string> </map> + <key>ShowAdvancedHoverTips</key> + <map> + <key>Comment</key> + <string> + Toggles more hover tips details. + </string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> </map> -</llsd> \ No newline at end of file +</llsd> + diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index f69e2c8165577f9c3b4d12e2bf07c6007e55d5b5..1b5d491174a0bf0de3b6c3ecfad4cf454fc36717 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -76,6 +76,8 @@ #include "rlvhandler.h" // [/RLVa:KB] #include "alcinematicmode.h" +#include "llviewerregion.h" +#include "llmeshrepository.h" extern BOOL gDebugClicks; @@ -1311,7 +1313,50 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l } } + if (gSavedSettings.getBool("ShowAdvancedHoverTips")) + { + LLStringUtil::format_map_t args; + // Get Position + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + LLVector3 objectPosition = region->getPosRegionFromGlobal(hover_object->getPositionGlobal()); + if (!RlvActions::isRlvEnabled() || RlvActions::canShowLocation()) + { + //Check if we are in the same region, otherwise it shows large negitive position numbers. + if (hover_object->getRegion() && gAgent.getRegion() && hover_object->getRegion()->getRegionID() == gAgent.getRegion()->getRegionID()) + { + args["OBJECT_POSITION"] = + llformat("<%.02f, %.02f, %.02f>", objectPosition.mV[VX], objectPosition.mV[VY], objectPosition.mV[VZ]); + tooltip_msg.append("\n" + LLTrans::getString("TooltipPosition", args)); + } + } + + // Get Distance + F32 distance = (objectPosition - region->getPosRegionFromGlobal(gAgent.getPositionGlobal())).magVec(); + args["OBJECT_DISTANCE"] = llformat("%.02f", distance); + tooltip_msg.append("\n" + LLTrans::getString("TooltipDistance", args)); + } + + // Get Prim Count + args["PRIM_COUNT"] = llformat("%d", LLSelectMgr::getInstance()->getHoverObjects()->getObjectCount()); + tooltip_msg.append("\n" + LLTrans::getString("TooltipPrimCount", args)); + // Get Prim Land Impact + if (gMeshRepo.meshRezEnabled()) + { + S32 cost = LLSelectMgr::getInstance()->getHoverObjects()->getSelectedLinksetCost(); + if (cost > 0) + { + args["PRIM_COST"] = llformat("%d", cost); + tooltip_msg.append("\n" + LLTrans::getString("TooltipPrimCost", args)); + } + else + { + tooltip_msg.append("\n" + LLTrans::getString("TooltipPrimCostLoading")); + } + } + } // Avoid showing tip over media that's displaying unless it's for sale // also check the primary node since sometimes it can have an action even though // the root node doesn't diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 78d3e4d4a8d6ef32b567bf56dc3de8bd687d8a3f..48ae4619ee3fbb0781ea8779919e28a708d52f76 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -4560,4 +4560,19 @@ and report the problem. name="Permanent"> Permanent </string> + <string name="TooltipPrimCount"> + Prims: [PRIM_COUNT] + </string> + <string name="TooltipPrimCost"> + Land Impact: [PRIM_COST] + </string> + <string name="TooltipPrimCostLoading"> + Loading Land Impact... + </string> + <string name="TooltipPosition"> + Position: [OBJECT_POSITION] + </string> + <string name="TooltipDistance"> + Distance: [OBJECT_DISTANCE] + </string> </strings>