diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llchathistory.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llchatitemscontainerctrl.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llexternaleditor.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/llexternaleditor.h | 22 | ||||
| -rw-r--r-- | indra/newview/llfloatertopobjects.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llfloateruipreview.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llnearbychathandler.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llpreviewscript.cpp | 23 | ||||
| -rw-r--r-- | indra/newview/llviewerchat.cpp | 42 | ||||
| -rw-r--r-- | indra/newview/llviewerchat.h | 4 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_ui_preview.xml | 4 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_attachment_self.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_avatar_self.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 16 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_script_ed.xml | 4 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 8 | ||||
| -rw-r--r-- | indra/newview/skins/minimal/xui/en/floater_help_browser.xml | 10 | 
18 files changed, 156 insertions, 74 deletions
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index d4ec377e03..c0c9ea1451 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -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) diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index 899e0431e7..8584885bc9 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -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); diff --git a/indra/newview/llexternaleditor.cpp b/indra/newview/llexternaleditor.cpp index 54968841ab..ed1d7e860a 100644 --- a/indra/newview/llexternaleditor.cpp +++ b/indra/newview/llexternaleditor.cpp @@ -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 diff --git a/indra/newview/llexternaleditor.h b/indra/newview/llexternaleditor.h index 6ea210d5e2..ef5db56c6e 100644 --- a/indra/newview/llexternaleditor.h +++ b/indra/newview/llexternaleditor.h @@ -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. +	 */ +	EErrorCode run(const std::string& file_path); + +	/** +	 * Get a meaningful error message for the given status code.  	 */ -	bool run(const std::string& file_path); +	static std::string getErrorMessage(EErrorCode code);  private: diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index 2aaf403d5f..19f6038b56 100644 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -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; diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index 11b3379814..0d8601410a 100644 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -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;  	}  } diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index de5439e4e0..0d9daeb44e 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -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);	  	} diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 22ff362b5a..b19bf5d234 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -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)); +		}  	}  } diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp index 0af850a46b..286b16bab2 100644 --- a/indra/newview/llviewerchat.cpp +++ b/indra/newview/llviewerchat.cpp @@ -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; +} diff --git a/indra/newview/llviewerchat.h b/indra/newview/llviewerchat.h index a9f9a98960..0f15d29f04 100644 --- a/indra/newview/llviewerchat.h +++ b/indra/newview/llviewerchat.h @@ -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);  }; diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml index 12c4561753..3921cfcd2c 100644 --- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml @@ -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" diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml index 84e81397be..b8128da358 100644 --- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml @@ -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" /> diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml index 2afa29ec10..d727294cc8 100644 --- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml @@ -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 diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 3ab21914c0..934cae93db 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -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" /> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 6ecaef1bf3..ba13479860 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -821,22 +821,6 @@ You need to enter either the Username or both the First and Last name of your av    <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"     type="alertmodal">  Delete classified '[NAME]'? diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 627b12cfe1..8d42024386 100644 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -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" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index d0625d9755..14ea43a8f8 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -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> diff --git a/indra/newview/skins/minimal/xui/en/floater_help_browser.xml b/indra/newview/skins/minimal/xui/en/floater_help_browser.xml index eddfe41c25..cc551f7d58 100644 --- a/indra/newview/skins/minimal/xui/en/floater_help_browser.xml +++ b/indra/newview/skins/minimal/xui/en/floater_help_browser.xml @@ -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>  | 
