From 370ddfb03e5df7d9207c77aec9237dfe192b65dc Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 24 Jun 2010 15:13:30 +0300
Subject: EXT-7963 FIXED Edit Outfit > Add More > Do not switch to next item
 type after add/replace

- Added callback to wear item from Add More panel on doubleclick
- To keep the list in its existing state and do not change the contents of the Add More panel to the next listed unworn item after the user wears an item, check if the item is not dummy. Dummy icons have no ids.

Reviewed by Mike Antipov and Neal Orman at https://codereview.productengine.com/secondlife/r/647/

--HG--
branch : product-engine
---
 indra/newview/llcofwearables.cpp    | 7 ++++++-
 indra/newview/llpaneloutfitedit.cpp | 1 +
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
index 1926682a39..1fab5c7683 100644
--- a/indra/newview/llcofwearables.cpp
+++ b/indra/newview/llcofwearables.cpp
@@ -374,7 +374,12 @@ void LLCOFWearables::refresh()
 				 value_it_end = values.end();
 			 value_it != value_it_end; ++value_it)
 		{
-			list->selectItemByValue(*value_it);
+			// value_it may be null because of dummy items
+			// Dummy items have no ID
+			if(value_it->asUUID().notNull())
+			{
+				list->selectItemByValue(*value_it);
+			}
 		}
 	}
 }
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 54776ca2f7..014b940e00 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -387,6 +387,7 @@ BOOL LLPanelOutfitEdit::postBuild()
 	mWearableItemsList = getChild<LLInventoryItemsList>("list_view");
 	mWearableItemsList->setCommitOnSelectionChange(true);
 	mWearableItemsList->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onInventorySelectionChange, this));
+	mWearableItemsList->setDoubleClickCallback(boost::bind(&LLPanelOutfitEdit::onPlusBtnClicked, this));
 
 	mSaveComboBtn.reset(new LLSaveOutfitComboBtn(this));
 	return TRUE;
-- 
cgit v1.2.3


From f8f9f90965962b0e79f29a487ee5e920d6bc0f05 Mon Sep 17 00:00:00 2001
From: Paul Guslisty <pguslisty@productengine.com>
Date: Thu, 24 Jun 2010 15:15:14 +0300
Subject: EXT-7578 FIXED Corrupted vertical scroll bar appears on 'Edit Outfit'
 panel if height of 'Add More' panel was changed

- Modified LLWearableItemTypeNameComparator so that it can order BODYPART items by type

Reviewed by Mike Antipov and Neal Orman at https://codereview.productengine.com/secondlife/r/620/

--HG--
branch : product-engine
---
 indra/newview/llwearableitemslist.cpp | 4 ++--
 indra/newview/llwearableitemslist.h   | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index da15b93697..576048ea3e 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -393,9 +393,9 @@ bool LLWearableItemTypeNameComparator::doCompare(const LLPanelInventoryListItemB
 		return item_type_order1 < item_type_order2;
 	}
 
-	if (item_type_order1 & TLO_NOT_CLOTHING)
+	if (item_type_order1 & TLO_SORTABLE_BY_NAME)
 	{
-		// If both items are of the same asset type except AT_CLOTHING
+		// If both items are of the same asset type except AT_CLOTHING and AT_BODYPART
 		// we can compare them by name.
 		return LLWearableItemNameComparator::doCompare(wearable_item1, wearable_item2);
 	}
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index eb82418454..d16a2a89c8 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -299,12 +299,12 @@ protected:
 private:
 	enum ETypeListOrder
 	{
-		TLO_ATTACHMENT	= 0x01,
-		TLO_CLOTHING	= 0x02,
+		TLO_CLOTHING	= 0x01,
+		TLO_ATTACHMENT	= 0x02,
 		TLO_BODYPART	= 0x04,
 		TLO_UNKNOWN		= 0x08,
 
-		TLO_NOT_CLOTHING = TLO_ATTACHMENT | TLO_BODYPART | TLO_UNKNOWN
+		TLO_SORTABLE_BY_NAME = TLO_ATTACHMENT | TLO_UNKNOWN
 	};
 
 	static LLWearableItemTypeNameComparator::ETypeListOrder getTypeListOrder(LLAssetType::EType item_type);
-- 
cgit v1.2.3


From 5a3e16390975b2b8c24b07f52fac89d0d6f3c99b Mon Sep 17 00:00:00 2001
From: Andrew Polunin <apolunin@gmail.com>
Date: Thu, 24 Jun 2010 15:19:05 +0300
Subject: EXT-7984 FIXED (state of \"add more\" panel should reset upon closing
 or re-opening outfit editor)

Added code to the LLPanelOutfitEdit::onOpen which resets the state of the \"add more\" panel

Reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/646

--HG--
branch : product-engine
---
 indra/newview/llpaneloutfitedit.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 014b940e00..1544717873 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -405,6 +405,10 @@ void LLPanelOutfitEdit::onOpen(const LLSD& key)
 		displayCurrentOutfit();
 		mInitialized = true;
 	}
+
+	showAddWearablesPanel(false);
+	mWearableItemsList->resetSelection();
+	mInventoryItemsPanel->clearSelection();
 }
 
 void LLPanelOutfitEdit::moveWearable(bool closer_to_body)
-- 
cgit v1.2.3


From 216ef01f09191ac6571f9dd1b66004b6b35d6296 Mon Sep 17 00:00:00 2001
From: Andrew Polunin <apolunin@productengine.com>
Date: Thu, 24 Jun 2010 15:32:36 +0300
Subject: EXT-7614 FIXED (\"Shop\" button's title is overlaid with new title)

- Added member mShopBtn (which corresponds to the 'Shop' button) to the LLSidepanelInventory class.
- Added code to the LLSidepanelInventory::updateVerbs() which makes this button visible and enabled by default and hides it when any other button should appear on it's place ('Wear', 'Play' or 'Teleport').

Reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/630/

--HG--
branch : product-engine
---
 indra/newview/llsidepanelinventory.cpp | 8 ++++++--
 indra/newview/llsidepanelinventory.h   | 1 +
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 63b6fe5ef0..de59af49da 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -71,8 +71,8 @@ BOOL LLSidepanelInventory::postBuild()
 		mShareBtn = mInventoryPanel->getChild<LLButton>("share_btn");
 		mShareBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShareButtonClicked, this));
 		
-		LLButton* shop_btn = mInventoryPanel->getChild<LLButton>("shop_btn");
-		shop_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShopButtonClicked, this));
+		mShopBtn = mInventoryPanel->getChild<LLButton>("shop_btn");
+		mShopBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onShopButtonClicked, this));
 
 		mWearBtn = mInventoryPanel->getChild<LLButton>("wear_btn");
 		mWearBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onWearButtonClicked, this));
@@ -265,6 +265,7 @@ void LLSidepanelInventory::updateVerbs()
 	mPlayBtn->setEnabled(FALSE);
  	mTeleportBtn->setVisible(FALSE);
  	mTeleportBtn->setEnabled(FALSE);
+ 	mShopBtn->setVisible(TRUE);
 
 	mShareBtn->setEnabled(canShare());
 
@@ -283,16 +284,19 @@ void LLSidepanelInventory::updateVerbs()
 		case LLInventoryType::IT_ATTACHMENT:
 			mWearBtn->setVisible(TRUE);
 			mWearBtn->setEnabled(TRUE);
+		 	mShopBtn->setVisible(FALSE);
 			break;
 		case LLInventoryType::IT_SOUND:
 		case LLInventoryType::IT_GESTURE:
 		case LLInventoryType::IT_ANIMATION:
 			mPlayBtn->setVisible(TRUE);
 			mPlayBtn->setEnabled(TRUE);
+		 	mShopBtn->setVisible(FALSE);
 			break;
 		case LLInventoryType::IT_LANDMARK:
 			mTeleportBtn->setVisible(TRUE);
 			mTeleportBtn->setEnabled(TRUE);
+		 	mShopBtn->setVisible(FALSE);
 			break;
 		default:
 			break;
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 13275d14c0..951fdd630c 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -94,6 +94,7 @@ private:
 	LLButton*					mPlayBtn;
 	LLButton*					mTeleportBtn;
 	LLButton*					mOverflowBtn;
+	LLButton*					mShopBtn;
 
 };
 
-- 
cgit v1.2.3


From f5f43b5d3aba3071009d9caa63de1426699e19ec Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Thu, 24 Jun 2010 15:39:09 +0300
Subject: EXT-8014 FIXED Enabled "Take off" in My Outfits gear menu only if a
 worn item or base outfit is selected.

--HG--
branch : product-engine
---
 indra/newview/lloutfitslist.cpp | 71 +++++++++++++++++++++++++++++++----------
 indra/newview/lloutfitslist.h   |  7 ++++
 2 files changed, 61 insertions(+), 17 deletions(-)

diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 67442dd573..d9c31b4d1c 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -148,10 +148,27 @@ private:
 
 	void onTakeOff()
 	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.notNull())
+		// Take off selected items if there are any
+		if (mOutfitList->hasItemSelected())
 		{
-			LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id);
+			uuid_vec_t selected_uuids;
+			mOutfitList->getSelectedItemsUUIDs(selected_uuids);
+
+			for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it)
+			{
+				if (get_is_item_worn(*it))
+				{
+					LLAppearanceMgr::instance().removeItemFromAvatar(*it);
+				}
+			}
+		}
+		else // or take off the whole selected outfit if no items specified.
+		{
+			const LLUUID& selected_outfit_id = getSelectedOutfitID();
+			if (selected_outfit_id.notNull())
+			{
+				LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id);
+			}
 		}
 	}
 
@@ -474,7 +491,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 	}
 
 	// Handle removed tabs.
-	for (uuid_vec_t::const_iterator iter=vremoved.begin(); iter != vremoved.end(); iter++)
+	for (uuid_vec_t::const_iterator iter=vremoved.begin(); iter != vremoved.end(); ++iter)
 	{
 		outfits_map_t::iterator outfits_iter = mOutfitsMap.find((*iter));
 		if (outfits_iter != mOutfitsMap.end())
@@ -626,7 +643,10 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)
 	}
 	if (command_name == "take_off")
 	{
-		return LLAppearanceMgr::getInstance()->getBaseOutfitUUID() == mSelectedOutfitUUID;
+		// Enable "Take Off" only if a worn item or base outfit is selected.
+		return ( !hasItemSelected()
+				 && LLAppearanceMgr::getInstance()->getBaseOutfitUUID() == mSelectedOutfitUUID )
+				|| hasWornItemSelected();
 	}
 	return false;
 }
@@ -638,6 +658,22 @@ void LLOutfitsList::showGearMenu(LLView* spawning_view)
 	mGearMenu->show(spawning_view);
 }
 
+void LLOutfitsList::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const
+{
+	// Collect selected items from all selected lists.
+	for (wearables_lists_map_t::const_iterator iter = mSelectedListsMap.begin();
+			iter != mSelectedListsMap.end();
+			++iter)
+	{
+		uuid_vec_t uuids;
+		(*iter).second->getSelectedUUIDs(uuids);
+
+		S32 prev_size = selected_uuids.size();
+		selected_uuids.resize(prev_size + uuids.size());
+		std::copy(uuids.begin(), uuids.end(), selected_uuids.begin() + prev_size);
+	}
+}
+
 boost::signals2::connection LLOutfitsList::setSelectionChangeCallback(selection_change_callback_t cb)
 {
 	return mSelectionChangeSignal.connect(cb);
@@ -894,6 +930,18 @@ void LLOutfitsList::applyFilterToTab(
 	}
 }
 
+bool LLOutfitsList::hasWornItemSelected()
+{
+	uuid_vec_t selected_uuids;
+	getSelectedItemsUUIDs(selected_uuids);
+
+	for (uuid_vec_t::const_iterator it=selected_uuids.begin(); it != selected_uuids.end(); ++it)
+	{
+		if (get_is_item_worn(*it)) return true;
+	}
+	return false;
+}
+
 void LLOutfitsList::onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id)
 {
 	LLAccordionCtrlTab* tab = dynamic_cast<LLAccordionCtrlTab*>(ctrl);
@@ -919,18 +967,7 @@ void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)
 
 	uuid_vec_t selected_uuids;
 
-	// Collect selected items from all selected lists.
-	for (wearables_lists_map_t::iterator iter = mSelectedListsMap.begin();
-			iter != mSelectedListsMap.end();
-			++iter)
-	{
-		uuid_vec_t uuids;
-		(*iter).second->getSelectedUUIDs(uuids);
-
-		S32 prev_size = selected_uuids.size();
-		selected_uuids.resize(prev_size + uuids.size());
-		std::copy(uuids.begin(), uuids.end(), selected_uuids.begin() + prev_size);
-	}
+	getSelectedItemsUUIDs(selected_uuids);
 
 	LLWearableItemsList::ContextMenu::instance().show(list, selected_uuids, x, y);
 }
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index d207624792..f86a415200 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -103,6 +103,8 @@ public:
 
 	const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; }
 
+	void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;
+
 	boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb);
 
 	/**
@@ -173,6 +175,11 @@ private:
 	 */
 	void applyFilterToTab(const LLUUID& category_id, LLAccordionCtrlTab* tab, const std::string& filter_substring);
 
+	/**
+	 * Returns true if there are any worn items among currently selected, otherwise false.
+	 */
+	bool hasWornItemSelected();
+
 	void onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id);
 	void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y);
 	void onCOFChanged();
-- 
cgit v1.2.3


From cb801fafb2cce28d2eecd87f011bc50eae686f1b Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Thu, 24 Jun 2010 16:51:15 +0300
Subject: Comments: EXT-7158 ADDITIONAL FIX Slight changes to fix according to
 review

Added additional check to avoid deselcting of items when filter is applied and made a couple of renames according to Mike's comments in review at https://codereview.productengine.com/secondlife/r/648/

--HG--
branch : product-engine
---
 indra/llui/llflatlistview.cpp   | 15 +++++++++------
 indra/llui/llflatlistview.h     |  4 ++--
 indra/newview/lloutfitslist.cpp |  2 +-
 3 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index f22b49f30f..b87851490d 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -1227,7 +1227,7 @@ LLFlatListViewEx::LLFlatListViewEx(const Params& p)
 , mNoFilteredItemsMsg(p.no_filtered_items_msg)
 , mNoItemsMsg(p.no_items_msg)
 , mForceShowingUnmatchedItems(false)
-, mLastFilterSucceded(false)
+, mHasMatchedItems(false)
 {
 
 }
@@ -1285,7 +1285,7 @@ void LLFlatListViewEx::filterItems()
 	item_panel_list_t items;
 	getItems(items);
 
-	mLastFilterSucceded = false;
+	mHasMatchedItems = false;
 	for (item_panel_list_t::iterator
 			 iter = items.begin(),
 			 iter_end = items.end();
@@ -1296,13 +1296,16 @@ void LLFlatListViewEx::filterItems()
 		// i.e. we don't hide items that don't support 'match_filter' action, separators etc.
 		if (0 == pItem->notify(action))
 		{
-			mLastFilterSucceded = true;
+			mHasMatchedItems = true;
 			pItem->setVisible(true);
 		}
 		else
 		{
 			// TODO: implement (re)storing of current selection.
-			selectItem(pItem, false);
+			if(!mForceShowingUnmatchedItems)
+			{
+				selectItem(pItem, false);
+			}
 			pItem->setVisible(mForceShowingUnmatchedItems);
 		}
 	}
@@ -1311,9 +1314,9 @@ void LLFlatListViewEx::filterItems()
 	notifyParentItemsRectChanged();
 }
 
-bool LLFlatListViewEx::wasLasFilterSuccessfull()
+bool LLFlatListViewEx::hasMatchedItems()
 {
-	return mLastFilterSucceded;
+	return mHasMatchedItems;
 }
 
 //EOF
diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h
index caeddfc179..ded46d8122 100644
--- a/indra/llui/llflatlistview.h
+++ b/indra/llui/llflatlistview.h
@@ -488,7 +488,7 @@ public:
 	/**
 	 * Returns true if last call of filterItems() found at least one matching item
 	 */
-	bool wasLasFilterSuccessfull();
+	bool hasMatchedItems();
 
 protected:
 	LLFlatListViewEx(const Params& p);
@@ -512,7 +512,7 @@ private:
 	/**
 	 * True if last call of filterItems() found at least one matching item
 	 */
-	bool mLastFilterSucceded;
+	bool mHasMatchedItems;
 };
 
 #endif
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index d9c31b4d1c..ec7fb06c8e 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -914,7 +914,7 @@ void LLOutfitsList::applyFilterToTab(
 	{
 		// hide tab if its title doesn't pass filter
 		// and it has no visible items
-		tab->setVisible(list->wasLasFilterSuccessfull());
+		tab->setVisible(list->hasMatchedItems());
 
 		// remove title highlighting because it might
 		// have been previously highlighted by less restrictive filter
-- 
cgit v1.2.3


From a209e339ee96095e884e4de51ea5c88e51825d62 Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Thu, 24 Jun 2010 18:00:09 +0300
Subject: EXT-7793 FIXED Implemented wearing separate wearables instead of
 whole outfit when individual items are selected in list.

- Added wearSelectedItems() method to LLOutfitsList which wears all items selected in outfit lists (if possible- adds, else replaces).
It is called when clicking wear if there is selection of individual items(LLOutfitsList::hasItemSelected() returns true). Otherwise
whole outfit is worn.

Reviewed by Neal Orman at https://codereview.productengine.com/secondlife/r/638

--HG--
branch : product-engine
---
 indra/newview/lloutfitslist.cpp           | 20 ++++++++++++++++++++
 indra/newview/lloutfitslist.h             |  3 +++
 indra/newview/llpaneloutfitsinventory.cpp |  9 ++++++++-
 3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index ec7fb06c8e..6c2566813f 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -960,6 +960,26 @@ void LLOutfitsList::onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const
 	}
 }
 
+void LLOutfitsList::wearSelectedItems()
+{
+	uuid_vec_t selected_uuids;
+	getSelectedItemsUUIDs(selected_uuids);
+
+	if(selected_uuids.empty())
+	{
+		return;
+	}
+
+	uuid_vec_t::const_iterator it;
+	// Wear items from all selected lists(if possible- add, else replace)
+	for (it = selected_uuids.begin(); it != selected_uuids.end()-1; ++it)
+	{
+		LLAppearanceMgr::getInstance()->wearItemOnAvatar(*it, false, false);
+	}
+	// call update only when wearing last item
+	LLAppearanceMgr::getInstance()->wearItemOnAvatar(*it, true, false);
+}
+
 void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)
 {
 	LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(ctrl);
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index f86a415200..26722f2a96 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -107,6 +107,9 @@ public:
 
 	boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb);
 
+	// Collects selected items from all selected lists and wears them(if possible- adds, else replaces)
+	void wearSelectedItems();
+
 	/**
 	 * Returns true if there is a selection inside currently selected outfit
 	 */
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 2f1cad8a75..076e6485a8 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -169,7 +169,14 @@ void LLPanelOutfitsInventory::onSearchEdit(const std::string& string)
 
 void LLPanelOutfitsInventory::onWearButtonClick()
 {
-	mMyOutfitsPanel->performAction("replaceoutfit");
+	if (mMyOutfitsPanel->hasItemSelected())
+	{
+		mMyOutfitsPanel->wearSelectedItems();
+	}
+	else
+	{
+		mMyOutfitsPanel->performAction("replaceoutfit");
+	}
 }
 
 bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD& response)
-- 
cgit v1.2.3


From f261af07b6b4e9381d9b7d652897d0965c6a426e Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Thu, 24 Jun 2010 18:43:13 +0300
Subject: EXT-8046 FIXED changed background image of Shop btn (panel outfit
 edit)

Reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/651/

--HG--
branch : product-engine
---
 .../skins/default/xui/en/panel_outfit_edit.xml     | 24 +++++++++++-----------
 1 file changed, 12 insertions(+), 12 deletions(-)

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 10dea659af..362fdd606a 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -382,20 +382,20 @@ It is calculated as border_size + 2*UIResizeBarOverlap
         <icon
          follows="bottom|left|right"
          height="25"
-         image_name="Toolbar_Right_Off"
+         image_name="Toolbar_Middle_Off"
          layout="topleft"
          left_pad="1"
          name="dummy_right_icon"
-         width="246" />
+         width="250" />
         <button
          follows="bottom|right"
          height="25"
-         image_hover_unselected="Toolbar_Middle_Over"
+         image_hover_unselected="Toolbar_Right_Over"
          image_overlay="Shop"
-         image_selected="Toolbar_Middle_Selected"
-         image_unselected="Toolbar_Middle_Off"
+         image_selected="Toolbar_Right_Selected"
+         image_unselected="Toolbar_Right_Off"
          layout="topleft"
-         left_pad="0"
+         left_pad="1"
          name="shop_btn_1"
          top="1"
          width="31" />
@@ -468,21 +468,21 @@ It is calculated as border_size + 2*UIResizeBarOverlap
         <icon
          follows="bottom|left|right"
          height="25"
-         image_name="Toolbar_Right_Off"
+         image_name="Toolbar_Middle_Off"
          layout="topleft"
          left_pad="1"
          name="dummy_right_icon"
-         width="153" >
+         width="154" >
         </icon>
         <button
          follows="bottom|right"
          height="25"
-         image_hover_unselected="Toolbar_Middle_Over"
+         image_hover_unselected="Toolbar_Right_Over"
          image_overlay="Shop"
-         image_selected="Toolbar_Middle_Selected"
-         image_unselected="Toolbar_Middle_Off"
+         image_selected="Toolbar_Right_Selected"
+         image_unselected="Toolbar_Right_Off"
          layout="topleft"
-         left_pad="0"
+         left_pad="1"
          name="shop_btn_2"
          top="1"
          width="31" />
-- 
cgit v1.2.3