diff options
| author | Vadim Savchuk <vsavchuk@productengine.com> | 2010-04-13 14:32:26 +0300 | 
|---|---|---|
| committer | Vadim Savchuk <vsavchuk@productengine.com> | 2010-04-13 14:32:26 +0300 | 
| commit | 22c849def9078d8a4376cbf59164403ca55368cf (patch) | |
| tree | a2811bb9c7363ca0e0b819bf135c60c9a51f93d6 | |
| parent | 82b399ed1bf4cd63e27adf298096107b245a29be (diff) | |
| parent | 613b4e9361df55da3863a546c806493d48f848f3 (diff) | |
merge
--HG--
branch : product-engine
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 11 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 35 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.h | 3 | ||||
| -rw-r--r-- | indra/newview/llcallfloater.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.cpp | 80 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.h | 6 | ||||
| -rw-r--r-- | indra/newview/llparticipantlist.cpp | 12 | ||||
| -rw-r--r-- | indra/newview/llparticipantlist.h | 3 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_participant_list.xml | 17 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_outfit_edit.xml | 2 | 
10 files changed, 116 insertions, 55 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3197064281..b26077eec9 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5395,6 +5395,17 @@        <key>Value</key>        <integer>1</integer>      </map> +    <key>ParticipantListShowIcons</key> +    <map> +      <key>Comment</key> +      <string>Show/hide people icons in participant list</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>PerAccountSettingsFile</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 4a30ba3066..b6fc33e9a2 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -42,8 +42,10 @@  #include "llinventoryfunctions.h"  #include "llinventoryobserver.h"  #include "llnotificationsutil.h" +#include "llselectmgr.h"  #include "llsidepanelappearance.h"  #include "llsidetray.h" +#include "llviewerobjectlist.h"  #include "llvoavatar.h"  #include "llvoavatarself.h"  #include "llviewerregion.h" @@ -1587,6 +1589,39 @@ void LLAppearanceMgr::wearBaseOutfit()  	updateCOF(base_outfit_id);  } +void LLAppearanceMgr::removeItemFromAvatar(const LLUUID& id_to_remove) +{ +	LLViewerInventoryItem * item_to_remove = gInventory.getItem(id_to_remove); +	if (!item_to_remove) return; + +	switch (item_to_remove->getType()) +	{ +	case LLAssetType::AT_CLOTHING: +		if (get_is_item_worn(id_to_remove)) +		{ +			//*TODO move here the exact removing code from LLWearableBridge::removeItemFromAvatar in the future +			LLWearableBridge::removeItemFromAvatar(item_to_remove); +		} +		break; +	case LLAssetType::AT_OBJECT: +		gMessageSystem->newMessageFast(_PREHASH_DetachAttachmentIntoInv); +		gMessageSystem->nextBlockFast(_PREHASH_ObjectData); +		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); +		gMessageSystem->addUUIDFast(_PREHASH_ItemID, item_to_remove->getLinkedUUID()); +		gMessageSystem->sendReliable( gAgent.getRegion()->getHost()); + +		{ +			// this object might have been selected, so let the selection manager know it's gone now +			LLViewerObject *found_obj = gObjectList.findObject(item_to_remove->getLinkedUUID()); +			if (found_obj) +			{ +				LLSelectMgr::getInstance()->remove(found_obj); +			}; +		} +	default: break; +	} +} +  //#define DUMP_CAT_VERBOSE  void LLAppearanceMgr::dumpCat(const LLUUID& cat_id, const std::string& msg) diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index dffd421898..83261bbbd0 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -135,6 +135,9 @@ public:  	// @return false if there is no base outfit  	bool updateBaseOutfit(); +	//Remove clothing or detach an object from the agent (a bodypart cannot be removed) +	void removeItemFromAvatar(const LLUUID& item_id); +  protected:  	LLAppearanceMgr();  	~LLAppearanceMgr(); diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index 0b58c8f476..d15c5f9bf4 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -334,7 +334,7 @@ void LLCallFloater::refreshParticipantList()  	if (!non_avatar_caller)  	{ -		mParticipants = new LLParticipantList(mSpeakerManager, mAvatarList, true, mVoiceType != VC_GROUP_CHAT && mVoiceType != VC_AD_HOC_CHAT); +		mParticipants = new LLParticipantList(mSpeakerManager, mAvatarList, true, mVoiceType != VC_GROUP_CHAT && mVoiceType != VC_AD_HOC_CHAT, false);  		mParticipants->setValidateSpeakerCallback(boost::bind(&LLCallFloater::validateSpeaker, this, _1));  		mParticipants->setSortOrder(LLParticipantList::E_SORT_BY_RECENT_SPEAKERS); diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index d1e6d7de42..75a2080f74 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -118,7 +118,7 @@ private:  LLPanelOutfitEdit::LLPanelOutfitEdit()  :	LLPanel(), mCurrentOutfitID(), mFetchLook(NULL), mSearchFilter(NULL),  mLookContents(NULL), mInventoryItemsPanel(NULL), mAddToOutfitBtn(NULL), -mRemoveFromLookBtn(NULL), mLookObserver(NULL) +mRemoveFromOutfitBtn(NULL), mLookObserver(NULL)  {  	mSavedFolderState = new LLSaveFolderState();  	mSavedFolderState->setApply(FALSE); @@ -164,14 +164,10 @@ BOOL LLPanelOutfitEdit::postBuild()  	childSetCommitCallback("add_btn", boost::bind(&LLPanelOutfitEdit::showAddWearablesPanel, this), NULL); -	/* -	mLookContents->setDoubleClickCallback(onDoubleClickSpeaker, this); -	mLookContents->setCommitOnSelectionChange(TRUE); -	mLookContents->setCommitCallback(boost::bind(&LLPanelActiveSpeakers::handleSpeakerSelect, this, _2)); -	mLookContents->setSortChangedCallback(boost::bind(&LLPanelActiveSpeakers::onSortChanged, this)); -	mLookContents->setContextMenu(LLScrollListCtrl::MENU_AVATAR); -	*/ -	 +	mLookContents = getChild<LLScrollListCtrl>("look_items_list"); +	mLookContents->sortByColumn("look_item_sort", TRUE); +	mLookContents->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onOutfitItemSelectionChange, this)); +  	mInventoryItemsPanel = getChild<LLInventoryPanel>("inventory_items");  	mInventoryItemsPanel->setFilterTypes(ALL_ITEMS_MASK);  	mInventoryItemsPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); @@ -207,31 +203,20 @@ BOOL LLPanelOutfitEdit::postBuild()  	mUpBtn->setEnabled(TRUE);  	mUpBtn->setClickedCallback(boost::bind(&LLPanelOutfitEdit::onUpClicked, this)); +	//*TODO rename mLookContents to mOutfitContents  	mLookContents = getChild<LLScrollListCtrl>("look_items_list");  	mLookContents->sortByColumn("look_item_sort", TRUE); -	mLookContents->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onLookItemSelectionChange, this)); +	mLookContents->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onOutfitItemSelectionChange, this)); + +	mRemoveFromOutfitBtn = getChild<LLButton>("remove_from_outfit_btn"); +	mRemoveFromOutfitBtn->setEnabled(FALSE); +	mRemoveFromOutfitBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onRemoveFromOutfitClicked, this)); -	/* -	LLButton::Params remove_params; -	remove_params.name("remove_from_look"); -	remove_params.click_callback.function(boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this)); -	remove_params.label("-"); */ -	 -	//mRemoveFromLookBtn = LLUICtrlFactory::create<LLButton>(remove_params); -	mRemoveFromLookBtn = getChild<LLButton>("remove_from_look_btn"); -	mRemoveFromLookBtn->setEnabled(FALSE); -	mRemoveFromLookBtn->setVisible(FALSE); -	//childSetAction("remove_from_look_btn", boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this), this); -	mRemoveFromLookBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this)); -	//getChild<LLPanel>("look_info_group_bar")->addChild(mRemoveFromLookBtn); remove_item_btn -	  	mEditWearableBtn = getChild<LLButton>("edit_wearable_btn");  	mEditWearableBtn->setEnabled(FALSE);  	mEditWearableBtn->setVisible(FALSE);  	mEditWearableBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onEditWearableClicked, this)); -	childSetAction("remove_item_btn", boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this), this); -	  	childSetAction("revert_btn", boost::bind(&LLAppearanceMgr::wearBaseOutfit, LLAppearanceMgr::getInstance()));  	childSetAction("save_btn", boost::bind(&LLPanelOutfitEdit::saveOutfit, this, false)); @@ -353,27 +338,15 @@ void LLPanelOutfitEdit::onAddToOutfitClicked(void)  } -void LLPanelOutfitEdit::onRemoveFromLookClicked(void) +void LLPanelOutfitEdit::onRemoveFromOutfitClicked(void)  {  	LLUUID id_to_remove = mLookContents->getSelectionInterface()->getCurrentID(); -	LLViewerInventoryItem * item_to_remove = gInventory.getItem(id_to_remove); -	 -	if (item_to_remove) -	{ -		// returns null if not a wearable (attachment, etc). -		const LLWearable* wearable_to_remove = gAgentWearables.getWearableFromAssetID(item_to_remove->getAssetUUID()); -		if (!wearable_to_remove || gAgentWearables.canWearableBeRemoved( wearable_to_remove )) -		{											  -			gInventory.purgeObject( id_to_remove ); -			updateLookInfo(); -			mRemoveFromLookBtn->setEnabled(FALSE); -			if (mRemoveFromLookBtn->getVisible()) -			{ -				mRemoveFromLookBtn->setVisible(FALSE); -			} -		} -	} +	LLAppearanceMgr::getInstance()->removeItemFromAvatar(id_to_remove); + +	updateLookInfo(); + +	mRemoveFromOutfitBtn->setEnabled(FALSE);  } @@ -482,7 +455,7 @@ void LLPanelOutfitEdit::onInventorySelectionChange(const std::deque<LLFolderView  	current_item->addChild(mAddToLookBtn); */  } -void LLPanelOutfitEdit::onLookItemSelectionChange(void) +void LLPanelOutfitEdit::onOutfitItemSelectionChange(void)  {	  	S32 left_offset = -4;  	S32 top_offset = -10; @@ -504,7 +477,22 @@ void LLPanelOutfitEdit::onLookItemSelectionChange(void)  	{  		mEditWearableBtn->setVisible(TRUE);  	} -	//mLookContents->addChild(mRemoveFromLookBtn); + + +	const LLUUID& id_item_to_remove = item->getUUID(); +	LLViewerInventoryItem* item_to_remove = gInventory.getItem(id_item_to_remove); +	if (!item_to_remove) return; + +	switch (item_to_remove->getType()) +	{ +	case LLAssetType::AT_CLOTHING: +	case LLAssetType::AT_OBJECT: +		mRemoveFromOutfitBtn->setEnabled(TRUE); +		break; +	default: +		mRemoveFromOutfitBtn->setEnabled(FALSE); +		break; +	}  }  void LLPanelOutfitEdit::changed(U32 mask) diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 1a8d7d2bef..fa92d4c314 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -94,8 +94,8 @@ public:  	void onSearchEdit(const std::string& string);  	void onInventorySelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);  	void onAddToOutfitClicked(void); -	void onLookItemSelectionChange(void); -	void onRemoveFromLookClicked(void); +	void onOutfitItemSelectionChange(void); +	void onRemoveFromOutfitClicked(void);  	void onEditWearableClicked(void);  	void onUpClicked(void); @@ -117,7 +117,7 @@ private:  	LLSaveFolderState*	mSavedFolderState;  	std::string			mSearchString;  	LLButton*			mAddToOutfitBtn; -	LLButton*			mRemoveFromLookBtn; +	LLButton*			mRemoveFromOutfitBtn;  	LLButton*			mUpBtn;  	LLButton*			mEditWearableBtn;  	LLToggleableMenu*	mSaveMenu; diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index dbb8e962bd..026be882ed 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -39,6 +39,7 @@  #include "llparticipantlist.h"  #include "llspeakers.h" +#include "llviewercontrol.h"  #include "llviewermenu.h"  #include "llvoiceclient.h" @@ -50,7 +51,7 @@  static const LLAvatarItemAgentOnTopComparator AGENT_ON_TOP_NAME_COMPARATOR;  LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list,  bool use_context_menu/* = true*/, -		bool exclude_agent /*= true*/): +		bool exclude_agent /*= true*/, bool can_toggle_icons /*= true*/):  	mSpeakerMgr(data_source),  	mAvatarList(avatar_list),  	mSortOrder(E_SORT_BY_NAME) @@ -87,6 +88,12 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av  		mAvatarList->setContextMenu(NULL);  	} +	if (use_context_menu && can_toggle_icons) +	{ +		mAvatarList->setShowIcons("ParticipantListShowIcons"); +		mAvatarListToggleIconsConnection = gSavedSettings.getControl("ParticipantListShowIcons")->getSignal()->connect(boost::bind(&LLAvatarList::toggleIcons, mAvatarList)); +	} +  	//Lets fill avatarList with existing speakers  	LLSpeakerMgr::speaker_list_t speaker_list;  	mSpeakerMgr->getSpeakerList(&speaker_list, true); @@ -113,6 +120,7 @@ LLParticipantList::~LLParticipantList()  	mAvatarListDoubleClickConnection.disconnect();  	mAvatarListRefreshConnection.disconnect();  	mAvatarListReturnConnection.disconnect(); +	mAvatarListToggleIconsConnection.disconnect();  	// It is possible Participant List will be re-created from LLCallFloater::onCurrentChannelChanged()  	// See ticket EXT-3427 @@ -440,6 +448,8 @@ LLContextMenu* LLParticipantList::LLParticipantListMenu::createMenu()  	main_menu->setItemVisible("SortByName", is_sort_visible);  	main_menu->setItemVisible("SortByRecentSpeakers", is_sort_visible);  	main_menu->setItemVisible("Moderator Options", isGroupModerator()); +	main_menu->setItemVisible("View Icons Separator", mParent.mAvatarListToggleIconsConnection.connected()); +	main_menu->setItemVisible("View Icons", mParent.mAvatarListToggleIconsConnection.connected());  	main_menu->arrangeAndClear();  	return main_menu; diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index d9ca4230a9..953dff4551 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -46,7 +46,7 @@ class LLParticipantList  		typedef boost::function<bool (const LLUUID& speaker_id)> validate_speaker_callback_t; -		LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list, bool use_context_menu = true, bool exclude_agent = true); +		LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list, bool use_context_menu = true, bool exclude_agent = true, bool can_toggle_icons = true);  		~LLParticipantList();  		void setSpeakingIndicatorsVisible(BOOL visible); @@ -268,6 +268,7 @@ class LLParticipantList  		boost::signals2::connection mAvatarListDoubleClickConnection;  		boost::signals2::connection mAvatarListRefreshConnection;  		boost::signals2::connection mAvatarListReturnConnection; +		boost::signals2::connection mAvatarListToggleIconsConnection;  		LLPointer<LLAvatarItemRecentSpeakerComparator> mSortByRecentSpeakers;  		validate_speaker_callback_t mValidateSpeakerCallback; diff --git a/indra/newview/skins/default/xui/en/menu_participant_list.xml b/indra/newview/skins/default/xui/en/menu_participant_list.xml index d03a7e3d41..59c7f4ed85 100644 --- a/indra/newview/skins/default/xui/en/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/en/menu_participant_list.xml @@ -82,8 +82,21 @@           function="ParticipantList.EnableItem"           parameter="can_pay" />      </menu_item_call> -        <menu_item_separator -         layout="topleft" /> +    <menu_item_separator +        layout="topleft" +        name="View Icons Separator" /> +    <menu_item_check +        label="View People Icons" +        name="View Icons"> +      <on_click +          function="ToggleControl" +          parameter="ParticipantListShowIcons"/> +      <on_check +          function="CheckControl" +          parameter="ParticipantListShowIcons" /> +    </menu_item_check> +    <menu_item_separator +        layout="topleft" />      <menu_item_check       label="Block Voice"       layout="topleft" 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 a5e6506463..9ece4aead8 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -211,7 +211,7 @@                   image_selected="Toolbar_Middle_Selected"                   image_unselected="Toolbar_Middle_Off"                   layout="topleft" -                 name="trash_btn" +                 name="remove_from_outfit_btn"                   right="-1"                   top="1"                   width="31" /> | 
