diff options
Diffstat (limited to 'indra')
98 files changed, 3201 insertions, 1161 deletions
| diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index 3b39aeb56b..5d08c1f4c6 100644 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -295,7 +295,6 @@ public:  	void	setAllowTerraform(BOOL b){setParcelFlag(PF_ALLOW_TERRAFORM, b); }  	void	setAllowDamage(BOOL b)	{ setParcelFlag(PF_ALLOW_DAMAGE, b); }  	void	setAllowFly(BOOL b)		{ setParcelFlag(PF_ALLOW_FLY, b); } -	void	setAllowLandmark(BOOL b){ setParcelFlag(PF_ALLOW_LANDMARK, b); }  	void	setAllowGroupScripts(BOOL b)	{ setParcelFlag(PF_ALLOW_GROUP_SCRIPTS, b); }  	void	setAllowOtherScripts(BOOL b)	{ setParcelFlag(PF_ALLOW_OTHER_SCRIPTS, b); }  	void	setAllowDeedToGroup(BOOL b) { setParcelFlag(PF_ALLOW_DEED_TO_GROUP, b); } @@ -476,11 +475,6 @@ public:  	BOOL	getAllowFly() const  					{ return (mParcelFlags & PF_ALLOW_FLY) ? TRUE : FALSE; } -	// Remove permission restrictions for creating landmarks. -	// We should eventually remove this flag completely. -	BOOL	getAllowLandmark() const -					{ return TRUE; } -  	BOOL	getAllowGroupScripts() const  					{ return (mParcelFlags & PF_ALLOW_GROUP_SCRIPTS) ? TRUE : FALSE; } diff --git a/indra/llinventory/llparcelflags.h b/indra/llinventory/llparcelflags.h index 25b27a281a..4cffa83cc1 100644 --- a/indra/llinventory/llparcelflags.h +++ b/indra/llinventory/llparcelflags.h @@ -33,7 +33,7 @@ const U32 PF_ALLOW_FLY			= 1 << 0;// Can start flying  const U32 PF_ALLOW_OTHER_SCRIPTS= 1 << 1;// Scripts by others can run.  const U32 PF_FOR_SALE			= 1 << 2;// Can buy this land  const U32 PF_FOR_SALE_OBJECTS	= 1 << 7;// Can buy all objects on this land -const U32 PF_ALLOW_LANDMARK		= 1 << 3; +const U32 PF_ALLOW_LANDMARK		= 1 << 3;// Always true/deprecated  const U32 PF_ALLOW_TERRAFORM	= 1 << 4;  const U32 PF_ALLOW_DAMAGE		= 1 << 5;  const U32 PF_CREATE_OBJECTS		= 1 << 6; diff --git a/indra/llui/llchat.h b/indra/llui/llchat.h index f5b242fdfc..c39e44200c 100644 --- a/indra/llui/llchat.h +++ b/indra/llui/llchat.h @@ -37,7 +37,8 @@ typedef enum e_chat_source_type  	CHAT_SOURCE_SYSTEM = 0,  	CHAT_SOURCE_AGENT = 1,  	CHAT_SOURCE_OBJECT = 2, -	CHAT_SOURCE_UNKNOWN = 3 +	CHAT_SOURCE_TELEPORT = 3, +	CHAT_SOURCE_UNKNOWN = 4  } EChatSourceType;  typedef enum e_chat_type @@ -64,7 +65,8 @@ typedef enum e_chat_style  {  	CHAT_STYLE_NORMAL,  	CHAT_STYLE_IRC, -	CHAT_STYLE_HISTORY +	CHAT_STYLE_HISTORY, +	CHAT_STYLE_TELEPORT_SEP  }EChatStyle;  // A piece of chat diff --git a/indra/llui/llfolderview.h b/indra/llui/llfolderview.h index 6bb5e6c02e..c175034d75 100644 --- a/indra/llui/llfolderview.h +++ b/indra/llui/llfolderview.h @@ -241,6 +241,8 @@ public:  	void dumpSelectionInformation();  	virtual S32	notify(const LLSD& info) ; + +	void setShowEmptyMessage(bool show_msg) { mShowEmptyMessage = show_msg; }  	bool useLabelSuffix() { return mUseLabelSuffix; }  	virtual void updateMenu(); diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index aa5779d45f..f84625bea7 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -283,6 +283,9 @@ public:  	void			resetContextMenu() { setContextMenu(NULL); }; +	void			setBgImage(LLPointer<LLUIImage> image) { mBgImage = image; } +	void			setBgImageFocused(LLPointer<LLUIImage> image) { mBgImageFocused = image; } +  private:  	// private helper methods diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 5568a84494..c2698fa648 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -79,7 +79,7 @@ const U32 LEFT_PAD_PIXELS = 3;  const U32 LEFT_WIDTH_PIXELS = 15;  const U32 LEFT_PLAIN_PIXELS = LEFT_PAD_PIXELS + LEFT_WIDTH_PIXELS; -const U32 RIGHT_PAD_PIXELS = 2; +const U32 RIGHT_PAD_PIXELS = 7;  const U32 RIGHT_WIDTH_PIXELS = 15;  const U32 RIGHT_PLAIN_PIXELS = RIGHT_PAD_PIXELS + RIGHT_WIDTH_PIXELS; @@ -95,7 +95,7 @@ const std::string SEPARATOR_NAME("separator");  const std::string VERTICAL_SEPARATOR_LABEL( "|" );  const std::string LLMenuGL::BOOLEAN_TRUE_PREFIX( "\xE2\x9C\x94" ); // U+2714 HEAVY CHECK MARK -const std::string LLMenuGL::BRANCH_SUFFIX( "\xE2\x96\xB6" ); // U+25B6 BLACK RIGHT-POINTING TRIANGLE +const std::string LLMenuGL::BRANCH_SUFFIX( "\xe2\x96\xb8" ); // U+25B6 BLACK RIGHT-POINTING TRIANGLE  const std::string LLMenuGL::ARROW_UP  ("^^^^^^^");  const std::string LLMenuGL::ARROW_DOWN("vvvvvvv"); diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 06ec648178..b791a19c2b 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -77,6 +77,7 @@ LLNotificationForm::FormButton::FormButton()  	text("text"),  	ignore("ignore"),  	is_default("default"), +	width("width", 0),  	type("type")  {  	// set type here so it gets serialized diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index 2f4578da17..b0b56cf599 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -191,6 +191,7 @@ public:  		Mandatory<std::string>	text;  		Optional<std::string>	ignore;  		Optional<bool>			is_default; +		Optional<S32>			width;  		Mandatory<std::string>	type; diff --git a/indra/llui/llsearcheditor.cpp b/indra/llui/llsearcheditor.cpp index 1fdd05a11c..bafeef41fb 100644 --- a/indra/llui/llsearcheditor.cpp +++ b/indra/llui/llsearcheditor.cpp @@ -34,7 +34,11 @@  LLSearchEditor::LLSearchEditor(const LLSearchEditor::Params& p)  :	LLUICtrl(p),  	mSearchButton(NULL), -	mClearButton(NULL) +	mClearButton(NULL), +	mEditorImage(p.background_image), +	mEditorImageFocused(p.background_image_focused), +	mEditorSearchImage(p.background_image_highlight), +	mHighlightTextField(p.highlight_text_field)  {  	S32 srch_btn_top = p.search_button.top_pad + p.search_button.rect.height;  	S32 srch_btn_right = p.search_button.rect.width + p.search_button.left_pad; @@ -57,6 +61,8 @@ LLSearchEditor::LLSearchEditor(const LLSearchEditor::Params& p)  	// Set up line editor.  	LLLineEditor::Params line_editor_params(p);  	line_editor_params.name("filter edit box"); +	line_editor_params.background_image(p.background_image); +	line_editor_params.background_image_focused(p.background_image_focused);  	line_editor_params.rect(getLocalRect());  	line_editor_params.follows.flags(FOLLOWS_ALL);  	line_editor_params.text_pad_left(text_pad_left); @@ -104,6 +110,20 @@ void LLSearchEditor::draw()  	if (mClearButton)  		mClearButton->setVisible(!mSearchEditor->getWText().empty()); +	if (mHighlightTextField) +	{	 +		if (!mSearchEditor->getWText().empty()) +		{ +			mSearchEditor->setBgImage(mEditorSearchImage); +			mSearchEditor->setBgImageFocused(mEditorSearchImage); +		} +		else +		{ +			mSearchEditor->setBgImage(mEditorImage); +			mSearchEditor->setBgImageFocused(mEditorImageFocused); +		} +	} +  	LLUICtrl::draw();  } diff --git a/indra/llui/llsearcheditor.h b/indra/llui/llsearcheditor.h index 3b12868225..c0f3c1d60c 100644 --- a/indra/llui/llsearcheditor.h +++ b/indra/llui/llsearcheditor.h @@ -47,14 +47,23 @@ public:  		Optional<LLButton::Params>	search_button,   									clear_button;  		Optional<bool>				search_button_visible,  -									clear_button_visible; +									clear_button_visible, +									highlight_text_field;  		Optional<commit_callback_t> keystroke_callback; +		Optional<LLUIImage*>		background_image, +									background_image_focused, +									background_image_highlight; +  		Params()  		:	search_button("search_button"),  			search_button_visible("search_button_visible"),  			clear_button("clear_button"),  -			clear_button_visible("clear_button_visible") +			clear_button_visible("clear_button_visible"), +			highlight_text_field("highlight_text_field"), +			background_image("background_image"), +			background_image_focused("background_image_focused"), +			background_image_highlight("background_image_highlight")  		{}  	}; @@ -93,6 +102,13 @@ protected:  	LLLineEditor* mSearchEditor;  	LLButton* mSearchButton;  	LLButton* mClearButton; + +	LLPointer<LLUIImage> mEditorImage; +	LLPointer<LLUIImage> mEditorImageFocused; +	LLPointer<LLUIImage> mEditorSearchImage; +	LLPointer<LLUIImage> mEditorSearchImageFocused; + +	bool mHighlightTextField;  };  #endif  // LL_SEARCHEDITOR_H diff --git a/indra/llui/llvirtualtrackball.cpp b/indra/llui/llvirtualtrackball.cpp index 723643dd25..6e0aef740d 100644 --- a/indra/llui/llvirtualtrackball.cpp +++ b/indra/llui/llvirtualtrackball.cpp @@ -348,6 +348,42 @@ LLQuaternion LLVirtualTrackball::getRotation() const  	return mValue;  } +// static +void LLVirtualTrackball::getAzimuthAndElevation(const LLQuaternion &quat, F32 &azimuth, F32 &elevation) +{ +    // LLQuaternion has own function to get azimuth, but it doesn't appear to return correct values (meant for 2d?) +    LLVector3 point = VectorZero * quat; + +    if (!is_approx_zero(point.mV[VX]) || !is_approx_zero(point.mV[VY])) +    { +        azimuth = atan2f(point.mV[VX], point.mV[VY]); +    } +    else +    { +        azimuth = 0; +    } + +    azimuth -= F_PI_BY_TWO; + +    if (azimuth < 0) +    { +        azimuth += F_PI * 2; +    } + +    // while vector is '1', F32 is not sufficiently precise and we can get +    // values like 1.0000012 which will result in -90deg angle instead of 90deg +    F32 z = llclamp(point.mV[VZ], -1.f, 1.f); +    elevation = asin(z); // because VectorZero's length is '1' +} + +// static +void LLVirtualTrackball::getAzimuthAndElevationDeg(const LLQuaternion &quat, F32 &azimuth, F32 &elevation) +{ +    getAzimuthAndElevation(quat, azimuth, elevation); +    azimuth *= RAD_TO_DEG; +    elevation *= RAD_TO_DEG; +} +  BOOL LLVirtualTrackball::handleHover(S32 x, S32 y, MASK mask)  {      if (hasMouseCapture()) @@ -409,6 +445,10 @@ BOOL LLVirtualTrackball::handleHover(S32 x, S32 y, MASK mask)              mValue *= az_quat;          } +        // we are doing a lot of F32 mathematical operations with loss of precision, +        // re-normalize to compensate +        mValue.normalize(); +          mPrevX = x;          mPrevY = y;          onCommit(); diff --git a/indra/llui/llvirtualtrackball.h b/indra/llui/llvirtualtrackball.h index 2d4b1ece17..c7a893877b 100644 --- a/indra/llui/llvirtualtrackball.h +++ b/indra/llui/llvirtualtrackball.h @@ -96,6 +96,9 @@ public:      void            setRotation(const LLQuaternion &value);      LLQuaternion    getRotation() const; +    static void             getAzimuthAndElevation(const LLQuaternion &quat, F32 &azimuth, F32 &elevation); +    static void             getAzimuthAndElevationDeg(const LLQuaternion &quat, F32 &azimuth, F32 &elevation); +  protected:      friend class LLUICtrlFactory;      LLVirtualTrackball(const Params&); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 3439951e80..1520c0ee69 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -209,6 +209,7 @@ set(viewer_SOURCE_FILES      llflexibleobject.cpp      llfloaterabout.cpp      llfloaterbvhpreview.cpp +    llfloateraddpaymentmethod.cpp      llfloaterauction.cpp      llfloaterautoreplacesettings.cpp      llfloateravatar.cpp @@ -840,6 +841,7 @@ set(viewer_HEADER_FILES      llflexibleobject.h      llfloaterabout.h      llfloaterbvhpreview.h +    llfloateraddpaymentmethod.h      llfloaterauction.h      llfloaterautoreplacesettings.h      llfloateravatar.h diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 537744b44c..3d77ac43e5 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -403,6 +403,17 @@          <key>Value</key>          <string></string>        </map> +      <key>FavoritesFolder</key> +      <map> +        <key>Comment</key> +        <string>User's chosen folder which will be shown in the Favorites tab (UUID)</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>String</string> +        <key>Value</key> +        <string></string> +      </map>        <key>SnapshotBaseDir</key>        <map>          <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index c65bc0fa50..3c50493d79 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -387,6 +387,7 @@ LLAgent::LLAgent() :  	mTeleportFinishedSlot(),  	mTeleportFailedSlot(),  	mIsMaturityRatingChangingDuringTeleport(false), +	mTPNeedsNeabyChatSeparator(false),  	mMaturityRatingChange(0U),  	mIsDoSendMaturityPreferenceToServer(false),  	mMaturityPreferenceRequestId(0U), @@ -3934,6 +3935,7 @@ void LLAgent::clearTeleportRequest()          LLVoiceClient::getInstance()->setHidden(FALSE);      }  	mTeleportRequest.reset(); +    mTPNeedsNeabyChatSeparator = false;  }  void LLAgent::setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange) @@ -3942,6 +3944,12 @@ void LLAgent::setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange)  	mMaturityRatingChange = pMaturityRatingChange;  } +void LLAgent::sheduleTeleportIM() +{ +    // is supposed to be called during teleport so we are still waiting for parcel +    mTPNeedsNeabyChatSeparator = true; +} +  bool LLAgent::hasPendingTeleportRequest()  {  	return ((mTeleportRequest != NULL) && @@ -3989,6 +3997,12 @@ void LLAgent::startTeleportRequest()  void LLAgent::handleTeleportFinished()  {      LL_INFOS("Teleport") << "Agent handling teleport finished." << LL_ENDL; +    if (mTPNeedsNeabyChatSeparator) +    { +        // parcel is ready at this point +        addTPNearbyChatSeparator(); +        mTPNeedsNeabyChatSeparator = false; +    }  	clearTeleportRequest();      mTeleportCanceled.reset();  	if (mIsMaturityRatingChangingDuringTeleport) @@ -4051,6 +4065,44 @@ void LLAgent::handleTeleportFailed()  		LLNotificationsUtil::add("PreferredMaturityChanged", args);  		mIsMaturityRatingChangingDuringTeleport = false;  	} + +    mTPNeedsNeabyChatSeparator = false; +} + +/*static*/ +void LLAgent::addTPNearbyChatSeparator() +{ +    LLViewerRegion* agent_region = gAgent.getRegion(); +    LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); +    if (!agent_region || !agent_parcel) +    { +        return; +    } + +    LLFloaterIMNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLFloaterIMNearbyChat>("nearby_chat"); +    if (nearby_chat) +    { +        std::string location_name; +        LLAgentUI::ELocationFormat format = LLAgentUI::LOCATION_FORMAT_NO_MATURITY; + +        // Might be better to provide slurl to chat +        if (!LLAgentUI::buildLocationString(location_name, format)) +        { +            location_name = "Teleport to new region"; // Shouldn't happen +        } + +        LLChat chat; +        chat.mFromName = location_name; +        chat.mMuted = FALSE; +        chat.mFromID = LLUUID::null; +        chat.mSourceType = CHAT_SOURCE_TELEPORT; +        chat.mChatStyle = CHAT_STYLE_TELEPORT_SEP; +        chat.mText = ""; + +        LLSD args; +        args["do_not_log"] = TRUE; +        nearby_chat->addMessage(chat, true, args); +    }  }  /*static*/ diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index d46c99db8c..a792d3e11f 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -653,6 +653,7 @@ public:  	void            restartFailedTeleportRequest();  	void            clearTeleportRequest();  	void            setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange); +	void            sheduleTeleportIM();  private: @@ -669,6 +670,7 @@ private:  	boost::signals2::connection mTeleportFailedSlot;  	bool            mIsMaturityRatingChangingDuringTeleport; +	bool            mTPNeedsNeabyChatSeparator;  	U8              mMaturityRatingChange;  	bool            hasPendingTeleportRequest(); @@ -685,6 +687,7 @@ private:  	void            handleTeleportFinished();  	void            handleTeleportFailed(); +    static void     addTPNearbyChatSeparator();      static void     onCapabilitiesReceivedAfterTeleport();  	//-------------------------------------------------------------------- diff --git a/indra/newview/llavatarpropertiesprocessor.cpp b/indra/newview/llavatarpropertiesprocessor.cpp index 856eb3414e..f41eb3daf4 100644 --- a/indra/newview/llavatarpropertiesprocessor.cpp +++ b/indra/newview/llavatarpropertiesprocessor.cpp @@ -253,6 +253,19 @@ std::string LLAvatarPropertiesProcessor::paymentInfo(const LLAvatarData* avatar_  	return LLTrans::getString(payment_text);  } +//static +bool LLAvatarPropertiesProcessor::hasPaymentInfoOnFile(const LLAvatarData* avatar_data) +{ +	// Special accounts like M Linden don't have payment info revealed. +	if (!avatar_data->caption_text.empty()) return true; + +	// Linden employees don't have payment info revealed +	const S32 LINDEN_EMPLOYEE_INDEX = 3; +	if (avatar_data->caption_index == LINDEN_EMPLOYEE_INDEX) return true; + +	return ((avatar_data->flags & AVATAR_TRANSACTED) || (avatar_data->flags & AVATAR_IDENTIFIED)); +} +  void LLAvatarPropertiesProcessor::processAvatarPropertiesReply(LLMessageSystem* msg, void**)  {  	LLAvatarData avatar_data; diff --git a/indra/newview/llavatarpropertiesprocessor.h b/indra/newview/llavatarpropertiesprocessor.h index d5c5c75c69..b063048c26 100644 --- a/indra/newview/llavatarpropertiesprocessor.h +++ b/indra/newview/llavatarpropertiesprocessor.h @@ -232,6 +232,8 @@ public:  	// Used for profiles, inspectors.  	static std::string paymentInfo(const LLAvatarData* avatar_data); +	static bool hasPaymentInfoOnFile(const LLAvatarData* avatar_data); +  	static void processAvatarPropertiesReply(LLMessageSystem* msg, void**);  	static void processAvatarInterestsReply(LLMessageSystem* msg, void**); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 2ba2c6d8b5..c110e0d815 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -122,6 +122,7 @@ public:  		mUserNameFont(NULL),  		mUserNameTextBox(NULL),  		mTimeBoxTextBox(NULL), +		mNeedsTimeBox(true),  		mAvatarNameCacheConnection()  	{} @@ -643,8 +644,19 @@ public:  		user_name->setReadOnlyColor(style_params.readonly_color());  		user_name->setColor(style_params.color()); -		if (chat.mFromName.empty() -			|| mSourceType == CHAT_SOURCE_SYSTEM) +        if (mSourceType == CHAT_SOURCE_TELEPORT +            && chat.mChatStyle == CHAT_STYLE_TELEPORT_SEP) +        { +            mFrom = chat.mFromName; +            mNeedsTimeBox = false; +            user_name->setValue(mFrom); +            updateMinUserNameWidth(); +            LLColor4 sep_color = LLUIColorTable::instance().getColor("ChatTeleportSeparatorColor"); +            setTransparentColor(sep_color); +            mTimeBoxTextBox->setVisible(FALSE); +        } +        else if (chat.mFromName.empty() +                 || mSourceType == CHAT_SOURCE_SYSTEM)  		{  			mFrom = LLTrans::getString("SECOND_LIFE");  			if(!chat.mFromName.empty() && (mFrom != chat.mFromName)) @@ -728,6 +740,9 @@ public:  			case CHAT_SOURCE_SYSTEM:  				icon->setValue(LLSD("SL_Logo"));  				break; +			case CHAT_SOURCE_TELEPORT: +				icon->setValue(LLSD("Command_Destinations_Icon")); +				break;  			case CHAT_SOURCE_UNKNOWN:   				icon->setValue(LLSD("Unknown_Icon"));  		} @@ -766,7 +781,7 @@ public:  		S32 user_name_width = user_name_rect.getWidth();  		S32 time_box_width = time_box->getRect().getWidth(); -		if (!time_box->getVisible() && user_name_width > mMinUserNameWidth) +		if (mNeedsTimeBox && !time_box->getVisible() && user_name_width > mMinUserNameWidth)  		{  			user_name_rect.mRight -= time_box_width;  			user_name->reshape(user_name_rect.getWidth(), user_name_rect.getHeight()); @@ -968,6 +983,8 @@ protected:  	LLTextBox*			mUserNameTextBox;  	LLTextBox*			mTimeBoxTextBox;  +    bool				mNeedsTimeBox; +  private:  	boost::signals2::connection mAvatarNameCacheConnection;  }; @@ -1202,6 +1219,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  	}  	bool message_from_log = chat.mChatStyle == CHAT_STYLE_HISTORY; +	bool teleport_separator = chat.mSourceType == CHAT_SOURCE_TELEPORT;  	// We graying out chat history by graying out messages that contains full date in a time string  	if (message_from_log)  	{ @@ -1222,14 +1240,14 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  		LLStyle::Params timestamp_style(body_message_params);  		// out of the timestamp -		if (args["show_time"].asBoolean()) -		{ -		if (!message_from_log) +		if (args["show_time"].asBoolean() && !teleport_separator)  		{ -			LLColor4 timestamp_color = LLUIColorTable::instance().getColor("ChatTimestampColor"); -			timestamp_style.color(timestamp_color); -			timestamp_style.readonly_color(timestamp_color); -		} +			if (!message_from_log) +			{ +				LLColor4 timestamp_color = LLUIColorTable::instance().getColor("ChatTimestampColor"); +				timestamp_style.color(timestamp_color); +				timestamp_style.readonly_color(timestamp_color); +			}  			mEditor->appendText("[" + chat.mTimeStr + "] ", prependNewLineState, timestamp_style);  			prependNewLineState = false;  		} @@ -1272,6 +1290,13 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  					prependNewLineState, link_params);  				prependNewLineState = false;  			} +            else if (teleport_separator) +            { +                std::string tp_text = LLTrans::getString("teleport_preamble_compact_chat"); +                mEditor->appendText(tp_text + " <nolink>" + chat.mFromName + "</nolink>", +                    prependNewLineState, body_message_params); +                                prependNewLineState = false; +            }  			else  			{  				mEditor->appendText("<nolink>" + chat.mFromName + "</nolink>" + delimiter, @@ -1290,8 +1315,8 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  		p.right_pad = mRightWidgetPad;  		LLDate new_message_time = LLDate::now(); - -		if (mLastFromName == chat.mFromName  +		if (!teleport_separator +			&& mLastFromName == chat.mFromName  			&& mLastFromID == chat.mFromID  			&& mLastMessageTime.notNull()   			&& (new_message_time.secondsSinceEpoch() - mLastMessageTime.secondsSinceEpoch()) < 60.0 @@ -1314,7 +1339,14 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  				p.top_pad = 0;  			else  				p.top_pad = mTopHeaderPad; -            p.bottom_pad = mBottomHeaderPad; +            if (teleport_separator) +            { +                p.bottom_pad = mBottomSeparatorPad; +            } +            else +            { +                p.bottom_pad = mBottomHeaderPad; +            }              if (!view)              {                  LL_WARNS() << "Failed to create header from " << mMessageHeaderFilename << ": can't append to history" << LL_ENDL; @@ -1392,9 +1424,8 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  			}  		}  	} -  	// usual messages showing -	else +	else if(!teleport_separator)  	{  		std::string message = irc_me ? chat.mText.substr(3) : chat.mText; @@ -1427,7 +1458,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  		if (square_brackets)  		{  			message += "]"; -	} +		}  		mEditor->appendText(message, prependNewLineState, body_message_params);  		prependNewLineState = false; diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp index d4fc1fe64d..232e461fd0 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -454,7 +454,7 @@ void LLCurrencyUIManager::Impl::updateUI()  		if (!mUserEnteredCurrencyBuy)  		{ -			if (!mZeroMessage.empty() && mUserCurrencyBuy == 0) +			if (mUserCurrencyBuy == 0)  			{  				lindenAmount->setText(LLStringUtil::null);  			} @@ -467,8 +467,9 @@ void LLCurrencyUIManager::Impl::updateUI()  		}  	} -	mPanel.getChild<LLUICtrl>("currency_est")->setTextArg("[LOCALAMOUNT]", getLocalEstimate()); -	mPanel.getChildView("currency_est")->setVisible( hasEstimate() && mUserCurrencyBuy > 0); +	std::string estimated = (mUserCurrencyBuy == 0) ? mPanel.getString("estimated_zero") : getLocalEstimate(); +	mPanel.getChild<LLUICtrl>("currency_est")->setTextArg("[LOCALAMOUNT]", estimated); +	mPanel.getChildView("currency_est")->setVisible( hasEstimate() || mUserCurrencyBuy == 0);  	mPanel.getChildView("currency_links")->setVisible( mSupportsInternationalBilling);  	mPanel.getChildView("exchange_rate_note")->setVisible( mSupportsInternationalBilling); diff --git a/indra/newview/llfloateraddpaymentmethod.cpp b/indra/newview/llfloateraddpaymentmethod.cpp new file mode 100644 index 0000000000..3952b48229 --- /dev/null +++ b/indra/newview/llfloateraddpaymentmethod.cpp @@ -0,0 +1,81 @@ +/**  + * @file llfloateraddpaymentmethod.cpp + * @brief LLFloaterAddPaymentMethod class implementation + * + * $LicenseInfo:firstyear=2020&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2020, Linden Research, Inc. + *  + * 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 + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloateraddpaymentmethod.h" +#include "llnotificationsutil.h" +#include "lluictrlfactory.h" +#include "llweb.h" + + +LLFloaterAddPaymentMethod::LLFloaterAddPaymentMethod(const LLSD& key) +	:	LLFloater(key) +{ +} + +LLFloaterAddPaymentMethod::~LLFloaterAddPaymentMethod() +{ +} + +BOOL LLFloaterAddPaymentMethod::postBuild() +{ +	setCanDrag(FALSE); +	getChild<LLButton>("continue_btn")->setCommitCallback(boost::bind(&LLFloaterAddPaymentMethod::onContinueBtn, this)); +	getChild<LLButton>("close_btn")->setCommitCallback(boost::bind(&LLFloaterAddPaymentMethod::onCloseBtn, this)); +	return TRUE; +} + +void LLFloaterAddPaymentMethod::onOpen(const LLSD& key) +{ +	centerOnScreen(); +} + +void LLFloaterAddPaymentMethod::onContinueBtn() +{ +	closeFloater(); +	LLNotificationsUtil::add("AddPaymentMethod", LLSD(), LLSD(), +		[this](const LLSD¬if, const LLSD&resp) +	{ +		S32 opt = LLNotificationsUtil::getSelectedOption(notif, resp); +		if (opt == 0) +		{ +			LLWeb::loadURL(this->getString("continue_url")); +		} +	});  +} + +void LLFloaterAddPaymentMethod::onCloseBtn() +{ +	closeFloater(); +} + +void LLFloaterAddPaymentMethod::centerOnScreen() +{ +	LLVector2 window_size = LLUI::getInstance()->getWindowSize(); +	centerWithin(LLRect(0, 0, ll_round(window_size.mV[VX]), ll_round(window_size.mV[VY]))); +} + diff --git a/indra/newview/llfloateraddpaymentmethod.h b/indra/newview/llfloateraddpaymentmethod.h new file mode 100644 index 0000000000..b3bb624484 --- /dev/null +++ b/indra/newview/llfloateraddpaymentmethod.h @@ -0,0 +1,52 @@ +/**  + * @file llfloateraddpaymentmethod.h + * @brief LLFloaterAddPaymentMethod class definition + * + * $LicenseInfo:firstyear=2020&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2020, Linden Research, Inc. + *  + * 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 + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#ifndef LL_FLOATER_ADDPAYMENTMETHOD_H +#define LL_FLOATER_ADDPAYMENTMETHOD_H + +#include "llfloater.h" + +class LLFloaterAddPaymentMethod: +	public LLFloater +{ +	friend class LLFloaterReg; +public: +	/*virtual*/	BOOL postBuild(); +	/*virtual*/ void onOpen(const LLSD& key); + +private: +	LLFloaterAddPaymentMethod(const LLSD& key); + +	void centerOnScreen(); + +	void onCloseBtn(); +	void onContinueBtn(); +	 +	/*virtual*/	~LLFloaterAddPaymentMethod(); + +}; + +#endif diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp index 1751d54b5a..0cfac166c7 100644 --- a/indra/newview/llfloaterbuycurrency.cpp +++ b/indra/newview/llfloaterbuycurrency.cpp @@ -32,6 +32,8 @@  #include "llcurrencyuimanager.h"  #include "llfloater.h"  #include "llfloaterreg.h" +#include "lllayoutstack.h" +#include "lliconctrl.h"  #include "llnotificationsutil.h"  #include "llstatusbar.h"  #include "lltextbox.h" @@ -42,7 +44,6 @@  #include "llwindow.h"  #include "llappviewer.h" -static const S32 STANDARD_BUY_AMOUNT = 2000;  static const S32 MINIMUM_BALANCE_AMOUNT = 0;  class LLFloaterBuyCurrencyUI @@ -58,8 +59,8 @@ public:  	LLCurrencyUIManager	mManager;  	bool		mHasTarget; -	std::string	mTargetName;  	S32			mTargetPrice; +	S32			mRequiredAmount;  public:  	void noTarget(); @@ -68,6 +69,7 @@ public:  	virtual BOOL postBuild();  	void updateUI(); +	void collapsePanels(bool collapse);  	virtual void draw();  	virtual BOOL canClose(); @@ -92,7 +94,9 @@ LLFloater* LLFloaterBuyCurrency::buildFloater(const LLSD& key)  LLFloaterBuyCurrencyUI::LLFloaterBuyCurrencyUI(const LLSD& key)  :	LLFloater(key),  	mChildren(*this), -	mManager(*this) +	mManager(*this), +	mHasTarget(false), +	mTargetPrice(0)  {  } @@ -104,15 +108,20 @@ LLFloaterBuyCurrencyUI::~LLFloaterBuyCurrencyUI()  void LLFloaterBuyCurrencyUI::noTarget()  {  	mHasTarget = false; -	mManager.setAmount(STANDARD_BUY_AMOUNT); +	mTargetPrice = 0; +	mManager.setAmount(0);  }  void LLFloaterBuyCurrencyUI::target(const std::string& name, S32 price)  {  	mHasTarget = true; -	mTargetName = name;  	mTargetPrice = price; +	if (!name.empty()) +	{ +		getChild<LLUICtrl>("target_price_label")->setValue(name); +	} +  	S32 balance = gStatusBar->getBalance();  	S32 need = price - balance;  	if (need < 0) @@ -120,7 +129,8 @@ void LLFloaterBuyCurrencyUI::target(const std::string& name, S32 price)  		need = 0;  	} -	mManager.setAmount(need + MINIMUM_BALANCE_AMOUNT); +	mRequiredAmount = need + MINIMUM_BALANCE_AMOUNT; +	mManager.setAmount(0);  } @@ -175,7 +185,6 @@ void LLFloaterBuyCurrencyUI::updateUI()  	getChildView("purchase_warning_repurchase")->setVisible(FALSE);  	getChildView("purchase_warning_notenough")->setVisible(FALSE);  	getChildView("contacting")->setVisible(FALSE); -	getChildView("buy_action")->setVisible(FALSE);  	if (hasError)  	{ @@ -209,8 +218,8 @@ void LLFloaterBuyCurrencyUI::updateUI()  		{  			if (mHasTarget)  			{ -				getChildView("buy_action")->setVisible( true); -				getChild<LLUICtrl>("buy_action")->setTextArg("[ACTION]", mTargetName); +				getChild<LLUICtrl>("target_price")->setTextArg("[AMT]", llformat("%d", mTargetPrice)); +				getChild<LLUICtrl>("required_amount")->setTextArg("[AMT]", llformat("%d", mRequiredAmount));  			}  		} @@ -231,18 +240,40 @@ void LLFloaterBuyCurrencyUI::updateUI()  		if (mHasTarget)  		{ -			if (total >= mTargetPrice) -			{ -				getChildView("purchase_warning_repurchase")->setVisible( true); -			} -			else -			{ -				getChildView("purchase_warning_notenough")->setVisible( true); -			} +			getChildView("purchase_warning_repurchase")->setVisible( !getChildView("currency_links")->getVisible());  		}  	} -	getChildView("getting_data")->setVisible( !mManager.canBuy() && !hasError); +	getChildView("getting_data")->setVisible( !mManager.canBuy() && !hasError && !getChildView("currency_est")->getVisible()); +} + +void LLFloaterBuyCurrencyUI::collapsePanels(bool collapse) +{ +	LLLayoutPanel* price_panel = getChild<LLLayoutPanel>("layout_panel_price"); +	 +	if (price_panel->isCollapsed() == collapse) +		return; +	 +	LLLayoutStack* outer_stack = getChild<LLLayoutStack>("outer_stack");	 +	LLLayoutPanel* required_panel = getChild<LLLayoutPanel>("layout_panel_required"); +	LLLayoutPanel* msg_panel = getChild<LLLayoutPanel>("layout_panel_msg"); + +	S32 delta_height = price_panel->getRect().getHeight() + required_panel->getRect().getHeight() + msg_panel->getRect().getHeight(); +	delta_height *= (collapse ? -1 : 1); + +	LLIconCtrl* icon = getChild<LLIconCtrl>("normal_background"); +	LLRect rect = icon->getRect(); +	icon->setRect(rect.setOriginAndSize(rect.mLeft, rect.mBottom - delta_height, rect.getWidth(), rect.getHeight() + delta_height)); + +	outer_stack->collapsePanel(price_panel, collapse); +	outer_stack->collapsePanel(required_panel, collapse); +	outer_stack->collapsePanel(msg_panel, collapse); + +	outer_stack->updateLayout(); + +	LLRect floater_rect = getRect(); +	floater_rect.mBottom -= delta_height; +	setShape(floater_rect, false);  }  void LLFloaterBuyCurrencyUI::onClickBuy() @@ -260,20 +291,72 @@ void LLFloaterBuyCurrencyUI::onClickCancel()  	LLStatusBar::sendMoneyBalanceRequest();  } +LLFetchAvatarPaymentInfo* LLFloaterBuyCurrency::sPropertiesRequest = NULL; +  // static  void LLFloaterBuyCurrency::buyCurrency()  { -	LLFloaterBuyCurrencyUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyCurrencyUI>("buy_currency"); -	ui->noTarget(); -	ui->updateUI(); +	delete sPropertiesRequest; +	sPropertiesRequest = new LLFetchAvatarPaymentInfo(false);  }  // static  void LLFloaterBuyCurrency::buyCurrency(const std::string& name, S32 price)  { -	LLFloaterBuyCurrencyUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyCurrencyUI>("buy_currency"); -	ui->target(name, price); -	ui->updateUI(); +	delete sPropertiesRequest; +	sPropertiesRequest = new LLFetchAvatarPaymentInfo(true, name, price); +} + +// static +void LLFloaterBuyCurrency::handleBuyCurrency(bool has_piof, bool has_target, const std::string name, S32 price) +{ +	delete sPropertiesRequest; +	sPropertiesRequest = NULL; + +	if (has_piof) +	{ +		LLFloaterBuyCurrencyUI* ui = LLFloaterReg::showTypedInstance<LLFloaterBuyCurrencyUI>("buy_currency"); +		if (has_target) +		{ +			ui->target(name, price); +		} +		else +		{ +			ui->noTarget();			 +		} +		ui->updateUI(); +		ui->collapsePanels(!has_target); +	} +	else +	{ +		LLFloaterReg::showInstance("add_payment_method"); +	}  } +LLFetchAvatarPaymentInfo::LLFetchAvatarPaymentInfo(bool has_target, const std::string& name, S32 price) +:	mAvatarID(gAgent.getID()), +	mHasTarget(has_target), +	mPrice(price), +	mName(name) +{ +	LLAvatarPropertiesProcessor* processor = LLAvatarPropertiesProcessor::getInstance(); +	// register ourselves as an observer +	processor->addObserver(mAvatarID, this); +	// send a request (duplicates will be suppressed inside the avatar +	// properties processor) +	processor->sendAvatarPropertiesRequest(mAvatarID); +} + +LLFetchAvatarPaymentInfo::~LLFetchAvatarPaymentInfo() +{ +	LLAvatarPropertiesProcessor::getInstance()->removeObserver(mAvatarID, this); +} +void LLFetchAvatarPaymentInfo::processProperties(void* data, EAvatarProcessorType type) +{ +	if (data && type == APT_PROPERTIES) +	{ +		LLAvatarData* avatar_data = static_cast<LLAvatarData*>(data); +		LLFloaterBuyCurrency::handleBuyCurrency(LLAvatarPropertiesProcessor::hasPaymentInfoOnFile(avatar_data), mHasTarget, mName, mPrice); +	} +} diff --git a/indra/newview/llfloaterbuycurrency.h b/indra/newview/llfloaterbuycurrency.h index 7ff6c42384..88d3d17cd6 100644 --- a/indra/newview/llfloaterbuycurrency.h +++ b/indra/newview/llfloaterbuycurrency.h @@ -27,15 +27,34 @@  #ifndef LL_LLFLOATERBUYCURRENCY_H  #define LL_LLFLOATERBUYCURRENCY_H +#include "llavatarpropertiesprocessor.h"  #include "stdtypes.h" - +#include "llagent.h"  class LLFloater; +class LLFetchAvatarPaymentInfo : public LLAvatarPropertiesObserver +{ +public: +	LLFetchAvatarPaymentInfo(bool has_target, const std::string& name = std::string(), S32 price = 0); +	~LLFetchAvatarPaymentInfo(); + +	void processProperties(void* data, EAvatarProcessorType type); + +private: +	LLUUID mAvatarID; +	bool mHasTarget; +	std::string mName; +    S32 mPrice; +}; + +  class LLFloaterBuyCurrency  {  public:  	static void buyCurrency();  	static void buyCurrency(const std::string& name, S32 price); + +		static void handleBuyCurrency(bool has_piof, bool has_target, const std::string name, S32 price);  		/* name should be a noun phrase of the object or service being bought:  				"That object costs"  				"Trying to give" @@ -44,7 +63,8 @@ public:  		*/  	static LLFloater* buildFloater(const LLSD& key); -}; +	static LLFetchAvatarPaymentInfo* sPropertiesRequest; +};  #endif diff --git a/indra/newview/llfloaterenvironmentadjust.cpp b/indra/newview/llfloaterenvironmentadjust.cpp index 4eb5e03603..95d6a2d652 100644 --- a/indra/newview/llfloaterenvironmentadjust.cpp +++ b/indra/newview/llfloaterenvironmentadjust.cpp @@ -53,11 +53,15 @@ namespace      const std::string FIELD_SKY_CLOUD_SCALE("cloud_scale");      const std::string FIELD_SKY_SCENE_GAMMA("scene_gamma");      const std::string FIELD_SKY_SUN_ROTATION("sun_rotation"); +    const std::string FIELD_SKY_SUN_AZIMUTH("sun_azimuth"); +    const std::string FIELD_SKY_SUN_ELEVATION("sun_elevation");      const std::string FIELD_SKY_SUN_SCALE("sun_scale");      const std::string FIELD_SKY_GLOW_FOCUS("glow_focus");      const std::string FIELD_SKY_GLOW_SIZE("glow_size");      const std::string FIELD_SKY_STAR_BRIGHTNESS("star_brightness");      const std::string FIELD_SKY_MOON_ROTATION("moon_rotation"); +    const std::string FIELD_SKY_MOON_AZIMUTH("moon_azimuth"); +    const std::string FIELD_SKY_MOON_ELEVATION("moon_elevation");      const std::string BTN_RESET("btn_reset");      const F32 SLIDER_SCALE_SUN_AMBIENT(3.0f); @@ -96,9 +100,13 @@ BOOL LLFloaterEnvironmentAdjust::postBuild()      getChild<LLUICtrl>(FIELD_SKY_GLOW_SIZE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onGlowChanged(); });      getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onStarBrightnessChanged(); });      getChild<LLUICtrl>(FIELD_SKY_SUN_ROTATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunRotationChanged(); }); +    getChild<LLUICtrl>(FIELD_SKY_SUN_AZIMUTH)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunAzimElevChanged(); }); +    getChild<LLUICtrl>(FIELD_SKY_SUN_ELEVATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunAzimElevChanged(); });      getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunScaleChanged(); });      getChild<LLUICtrl>(FIELD_SKY_MOON_ROTATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonRotationChanged(); }); +    getChild<LLUICtrl>(FIELD_SKY_MOON_AZIMUTH)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonAzimElevChanged(); }); +    getChild<LLUICtrl>(FIELD_SKY_MOON_ELEVATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonAzimElevChanged(); });      getChild<LLUICtrl>(BTN_RESET)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onButtonReset(); });      getChild<LLTextureCtrl>(FIELD_SKY_CLOUD_MAP)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onCloudMapChanged(); }); @@ -169,10 +177,25 @@ void LLFloaterEnvironmentAdjust::refresh()      getChild<LLUICtrl>(FIELD_SKY_GLOW_SIZE)->setValue(2.0 - (glow.mV[0] / SLIDER_SCALE_GLOW_R));      getChild<LLUICtrl>(FIELD_SKY_GLOW_FOCUS)->setValue(glow.mV[2] / SLIDER_SCALE_GLOW_B);      getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setValue(mLiveSky->getStarBrightness()); -    getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->setRotation(mLiveSky->getSunRotation());      getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setValue(mLiveSky->getSunScale()); -    getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->setRotation(mLiveSky->getMoonRotation()); +    // Sun rotation +    LLQuaternion quat = mLiveSky->getSunRotation(); +    F32 azimuth; +    F32 elevation; +    LLVirtualTrackball::getAzimuthAndElevationDeg(quat, azimuth, elevation); + +    getChild<LLUICtrl>(FIELD_SKY_SUN_AZIMUTH)->setValue(azimuth); +    getChild<LLUICtrl>(FIELD_SKY_SUN_ELEVATION)->setValue(elevation); +    getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->setRotation(quat); + +    // Moon rotation +    quat = mLiveSky->getMoonRotation(); +    LLVirtualTrackball::getAzimuthAndElevationDeg(quat, azimuth, elevation); + +    getChild<LLUICtrl>(FIELD_SKY_MOON_AZIMUTH)->setValue(azimuth); +    getChild<LLUICtrl>(FIELD_SKY_MOON_ELEVATION)->setValue(elevation); +    getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->setRotation(quat);  } @@ -325,10 +348,45 @@ void LLFloaterEnvironmentAdjust::onStarBrightnessChanged()  void LLFloaterEnvironmentAdjust::onSunRotationChanged()  { -    if (!mLiveSky) -        return; -    mLiveSky->setSunRotation(getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->getRotation()); -    mLiveSky->update(); +    LLQuaternion quat = getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->getRotation(); +    F32 azimuth; +    F32 elevation; +    LLVirtualTrackball::getAzimuthAndElevationDeg(quat, azimuth, elevation); +    getChild<LLUICtrl>(FIELD_SKY_SUN_AZIMUTH)->setValue(azimuth); +    getChild<LLUICtrl>(FIELD_SKY_SUN_ELEVATION)->setValue(elevation); +    if (mLiveSky) +    { +        mLiveSky->setSunRotation(quat); +        mLiveSky->update(); +    } +} + +void LLFloaterEnvironmentAdjust::onSunAzimElevChanged() +{ +    F32 azimuth = getChild<LLUICtrl>(FIELD_SKY_SUN_AZIMUTH)->getValue().asReal(); +    F32 elevation = getChild<LLUICtrl>(FIELD_SKY_SUN_ELEVATION)->getValue().asReal(); +    LLQuaternion quat; + +    azimuth *= DEG_TO_RAD; +    elevation *= DEG_TO_RAD; + +    if (is_approx_zero(elevation)) +    { +        elevation = F_APPROXIMATELY_ZERO; +    } + +    quat.setAngleAxis(-elevation, 0, 1, 0); +    LLQuaternion az_quat; +    az_quat.setAngleAxis(F_TWO_PI - azimuth, 0, 0, 1); +    quat *= az_quat; + +    getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->setRotation(quat); + +    if (mLiveSky) +    { +        mLiveSky->setSunRotation(quat); +        mLiveSky->update(); +    }  }  void LLFloaterEnvironmentAdjust::onSunScaleChanged() @@ -341,10 +399,45 @@ void LLFloaterEnvironmentAdjust::onSunScaleChanged()  void LLFloaterEnvironmentAdjust::onMoonRotationChanged()  { -    if (!mLiveSky) -        return; -    mLiveSky->setMoonRotation(getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->getRotation()); -    mLiveSky->update(); +    LLQuaternion quat = getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->getRotation(); +    F32 azimuth; +    F32 elevation; +    LLVirtualTrackball::getAzimuthAndElevationDeg(quat, azimuth, elevation); +    getChild<LLUICtrl>(FIELD_SKY_MOON_AZIMUTH)->setValue(azimuth); +    getChild<LLUICtrl>(FIELD_SKY_MOON_ELEVATION)->setValue(elevation); +    if (mLiveSky) +    { +        mLiveSky->setMoonRotation(quat); +        mLiveSky->update(); +    } +} + +void LLFloaterEnvironmentAdjust::onMoonAzimElevChanged() +{ +    F32 azimuth = getChild<LLUICtrl>(FIELD_SKY_MOON_AZIMUTH)->getValue().asReal(); +    F32 elevation = getChild<LLUICtrl>(FIELD_SKY_MOON_ELEVATION)->getValue().asReal(); +    LLQuaternion quat; + +    azimuth *= DEG_TO_RAD; +    elevation *= DEG_TO_RAD; + +    if (is_approx_zero(elevation)) +    { +        elevation = F_APPROXIMATELY_ZERO; +    } + +    quat.setAngleAxis(-elevation, 0, 1, 0); +    LLQuaternion az_quat; +    az_quat.setAngleAxis(F_TWO_PI - azimuth, 0, 0, 1); +    quat *= az_quat; + +    getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->setRotation(quat); + +    if (mLiveSky) +    { +        mLiveSky->setMoonRotation(quat); +        mLiveSky->update(); +    }  }  void LLFloaterEnvironmentAdjust::onCloudMapChanged() diff --git a/indra/newview/llfloaterenvironmentadjust.h b/indra/newview/llfloaterenvironmentadjust.h index cb38dbcfa8..05ff011be5 100644 --- a/indra/newview/llfloaterenvironmentadjust.h +++ b/indra/newview/llfloaterenvironmentadjust.h @@ -73,9 +73,11 @@ private:      void                        onGlowChanged();      void                        onStarBrightnessChanged();      void                        onSunRotationChanged(); +    void                        onSunAzimElevChanged();      void                        onSunScaleChanged();      void                        onMoonRotationChanged(); +    void                        onMoonAzimElevChanged();      void                        onCloudMapChanged();      void                        onWaterMapChanged(); diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index f34760a6bf..749a3d2686 100644 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -51,6 +51,9 @@  #include "llgroupactions.h" +const std::string LINDEN_HOMES_SKU = "131"; +bool LLFloaterLandHoldings::sHasLindenHome = false; +  // protected  LLFloaterLandHoldings::LLFloaterLandHoldings(const LLSD& key)  :	LLFloater(key), @@ -148,10 +151,24 @@ void LLFloaterLandHoldings::refresh()  void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**)  {  	LLFloaterLandHoldings* self = LLFloaterReg::findTypedInstance<LLFloaterLandHoldings>("land_holdings"); - -	// Is this packet from an old, closed window? +	S32 count = msg->getNumberOfBlocks("QueryData"); +	std::string land_sku; +	sHasLindenHome = false;  	if (!self)  	{ +		for (S32 i = 0; i < count; i++) +		{ +			if ( msg->getSizeFast(_PREHASH_QueryData, i, _PREHASH_ProductSKU) > 0 ) +			{ +				msg->getStringFast(	_PREHASH_QueryData, _PREHASH_ProductSKU, land_sku, i); + +				if (LINDEN_HOMES_SKU == land_sku) +				{ +					sHasLindenHome = true; +					return; +				} +			} +		}  		return;  	} @@ -174,12 +191,9 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**)  	F32		global_x;  	F32		global_y;  	std::string	sim_name; -	std::string land_sku;  	std::string land_type; -	S32 i; -	S32 count = msg->getNumberOfBlocks("QueryData"); -	for (i = 0; i < count; i++) +	for (S32 i = 0; i < count; i++)  	{  		msg->getUUID("QueryData", "OwnerID", owner_id, i);  		msg->getString("QueryData", "Name", name, i); @@ -196,6 +210,10 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**)  			msg->getStringFast(	_PREHASH_QueryData, _PREHASH_ProductSKU, land_sku, i);  			LL_INFOS() << "Land sku: " << land_sku << LL_ENDL;  			land_type = LLProductInfoRequestManager::instance().getDescriptionForSku(land_sku); +			if (LINDEN_HOMES_SKU == land_sku) +			{ +				sHasLindenHome = true; +			}  		}  		else  		{ diff --git a/indra/newview/llfloaterlandholdings.h b/indra/newview/llfloaterlandholdings.h index d1d510bb40..90e75b1062 100644 --- a/indra/newview/llfloaterlandholdings.h +++ b/indra/newview/llfloaterlandholdings.h @@ -57,6 +57,8 @@ public:  	static void onGrantList(void* data); +	static bool sHasLindenHome; +  protected:  	void refreshAggregates(); diff --git a/indra/newview/llfolderviewmodelinventory.h b/indra/newview/llfolderviewmodelinventory.h index 06a908cccc..51b98339c4 100644 --- a/indra/newview/llfolderviewmodelinventory.h +++ b/indra/newview/llfolderviewmodelinventory.h @@ -45,6 +45,7 @@ public:  	virtual LLFolderType::EType getPreferredType() const = 0;  	virtual void showProperties(void) = 0;  	virtual BOOL isItemInTrash( void) const { return FALSE; } // TODO: make   into pure virtual. +	virtual BOOL isAgentInventory() const { return FALSE; }  	virtual BOOL isUpToDate() const = 0;  	virtual bool hasChildren() const = 0;  	virtual LLInventoryType::EType getInventoryType() const = 0; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index d35d8456be..04f89af989 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -138,6 +138,35 @@ bool isMarketplaceSendAction(const std::string& action)  	return ("send_to_marketplace" == action);  } +bool isPanelActive(const std::string& panel_name) +{ +    LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE); +    return (active_panel && (active_panel->getName() == panel_name)); +} + +bool isParentSystemFolder(const LLInventoryModel* model, const LLUUID& folder_id) +{ +    if (!model || folder_id.isNull()) return false; + +    LLViewerInventoryCategory* cat = model->getCategory(folder_id); +    if (cat) +    { +        if (cat->getPreferredType() == LLFolderType::FT_ROOT_INVENTORY) +        { +            return false; +        } +        if (LLFolderType::lookupIsProtectedType(cat->getPreferredType())) +        { +            return true; +        } +        else +        { +            return isParentSystemFolder(model, cat->getParentUUID()); +        } +    } +    return false; +} +  // Used by LLFolderBridge as callback for directory fetching recursion  class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver  { @@ -888,8 +917,7 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,  		disabled_items.push_back(std::string("Properties"));  	} -	LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE); -	if (active_panel && (active_panel->getName() != "All Items")) +	if (!isPanelActive("All Items"))  	{  		items.push_back(std::string("Show in Main Panel"));  	} @@ -959,7 +987,7 @@ void LLInvFVBridge::addTrashContextMenuOptions(menuentry_vec_t &items,  		}  	}  	items.push_back(std::string("Purge Item")); -	if (!isItemRemovable()) +	if (!isItemRemovable() || isPanelActive("Favorite Items"))  	{  		disabled_items.push_back(std::string("Purge Item"));  	} @@ -980,7 +1008,7 @@ void LLInvFVBridge::addDeleteContextMenuOptions(menuentry_vec_t &items,  	items.push_back(std::string("Delete")); -	if (!isItemRemovable()) +	if (!isItemRemovable() || isPanelActive("Favorite Items"))  	{  		disabled_items.push_back(std::string("Delete"));  	} @@ -1835,28 +1863,11 @@ void LLItemBridge::restoreToWorld()  void LLItemBridge::gotoItem()  { -	LLInventoryObject *obj = getInventoryObject(); -	if (obj && obj->getIsLinkType()) -	{ -		const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX); -		if (gInventory.isObjectDescendentOf(obj->getLinkedUUID(), inbox_id)) -		{ -			LLSidepanelInventory *sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory"); -			if (sidepanel_inventory && sidepanel_inventory->getInboxPanel()) -			{ -				sidepanel_inventory->getInboxPanel()->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO); -			} -		} -		else -		{ -			LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(); -			if (active_panel) -			{ -				active_panel->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO); -			} -		} - -	} +    LLInventoryObject *obj = getInventoryObject(); +    if (obj && obj->getIsLinkType()) +    { +        show_item_original(obj->getUUID()); +    }  }  LLUIImagePtr LLItemBridge::getIcon() const @@ -4010,6 +4021,7 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t&   items  		disabled_items.push_back(std::string("New Clothes"));  		disabled_items.push_back(std::string("New Body Parts"));  		disabled_items.push_back(std::string("upload_def")); +		disabled_items.push_back(std::string("Set Favorites folder"));  	}  	if (favorites == mUUID)  	{ @@ -4037,6 +4049,7 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t&   items  		disabled_items.push_back(std::string("New Clothes"));  		disabled_items.push_back(std::string("New Body Parts"));  		disabled_items.push_back(std::string("upload_def")); +		disabled_items.push_back(std::string("Set Favorites folder"));      }      if (marketplace_listings_id == mUUID)      { @@ -4045,14 +4058,14 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t&   items          disabled_items.push_back(std::string("Cut"));          disabled_items.push_back(std::string("Delete"));      } + +	if (isPanelActive("Favorite Items")) +	{ +		disabled_items.push_back(std::string("Delete")); +	}  	if(trash_id == mUUID)  	{ -		bool is_recent_panel = false; -		LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(FALSE); -		if (active_panel && (active_panel->getName() == "Recent Items")) -		{ -			is_recent_panel = true; -		} +		bool is_recent_panel = isPanelActive("Recent Items");  		// This is the trash.  		items.push_back(std::string("Empty Trash")); @@ -4101,6 +4114,16 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t&   items                      items.push_back(std::string("New Body Parts"));                      items.push_back(std::string("New Settings"));                      items.push_back(std::string("upload_def")); + +                    if (!LLFolderType::lookupIsProtectedType(getPreferredType()) && !isParentSystemFolder(model, mUUID)) +                    { +                        items.push_back(std::string("Set Favorites folder")); +                    } +                    if (!LLEnvironment::instance().isInventoryEnabled()) +                    { +                        disabled_items.push_back("New Settings"); +                    } +                  }  			}  			getClipboardEntries(false, items, disabled_items, flags); @@ -7212,21 +7235,17 @@ void LLLinkFolderBridge::performAction(LLInventoryModel* model, std::string acti  }  void LLLinkFolderBridge::gotoItem()  { -	const LLUUID &cat_uuid = getFolderID(); -	if (!cat_uuid.isNull()) -	{ -		LLFolderViewItem *base_folder = mInventoryPanel.get()->getItemByID(cat_uuid); -		if (base_folder) -		{ -			if (LLInventoryModel* model = getInventoryModel()) -			{ -				model->fetchDescendentsOf(cat_uuid); -			} -			base_folder->setOpen(TRUE); -			mRoot->setSelection(base_folder,TRUE); -			mRoot->scrollToShowSelection(); -		} -	} +    LLItemBridge::gotoItem(); + +    const LLUUID &cat_uuid = getFolderID(); +    if (!cat_uuid.isNull()) +    { +        LLFolderViewItem *base_folder = LLInventoryPanel::getActiveInventoryPanel()->getItemByID(cat_uuid); +        if (base_folder) +        { +            base_folder->setOpen(TRUE); +        } +    }  }  const LLUUID &LLLinkFolderBridge::getFolderID() const  { diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 72013f7396..72631174e7 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -63,7 +63,8 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p)  	mPermissions(p.permissions),  	mFilterTypes(p.types),  	mFilterUUID(p.uuid), -	mFilterLinks(p.links) +	mFilterLinks(p.links), +	mSearchVisibility(p.search_visibility)  {  } @@ -154,6 +155,7 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)  	passed = passed && checkAgainstPermissions(listener);  	passed = passed && checkAgainstFilterLinks(listener);  	passed = passed && checkAgainstCreator(listener); +	passed = passed && checkAgainstSearchVisibility(listener);  	return passed;  } @@ -582,6 +584,27 @@ bool LLInventoryFilter::checkAgainstCreator(const LLFolderViewModelItemInventory  	}  } +bool LLInventoryFilter::checkAgainstSearchVisibility(const LLFolderViewModelItemInventory* listener) const +{ +	if (!listener || !hasFilterString()) return TRUE; + +	const LLUUID object_id = listener->getUUID(); +	const LLInventoryObject *object = gInventory.getObject(object_id); +	if (!object) return TRUE; + +	const BOOL is_link = object->getIsLinkType(); +	if (is_link && ((mFilterOps.mSearchVisibility & VISIBILITY_LINKS) == 0)) +		return FALSE; + +	if (listener->isItemInTrash() && ((mFilterOps.mSearchVisibility & VISIBILITY_TRASH) == 0)) +		return FALSE; + +	if (!listener->isAgentInventory() && ((mFilterOps.mSearchVisibility & VISIBILITY_LIBRARY) == 0)) +		return FALSE; + +	return TRUE; +} +  const std::string& LLInventoryFilter::getFilterSubString(BOOL trim) const  {  	return mFilterSubString; @@ -750,6 +773,61 @@ void LLInventoryFilter::setFilterMarketplaceListingFolders(bool select_only_list      }  } + +void LLInventoryFilter::toggleSearchVisibilityLinks() +{ +	bool hide_links = mFilterOps.mSearchVisibility & VISIBILITY_LINKS; +	if (hide_links) +	{ +		mFilterOps.mSearchVisibility &= ~VISIBILITY_LINKS; +	} +	else +	{ +		mFilterOps.mSearchVisibility |= VISIBILITY_LINKS; +	} + +	if (hasFilterString()) +	{ +		setModified(hide_links ? FILTER_MORE_RESTRICTIVE : FILTER_LESS_RESTRICTIVE); +	} +} + +void LLInventoryFilter::toggleSearchVisibilityTrash() +{ +	bool hide_trash = mFilterOps.mSearchVisibility & VISIBILITY_TRASH; +	if (hide_trash) +	{ +		mFilterOps.mSearchVisibility &= ~VISIBILITY_TRASH; +	} +	else +	{ +		mFilterOps.mSearchVisibility |= VISIBILITY_TRASH; +	} + +	if (hasFilterString()) +	{ +		setModified(hide_trash ? FILTER_MORE_RESTRICTIVE : FILTER_LESS_RESTRICTIVE); +	} +} + +void LLInventoryFilter::toggleSearchVisibilityLibrary() +{ +	bool hide_library = mFilterOps.mSearchVisibility & VISIBILITY_LIBRARY; +	if (hide_library) +	{ +		mFilterOps.mSearchVisibility &= ~VISIBILITY_LIBRARY; +	} +	else +	{ +		mFilterOps.mSearchVisibility |= VISIBILITY_LIBRARY; +	} + +	if (hasFilterString()) +	{ +		setModified(hide_library ? FILTER_MORE_RESTRICTIVE : FILTER_LESS_RESTRICTIVE); +	} +} +  void LLInventoryFilter::setFilterNoMarketplaceFolder()  {      mFilterOps.mFilterTypes |= FILTERTYPE_NO_MARKETPLACE_ITEMS; @@ -861,6 +939,44 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)  	}  } +void LLInventoryFilter::setSearchVisibilityTypes(U32 types) +{ +	if (mFilterOps.mSearchVisibility != types) +	{ +		// keep current items only if no perm bits getting turned off +		BOOL fewer_bits_set = (mFilterOps.mSearchVisibility & ~types); +		BOOL more_bits_set = (~mFilterOps.mSearchVisibility & types); +		mFilterOps.mSearchVisibility = types; + +		if (more_bits_set && fewer_bits_set) +		{ +			setModified(FILTER_RESTART); +		} +		else if (more_bits_set) +		{ +			// target must have all requested permission bits, so more bits == more restrictive +			setModified(FILTER_MORE_RESTRICTIVE); +		} +		else if (fewer_bits_set) +		{ +			setModified(FILTER_LESS_RESTRICTIVE); +		} +	} +} + +void LLInventoryFilter::setSearchVisibilityTypes(const Params& params) +{ +	if (!params.validateBlock()) +	{ +		return; +	} + +	if (params.filter_ops.search_visibility.isProvided()) +	{ +		setSearchVisibilityTypes(params.filter_ops.search_visibility); +	} +} +  void LLInventoryFilter::setFilterPermissions(PermissionMask perms)  {  	if (mFilterOps.mPermissions != perms) @@ -1262,6 +1378,18 @@ const std::string& LLInventoryFilter::getFilterText()  		filtered_by_all_types = FALSE;  	} +	if (isFilterObjectTypesWith(LLInventoryType::IT_SETTINGS)) +	{ +		filtered_types +=  LLTrans::getString("Settings"); +		filtered_by_type = TRUE; +		num_filter_types++; +	} +	else +	{ +		not_filtered_types +=  LLTrans::getString("Settings"); +		filtered_by_all_types = FALSE; +	} +  	if (!LLInventoryModelBackgroundFetch::instance().folderFetchActive()  		&& filtered_by_type  		&& !filtered_by_all_types) @@ -1317,6 +1445,7 @@ void LLInventoryFilter::toParams(Params& params) const  	params.filter_ops.show_folder_state = getShowFolderState();  	params.filter_ops.creator_type = getFilterCreatorType();  	params.filter_ops.permissions = getFilterPermissions(); +	params.filter_ops.search_visibility = getSearchVisibilityTypes();  	params.substring = getFilterSubString();  	params.since_logoff = isSinceLogoff();  } @@ -1340,6 +1469,7 @@ void LLInventoryFilter::fromParams(const Params& params)  	setShowFolderState(params.filter_ops.show_folder_state);  	setFilterCreator(params.filter_ops.creator_type);  	setFilterPermissions(params.filter_ops.permissions); +	setSearchVisibilityTypes(params.filter_ops.search_visibility);  	setFilterSubString(params.substring);  	setDateRangeLastLogoff(params.since_logoff);  } @@ -1369,6 +1499,11 @@ U64 LLInventoryFilter::getFilterSettingsTypes() const      return mFilterOps.mFilterSettingsTypes;  } +U64 LLInventoryFilter::getSearchVisibilityTypes() const +{ +	return mFilterOps.mSearchVisibility; +} +  bool LLInventoryFilter::hasFilterString() const  {  	return mFilterSubString.size() > 0; diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h index be02ee3623..0580261c43 100644 --- a/indra/newview/llinventoryfilter.h +++ b/indra/newview/llinventoryfilter.h @@ -99,6 +99,14 @@ public:  		FILTERCREATOR_OTHERS  	}; +	enum ESearchVisibility +	{ +		VISIBILITY_NONE = 0, +		VISIBILITY_TRASH = 0x1 << 0, +		VISIBILITY_LIBRARY = 0x1 << 1, +		VISIBILITY_LINKS	= 0x1 << 2 +	}; +  	struct FilterOps  	{  		struct DateRange : public LLInitParam::Block<DateRange> @@ -116,11 +124,13 @@ public:  		struct Params : public LLInitParam::Block<Params>  		{ -			Optional<U32>				types; +			Optional<U32>				types, +										search_visibility;  			Optional<U64>				object_types,  										wearable_types,                                          settings_types,  										category_types; +										  			Optional<EFilterLink>		links;  			Optional<LLUUID>			uuid;  			Optional<DateRange>			date_range; @@ -137,6 +147,7 @@ public:                  settings_types("settings_types", 0xffffFFFFffffFFFFULL),  				category_types("category_types", 0xffffFFFFffffFFFFULL),  				links("links", FILTERLINK_INCLUDE_LINKS), +				search_visibility("search_visibility", 0xFFFFFFFF),  				uuid("uuid"),  				date_range("date_range"),  				hours_ago("hours_ago", 0), @@ -149,7 +160,8 @@ public:  		FilterOps(const Params& = Params()); -		U32 			mFilterTypes; +		U32 			mFilterTypes, +						mSearchVisibility;  		U64				mFilterObjectTypes,   // For _OBJECT  						mFilterWearableTypes,                          mFilterSettingsTypes, // for _SETTINGS @@ -193,7 +205,8 @@ public:  	U64 				getFilterObjectTypes() const;  	U64					getFilterCategoryTypes() const;  	U64					getFilterWearableTypes() const; -    U64                 getFilterSettingsTypes() const; +	U64					getFilterSettingsTypes() const; +	U64					getSearchVisibilityTypes() const;  	bool 				isFilterObjectTypesWith(LLInventoryType::EType t) const;  	void 				setFilterObjectTypes(U64 types); @@ -213,6 +226,12 @@ public:  	ESearchType			getSearchType() { return mSearchType; }  	void 				setFilterCreator(EFilterCreatorType type); +	void				toggleSearchVisibilityLinks(); +	void				toggleSearchVisibilityTrash(); +	void				toggleSearchVisibilityLibrary(); +	void 				setSearchVisibilityTypes(U32 types); +	void 				setSearchVisibilityTypes(const Params& params); +  	void 				setFilterSubString(const std::string& string);  	const std::string& 	getFilterSubString(BOOL trim = FALSE) const;  	const std::string& 	getFilterSubStringOrig() const { return mFilterSubStringOrig; }  @@ -309,6 +328,7 @@ private:  	bool 				checkAgainstPermissions(const LLInventoryItem* item) const;  	bool 				checkAgainstFilterLinks(const class LLFolderViewModelItemInventory* listener) const;  	bool 				checkAgainstCreator(const class LLFolderViewModelItemInventory* listener) const; +	bool				checkAgainstSearchVisibility(const class LLFolderViewModelItemInventory* listener) const;  	bool				checkAgainstClipboard(const LLUUID& object_id) const;  	FilterOps				mFilterOps; diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 7a0ea8b668..f84bc68c82 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -774,40 +774,45 @@ void show_item_profile(const LLUUID& item_uuid)  void show_item_original(const LLUUID& item_uuid)  { -	LLFloater* floater_inventory = LLFloaterReg::getInstance("inventory"); -	if (!floater_inventory) -	{ -		LL_WARNS() << "Could not find My Inventory floater" << LL_ENDL; -		return; -	} - -	//sidetray inventory panel -	LLSidepanelInventory *sidepanel_inventory =	LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory"); - -	bool do_reset_inventory_filter = !floater_inventory->isInVisibleChain(); +    LLFloater* floater_inventory = LLFloaterReg::getInstance("inventory"); +    if (!floater_inventory) +    { +        LL_WARNS() << "Could not find My Inventory floater" << LL_ENDL; +        return; +    } +    LLSidepanelInventory *sidepanel_inventory =	LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory"); +    if (sidepanel_inventory) +    { +        LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel(); +        if (main_inventory) +        { +            main_inventory->resetFilters(); +        } +        reset_inventory_filter(); -	LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(); -	if (!active_panel)  -	{ -		//this may happen when there is no floatera and other panel is active in inventory tab +        if (!LLFloaterReg::getTypedInstance<LLFloaterSidePanelContainer>("inventory")->isInVisibleChain()) +        { +            LLFloaterReg::toggleInstanceOrBringToFront("inventory"); +        } -		if	(sidepanel_inventory) -		{ -			sidepanel_inventory->showInventoryPanel(); -		} -	} -	 -	active_panel = LLInventoryPanel::getActiveInventoryPanel(); -	if (!active_panel)  -	{ -		return; -	} -	active_panel->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_YES); -	 -	if(do_reset_inventory_filter) -	{ -		reset_inventory_filter(); -	} +        const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX); +        if (gInventory.isObjectDescendentOf(gInventory.getLinkedItemID(item_uuid), inbox_id)) +        { +            if (sidepanel_inventory->getInboxPanel()) +            { +                sidepanel_inventory->openInbox(); +                sidepanel_inventory->getInboxPanel()->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_YES); +            } +        } +        else +        { +            sidepanel_inventory->selectAllItemsPanel(); +            if (sidepanel_inventory->getActivePanel()) +            { +                sidepanel_inventory->getActivePanel()->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_YES); +            } +        } +    }  } diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 28db6a5808..48187c6179 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -543,6 +543,11 @@ const LLUUID LLInventoryModel::findUserDefinedCategoryUUIDForType(LLFolderType::          cat_id = LLUUID(gSavedPerAccountSettings.getString("AnimationUploadFolder"));          break;      } +    case LLFolderType::FT_FAVORITE: +    { +        cat_id = LLUUID(gSavedPerAccountSettings.getString("FavoritesFolder")); +        break; +    }      default:          break;      } diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 74d9e895c2..bca3cc0cf7 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -158,7 +158,8 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :  	mViewsInitialized(VIEWS_UNINITIALIZED),  	mInvFVBridgeBuilder(NULL),  	mInventoryViewModel(p.name), -	mGroupedItemBridge(new LLFolderViewGroupedItemBridge) +	mGroupedItemBridge(new LLFolderViewGroupedItemBridge), +	mFocusSelection(false)  {  	mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER; @@ -180,6 +181,7 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :  	mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));  	mCommitCallbackRegistrar.add("Inventory.Share",  boost::bind(&LLAvatarActions::shareWithAvatars, this));  	mCommitCallbackRegistrar.add("Inventory.FileUploadLocation", boost::bind(&LLInventoryPanel::fileUploadLocation, this, _2)); +	mCommitCallbackRegistrar.add("Inventory.SetFavoritesFolder", boost::bind(&LLInventoryPanel::setFavoritesFolder, this, _2));  }  LLFolderView * LLInventoryPanel::createFolderRoot(LLUUID root_id ) @@ -1240,6 +1242,7 @@ void LLInventoryPanel::setSelectCallback(const boost::function<void (const std::  void LLInventoryPanel::clearSelection()  {  	mSelectThisID.setNull(); +	mFocusSelection = false;  }  LLInventoryPanel::selected_items_t LLInventoryPanel::getSelectedItems() const @@ -1469,6 +1472,11 @@ void LLInventoryPanel::fileUploadLocation(const LLSD& userdata)      }  } +void LLInventoryPanel::setFavoritesFolder(const LLSD& userdata) +{ +    gSavedPerAccountSettings.setString("FavoritesFolder", LLFolderBridge::sSelf.get()->getUUID().asString()); +} +  void LLInventoryPanel::purgeSelectedItems()  {      if (!mFolderRoot.get()) return; @@ -1714,15 +1722,17 @@ LLFolderViewFolder* LLInventoryPanel::getFolderByID(const LLUUID& id)  void LLInventoryPanel::setSelectionByID( const LLUUID& obj_id, BOOL    take_keyboard_focus )  {  	LLFolderViewItem* itemp = getItemByID(obj_id); -	if(itemp && itemp->getViewModelItem()) +	if(itemp && itemp->getViewModelItem() && itemp->passedFilter())  	{  		itemp->arrangeAndSet(TRUE, take_keyboard_focus);  		mSelectThisID.setNull(); +		mFocusSelection = false;  		return;  	}  	else  	{  		// save the desired item to be selected later (if/when ready) +		mFocusSelection = take_keyboard_focus;  		mSelectThisID = obj_id;  	}  } @@ -1731,7 +1741,7 @@ void LLInventoryPanel::updateSelection()  {  	if (mSelectThisID.notNull())  	{ -		setSelectionByID(mSelectThisID, false); +		setSelectionByID(mSelectThisID, mFocusSelection);  	}  } @@ -1848,6 +1858,96 @@ LLInventoryRecentItemsPanel::LLInventoryRecentItemsPanel( const Params& params)  	mInvFVBridgeBuilder = &RECENT_ITEMS_BUILDER;  } +static LLDefaultChildRegistry::Register<LLInventoryFavoriteItemsPanel> t_favorites_inventory_panel("favorites_inventory_panel"); + +LLInventoryFavoriteItemsPanel::LLInventoryFavoriteItemsPanel(const Params& params) +    : LLInventoryPanel(params) +{ +    std::string ctrl_name = "FavoritesFolder"; +    if (gSavedPerAccountSettings.controlExists(ctrl_name)) +    { +        LLPointer<LLControlVariable> cntrl_ptr = gSavedPerAccountSettings.getControl(ctrl_name); +        if (cntrl_ptr.notNull()) +        { +            mFolderChangedSignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&LLInventoryFavoriteItemsPanel::updateFavoritesRootFolder, this)); +        } +    } +} + +void LLInventoryFavoriteItemsPanel::setSelectCallback(const boost::function<void(const std::deque<LLFolderViewItem*>& items, BOOL user_action)>& cb) +{ +    if (mFolderRoot.get()) +    { +        mFolderRoot.get()->setSelectCallback(cb); +        mSelectionCallback = cb; +    } +} + +void LLInventoryFavoriteItemsPanel::initFromParams(const Params& p) +{ +    Params fav_params(p); +    fav_params.start_folder.id = gInventory.findUserDefinedCategoryUUIDForType(LLFolderType::FT_FAVORITE); +    LLInventoryPanel::initFromParams(fav_params); +    updateFavoritesRootFolder(); +} + +void LLInventoryFavoriteItemsPanel::updateFavoritesRootFolder() +{ +    const LLUUID& folder_id = gInventory.findUserDefinedCategoryUUIDForType(LLFolderType::FT_FAVORITE); + +    bool is_favorites_set = (folder_id != gInventory.findCategoryUUIDForTypeInRoot(LLFolderType::FT_FAVORITE, true, gInventory.getRootFolderID())); + +    if (!is_favorites_set || folder_id != getRootFolderID()) +    { +        LLUUID root_id = folder_id; +        if (mFolderRoot.get()) +        { +            removeItemID(getRootFolderID()); +            mFolderRoot.get()->destroyView(); +        } + +        mCommitCallbackRegistrar.pushScope(); +        { +            LLFolderView* folder_view = createFolderRoot(root_id); +            mFolderRoot = folder_view->getHandle(); + +            addItemID(root_id, mFolderRoot.get()); + + +            LLRect scroller_view_rect = getRect(); +            scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom); +            LLScrollContainer::Params scroller_params(mParams.scroll()); +            scroller_params.rect(scroller_view_rect); + +            if (mScroller) +            { +                removeChild(mScroller); +                delete mScroller; +                mScroller = NULL; +            } +            mScroller = LLUICtrlFactory::create<LLFolderViewScrollContainer>(scroller_params); +            addChild(mScroller); +            mScroller->addChild(mFolderRoot.get()); +            mFolderRoot.get()->setScrollContainer(mScroller); +            mFolderRoot.get()->setFollowsAll(); +            mFolderRoot.get()->addChild(mFolderRoot.get()->mStatusTextBox); + +            if (!mSelectionCallback.empty()) +            { +                mFolderRoot.get()->setSelectCallback(mSelectionCallback); +            } +        } +        mCommitCallbackRegistrar.popScope(); +        mFolderRoot.get()->setCallbackRegistrar(&mCommitCallbackRegistrar); + +        if (is_favorites_set) +        { +            buildNewViews(folder_id); +        } +        mFolderRoot.get()->setShowEmptyMessage(!is_favorites_set); +    } +} +  /************************************************************************/  /* Asset Pre-Filtered Inventory Panel related class                     */  /************************************************************************/ diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index ad6010f09c..9d6d56dd69 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -220,6 +220,7 @@ public:  	void doCreate(const LLSD& userdata);  	bool beginIMSession();  	void fileUploadLocation(const LLSD& userdata); +	void setFavoritesFolder(const LLSD& userdata);  	void purgeSelectedItems();  	bool attachObject(const LLSD& userdata);  	static void idle(void* user_data); @@ -269,6 +270,7 @@ protected:  	LLInventoryModel*			mInventory;  	LLInventoryObserver*		mInventoryObserver;  	LLInvPanelComplObserver*	mCompletionObserver; +	bool						mFocusSelection;  	bool						mAcceptsDragAndDrop;  	bool 						mAllowMultiSelect;  	bool 						mAllowDrag; diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp index c243f8b4f0..a17dc674ac 100644 --- a/indra/newview/lllandmarkactions.cpp +++ b/indra/newview/lllandmarkactions.cpp @@ -228,23 +228,6 @@ LLViewerInventoryItem* LLLandmarkActions::findLandmarkForAgentPos()  	return findLandmarkForGlobalPos(gAgent.getPositionGlobal());  } -bool LLLandmarkActions::canCreateLandmarkHere() -{ -	LLParcel* agent_parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); -	if(!agent_parcel) -	{ -		LL_WARNS() << "No agent region" << LL_ENDL; -		return false; -	} -	if (agent_parcel->getAllowLandmark() -		|| LLViewerParcelMgr::isParcelOwnedByAgent(agent_parcel, GP_LAND_ALLOW_LANDMARK)) -	{ -		return true; -	} - -	return false; -} -  void LLLandmarkActions::createLandmarkHere(  	const std::string& name,   	const std::string& desc,  @@ -261,11 +244,6 @@ void LLLandmarkActions::createLandmarkHere(  		LL_WARNS() << "No agent parcel" << LL_ENDL;  		return;  	} -	if (!canCreateLandmarkHere()) -	{ -		LLNotificationsUtil::add("CannotCreateLandmarkNotOwner"); -		return; -	}  	create_inventory_item(gAgent.getID(), gAgent.getSessionID(),  		folder_id, LLTransactionID::tnull, diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h index 870d92811e..ae7b072fcb 100644 --- a/indra/newview/lllandmarkactions.h +++ b/indra/newview/lllandmarkactions.h @@ -72,12 +72,6 @@ public:  	 */  	static LLViewerInventoryItem* findLandmarkForAgentPos(); - -	/** -	 * @brief Checks whether agent has rights to create landmark for current parcel. -	 */ -	static bool canCreateLandmarkHere(); -  	/**  	 * @brief Creates landmark for current parcel.  	 */ diff --git a/indra/newview/llpaneleditsky.cpp b/indra/newview/llpaneleditsky.cpp index 2e26b69144..a169712bd8 100644 --- a/indra/newview/llpaneleditsky.cpp +++ b/indra/newview/llpaneleditsky.cpp @@ -69,11 +69,15 @@ namespace      const std::string   FIELD_SKY_GLOW_SIZE("glow_size");      const std::string   FIELD_SKY_STAR_BRIGHTNESS("star_brightness");      const std::string   FIELD_SKY_SUN_ROTATION("sun_rotation"); +    const std::string   FIELD_SKY_SUN_AZIMUTH("sun_azimuth"); +    const std::string   FIELD_SKY_SUN_ELEVATION("sun_elevation");      const std::string   FIELD_SKY_SUN_IMAGE("sun_image");      const std::string   FIELD_SKY_SUN_SCALE("sun_scale");      const std::string   FIELD_SKY_SUN_BEACON("sunbeacon");      const std::string   FIELD_SKY_MOON_BEACON("moonbeacon");      const std::string   FIELD_SKY_MOON_ROTATION("moon_rotation"); +    const std::string   FIELD_SKY_MOON_AZIMUTH("moon_azimuth"); +    const std::string   FIELD_SKY_MOON_ELEVATION("moon_elevation");      const std::string   FIELD_SKY_MOON_IMAGE("moon_image");      const std::string   FIELD_SKY_MOON_SCALE("moon_scale");      const std::string   FIELD_SKY_MOON_BRIGHTNESS("moon_brightness"); @@ -473,12 +477,16 @@ BOOL LLPanelSettingsSkySunMoonTab::postBuild()      getChild<LLUICtrl>(FIELD_SKY_GLOW_SIZE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onGlowChanged(); });      getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onStarBrightnessChanged(); });      getChild<LLUICtrl>(FIELD_SKY_SUN_ROTATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunRotationChanged(); }); +    getChild<LLUICtrl>(FIELD_SKY_SUN_AZIMUTH)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunAzimElevChanged(); }); +    getChild<LLUICtrl>(FIELD_SKY_SUN_ELEVATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunAzimElevChanged(); });      getChild<LLUICtrl>(FIELD_SKY_SUN_IMAGE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunImageChanged(); });      getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunScaleChanged(); });      getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setBlankImageAssetID(LLSettingsSky::GetBlankSunTextureId());      getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setDefaultImageAssetID(LLSettingsSky::GetBlankSunTextureId());      getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setAllowNoTexture(TRUE);      getChild<LLUICtrl>(FIELD_SKY_MOON_ROTATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonRotationChanged(); }); +    getChild<LLUICtrl>(FIELD_SKY_MOON_AZIMUTH)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonAzimElevChanged(); }); +    getChild<LLUICtrl>(FIELD_SKY_MOON_ELEVATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonAzimElevChanged(); });      getChild<LLUICtrl>(FIELD_SKY_MOON_IMAGE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonImageChanged(); });      getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setDefaultImageAssetID(LLSettingsSky::GetDefaultMoonTextureId());      getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setBlankImageAssetID(LLSettingsSky::GetDefaultMoonTextureId()); @@ -537,13 +545,29 @@ void LLPanelSettingsSkySunMoonTab::refresh()      getChild<LLUICtrl>(FIELD_SKY_GLOW_FOCUS)->setValue(glow.mV[2] / SLIDER_SCALE_GLOW_B);      getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setValue(mSkySettings->getStarBrightness()); -    getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->setRotation(mSkySettings->getSunRotation());      getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setValue(mSkySettings->getSunTextureId());      getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setValue(mSkySettings->getSunScale()); -    getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->setRotation(mSkySettings->getMoonRotation());      getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setValue(mSkySettings->getMoonTextureId());      getChild<LLUICtrl>(FIELD_SKY_MOON_SCALE)->setValue(mSkySettings->getMoonScale());      getChild<LLUICtrl>(FIELD_SKY_MOON_BRIGHTNESS)->setValue(mSkySettings->getMoonBrightness()); + +    // Sun rotation values +    F32 azimuth, elevation; +    LLQuaternion quat = mSkySettings->getSunRotation(); +    LLVirtualTrackball::getAzimuthAndElevationDeg(quat, azimuth, elevation); + +    getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->setRotation(quat); +    getChild<LLUICtrl>(FIELD_SKY_SUN_AZIMUTH)->setValue(azimuth); +    getChild<LLUICtrl>(FIELD_SKY_SUN_ELEVATION)->setValue(elevation); + +    // Moon rotation values +    quat = mSkySettings->getMoonRotation(); +    LLVirtualTrackball::getAzimuthAndElevationDeg(quat, azimuth, elevation); + +    getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->setRotation(quat); +    getChild<LLUICtrl>(FIELD_SKY_MOON_AZIMUTH)->setValue(azimuth); +    getChild<LLUICtrl>(FIELD_SKY_MOON_ELEVATION)->setValue(elevation); +  }  //------------------------------------------------------------------------- @@ -583,10 +607,47 @@ void LLPanelSettingsSkySunMoonTab::onStarBrightnessChanged()  void LLPanelSettingsSkySunMoonTab::onSunRotationChanged()  { -    if (!mSkySettings) return; -    mSkySettings->setSunRotation(getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->getRotation()); -    mSkySettings->update(); -    setIsDirty(); +    LLQuaternion quat = getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->getRotation(); + +    F32 azimuth, elevation; +    LLVirtualTrackball::getAzimuthAndElevationDeg(quat, azimuth, elevation); +    getChild<LLUICtrl>(FIELD_SKY_SUN_AZIMUTH)->setValue(azimuth); +    getChild<LLUICtrl>(FIELD_SKY_SUN_ELEVATION)->setValue(elevation); +    if (mSkySettings) +    { +        mSkySettings->setSunRotation(quat); +        mSkySettings->update(); +        setIsDirty(); +    } +} + +void LLPanelSettingsSkySunMoonTab::onSunAzimElevChanged() +{ +    F32 azimuth = getChild<LLUICtrl>(FIELD_SKY_SUN_AZIMUTH)->getValue().asReal(); +    F32 elevation = getChild<LLUICtrl>(FIELD_SKY_SUN_ELEVATION)->getValue().asReal(); +    LLQuaternion quat; + +    azimuth *= DEG_TO_RAD; +    elevation *= DEG_TO_RAD; + +    if (is_approx_zero(elevation)) +    { +        elevation = F_APPROXIMATELY_ZERO; +    } + +    quat.setAngleAxis(-elevation, 0, 1, 0); +    LLQuaternion az_quat; +    az_quat.setAngleAxis(F_TWO_PI - azimuth, 0, 0, 1); +    quat *= az_quat; + +    getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->setRotation(quat); + +    if (mSkySettings) +    { +        mSkySettings->setSunRotation(quat); +        mSkySettings->update(); +        setIsDirty(); +    }  }  void LLPanelSettingsSkySunMoonTab::onSunScaleChanged() @@ -607,10 +668,48 @@ void LLPanelSettingsSkySunMoonTab::onSunImageChanged()  void LLPanelSettingsSkySunMoonTab::onMoonRotationChanged()  { -    if (!mSkySettings) return; -    mSkySettings->setMoonRotation(getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->getRotation()); -    mSkySettings->update(); -    setIsDirty(); +    LLQuaternion quat = getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->getRotation(); + +    F32 azimuth, elevation; +    LLVirtualTrackball::getAzimuthAndElevationDeg(quat, azimuth, elevation); +    getChild<LLUICtrl>(FIELD_SKY_MOON_AZIMUTH)->setValue(azimuth); +    getChild<LLUICtrl>(FIELD_SKY_MOON_ELEVATION)->setValue(elevation); + +    if (mSkySettings) +    { +        mSkySettings->setMoonRotation(quat); +        mSkySettings->update(); +        setIsDirty(); +    } +} + +void LLPanelSettingsSkySunMoonTab::onMoonAzimElevChanged() +{ +    F32 azimuth = getChild<LLUICtrl>(FIELD_SKY_MOON_AZIMUTH)->getValue().asReal(); +    F32 elevation = getChild<LLUICtrl>(FIELD_SKY_MOON_ELEVATION)->getValue().asReal(); +    LLQuaternion quat; + +    azimuth *= DEG_TO_RAD; +    elevation *= DEG_TO_RAD; + +    if (is_approx_zero(elevation)) +    { +        elevation = F_APPROXIMATELY_ZERO; +    } + +    quat.setAngleAxis(-elevation, 0, 1, 0); +    LLQuaternion az_quat; +    az_quat.setAngleAxis(F_TWO_PI- azimuth, 0, 0, 1); +    quat *= az_quat; + +    getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->setRotation(quat); + +    if (mSkySettings) +    { +        mSkySettings->setMoonRotation(quat); +        mSkySettings->update(); +        setIsDirty(); +    }  }  void LLPanelSettingsSkySunMoonTab::onMoonImageChanged() diff --git a/indra/newview/llpaneleditsky.h b/indra/newview/llpaneleditsky.h index c02c9c95a0..d1c558c902 100644 --- a/indra/newview/llpaneleditsky.h +++ b/indra/newview/llpaneleditsky.h @@ -124,9 +124,11 @@ private:      void                    onGlowChanged();      void                    onStarBrightnessChanged();      void                    onSunRotationChanged(); +    void                    onSunAzimElevChanged();      void                    onSunScaleChanged();      void                    onSunImageChanged();      void                    onMoonRotationChanged(); +    void                    onMoonAzimElevChanged();      void                    onMoonScaleChanged();      void                    onMoonBrightnessChanged();      void                    onMoonImageChanged(); diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index 6751c25fb9..069fb32a56 100644 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -107,6 +107,18 @@ void LLPanelLandmarkInfo::resetLocation()  // virtual  void LLPanelLandmarkInfo::setInfoType(EInfoType type)  { +    LLUUID dest_folder; +    setInfoType(type, dest_folder); +} + +// Sets CREATE_LANDMARK infotype and creates landmark at desired folder +void LLPanelLandmarkInfo::setInfoAndCreateLandmark(const LLUUID& fodler_id) +{ +    setInfoType(CREATE_LANDMARK, fodler_id); +} + +void LLPanelLandmarkInfo::setInfoType(EInfoType type, const LLUUID &folder_id) +{  	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel");  	bool is_info_type_create_landmark = type == CREATE_LANDMARK; @@ -183,7 +195,7 @@ void LLPanelLandmarkInfo::setInfoType(EInfoType type)  			// remote parcel request to complete.  			if (!LLLandmarkActions::landmarkAlreadyExists())  			{ -				createLandmark(LLUUID()); +				createLandmark(folder_id);  			}  		}  		break; diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h index 9712736182..9a2e0c8f59 100644 --- a/indra/newview/llpanellandmarkinfo.h +++ b/indra/newview/llpanellandmarkinfo.h @@ -43,8 +43,12 @@ public:  	/*virtual*/ void resetLocation(); +    // If landmark doesn't exists, will create it at default folder  	/*virtual*/ void setInfoType(EInfoType type); +    // Sets CREATE_LANDMARK infotype and creates landmark at desired folder +    void setInfoAndCreateLandmark(const LLUUID& fodler_id); +  	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);  	// Displays landmark owner, creator and creation date info. @@ -59,13 +63,17 @@ public:  	// Select current landmark folder in combobox.  	BOOL setLandmarkFolder(const LLUUID& id); -	// Create a landmark for the current location -	// in a folder specified by folder_id. -	void createLandmark(const LLUUID& folder_id); -  	static std::string getFullFolderName(const LLViewerInventoryCategory* cat);  private: +    // Create a landmark for the current location +    // in a folder specified by folder_id. +    // Expects title and description to be initialized +    void createLandmark(const LLUUID& folder_id); + +    // If landmark doesn't exists, will create it at specified folder +    void setInfoType(EInfoType type, const LLUUID &folder_id); +  	void populateFoldersList();  	LLTextBox*			mOwner; diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index ccd8497484..6e8eac19fc 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -40,6 +40,7 @@  #include "llagent.h"  #include "llagentpicksinfo.h"  #include "llagentui.h" +#include "llavataractions.h"  #include "llcallbacklist.h"  #include "lldndbutton.h"  #include "llfloatersidepanelcontainer.h" @@ -784,7 +785,14 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const  		}  		else  		{ -			LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); +            LLSD args; +            args["type"] = "create_landmark"; +            if (view_model->getInventoryType() +                == LLInventoryType::IT_CATEGORY) +            { +                args["dest_folder"] = view_model->getUUID(); +            } +			LLFloaterSidePanelContainer::showPanel("places", args);  		}  	}   	else if ("category" == command_name) @@ -1036,8 +1044,12 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const  			// ... but except Received folder  			return !isReceivedFolderSelected();  		} +		if (mCurrentSelectedList == mLibraryInventoryPanel) +		{ +			return false; +		}  		//"Add a folder" is enabled by default (case when My Landmarks is empty) -		else return true; +		return true;  	}  	else if("create_pick" == command_name)  	{ @@ -1051,6 +1063,42 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const  		}  		return false;  	} +    else if ("add_landmark" == command_name) +    { +        bool is_single_selection = root_folder_view && root_folder_view->getSelectedCount() == 1; +        if (!is_single_selection) +        { +            return false; +        } +        if (mCurrentSelectedList == mLibraryInventoryPanel) +        { +            return false; +        } +        LLFolderViewModelItemInventory* view_model = getCurSelectedViewModelItem(); +        if (!view_model || view_model->getInventoryType() != LLInventoryType::IT_CATEGORY) +        { +            return false; +        } +        LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos(); +        if (landmark) +        { +            //already exists +            return false; +        } +        return true; +    } +    else if ("share" == command_name) +    { +        if (!mCurrentSelectedList) +        { +            return false; +        } +        if (!LLAvatarActions::canShareSelectedItems(mCurrentSelectedList)) +        { +            return false; +        } +        return true; +    }  	else  	{  		LL_WARNS() << "Unprocessed command has come: " << command_name << LL_ENDL; @@ -1078,6 +1126,10 @@ void LLLandmarksPanel::onCustomAction(const LLSD& userdata)  	{  		doActionOnCurSelectedLandmark(boost::bind(&LLLandmarksPanel::doCreatePick, this, _1));  	} +    else if ("share" == command_name && mCurrentSelectedList) +    { +        LLAvatarActions::shareWithAvatars(mCurrentSelectedList); +    }  	else if ("restore" == command_name && mCurrentSelectedList)  	{  		mCurrentSelectedList->doToSelected(userdata); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index fbc1b80857..d9138091c6 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -115,6 +115,7 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)  	  mSavedFolderState(NULL),  	  mFilterText(""),  	  mMenuGearDefault(NULL), +	  mMenuVisibility(NULL),  	  mMenuAddHandle(),  	  mNeedUploadCost(true)  { @@ -189,6 +190,16 @@ BOOL LLPanelMainInventory::postBuild()  		worn_filter.markDefault();  		mWornItemsPanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mWornItemsPanel, _1, _2));  	} + +	mFavoriteItemsPanel = getChild<LLInventoryFavoriteItemsPanel>("Favorite Items"); +	if (mFavoriteItemsPanel) +	{ +		LLInventoryFilter& recent_filter = mFavoriteItemsPanel->getFilter(); +		recent_filter.setEmptyLookupMessage("InventoryFavoritItemsNotSelected"); +		recent_filter.markDefault(); +		mFavoriteItemsPanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mFavoriteItemsPanel, _1, _2)); +	} +  	mSearchTypeCombo  = getChild<LLComboBox>("search_type");  	if(mSearchTypeCombo)  	{ @@ -219,6 +230,17 @@ BOOL LLPanelMainInventory::postBuild()  				recent_items_panel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::RECENTITEMS_SORT_ORDER));  			}  		} +		if(mActivePanel) +		{ +			if(savedFilterState.has(mActivePanel->getFilter().getName())) +			{ +				LLSD items = savedFilterState.get(mActivePanel->getFilter().getName()); +				LLInventoryFilter::Params p; +				LLParamSDParser parser; +				parser.readSD(items, p); +				mActivePanel->getFilter().setSearchVisibilityTypes(p); +			} +		}  	} @@ -229,6 +251,7 @@ BOOL LLPanelMainInventory::postBuild()  	}  	mGearMenuButton = getChild<LLMenuButton>("options_gear_btn"); +	mVisibilityMenuButton = getChild<LLMenuButton>("options_visibility_btn");  	initListCommandsHandlers(); @@ -254,6 +277,9 @@ BOOL LLPanelMainInventory::postBuild()  LLPanelMainInventory::~LLPanelMainInventory( void )  {  	// Save the filters state. +	// Some params types cannot be saved this way +	// for example, LLParamSDParser doesn't know about U64, +	// so some FilterOps params should be revised.  	LLSD filterRoot;  	LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");  	if (all_items_panel) @@ -1165,6 +1191,10 @@ void LLPanelMainInventory::initListCommandsHandlers()  	LLMenuGL* menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	mMenuAddHandle = menu->getHandle(); +	mMenuVisibility = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_inventory_search_visibility.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	mVisibilityMenuButton->setMenu(mMenuVisibility); +	mVisibilityMenuButton->setMenuPosition(LLMenuButton::MP_BOTTOM_LEFT); +  	// Update the trash button when selected item(s) get worn or taken off.  	LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLPanelMainInventory::updateListCommands, this));  } @@ -1354,6 +1384,21 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)  		}  		LLFloaterReg::showInstance("linkreplace", params);  	} + +	if (command_name == "toggle_search_trash") +	{ +		mActivePanel->getFilter().toggleSearchVisibilityTrash(); +	} + +	if (command_name == "toggle_search_library") +	{ +		mActivePanel->getFilter().toggleSearchVisibilityLibrary(); +	} + +	if (command_name == "include_links") +	{ +		mActivePanel->getFilter().toggleSearchVisibilityLinks(); +	}		  }  void LLPanelMainInventory::onVisibilityChange( BOOL new_visibility ) @@ -1404,7 +1449,7 @@ BOOL LLPanelMainInventory::isActionEnabled(const LLSD& userdata)  	}  	if (command_name == "delete")  	{ -		return getActivePanel()->isSelectionRemovable(); +		return getActivePanel()->isSelectionRemovable() && (getActivePanel() != mFavoriteItemsPanel);  	}  	if (command_name == "save_texture")  	{ @@ -1499,6 +1544,21 @@ BOOL LLPanelMainInventory::isActionChecked(const LLSD& userdata)  		return sort_order_mask & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP;  	} +	if (command_name == "toggle_search_trash") +	{ +		return (mActivePanel->getFilter().getSearchVisibilityTypes() & LLInventoryFilter::VISIBILITY_TRASH) != 0; +	} + +	if (command_name == "toggle_search_library") +	{ +		return (mActivePanel->getFilter().getSearchVisibilityTypes() & LLInventoryFilter::VISIBILITY_LIBRARY) != 0; +	} + +	if (command_name == "include_links") +	{ +		return (mActivePanel->getFilter().getSearchVisibilityTypes() & LLInventoryFilter::VISIBILITY_LINKS) != 0;	 +	}	 +  	return FALSE;  } diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index a6bdee233d..313e478bfe 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -37,6 +37,7 @@  class LLComboBox;  class LLFolderViewItem;  class LLInventoryPanel; +class LLInventoryFavoriteItemsPanel;  class LLSaveFolderState;  class LLFilterEditor;  class LLTabContainer; @@ -93,6 +94,8 @@ public:  	void toggleFindOptions(); +    void resetFilters(); +  protected:  	//  	// Misc functions @@ -117,7 +120,6 @@ protected:  	void doToSelected(const LLSD& userdata);  	void closeAllFolders();  	void doCreate(const LLSD& userdata); -	void resetFilters();  	void setSortBy(const LLSD& userdata);  	void saveTexture(const LLSD& userdata);  	bool isSaveTextureEnabled(const LLSD& userdata); @@ -136,6 +138,7 @@ private:  	LLHandle<LLFloater>			mFinderHandle;  	LLInventoryPanel*			mActivePanel;  	LLInventoryPanel*			mWornItemsPanel; +	LLInventoryFavoriteItemsPanel* mFavoriteItemsPanel;  	bool						mResortActivePanel;  	LLSaveFolderState*			mSavedFolderState;  	std::string					mFilterText; @@ -169,7 +172,9 @@ protected:  private:  	LLDragAndDropButton*		mTrashButton;  	LLToggleableMenu*			mMenuGearDefault; +	LLToggleableMenu*			mMenuVisibility;  	LLMenuButton*				mGearMenuButton; +	LLMenuButton*				mVisibilityMenuButton;  	LLHandle<LLView>			mMenuAddHandle;  	bool						mNeedUploadCost; diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 53870fb5c7..c038207628 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -388,7 +388,7 @@ void LLPanelPlaces::onOpen(const LLSD& key)  			// Update the buttons at the bottom of the panel  			updateVerbs();  		} -		else +		else // "create_landmark"  		{  			mFilterEditor->clear();  			onFilterEdit("", false); @@ -409,7 +409,8 @@ void LLPanelPlaces::onOpen(const LLSD& key)  			}  			else if (mPlaceInfoType == CREATE_LANDMARK_INFO_TYPE)  			{ -				mLandmarkInfo->setInfoType(LLPanelPlaceInfo::CREATE_LANDMARK); +				LLUUID dest_folder = key["dest_folder"]; +				mLandmarkInfo->setInfoAndCreateLandmark(dest_folder);  				if (key.has("x") && key.has("y") && key.has("z"))  				{ diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index fe0608d544..3f5664f431 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -396,9 +396,7 @@ LLContextMenu* LLTeleportHistoryPanel::ContextMenu::createMenu()  	// (N.B. callbacks don't take const refs as mID is local scope)  	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; -	registrar.add("TeleportHistory.Teleport",	boost::bind(&LLTeleportHistoryPanel::ContextMenu::onTeleport, this)); -	registrar.add("TeleportHistory.MoreInformation",boost::bind(&LLTeleportHistoryPanel::ContextMenu::onInfo, this)); -	registrar.add("TeleportHistory.CopyToClipboard",boost::bind(&LLTeleportHistoryPanel::ContextMenu::onCopyToClipboard, this)); +	registrar.add("TeleportHistory.Action", boost::bind(&LLTeleportHistoryPanel::ContextMenu::onUserAction, this, _2));  	// create the context menu from the XUI  	llassert(LLMenuGL::sMenuContainer != NULL); @@ -406,14 +404,27 @@ LLContextMenu* LLTeleportHistoryPanel::ContextMenu::createMenu()  		"menu_teleport_history_item.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());  } -void LLTeleportHistoryPanel::ContextMenu::onTeleport() +void LLTeleportHistoryPanel::ContextMenu::onUserAction(const LLSD& userdata)  { -	confirmTeleport(mIndex); -} - -void LLTeleportHistoryPanel::ContextMenu::onInfo() -{ -	LLTeleportHistoryFlatItem::showPlaceInfoPanel(mIndex); +    std::string command_name = userdata.asString(); +    if ("teleport" == command_name) +    { +        confirmTeleport(mIndex); +    } +    else if ("view" == command_name) +    { +        LLTeleportHistoryFlatItem::showPlaceInfoPanel(mIndex); +    } +    else if ("show_on_map" == command_name) +    { +        LLTeleportHistoryStorage::getInstance()->showItemOnMap(mIndex); +    } +    else if ("copy_slurl" == command_name) +    { +        LLVector3d globalPos = LLTeleportHistoryStorage::getInstance()->getItems()[mIndex].mGlobalPos; +        LLLandmarkActions::getSLURLfromPosGlobal(globalPos, +            boost::bind(&LLTeleportHistoryPanel::ContextMenu::gotSLURLCallback, _1)); +    }  }  //static @@ -427,13 +438,6 @@ void LLTeleportHistoryPanel::ContextMenu::gotSLURLCallback(const std::string& sl  	LLNotificationsUtil::add("CopySLURL", args);  } -void LLTeleportHistoryPanel::ContextMenu::onCopyToClipboard() -{ -	LLVector3d globalPos = LLTeleportHistoryStorage::getInstance()->getItems()[mIndex].mGlobalPos; -	LLLandmarkActions::getSLURLfromPosGlobal(globalPos, -		boost::bind(&LLTeleportHistoryPanel::ContextMenu::gotSLURLCallback, _1)); -} -  // Not yet implemented; need to remove buildPanel() from constructor when we switch  //static LLRegisterPanelClassWrapper<LLTeleportHistoryPanel> t_teleport_history("panel_teleport_history"); diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h index b88861c5c6..e0abbc47db 100644 --- a/indra/newview/llpanelteleporthistory.h +++ b/indra/newview/llpanelteleporthistory.h @@ -52,9 +52,7 @@ public:  	private:  		LLContextMenu* createMenu(); -		void onTeleport(); -		void onInfo(); -		void onCopyToClipboard(); +		void onUserAction(const LLSD& userdata);  		static void gotSLURLCallback(const std::string& slurl); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 17777c3ceb..3c250b3bb3 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -128,10 +128,12 @@  #include "llpanelpick.h"  #include "llpanelgrouplandmoney.h"  #include "llpanelgroupnotices.h" +#include "llparcel.h"  #include "llpreview.h"  #include "llpreviewscript.h"  #include "llproxy.h"  #include "llproductinforequest.h" +#include "llqueryflags.h"  #include "llselectmgr.h"  #include "llsky.h"  #include "llstatview.h" @@ -2257,6 +2259,14 @@ bool idle_startup()  		gAgentAvatarp->sendHoverHeight(); +		// look for parcels we own +		send_places_query(LLUUID::null, +			LLUUID::null, +			"", +			DFQ_AGENT_OWNED, +			LLParcel::C_ANY, +			""); +  		return TRUE;  	} diff --git a/indra/newview/llteleporthistorystorage.cpp b/indra/newview/llteleporthistorystorage.cpp index 8a5704939a..93fa457bd0 100644 --- a/indra/newview/llteleporthistorystorage.cpp +++ b/indra/newview/llteleporthistorystorage.cpp @@ -33,6 +33,8 @@  #include "lldir.h"  #include "llteleporthistory.h"  #include "llagent.h" +#include "llfloaterreg.h" +#include "llfloaterworldmap.h"  // Max offset for two global positions to consider them as equal  const F64 MAX_GLOBAL_POS_OFFSET = 5.0f; @@ -253,3 +255,23 @@ void LLTeleportHistoryStorage::goToItem(S32 idx)  	gAgent.teleportViaLocation(mItems[idx].mGlobalPos);  } +void LLTeleportHistoryStorage::showItemOnMap(S32 idx) +{ +    // Validate specified index. +    if (idx < 0 || idx >= (S32)mItems.size()) +    { +        LL_WARNS() << "Invalid teleport history index (" << idx << ") specified" << LL_ENDL; +        dump(); +        return; +    } + +    LLVector3d landmark_global_pos = mItems[idx].mGlobalPos; + +    LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); +    if (!landmark_global_pos.isExactlyZero() && worldmap_instance) +    { +        worldmap_instance->trackLocation(landmark_global_pos); +        LLFloaterReg::showInstance("world_map", "center"); +    } +} + diff --git a/indra/newview/llteleporthistorystorage.h b/indra/newview/llteleporthistorystorage.h index 946ac0af1a..3578923fd7 100644 --- a/indra/newview/llteleporthistorystorage.h +++ b/indra/newview/llteleporthistorystorage.h @@ -107,6 +107,13 @@ public:  	 */  	void					goToItem(S32 idx); +    /** +     * Show specific item on map. +     * +     * The item is specified by its index (starting from 0). +     */ +    void					showItemOnMap(S32 idx); +  private:  	void load(); diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index 6a29be4aa1..4f46d1c0a2 100644 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -121,6 +121,11 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal  				data.mURLExternal = mNotification->getURLOpenExternally();  			} +			if((*it).has("width")) +			{ +				data.mWidth = (*it)["width"].asInteger(); +			} +  			mButtonData.push_back(data);  			option_index++;  		} @@ -159,15 +164,29 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal  	// Calc total width of buttons  	S32 button_width = 0;  	S32 sp = font->getWidth(std::string("OO")); +	S32 btn_total_width = 0; +	S32 default_size_btns = 0;  	for( S32 i = 0; i < num_options; i++ ) -	{ +	{				  		S32 w = S32(font->getWidth( options[i].second ) + 0.99f) + sp + 2 * LLBUTTON_H_PAD; -		button_width = llmax( w, button_width ); +		if (mButtonData[i].mWidth > w) +		{ +			btn_total_width += mButtonData[i].mWidth; +		} +		else +		{ +			button_width = llmax(w, button_width); +			default_size_btns++; +		}  	} -	S32 btn_total_width = button_width; +  	if( num_options > 1 )  	{ -		btn_total_width = (num_options * button_width) + ((num_options - 1) * BTN_HPAD); +		btn_total_width = btn_total_width + (button_width * default_size_btns) + ((num_options - 1) * BTN_HPAD); +	} +	else +	{ +		btn_total_width = llmax(btn_total_width, button_width);  	}  	// Message: create text box using raw string, as text has been structure deliberately @@ -333,7 +352,7 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal  		if(btn)  		{  			btn->setName(options[i].first); -			btn->setRect(button_rect.setOriginAndSize( button_left, VPAD, button_width, BTN_HEIGHT )); +			btn->setRect(button_rect.setOriginAndSize( button_left, VPAD, (mButtonData[i].mWidth == 0) ? button_width : mButtonData[i].mWidth, BTN_HEIGHT ));  			btn->setLabel(options[i].second);  			btn->setFont(font); @@ -348,7 +367,7 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal  				btn->setFocus(TRUE);  			}  		} -		button_left += button_width + BTN_HPAD; +		button_left += ((mButtonData[i].mWidth == 0) ? button_width : mButtonData[i].mWidth) + BTN_HPAD;  	}  	setCheckBoxes(HPAD, VPAD); diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h index 9b4e054bf1..bd34e40642 100644 --- a/indra/newview/lltoastalertpanel.h +++ b/indra/newview/lltoastalertpanel.h @@ -82,9 +82,14 @@ private:  	struct ButtonData  	{ +		ButtonData() +		: mWidth(0) +		{} +		  		LLButton* mButton;  		std::string mURL;  		U32 mURLExternal; +		S32 mWidth;  	};  	std::vector<ButtonData> mButtonData; diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index bccf88128d..024f25bc98 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -387,9 +387,9 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images )              if (mIsScriptDialog)              {                  // we are using default width for script buttons so we can determinate button_rows -                //to get a number of rows we divide the required width of the buttons to button_panel_width -                S32 button_rows = llceil(F32(buttons.size() - 1) * (BUTTON_WIDTH + h_pad) / button_panel_width); -                //S32 button_rows = (buttons.size() - 1) * (BUTTON_WIDTH + h_pad) / button_panel_width; +                // to get a number of rows we divide the required width of the buttons to button_panel_width +                // buttons.size() is reduced by -2 due to presence of ignore button which is calculated independently a bit lower +                S32 button_rows = llceil(F32(buttons.size() - 2) * (BUTTON_WIDTH + h_pad) / (button_panel_width + h_pad));                  //reserve one row for the ignore_btn                  button_rows++;                  //calculate required panel height for scripdialog notification. diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index d314b1477a..5679c3c325 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -474,6 +474,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  			gAgent.setTeleportState( LLAgent::TELEPORT_ARRIVING );  			gAgent.setTeleportMessage(  				LLAgent::sTeleportProgressMessages["arriving"]); +			gAgent.sheduleTeleportIM();  			gTextureList.mForceResetTextureStats = TRUE;  			gAgentCamera.resetView(TRUE, TRUE); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 414ae1fad6..06587d6025 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -34,6 +34,7 @@  #include "llcompilequeue.h"  #include "llfasttimerview.h"  #include "llfloaterabout.h" +#include "llfloateraddpaymentmethod.h"  #include "llfloaterauction.h"  #include "llfloaterautoreplacesettings.h"  #include "llfloateravatar.h" @@ -194,6 +195,7 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterAboutUtil::registerFloater();  	LLFloaterReg::add("block_timers", "floater_fast_timers.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFastTimerView>);  	LLFloaterReg::add("about_land", "floater_about_land.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLand>); +	LLFloaterReg::add("add_payment_method", "floater_add_payment_method.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAddPaymentMethod>);  	LLFloaterReg::add("appearance", "floater_my_appearance.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);  	LLFloaterReg::add("associate_listing", "floater_associate_listing.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAssociateListing>);  	LLFloaterReg::add("auction", "floater_auction.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAuction>); diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index bbed741a33..2b200c17c1 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1422,6 +1422,11 @@ void remove_inventory_category(  			LLNotificationsUtil::add("CannotRemoveProtectedCategories");  			return;  		} +		const LLUUID fav_id = gInventory.findUserDefinedCategoryUUIDForType(LLFolderType::FT_FAVORITE); +		if ((cat_id == fav_id) || gInventory.isObjectDescendentOf(fav_id, cat_id)) +		{ +			gSavedPerAccountSettings.setString("FavoritesFolder", ""); +		}          AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);          AISAPI::RemoveCategory(cat_id, cr);  	} @@ -1461,6 +1466,12 @@ void purge_descendents_of(const LLUUID& id, LLPointer<LLInventoryCallback> cb)  	LLPointer<LLViewerInventoryCategory> cat = gInventory.getCategory(id);  	if (cat.notNull())  	{ +		const LLUUID fav_id = gInventory.findUserDefinedCategoryUUIDForType(LLFolderType::FT_FAVORITE); +		if ((id == fav_id) || gInventory.isObjectDescendentOf(fav_id, id)) +		{ +			gSavedPerAccountSettings.setString("FavoritesFolder", ""); +		} +  		if (LLClipboard::instance().hasContents())  		{  			// Remove items from clipboard or it will remain active even if there is nothing to paste/copy diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 0404a8056a..b04043ede9 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -64,6 +64,7 @@  #include "llfloaterimcontainer.h"  #include "llfloaterland.h"  #include "llfloaterimnearbychat.h" +#include "llfloaterlandholdings.h"  #include "llfloaterpathfindingcharacters.h"  #include "llfloaterpathfindinglinksets.h"  #include "llfloaterpay.h" @@ -185,11 +186,15 @@ const std::string SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents"  LLMenuGL* gAttachSubMenu = NULL;  LLMenuGL* gDetachSubMenu = NULL;  LLMenuGL* gTakeOffClothes = NULL; +LLMenuGL* gDetachAvatarMenu = NULL; +LLMenuGL* gDetachHUDAvatarMenu = NULL;  LLContextMenu* gAttachScreenPieMenu = NULL;  LLContextMenu* gAttachPieMenu = NULL;  LLContextMenu* gAttachBodyPartPieMenus[9];  LLContextMenu* gDetachPieMenu = NULL;  LLContextMenu* gDetachScreenPieMenu = NULL; +LLContextMenu* gDetachAttSelfMenu = NULL; +LLContextMenu* gDetachHUDAttSelfMenu = NULL;  LLContextMenu* gDetachBodyPartPieMenus[9];  // @@ -444,6 +449,9 @@ void init_menus()  	gMenuAttachmentOther = LLUICtrlFactory::createFromFile<LLContextMenu>(  		"menu_attachment_other.xml", gMenuHolder, registry); +	gDetachHUDAttSelfMenu = gMenuHolder->getChild<LLContextMenu>("Detach Self HUD", true); +	gDetachAttSelfMenu = gMenuHolder->getChild<LLContextMenu>("Detach Self", true); +  	gMenuLand = LLUICtrlFactory::createFromFile<LLContextMenu>(  		"menu_land.xml", gMenuHolder, registry); @@ -500,6 +508,9 @@ void init_menus()  	gAttachSubMenu = gMenuBarView->findChildMenuByName("Attach Object", TRUE);  	gDetachSubMenu = gMenuBarView->findChildMenuByName("Detach Object", TRUE); +	gDetachAvatarMenu = gMenuHolder->getChild<LLMenuGL>("Avatar Detach", true); +	gDetachHUDAvatarMenu = gMenuHolder->getChild<LLMenuGL>("Avatar Detach HUD", true); +  	// Don't display the Memory console menu if the feature is turned off  	LLMenuItemCheckGL *memoryMenu = gMenuBarView->getChild<LLMenuItemCheckGL>("Memory", TRUE);  	if (memoryMenu) @@ -676,19 +687,6 @@ class LLAdvancedCheckHUDInfo : public view_listener_t  }; -////////////// -// FLYING   // -////////////// - -class LLAdvancedAgentFlyingInfo : public view_listener_t -{ -	bool handleEvent(const LLSD&) -	{ -		return gAgent.getFlying(); -	} -}; - -  ///////////////////////  // CLEAR GROUP CACHE //  /////////////////////// @@ -3743,6 +3741,35 @@ bool enable_sitdown_self()  	return show_sitdown_self() && !gAgentAvatarp->isEditingAppearance() && !gAgent.getFlying();  } +class LLSelfToggleSitStand : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		if (isAgentAvatarValid()) +		{ +			if (gAgentAvatarp->isSitting()) +			{ +				gAgent.standUp(); +			} +			else +			{ +				gAgent.sitDown(); +			} +		} +		return true; +	} +}; + +bool enable_sit_stand() +{ +	return enable_sitdown_self() || enable_standup_self(); +} + +bool enable_fly_land() +{ +	return gAgent.getFlying() || LLAgent::enableFlying(); +} +  class LLCheckPanelPeopleTab : public view_listener_t  {  	bool handleEvent(const LLSD& userdata) @@ -4932,7 +4959,7 @@ void handle_buy_or_take()  		{  			LLStringUtil::format_map_t args;  			args["AMOUNT"] = llformat("%d", total_price); -			LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString( "BuyingCosts", args ), total_price ); +			LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString( "this_object_costs", args ), total_price );  		}  	}  	else @@ -5923,6 +5950,16 @@ class LLWorldSetHomeLocation : public view_listener_t  	}  }; +class LLWorldLindenHome : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		std::string url = LLFloaterLandHoldings::sHasLindenHome ? LLTrans::getString("lindenhomes_my_home_url") : LLTrans::getString("lindenhomes_get_home_url"); +		LLWeb::loadURL(url); +		return true; +	} +}; +  class LLWorldTeleportHome : public view_listener_t  {  	bool handleEvent(const LLSD& userdata) @@ -8772,6 +8809,17 @@ public:  	}  }; +class LLUpdateMembershipLabel : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		const std::string label_str =  LLAgentBenefitsMgr::isCurrent("Base") ? LLTrans::getString("MembershipUpgradeText") : LLTrans::getString("MembershipPremiumText"); +		gMenuHolder->childSetLabelArg("Membership", "[Membership]", label_str); + +		return true; +	} +}; +  void handle_voice_morphing_subscribe()  {  	LLWeb::loadURL(LLTrans::getString("voice_morphing_url")); @@ -8921,11 +8969,13 @@ void initialize_menus()  	view_listener_t::addEnable(new LLUploadCostCalculator(), "Upload.CalculateCosts"); +	view_listener_t::addEnable(new LLUpdateMembershipLabel(), "Membership.UpdateLabel"); +  	enable.add("Conversation.IsConversationLoggingAllowed", boost::bind(&LLFloaterIMContainer::isConversationLoggingAllowed));  	// Agent  	commit.add("Agent.toggleFlying", boost::bind(&LLAgent::toggleFlying)); -	enable.add("Agent.enableFlying", boost::bind(&LLAgent::enableFlying)); +	enable.add("Agent.enableFlyLand", boost::bind(&enable_fly_land));  	commit.add("Agent.PressMicrophone", boost::bind(&LLAgent::pressMicrophone, _2));  	commit.add("Agent.ReleaseMicrophone", boost::bind(&LLAgent::releaseMicrophone, _2));  	commit.add("Agent.ToggleMicrophone", boost::bind(&LLAgent::toggleMicrophone, _2)); @@ -8973,9 +9023,6 @@ void initialize_menus()  	view_listener_t::addMenu(new LLViewStatusDoNotDisturb(), "View.Status.CheckDoNotDisturb");  	view_listener_t::addMenu(new LLViewCheckHUDAttachments(), "View.CheckHUDAttachments"); -	// Me > Movement -	view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying"); -  	//Communicate Nearby chat  	view_listener_t::addMenu(new LLCommunicateNearbyChat(), "Communicate.NearbyChat"); @@ -8997,6 +9044,7 @@ void initialize_menus()  	view_listener_t::addMenu(new LLWorldTeleportHome(), "World.TeleportHome");  	view_listener_t::addMenu(new LLWorldSetAway(), "World.SetAway");  	view_listener_t::addMenu(new LLWorldSetDoNotDisturb(), "World.SetDoNotDisturb"); +	view_listener_t::addMenu(new LLWorldLindenHome(), "World.LindenHome");  	view_listener_t::addMenu(new LLWorldEnableCreateLandmark(), "World.EnableCreateLandmark");  	view_listener_t::addMenu(new LLWorldEnableSetHomeLocation(), "World.EnableSetHomeLocation"); @@ -9239,11 +9287,8 @@ void initialize_menus()  	view_listener_t::addMenu(new LLAdminOnSaveState(), "Admin.OnSaveState");  	// Self context menu -	view_listener_t::addMenu(new LLSelfStandUp(), "Self.StandUp"); -	enable.add("Self.EnableStandUp", boost::bind(&enable_standup_self)); -	view_listener_t::addMenu(new LLSelfSitDown(), "Self.SitDown"); -	enable.add("Self.EnableSitDown", boost::bind(&enable_sitdown_self));  -	enable.add("Self.ShowSitDown", boost::bind(&show_sitdown_self)); +	view_listener_t::addMenu(new LLSelfToggleSitStand(), "Self.ToggleSitStand"); +	enable.add("Self.EnableSitStand", boost::bind(&enable_sit_stand));  	view_listener_t::addMenu(new LLSelfRemoveAllAttachments(), "Self.RemoveAllAttachments");  	view_listener_t::addMenu(new LLSelfEnableRemoveAllAttachments(), "Self.EnableRemoveAllAttachments"); diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 0f63c8cf58..36b6971c81 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -188,10 +188,14 @@ extern LLContextMenu		*gMenuMuteParticle;  extern LLMenuGL* gAttachSubMenu;  extern LLMenuGL* gDetachSubMenu;  extern LLMenuGL* gTakeOffClothes; +extern LLMenuGL* gDetachAvatarMenu; +extern LLMenuGL* gDetachHUDAvatarMenu;  extern LLContextMenu* gAttachScreenPieMenu;  extern LLContextMenu* gDetachScreenPieMenu; +extern LLContextMenu* gDetachHUDAttSelfMenu;  extern LLContextMenu* gAttachPieMenu;  extern LLContextMenu* gDetachPieMenu; +extern LLContextMenu* gDetachAttSelfMenu;  extern LLContextMenu* gAttachBodyPartPieMenus[9];  extern LLContextMenu* gDetachBodyPartPieMenus[9]; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 4b231c7067..15181dcd9f 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -830,10 +830,7 @@ void upload_done_callback(  				if(!(can_afford_transaction(expected_upload_cost)))  				{ -					LLStringUtil::format_map_t args; -					args["NAME"] = data->mAssetInfo.getName(); -					args["AMOUNT"] = llformat("%d", expected_upload_cost); -					LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("UploadingCosts", args), expected_upload_cost ); +					LLBuyCurrencyHTML::openCurrencyFloater( "", expected_upload_cost );  					is_balance_sufficient = FALSE;  				}  				else if(region) @@ -967,10 +964,7 @@ void upload_new_resource(  			if (balance < uploadInfo->getExpectedUploadCost())  			{  				// insufficient funds, bail on this upload -				LLStringUtil::format_map_t args; -				args["NAME"] = uploadInfo->getName(); -                args["AMOUNT"] = llformat("%d", uploadInfo->getExpectedUploadCost()); -                LLBuyCurrencyHTML::openCurrencyFloater(LLTrans::getString("UploadingCosts", args), uploadInfo->getExpectedUploadCost()); +                LLBuyCurrencyHTML::openCurrencyFloater("", uploadInfo->getExpectedUploadCost());  				return;  			}  		} diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 458fc3b13d..aec5becdb3 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -778,7 +778,6 @@ void response_group_invitation_coro(std::string url, LLUUID group_id, bool notif              LL_DEBUGS("GroupInvite") << "Successfully sent response to group " << group_id << " invitation" << LL_ENDL;              if (notify_and_update)              { -                LLNotificationsUtil::add("JoinGroupSuccess");                  gAgent.sendAgentDataUpdateRequest();                  LLGroupMgr::getInstance()->clearGroupData(group_id); @@ -5058,6 +5057,15 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)  		// notification was specified using the new mechanism, so we can just handle it here  		std::string notificationID;  		msgsystem->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, notificationID); + +		//SL-13824 skip notification when both joining a group and leaving a group +		//remove this after server stops sending these messages   +		if (notificationID == "JoinGroupSuccess" || +			notificationID == "GroupDepart") +		{ +			return true; +		} +  		if (!LLNotifications::getInstance()->templateExists(notificationID))  		{  			return false; diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index d5365e4ee8..06172e366d 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1715,9 +1715,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use  			// Let interesting parties know about agent parcel change.  			LLViewerParcelMgr* instance = LLViewerParcelMgr::getInstance(); -			// Notify anything that wants to know when the agent changes parcels -			gAgent.changeParcels(); -  			if (instance->mTeleportInProgress)  			{  				instance->mTeleportInProgress = FALSE; @@ -1733,6 +1730,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use  			}              parcel->setParcelEnvironmentVersion(parcel_environment_version);              LL_DEBUGS("ENVIRONMENT") << "Parcel environment version is " << parcel->getParcelEnvironmentVersion() << LL_ENDL; +              // Notify anything that wants to know when the agent changes parcels              gAgent.changeParcels();              instance->mTeleportInProgress = FALSE; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 458d8ced65..7faca2ee5b 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -465,6 +465,8 @@ BOOL LLVOAvatarSelf::buildMenus()  		if (gDetachBodyPartPieMenus[i])  		{  			gDetachPieMenu->appendContextSubMenu( gDetachBodyPartPieMenus[i] ); +			gDetachAttSelfMenu->appendContextSubMenu(gDetachBodyPartPieMenus[i]); +			gDetachAvatarMenu->appendContextSubMenu(gDetachBodyPartPieMenus[i]);  		}  		else  		{ @@ -493,12 +495,14 @@ BOOL LLVOAvatarSelf::buildMenus()  					LLMenuItemCallGL* item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params);  					gDetachPieMenu->addChild(item); -						 +					gDetachAttSelfMenu->addChild(LLUICtrlFactory::create<LLMenuItemCallGL>(item_params)); +					gDetachAvatarMenu->addChild(LLUICtrlFactory::create<LLMenuItemCallGL>(item_params));  					break;  				}  			}  		}  	} +	  	// add screen attachments  	for (attachment_map_t::iterator iter = mAttachmentPoints.begin();  @@ -532,6 +536,8 @@ BOOL LLVOAvatarSelf::buildMenus()  			item_params.on_enable.parameter = iter->first;  			item = LLUICtrlFactory::create<LLMenuItemCallGL>(item_params);  			gDetachScreenPieMenu->addChild(item); +			gDetachHUDAttSelfMenu->addChild(LLUICtrlFactory::create<LLMenuItemCallGL>(item_params)); +			gDetachHUDAvatarMenu->addChild(LLUICtrlFactory::create<LLMenuItemCallGL>(item_params));  		}  	} diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index e1cf708094..92398857ba 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -851,6 +851,9 @@      name="ColorSwatchBorderColor"      value="0.45098 0.517647 0.607843 1"/>      <color +     name="ChatTeleportSeparatorColor" +     reference="Black" /> +    <color       name="ChatTimestampColor"       reference="White" />      <color @@ -960,4 +963,7 @@    <color      name="OutfitGalleryItemUnselected"      value="0.4 0.4 0.4 1" /> +  <color +    name="AddPaymentPanel" +    value="0.27 0.27 0.27 1" />  </colors> diff --git a/indra/newview/skins/default/textures/icons/Inv_Toolbar_SearchVisibility.png b/indra/newview/skins/default/textures/icons/Inv_Toolbar_SearchVisibility.pngBinary files differ new file mode 100644 index 0000000000..048da25c92 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Inv_Toolbar_SearchVisibility.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index a875c4e848..8d609afeae 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -45,6 +45,10 @@ with the same filename but different name    <texture name="AddItem_Off" file_name="icons/AddItem_Off.png" preload="false" />    <texture name="AddItem_Press" file_name="icons/AddItem_Press.png" preload="false" /> +  <texture name="add_payment_image_center"  file_name="windows/add_payment_image_center.png" preload="true" /> +  <texture name="add_payment_image_left"  file_name="windows/add_payment_image_left.png" preload="true" /> +  <texture name="add_payment_image_right"  file_name="windows/add_payment_image_right.png" preload="true" /> +    <texture name="Arrow_Left_Off" file_name="navbar/Arrow_Left_Off.png" preload="true" />    <texture name="Arrow_Right_Off" file_name="navbar/Arrow_Right_Off.png" preload="true" /> @@ -333,6 +337,8 @@ with the same filename but different name    <texture name="Inv_Unknown" file_name="icons/Inv_UnknownObject.png" preload="false" />    <texture name="Inv_VersionFolderClosed" file_name="icons/Inv_VersionFolderClosed.png" preload="false" />    <texture name="Inv_VersionFolderOpen" file_name="icons/Inv_VersionFolderOpen.png" preload="false" /> + +  <texture name="Inv_Toolbar_SearchVisibility" file_name="icons/Inv_Toolbar_SearchVisibility.png" preload="false" />    <texture name="Linden_Dollar_Alert" file_name="widgets/Linden_Dollar_Alert.png"/>    <texture name="Linden_Dollar_Background" file_name="widgets/Linden_Dollar_Background.png"/> @@ -649,6 +655,7 @@ with the same filename but different name    <texture name="TextField_Search_Off" file_name="widgets/TextField_Search_Off.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />    <texture name="TextField_Disabled" file_name="widgets/TextField_Disabled.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />    <texture name="TextField_Active" file_name="widgets/TextField_Active.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" /> +  <texture name="TextField_Search_Highlight" file_name="widgets/TextField_Search_Highlight.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />    <texture name="Toast_CloseBtn" file_name="windows/Toast_CloseBtn.png" preload="true" /> diff --git a/indra/newview/skins/default/textures/widgets/TextField_Search_Highlight.png b/indra/newview/skins/default/textures/widgets/TextField_Search_Highlight.pngBinary files differ new file mode 100644 index 0000000000..e3944289c6 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/TextField_Search_Highlight.png diff --git a/indra/newview/skins/default/textures/windows/add_payment_image_center.png b/indra/newview/skins/default/textures/windows/add_payment_image_center.pngBinary files differ new file mode 100644 index 0000000000..b5459136cb --- /dev/null +++ b/indra/newview/skins/default/textures/windows/add_payment_image_center.png diff --git a/indra/newview/skins/default/textures/windows/add_payment_image_left.png b/indra/newview/skins/default/textures/windows/add_payment_image_left.pngBinary files differ new file mode 100644 index 0000000000..7fb65e724a --- /dev/null +++ b/indra/newview/skins/default/textures/windows/add_payment_image_left.png diff --git a/indra/newview/skins/default/textures/windows/add_payment_image_right.png b/indra/newview/skins/default/textures/windows/add_payment_image_right.pngBinary files differ new file mode 100644 index 0000000000..f1937b6318 --- /dev/null +++ b/indra/newview/skins/default/textures/windows/add_payment_image_right.png diff --git a/indra/newview/skins/default/xui/en/floater_add_payment_method.xml b/indra/newview/skins/default/xui/en/floater_add_payment_method.xml new file mode 100644 index 0000000000..1f980564d4 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_add_payment_method.xml @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater + height="405" + width="900" + layout="topleft" + name="floater_add_payment_method" + single_instance="true" + show_title="false" + legacy_header_height="0" + header_height="0" + background_visible="false" + can_resize="false" + can_drag_on_left="false" + can_minimize="false" + can_close="false"> +  <floater.string +    name="continue_url"> +    https://secondlife.com/my/lindex/buy.php?associate_for_viewer=1 +  </floater.string> +  <panel +   background_opaque="false" +   bg_alpha_color="AddPaymentPanel" +   border_visible="false" +   background_visible="true" +   label="wrapper_panel" +   layout="topleft" +   left="0" +   name="wrapper_panel" +   top="0" +   height="405" +   width="900" +   follows="all" +   translate="false"> +    <text +     type="string" +     length="1" +     follows="top|left|right" +     font="SansSerifLargeBold" +     text_color="White" +     layout="topleft" +     left="0" +     height="14" +     top_pad="30" +     width="900" +     halign="center" +     name="title_txt"> +      Add a payment method to buy Linden dollars and enjoy more of Second Life. +    </text> +    <button +     follows="top|left|right" +     height="24" +     label="Get started" +     font="SansSerifMedium" +     layout="topleft" +     left="320" +     name="continue_btn" +     image_unselected="PushButton_Login" +     image_pressed="PushButton_Login_Pressed" +     image_hover_unselected="PushButton_Login_Over" +     label_color="White" +     top_pad ="15" +     width="140"/> +    <button +     follows="top|left|right" +     height="24" +     label="Later" +     layout="topleft" +     left_pad="9" +     name="close_btn" +     width="90"/> +    <icon +     height="195" +     width="260"  +     image_name="add_payment_image_left" +     layout="topleft" +     left="30" +     name="image_left" +     top_pad="30" +     use_draw_context_alpha="false"/> +    <icon +     height="195" +     width="260" +     image_name="add_payment_image_center" +     layout="topleft" +     left_pad="30" +     name="image_center" +     use_draw_context_alpha="false"/> +    <icon +     height="195" +     width="260" +     image_name="add_payment_image_right" +     layout="topleft" +     left_pad="30" +     name="image_right" +     use_draw_context_alpha="false"/> +    <text +     type="string" +     length="1" +     follows="top|left" +     font="SansSerifMedium" +     text_color="White" +     height="75" +     width="260" +     top_pad="15" +     layout="topleft" +     word_wrap="true" +     left="30" +     name="image_left_desc"> +      Create an avatar you love. Choose from millions of items in stores and the Second Life Marketplace. Your style is here. +    </text> +    <text +     type="string" +     length="1" +     follows="top|left" +     font="SansSerifMedium" +     text_color="White" +     height="75" +     width="260" +     layout="topleft" +     word_wrap="true" +     left_pad="30" +     name="image_center_desc"> +      Donate to your favorite performers and hosts. Your support helps them create great experiences. +    </text> +    <text +     type="string" +     length="1" +     follows="top|left" +     font="SansSerifMedium" +     text_color="White" +     height="75" +     width="260" +     layout="topleft" +     word_wrap="true" +     left_pad="30" +     name="image_right_desc"> +      Make the home of your dreams. With millions of items available to purchase, you can make your retreat unique. +    </text> +  </panel> +</floater> diff --git a/indra/newview/skins/default/xui/en/floater_adjust_environment.xml b/indra/newview/skins/default/xui/en/floater_adjust_environment.xml index 59589e3665..f4a686bae1 100644 --- a/indra/newview/skins/default/xui/en/floater_adjust_environment.xml +++ b/indra/newview/skins/default/xui/en/floater_adjust_environment.xml @@ -5,14 +5,14 @@           save_rect="false"           title="Personal Lighting"           width="845" -         height="240" +         height="280"           min_width="500" -         min_height="235" +         min_height="275"           single_instance="true"           can_resize="false">      <layout_stack name="outer_stack"                    width="845" -                  height="230" +                  height="275"                    follows="all"                    animate="false"                    top="0" @@ -276,19 +276,57 @@                                          height="150"                                          width="150"                                          thumb_mode="sun"/> +                  <text follows="left|top" +                        height="10" +                        layout="topleft" +                        left_delta="0" +                        top_pad="5" +                        width="200">Azimuth:</text> +                  <slider decimal_digits="2" +                          follows="left|top" +                          height="16" +                          increment="0.01" +                          initial_value="0" +                          layout="topleft" +                          left_delta="5" +                          min_val="0" +                          max_val="359.99" +                          name="sun_azimuth" +                          top_pad="5" +                          width="130" +                          can_edit_text="true"/> +                  <text follows="left|top" +                        height="10" +                        layout="topleft" +                        left_delta="-5" +                        top_pad="5" +                        width="200">Elevation:</text> +                  <slider decimal_digits="2" +                          follows="left|top" +                          height="16" +                          increment="0.01" +                          initial_value="0" +                          layout="topleft" +                          left_delta="5" +                          min_val="-90" +                          max_val="90" +                          name="sun_elevation" +                          top_pad="5" +                          width="130" +                          can_edit_text="true"/>                      <check_box control_name="sunbeacon"                                 width="60"                                 height="16"                                 label="Show Beacon"                                 layout="topleft"                                 name="sunbeacon" -                               left_delta="55" -                               bottom="-20" -                               follows="bottom|right"/> +                               left_delta="-5" +                               top_pad="8" +                               follows="left|top"/>                      <text follows="left|top"                            height="10"                            layout="topleft" -                          left_pad="40" +                          left_pad="95"                            top="25"                            width="80">Scale:</text>                      <slider decimal_digits="2" @@ -385,15 +423,53 @@                                          height="150"                                          width="150"                                          thumb_mode="moon"/> +                  <text follows="left|top" +                        height="10" +                        layout="topleft" +                        left_delta="0" +                        top_pad="5" +                        width="200">Azimuth:</text> +                  <slider decimal_digits="2" +                          follows="left|top" +                          height="16" +                          increment="0.01" +                          initial_value="0" +                          layout="topleft" +                          left_delta="5" +                          min_val="0" +                          max_val="359.99" +                          name="moon_azimuth" +                          top_pad="5" +                          width="130" +                          can_edit_text="true"/> +                  <text follows="left|top" +                        height="10" +                        layout="topleft" +                        left_delta="-5" +                        top_pad="5" +                        width="200">Elevation:</text> +                  <slider decimal_digits="2" +                          follows="left|top" +                          height="16" +                          increment="0.01" +                          initial_value="0" +                          layout="topleft" +                          left_delta="5" +                          min_val="-90" +                          max_val="90" +                          name="moon_elevation" +                          top_pad="5" +                          width="130" +                          can_edit_text="true"/>                      <check_box control_name="moonbeacon" +                               follows="left|top"                                 width="60"                                 height="16"                                 label="Show Beacon"                                 layout="topleft"                                 name="moonbeacon" -                               right="-50" -                               bottom="-20" -                               follows="bottom|right"/> +                               left_delta="0" +                               top_pad="8"/>                  </layout_panel>              </layout_stack>          </layout_panel> diff --git a/indra/newview/skins/default/xui/en/floater_avatar.xml b/indra/newview/skins/default/xui/en/floater_avatar.xml index 92c5d8bcbe..3df2683ca8 100644 --- a/indra/newview/skins/default/xui/en/floater_avatar.xml +++ b/indra/newview/skins/default/xui/en/floater_avatar.xml @@ -14,7 +14,7 @@   help_topic="avatar"   save_rect="true"   save_visibility="true" - title="CHOOSE AN AVATAR" + title="COMPLETE AVATARS"   width="700">      <web_browser        top="25" diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml index 061af1b67c..e8e83301be 100644 --- a/indra/newview/skins/default/xui/en/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/en/floater_buy_currency.xml @@ -1,8 +1,8 @@  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>  <floater - legacy_header_height="18" +   can_minimize="false" - height="275" + height="285"   layout="topleft"   title="BUY L$"   name="buy currency" @@ -17,277 +17,385 @@       name="info_cannot_buy">          Unable to Buy      </floater.string> +    <floater.string +     name="estimated_zero"> +        US$ 0.00 +    </floater.string>      <icon -     height="215" +     height="245"       image_name="Linden_Dollar_Background"       layout="topleft"       left="0"       name="normal_background" -     top="17" +     top="0"       use_draw_context_alpha="false"       width="350" /> -   <text -     type="string" -     length="1" -     follows="top|left|right" -     font="SansSerifHuge" -     layout="topleft" -     left="20" -     height="30" -     top="25" -     width="340" -     name="info_need_more"> -        You need more L$ -    </text> -    <text -     type="string" -     length="1" -     follows="top|left" -     height="16" +  <layout_stack +    animate="false" +    name="outer_stack" +    layout="topleft" +    follows="all" +    orientation="vertical" +    left="0" +    top="0" +    width="350" +    height="285"> +    <layout_panel +     auto_resize="false" +     name="layout_panel_title"       layout="topleft" -     top="246" -     left="15" -     width="300" -     name="contacting"> -        Contacting LindeX... -    </text> -    <text -     type="string" -     length="1" -     follows="top|left" -     font="SansSerifHuge" +     follows="all" +     width="350" +     height="35"> +      <text +       type="string" +       length="1" +       follows="top|left|right" +       font="SansSerifLarge" +       layout="topleft" +       left="20" +       height="30" +       top="8" +       width="340" +       name="info_need_more"> +          You need more L$ +      </text> +      <text +       type="string" +       length="1" +       follows="top|left|right" +       font="SansSerifLarge" +       layout="topleft" +       left="20" +       height="30" +       top="8" +       width="300" +       name="info_buying"> +          Buy L$ +      </text> +      <view_border +       bevel_style="none" +       height="0" +       layout="topleft" +       left="20" +       name="text_border" +       top_delta="25" +       width="300"/> +    </layout_panel> +    <layout_panel +     auto_resize="false" +     name="layout_panel_price"       layout="topleft" -     left="20" -     height="30" -     top="25" -     width="300" -     name="info_buying"> -        Buy L$ -    </text> -    <text -     type="string" -     length="1" -     follows="top|left" -     font="SansSerifMedium" -     height="16" +     follows="all" +     width="350" +     height="18"> +      <text +       type="string" +       length="1" +       follows="top|left" +       font="SansSerifMedium" +       height="16" +       layout="topleft" +       left="20" +       name="target_price_label" +       top_pad="3" +       width="210"> +          You need +      </text> +      <text +       type="string" +       length="1" +       font="SansSerifMedium" +       follows="top|left" +       halign="right" +       height="16" +       layout="topleft" +       left="200" +       name="target_price" +       top_delta="0" +       width="120"> +          L$ [AMT] +      </text> +    </layout_panel> +    <layout_panel +     auto_resize="false" +     name="layout_panel_balance"       layout="topleft" -     left="20" -     name="balance_label" -     top="65" -     width="210"> -        I have -    </text> -    <text -     type="string" -     length="1" -     font="SansSerifMedium" -     follows="top|left" -     halign="right" -     height="16" -     layout="topleft" -     left="200" -     name="balance_amount" -     top_delta="0" -     width="120"> +     follows="all" +     width="350" +     height="19"> +      <text +       type="string" +       length="1" +       follows="top|left" +       font="SansSerifMedium" +       height="16" +       layout="topleft" +       left="20" +       name="balance_label" +       top_pad="5" +       width="210"> +        You now have +      </text> +      <text +       type="string" +       length="1" +       font="SansSerifMedium" +       follows="top|left" +       halign="right" +       height="16" +       layout="topleft" +       left="200" +       name="balance_amount" +       top_delta="0" +       width="120">          L$ [AMT] -    </text> -    <text -     type="string" -     length="1" -     follows="top|left" -     font="SansSerifMedium" -     height="16" -     top="95" -     layout="topleft" -     left="20" -     name="currency_action" -     width="210"> -        I want to buy -    </text> -    <text -     font="SansSerifMedium" -     type="string" -     length="1" -     follows="left|top" -     height="16" -     layout="topleft" -     top_delta="0" -     left="217" -     name="currency_label" -     width="15"> -      L$ -    </text> -    <line_editor -     type="string" -     max_length_bytes="10" -     halign="right" -     font="SansSerifMedium" -     select_on_focus="true" -     follows="top|left" -     top_delta="-7" -     height="22" -     label="L$" -     left_pad="3" -     name="currency_amt" -     width="85"> -        1234 -    </line_editor> -    <text -     type="string" -     font="SansSerifMedium" -     length="1" -     follows="top|left" -     height="16" -     layout="topleft" -     left="20" -     top="125" -     name="buying_label" -     width="210"> -        For the price -    </text> -    <text -     type="string" -     length="1" -     font="SansSerifMedium" -     text_color="EmphasisColor" -     follows="top|left" -     halign="right" -     height="16" -     top_delta="0" +      </text> +    </layout_panel> +    <layout_panel +     auto_resize="false" +     name="layout_panel_required"       layout="topleft" -     left="150" -     name="currency_est" -     width="170"> -     approx. [LOCALAMOUNT] -    </text> -    <text -     type="string" -     font="SansSerifSmall" -     text_color="EmphasisColor" -     length="1" -     follows="top|left" -     height="16" -     layout="topleft" -     top="125" -     left="170" -     width="150" -     halign="right" -     name="getting_data"> -        Estimating... -    </text> -    <text -     type="string" -     font="SansSerifSmall" -     top="145" -     length="1" -     follows="top|left" -     height="16" -     halign="right" -     left="20" -     width="300" -     layout="topleft" -     name="buy_action"> -        [ACTION] -    </text> -    <text -     type="string" -     font="SansSerifMedium" -     length="1" -     follows="top|left" -     height="16" -     layout="topleft" -     left="20" -     name="total_label" -     top="165" -     width="210"> -        My new balance will be -    </text> -    <text -     type="string" -     length="1" -     font="SansSerifMedium" -     follows="top|left" -     top_delta="0" -     height="16" -     layout="topleft" -     left="200" -     halign="right" -     name="total_amount" -     width="120"> +     follows="all" +     width="350" +     height="22"> +      <text +        type="string" +        length="1" +        follows="top|left" +        font="SansSerifMedium" +        font.style="BOLD" +        height="16" +        layout="topleft" +        left="20" +        name="required_label" +        top_pad="6" +        width="210"> +        You should buy at least +      </text> +      <text +       type="string" +       length="1" +       font="SansSerifMedium" +       follows="top|left" +       halign="right" +       height="16" +       layout="topleft" +       left="200" +       name="required_amount" +       top_delta="0" +       width="120">          L$ [AMT] -    </text> -    <text -     type="string" -     length="1" -     text_color="LtGray_50" -     follows="top|left" +      </text> +    </layout_panel> +    <layout_panel +     auto_resize="false" +     name="layout_panel_action"       layout="topleft" -     halign="right" -     top="189" -     left="20" -     width="300" -     height="30" -     name="currency_links"> -      [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency] -    </text> -    <text -     type="string" -     length="1" -     text_color="LtGray_50" -     follows="top|left" +     follows="all" +     width="350" +     height="90"> +      <view_border +       bevel_style="none" +       height="0" +       layout="topleft" +       left="20" +       name="text_border_2" +       top_pad="5" +       width="300"/> +      <text +       type="string" +       length="1" +       follows="top|left" +       font="SansSerifMedium" +       height="16" +       top_pad="15" +       layout="topleft" +       left="20" +       name="currency_action" +       width="210"> +          Choose amount to buy +      </text> +      <text +       font="SansSerifMedium" +       type="string" +       length="1" +       follows="left|top" +       height="16" +       layout="topleft" +       top_delta="0" +       left="247" +       name="currency_label" +       width="15"> +        L$ +      </text> +      <line_editor +       type="string" +       max_length_bytes="10" +       halign="right" +       font="SansSerifMedium" +       select_on_focus="true" +       follows="top|left" +       top_delta="-4" +       height="22" +       label="L$" +       left_pad="3" +       name="currency_amt" +       width="55"> +          1234 +      </line_editor> +      <text +       type="string" +       length="1" +       font="SansSerifMedium" +       text_color="EmphasisColor" +       follows="top|left" +       halign="right" +       height="16" +       top_pad="4" +       layout="topleft" +       left="150" +       name="currency_est" +       width="170"> +       Approx. [LOCALAMOUNT] +      </text> +      <text +       type="string" +       font="SansSerifSmall" +       text_color="EmphasisColor" +       length="1" +       follows="top|left" +       height="16" +       layout="topleft" +       left="170" +       top_delta="0" +       width="150" +       halign="right" +       name="getting_data"> +          Estimating... +      </text> +      <text +       type="string" +       font="SansSerifMedium" +       length="1" +       follows="top|left" +       height="16" +       layout="topleft" +       left="20" +       name="total_label" +       top_pad="10" +       width="210"> +          Your new balance will be +      </text> +      <text +       type="string" +       length="1" +       font="SansSerifMedium" +       follows="top|left" +       top_delta="0" +       height="16" +       layout="topleft" +       left="200" +       halign="right" +       name="total_amount" +       width="120"> +          L$ [AMT] +      </text> +    </layout_panel> +    <layout_panel +     auto_resize="false" +     name="layout_panel_msg"       layout="topleft" -     halign="right" -     top="202" -     left="20" -     width="300" -     height="30" -     name="exchange_rate_note"> +     follows="all" +     width="350" +     height="50"> +      <view_border +       bevel_style="none" +       height="0" +       layout="topleft" +       left="20" +       name="text_border_3" +       top_pad="0" +       width="300"/> +      <text +       type="string" +       length="1" +       text_color="LtGray_50" +       follows="top|left" +       layout="topleft" +       halign="right" +       top_pad="3" +       left="20" +       width="300" +       height="30" +       name="currency_links"> +        [http://www.secondlife.com/my/account/payment_method_management.php payment method] | [http://www.secondlife.com/my/account/currency.php currency] +      </text> +      <text +       type="string" +       length="1" +       text_color="LtGray_50" +       follows="top|left" +       layout="topleft" +       halign="right" +       top="19" +       left="20" +       width="300" +       height="30" +       name="exchange_rate_note">  Re-enter amount to see the latest exchange rate. -    </text> -    <text -     type="string" -     length="1" -     text_color="LtGray_50" -     follows="top|left" -     layout="topleft" -     halign="right" -     top="208" -     left="10" -     width="310" -     height="35" -     name="purchase_warning_repurchase"> -        Confirming this purchase only buys L$, not the object. -    </text> -    <text -     type="string" -     length="1" -     text_color="LtGray_50" -     follows="top|left" -     layout="topleft" -     halign="right" -     top="213" -     left="20" -     width="300" -     height="30" -     name="purchase_warning_notenough"> -        You aren't buying enough L$. Please increase the amount. -    </text> - -    <button -     follows="bottom|left" -     height="20" -     label="Buy Now" -     layout="topleft" -     left="151" -     name="buy_btn" -     top="242" -     width="90"/> -    <button -     follows="bottom|right" -     height="20" -     label="Cancel" +      </text> +      <text +       type="string" +       length="1" +       follows="top|left" +       layout="topleft" +       font="SansSerifMedium" +       top="10" +       left="20" +       width="310" +       height="35" +       name="purchase_warning_repurchase"> +After you receive your L$, you should try your +purchase again. +      </text> +    </layout_panel> +    <layout_panel +     auto_resize="false" +     name="layout_panel_buttons"       layout="topleft" -     left_pad="10" -     name="cancel_btn" -     width="90"/> +     follows="all" +     width="350" +     height="40"> +      <text +       type="string" +       length="1" +       follows="top|left" +       height="16" +       layout="topleft" +       top_pad="0" +       left="15" +       width="300" +       name="contacting"> +          Contacting LindeX... +        </text> +      <button +       follows="top|left|right" +       height="20" +       label="Buy L$ now" +       layout="topleft" +       left="151" +       name="buy_btn" +       bottom_delta ="8" +       width="90"/> +      <button +       follows="top|left|right" +       height="20" +       label="Cancel" +       layout="topleft" +       left_pad="10"      +       name="cancel_btn" +       width="90"/> +    </layout_panel> +  </layout_stack>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml index 30e9002230..c609e3bd3a 100644 --- a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml +++ b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml @@ -616,7 +616,7 @@                      follows="top|left"                      height="23"                      label="Save" -                    left="5" +                    left="200"                      top_pad="0"                      name="save_btn"                      width="156" /> diff --git a/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml b/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml index dbf91b0834..37c56d3235 100644 --- a/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml +++ b/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml @@ -89,7 +89,7 @@                  follows="left|top|right|bottom"                  auto_resize="false"                  user_resize="false" -                height="40" +                height="35"                  visible="true">              <layout_stack                      follows="bottom|left|right" @@ -97,7 +97,7 @@                      layout="topleft"                      mouse_opaque="false"                      name="button_bar_ls" -                    left="0" +                    left="212"                      orientation="horizontal"                      top="0"                      width="313"> diff --git a/indra/newview/skins/default/xui/en/floater_my_appearance.xml b/indra/newview/skins/default/xui/en/floater_my_appearance.xml index fdea7a821a..35ad87ceb0 100644 --- a/indra/newview/skins/default/xui/en/floater_my_appearance.xml +++ b/indra/newview/skins/default/xui/en/floater_my_appearance.xml @@ -11,7 +11,7 @@    save_rect="true"    single_instance="true"    reuse_instance="true" -  title="APPEARANCE" +  title="AVATAR"    min_height="440"    min_width="333"    width="333"> diff --git a/indra/newview/skins/default/xui/en/floater_my_scripts.xml b/indra/newview/skins/default/xui/en/floater_my_scripts.xml index 3b0b6723c7..ee6defce9d 100644 --- a/indra/newview/skins/default/xui/en/floater_my_scripts.xml +++ b/indra/newview/skins/default/xui/en/floater_my_scripts.xml @@ -7,7 +7,7 @@   layout="topleft"   name="myscripts"   save_rect="true" - title="My Scripts" + title="ATTACHMENT SCRIPTS"   min_width="620"   width="620">    <panel diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml index 38f4b7715f..7ad692038e 100644 --- a/indra/newview/skins/default/xui/en/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_other.xml @@ -173,16 +173,13 @@            parameter="avatar_render_settings" />        </menu_item_call>        </context_menu> -  <menu_item_separator -       layout="topleft" name="Impostor seperator"/> -    <menu_item_call       enabled="false"       label="Block Particle Owner"       name="Mute Particle">      <menu_item_call.on_click       function="Particle.Mute" /> -    <menu_item_call.on_enable +    <menu_item_call.on_visible       function="EnableMuteParticle" />    </menu_item_call>  </context_menu> 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 59faf6a9f5..856bf4ce73 100644 --- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml @@ -4,28 +4,7 @@   name="Attachment Pie">      <menu_item_call       enabled="false" -     label="Touch" -     layout="topleft" -     name="Attachment Object Touch"> -        <menu_item_call.on_click -         function="Object.Touch" /> -        <menu_item_call.on_enable -         function="Object.EnableTouch" -         name="EnableTouch"/> -    </menu_item_call> -    <!--menu_item_call -     label="Stand Up" -     layout="topleft" -     name="Stand Up"> -        <menu_item_call.on_click -         function="Self.StandUp" -         parameter="" /> -        <menu_item_call.on_enable -         function="Self.EnableStandUp" /> -    </menu_item_call--> -    <menu_item_call -     enabled="false" -     label="Edit" +     label="Edit item"       layout="topleft"       name="Edit...">          <menu_item_call.on_click @@ -35,7 +14,7 @@      </menu_item_call>      <menu_item_call       enabled="false" -     label="Detach" +     label="Detach item"       layout="topleft"       name="Detach">          <menu_item_call.on_click @@ -43,39 +22,29 @@          <menu_item_call.on_enable           function="Attachment.EnableDetach" />      </menu_item_call> -  <menu_item_separator -    layout="topleft" /> -      <menu_item_call -     label="Sit Down" +     enabled="false" +     label="Touch item"       layout="topleft" -     name="Sit Down Here"> +     name="Attachment Object Touch">          <menu_item_call.on_click -         function="Self.SitDown" -         parameter="" /> +         function="Object.Touch" />          <menu_item_call.on_enable -         function="Self.EnableSitDown" /> +         function="Object.EnableTouch" +         name="EnableTouch"/>      </menu_item_call> +    <menu_item_separator +     layout="topleft" />    <menu_item_call -label="Stand Up" -layout="topleft" -name="Stand Up"> -    <menu_item_call.on_click -     function="Self.StandUp" -     parameter="" /> -    <menu_item_call.on_enable -     function="Self.EnableStandUp" /> -  </menu_item_call> -  <menu_item_call -  label="My Appearance" +  label="Outfits..."    name="Change Outfit">      <menu_item_call.on_click       function="CustomizeAvatar" />      <menu_item_call.on_enable       function="Edit.EnableCustomizeAvatar" />    </menu_item_call> -  <menu_item_call label="Edit My Outfit" +  <menu_item_call label="Current outfit..."  layout="topleft"  name="Edit Outfit">      <menu_item_call.on_click @@ -83,7 +52,7 @@ name="Edit Outfit">      <menu_item_call.on_enable       function="Edit.EnableCustomizeAvatar" />    </menu_item_call> -  <menu_item_call label="Edit My Shape" +  <menu_item_call label="Shape..."      layout="topleft"      name="Edit My Shape">      <menu_item_call.on_click @@ -91,7 +60,7 @@ name="Edit Outfit">      <menu_item_call.on_enable       function="Edit.EnableEditShape" />    </menu_item_call> -  <menu_item_call label="Hover Height" +  <menu_item_call label="Hover height..."       layout="topleft"       name="Hover Height">       <menu_item_call.on_click @@ -99,42 +68,224 @@ name="Edit Outfit">       <menu_item_call.on_enable        function="Edit.EnableHoverHeight" />    </menu_item_call> -  <menu_item_call label="Reset Skeleton" +  <context_menu +  label="Take Off" +  layout="topleft" +  name="Take Off >"> +    <context_menu +     label="Clothes" +     layout="topleft" +     name="Clothes >"> +      <menu_item_call +       enabled="false" +       label="Shirt"         layout="topleft" -       name="Reset Skeleton"> -       <menu_item_call.on_click -        function="Avatar.ResetSkeleton" /> -  </menu_item_call> -  <menu_item_call label="Reset Skeleton And Animations" +       name="Shirt"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="shirt" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="shirt" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Pants"         layout="topleft" -       name="Reset Skeleton And Animations"> -       <menu_item_call.on_click -        function="Avatar.ResetSkeletonAndAnimations" /> -  </menu_item_call> - +       name="Pants"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="pants" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="pants" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Skirt" +       layout="topleft" +       name="Skirt"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="skirt" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="skirt" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Shoes" +       layout="topleft" +       name="Shoes"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="shoes" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="shoes" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Socks" +       layout="topleft" +       name="Socks"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="socks" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="socks" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Jacket" +       layout="topleft" +       name="Jacket"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="jacket" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="jacket" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Gloves" +       layout="topleft" +       name="Gloves"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="gloves" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="gloves" /> +      </menu_item_call> +      <menu_item_call +            enabled="false" +            label="Undershirt" +            layout="topleft" +            name="Self Undershirt"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="undershirt" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="undershirt" /> +      </menu_item_call> +      <menu_item_call +        enabled="false" +        label="Underpants" +        layout="topleft" +        name="Self Underpants"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="underpants" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="underpants" /> +      </menu_item_call> +      <menu_item_call +        enabled="false" +        label="Tattoo" +        layout="topleft" +        name="Self Tattoo"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="tattoo" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="tattoo" /> +      </menu_item_call> +      <menu_item_call +        enabled="false" +        label="Physics" +        layout="topleft" +        name="Self Physics"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="physics" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="physics" /> +      </menu_item_call> +      <menu_item_call +        enabled="false" +        label="Alpha" +        layout="topleft" +        name="Self Alpha"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="alpha" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="alpha" /> +      </menu_item_call> +      <menu_item_separator +       layout="topleft" /> +      <menu_item_call +       label="All Clothes" +       layout="topleft" +       name="All Clothes"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="all" /> +      </menu_item_call> +    </context_menu> +    <context_menu +     label="HUD" +     layout="topleft" +     name="Detach Self HUD" /> +    <context_menu +     label="Detach" +     layout="topleft" +     name="Detach Self" /> +    <menu_item_call +     label="Detach All" +     layout="topleft" +     name="Detach All"> +      <menu_item_call.on_click +       function="Self.RemoveAllAttachments" +       parameter="" /> +      <menu_item_call.on_enable +       function="Self.EnableRemoveAllAttachments" /> +    </menu_item_call> +  </context_menu> +  <menu_item_separator/>    <menu_item_call -    label="My Friends" +    label="Sit / stand"      layout="topleft" -    name="Friends..."> +    name="Sit stand">      <menu_item_call.on_click -     function="SideTray.PanelPeopleTab" -     parameter="friends_panel" /> +     function="Self.ToggleSitStand"/> +    <menu_item_call.on_enable +     function="Self.EnableSitStand" />    </menu_item_call>    <menu_item_call -   label="My Groups" -   layout="topleft" -   name="Groups..."> +     label="Fly / land" +     name="Fly land">      <menu_item_call.on_click -     function="SideTray.PanelPeopleTab" -     parameter="groups_panel" /> +     function="Agent.toggleFlying" /> +    <menu_item_call.on_enable +     function="Agent.enableFlyLand" />    </menu_item_call>    <menu_item_call -    label="My Profile" -    layout="topleft" -    name="Profile..."> +     label="Stop animations" +     name="Stop Animating My Avatar">      <menu_item_call.on_click -     function="ShowAgentProfile" -     parameter="agent" /> +     function="Tools.StopAllAnimations" /> +  </menu_item_call> +  <menu_item_separator/> +  <menu_item_call label="Reset skeleton" +       layout="topleft" +       name="Reset Skeleton"> +       <menu_item_call.on_click +        function="Avatar.ResetSkeleton" /> +  </menu_item_call> +  <menu_item_call label="Reset skeleton and animations" +       layout="topleft" +       name="Reset Skeleton And Animations"> +       <menu_item_call.on_click +        function="Avatar.ResetSkeletonAndAnimations" />    </menu_item_call>    <menu_item_call   label="Debug Textures" @@ -152,27 +303,13 @@ name="Edit Outfit">              <menu_item_call.on_visible               function="Advanced.EnableAppearanceToXML"/>      </menu_item_call> -  <menu_item_separator -  layout="topleft" /> -  <menu_item_call - enabled="false" - label="Drop" - layout="topleft" - name="Drop"> -    <menu_item_call.on_click -     function="Attachment.Drop" /> -    <menu_item_call.on_enable -     function="Attachment.EnableDrop" /> -  </menu_item_call> -  <menu_item_separator -       layout="topleft" />    <menu_item_call       enabled="false"       label="Block Particle Owner"       name="Mute Particle">      <menu_item_call.on_click       function="Particle.Mute" /> -    <menu_item_call.on_enable +    <menu_item_call.on_visible       function="EnableMuteParticle" />    </menu_item_call>  </context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml index f9fb847910..acbb9b860d 100644 --- a/indra/newview/skins/default/xui/en/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_other.xml @@ -165,16 +165,13 @@        </menu_item_call>        </context_menu> -  <menu_item_separator  -    layout="topleft"  name="Impostor seperator"/> -    <menu_item_call       enabled="false"       label="Block Particle Owner"       name="Mute Particle">      <menu_item_call.on_click       function="Particle.Mute" /> -    <menu_item_call.on_enable +    <menu_item_call.on_visible       function="EnableMuteParticle" />    </menu_item_call>  </context_menu> 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 9e181d0b6d..a46d9aed55 100644 --- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml @@ -3,209 +3,7 @@   layout="topleft"   name="Self Pie">      <menu_item_call -     label="Sit Down" -     layout="topleft" -     name="Sit Down Here"> -        <menu_item_call.on_click -         function="Self.SitDown" -         parameter="" /> -        <menu_item_call.on_enable -         function="Self.EnableSitDown" /> -    </menu_item_call> -    <menu_item_call -     label="Stand Up" -     layout="topleft" -     name="Stand Up"> -        <menu_item_call.on_click -         function="Self.StandUp" -         parameter="" /> -        <menu_item_call.on_enable -         function="Self.EnableStandUp" /> -    </menu_item_call> -    <context_menu -     label="Take Off" -     layout="topleft" -     name="Take Off >"> -        <context_menu -         label="Clothes" -         layout="topleft" -         name="Clothes >"> -            <menu_item_call -             enabled="false" -             label="Shirt" -             layout="topleft" -             name="Shirt"> -                <menu_item_call.on_click -                 function="Edit.TakeOff" -                 parameter="shirt" /> -                <menu_item_call.on_enable -                 function="Edit.EnableTakeOff" -                 parameter="shirt" /> -            </menu_item_call> -            <menu_item_call -             enabled="false" -             label="Pants" -             layout="topleft" -             name="Pants"> -                <menu_item_call.on_click -                 function="Edit.TakeOff" -                 parameter="pants" /> -                <menu_item_call.on_enable -                 function="Edit.EnableTakeOff" -                 parameter="pants" /> -            </menu_item_call> -            <menu_item_call -             enabled="false" -             label="Skirt" -             layout="topleft" -             name="Skirt"> -                <menu_item_call.on_click -                 function="Edit.TakeOff" -                 parameter="skirt" /> -                <menu_item_call.on_enable -                 function="Edit.EnableTakeOff" -                 parameter="skirt" /> -            </menu_item_call> -            <menu_item_call -             enabled="false" -             label="Shoes" -             layout="topleft" -             name="Shoes"> -                <menu_item_call.on_click -                 function="Edit.TakeOff" -                 parameter="shoes" /> -                <menu_item_call.on_enable -                 function="Edit.EnableTakeOff" -                 parameter="shoes" /> -            </menu_item_call> -            <menu_item_call -             enabled="false" -             label="Socks" -             layout="topleft" -             name="Socks"> -                <menu_item_call.on_click -                 function="Edit.TakeOff" -                 parameter="socks" /> -                <menu_item_call.on_enable -                 function="Edit.EnableTakeOff" -                 parameter="socks" /> -            </menu_item_call> -            <menu_item_call -             enabled="false" -             label="Jacket" -             layout="topleft" -             name="Jacket"> -                <menu_item_call.on_click -                 function="Edit.TakeOff" -                 parameter="jacket" /> -                <menu_item_call.on_enable -                 function="Edit.EnableTakeOff" -                 parameter="jacket" /> -            </menu_item_call> -            <menu_item_call -             enabled="false" -             label="Gloves" -             layout="topleft" -             name="Gloves"> -                <menu_item_call.on_click -                 function="Edit.TakeOff" -                 parameter="gloves" /> -                <menu_item_call.on_enable -                 function="Edit.EnableTakeOff" -                 parameter="gloves" /> -            </menu_item_call> -           <menu_item_call -                 enabled="false" -                 label="Undershirt" -                 layout="topleft" -                 name="Self Undershirt"> -                    <menu_item_call.on_click -                     function="Edit.TakeOff" -                     parameter="undershirt" /> -                    <menu_item_call.on_enable -                     function="Edit.EnableTakeOff" -                     parameter="undershirt" /> -                </menu_item_call> -               <menu_item_call -                 enabled="false" -                 label="Underpants" -                 layout="topleft" -                 name="Self Underpants"> -                    <menu_item_call.on_click -                     function="Edit.TakeOff" -                     parameter="underpants" /> -                    <menu_item_call.on_enable -                     function="Edit.EnableTakeOff" -                     parameter="underpants" /> -                </menu_item_call> -               <menu_item_call -                 enabled="false" -                 label="Tattoo" -                 layout="topleft" -                 name="Self Tattoo"> -                    <menu_item_call.on_click -                     function="Edit.TakeOff" -                     parameter="tattoo" /> -                    <menu_item_call.on_enable -                     function="Edit.EnableTakeOff" -                     parameter="tattoo" /> -                </menu_item_call> -               <menu_item_call -                 enabled="false" -                 label="Physics" -                 layout="topleft" -                 name="Self Physics"> -                    <menu_item_call.on_click -                     function="Edit.TakeOff" -                     parameter="physics" /> -                    <menu_item_call.on_enable -                     function="Edit.EnableTakeOff" -                     parameter="physics" /> -                </menu_item_call> -               <menu_item_call -                 enabled="false" -                 label="Alpha" -                 layout="topleft" -                 name="Self Alpha"> -                    <menu_item_call.on_click -                     function="Edit.TakeOff" -                     parameter="alpha" /> -                    <menu_item_call.on_enable -                     function="Edit.EnableTakeOff" -                     parameter="alpha" /> -                </menu_item_call> -                <menu_item_separator -                 layout="topleft" /> -                <menu_item_call -                 label="All Clothes" -                 layout="topleft" -                 name="All Clothes"> -                    <menu_item_call.on_click -                     function="Edit.TakeOff" -                     parameter="all" /> -                </menu_item_call> -        </context_menu> -        <context_menu -         label="HUD" -         layout="topleft" -         name="Object Detach HUD" /> -        <context_menu -         label="Detach" -         layout="topleft" -         name="Object Detach" /> -        <menu_item_call -         label="Detach All" -         layout="topleft" -         name="Detach All"> -            <menu_item_call.on_click -             function="Self.RemoveAllAttachments" -             parameter="" /> -            <menu_item_call.on_enable -             function="Self.EnableRemoveAllAttachments" /> -        </menu_item_call> -    </context_menu> -     <menu_item_call -     label="My Appearance" +     label="Outfits..."       layout="topleft"       name="Chenge Outfit">          <menu_item_call.on_click @@ -213,7 +11,7 @@          <menu_item_call.on_enable           function="Edit.EnableCustomizeAvatar" />      </menu_item_call> -    <menu_item_call label="Edit My Outfit"  +    <menu_item_call label="Current outfit..."       layout="topleft"      name="Edit Outfit">         <menu_item_call.on_click @@ -221,7 +19,7 @@         <menu_item_call.on_enable          function="Edit.EnableCustomizeAvatar" />     </menu_item_call> -    <menu_item_call label="Edit My Shape"  +    <menu_item_call label="Shape..."       layout="topleft"      name="Edit My Shape">         <menu_item_call.on_click @@ -229,7 +27,7 @@         <menu_item_call.on_enable          function="Edit.EnableEditShape" />     </menu_item_call> -   <menu_item_call label="Hover Height" +   <menu_item_call label="Hover height..."       layout="topleft"       name="Hover Height">       <menu_item_call.on_click @@ -237,42 +35,225 @@       <menu_item_call.on_enable        function="Edit.EnableHoverHeight" />     </menu_item_call> -   <menu_item_call label="Reset Skeleton" +  <context_menu +    label="Take Off" +    layout="topleft" +    name="Take Off >"> +    <context_menu +     label="Clothes" +     layout="topleft" +     name="Clothes >"> +      <menu_item_call +       enabled="false" +       label="Shirt" +       layout="topleft" +       name="Shirt"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="shirt" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="shirt" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Pants" +       layout="topleft" +       name="Pants"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="pants" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="pants" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Skirt" +       layout="topleft" +       name="Skirt"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="skirt" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="skirt" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Shoes" +       layout="topleft" +       name="Shoes"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="shoes" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="shoes" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Socks" +       layout="topleft" +       name="Socks"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="socks" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="socks" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Jacket" +       layout="topleft" +       name="Jacket"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="jacket" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="jacket" /> +      </menu_item_call> +      <menu_item_call +       enabled="false" +       label="Gloves" +       layout="topleft" +       name="Gloves"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="gloves" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="gloves" /> +      </menu_item_call> +      <menu_item_call +            enabled="false" +            label="Undershirt" +            layout="topleft" +            name="Self Undershirt"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="undershirt" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="undershirt" /> +      </menu_item_call> +      <menu_item_call +        enabled="false" +        label="Underpants" +        layout="topleft" +        name="Self Underpants"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="underpants" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="underpants" /> +      </menu_item_call> +      <menu_item_call +        enabled="false" +        label="Tattoo" +        layout="topleft" +        name="Self Tattoo"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="tattoo" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="tattoo" /> +      </menu_item_call> +      <menu_item_call +        enabled="false" +        label="Physics" +        layout="topleft" +        name="Self Physics"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="physics" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="physics" /> +      </menu_item_call> +      <menu_item_call +        enabled="false" +        label="Alpha" +        layout="topleft" +        name="Self Alpha"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="alpha" /> +        <menu_item_call.on_enable +         function="Edit.EnableTakeOff" +         parameter="alpha" /> +      </menu_item_call> +      <menu_item_separator +       layout="topleft" /> +      <menu_item_call +       label="All Clothes" +       layout="topleft" +       name="All Clothes"> +        <menu_item_call.on_click +         function="Edit.TakeOff" +         parameter="all" /> +      </menu_item_call> +    </context_menu> +    <context_menu +     label="HUD" +     layout="topleft" +     name="Object Detach HUD" /> +    <context_menu +     label="Detach" +     layout="topleft" +     name="Object Detach" /> +    <menu_item_call +     label="Detach All" +     layout="topleft" +     name="Detach All"> +      <menu_item_call.on_click +       function="Self.RemoveAllAttachments" +       parameter="" /> +      <menu_item_call.on_enable +       function="Self.EnableRemoveAllAttachments" /> +    </menu_item_call> +  </context_menu> +  <menu_item_separator/> +  <menu_item_call +    label="Sit / stand" +    layout="topleft" +    name="Sit stand"> +      <menu_item_call.on_click +       function="Self.ToggleSitStand"/> +      <menu_item_call.on_enable +       function="Self.EnableSitStand" /> +  </menu_item_call> +  <menu_item_call +     label="Fly / land" +     name="Fly land"> +      <menu_item_call.on_click +       function="Agent.toggleFlying" /> +      <menu_item_call.on_enable +       function="Agent.enableFlyLand" /> +  </menu_item_call> +  <menu_item_call +     label="Stop animations" +     name="Stop Animating My Avatar"> +        <menu_item_call.on_click +         function="Tools.StopAllAnimations" /> +  </menu_item_call> +  <menu_item_separator/> +  <menu_item_call label="Reset skeleton"       layout="topleft"       name="Reset Skeleton">       <menu_item_call.on_click        function="Avatar.ResetSkeleton" /> -   </menu_item_call> -  <menu_item_call label="Reset Skeleton And Animations" +  </menu_item_call> +  <menu_item_call label="Reset skeleton and animations"         layout="topleft"         name="Reset Skeleton And Animations">         <menu_item_call.on_click          function="Avatar.ResetSkeletonAndAnimations" />    </menu_item_call> -   <menu_item_call -     label="My Friends" -     layout="topleft" -     name="Friends..."> -        <menu_item_call.on_click -         function="SideTray.PanelPeopleTab" -         parameter="friends_panel" /> -    </menu_item_call> -    <menu_item_call -     label="My Groups" -     layout="topleft" -     name="Groups..."> -        <menu_item_call.on_click -         function="SideTray.PanelPeopleTab" -         parameter="groups_panel" /> -    </menu_item_call> -   <menu_item_call -     label="My Profile" -     layout="topleft" -     name="Profile..."> -        <menu_item_call.on_click -         function="ShowAgentProfile" -         parameter="agent" /> -    </menu_item_call>      <menu_item_call  		 label="Debug Textures"           name="Debug..."> @@ -289,8 +270,6 @@              <menu_item_call.on_visible               function="Advanced.EnableAppearanceToXML"/>      </menu_item_call> -  <menu_item_separator -       layout="topleft" />    <menu_item_call       enabled="false"       label="Block Particle Owner" @@ -298,7 +277,7 @@      <menu_item_call.on_click       function="Particle.Mute" /> -    <menu_item_call.on_enable +    <menu_item_call.on_visible       function="EnableMuteParticle" />    </menu_item_call>  </context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_favorites.xml b/indra/newview/skins/default/xui/en/menu_favorites.xml index be380e11e5..082f2f9670 100644 --- a/indra/newview/skins/default/xui/en/menu_favorites.xml +++ b/indra/newview/skins/default/xui/en/menu_favorites.xml @@ -21,20 +21,20 @@           parameter="about" />      </menu_item_call>      <menu_item_call -     label="Copy SLurl" +     label="Show on Map"       layout="topleft" -     name="Copy slurl"> +     name="Show On Map">          <menu_item_call.on_click           function="Favorites.DoToSelected" -         parameter="copy_slurl" /> +         parameter="show_on_map" />      </menu_item_call>      <menu_item_call -     label="Show on Map" +     label="Copy SLurl"       layout="topleft" -     name="Show On Map"> +     name="Copy slurl">          <menu_item_call.on_click           function="Favorites.DoToSelected" -         parameter="show_on_map" /> +         parameter="copy_slurl" />      </menu_item_call>      <menu_item_separator diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index eda9739976..e7782a4ca0 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -393,6 +393,13 @@           parameter="model" />        </menu_item_call>      </menu> +      <menu_item_call +       label="Use as Favorites folder" +       layout="topleft" +       name="Set Favorites folder"> +        <menu_item_call.on_click +         function="Inventory.SetFavoritesFolder"/> +      </menu_item_call>      <menu       label="Change Type"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/menu_inventory_search_visibility.xml b/indra/newview/skins/default/xui/en/menu_inventory_search_visibility.xml new file mode 100644 index 0000000000..46193f4a7a --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_inventory_search_visibility.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<toggleable_menu + bottom="806" + layout="topleft" + left="0" + mouse_opaque="false" + name="menu_search_visibility" + visible="false"> +  <menu_item_check +   label="Search Trash" +   layout="topleft" +   name="search_trash"> +    <on_click +     function="Inventory.GearDefault.Custom.Action" +     parameter="toggle_search_trash" /> +    <on_check +     function="Inventory.GearDefault.Check" +     parameter="toggle_search_trash" /> +  </menu_item_check> +  <menu_item_check +   label="Search Library" +   layout="topleft" +   name="search_library"> +    <on_click +     function="Inventory.GearDefault.Custom.Action" +     parameter="toggle_search_library" /> +    <on_check +     function="Inventory.GearDefault.Check" +     parameter="toggle_search_library" /> +  </menu_item_check> +  <menu_item_separator +   layout="topleft" /> +  <menu_item_check +   label="Include links" +   layout="topleft" +   name="include_links"> +    <on_click +     function="Inventory.GearDefault.Custom.Action" +     parameter="include_links" /> +    <on_check +     function="Inventory.GearDefault.Check" +     parameter="include_links" />          +  </menu_item_check>     +</toggleable_menu> diff --git a/indra/newview/skins/default/xui/en/menu_picks.xml b/indra/newview/skins/default/xui/en/menu_picks.xml index ebb49c9004..a408e6136c 100644 --- a/indra/newview/skins/default/xui/en/menu_picks.xml +++ b/indra/newview/skins/default/xui/en/menu_picks.xml @@ -3,7 +3,17 @@   layout="topleft"   name="Picks">      <menu_item_call -     label="Info" +     label="Teleport" +     layout="topleft" +     name="pick_teleport"> +        <menu_item_call.on_click +         function="Pick.Teleport" /> +        <menu_item_call.on_enable +         function="Pick.Enable"  +         parameter="teleport" /> +    </menu_item_call> +    <menu_item_call +     label="View Pick"       layout="topleft"       name="pick_info">          <menu_item_call.on_click @@ -13,7 +23,7 @@           parameter="info" />      </menu_item_call>      <menu_item_call -     label="Edit" +     label="Edit Pick"       layout="topleft"       name="pick_edit"       visible="false"> @@ -24,17 +34,7 @@           parameter="edit" />      </menu_item_call>      <menu_item_call -     label="Teleport" -     layout="topleft" -     name="pick_teleport"> -        <menu_item_call.on_click -         function="Pick.Teleport" /> -        <menu_item_call.on_enable -         function="Pick.Enable"  -         parameter="teleport" /> -    </menu_item_call> -    <menu_item_call -     label="Map" +     label="Show on map"       layout="topleft"       name="pick_map">          <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml index 1aeb166e01..eb76f58722 100644 --- a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml @@ -7,15 +7,18 @@   name="menu_folder_gear"   visible="false">      <menu_item_call -     label="Add Landmark" +     label="Landmark current location"       layout="topleft"       name="add_landmark">          <on_click           function="Places.LandmarksGear.Add.Action"           parameter="add_landmark" /> +        <on_enable +         function="Places.LandmarksGear.Enable" +         parameter="add_landmark" />      </menu_item_call>      <menu_item_call -     label="Add Folder" +     label="Create subfolder"       layout="topleft"       name="add_folder">          <on_click diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml index ff5fdd3795..b8249b621b 100644 --- a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml +++ b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml @@ -18,7 +18,18 @@           parameter="teleport" />      </menu_item_call>      <menu_item_call -     label="More Information" +     label="Share" +     layout="topleft" +     name="share"> +        <on_click +         function="Places.LandmarksGear.Custom.Action" +         parameter="share" /> +        <on_enable +         function="Places.LandmarksGear.Enable" +         parameter="share" /> +    </menu_item_call> +    <menu_item_call +     label="View/Edit Landmark"       layout="topleft"       name="more_info">          <on_click @@ -39,26 +50,27 @@           function="Places.LandmarksGear.Enable"           parameter="show_on_map" />      </menu_item_call> -    <menu_item_separator -     layout="topleft" />      <menu_item_call -     label="Add Landmark" +     label="Copy SLurl"       layout="topleft" -     name="add_landmark"> +     name="copy_slurl">          <on_click -         function="Places.LandmarksGear.Add.Action" -         parameter="add_landmark" /> -    </menu_item_call> +         function="Places.LandmarksGear.CopyPaste.Action" +         parameter="copy_slurl" /> +        <on_enable +         function="Places.LandmarksGear.Enable" +         parameter="copy_slurl" /> +    </menu_item_call>       <menu_item_call -     label="Add Folder" +     label="Create Pick"       layout="topleft" -     name="add_folder"> +     name="create_pick">          <on_click -         function="Places.LandmarksGear.Add.Action" -         parameter="category" /> +         function="Places.LandmarksGear.Custom.Action" +         parameter="create_pick" />          <on_enable           function="Places.LandmarksGear.Enable" -         parameter="category" /> +         parameter="create_pick" />      </menu_item_call>      <menu_item_call       label="Restore Item" @@ -82,7 +94,7 @@           parameter="cut" />      </menu_item_call>      <menu_item_call -     label="Copy Landmark" +     label="Copy"       layout="topleft"       name="copy_landmark">          <on_click @@ -90,17 +102,6 @@           parameter="copy" />      </menu_item_call>      <menu_item_call -     label="Copy SLurl" -     layout="topleft" -     name="copy_slurl"> -        <on_click -         function="Places.LandmarksGear.CopyPaste.Action" -         parameter="copy_slurl" /> -        <on_enable -         function="Places.LandmarksGear.Enable" -         parameter="copy_slurl" /> -    </menu_item_call> -    <menu_item_call       label="Paste"       layout="topleft"       name="paste"> @@ -171,15 +172,4 @@           function="Places.LandmarksGear.Enable"           parameter="sort_by_date" />      </menu_item_check> -    <menu_item_call -     label="Create Pick" -     layout="topleft" -     name="create_pick"> -        <on_click -         function="Places.LandmarksGear.Custom.Action" -         parameter="create_pick" /> -        <on_enable -         function="Places.LandmarksGear.Enable" -         parameter="create_pick" /> -    </menu_item_call>  </toggleable_menu> diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml index f939c3996d..52da591e35 100644 --- a/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml @@ -7,20 +7,31 @@       layout="topleft"       name="Teleport">          <menu_item_call.on_click -         function="TeleportHistory.Teleport" /> +         function="TeleportHistory.Action" +         parameter="teleport" />      </menu_item_call>      <menu_item_call -     label="More Information" +     label="View"       layout="topleft"       name="More Information">          <menu_item_call.on_click -         function="TeleportHistory.MoreInformation" /> +         function="TeleportHistory.Action" +         parameter="view" /> +    </menu_item_call> +    <menu_item_call +     label="Show on map" +     layout="topleft" +     name="show_on_map"> +        <menu_item_call.on_click +         function="TeleportHistory.Action" +         parameter="show_on_map" />      </menu_item_call>      <menu_item_call       label="Copy SLurl"       layout="topleft"       name="CopyToClipboard">          <menu_item_call.on_click -         function="TeleportHistory.CopyToClipboard" /> +         function="TeleportHistory.Action" +         parameter="copy_slurl" />      </menu_item_call>  </context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 5fa1847d1b..0d456ffe5d 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -15,24 +15,6 @@           function="ShowAgentProfile"           parameter="agent" />        </menu_item_call> -      <menu_item_call -       label="Appearance..." -       name="ChangeOutfit" -       shortcut="control|O"> -        <menu_item_call.on_click -         function="Floater.ToggleOrBringToFront" -         parameter="appearance" /> -        <menu_item_call.on_enable -         function="Edit.EnableCustomizeAvatar" /> -      </menu_item_call> -      <menu_item_call -       label="Choose an avatar..." -       name="Avatar Picker"> -        <menu_item_call.on_click -         function="Floater.ToggleOrBringToFront" -         parameter="avatar" /> -      </menu_item_call> -      <menu_item_separator/>        <menu_item_check           label="Inventory..."           name="Inventory" @@ -76,119 +58,29 @@            parameter="experiences"/>        </menu_item_call>        <menu_item_call -        label="My Scripts..." -        name="MyScripts"> -        <menu_item_call.on_click -          function="Floater.ToggleOrBringToFront" -          parameter="my_scripts"/> -      </menu_item_call> -      <menu_item_separator/> -      <menu_item_call         label="Camera Controls..."         name="Camera Controls">          <menu_item_call.on_click           function="Floater.ToggleOrBringToFront"           parameter="camera" />        </menu_item_call> -      <menu -       create_jump_keys="true" -       label="Movement" -       name="Movement" -       tear_off="true"> -        <menu_item_call -         label="Sit Down" -         layout="topleft" -         shortcut="alt|shift|S" -         name="Sit Down Here"> -          <menu_item_call.on_click -           function="Self.SitDown"/> -          <menu_item_call.on_visible -           function="Self.ShowSitDown"/> -          <menu_item_call.on_enable -           function="Self.EnableSitDown" /> -        </menu_item_call> -        <menu_item_call -         label="Stand Up" -         layout="topleft" -         shortcut="alt|shift|S" -         name="Stand up"> -          <menu_item_call.on_click -           function="Self.StandUp"/> -          <menu_item_call.on_visible -           function="Self.EnableStandUp"/> -          <menu_item_call.on_enable -           function="Self.EnableStandUp" /> -        </menu_item_call> -        <menu_item_check -         label="Fly" -         name="Fly" -         shortcut="HOME"> -          <menu_item_check.on_check -           function="Agent.getFlying" /> -          <menu_item_check.on_click -           function="Agent.toggleFlying" /> -          <menu_item_check.on_enable -           function="Agent.enableFlying" /> -        </menu_item_check> -        <menu_item_call -         label="Stop flying" -         name="Stop flying" -         shortcut="HOME"> -          <menu_item_call.on_click -           function="Agent.toggleFlying" /> -          <menu_item_call.on_enable -           function="Agent.getFlying" /> -        </menu_item_call>	 -        <menu_item_check -         label="Always Run" -         name="Always Run" -         shortcut="control|R"> -          <menu_item_check.on_check -           function="World.CheckAlwaysRun" /> -          <menu_item_check.on_click -           function="World.AlwaysRun" /> -        </menu_item_check> -        <menu_item_call -         label="Stop Animating Me" -         name="Stop Animating My Avatar"> -          <menu_item_call.on_click -           function="Tools.StopAllAnimations" /> -        </menu_item_call> -        <menu_item_check -         label="Walk / run / fly..." -         name="WalkRunFly"> -          <menu_item_check.on_check -           function="Floater.Visible" -           parameter="moveview" /> -          <menu_item_check.on_click -           function="Floater.ToggleOrBringToFront" -           parameter="moveview" /> -        </menu_item_check> -      </menu> - -      <menu -       create_jump_keys="true" -       label="Status" -       name="Status" -       tear_off="true"> -        <menu_item_check -         name="Away" -         label="Away"> -          <menu_item_check.on_check -           function="View.Status.CheckAway" /> -          <menu_item_check.on_click -           function="World.SetAway" /> -        </menu_item_check> -        <menu_item_check -         name="Do Not Disturb" -         label="Do Not Disturb"> -          <menu_item_check.on_check -           function="View.Status.CheckDoNotDisturb" /> -          <menu_item_check.on_click -           function="World.SetDoNotDisturb"/> -        </menu_item_check> -       -    </menu> +      <menu_item_separator/> +      <menu_item_check +       name="Away" +       label="Away"> +        <menu_item_check.on_check +         function="View.Status.CheckAway" /> +        <menu_item_check.on_click +         function="World.SetAway" /> +      </menu_item_check> +      <menu_item_check +       name="Do Not Disturb" +       label="Do Not Disturb"> +        <menu_item_check.on_check +         function="View.Status.CheckDoNotDisturb" /> +        <menu_item_check.on_click +         function="World.SetDoNotDisturb"/> +      </menu_item_check>        <menu_item_separator/> @@ -213,6 +105,15 @@           name="ManageMyAccount_url"           parameter="WebLaunchJoinNow,http://secondlife.com/account/" />        </menu_item_call> +      <menu_item_call +           label="[Membership]" +           name="Membership"> +            <menu_item_call.on_click +             function="Advanced.ShowURL" +             parameter="https://secondlife.com/my/account/membership.php"/> +            <menu_item_call.on_visible +                 function="Membership.UpdateLabel"/> +      </menu_item_call>        <menu_item_separator/> @@ -260,6 +161,325 @@      </menu>      <menu       create_jump_keys="true" +     label="Avatar" +     name="Avatar" +     tear_off="true"> +       <menu_item_call +         label="Complete avatars..." +         name="Avatar Picker"> +            <menu_item_call.on_click +             function="Floater.ToggleOrBringToFront" +             parameter="avatar" /> +       </menu_item_call> +       <menu_item_call +         label="Outfits..." +         name="ChangeOutfit" +         shortcut="control|O"> +            <menu_item_call.on_click +             function="Floater.ToggleOrBringToFront" +             parameter="appearance" /> +            <menu_item_call.on_enable +             function="Edit.EnableCustomizeAvatar" /> +       </menu_item_call> +       <menu_item_call  +         label="Current outfit..." +         layout="topleft" +         name="Edit Outfit"> +            <menu_item_call.on_click +             function="EditOutfit" /> +            <menu_item_call.on_enable +             function="Edit.EnableCustomizeAvatar" /> +       </menu_item_call> +       <menu_item_call  +         label="Shape..." +         layout="topleft" +         name="Edit My Shape"> +            <menu_item_call.on_click +             function="EditShape" /> +            <menu_item_call.on_enable +             function="Edit.EnableEditShape" /> +      </menu_item_call> +       <menu_item_call label="Hover height..." +         layout="topleft" +         name="Hover Height"> +            <menu_item_call.on_click +             function="HoverHeight" /> +            <menu_item_call.on_enable +             function="Edit.EnableHoverHeight" /> +      </menu_item_call> +      <menu +        label="Take Off" +        layout="topleft" +        name="Take Off >"> +        <menu +         label="Clothes" +         layout="topleft" +         name="Clothes >"> +          <menu_item_call +           enabled="false" +           label="Shirt" +           layout="topleft" +           name="Shirt"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="shirt" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="shirt" /> +          </menu_item_call> +          <menu_item_call +           enabled="false" +           label="Pants" +           layout="topleft" +           name="Pants"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="pants" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="pants" /> +          </menu_item_call> +          <menu_item_call +           enabled="false" +           label="Skirt" +           layout="topleft" +           name="Skirt"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="skirt" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="skirt" /> +          </menu_item_call> +          <menu_item_call +           enabled="false" +           label="Shoes" +           layout="topleft" +           name="Shoes"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="shoes" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="shoes" /> +          </menu_item_call> +          <menu_item_call +           enabled="false" +           label="Socks" +           layout="topleft" +           name="Socks"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="socks" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="socks" /> +          </menu_item_call> +          <menu_item_call +           enabled="false" +           label="Jacket" +           layout="topleft" +           name="Jacket"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="jacket" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="jacket" /> +          </menu_item_call> +          <menu_item_call +           enabled="false" +           label="Gloves" +           layout="topleft" +           name="Gloves"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="gloves" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="gloves" /> +          </menu_item_call> +          <menu_item_call +                enabled="false" +                label="Undershirt" +                layout="topleft" +                name="Self Undershirt"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="undershirt" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="undershirt" /> +          </menu_item_call> +          <menu_item_call +            enabled="false" +            label="Underpants" +            layout="topleft" +            name="Self Underpants"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="underpants" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="underpants" /> +          </menu_item_call> +          <menu_item_call +            enabled="false" +            label="Tattoo" +            layout="topleft" +            name="Self Tattoo"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="tattoo" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="tattoo" /> +          </menu_item_call> +          <menu_item_call +            enabled="false" +            label="Physics" +            layout="topleft" +            name="Self Physics"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="physics" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="physics" /> +          </menu_item_call> +          <menu_item_call +            enabled="false" +            label="Alpha" +            layout="topleft" +            name="Self Alpha"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="alpha" /> +            <menu_item_call.on_enable +             function="Edit.EnableTakeOff" +             parameter="alpha" /> +          </menu_item_call> +          <menu_item_separator +           layout="topleft" /> +          <menu_item_call +           label="All Clothes" +           layout="topleft" +           name="All Clothes"> +            <menu_item_call.on_click +             function="Edit.TakeOff" +             parameter="all" /> +          </menu_item_call> +        </menu> +        <menu +         label="HUD" +         layout="topleft" +         name="Avatar Detach HUD" /> +        <menu +         label="Detach" +         layout="topleft" +         name="Avatar Detach" /> +        <menu_item_call +         label="Detach All" +         layout="topleft" +         name="Detach All"> +          <menu_item_call.on_click +           function="Self.RemoveAllAttachments" +           parameter="" /> +          <menu_item_call.on_enable +           function="Self.EnableRemoveAllAttachments" /> +        </menu_item_call> +      </menu> +      <menu_item_separator/> + +       <menu_item_call +         label="Sit / stand" +         layout="topleft" +         shortcut="alt|shift|S" +         name="Sit stand"> +          <menu_item_call.on_click +           function="Self.ToggleSitStand"/> +          <menu_item_call.on_enable +           function="Self.EnableSitStand" /> +        </menu_item_call> +        <menu_item_call +         label="Fly / land" +         name="Fly land" +         shortcut="HOME"> +          <menu_item_call.on_click +           function="Agent.toggleFlying" /> +          <menu_item_call.on_enable +           function="Agent.enableFlyLand" /> +        </menu_item_call>        +        <menu_item_call +         label="Stop animations" +         name="Stop Animating My Avatar"> +          <menu_item_call.on_click +           function="Tools.StopAllAnimations" /> +        </menu_item_call> +        <menu_item_check +          label="Walk / run / fly..." +          name="WalkRunFly"> +          <menu_item_check.on_check +           function="Floater.Visible" +           parameter="moveview" /> +          <menu_item_check.on_click +           function="Floater.ToggleOrBringToFront" +           parameter="moveview" /> +        </menu_item_check> +        <menu_item_check +          label="Always run" +          name="Always Run" +          shortcut="control|R"> +          <menu_item_check.on_check +           function="World.CheckAlwaysRun" /> +          <menu_item_check.on_click +           function="World.AlwaysRun" /> +        </menu_item_check> +      <menu_item_separator/> +      <menu_item_check +       label="Gestures..." +       name="Gestures" +       shortcut="control|G"> +        <menu_item_check.on_check +         function="Floater.Visible" +         parameter="gestures" /> +        <menu_item_check.on_click +         function="Floater.Toggle" +         parameter="gestures" /> +      </menu_item_check> +      <menu_item_separator/> +      <menu_item_call  +       label="Reset skeleton" +       layout="topleft" +       name="Reset Skeleton"> +        <menu_item_call.on_click +         function="Avatar.ResetSkeleton" /> +      </menu_item_call> +      <menu_item_call  +       label="Reset skeleton and animations" +       layout="topleft" +       name="Reset Skeleton And Animations"> +        <menu_item_call.on_click +         function="Avatar.ResetSkeletonAndAnimations" /> +      </menu_item_call> +      <menu_item_call +       label="Attachment scripts..." +       name="MyScripts"> +        <menu_item_call.on_click +         function="Floater.ToggleOrBringToFront" +         parameter="my_scripts"/> +      </menu_item_call> +      <menu_item_separator/> +      <menu_item_call +     label="Help with avatars..." +     name="Help with avatars"> +        <menu_item_call.on_click +            function="Advanced.ShowURL" +            parameter="https://community.secondlife.com/search/?type=cms_records3&tags=avatar&nodes=30&search_and_or=or"/> +      </menu_item_call> +    </menu> +    <menu +     create_jump_keys="true"       label="Communicate"       name="Communicate"       tear_off="true"> @@ -524,12 +744,18 @@               parameter="region_info" />          </menu_item_call>          <menu_item_call -         label="My land holdings..." -         name="My Land"> +         label="My Linden Home..." +         name="Linden Home"> +            <menu_item_call.on_click +             function="World.LindenHome"/> +        </menu_item_call> +        <menu_item_call +             label="My land holdings..." +             name="My Land">              <menu_item_call.on_click               function="Floater.Show"               parameter="land_holdings" /> -        </menu_item_call> +      </menu_item_call>          <menu_item_call           label="Buy this land"           name="Buy Land"> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 2f4da4f9b7..fd243d8b19 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -1024,18 +1024,6 @@ The group no longer has open enrollment.    <notification     icon="alertmodal.tga" -   name="JoinGroupSuccess" -   type="alertmodal"> -You have been added to the group -    <tag>group_id</tag> -    <tag>success</tag> -    <usetemplate -       name="okbutton" -       yestext="OK"/> -  </notification> -   -  <notification -   icon="alertmodal.tga"     name="JoinGroupInsufficientFunds"     type="alertmodal">  Unable to transfer the required L$ [membership_fee] membership fee. @@ -4249,13 +4237,6 @@ Leave Group?       yestext="OK"/>    </notification> -  <notification -   icon="notify.tga" -   name="GroupDepart" -   type="notify"> -You have left the group '<nolink>[group_name]</nolink>'. -    <tag>group</tag> -  </notification>    <notification     icon="alertmodal.tga" @@ -11486,7 +11467,28 @@ Cannot create large prims that intersect other residents.  Please re-try when ot       name="okbutton"       yestext="OK"/>    </notification> -   + +  <notification +   icon="alertmodal.tga" +   name="AddPaymentMethod" +   type="alertmodal"> +On the following page, choose a L$ amount +and click a place Order button. You will be +able to add a payment method at checkout. +    <tag>confirm</tag> +    <form name="form"> +      <button +       default="true" +       index="0" +       width="120" +       name="Continue" +       text="Continue"/> +      <button +       index="1" +       name="Cancel" +       text="Cancel"/> +    </form> +  </notification>    <notification     icon="alert.tga" diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml index dc1553e6a3..85d73ece48 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml @@ -13,7 +13,7 @@   width="333">      <string       name="edit_shape_title"> -        Editing Shape +        Shape      </string>      <string       name="edit_skin_title"> diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index d77fbdec0a..7bd5c9b548 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -32,30 +32,20 @@      		 left="12"  		     name="ItemcountText"  		     font="SansSerifMedium" -		     text_color="EmphasisColor" +		     text_color="InventoryItemLinkColor"  		     use_ellipses="true"  		     top_pad="0"  		     width="300">      Items:    </text> -  <filter_editor -   text_pad_left="10" -   follows="left|top|right" +  <combo_box     height="23" -   label="Enter search text"     layout="topleft"     left="10" -   max_length_chars="300" -   name="inventory search editor"     top="18" -   width="208" /> -  <combo_box -   height="23" -   layout="topleft" -   left_pad="4"     name="search_type" -   follows="top|right" -   width="90"> +   follows="top|left" +   width="88">      <item       label="Name"       name="Name" @@ -72,7 +62,27 @@       label="UUID"       name="UUID"       value="search_by_UUID"/> -    </combo_box> +  </combo_box> +  <menu_button +   follows="top|left" +   tool_tip="Show search visibility options" +   height="23" +   image_overlay="Inv_Toolbar_SearchVisibility" +   layout="topleft" +   left_pad="3" +   name="options_visibility_btn" +   width="31" /> +  <filter_editor +   text_pad_left="10" +   follows="left|top|right" +   height="23" +   label="Enter search text" +   layout="topleft" +   left_pad="3" +   max_length_chars="300" +   highlight_text_field="true" +   name="inventory search editor" +   width="177" />    <tab_container       follows="all"       halign="center" @@ -117,20 +127,32 @@       name="Recent Items"       show_item_link_overlays="true"       width="290" /> -       <inventory_panel -      name="Worn Items" -      label="WORN" -      show_empty_message="false" -      follows="all" -      layout="topleft" -      width="290" -      bg_opaque_color="DkGray2" -      bg_alpha_color="DkGray2" -      background_visible="true" -      border="false" -      bevel_style="none" -      scroll.reserve_scroll_corner="false"> -  </inventory_panel> +    <inventory_panel +     name="Worn Items" +     label="WORN" +     show_empty_message="false" +     follows="all" +     layout="topleft" +     width="290" +     bg_opaque_color="DkGray2" +     bg_alpha_color="DkGray2" +     background_visible="true" +     border="false" +     bevel_style="none" +     scroll.reserve_scroll_corner="false"/> +    <favorites_inventory_panel +     name="Favorite Items" +     label="FAVORITES" +     show_empty_message="false" +     follows="all" +     layout="topleft" +     width="290" +     bg_opaque_color="DkGray2" +     bg_alpha_color="DkGray2" +     background_visible="true" +     border="false" +     bevel_style="none" +     scroll.reserve_scroll_corner="false"/>    </tab_container>    <layout_stack     animate="false" diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index 3f7444dec3..6fd54d7c6a 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -81,7 +81,7 @@              name="title"              text_color="LtGray"              top="0" -            value="Edit Outfit" +            value="Current Outfit"              use_ellipses="true"              width="275" /> diff --git a/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml b/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml index 0e3de821d1..6be5aba545 100644 --- a/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml +++ b/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml @@ -38,7 +38,7 @@                      height="10"                      layout="topleft"                      left_delta="10" -                    top_delta="30" +                    top_delta="25"                      width="100">                  Position:              </text> @@ -93,7 +93,7 @@                      follows="left|top"                      height="10"                      layout="topleft" -                    left_delta="-5" +                    left_delta="65"                      top_delta="20"                      width="80">                  Color: @@ -108,12 +108,58 @@                      name="sun_moon_color"                      top_pad="5"                      width="60" /> +          <text +            follows="left|top" +            height="10" +            layout="topleft" +            left_delta="-235" +            top_delta="-3" +            width="200"> +            Azimuth: +          </text> +          <slider +            decimal_digits="2" +            follows="left|top" +            height="16" +            increment="0.01" +            initial_value="0" +            layout="topleft" +            left_delta="5" +            min_val="0" +            max_val="359.99" +            name="sun_azimuth" +            top_delta="13" +            width="215" +            can_edit_text="true"/> +          <text +            follows="left|top" +            height="10" +            layout="topleft" +            left_delta="-5" +            top_delta="22" +            width="200"> +            Elevation: +          </text> +          <slider +            decimal_digits="2" +            follows="left|top" +            height="16" +            increment="0.01" +            initial_value="0" +            layout="topleft" +            left_delta="5" +            min_val="-90" +            max_val="90" +            name="sun_elevation" +            top_delta="13" +            width="215" +            can_edit_text="true"/>              <text                      follows="left|top"                      height="10"                      layout="topleft" -                    left_delta="-160" -                    top_delta="27" +                    left_delta="-5" +                    top_delta="22"                      width="200">                  Glow Focus:              </text> @@ -128,8 +174,8 @@                      min_val="-2"                      max_val="2"                      name="glow_focus" -                    top_delta="15" -                    width="250" +                    top_delta="13" +                    width="215"                      can_edit_text="true"/>              <text                      follows="left|top" @@ -151,8 +197,8 @@                      min_val="0"                      max_val="1.99"                      name="glow_size" -                    top_delta="15" -                    width="250" +                    top_delta="13" +                    width="215"                      can_edit_text="true"/>              <text                      follows="left|top" @@ -174,8 +220,8 @@                      min_val="0"                      max_val="500"                      name="star_brightness" -                    top_delta="15" -                    width="250" +                    top_delta="13" +                    width="215"                      can_edit_text="true"/>              <check_box @@ -227,7 +273,7 @@                              height="10"                              layout="topleft"                              left_delta="10" -                            top_delta="30" +                            top_delta="25"                              width="100">                          Position:                      </text> @@ -278,30 +324,76 @@                              top_delta="15"                              width="130"                              can_edit_text="true"/> -                    <text -                            follows="left|top" -                            height="10" -                            layout="topleft" -                            left_delta="-5" -                            top_delta="22" -                            width="200"> -                        Brightness: -                    </text> -                    <slider -                            decimal_digits="2" -                            follows="left|top" -                            height="16" -                            increment="0.01" -                            initial_value="0" -                            layout="topleft" -                            left_delta="5" -                            min_val="0.0" -                            max_val="1.0" -                            name="moon_brightness" -                            top_delta="15" -                            width="130" -                            can_edit_text="true"/> -                <check_box +                  <text +                    follows="left|top" +                    height="10" +                    layout="topleft" +                    left_delta="-170" +                    top_delta="32" +                    width="200"> +                    Azimuth: +                  </text> +                  <slider +                    decimal_digits="2" +                    follows="left|top" +                    height="16" +                    increment="0.01" +                    initial_value="0" +                    layout="topleft" +                    left_delta="5" +                    min_val="0" +                    max_val="359.99" +                    name="moon_azimuth" +                    top_delta="13" +                    width="215" +                    can_edit_text="true"/> +                  <text +                    follows="left|top" +                    height="10" +                    layout="topleft" +                    left_delta="-5" +                    top_delta="22" +                    width="200"> +                    Elevation: +                  </text> +                  <slider +                    decimal_digits="2" +                    follows="left|top" +                    height="16" +                    increment="0.01" +                    initial_value="0" +                    layout="topleft" +                    left_delta="5" +                    min_val="-90" +                    max_val="90" +                    name="moon_elevation" +                    top_delta="13" +                    width="215" +                    can_edit_text="true"/> +                  <text +                    follows="left|top" +                    height="10" +                    layout="topleft" +                    left_delta="-5" +                    top_delta="22" +                    width="200"> +                    Brightness: +                  </text> +                  <slider +                    decimal_digits="2" +                    follows="left|top" +                    height="16" +                    increment="0.01" +                    initial_value="0" +                    layout="topleft" +                    left_delta="5" +                    min_val="0.0" +                    max_val="1.0" +                    name="moon_brightness" +                    top_delta="13" +                    width="215" +                    can_edit_text="true"/> +                  <check_box                          control_name="moonbeacon"                          width="60"                          height="16" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index f9f12e7f5c..c2b5286fc3 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2297,6 +2297,7 @@ For AI Character: Get the closest navigable point to the point provided.  	<!-- inventory -->  	<string name="InventoryNoMatchingItems">Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search].</string>  	<string name="InventoryNoMatchingRecentItems">Didn't find what you're looking for? Try [secondlife:///app/inventory/filters Show filters].</string> +	<string name="InventoryFavoritItemsNotSelected">Click "Use as Favorites folder" on a folder of your choice. You can choose a different folder at any time. System folders cannot be used for Favorites.</string>  	<string name="PlacesNoMatchingItems">Didn't find what you're looking for? Try [secondlife:///app/search/places/[SEARCH_TERM] Search].</string>  	<string name="FavoritesNoMatchingItems">Drag a landmark here to add it to your favorites.</string>  	<string name="MarketplaceNoMatchingItems">No items found. Check the spelling of your search string and try again.</string> @@ -2417,6 +2418,7 @@ If you continue to receive this message, please contact Second Life support for  	<string name="Scripts"       value=" Scripts," />  	<string name="Sounds"        value=" Sounds," />  	<string name="Textures"      value=" Textures," /> +	<string name="Settings"      value=" Settings," />  	<string name="Snapshots"     value=" Snapshots," />  	<string name="No Filters"    value="No " />  	<string name="Since Logoff"  value=" - Since Logoff" /> @@ -2834,7 +2836,6 @@ If you continue to receive this message, please contact Second Life support for  	<string name="AcquiredItems">Acquired Items</string>  	<string name="Cancel">Cancel</string>  	<string name="UploadingCosts">Uploading [NAME] costs L$ [AMOUNT]</string> -	<string name="BuyingCosts">Buying this costs L$ [AMOUNT]</string>  	<string name="UnknownFileExtension">  		Unknown file extension .%s  Expected .wav, .tga, .bmp, .jpg, .jpeg, or .anim @@ -3758,6 +3759,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].    <string name="unread_chat_multiple">      [SOURCES] have said something new    </string> +  <string name="teleport_preamble_compact_chat"> +    You are now at +  </string>  	<string name="session_initialization_timed_out_error">  		The session initialization is timed out  	</string> @@ -3767,6 +3771,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].    <string name="voice_morphing_url">https://secondlife.com/destination/voice-island</string>    <string name="premium_voice_morphing_url">https://secondlife.com/destination/voice-morphing-premium</string> +  <string name="lindenhomes_get_home_url">https://secondlife.com/land/lindenhomes/member.php</string> +  <string name="lindenhomes_my_home_url">https://land.secondlife.com/en-Us/lindenhomes/my-home.php</string> +  <string name="membership_url">https://secondlife.com/my/account/membership.php</string> +    <!-- Financial operations strings -->    <string name="paid_you_ldollars">[NAME] paid you L$[AMOUNT] [REASON].</string>    <string name="paid_you_ldollars_gift">[NAME] paid you L$[AMOUNT]: [REASON]</string> @@ -3790,11 +3798,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE].    <string name="to upload">to upload</string>    <string name="to publish a classified ad">to publish a classified ad</string> -  <string name="giving">Giving L$ [AMOUNT]</string>    <string name="uploading_costs">Uploading costs L$ [AMOUNT]</string>    <string name="this_costs">This costs L$ [AMOUNT]</string> -  <string name="buying_selected_land">Buying selected land for L$ [AMOUNT]</string> -  <string name="this_object_costs">This object costs L$ [AMOUNT]</string> +   +  <string name="buying_selected_land">This land costs</string> +  <string name="this_object_costs">This item costs</string> +  <string name="giving">You want to give</string>    <string name="group_role_everyone">Everyone</string>    <string name="group_role_officers">Officers</string> @@ -3957,6 +3966,9 @@ Please check http://status.secondlifegrid.net to see if there is a known problem    <string name="Premium PlusMembership">Premium Plus</string>    <string name="InternalMembership">Internal</string> <!-- No need to translate --> +  <string name="MembershipUpgradeText">Upgrade to Premium</string> +  <string name="MembershipPremiumText">My Premium membership</string> +    <!-- Question strings for delete items notifications -->    <string name="DeleteItems">Delete selected items?</string>    <string name="DeleteItem">Delete selected item?</string> @@ -4104,8 +4116,8 @@ Try enclosing path to the editor with double quotes.    <!-- commands -->    <string name="Command_AboutLand_Label">About land</string> -  <string name="Command_Appearance_Label">Appearance</string> -  <string name="Command_Avatar_Label">Avatar</string> +  <string name="Command_Appearance_Label">Outfits</string> +  <string name="Command_Avatar_Label">Complete avatars</string>    <string name="Command_Build_Label">Build</string>    <string name="Command_Chat_Label">Chat</string>    <string name="Command_Conversations_Label">Conversations</string> diff --git a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml index 2cc4abdd30..1c4822b8d5 100644 --- a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml @@ -6,9 +6,11 @@    text_pad_left="7"    select_on_focus="true"    text_tentative_color="TextFgTentativeColor" +  highlight_text_field="false"    background_image="TextField_Search_Off"    background_image_disabled="TextField_Search_Disabled" -  background_image_focused="TextField_Search_Active"> +  background_image_focused="TextField_Search_Active" +  background_image_highlight="TextField_Search_Highlight">    <search_button label=""      top_pad="4"      left_pad="4" diff --git a/indra/newview/skins/default/xui/en/widgets/search_editor.xml b/indra/newview/skins/default/xui/en/widgets/search_editor.xml index faa0404b35..dc5a07bf4f 100644 --- a/indra/newview/skins/default/xui/en/widgets/search_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/search_editor.xml @@ -7,9 +7,11 @@    text_pad_right="6"     select_on_focus="true"    text_tentative_color="TextFgTentativeColor" +  highlight_text_field="false"    background_image="TextField_Search_Off"    background_image_disabled="TextField_Search_Disabled" -  background_image_focused="TextField_Search_Active" > +  background_image_focused="TextField_Search_Active" +  background_image_highlight="TextField_Search_Highlight">    <search_button       top_pad="4"      left_pad="4"  | 
