merge changes for storm-987
commit
af3f0f49d7
2
.hgtags
2
.hgtags
|
|
@ -82,3 +82,5 @@ f1827b441e05bf37c68e2c15ebc6d09e9b03f527 2.6.0-start
|
|||
9283d6d1d7eb71dfe4c330e7c9144857e7356bde 2.6.0-beta1
|
||||
9283d6d1d7eb71dfe4c330e7c9144857e7356bde DRTVWR-40_2.6.0-beta1
|
||||
c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
|
||||
9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
|
||||
|
|
|
|||
|
|
@ -793,21 +793,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
|
|||
if ( chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mFromID.notNull())
|
||||
{
|
||||
// for object IMs, create a secondlife:///app/objectim SLapp
|
||||
std::string url = LLSLURL("objectim", chat.mFromID, "").getSLURLString();
|
||||
url += "?name=" + chat.mFromName;
|
||||
url += "&owner=" + chat.mOwnerID.asString();
|
||||
|
||||
std::string slurl = args["slurl"].asString();
|
||||
if (slurl.empty())
|
||||
{
|
||||
LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent);
|
||||
if(region)
|
||||
{
|
||||
LLSLURL region_slurl(region->getName(), chat.mPosAgent);
|
||||
slurl = region_slurl.getLocationString();
|
||||
}
|
||||
}
|
||||
url += "&slurl=" + LLURI::escape(slurl);
|
||||
std::string url = LLViewerChat::getSenderSLURL(chat, args);
|
||||
|
||||
// set the link for the object name to be the objectim SLapp
|
||||
// (don't let object names with hyperlinks override our objectim Url)
|
||||
|
|
|
|||
|
|
@ -213,17 +213,6 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
|
|||
{
|
||||
LLStyle::Params style_params_name;
|
||||
|
||||
std::string href;
|
||||
|
||||
if (mSourceType == CHAT_SOURCE_AGENT)
|
||||
{
|
||||
href = LLSLURL("agent", mFromID, "about").getSLURLString();
|
||||
}
|
||||
else
|
||||
{
|
||||
href = LLSLURL("object", mFromID, "inspect").getSLURLString();
|
||||
}
|
||||
|
||||
LLColor4 user_name_color = LLUIColorTable::instance().getColor("HTMLLinkColor");
|
||||
style_params_name.color(user_name_color);
|
||||
|
||||
|
|
@ -232,7 +221,7 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
|
|||
style_params_name.font.name(font_name);
|
||||
style_params_name.font.size(font_style_size);
|
||||
|
||||
style_params_name.link_href = href;
|
||||
style_params_name.link_href = notification["sender_slurl"].asString();
|
||||
style_params_name.is_link = true;
|
||||
|
||||
msg_text->appendText(str_sender, FALSE, style_params_name);
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
#include "llexternaleditor.h"
|
||||
|
||||
#include "lltrans.h"
|
||||
#include "llui.h"
|
||||
|
||||
// static
|
||||
|
|
@ -35,13 +36,13 @@ const std::string LLExternalEditor::sFilenameMarker = "%s";
|
|||
// static
|
||||
const std::string LLExternalEditor::sSetting = "ExternalEditor";
|
||||
|
||||
bool LLExternalEditor::setCommand(const std::string& env_var, const std::string& override)
|
||||
LLExternalEditor::EErrorCode LLExternalEditor::setCommand(const std::string& env_var, const std::string& override)
|
||||
{
|
||||
std::string cmd = findCommand(env_var, override);
|
||||
if (cmd.empty())
|
||||
{
|
||||
llwarns << "Empty editor command" << llendl;
|
||||
return false;
|
||||
llwarns << "Editor command is empty or not set" << llendl;
|
||||
return EC_NOT_SPECIFIED;
|
||||
}
|
||||
|
||||
// Add the filename marker if missing.
|
||||
|
|
@ -55,7 +56,7 @@ bool LLExternalEditor::setCommand(const std::string& env_var, const std::string&
|
|||
if (tokenize(tokens, cmd) < 2) // 2 = bin + at least one arg (%s)
|
||||
{
|
||||
llwarns << "Error parsing editor command" << llendl;
|
||||
return false;
|
||||
return EC_PARSE_ERROR;
|
||||
}
|
||||
|
||||
// Check executable for existence.
|
||||
|
|
@ -63,7 +64,7 @@ bool LLExternalEditor::setCommand(const std::string& env_var, const std::string&
|
|||
if (!LLFile::isfile(bin_path))
|
||||
{
|
||||
llwarns << "Editor binary [" << bin_path << "] not found" << llendl;
|
||||
return false;
|
||||
return EC_BINARY_NOT_FOUND;
|
||||
}
|
||||
|
||||
// Save command.
|
||||
|
|
@ -76,16 +77,16 @@ bool LLExternalEditor::setCommand(const std::string& env_var, const std::string&
|
|||
}
|
||||
llinfos << "Setting command [" << bin_path << " " << mArgs << "]" << llendl;
|
||||
|
||||
return true;
|
||||
return EC_SUCCESS;
|
||||
}
|
||||
|
||||
bool LLExternalEditor::run(const std::string& file_path)
|
||||
LLExternalEditor::EErrorCode LLExternalEditor::run(const std::string& file_path)
|
||||
{
|
||||
std::string args = mArgs;
|
||||
if (mProcess.getExecutable().empty() || args.empty())
|
||||
{
|
||||
llwarns << "Editor command not set" << llendl;
|
||||
return false;
|
||||
return EC_NOT_SPECIFIED;
|
||||
}
|
||||
|
||||
// Substitute the filename marker in the command with the actual passed file name.
|
||||
|
|
@ -111,7 +112,22 @@ bool LLExternalEditor::run(const std::string& file_path)
|
|||
mProcess.orphan();
|
||||
}
|
||||
|
||||
return result == 0;
|
||||
return result == 0 ? EC_SUCCESS : EC_FAILED_TO_RUN;
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLExternalEditor::getErrorMessage(EErrorCode code)
|
||||
{
|
||||
switch (code)
|
||||
{
|
||||
case EC_SUCCESS: return LLTrans::getString("ok");
|
||||
case EC_NOT_SPECIFIED: return LLTrans::getString("ExternalEditorNotSet");
|
||||
case EC_PARSE_ERROR: return LLTrans::getString("ExternalEditorCommandParseError");
|
||||
case EC_BINARY_NOT_FOUND: return LLTrans::getString("ExternalEditorNotFound");
|
||||
case EC_FAILED_TO_RUN: return LLTrans::getString("ExternalEditorFailedToRun");
|
||||
}
|
||||
|
||||
return LLTrans::getString("Unknown");
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
|||
|
|
@ -42,6 +42,14 @@ class LLExternalEditor
|
|||
|
||||
public:
|
||||
|
||||
typedef enum e_error_code {
|
||||
EC_SUCCESS, /// No error.
|
||||
EC_NOT_SPECIFIED, /// Editor path not specified.
|
||||
EC_PARSE_ERROR, /// Editor command parsing error.
|
||||
EC_BINARY_NOT_FOUND, /// Could find the editor binary (missing or not quoted).
|
||||
EC_FAILED_TO_RUN, /// Could not execute the editor binary.
|
||||
} EErrorCode;
|
||||
|
||||
/**
|
||||
* Set editor command.
|
||||
*
|
||||
|
|
@ -51,19 +59,25 @@ public:
|
|||
* First tries the override, then a predefined setting (sSetting),
|
||||
* then the environment variable.
|
||||
*
|
||||
* @return Command if found, empty string otherwise.
|
||||
* @return EC_SUCCESS if command is valid and refers to an existing executable,
|
||||
* EC_NOT_SPECIFIED or EC_FAILED_TO_RUNan on error.
|
||||
*
|
||||
* @see sSetting
|
||||
*/
|
||||
bool setCommand(const std::string& env_var, const std::string& override = LLStringUtil::null);
|
||||
EErrorCode setCommand(const std::string& env_var, const std::string& override = LLStringUtil::null);
|
||||
|
||||
/**
|
||||
* Run the editor with the given file.
|
||||
*
|
||||
* @param file_path File to edit.
|
||||
* @return true on success, false on error.
|
||||
* @return EC_SUCCESS on success, error code on error.
|
||||
*/
|
||||
bool run(const std::string& file_path);
|
||||
EErrorCode run(const std::string& file_path);
|
||||
|
||||
/**
|
||||
* Get a meaningful error message for the given status code.
|
||||
*/
|
||||
static std::string getErrorMessage(EErrorCode code);
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
|
|||
have_extended_data = true;
|
||||
msg->getU32("DataExtended", "TimeStamp", time_stamp, block);
|
||||
msg->getF32("DataExtended", "MonoScore", mono_score, block);
|
||||
msg->getS32(_PREHASH_ReportData,"PublicURLs",public_urls,block);
|
||||
msg->getS32("DataExtended", "PublicURLs", public_urls, block);
|
||||
}
|
||||
|
||||
LLSD element;
|
||||
|
|
|
|||
|
|
@ -1037,18 +1037,29 @@ void LLFloaterUIPreview::onClickEditFloater()
|
|||
cmd_override = bin + " " + args;
|
||||
}
|
||||
}
|
||||
if (!mExternalEditor.setCommand("LL_XUI_EDITOR", cmd_override))
|
||||
|
||||
LLExternalEditor::EErrorCode status = mExternalEditor.setCommand("LL_XUI_EDITOR", cmd_override);
|
||||
if (status != LLExternalEditor::EC_SUCCESS)
|
||||
{
|
||||
std::string warning = "Select an editor by setting the environment variable LL_XUI_EDITOR "
|
||||
"or the ExternalEditor setting or specifying its path in the \"Editor Path\" field.";
|
||||
std::string warning;
|
||||
|
||||
if (status == LLExternalEditor::EC_NOT_SPECIFIED) // Use custom message for this error.
|
||||
{
|
||||
warning = getString("ExternalEditorNotSet");
|
||||
}
|
||||
else
|
||||
{
|
||||
warning = LLExternalEditor::getErrorMessage(status);
|
||||
}
|
||||
|
||||
popupAndPrintWarning(warning);
|
||||
return;
|
||||
}
|
||||
|
||||
// Run the editor.
|
||||
if (!mExternalEditor.run(file_path))
|
||||
if (mExternalEditor.run(file_path) != LLExternalEditor::EC_SUCCESS)
|
||||
{
|
||||
popupAndPrintWarning("Failed to run editor");
|
||||
popupAndPrintWarning(LLExternalEditor::getErrorMessage(status));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -558,6 +558,7 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
|
|||
}
|
||||
*/
|
||||
|
||||
// Add a nearby chat toast.
|
||||
LLUUID id;
|
||||
id.generate();
|
||||
|
||||
|
|
@ -583,6 +584,10 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
|
|||
notification["text_color"] = r_color_name;
|
||||
notification["color_alpha"] = r_color_alpha;
|
||||
notification["font_size"] = (S32)LLViewerChat::getChatFontSize() ;
|
||||
|
||||
// Pass sender info so that it can be rendered properly (STORM-1021).
|
||||
notification["sender_slurl"] = LLViewerChat::getSenderSLURL(chat_msg, args);
|
||||
|
||||
channel->addNotification(notification);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -956,16 +956,31 @@ void LLScriptEdCore::openInExternalEditor()
|
|||
// Open it in external editor.
|
||||
{
|
||||
LLExternalEditor ed;
|
||||
LLExternalEditor::EErrorCode status;
|
||||
std::string msg;
|
||||
|
||||
if (!ed.setCommand("LL_SCRIPT_EDITOR"))
|
||||
status = ed.setCommand("LL_SCRIPT_EDITOR");
|
||||
if (status != LLExternalEditor::EC_SUCCESS)
|
||||
{
|
||||
std::string msg = "Select an editor by setting the environment variable LL_SCRIPT_EDITOR "
|
||||
"or the ExternalEditor setting"; // *TODO: localize
|
||||
if (status == LLExternalEditor::EC_NOT_SPECIFIED) // Use custom message for this error.
|
||||
{
|
||||
msg = getString("external_editor_not_set");
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = LLExternalEditor::getErrorMessage(status);
|
||||
}
|
||||
|
||||
LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg));
|
||||
return;
|
||||
}
|
||||
|
||||
ed.run(filename);
|
||||
status = ed.run(filename);
|
||||
if (status != LLExternalEditor::EC_SUCCESS)
|
||||
{
|
||||
msg = LLExternalEditor::getErrorMessage(status);
|
||||
LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@
|
|||
#include "llagent.h" // gAgent
|
||||
#include "lluicolortable.h"
|
||||
#include "llviewercontrol.h" // gSavedSettings
|
||||
#include "llviewerregion.h"
|
||||
#include "llworld.h"
|
||||
#include "llinstantmessage.h" //SYSTEM_FROM
|
||||
|
||||
// LLViewerChat
|
||||
|
|
@ -214,3 +216,43 @@ void LLViewerChat::formatChatMsg(const LLChat& chat, std::string& formated_msg)
|
|||
|
||||
}
|
||||
|
||||
//static
|
||||
std::string LLViewerChat::getSenderSLURL(const LLChat& chat, const LLSD& args)
|
||||
{
|
||||
switch (chat.mSourceType)
|
||||
{
|
||||
case CHAT_SOURCE_AGENT:
|
||||
return LLSLURL("agent", chat.mFromID, "about").getSLURLString();
|
||||
|
||||
case CHAT_SOURCE_OBJECT:
|
||||
return getObjectImSLURL(chat, args);
|
||||
|
||||
default:
|
||||
llwarns << "Getting SLURL for an unsupported sender type: " << chat.mSourceType << llendl;
|
||||
}
|
||||
|
||||
return LLStringUtil::null;
|
||||
}
|
||||
|
||||
//static
|
||||
std::string LLViewerChat::getObjectImSLURL(const LLChat& chat, const LLSD& args)
|
||||
{
|
||||
std::string url = LLSLURL("objectim", chat.mFromID, "").getSLURLString();
|
||||
url += "?name=" + chat.mFromName;
|
||||
url += "&owner=" + chat.mOwnerID.asString();
|
||||
|
||||
std::string slurl = args["slurl"].asString();
|
||||
if (slurl.empty())
|
||||
{
|
||||
LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent);
|
||||
if(region)
|
||||
{
|
||||
LLSLURL region_slurl(region->getName(), chat.mPosAgent);
|
||||
slurl = region_slurl.getLocationString();
|
||||
}
|
||||
}
|
||||
|
||||
url += "&slurl=" + LLURI::escape(slurl);
|
||||
|
||||
return url;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@ public:
|
|||
static LLFontGL* getChatFont();
|
||||
static S32 getChatFontSize();
|
||||
static void formatChatMsg(const LLChat& chat, std::string& formated_msg);
|
||||
static std::string getSenderSLURL(const LLChat& chat, const LLSD& args);
|
||||
|
||||
private:
|
||||
static std::string getObjectImSLURL(const LLChat& chat, const LLSD& args);
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,10 @@
|
|||
title="XUI PREVIEW TOOL"
|
||||
translate="false"
|
||||
width="750">
|
||||
<string name="ExternalEditorNotSet">
|
||||
Select an editor by setting the environment variable LL_XUI_EDITOR
|
||||
or the ExternalEditor setting
|
||||
or specifying its path in the "Editor Path" field.</string>
|
||||
<panel
|
||||
bottom="640"
|
||||
follows="left|top|right|bottom"
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ name="Stand Up">
|
|||
function="Self.EnableStandUp" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Change Outfit"
|
||||
label="My Appearance"
|
||||
name="Change Outfit">
|
||||
<menu_item_call.on_click
|
||||
function="CustomizeAvatar" />
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@
|
|||
</menu_item_call>
|
||||
</context_menu>
|
||||
<menu_item_call
|
||||
label="Change Outfit"
|
||||
label="My Appearance"
|
||||
layout="topleft"
|
||||
name="Chenge Outfit">
|
||||
<menu_item_call.on_click
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
parameter="agent" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Change Outfit"
|
||||
label="My Appearance"
|
||||
name="ChangeOutfit">
|
||||
<menu_item_call.on_click
|
||||
function="CustomizeAvatar" />
|
||||
|
|
|
|||
|
|
@ -819,22 +819,6 @@ You need to enter either the Username or both the First and Last name of your av
|
|||
</notification>
|
||||
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="AddClassified"
|
||||
type="alertmodal">
|
||||
Classified ads appear in the 'Classified' section of the Search directory and on [http://secondlife.com/community/classifieds secondlife.com] for one week.
|
||||
Fill out your ad, then click 'Publish...' to add it to the directory.
|
||||
You'll be asked for a price to pay when clicking Publish.
|
||||
Paying more makes your ad appear higher in the list, and also appear higher when people search for keywords.
|
||||
<tag>confirm</tag>
|
||||
<usetemplate
|
||||
ignoretext="How to create a new Classified ad"
|
||||
name="okcancelignore"
|
||||
notext="Cancel"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="DeleteClassified"
|
||||
|
|
|
|||
|
|
@ -28,6 +28,10 @@
|
|||
name="Title">
|
||||
Script: [NAME]
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="external_editor_not_set">
|
||||
Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting.
|
||||
</panel.string>
|
||||
<menu_bar
|
||||
bg_visible="false"
|
||||
follows="left|top"
|
||||
|
|
|
|||
|
|
@ -3310,6 +3310,14 @@ Abuse Report</string>
|
|||
<string name="DeleteItem">Delete selected item?</string>
|
||||
|
||||
<string name="EmptyOutfitText">There are no items in this outfit</string>
|
||||
|
||||
<!-- External editor status codes -->
|
||||
<string name="ExternalEditorNotSet">Select an editor using the ExternalEditor setting.</string>
|
||||
<string name="ExternalEditorNotFound">Cannot find the external editor you specified.
|
||||
Try enclosing path to the editor with double quotes.
|
||||
(e.g. "/path to my/editor" "%s")</string>
|
||||
<string name="ExternalEditorCommandParseError">Error parsing the external editor command.</string>
|
||||
<string name="ExternalEditorFailedToRun">External editor failed to run.</string>
|
||||
|
||||
<!-- Key names begin -->
|
||||
<string name="Esc">Esc</string>
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@
|
|||
min_height="360"
|
||||
left="645"
|
||||
top="10"
|
||||
min_width="300"
|
||||
min_width="345"
|
||||
name="floater_help_browser"
|
||||
save_rect="true"
|
||||
single_instance="true"
|
||||
title="HOW TO"
|
||||
width="300">
|
||||
width="335">
|
||||
<floater.string
|
||||
name="loading_text">
|
||||
Loading...
|
||||
|
|
@ -29,14 +29,14 @@
|
|||
orientation="vertical"
|
||||
name="stack1"
|
||||
top="20"
|
||||
width="290">
|
||||
width="325">
|
||||
<layout_panel
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_delta="0"
|
||||
name="external_controls"
|
||||
user_resize="false"
|
||||
width="280">
|
||||
width="325">
|
||||
<web_browser
|
||||
trusted_content="true"
|
||||
bottom="-5"
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
name="browser"
|
||||
top="0"
|
||||
height="300"
|
||||
width="280" />
|
||||
width="325" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
</floater>
|
||||
|
|
|
|||
Loading…
Reference in New Issue