diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index fa92201096..607da82828 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -1349,6 +1349,26 @@ std::string LLUrlEntrySL::getLabel(const std::string &url, const LLUrlLabelCallb return unescapeUrl(url); } +// FS Help SLUrl +/// +/// FSHelpDebugUrlEntrySL Describes a Firestorm Help SLURL, e.g. +/// secondlife://app/fshelp/showdebug/DisplayIM +/// +FSHelpDebugUrlEntrySL::FSHelpDebugUrlEntrySL() +{ + mPattern = boost::regex("(hop|secondlife|inworldz|iw):///app/fshelp/showdebug/\\S+", + boost::regex::perl|boost::regex::icase); + mMenuName = "menu_url_slapp.xml"; + mTooltip = LLTrans::getString("TooltipFSHelpDebugSLUrl"); +} + +std::string FSHelpDebugUrlEntrySL::getLabel(const std::string &url, const LLUrlLabelCallback &cb) +{ + std::string::size_type pos = url.find("showdebug/") + 10; + return url.substr(pos); +} +// + // // LLUrlEntrySLLabel Describes a generic SLURL, e.g., a Url that starts /// with secondlife:// with the ability to specify a custom label. diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index 1d2506e005..7d0af09dbd 100644 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -490,6 +490,19 @@ public: /*virtual*/ std::string getLocation(const std::string &url) const; }; +// FS Help SLUrl +/// +/// FSHelpDebugUrlEntrySL Describes a Firestorm Help SLURL, e.g. +/// secondlife://app/fshelp/showdebug/DisplayIM +/// +class FSHelpDebugUrlEntrySL : public LLUrlEntryBase +{ +public: + FSHelpDebugUrlEntrySL(); + /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); +}; +// + /// /// LLUrlEntrySL Describes a generic SLURL, e.g., a Url that starts /// with secondlife:// (used as a catch-all for cases not matched above) diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 595f5b5b9d..5b77384509 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -82,6 +82,7 @@ LLUrlRegistry::LLUrlRegistry() registerUrl(new LLUrlEntryPlace()); registerUrl(new LLUrlEntryInventory()); registerUrl(new LLUrlEntryExperienceProfile()); + registerUrl(new FSHelpDebugUrlEntrySL()); // FS Help SLUrl //LLUrlEntrySL and LLUrlEntrySLLabel have more common pattern, //so it should be registered in the end of list registerUrl(new LLUrlEntrySL()); diff --git a/indra/newview/fsslurlcommand.cpp b/indra/newview/fsslurlcommand.cpp index b9ebd68d19..d0307b98d8 100644 --- a/indra/newview/fsslurlcommand.cpp +++ b/indra/newview/fsslurlcommand.cpp @@ -30,6 +30,7 @@ #include "llagent.h" #include "llavataractions.h" #include "llcommandhandler.h" +#include "llfloatersettingsdebug.h" #include "lllogchat.h" #include "llnotificationsutil.h" @@ -140,3 +141,30 @@ public: // Creating the object registers with the dispatcher. FSSlurlCommandHandler gFSSlurlHandler; + +class FSHelpSlurlCommandHandler : public LLCommandHandler +{ +public: + // not allowed from outside the app + FSHelpSlurlCommandHandler() : LLCommandHandler("fshelp", UNTRUSTED_THROTTLE) { } + + bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) + { + if (params.size() < 2) + { + return false; + } + + if (params[0].asString() == "showdebug") + { + std::string setting_name = params[1].asString(); + LLFloaterSettingsDebug::showControl(setting_name); + return true; + } + + return false; + } +}; + +// Creating the object registers with the dispatcher. +FSHelpSlurlCommandHandler gFSHelpSlurlCommandHandler; diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp index 86352ebc73..88f47371f4 100644 --- a/indra/newview/llfloatersettingsdebug.cpp +++ b/indra/newview/llfloatersettingsdebug.cpp @@ -49,6 +49,7 @@ // [/RLVa:KB] #include "llnotificationsutil.h" #include "llwindow.h" +#include "llfloaterreg.h" LLFloaterSettingsDebug::LLFloaterSettingsDebug(const LLSD& key) : LLFloater(key) @@ -598,3 +599,10 @@ void LLFloaterSettingsDebug::updateControl() } } } + +void LLFloaterSettingsDebug::showControl(const std::string& control) +{ + LLFloaterSettingsDebug* instance = LLFloaterReg::showTypedInstance("settings_debug", "all", TRUE); + instance->mSearchSettingsInput->setText(control); + instance->onUpdateFilter(); +} diff --git a/indra/newview/llfloatersettingsdebug.h b/indra/newview/llfloatersettingsdebug.h index 03b168e1f7..1c0c3ed3bf 100644 --- a/indra/newview/llfloatersettingsdebug.h +++ b/indra/newview/llfloatersettingsdebug.h @@ -60,6 +60,7 @@ public: void onClickDefault(); void onCopyToClipboard(); void onSanityCheck(); + static void showControl(const std::string& control); private: // key - selects which settings to show, one of: diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index 33b9967ea9..22924b631b 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -697,6 +697,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden. Anklicken, um Befehl secondlife:// auszuführen + + Anklicken, um das Fenster mit Debug-Einstellungen für diese Einstellung zu öffnen + Klicken, um eine E-Mail zu verfassen diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 6818fb56cc..7327a0abc1 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -339,6 +339,7 @@ Please try logging in again in a minute. Click to view this object's description Click to view this location on a map Click to run the secondlife:// command + Click to open the debug settings window for this setting Click to compose an email