diff options
Diffstat (limited to 'indra')
40 files changed, 204 insertions, 82 deletions
| diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index eaff42aaeb..2240a2146c 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -1167,7 +1167,7 @@ void LLFontGL::drawGlyph(S32& glyph_count, LLVector3* vertex_out, LLVector2* uv_  	else if (shadow == DROP_SHADOW_SOFT)  	{  		LLColor4U shadow_color = LLFontGL::sShadowColor; -		shadow_color.mV[VALPHA] = color.mV[VALPHA] * drop_shadow_strength * DROP_SHADOW_SOFT_STRENGTH; +		shadow_color.mV[VALPHA] = U8(color.mV[VALPHA] * drop_shadow_strength * DROP_SHADOW_SOFT_STRENGTH);  		for (S32 pass = 0; pass < 5; pass++)  		{  			LLRectf screen_rect_offset = screen_rect; diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h index 8241ee1518..f26a380e5f 100644 --- a/indra/llui/llaccordionctrl.h +++ b/indra/llui/llaccordionctrl.h @@ -141,6 +141,8 @@ public:  	const LLAccordionCtrlTab* getSelectedTab() const { return mSelectedTab; } +	bool getFitParent() const {return mFitParent;} +  private:  	void	initNoTabsWidget(const LLTextBox::Params& tb_params);  	void	updateNoTabsHelpTextVisibility(); diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp index 87ff39575a..84716394e6 100644 --- a/indra/llui/llaccordionctrltab.cpp +++ b/indra/llui/llaccordionctrltab.cpp @@ -33,6 +33,7 @@  #include "linden_common.h"  #include "llaccordionctrltab.h" +#include "llaccordionctrl.h"  #include "lllocalcliprect.h"  #include "llscrollbar.h" @@ -710,7 +711,7 @@ S32	LLAccordionCtrlTab::notifyParent(const LLSD& info)  				setRect(panel_rect);  			} -			//LLAccordionCtrl should rearrange accodion tab if one of accordion change its size +			//LLAccordionCtrl should rearrange accordion tab if one of accordion change its size  			if (getParent()) // A parent may not be set if tabs are added dynamically.  				getParent()->notifyParent(info);  			return 1; @@ -721,6 +722,27 @@ S32	LLAccordionCtrlTab::notifyParent(const LLSD& info)  			return 1;  		}  	} +	else if (info.has("scrollToShowRect")) +	{ +		LLAccordionCtrl* parent = dynamic_cast<LLAccordionCtrl*>(getParent()); +		if (parent && parent->getFitParent()) +		{ +			//	EXT-8285 ('No attachments worn' text appears at the bottom of blank 'Attachments' accordion) +			//	The problem was in passing message "scrollToShowRect" IN LLAccordionCtrlTab::notifyParent +			//	FROM child LLScrollContainer TO parent LLAccordionCtrl with "it_parent" set to true. + +			//	It is wrong notification for parent accordion which leads to recursive call of adjustContainerPanel +			//	As the result of recursive call of adjustContainerPanel we got LLAccordionCtrlTab +			//	that reshaped and re-sized with different rectangles. + +			//	LLAccordionCtrl has own scrollContainer and LLAccordionCtrlTab has own scrollContainer +			//	both should handle own scroll container's event. +			//	So, if parent accordion "fit_parent" accordion tab should handle its scroll container events itself. + +			return 1; +		} +	} +  	return LLUICtrl::notifyParent(info);  } diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index 0fa7949be2..70558f8eb8 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -1078,25 +1078,6 @@ void LLFlatListView::setNoItemsCommentVisible(bool visible) const  {  	if (mNoItemsCommentTextbox)  	{ -		if (visible) -		{ -/* -// *NOTE: MA 2010-02-04 -// Deprecated after params of the comment text box were moved into widget (flat_list_view.xml) -// can be removed later if nothing happened. -			// We have to update child rect here because of issues with rect after reshaping while creating LLTextbox -			// It is possible to have invalid LLRect if Flat List is in LLAccordionTab -			LLRect comment_rect = getLocalRect(); - -			// To see comment correctly (EXT - 3244) in mNoItemsCommentTextbox we must get border width -			// of LLFlatListView (@see getBorderWidth()) and stretch mNoItemsCommentTextbox to this width -			// But getBorderWidth() returns 0 if LLFlatListView not visible. So we have to get border width -			// from 'scroll_border' -			LLViewBorder* scroll_border = getChild<LLViewBorder>("scroll border"); -			comment_rect.stretch(-scroll_border->getBorderWidth()); -			mNoItemsCommentTextbox->setRect(comment_rect); -*/ -		}  		mSelectedItemsBorder->setVisible(!visible);  		mNoItemsCommentTextbox->setVisible(visible);  	} diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index dcbbf9bb2c..63315ce2ae 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -983,6 +983,10 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up  		LLNotificationsUtil::add("CannotWearTrash");  		return false;  	} +	else if (gInventory.isObjectDescendentOf(item_to_wear->getUUID(), LLAppearanceMgr::instance().getCOF())) // EXT-84911 +	{ +		return false; +	}  	switch (item_to_wear->getType())  	{ diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 24e818908a..d3d52e20f7 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -1874,13 +1874,18 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask )  		}  		// Successively filter out invalid options -		selected_items_t::iterator item_itor; +  		U32 flags = FIRST_SELECTED_ITEM; -		for (item_itor = mSelectedItems.begin(); item_itor != mSelectedItems.end(); ++item_itor) +		for (selected_items_t::iterator item_itor = mSelectedItems.begin();  +			 item_itor != mSelectedItems.end();  +			 ++item_itor)  		{ -			(*item_itor)->buildContextMenu(*menu, flags); +			LLFolderViewItem* selected_item = (*item_itor); +			selected_item->buildContextMenu(*menu, flags);  			flags = 0x0;  		} +	    +		addNoOptions(menu);  		menu->updateParent(LLMenuGL::sMenuContainer);  		LLMenuGL::showPopup(this, menu, x, y); @@ -1889,7 +1894,7 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask )  	}  	else  	{ -		if(menu && menu->getVisible()) +		if (menu && menu->getVisible())  		{  			menu->setVisible(FALSE);  		} @@ -1898,6 +1903,37 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask )  	return handled;  } +// Add "--no options--" if the menu is completely blank. +BOOL LLFolderView::addNoOptions(LLMenuGL* menu) const +{ +	const std::string nooptions_str = "--no options--"; +	LLView *nooptions_item = NULL; +	 +	const LLView::child_list_t *list = menu->getChildList(); +	for (LLView::child_list_t::const_iterator itor = list->begin();  +		 itor != list->end();  +		 ++itor) +	{ +		LLView *menu_item = (*itor); +		if (menu_item->getVisible()) +		{ +			return FALSE; +		} +		std::string name = menu_item->getName(); +		if (menu_item->getName() == nooptions_str) +		{ +			nooptions_item = menu_item; +		} +	} +	if (nooptions_item) +	{ +		nooptions_item->setVisible(TRUE); +		nooptions_item->setEnabled(FALSE); +		return TRUE; +	} +	return FALSE; +} +  BOOL LLFolderView::handleHover( S32 x, S32 y, MASK mask )  {  	return LLView::handleHover( x, y, mask ); diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 03e1bb9eee..c69f08eb2d 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -292,6 +292,8 @@ protected:  	bool selectFirstItem();  	bool selectLastItem(); +	BOOL addNoOptions(LLMenuGL* menu) const; +  protected:  	LLHandle<LLView>					mPopupMenuHandle; diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 21313f9df7..9d88c156d3 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -237,6 +237,25 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  		new LLSessionTimeoutTimer(mSessionID, SESSION_INITIALIZATION_TIMEOUT);  	} +	// *WORKAROUND: for server hard-coded string in indra\newsim\llsimchatterbox.cpp +	if (isAdHocSessionType() && IM_SESSION_INVITE == type) +	{ +		// For an ad-hoc incoming chat name is received from the server and is in a form of "<Avatar's name> Conference" +		// Lets update it to localize the "Conference" word. See EXT-8429. +		S32 separator_index = mName.rfind(" "); +		std::string name = mName.substr(0, separator_index); +		++separator_index; +		std::string conference_word = mName.substr(separator_index, mName.length()); + +		// additional check that session name is what we expected +		if ("Conference" == conference_word) +		{ +			LLStringUtil::format_map_t args; +			args["[AGENT_NAME]"] = name; +			LLTrans::findString(mName, "conference-title-incoming", args); +		} +	} +  	if (IM_NOTHING_SPECIAL == type)  	{  		mCallBackEnabled = LLVoiceClient::getInstance()->isSessionCallBackPossible(mSessionID); diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index ffa8a16797..57d31795ca 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -233,7 +233,8 @@ public:  	 * Get a session's name.   	 * For a P2P chat - it's an avatar's name,   	 * For a group chat - it's a group's name -	 * For an ad-hoc chat - is received from the server and is in a from of "<Avatar's name> conference" +	 * For an incoming ad-hoc chat - is received from the server and is in a from of "<Avatar's name> Conference" +	 *	It is updated in LLIMModel::LLIMSession's constructor to localize the "Conference".  	 */  	const std::string& getName(const LLUUID& session_id) const; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 0b1408616e..38f3521b2d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -952,6 +952,8 @@ void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid)  BOOL LLInvFVBridge::canShare() const  { +	if (!isAgentInventory()) return FALSE; +  	const LLInventoryModel* model = getInventoryModel();  	if (!model) return FALSE; @@ -963,9 +965,10 @@ BOOL LLInvFVBridge::canShare() const  		return (BOOL)LLGiveInventory::isInventoryGiveAcceptable(item);  	} -	// All categories can be given. -	const LLViewerInventoryCategory* cat = model->getCategory(mUUID); -	return (cat != NULL); +	// Categories can be given. +	if (model->getCategory(mUUID)) return TRUE; + +	return FALSE;  }  // +=================================================+ @@ -2612,12 +2615,6 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		mDisabledItems.push_back(std::string("Share"));  	} -	if (mItems.empty()) -	{ -		mItems.push_back(std::string("--no options--")); -		mDisabledItems.push_back(std::string("--no options--")); -	} -  	hide_context_entries(menu, mItems, mDisabledItems);  	// Add menu items that are dependent on the contents of the folder. diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index f20acbd016..303031ab29 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -221,7 +221,13 @@ BOOL get_is_item_worn(const LLUUID& id)  	const LLViewerInventoryItem* item = gInventory.getItem(id);  	if (!item)  		return FALSE; -	 + +	// Consider the item as worn if it has links in COF. +	if (LLAppearanceMgr::instance().isLinkInCOF(id)) +	{ +		return TRUE; +	} +  	switch(item->getType())  	{  		case LLAssetType::AT_OBJECT: @@ -250,7 +256,29 @@ BOOL get_can_item_be_worn(const LLUUID& id)  	const LLViewerInventoryItem* item = gInventory.getItem(id);  	if (!item)  		return FALSE; + +	if (LLAppearanceMgr::isLinkInCOF(item->getLinkedUUID())) +	{ +		// an item having links in COF (i.e. a worn item) +		return FALSE; +	} + +	if (gInventory.isObjectDescendentOf(id, LLAppearanceMgr::instance().getCOF())) +	{ +		// a non-link object in COF (should not normally happen) +		return FALSE; +	} +	const LLUUID trash_id = gInventory.findCategoryUUIDForType( +			LLFolderType::FT_TRASH); + +	// item can't be worn if base obj in trash, see EXT-7015 +	if (gInventory.isObjectDescendentOf(item->getLinkedUUID(), +			trash_id)) +	{ +		return false; +	} +  	switch(item->getType())  	{  		case LLAssetType::AT_OBJECT: diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 4a7721098d..833ff3bfcd 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -301,6 +301,7 @@ public:  	virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)  	{ +		//converting an inventory type to a bitmap filter mask  		if(item && (mFilterMask & (1LL << item->getInventoryType())) )  		{  			return true; diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp index b1f5b3be2f..b743ac3dcb 100644 --- a/indra/newview/llinventorylistitem.cpp +++ b/indra/newview/llinventorylistitem.cpp @@ -44,6 +44,7 @@  // newview  #include "llinventorymodel.h"  #include "llviewerinventory.h" +#include "llinventorydefines.h"  static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelInventoryListItemBaseParams(&typeid(LLPanelInventoryListItemBase::Params), "inventory_list_item"); @@ -166,7 +167,7 @@ BOOL LLPanelInventoryListItemBase::postBuild()  	LLViewerInventoryItem* inv_item = getItem();  	if (inv_item)  	{ -		mIconImage = LLInventoryIcon::getIcon(inv_item->getType(), inv_item->getInventoryType(), inv_item->getFlags(), FALSE); +		mIconImage = LLInventoryIcon::getIcon(inv_item->getType(), inv_item->getInventoryType(), inv_item->getFlags(), LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & inv_item->getFlags());  		updateItem(inv_item->getName());  	} diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index c3eee1d1ad..8147a97317 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -1005,11 +1005,6 @@ bool LLOutfitsList::canWearSelected()  	{  		const LLUUID& id = *it; -		if (LLAppearanceMgr::isLinkInCOF(id)) -		{ -			return false; -		} -  		// Check whether the item is worn.  		if (!get_can_item_be_worn(id))  		{ diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 8e1b7ba4d9..2302772803 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -184,8 +184,7 @@ BOOL LLPanelGroupGeneral::postBuild()  	mComboActiveTitle = getChild<LLComboBox>("active_title", recurse);  	if (mComboActiveTitle)  	{ -		mComboActiveTitle->setCommitCallback(onCommitTitle, this); -		mComboActiveTitle->resetDirty(); +		mComboActiveTitle->setCommitCallback(onCommitAny, this);  	}  	mIncompleteMemberDataStr = getString("incomplete_member_data_str"); @@ -278,16 +277,6 @@ void LLPanelGroupGeneral::onCommitEnrollment(LLUICtrl* ctrl, void* data)  }  // static -void LLPanelGroupGeneral::onCommitTitle(LLUICtrl* ctrl, void* data) -{ -	LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data; -	if (self->mGroupID.isNull() || !self->mAllowEdit) return; -	LLGroupMgr::getInstance()->sendGroupTitleUpdate(self->mGroupID,self->mComboActiveTitle->getCurrentID()); -	self->update(GC_TITLES); -	self->mComboActiveTitle->resetDirty(); -} - -// static  void LLPanelGroupGeneral::onClickInfo(void *userdata)  {  	LLPanelGroupGeneral *self = (LLPanelGroupGeneral *)userdata; @@ -356,6 +345,13 @@ void LLPanelGroupGeneral::draw()  bool LLPanelGroupGeneral::apply(std::string& mesg)  { +	if (!mGroupID.isNull() && mAllowEdit && mComboActiveTitle && mComboActiveTitle->isDirty()) +	{ +		LLGroupMgr::getInstance()->sendGroupTitleUpdate(mGroupID,mComboActiveTitle->getCurrentID()); +		update(GC_TITLES); +		mComboActiveTitle->resetDirty(); +	} +  	BOOL has_power_in_group = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY);  	if (has_power_in_group || mGroupID.isNull()) diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h index 6f4fa994da..358d353074 100644 --- a/indra/newview/llpanelgroupgeneral.h +++ b/indra/newview/llpanelgroupgeneral.h @@ -77,7 +77,6 @@ private:  	static void onFocusEdit(LLFocusableElement* ctrl, void* data);  	static void onCommitAny(LLUICtrl* ctrl, void* data);  	static void onCommitUserOnly(LLUICtrl* ctrl, void* data); -	static void onCommitTitle(LLUICtrl* ctrl, void* data);  	static void onCommitEnrollment(LLUICtrl* ctrl, void* data);  	static void onClickInfo(void* userdata);  	static void onReceiveNotices(LLUICtrl* ctrl, void* data); diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 445cfe64f7..7a28d10baf 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -51,6 +51,7 @@  #include "lltabcontainer.h"  #include "lltextbox.h"  #include "lltexteditor.h" +#include "lltrans.h"  #include "llviewertexturelist.h"  #include "llviewerwindow.h"  #include "llfocusmgr.h" @@ -587,7 +588,7 @@ void LLPanelGroupSubTab::buildActionCategory(LLScrollListCtrl* ctrl,  		row["columns"][1]["column"] = "action";  		row["columns"][1]["type"] = "text"; -		row["columns"][1]["value"] = action_set->mActionSetData->mName; +		row["columns"][1]["value"] = LLTrans::getString(action_set->mActionSetData->mName);  		row["columns"][1]["font"]["name"] = "SANSSERIF_SMALL"; diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index ca1361c84b..116e5ba4cb 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -750,8 +750,6 @@ void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  {  	std::vector<std::string> items;  	std::vector<std::string> disabled_items; -	items.push_back(std::string("--no options--")); -	disabled_items.push_back(std::string("--no options--"));  	hide_context_entries(menu, items, disabled_items);  } diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 8c37133c91..b56cf5c3ce 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -779,9 +779,7 @@ void LLPanelOutfitEdit::updatePlusButton()  	}  	// If any of the selected items are not wearable (due to already being worn OR being of the wrong type), disable the add button. -	uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(& get_can_item_be_worn, _1) -		// since item can be not worn but in wearing process at that time - we need to check is link to item presents in COF -		|| boost::bind(&LLAppearanceMgr::isLinkInCOF, _1)); +	uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(&get_can_item_be_worn, _1));  	bool can_add = ( unwearable_item == selected_items.end() );  	mPlusBtn->setEnabled(can_add); diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index de59af49da..0951586dd5 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -33,10 +33,13 @@  #include "llsidepanelinventory.h"  #include "llagent.h" +#include "llappearancemgr.h"  #include "llavataractions.h"  #include "llbutton.h"  #include "llinventorybridge.h" +#include "llinventoryfunctions.h"  #include "llinventorypanel.h" +#include "lloutfitobserver.h"  #include "llpanelmaininventory.h"  #include "llsidepaneliteminfo.h"  #include "llsidepaneltaskinfo.h" @@ -98,6 +101,8 @@ BOOL LLSidepanelInventory::postBuild()  		my_inventory_panel->addHideFolderType(LLFolderType::FT_LANDMARK);  		my_inventory_panel->addHideFolderType(LLFolderType::FT_FAVORITE);  		*/ + +		LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this));  	}  	// UI elements from item panel @@ -283,7 +288,7 @@ void LLSidepanelInventory::updateVerbs()  		case LLInventoryType::IT_OBJECT:  		case LLInventoryType::IT_ATTACHMENT:  			mWearBtn->setVisible(TRUE); -			mWearBtn->setEnabled(TRUE); +			mWearBtn->setEnabled(get_can_item_be_worn(item->getLinkedUUID()));  		 	mShopBtn->setVisible(FALSE);  			break;  		case LLInventoryType::IT_SOUND: diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 912741cb5e..34f6fbebd6 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -769,6 +769,8 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu  	U32 n_links = 0;				// number of links among the selected items  	U32 n_editable = 0;				// number of editable items among the selected ones +	bool can_be_worn = true; +  	for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)  	{  		LLUUID id = *it; @@ -804,16 +806,21 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu  		{  			++n_already_worn;  		} + +		if (can_be_worn) +		{ +			can_be_worn = get_can_item_be_worn(item->getLinkedUUID()); +		}  	} // for  	bool standalone = mParent ? mParent->isStandalone() : false;  	// *TODO: eliminate multiple traversals over the menu items -	setMenuItemVisible(menu, "wear_wear", 			n_already_worn == 0 && n_worn == 0); +	setMenuItemVisible(menu, "wear_wear", 			n_already_worn == 0 && n_worn == 0 && can_be_worn);  	setMenuItemEnabled(menu, "wear_wear", 			n_already_worn == 0 && n_worn == 0); -	setMenuItemVisible(menu, "wear_add",			mask == MASK_CLOTHING && n_worn == 0 && n_already_worn != 0); +	setMenuItemVisible(menu, "wear_add",			mask == MASK_CLOTHING && n_worn == 0 && n_already_worn != 0 && can_be_worn);  	setMenuItemEnabled(menu, "wear_add",			n_items == 1 && canAddWearable(ids.front()) && n_already_worn != 0); -	setMenuItemVisible(menu, "wear_replace",		n_worn == 0 && n_already_worn != 0); +	setMenuItemVisible(menu, "wear_replace",		n_worn == 0 && n_already_worn != 0 && can_be_worn);  	//visible only when one item selected and this item is worn  	setMenuItemVisible(menu, "edit",				!standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items && n_worn == 1);  	setMenuItemEnabled(menu, "edit",				n_editable == 1 && n_worn == 1 && n_items == 1); diff --git a/indra/newview/skins/default/xui/da/panel_nearby_media.xml b/indra/newview/skins/default/xui/da/panel_nearby_media.xml index 7d25b2af99..a269e35f4b 100644 --- a/indra/newview/skins/default/xui/da/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/da/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<scroll_list.columns label="Navn" name="media_name"/>  			<scroll_list.columns label="Debug" name="media_debug"/>  		</scroll_list> -		<panel> +		<panel name="media_controls_panel">  			<layout_stack name="media_controls">  				<layout_panel name="stop">  					<button name="stop_btn" tool_tip="Stop valgte medie"/> diff --git a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml index 070b4218a8..b1ec2c44df 100644 --- a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml @@ -23,7 +23,8 @@  	</panel.string>  	<text name="title" value="Profil for genstand"/>  	<text name="origin" value="(Beholdning)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			Navn:  		</text> diff --git a/indra/newview/skins/default/xui/de/panel_nearby_media.xml b/indra/newview/skins/default/xui/de/panel_nearby_media.xml index e7886fa149..ef66148902 100644 --- a/indra/newview/skins/default/xui/de/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/de/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<scroll_list.columns label="Name" name="media_name"/>  			<scroll_list.columns label="Fehler beseitigen" name="media_debug"/>  		</scroll_list> -		<panel> +		<panel name="media_controls_panel">  			<layout_stack name="media_controls">  				<layout_panel name="stop">  					<button name="stop_btn" tool_tip="Ausgewählte Medien stoppen"/> diff --git a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml index 63e7bce8ae..b9ca969ac5 100644 --- a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml @@ -23,7 +23,8 @@  	</panel.string>  	<text name="title" value="Objektprofil"/>  	<text name="origin" value="(Inventar)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			Name:  		</text> diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml index 50df227fbf..49b252174c 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml @@ -80,10 +80,11 @@  	<panel           follows="all"           height="493" +         help_topic=""           label=""           layout="topleft"           left="9" -         help_topic="" +         name="item_profile"           top="45"           width="313"     background_visible="true" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index a0c67e3612..9941732c30 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3024,6 +3024,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].    <string name="conference-title">      Ad-hoc Conference    </string> +  <string name="conference-title-incoming"> +    [AGENT_NAME] Conference +  </string>    <string name="inventory_item_offered-im">      Inventory item offered    </string> @@ -3239,4 +3242,20 @@ Abuse Report</string>    <!--  currency formatting -->    <string name="LocalEstimateUSD">US$ [AMOUNT]</string> + +  <!-- Group Profile roles and powers --> +  <string name="Membership">Membership</string> +  <string name="Roles">Roles</string> +  <string name="Group Identity">Group Identity</string> +  <string name="Parcel Management">Parcel Management</string> +  <string name="Parcel Identity">Parcel Identity</string> +  <string name="Parcel Settings">Parcel Settings</string> +  <string name="Parcel Powers">Parcel Powers</string> +  <string name="Parcel Access">Parcel Access</string> +  <string name="Parcel Content">Parcel Content</string> +  <string name="Object Management">Object Management</string> +  <string name="Accounting">Accounting</string> +  <string name="Notices">Notices</string> +  <string name="Chat">Chat</string> +    </strings> diff --git a/indra/newview/skins/default/xui/es/panel_nearby_media.xml b/indra/newview/skins/default/xui/es/panel_nearby_media.xml index b78ecd0cd0..f03338e4c7 100644 --- a/indra/newview/skins/default/xui/es/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/es/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<scroll_list.columns label="Nombre" name="media_name"/>  			<scroll_list.columns label="Depurar" name="media_debug"/>  		</scroll_list> -		<panel> +		<panel name="media_controls_panel">  			<layout_stack name="media_controls">  				<layout_panel name="stop">  					<button name="stop_btn" tool_tip="Parar los media seleccionados"/> diff --git a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml index 38f43c3cbc..d3b91e7a71 100644 --- a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml @@ -23,7 +23,8 @@  	</panel.string>  	<text name="title" value="Perfil del elemento"/>  	<text name="origin" value="(Inventario)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			Nombre:  		</text> diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml index 1a6101830b..66bfd01a2a 100644 --- a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<scroll_list.columns label="Nom" name="media_name"/>  			<scroll_list.columns label="Débogage" name="media_debug"/>  		</scroll_list> -		<panel> +		<panel name="media_controls_panel">  			<layout_stack name="media_controls">  				<layout_panel name="stop">  					<button name="stop_btn" tool_tip="Arrêter le média sélectionné"/> diff --git a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml index 0a5680fe06..0350ea5116 100644 --- a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml @@ -23,7 +23,8 @@  	</panel.string>  	<text name="title" value="Profil de l'article"/>  	<text name="origin" value="(inventaire)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			Nom :  		</text> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 0a269016f5..7ef67d5912 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -3859,4 +3859,5 @@ de l'infraction signalée  	<string name="dateTimePM">  		PM  	</string> +	<string name="LocalEstimateUSD">[AMOUNT] US$</string>   </strings> diff --git a/indra/newview/skins/default/xui/it/panel_nearby_media.xml b/indra/newview/skins/default/xui/it/panel_nearby_media.xml index bec36fd427..40312f76b4 100644 --- a/indra/newview/skins/default/xui/it/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/it/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<scroll_list.columns label="Nome" name="media_name"/>  			<scroll_list.columns label="Debug" name="media_debug"/>  		</scroll_list> -		<panel> +		<panel name="media_controls_panel">  			<layout_stack name="media_controls">  				<layout_panel name="stop">  					<button name="stop_btn" tool_tip="Interrompi supporto selezionato"/> diff --git a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml index d0ec943e67..627aeb5cb5 100644 --- a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml @@ -23,7 +23,8 @@  	</panel.string>  	<text name="title" value="Profilo articolo"/>  	<text name="origin" value="(Inventario)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			Nome:  		</text> diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml index b3df3503bb..07293e6c79 100644 --- a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<scroll_list.columns label="名前" name="media_name"/>  			<scroll_list.columns label="デバッグ" name="media_debug"/>  		</scroll_list> -		<panel> +		<panel name="media_controls_panel">  			<layout_stack name="media_controls">  				<layout_panel name="stop">  					<button name="stop_btn" tool_tip="選択したメディアを停止"/> diff --git a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml index fdabe88362..414eba0509 100644 --- a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml @@ -23,7 +23,8 @@  	</panel.string>  	<text name="title" value="アイテムのプロフィール"/>  	<text name="origin" value="(持ち物)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			名前:  		</text> diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml index 86c7275e79..926ca806ac 100644 --- a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<scroll_list.columns label="Nazwa" name="media_name"/>  			<scroll_list.columns label="Debugowanie" name="media_debug"/>  		</scroll_list> -		<panel> +		<panel name="media_controls_panel">  			<layout_stack name="media_controls">  				<layout_panel name="stop">  					<button name="stop_btn" tool_tip="Wyłącz wybrane media"/> diff --git a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml index 2f43e0c215..0c6169c9c0 100644 --- a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml @@ -23,7 +23,8 @@  	</panel.string>  	<text name="title" value="Profil obiektu"/>  	<text name="origin" value="(Szafa)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			Nazwa:  		</text> diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml index 672b8e6735..7d1b48ad76 100644 --- a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml +++ b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml @@ -42,7 +42,7 @@  			<scroll_list.columns label="Nome" name="media_name"/>  			<scroll_list.columns label="Depurar" name="media_debug"/>  		</scroll_list> -		<panel> +		<panel name="media_controls_panel">  			<layout_stack name="media_controls">  				<layout_panel name="stop">  					<button name="stop_btn" tool_tip="Parar mídia selecionada"/> diff --git a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml index 8e880588e9..d2050f4660 100644 --- a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml +++ b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml @@ -23,7 +23,8 @@  	</panel.string>  	<text name="title" value="Perfil do item"/>  	<text name="origin" value="(Inventário)"/> -	<panel label=""> +	<panel label="" +           name="item_profile">  		<text name="LabelItemNameTitle">  			Nome:  		</text> | 
