From edb1be15b03533610787355d643f74d8feb92428 Mon Sep 17 00:00:00 2001
From: Vladimir Pchelko <pchelko@productengine.com>
Date: Wed, 23 Jun 2010 15:06:54 +0300
Subject: EXT-7776 ADDITIONAL FIX Change "revert_button" label to "Undo
 Changes"

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

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/panel_edit_wearable.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 1ab9f722d0..06255353a7 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -390,7 +390,7 @@
         <button
          follows="bottomleft"
          height="23"
-         label="Revert"
+         label="Undo Changes"
          layout="topleft"
          left_pad="7"
          name="revert_button"
-- 
cgit v1.2.3


From 08381a276dbf0544692c44236b40f57ec111aefc Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Wed, 23 Jun 2010 15:30:48 +0300
Subject: EXT-7755 ADDITIONAL FIX Fixed issues with wrong title after an outfit
 from the Inventory is worn, "Wear..." menu items state is made consistent
 with "Wear" button.

* Empty string is replaced with "Changing outfits" while changing COF;
* Fixed title to show "No Outfit" after an outfit from the Inventory is worn;
* Fixed bug with visible indicator after an empty folder is DnD from the Inventory "Clothing"
* Updated context and Gear "Wear..." menu items to take into account "isCOFChangeInProgress" state in on_enable callbacks

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

--HG--
branch : product-engine
---
 indra/newview/llappearancemgr.cpp                        |  3 ++-
 indra/newview/llappearancemgr.h                          |  3 +++
 indra/newview/lloutfitslist.cpp                          |  5 +++++
 indra/newview/llpaneloutfitsinventory.cpp                | 16 +++++++++++++---
 indra/newview/llpaneloutfitsinventory.h                  |  4 +++-
 indra/newview/llsidepanelappearance.cpp                  | 10 ++++++++--
 indra/newview/skins/default/xui/en/menu_outfit_tab.xml   |  3 +++
 .../skins/default/xui/en/sidepanel_appearance.xml        |  3 +++
 8 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 3947be49bb..f088a620d6 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1697,9 +1697,10 @@ void LLAppearanceMgr::getUserDescendents(const LLUUID& category,
 
 void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append)
 {
-	gAgentWearables.notifyLoadingStarted();
 	if(!category) return;
 
+	gAgentWearables.notifyLoadingStarted();
+
 	llinfos << "wearInventoryCategory( " << category->getName()
 			 << " )" << llendl;
 
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index ab4ff1bcfc..982aa02cd0 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -360,6 +360,9 @@ public:
 					<< llendl;
 			//dec_busy_count();
 			gInventory.removeObserver(this);
+
+			// lets notify observers that loading is finished.
+			gAgentWearables.notifyLoadingFinished();
 			delete this;
 			return;
 		}
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 6542afc366..b3d39f2a4a 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -103,8 +103,13 @@ protected:
 		{
 			return get_is_category_renameable(&gInventory, outfit_cat_id);
 		}
+		else if ("wear_replace" == param)
+		{
+			return !gAgentWearables.isCOFChangeInProgress();
+		}
 		else if ("wear_add" == param)
 		{
+			if (gAgentWearables.isCOFChangeInProgress()) return false;
 			return LLAppearanceMgr::getCanAddToCOF(outfit_cat_id);
 		}
 		else if ("take_off" == param)
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index d382c77430..77c135c716 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -72,11 +72,13 @@ static const std::string COF_TAB_NAME = "cof_tab";
 
 static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory");
 
+class LLPanelOutfitsInventory;
 class LLOutfitListGearMenu
 {
 public:
-	LLOutfitListGearMenu(LLOutfitsList* olist)
+	LLOutfitListGearMenu(LLOutfitsList* olist, LLPanelOutfitsInventory* parent_panel)
 	:	mOutfitList(olist),
+		mMyOutfitsPanel(parent_panel),
 		mMenu(NULL)
 	{
 		llassert_always(mOutfitList);
@@ -209,6 +211,11 @@ private:
 		{
 			return LLAppearanceMgr::getCanRemoveFromCOF(selected_outfit_id);
 		}
+		else if ("wear" == param)
+		{
+			return mMyOutfitsPanel->isActionEnabled(param);
+		}
+
 
 		return true;
 	}
@@ -233,6 +240,7 @@ private:
 
 	LLOutfitsList*	mOutfitList;
 	LLMenuGL*		mMenu;
+	LLPanelOutfitsInventory* mMyOutfitsPanel;
 };
 
 LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
@@ -550,13 +558,13 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()
 				   ,       _7 // EAcceptance* accept
 				   ));
 
-	mGearMenu = new LLOutfitListGearMenu(mMyOutfitsPanel);
+	mGearMenu = new LLOutfitListGearMenu(mMyOutfitsPanel, this);
 }
 
 void LLPanelOutfitsInventory::updateListCommands()
 {
 	bool trash_enabled = isActionEnabled("delete");
-	bool wear_enabled =  !gAgentWearables.isCOFChangeInProgress() && isActionEnabled("wear");
+	bool wear_enabled =  isActionEnabled("wear");
 	bool wear_visible = !isCOFPanelActive();
 	bool make_outfit_enabled = isActionEnabled("save_outfit");
 
@@ -710,6 +718,8 @@ BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
 	
 	if (command_name == "wear")
 	{
+		if (gAgentWearables.isCOFChangeInProgress()) return FALSE;
+
 		if (isCOFPanelActive())
 		{
 			return FALSE;
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index eabfda7f8c..287fcbf4bb 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -112,6 +112,9 @@ private:
 
 	//////////////////////////////////////////////////////////////////////////////////
 	// List Commands                                                                //
+public:
+	BOOL isActionEnabled(const LLSD& command_name);
+
 protected:
 	void initListCommandsHandlers();
 	void updateListCommands();
@@ -119,7 +122,6 @@ protected:
 	void showGearMenu();
 	void onTrashButtonClick();
 	void onClipboardAction(const LLSD& userdata);
-	BOOL isActionEnabled(const LLSD& command_name);
 	void onCustomAction(const LLSD& command_name);
 	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
 	bool hasItemsSelected();
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 0d1be91125..ea5796d766 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -390,8 +390,8 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name)
 				return;
 		}
 
-		std::string look_name = gAgentWearables.isCOFChangeInProgress() ? "" : getString("No Outfit");
-		mCurrentLookName->setText(look_name);
+		std::string string_name = gAgentWearables.isCOFChangeInProgress() ? "Changing outfits" : "No Outfit";
+		mCurrentLookName->setText(getString(string_name));
 		mOpenOutfitBtn->setEnabled(FALSE);
 	}
 	else
@@ -475,6 +475,12 @@ void LLSidepanelAppearance::setWearablesLoading(bool val)
 {
 	childSetVisible("wearables_loading_indicator", val);
 	childSetVisible("edit_outfit_btn", !val);
+
+	if (!val)
+	{
+		// refresh outfit name when COF is already changed.
+		refreshCurrentOutfitName();
+	}
 }
 
 void LLSidepanelAppearance::showDefaultSubpart()
diff --git a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
index 9c3151fe07..8c8bb29baf 100644
--- a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
+++ b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
@@ -8,6 +8,9 @@
      name="wear_replace">
         <on_click
          function="Outfit.WearReplace" />
+        <on_enable
+         function="Outfit.OnEnable"
+         parameter="wear_replace" />
         <on_visible
          function="Outfit.OnVisible"
          parameter="wear_replace" />
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
index e189d11d35..9a07d3a48a 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
@@ -21,6 +21,9 @@ width="333">
    <string
    name="Now Wearing"
    value="Now wearing..." />
+   <string
+   name="Changing outfits"
+   value="Changing outfits" />
    <panel
    background_opaque="true"
    background_visible="true"
-- 
cgit v1.2.3


From 719667cdb82a68d4453cd4382374d94f35d68336 Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Wed, 23 Jun 2010 15:34:32 +0300
Subject: EXT-4374 ADDITIONAL FIX Updated initial fix with refreshing from
 inventory item when a gesture asset is loaded.

Reviewed by Loren Shih at https://codereview.productengine.com/secondlife/r/629/

--HG--
branch : product-engine
---
 indra/newview/llpreviewgesture.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index ff315d3c53..a7b4873fed 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -876,6 +876,7 @@ void LLPreviewGesture::onLoadComplete(LLVFS *vfs,
 
 				self->mDirty = FALSE;
 				self->refresh();
+				self->refreshFromItem(); // to update description and title
 			}
 			else
 			{
-- 
cgit v1.2.3


From d5fb82283997f50d81af7dbf364783a5961b75d5 Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Wed, 23 Jun 2010 17:29:37 +0300
Subject: Linux build fix.

--HG--
branch : product-engine
---
 indra/newview/llappearancemgr.h | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 982aa02cd0..61779d5c0e 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -34,10 +34,12 @@
 #define LL_LLAPPEARANCEMGR_H
 
 #include "llsingleton.h"
+
+#include "llagentwearables.h"
+#include "llcallbacklist.h"
 #include "llinventorymodel.h"
 #include "llinventoryobserver.h"
 #include "llviewerinventory.h"
-#include "llcallbacklist.h"
 
 class LLWearable;
 class LLWearableHoldingPattern;
-- 
cgit v1.2.3


From ce9ac6501461eca8acd2c1074d71a9ed6df13df3 Mon Sep 17 00:00:00 2001
From: Yuri Chebotarev <ychebotarev@productengine.com>
Date: Wed, 23 Jun 2010 17:43:43 +0300
Subject: EXT-7963 FIX introduce new variable
 "keep_selection_visible_on_reshape" and use it for "edit outfit" flatlist
 controls.

reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/641/

--HG--
branch : product-engine
---
 indra/llui/llflatlistview.cpp                              | 8 ++++++++
 indra/llui/llflatlistview.h                                | 5 +++++
 indra/newview/skins/default/xui/en/panel_cof_wearables.xml | 3 +++
 3 files changed, 16 insertions(+)

diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index 2433c14315..c7463e581c 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -50,14 +50,21 @@ LLFlatListView::Params::Params()
 	allow_select("allow_select"),
 	multi_select("multi_select"),
 	keep_one_selected("keep_one_selected"),
+	keep_selection_visible_on_reshape("keep_selection_visible_on_reshape",false),
 	no_items_text("no_items_text")
 {};
 
 void LLFlatListView::reshape(S32 width, S32 height, BOOL called_from_parent /* = TRUE */)
 {
+	S32 delta = height - getRect().getHeight();
 	LLScrollContainer::reshape(width, height, called_from_parent);
 	setItemsNoScrollWidth(width);
 	rearrangeItems();
+	
+	if(delta!= 0 && mKeepSelectionVisibleOnReshape)
+	{
+		ensureSelectedVisible();
+	}
 }
 
 const LLRect& LLFlatListView::getItemsRect() const
@@ -380,6 +387,7 @@ LLFlatListView::LLFlatListView(const LLFlatListView::Params& p)
   , mPrevNotifyParentRect(LLRect())
   , mNoItemsCommentTextbox(NULL)
   , mIsConsecutiveSelection(false)
+  , mKeepSelectionVisibleOnReshape(p.keep_selection_visible_on_reshape)
 {
 	mBorderThickness = getBorderWidth();
 
diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h
index f4e0426f15..0820a7ab67 100644
--- a/indra/llui/llflatlistview.h
+++ b/indra/llui/llflatlistview.h
@@ -105,6 +105,9 @@ public:
 		/** don't allow to deselect all selected items (for mouse events on items only) */
 		Optional<bool> keep_one_selected;
 
+		/** try to keep selection visible after reshape */
+		Optional<bool> keep_selection_visible_on_reshape;
+
 		/** padding between items */
 		Optional<U32> item_pad; 
 
@@ -412,6 +415,8 @@ private:
 
 	bool mIsConsecutiveSelection;
 
+	bool mKeepSelectionVisibleOnReshape;
+
 	/** All pairs of the list */
 	pairs_list_t mItemPairs;
 
diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
index f016c27b0a..d2c8ab159f 100644
--- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
+++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
@@ -31,6 +31,7 @@
              item_pad="3"
              layout="topleft"
              left="0"
+             keep_selection_visible_on_reshape="true"
              multi_select="true"
              name="list_attachments"
              top="0"
@@ -45,6 +46,7 @@
              follows="all"
              height="10"
              item_pad="3"
+             keep_selection_visible_on_reshape="true"
              layout="topleft"
              left="0"
              multi_select="true"
@@ -61,6 +63,7 @@
              follows="all"
              height="10"
              item_pad="3"
+             keep_selection_visible_on_reshape="true"
              layout="topleft"
              left="0"
              multi_select="true"
-- 
cgit v1.2.3


From cc0e5419466a5f685b102cb1bda176c48e6577c8 Mon Sep 17 00:00:00 2001
From: Yuri Chebotarev <ychebotarev@productengine.com>
Date: Wed, 23 Jun 2010 17:45:02 +0300
Subject: EXT-7988 FIX xml change - add green color

reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/634/

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
index dbe1ea2874..49c2abe1a5 100644
--- a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
@@ -14,5 +14,6 @@
   <!-- style for inventory list item WORN on avatar -->
   <worn_style
    font="SansSerifSmall"
-   font.style="BOLD" />
+   font.style="BOLD"
+   color="green" />
 </inventory_list_item>
-- 
cgit v1.2.3


From 4a0950e2d75a32d5eb4452520bff35967dc67ab2 Mon Sep 17 00:00:00 2001
From: Yuri Chebotarev <ychebotarev@productengine.com>
Date: Wed, 23 Jun 2010 17:46:17 +0300
Subject: EXT-7973 FIX Hide "edit" menu item if there are unworn items in
 selection

reviewed by Mike Antipov by https://codereview.productengine.com/secondlife/r/637/

--HG--
branch : product-engine
---
 indra/newview/llwearableitemslist.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 832d4a2fe6..6aa6ebaa54 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -657,7 +657,7 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
 	setMenuItemVisible(menu, "wear_add",			mask == MASK_CLOTHING && n_worn == 0);
 	setMenuItemEnabled(menu, "wear_add",			n_items == 1 && canAddWearable(ids.front()));
 	setMenuItemVisible(menu, "wear",				n_worn == 0);
-	setMenuItemVisible(menu, "edit",				!standalone && mask & (MASK_CLOTHING|MASK_BODYPART));
+	setMenuItemVisible(menu, "edit",				!standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items);
 	setMenuItemEnabled(menu, "edit",				n_editable == 1 && n_worn == 1 && n_items == 1);
 	setMenuItemVisible(menu, "create_new",			mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1);
 	setMenuItemVisible(menu, "show_original",		!standalone);
-- 
cgit v1.2.3


From 887b2858d4d180d3679f1eb39fd37be5a551615e Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Fri, 11 Jun 2010 20:02:42 +0300
Subject: EXT-7779 FIXED Changed wearing panel from inventory panel to a flat
 list similar to My Outfits view. - Added common interface for My Outfits and
 Wearing tabs. - Changed LLPanelOutfitsInventory to use common interface for
 My Outfits and Wearing tabs. - Removed dependency on outfits side panel from
 inventory bridge context menus. - Removed unused LLShowCreatedOutfit class
 from llagentwearables.cpp. - Restored opening newly created outfit in My
 Outfits tab. - Fixed worn items indication for Wearing tab items.

Revieved by Neal Orman at https://codereview.productengine.com/secondlife/r/604/.

--HG--
branch : product-engine
---
 indra/newview/CMakeLists.txt                       |   3 +
 indra/newview/llagentwearables.cpp                 |  40 --
 indra/newview/llappearancemgr.cpp                  |  17 +-
 indra/newview/llinventorybridge.cpp                |  64 +---
 indra/newview/llinventorybridge.h                  |   1 -
 indra/newview/lloutfitslist.cpp                    |  78 +++-
 indra/newview/lloutfitslist.h                      |  22 +-
 indra/newview/llpanelappearancetab.h               |  22 +-
 indra/newview/llpaneloutfitsinventory.cpp          | 424 ++-------------------
 indra/newview/llpaneloutfitsinventory.h            |  54 +--
 indra/newview/llpanelwearing.cpp                   | 130 +++++++
 indra/newview/llpanelwearing.h                     |  73 ++++
 indra/newview/llwearableitemslist.cpp              |  15 +-
 indra/newview/llwearableitemslist.h                |  11 +-
 .../default/xui/en/panel_outfits_inventory.xml     |  37 +-
 15 files changed, 400 insertions(+), 591 deletions(-)
 create mode 100644 indra/newview/llpanelwearing.cpp
 create mode 100644 indra/newview/llpanelwearing.h

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index c1b2d680be..ce42cb6038 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -363,6 +363,7 @@ set(viewer_SOURCE_FILES
     llpaneltopinfobar.cpp
     llpanelvolume.cpp
     llpanelvolumepulldown.cpp
+    llpanelwearing.cpp
     llparcelselection.cpp
     llparticipantlist.cpp
     llpatchvertexarray.cpp
@@ -830,6 +831,7 @@ set(viewer_HEADER_FILES
     lloutfitslist.h
     lloutfitobserver.h
     lloutputmonitorctrl.h
+    llpanelappearancetab.h
     llpanelavatar.h
     llpanelavatartag.h
     llpanelblockedlist.h
@@ -883,6 +885,7 @@ set(viewer_HEADER_FILES
     llpaneltopinfobar.h
     llpanelvolume.h
     llpanelvolumepulldown.h
+    llpanelwearing.h
     llparcelselection.h
     llparticipantlist.h
     llpatchvertexarray.h
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 5728256dba..017fcf6e2b 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -48,7 +48,6 @@
 #include "llmd5.h"
 #include "llnotificationsutil.h"
 #include "lloutfitobserver.h"
-#include "llpaneloutfitsinventory.h"
 #include "llsidepanelappearance.h"
 #include "llsidetray.h"
 #include "lltexlayer.h"
@@ -1232,45 +1231,6 @@ void LLAgentWearables::createStandardWearablesAllDone()
 	gAgentAvatarp->onFirstTEMessageReceived();
 }
 
-
-class LLShowCreatedOutfit: public LLInventoryCallback
-{
-public:
-	LLShowCreatedOutfit(LLUUID& folder_id):
-		mFolderID(folder_id)
-	{
-	}
-
-	virtual ~LLShowCreatedOutfit()
-	{
-		LLSD key;
-		LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key);
-		LLPanelOutfitsInventory *outfit_panel =
-			dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory"));
-		// TODO: add handling "My Outfits" tab.
-		if (outfit_panel && outfit_panel->isCOFPanelActive())
-		{
-			outfit_panel->getRootFolder()->clearSelection();
-			outfit_panel->getRootFolder()->setSelectionByID(mFolderID, TRUE);
-		}
-		LLAccordionCtrlTab* tab_outfits = outfit_panel ? outfit_panel->findChild<LLAccordionCtrlTab>("tab_outfits") : 0;
-		if (tab_outfits && !tab_outfits->getDisplayChildren())
-		{
-			tab_outfits->changeOpenClose(tab_outfits->getDisplayChildren());
-		}
-
-		LLAppearanceMgr::instance().updateIsDirty();
-		LLAppearanceMgr::instance().updatePanelOutfitName("");
-	}
-	
-	virtual void fire(const LLUUID&)
-	{
-	}
-	
-private:
-	LLUUID mFolderID;
-};
-
 void LLAgentWearables::makeNewOutfitDone(S32 type, U32 index)
 {
 	LLUUID first_item_id = getWearableItemID((LLWearableType::EType)type, index);
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index f088a620d6..597076503d 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -45,7 +45,7 @@
 #include "llinventoryobserver.h"
 #include "llnotificationsutil.h"
 #include "lloutfitobserver.h"
-#include "llpaneloutfitsinventory.h"
+#include "lloutfitslist.h"
 #include "llselectmgr.h"
 #include "llsidepanelappearance.h"
 #include "llsidetray.h"
@@ -2306,18 +2306,11 @@ public:
 		{
 			LLSideTray::getInstance()->showPanel("panel_outfits_inventory", key);
 		}
-		LLPanelOutfitsInventory *outfit_panel =
-			dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory"));
-		if (outfit_panel)
+		LLOutfitsList *outfits_list =
+			dynamic_cast<LLOutfitsList*>(LLSideTray::getInstance()->getPanel("outfitslist_tab"));
+		if (outfits_list)
 		{
-			outfit_panel->getRootFolder()->clearSelection();
-			outfit_panel->getRootFolder()->setSelectionByID(mFolderID, TRUE);
-		}
-		
-		LLAccordionCtrlTab* tab_outfits = outfit_panel ? outfit_panel->findChild<LLAccordionCtrlTab>("tab_outfits") : 0;
-		if (tab_outfits && !tab_outfits->getDisplayChildren())
-		{
-			tab_outfits->changeOpenClose(tab_outfits->getDisplayChildren());
+			outfits_list->setSelectedOutfitByUUID(mFolderID);
 		}
 
 		LLAppearanceMgr::getInstance()->updateIsDirty();
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index afaeddaaeb..a5f24c55fe 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -72,7 +72,6 @@
 #include "llviewerwindow.h"
 #include "llvoavatarself.h"
 #include "llwearablelist.h"
-#include "llpaneloutfitsinventory.h"
 
 typedef std::pair<LLUUID, LLUUID> two_uuids_t;
 typedef std::list<two_uuids_t> two_uuids_list_t;
@@ -511,17 +510,6 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
 {
 	const LLInventoryObject *obj = getInventoryObject();
 
-	bool is_sidepanel = isInOutfitsSidePanel();
-	if (is_sidepanel)
-	{
-		// Sidepanel includes restricted menu.
-		if (obj && obj->getIsLinkType() && !get_is_item_worn(mUUID))
-		{
-			items.push_back(std::string("Remove Link"));
-		}
-		return;
-	}
-
 	if (obj)
 	{
 		if (obj->getIsLinkType())
@@ -948,16 +936,6 @@ void LLInvFVBridge::purgeItem(LLInventoryModel *model, const LLUUID &uuid)
 	}
 }
 
-BOOL LLInvFVBridge::isInOutfitsSidePanel() const
-{
-	LLInventoryPanel *my_panel = dynamic_cast<LLInventoryPanel*>(mInventoryPanel.get());
-	LLPanelOutfitsInventory *outfit_panel =
-		dynamic_cast<LLPanelOutfitsInventory*>(LLSideTray::getInstance()->getPanel("panel_outfits_inventory"));
-	if (!outfit_panel)
-		return FALSE;
-	return outfit_panel->isTabPanel(my_panel);
-}
-
 BOOL LLInvFVBridge::canShare() const
 {
 	const LLInventoryModel* model = getInventoryModel();
@@ -2430,17 +2408,8 @@ void LLFolderBridge::folderOptionsMenu()
 	const bool is_ensemble = (type == LLFolderType::FT_NONE ||
 							  LLFolderType::lookupIsEnsembleType(type));
 
-	// calling card related functionality for folders.
-
-	const bool is_sidepanel = isInOutfitsSidePanel();
-	if (is_sidepanel)
-	{
-		mItems.push_back("Rename");
-		addDeleteContextMenuOptions(mItems, disabled_items);
-	}
-
 	// Only enable calling-card related options for non-system folders.
-	if (!is_sidepanel && !is_system_folder)
+	if (!is_system_folder)
 	{
 		LLIsType is_callingcard(LLAssetType::AT_CALLINGCARD);
 		if (mCallingCards || checkFolderForContentsOfType(model, is_callingcard))
@@ -2469,10 +2438,7 @@ void LLFolderBridge::folderOptionsMenu()
 		checkFolderForContentsOfType(model, is_object) ||
 		checkFolderForContentsOfType(model, is_gesture) )
 	{
-		if (!is_sidepanel)
-		{
-			mItems.push_back(std::string("Folder Wearables Separator"));
-		}
+		mItems.push_back(std::string("Folder Wearables Separator"));
 
 		// Only enable add/replace outfit for non-system folders.
 		if (!is_system_folder)
@@ -3763,13 +3729,6 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		{
 			disabled_items.push_back(std::string("Share"));
 		}
-		bool is_sidepanel = isInOutfitsSidePanel();
-
-		if (!is_sidepanel)
-		{
-			addOpenRightClickMenuOption(items);
-			items.push_back(std::string("Properties"));
-		}
 
 		getClipboardEntries(true, items, disabled_items, flags);
 
@@ -4071,12 +4030,8 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		{
 			disabled_items.push_back(std::string("Share"));
 		}
-		bool is_sidepanel = isInOutfitsSidePanel();
 
-		if (!is_sidepanel)
-		{
-			items.push_back(std::string("Properties"));
-		}
+		items.push_back(std::string("Properties"));
 
 		getClipboardEntries(true, items, disabled_items, flags);
 
@@ -4431,24 +4386,17 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 		{
 			disabled_items.push_back(std::string("Share"));
 		}
-		bool is_sidepanel = isInOutfitsSidePanel();
 		
-		if (can_open && !is_sidepanel)
+		if (can_open)
 		{
 			addOpenRightClickMenuOption(items);
 		}
 
-		if (!is_sidepanel)
-		{
-			items.push_back(std::string("Properties"));
-		}
+		items.push_back(std::string("Properties"));
 
 		getClipboardEntries(true, items, disabled_items, flags);
 
-		if (!is_sidepanel)
-		{
-			items.push_back(std::string("Wearable Separator"));
-		}
+		items.push_back(std::string("Wearable Separator"));
 
 		items.push_back(std::string("Wearable Edit"));
 
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 64d0f8d254..97e87c2f3b 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -74,7 +74,6 @@ public:
 									   U32 flags = 0x00);
 	virtual ~LLInvFVBridge() {}
 
-	BOOL isInOutfitsSidePanel() const; // allow context menus to be customized for side panel
 	BOOL canShare() const;
 
 	//--------------------------------------------------------------------
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index b3d39f2a4a..a285926a8b 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -162,7 +162,7 @@ protected:
 static LLRegisterPanelClassWrapper<LLOutfitsList> t_outfits_list("outfits_list");
 
 LLOutfitsList::LLOutfitsList()
-	:	LLPanel()
+	:	LLPanelAppearanceTab()
 	,	mAccordion(NULL)
 	,	mListCommands(NULL)
 	,	mIsInitialized(false)
@@ -313,7 +313,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 
 		// If filter is currently applied we store the initial tab state and
 		// open it to show matched items if any.
-		if (!mFilterSubString.empty())
+		if (!sFilterSubString.empty())
 		{
 			tab->notifyChildren(LLSD().with("action","store_state"));
 			tab->setDisplayChildren(true);
@@ -323,7 +323,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 			// filter to the newly added list.
 			list->setForceRefresh(true);
 
-			list->setFilterSubString(mFilterSubString);
+			list->setFilterSubString(sFilterSubString);
 		}
 	}
 
@@ -415,14 +415,74 @@ void LLOutfitsList::performAction(std::string action)
 	}
 }
 
+void LLOutfitsList::removeSelected()
+{
+	if (mSelectedOutfitUUID.notNull())
+	{
+		remove_category(&gInventory, mSelectedOutfitUUID);
+	}
+}
+
+void LLOutfitsList::setSelectedOutfitByUUID(const LLUUID& outfit_uuid)
+{
+	for (outfits_map_t::iterator iter = mOutfitsMap.begin();
+			iter != mOutfitsMap.end();
+			++iter)
+	{
+		if (outfit_uuid == iter->first)
+		{
+			LLAccordionCtrlTab* tab = iter->second;
+			if (!tab) continue;
+
+			LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
+			if (!list) continue;
+
+			tab->setFocus(TRUE);
+			changeOutfitSelection(list, outfit_uuid);
+
+			tab->setDisplayChildren(true);
+		}
+	}
+}
+
+// virtual
 void LLOutfitsList::setFilterSubString(const std::string& string)
 {
 	applyFilter(string);
 
-	mFilterSubString = string;
+	sFilterSubString = string;
+}
+
+bool LLOutfitsList::isActionEnabled(const LLSD& userdata)
+{
+	const std::string command_name = userdata.asString();
+	if (command_name == "delete")
+	{
+		return !mItemSelected && LLAppearanceMgr::instance().getCanRemoveOutfit(mSelectedOutfitUUID);
+	}
+	if (command_name == "rename")
+	{
+		return get_is_category_renameable(&gInventory, mSelectedOutfitUUID);
+	}
+	if (command_name == "save_outfit")
+	{
+		bool outfit_locked = LLAppearanceMgr::getInstance()->isOutfitLocked();
+		bool outfit_dirty = LLAppearanceMgr::getInstance()->isOutfitDirty();
+		// allow save only if outfit isn't locked and is dirty
+		return !outfit_locked && outfit_dirty;
+	}
+	if (command_name == "wear")
+	{
+		return mSelectedOutfitUUID.notNull();
+	}
+	if (command_name == "take_off")
+	{
+		return LLAppearanceMgr::getInstance()->getBaseOutfitUUID() == mSelectedOutfitUUID;
+	}
+	return false;
 }
 
-boost::signals2::connection LLOutfitsList::addSelectionChangeCallback(selection_change_callback_t cb)
+boost::signals2::connection LLOutfitsList::setSelectionChangeCallback(selection_change_callback_t cb)
 {
 	return mSelectionChangeSignal.connect(cb);
 }
@@ -558,7 +618,7 @@ void LLOutfitsList::restoreOutfitSelection(LLAccordionCtrlTab* tab, const LLUUID
 
 void LLOutfitsList::onFilteredWearableItemsListRefresh(LLUICtrl* ctrl)
 {
-	if (!ctrl || mFilterSubString.empty())
+	if (!ctrl || sFilterSubString.empty())
 		return;
 
 	for (outfits_map_t::iterator
@@ -572,7 +632,7 @@ void LLOutfitsList::onFilteredWearableItemsListRefresh(LLUICtrl* ctrl)
 		LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
 		if (list != ctrl) continue;
 
-		applyFilterToTab(iter->first, tab, mFilterSubString);
+		applyFilterToTab(iter->first, tab, sFilterSubString);
 	}
 }
 
@@ -588,7 +648,7 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
 		LLAccordionCtrlTab* tab = iter->second;
 		if (!tab) continue;
 
-		bool more_restrictive = mFilterSubString.size() < new_filter_substring.size() && !new_filter_substring.substr(0, mFilterSubString.size()).compare(mFilterSubString);
+		bool more_restrictive = sFilterSubString.size() < new_filter_substring.size() && !new_filter_substring.substr(0, sFilterSubString.size()).compare(sFilterSubString);
 
 		// Restore tab visibility in case of less restrictive filter
 		// to compare it with updated string if it was previously hidden.
@@ -603,7 +663,7 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
 			list->setFilterSubString(new_filter_substring);
 		}
 
-		if(mFilterSubString.empty() && !new_filter_substring.empty())
+		if(sFilterSubString.empty() && !new_filter_substring.empty())
 		{
 			//store accordion tab state when filter is not empty
 			tab->notifyChildren(LLSD().with("action","store_state"));
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index a6b9a66836..14a1aab415 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -37,12 +37,14 @@
 
 // newview
 #include "llinventorymodel.h"
-#include "llinventoryobserver.h"
+#include "llpanelappearancetab.h"
 
 class LLAccordionCtrlTab;
+class LLInventoryCategoriesObserver;
 class LLWearableItemsList;
 class LLListContextMenu;
 
+
 /**
  * @class LLOutfitTabNameComparator
  *
@@ -66,9 +68,9 @@ public:
  * which displays each outfit in an accordion tab with a flat list
  * of items inside it.
  *
- * Starts fetching nevessary inventory content on first openning.
+ * Starts fetching necessary inventory content on first opening.
  */
-class LLOutfitsList : public LLPanel
+class LLOutfitsList : public LLPanelAppearanceTab
 {
 public:
 	typedef boost::function<void (const LLUUID&)> selection_change_callback_t;
@@ -88,11 +90,17 @@ public:
 
 	void performAction(std::string action);
 
-	void setFilterSubString(const std::string& string);
+	void removeSelected();
+
+	void setSelectedOutfitByUUID(const LLUUID& outfit_uuid);
+
+	/*virtual*/ void setFilterSubString(const std::string& string);
+
+	/*virtual*/ bool isActionEnabled(const LLSD& userdata);
 
 	const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; }
 
-	boost::signals2::connection addSelectionChangeCallback(selection_change_callback_t cb);
+	boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb);
 
 	/**
 	 * Returns true if there is a selection inside currently selected outfit
@@ -184,13 +192,11 @@ private:
 	LLUUID							mHighlightedOutfitUUID;
 	selection_change_signal_t		mSelectionChangeSignal;
 
-	std::string 					mFilterSubString;
-
 	typedef	std::map<LLUUID, LLAccordionCtrlTab*>		outfits_map_t;
 	typedef outfits_map_t::value_type					outfits_map_value_t;
 	outfits_map_t					mOutfitsMap;
 
-	LLListContextMenu*			mOutfitMenu;
+	LLListContextMenu*				mOutfitMenu;
 
 	bool							mIsInitialized;
 	/**
diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h
index c2f8dbd074..af984c521c 100644
--- a/indra/newview/llpanelappearancetab.h
+++ b/indra/newview/llpanelappearancetab.h
@@ -1,6 +1,6 @@
 /** 
- * @file llpanelplacestab.h
- * @brief Tabs interface for Side Bar "Places" panel
+ * @file llpanelappearancetab.h
+ * @brief Tabs interface for Side Bar "My Appearance" panel
  *
  * $LicenseInfo:firstyear=2009&license=viewergpl$
  * 
@@ -34,28 +34,20 @@
 
 #include "llpanel.h"
 
-#include "llpanelappearance.h"
-
 class LLPanelAppearanceTab : public LLPanel
 {
 public:
-	LLPanelAppearanceTab(LLPanelAppearance *parent) : 
-		LLPanel(),
-		mParent(parent)
-	{}
+	LLPanelAppearanceTab() : LLPanel() {}
 	virtual ~LLPanelAppearanceTab() {}
 
-	virtual void onSearchEdit(const std::string& string) = 0;
-	virtual void updateVerbs() = 0;		// Updates buttons at the bottom of Appearance panel
-	virtual void onWear() = 0;
-	virtual void onEdit() = 0;
-	virtual void onNew() = 0;
+	virtual void setFilterSubString(const std::string& string) = 0;
 
-	bool isTabVisible(); // Check if parent TabContainer is visible.
+	virtual bool isActionEnabled(const LLSD& userdata) = 0;
 
+	static const std::string& getFilterSubString() { return sFilterSubString; }
 
 protected:
-	LLPanelAppearance*		mParent;
+	static std::string		sFilterSubString;
 };
 
 #endif //LL_LLPANELAPPEARANCETAB_H
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 77c135c716..57c82b7ac4 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -33,40 +33,23 @@
 
 #include "llpaneloutfitsinventory.h"
 
-#include "llagent.h"
-#include "llagentwearables.h"
-#include "llappearancemgr.h"
+#include "llmenugl.h"
+#include "llnotificationsutil.h"
+#include "lltabcontainer.h"
 
-#include "llbutton.h"
-#include "llfloaterreg.h"
-#include "llfloaterworldmap.h"
-#include "llfloaterinventory.h"
-#include "llfoldervieweventlistener.h"
-#include "llinventorybridge.h"
 #include "llinventoryfunctions.h"
 #include "llinventorymodelbackgroundfetch.h"
-#include "llinventorypanel.h"
-#include "lllandmark.h"
-#include "lllineeditor.h"
-#include "llmodaldialog.h"
-#include "llnotificationsutil.h"
+#include "llagentwearables.h"
+#include "llappearancemgr.h"
 #include "lloutfitobserver.h"
 #include "lloutfitslist.h"
+#include "llpanelwearing.h"
 #include "llsaveoutfitcombobtn.h"
 #include "llsidepanelappearance.h"
 #include "llsidetray.h"
-#include "lltabcontainer.h"
 #include "llviewerfoldertype.h"
-#include "llviewerjointattachment.h"
-#include "llvoavatarself.h"
-
-// List Commands
-#include "lldndbutton.h"
-#include "llmenugl.h"
 #include "llviewermenu.h"
 
-#include "llviewercontrol.h"
-
 static const std::string OUTFITS_TAB_NAME = "outfitslist_tab";
 static const std::string COF_TAB_NAME = "cof_tab";
 
@@ -246,11 +229,10 @@ private:
 LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
 	mMyOutfitsPanel(NULL),
 	mCurrentOutfitPanel(NULL),
+	mActivePanel(NULL),
 	mGearMenu(NULL),
 	mInitialized(false)
 {
-	mSavedFolderState = new LLSaveFolderState();
-	mSavedFolderState->setApply(FALSE);
 	gAgentWearables.addLoadedCallback(boost::bind(&LLPanelOutfitsInventory::onWearablesLoaded, this));
 	gAgentWearables.addLoadingStartedCallback(boost::bind(&LLPanelOutfitsInventory::onWearablesLoading, this));
 
@@ -263,7 +245,6 @@ LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
 LLPanelOutfitsInventory::~LLPanelOutfitsInventory()
 {
 	delete mGearMenu;
-	delete mSavedFolderState;
 }
 
 // virtual
@@ -305,7 +286,8 @@ void LLPanelOutfitsInventory::onOpen(const LLSD& key)
 	// and update verbs.
 	onTabChange();
 	
-	// Auto open the first outfit newly created so new users can see sample outfit contents
+	// *TODO: Auto open the first outfit newly created so new users can see sample outfit contents
+	/*
 	static bool should_open_outfit = true;
 	if (should_open_outfit && gAgent.isFirstLogin())
 	{
@@ -325,6 +307,7 @@ void LLPanelOutfitsInventory::onOpen(const LLSD& key)
 		}
 	}
 	should_open_outfit = false;
+	*/
 }
 
 void LLPanelOutfitsInventory::updateVerbs()
@@ -338,93 +321,30 @@ void LLPanelOutfitsInventory::updateVerbs()
 // virtual
 void LLPanelOutfitsInventory::onSearchEdit(const std::string& string)
 {
-	mFilterSubString = string;
+	if (!mActivePanel) return;
 
-	// TODO: add handling "My Outfits" tab.
-	if (!isCOFPanelActive())
-	{
-		mMyOutfitsPanel->setFilterSubString(string);
-		return;
-	}
+	mFilterSubString = string;
 
 	if (string == "")
 	{
-		getActivePanel()->setFilterSubString(LLStringUtil::null);
-
-		// re-open folders that were initially open
-		mSavedFolderState->setApply(TRUE);
-		getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-		LLOpenFoldersWithSelection opener;
-		getRootFolder()->applyFunctorRecursively(opener);
-		getRootFolder()->scrollToShowSelection();
+		mActivePanel->setFilterSubString(LLStringUtil::null);
 	}
 
 	LLInventoryModelBackgroundFetch::instance().start();
 
-	if (getActivePanel()->getFilterSubString().empty() && string.empty())
+	if (mActivePanel->getFilterSubString().empty() && string.empty())
 	{
 		// current filter and new filter empty, do nothing
 		return;
 	}
 
-	// save current folder open state if no filter currently applied
-	if (getRootFolder()->getFilterSubString().empty())
-	{
-		mSavedFolderState->setApply(FALSE);
-		getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
-	}
-
 	// set new filter string
-	getActivePanel()->setFilterSubString(string);
+	mActivePanel->setFilterSubString(string);
 }
 
 void LLPanelOutfitsInventory::onWearButtonClick()
 {
-	// TODO: Remove if/else, add common interface
-	// for "My Outfits" and "Wearing" tabs.
-	if (!isCOFPanelActive())
-	{
-		mMyOutfitsPanel->performAction("replaceoutfit");
-	}
-	else
-	{
-		LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
-		if (listenerp)
-		{
-			listenerp->performAction(NULL, "replaceoutfit");
-		}
-	}
-}
-
-void LLPanelOutfitsInventory::onAdd()
-{
-	// TODO: Remove if/else, add common interface
-	// for "My Outfits" and "Wearing" tabs.
-	if (!isCOFPanelActive())
-	{
-		mMyOutfitsPanel->performAction("addtooutfit");
-	}
-	else
-	{
-		LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
-		if (listenerp)
-		{
-			listenerp->performAction(NULL, "addtooutfit");
-		}
-	}
-}
-
-void LLPanelOutfitsInventory::onRemove()
-{
-	LLFolderViewEventListener* listenerp = getCorrectListenerForAction();
-	if (listenerp)
-	{
-		listenerp->performAction(NULL, "removefromoutfit");
-	}
-}
-
-void LLPanelOutfitsInventory::onEdit()
-{
+	mMyOutfitsPanel->performAction("replaceoutfit");
 }
 
 bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD& response)
@@ -454,8 +374,6 @@ bool LLPanelOutfitsInventory::onSaveCommit(const LLSD& notification, const LLSD&
 	return false;
 }
 
-
-
 void LLPanelOutfitsInventory::onSave()
 {
 	std::string outfit_name;
@@ -483,57 +401,6 @@ void LLPanelOutfitsInventory::onSave()
 	}*/
 }
 
-void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action)
-{
-	updateVerbs();
-
-	// TODO: add handling "My Outfits" tab.
-	if (!isCOFPanelActive())
-		return;
-
-	if (getRootFolder()->needsAutoRename() && items.size())
-	{
-		getRootFolder()->startRenamingSelectedItem();
-		getRootFolder()->setNeedsAutoRename(FALSE);
-	}
-}
-
-LLFolderViewEventListener *LLPanelOutfitsInventory::getCorrectListenerForAction()
-{
-	// TODO: add handling "My Outfits" tab.
-	if (!isCOFPanelActive())
-		return NULL;
-
-	LLFolderViewItem* current_item = getRootFolder()->getCurSelectedItem();
-	if (!current_item)
-		return NULL;
-
-	LLFolderViewEventListener* listenerp = current_item->getListener();
-	if (getIsCorrectType(listenerp))
-	{
-		return listenerp;
-	}
-	return NULL;
-}
-
-bool LLPanelOutfitsInventory::getIsCorrectType(const LLFolderViewEventListener *listenerp) const
-{
-	if (listenerp->getInventoryType() == LLInventoryType::IT_CATEGORY)
-	{
-		LLViewerInventoryCategory *cat = gInventory.getCategory(listenerp->getUUID());
-		if (cat && cat->getPreferredType() == LLFolderType::FT_OUTFIT)
-		{
-			return true;
-		}
-	}
-	return false;
-}
-
-LLFolderView *LLPanelOutfitsInventory::getRootFolder()
-{
-	return getActivePanel()->getRootFolder();
-}
-
 //static
 LLPanelOutfitsInventory* LLPanelOutfitsInventory::findInstance()
 {
@@ -551,13 +418,6 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()
 	mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this));
 	mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this));
 
-	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
-	trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this
-				   ,       _4 // BOOL drop
-				   ,       _5 // EDragAndDropType cargo_type
-				   ,       _7 // EAcceptance* accept
-				   ));
-
 	mGearMenu = new LLOutfitListGearMenu(mMyOutfitsPanel, this);
 }
 
@@ -568,6 +428,9 @@ void LLPanelOutfitsInventory::updateListCommands()
 	bool wear_visible = !isCOFPanelActive();
 	bool make_outfit_enabled = isActionEnabled("save_outfit");
 
+	// *TODO: Enable gear menu for Wearing tab.
+	childSetEnabled("options_gear_btn", wear_visible);
+
 	mListCommands->childSetEnabled("trash_btn", trash_enabled);
 	mListCommands->childSetEnabled("wear_btn", wear_enabled);
 	mListCommands->childSetVisible("wear_btn", wear_visible);
@@ -584,263 +447,52 @@ void LLPanelOutfitsInventory::showGearMenu()
 
 void LLPanelOutfitsInventory::onTrashButtonClick()
 {
-	onClipboardAction("delete");
-}
+	mMyOutfitsPanel->removeSelected();
 
-void LLPanelOutfitsInventory::onClipboardAction(const LLSD& userdata)
-{
-	std::string command_name = userdata.asString();
-	if (isCOFPanelActive())
-	{
-		getActivePanel()->getRootFolder()->doToSelected(getActivePanel()->getModel(),command_name);
-	}
-	else // "My Outfits" tab active
-	{
-		if (command_name == "delete")
-		{
-			const LLUUID& selected_outfit_id = mMyOutfitsPanel->getSelectedOutfitUUID();
-			if (selected_outfit_id.notNull())
-			{
-				remove_category(&gInventory, selected_outfit_id);
-			}
-		}
-		else
-		{
-			llwarns << "Unrecognized action" << llendl;
-		}
-	}
-	updateListCommands();
-	updateVerbs();
+ 	updateListCommands();
+ 	updateVerbs();
 }
 
-void LLPanelOutfitsInventory::onCustomAction(const LLSD& userdata)
+bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
 {
-	if (!isActionEnabled(userdata))
-		return;
-
-	const std::string command_name = userdata.asString();
-	if (command_name == "new")
-	{
-		onSave();
-	}
-	if (command_name == "edit")
-	{
-		onEdit();
-	}
-	if (command_name == "wear")
-	{
-		onWearButtonClick();
-	}
-	// Note: This option has been removed from the gear menu.
-	if (command_name == "add")
-	{
-		onAdd();
-	}
-	if (command_name == "remove")
-	{
-		onRemove();
-	}
-	if (command_name == "rename")
-	{
-		onClipboardAction("rename");
-	}
-	if (command_name == "remove_link")
-	{
-		onClipboardAction("delete");
-	}
-	if (command_name == "delete")
-	{
-		onClipboardAction("delete");
-	}
-	updateListCommands();
-	updateVerbs();
-}
-
-BOOL LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
-{
-	const std::string command_name = userdata.asString();
-	if (command_name == "delete" || command_name == "remove")
-	{
-		BOOL can_delete = FALSE;
-
-		if (isCOFPanelActive())
-		{
-			LLFolderView* root = getActivePanel()->getRootFolder();
-			if (root)
-			{
-				std::set<LLUUID> selection_set = root->getSelectionList();
-				can_delete = (selection_set.size() > 0);
-				for (std::set<LLUUID>::iterator iter = selection_set.begin();
-					 iter != selection_set.end();
-					 ++iter)
-				{
-					const LLUUID &item_id = (*iter);
-					LLFolderViewItem *item = root->getItemByID(item_id);
-					can_delete &= item->getListener()->isItemRemovable();
-				}
-			}
-		}
-		else // "My Outfits" tab active
-		{
-			const LLUUID& selected_outfit = mMyOutfitsPanel->getSelectedOutfitUUID();
-			// first condition prevents trash btn from enabling when items are selected inside outfit (EXT-7847)
-			can_delete = !mMyOutfitsPanel->hasItemSelected() && LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit);
-		}
-
-		return can_delete;
-	}
-	if (command_name == "remove_link")
-	{
-		BOOL can_delete = FALSE;
-		LLFolderView* root = getActivePanel()->getRootFolder();
-		if (root)
-		{
-			std::set<LLUUID> selection_set = root->getSelectionList();
-			can_delete = (selection_set.size() > 0);
-			for (std::set<LLUUID>::iterator iter = selection_set.begin();
-				 iter != selection_set.end();
-				 ++iter)
-			{
-				const LLUUID &item_id = (*iter);
-				LLViewerInventoryItem *item = gInventory.getItem(item_id);
-				if (!item || !item->getIsLinkType())
-					return FALSE;
-			}
-			return can_delete;
-		}
-		return FALSE;
-	}
-	if (command_name == "rename" ||
-		command_name == "delete_outfit")
-	{
-		return (getCorrectListenerForAction() != NULL) && hasItemsSelected();
-	}
-	
-	if (command_name == "wear")
-	{
+	return mActivePanel && mActivePanel->isActionEnabled(userdata);
 		if (gAgentWearables.isCOFChangeInProgress()) return FALSE;
 
-		if (isCOFPanelActive())
-		{
-			return FALSE;
-		}
-		return hasItemsSelected();
-	}
-	if (command_name == "save_outfit")
-	{
-		bool outfit_locked = LLAppearanceMgr::getInstance()->isOutfitLocked();
-		bool outfit_dirty =LLAppearanceMgr::getInstance()->isOutfitDirty();
-		// allow save only if outfit isn't locked and is dirty
-		return !outfit_locked && outfit_dirty;
-	}
-   
-	if (command_name == "edit" || 
-		command_name == "add"
-		)
-	{
-		return (getCorrectListenerForAction() != NULL);
-	}
-	return TRUE;
-}
-
-bool LLPanelOutfitsInventory::hasItemsSelected()
-{
-	bool has_items_selected = false;
-
-	if (isCOFPanelActive())
-	{
-		LLFolderView* root = getActivePanel()->getRootFolder();
-		if (root)
-		{
-			std::set<LLUUID> selection_set = root->getSelectionList();
-			has_items_selected = (selection_set.size() > 0);
-		}
-	}
-	else // My Outfits Tab is active
-	{
-		has_items_selected = mMyOutfitsPanel->getSelectedOutfitUUID().notNull();
-	}
-	return has_items_selected;
-}
-
-bool LLPanelOutfitsInventory::handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept)
-{
-	*accept = ACCEPT_NO;
-
-	const bool is_enabled = isActionEnabled("delete");
-	if (is_enabled) *accept = ACCEPT_YES_MULTI;
-
-	if (is_enabled && drop)
-	{
-		onClipboardAction("delete");
-	}
-	return true;
 }
-
-// List Commands                                                              //
-////////////////////////////////////////////////////////////////////////////////
+// List Commands                                                                //
+//////////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////////
-// Tab panels                                                                    //
+// Tab panels                                                                   //
 
 void LLPanelOutfitsInventory::initTabPanels()
 {
-	mCurrentOutfitPanel = getChild<LLInventoryPanel>(COF_TAB_NAME);
-	mCurrentOutfitPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
-	mCurrentOutfitPanel->setSelectCallback(boost::bind(&LLPanelOutfitsInventory::onTabSelectionChange, this, mCurrentOutfitPanel, _1, _2));
+	mCurrentOutfitPanel = getChild<LLPanelWearing>(COF_TAB_NAME);
+	mCurrentOutfitPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
 
 	mMyOutfitsPanel = getChild<LLOutfitsList>(OUTFITS_TAB_NAME);
-	mMyOutfitsPanel->addSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
+	mMyOutfitsPanel->setSelectionChangeCallback(boost::bind(&LLPanelOutfitsInventory::updateVerbs, this));
 
 	mAppearanceTabs = getChild<LLTabContainer>("appearance_tabs");
 	mAppearanceTabs->setCommitCallback(boost::bind(&LLPanelOutfitsInventory::onTabChange, this));
 }
 
-void LLPanelOutfitsInventory::onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action)
-{
-	if (user_action && items.size() > 0)
-	{
-		// TODO: add handling "My Outfits" tab.
-		if (isCOFPanelActive())
-		{
-			onSelectionChange(items, user_action);
-		}
-		else
-		{
-			mCurrentOutfitPanel->getRootFolder()->clearSelection();
-		}
-	}
-}
-
 void LLPanelOutfitsInventory::onTabChange()
 {
-	// TODO: add handling "My Outfits" tab.
-	if (isCOFPanelActive())
-	{
-		mCurrentOutfitPanel->setFilterSubString(mFilterSubString);
-	}
-	else
-	{
-		mMyOutfitsPanel->setFilterSubString(mFilterSubString);
-		mMyOutfitsPanel->onOpen(LLSD());
-	}
+	mActivePanel = dynamic_cast<LLPanelAppearanceTab*>(mAppearanceTabs->getCurrentPanel());
+	if (!mActivePanel) return;
+
+	mActivePanel->setFilterSubString(mFilterSubString);
+	mActivePanel->onOpen(LLSD());
 
 	updateVerbs();
 }
 
-BOOL LLPanelOutfitsInventory::isTabPanel(LLInventoryPanel *panel) const
+bool LLPanelOutfitsInventory::isCOFPanelActive() const
 {
-	// TODO: add handling "My Outfits" tab.
-	if (mCurrentOutfitPanel == panel)
-	{
-		return TRUE;
-	}
-	return FALSE;
-}
+	if (!mActivePanel) return false;
 
-BOOL LLPanelOutfitsInventory::isCOFPanelActive() const
-{
-	return (childGetVisibleTab("appearance_tabs")->getName() == COF_TAB_NAME);
+	return mActivePanel->getName() == COF_TAB_NAME;
 }
 
 void LLPanelOutfitsInventory::setWearablesLoading(bool val)
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index 287fcbf4bb..ff5d8b96bc 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -34,20 +34,15 @@
 #define LL_LLPANELOUTFITSINVENTORY_H
 
 #include "llpanel.h"
-#include "llinventoryobserver.h"
 
-class LLFolderView;
-class LLFolderViewItem;
-class LLFolderViewEventListener;
-class LLInventoryPanel;
 class LLOutfitsList;
-class LLSaveFolderState;
-class LLButton;
+class LLOutfitListGearMenu;
+class LLPanelAppearanceTab;
+class LLPanelWearing;
 class LLMenuGL;
 class LLSidepanelAppearance;
 class LLTabContainer;
 class LLSaveOutfitComboBtn;
-class LLOutfitListGearMenu;
 
 class LLPanelOutfitsInventory : public LLPanel
 {
@@ -60,55 +55,36 @@ public:
 	/*virtual*/ void onOpen(const LLSD& key);
 	
 	void onSearchEdit(const std::string& string);
-	void onAdd();
-	void onRemove();
-	void onEdit();
 	void onSave();
 	
 	bool onSaveCommit(const LLSD& notification, const LLSD& response);
 
-	void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
-
-	// If a compatible listener type is selected, then return a pointer to that.
-	// Otherwise, return NULL.
-	LLFolderViewEventListener* getCorrectListenerForAction();
-
-	LLFolderView* getRootFolder();
 	static LLSidepanelAppearance* getAppearanceSP();
 
 	static LLPanelOutfitsInventory* findInstance();
 
 protected:
 	void updateVerbs();
-	bool getIsCorrectType(const LLFolderViewEventListener *listenerp) const;
 
 private:
-	LLSaveFolderState*		mSavedFolderState;
 	LLTabContainer*			mAppearanceTabs;
 	std::string 			mFilterSubString;
 	std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn;
-public:
-	//////////////////////////////////////////////////////////////////////////////////
-	// tab panels
-	// TODO: change getActivePanel() to return the active tab instead of returning
-	// a pointer to "Wearing" inventory panel.
-	LLInventoryPanel* 		getActivePanel() { return mCurrentOutfitPanel; }
-
-	BOOL 					isTabPanel(LLInventoryPanel *panel) const;
-	BOOL 					isCOFPanelActive() const;
 
+	//////////////////////////////////////////////////////////////////////////////////
+	// tab panels                                                                   //
 protected:
 	void 					initTabPanels();
-	void 					onTabSelectionChange(LLInventoryPanel* tab_panel, const std::deque<LLFolderViewItem*> &items, BOOL user_action);
 	void 					onTabChange();
+	bool 					isCOFPanelActive() const;
 
 private:
+	LLPanelAppearanceTab*	mActivePanel;
 	LLOutfitsList*			mMyOutfitsPanel;
-	LLInventoryPanel*		mCurrentOutfitPanel;
+	LLPanelWearing*			mCurrentOutfitPanel;
 
-	// tab panels                                                               //
-	////////////////////////////////////////////////////////////////////////////////
-	
+	// tab panels                                                                   //
+	//////////////////////////////////////////////////////////////////////////////////
 
 	//////////////////////////////////////////////////////////////////////////////////
 	// List Commands                                                                //
@@ -121,10 +97,7 @@ protected:
 	void onWearButtonClick();
 	void showGearMenu();
 	void onTrashButtonClick();
-	void onClipboardAction(const LLSD& userdata);
-	void onCustomAction(const LLSD& command_name);
-	bool handleDragAndDropToTrash(BOOL drop, EDragAndDropType cargo_type, EAcceptance* accept);
-	bool hasItemsSelected();
+	bool isActionEnabled(const LLSD& userdata);
 	void setWearablesLoading(bool val);
 	void onWearablesLoaded();
 	void onWearablesLoading();
@@ -132,9 +105,8 @@ private:
 	LLPanel*					mListCommands;
 	LLOutfitListGearMenu*		mGearMenu;
 	LLMenuGL*					mMenuAdd;
-	// List Commands                                                              //
-	////////////////////////////////////////////////////////////////////////////////
-	///
+	// List Commands                                                                //
+	//////////////////////////////////////////////////////////////////////////////////
 
 	bool mInitialized;
 };
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
new file mode 100644
index 0000000000..27f13a8093
--- /dev/null
+++ b/indra/newview/llpanelwearing.cpp
@@ -0,0 +1,130 @@
+/**
+ * @file llpanelwearing.cpp
+ * @brief List of agent's worn items.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelwearing.h"
+
+#include "llappearancemgr.h"
+#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
+#include "llwearableitemslist.h"
+
+
+std::string LLPanelAppearanceTab::sFilterSubString = LLStringUtil::null;
+
+static LLRegisterPanelClassWrapper<LLPanelWearing> t_panel_wearing("panel_wearing");
+
+LLPanelWearing::LLPanelWearing()
+	:	LLPanelAppearanceTab()
+	,	mCOFItemsList(NULL)
+	,	mIsInitialized(false)
+{
+	mCategoriesObserver = new LLInventoryCategoriesObserver();
+}
+
+LLPanelWearing::~LLPanelWearing()
+{
+	if (gInventory.containsObserver(mCategoriesObserver))
+	{
+		gInventory.removeObserver(mCategoriesObserver);
+		delete mCategoriesObserver;
+	}
+}
+
+BOOL LLPanelWearing::postBuild()
+{
+	mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list");
+	return TRUE;
+}
+
+//virtual
+void LLPanelWearing::onOpen(const LLSD& /*info*/)
+{
+	if (!mIsInitialized)
+	{
+		// *TODO: I'm not sure is this check necessary but it never match while developing.
+		if (!gInventory.isInventoryUsable())
+			return;
+
+		const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT);
+
+		// *TODO: I'm not sure is this check necessary but it never match while developing.
+		LLViewerInventoryCategory* category = gInventory.getCategory(cof);
+		if (!category)
+			return;
+
+		gInventory.addObserver(mCategoriesObserver);
+
+		// Start observing changes in Current Outfit category.
+		mCategoriesObserver->addCategory(cof, boost::bind(&LLWearableItemsList::updateList, mCOFItemsList, cof));
+
+		// Fetch Current Outfit contents and refresh the list to display
+		// initially fetched items. If not all items are fetched now
+		// the observer will refresh the list as soon as the new items
+		// arrive.
+		category->fetch();
+
+		mCOFItemsList->updateList(cof);
+
+		mIsInitialized = true;
+	}
+}
+
+// virtual
+void LLPanelWearing::setFilterSubString(const std::string& string)
+{
+	sFilterSubString = string;
+	mCOFItemsList->setFilterSubString(sFilterSubString);
+}
+
+bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
+{
+	const std::string command_name = userdata.asString();
+
+	if (command_name == "save_outfit")
+	{
+		bool outfit_locked = LLAppearanceMgr::getInstance()->isOutfitLocked();
+		bool outfit_dirty = LLAppearanceMgr::getInstance()->isOutfitDirty();
+		// allow save only if outfit isn't locked and is dirty
+		return !outfit_locked && outfit_dirty;
+	}
+	return false;
+}
+
+boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb)
+{
+	if (!mCOFItemsList) return boost::signals2::connection();
+
+	return mCOFItemsList->setCommitCallback(cb);
+}
+
+// EOF
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
new file mode 100644
index 0000000000..15d0a3dd6d
--- /dev/null
+++ b/indra/newview/llpanelwearing.h
@@ -0,0 +1,73 @@
+/**
+ * @file llpanelwearing.h
+ * @brief List of agent's worn items.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewergpl$
+ *
+ * Copyright (c) 2010, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab.  Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELWEARING_H
+#define LL_LLPANELWEARING_H
+
+#include "llpanel.h"
+
+// newview
+#include "llpanelappearancetab.h"
+
+class LLInventoryCategoriesObserver;
+class LLWearableItemsList;
+
+/**
+ * @class LLPanelWearing
+ *
+ * A list of agents's currently worn items represented by
+ * a flat list view.
+ * Starts fetching necessary inventory content on first opening.
+ */
+class LLPanelWearing : public LLPanelAppearanceTab
+{
+public:
+	LLPanelWearing();
+	virtual ~LLPanelWearing();
+
+	/*virtual*/ BOOL postBuild();
+
+	/*virtual*/ void onOpen(const LLSD& info);
+
+	/*virtual*/ void setFilterSubString(const std::string& string);
+
+	/*virtual*/ bool isActionEnabled(const LLSD& userdata);
+
+	boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb);
+
+private:
+	LLInventoryCategoriesObserver* 	mCategoriesObserver;
+	LLWearableItemsList* 			mCOFItemsList;
+
+	bool							mIsInitialized;
+};
+
+#endif //LL_LLPANELWEARING_H
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 6aa6ebaa54..da15b93697 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -95,19 +95,22 @@ LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item)
 //////////////////////////////////////////////////////////////////////////
 
 // static
-LLPanelWearableOutfitItem* LLPanelWearableOutfitItem::create(LLViewerInventoryItem* item)
+LLPanelWearableOutfitItem* LLPanelWearableOutfitItem::create(LLViewerInventoryItem* item,
+															 bool worn_indication_enabled)
 {
 	LLPanelWearableOutfitItem* list_item = NULL;
 	if (item)
 	{
-		list_item = new LLPanelWearableOutfitItem(item);
+		list_item = new LLPanelWearableOutfitItem(item, worn_indication_enabled);
 		list_item->init();
 	}
 	return list_item;
 }
 
-LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item)
+LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
+													 bool worn_indication_enabled)
 : LLPanelInventoryListItemBase(item)
+, mWornIndicationEnabled(worn_indication_enabled)
 {
 }
 
@@ -117,7 +120,7 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name,
 {
 	std::string search_label = name;
 
-	if (get_is_item_worn(mInventoryItemUUID))
+	if (mWornIndicationEnabled && get_is_item_worn(mInventoryItemUUID))
 	{
 		search_label += LLTrans::getString("worn");
 		item_state = IS_WORN;
@@ -444,6 +447,7 @@ static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_i
 
 LLWearableItemsList::Params::Params()
 :	standalone("standalone", true)
+,	worn_indication_enabled("worn_indication_enabled", true)
 {}
 
 LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
@@ -456,6 +460,7 @@ LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
 		// Use built-in context menu.
 		setRightMouseDownCallback(boost::bind(&LLWearableItemsList::onRightClick, this, _2, _3));
 	}
+	mWornIndicationEnabled = p.worn_indication_enabled;
 }
 
 // virtual
@@ -471,7 +476,7 @@ void LLWearableItemsList::addNewItem(LLViewerInventoryItem* item, bool rearrange
 		llassert(item != NULL);
 	}
 
-	LLPanelWearableOutfitItem *list_item = LLPanelWearableOutfitItem::create(item);
+	LLPanelWearableOutfitItem *list_item = LLPanelWearableOutfitItem::create(item, mWornIndicationEnabled);
 	if (!list_item)
 		return;
 
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index 2bfb90e3ec..eb82418454 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -82,7 +82,8 @@ class LLPanelWearableOutfitItem : public LLPanelInventoryListItemBase
 {
 	LOG_CLASS(LLPanelWearableOutfitItem);
 public:
-	static LLPanelWearableOutfitItem* create(LLViewerInventoryItem* item);
+	static LLPanelWearableOutfitItem* create(LLViewerInventoryItem* item,
+											 bool worn_indication_enabled);
 
 	/**
 	 * Updates item name and (worn) suffix.
@@ -91,7 +92,11 @@ public:
 								EItemState item_state = IS_DEFAULT);
 
 protected:
-	LLPanelWearableOutfitItem(LLViewerInventoryItem* item);
+	LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
+							  bool worn_indication_enabled);
+
+private:
+	bool	mWornIndicationEnabled;
 };
 
 class LLPanelDeletableWearableListItem : public LLPanelWearableListItem
@@ -352,6 +357,7 @@ public:
 	struct Params : public LLInitParam::Block<Params, LLInventoryItemsList::Params>
 	{
 		Optional<bool> standalone;
+		Optional<bool> worn_indication_enabled;
 
 		Params();
 	};
@@ -377,6 +383,7 @@ protected:
 	void onRightClick(S32 x, S32 y);
 
 	bool mIsStandalone;
+	bool mWornIndicationEnabled;
 };
 
 #endif //LL_LLWEARABLEITEMSLIST_H
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index a59070496e..9cd14c00fc 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -34,22 +34,31 @@
            follows="all"
            label="MY OUTFITS"
            layout="topleft"
-           width="315" />
-         <inventory_panel
-           follows="all"
+           width="312" />
+         <panel
            background_visible="true"
-           background_opaque="true"
-           label="WEARING"
+           class="panel_wearing"
+           follows="all"
+           height="490"          
            help_topic="now_wearing_tab"
-          allow_multi_select="true"
-           border="false"
-           left="0"
-           top="0"
-           mouse_opaque="true"
+           label="WEARING"
+           layout="topleft"
            name="cof_tab"
-           start_folder="Current Outfit"
-           use_label_suffix="true" 
-           width="315" />
+           width="312">
+            <wearable_items_list
+             allow_select="true"
+             follows="all"
+             height="490"
+             keep_one_selected="true"
+             left="1"
+             multi_select="true"
+             name="cof_items_list"
+             top="0"
+             translate="false"
+             width="310"
+             worn_indication_enabled="false"
+            />
+         </panel>
    </tab_container>
 	 <panel
        background_visible="true"
@@ -84,7 +93,7 @@
       width="241"
         />
 
-        <dnd_button
+        <button
          follows="bottom|right"
          height="25"
          image_hover_unselected="Toolbar_Right_Over"
-- 
cgit v1.2.3


From 2583a4d6ea60aeefa1d21f578d6fbf1f2f68c72a Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Tue, 22 Jun 2010 16:34:27 +0300
Subject: EXT-4295 FIXED Added gear and context menus for Wearing tab. - Moved
 My Outfits gear menu from llpaneloutfitsinventory.cpp to lloutfitslist.cpp

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

--HG--
branch : product-engine
---
 indra/newview/lloutfitslist.cpp                    | 165 +++++++++++++++++-
 indra/newview/lloutfitslist.h                      |   4 +
 indra/newview/llpanelappearancetab.h               |   2 +
 indra/newview/llpaneloutfitsinventory.cpp          | 186 +--------------------
 indra/newview/llpaneloutfitsinventory.h            |   4 -
 indra/newview/llpanelwearing.cpp                   |  84 ++++++++++
 indra/newview/llpanelwearing.h                     |   8 +
 .../skins/default/xui/en/menu_wearing_gear.xml     |  12 ++
 .../skins/default/xui/en/menu_wearing_tab.xml      |  12 ++
 .../default/xui/en/panel_outfits_inventory.xml     |   1 +
 10 files changed, 284 insertions(+), 194 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/menu_wearing_gear.xml
 create mode 100644 indra/newview/skins/default/xui/en/menu_wearing_tab.xml

diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index a285926a8b..b8489d450b 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -70,7 +70,148 @@ bool LLOutfitTabNameComparator::compare(const LLAccordionCtrlTab* tab1, const LL
 
 //////////////////////////////////////////////////////////////////////////
 
-class OutfitContextMenu : public LLListContextMenu
+class LLOutfitListGearMenu
+{
+public:
+	LLOutfitListGearMenu(LLOutfitsList* olist)
+	:	mOutfitList(olist),
+		mMenu(NULL)
+	{
+		llassert_always(mOutfitList);
+
+		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+		LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
+
+		registrar.add("Gear.Wear", boost::bind(&LLOutfitListGearMenu::onWear, this));
+		registrar.add("Gear.TakeOff", boost::bind(&LLOutfitListGearMenu::onTakeOff, this));
+		registrar.add("Gear.Rename", boost::bind(&LLOutfitListGearMenu::onRename, this));
+		registrar.add("Gear.Delete", boost::bind(&LLOutfitListGearMenu::onDelete, this));
+		registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2));
+
+		enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitsList::isActionEnabled, mOutfitList, _2));
+		enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2));
+
+		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
+			"menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+		llassert(mMenu);
+	}
+
+	void show(LLView* spawning_view)
+	{
+		if (!mMenu) return;
+
+		updateItemsVisibility();
+		mMenu->buildDrawLabels();
+		mMenu->updateParent(LLMenuGL::sMenuContainer);
+		S32 menu_x = 0;
+		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
+		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
+	}
+
+	void updateItemsVisibility()
+	{
+		if (!mMenu) return;
+
+		bool have_selection = getSelectedOutfitID().notNull();
+		mMenu->setItemVisible("sepatator1", have_selection);
+		mMenu->setItemVisible("sepatator2", have_selection);
+		mMenu->arrangeAndClear(); // update menu height
+	}
+
+private:
+	const LLUUID& getSelectedOutfitID()
+	{
+		return mOutfitList->getSelectedOutfitUUID();
+	}
+
+	LLViewerInventoryCategory* getSelectedOutfit()
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.isNull())
+		{
+			return NULL;
+		}
+
+		LLViewerInventoryCategory* cat = gInventory.getCategory(selected_outfit_id);
+		return cat;
+	}
+
+	void onWear()
+	{
+		LLViewerInventoryCategory* selected_outfit = getSelectedOutfit();
+		if (selected_outfit)
+		{
+			LLAppearanceMgr::instance().wearInventoryCategory(
+				selected_outfit, /*copy=*/ FALSE, /*append=*/ FALSE);
+		}
+	}
+
+	void onTakeOff()
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.notNull())
+		{
+			LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id);
+		}
+	}
+
+	void onRename()
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.notNull())
+		{
+			LLAppearanceMgr::instance().renameOutfit(selected_outfit_id);
+		}
+	}
+
+	void onDelete()
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.notNull())
+		{
+			remove_category(&gInventory, selected_outfit_id);
+		}
+	}
+
+	void onCreate(const LLSD& data)
+	{
+		LLWearableType::EType type = LLWearableType::typeNameToType(data.asString());
+		if (type == LLWearableType::WT_NONE)
+		{
+			llwarns << "Invalid wearable type" << llendl;
+			return;
+		}
+
+		LLAgentWearables::createWearable(type, true);
+	}
+
+	bool onVisible(LLSD::String param)
+	{
+		const LLUUID& selected_outfit_id = getSelectedOutfitID();
+		if (selected_outfit_id.isNull()) // no selection or invalid outfit selected
+		{
+			return false;
+		}
+
+		// *TODO This condition leads to menu item behavior inconsistent with
+		// "Wear" button behavior and should be modified or removed.
+		bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == selected_outfit_id;
+
+		if ("wear" == param)
+		{
+			return !is_worn;
+		}
+
+		return true;
+	}
+
+	LLOutfitsList*	mOutfitList;
+	LLMenuGL*		mMenu;
+};
+
+//////////////////////////////////////////////////////////////////////////
+
+class LLOutfitContextMenu : public LLListContextMenu
 {
 protected:
 	/* virtual */ LLContextMenu* createMenu()
@@ -89,8 +230,8 @@ protected:
 		registrar.add("Outfit.Rename", boost::bind(renameOutfit, selected_id));
 		registrar.add("Outfit.Delete", boost::bind(deleteOutfit, selected_id));
 
-		enable_registrar.add("Outfit.OnEnable", boost::bind(&OutfitContextMenu::onEnable, this, _2));
-		enable_registrar.add("Outfit.OnVisible", boost::bind(&OutfitContextMenu::onVisible, this, _2));
+		enable_registrar.add("Outfit.OnEnable", boost::bind(&LLOutfitContextMenu::onEnable, this, _2));
+		enable_registrar.add("Outfit.OnVisible", boost::bind(&LLOutfitContextMenu::onVisible, this, _2));
 
 		return createFromFile("menu_outfit_tab.xml");
 	}
@@ -170,11 +311,13 @@ LLOutfitsList::LLOutfitsList()
 {
 	mCategoriesObserver = new LLInventoryCategoriesObserver();
 
-	mOutfitMenu = new OutfitContextMenu();
+	mGearMenu = new LLOutfitListGearMenu(this);
+	mOutfitMenu = new LLOutfitContextMenu();
 }
 
 LLOutfitsList::~LLOutfitsList()
 {
+	delete mGearMenu;
 	delete mOutfitMenu;
 
 	if (gInventory.containsObserver(mCategoriesObserver))
@@ -453,8 +596,11 @@ void LLOutfitsList::setFilterSubString(const std::string& string)
 	sFilterSubString = string;
 }
 
+// virtual
 bool LLOutfitsList::isActionEnabled(const LLSD& userdata)
 {
+	if (mSelectedOutfitUUID.isNull()) return false;
+
 	const std::string command_name = userdata.asString();
 	if (command_name == "delete")
 	{
@@ -473,7 +619,7 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)
 	}
 	if (command_name == "wear")
 	{
-		return mSelectedOutfitUUID.notNull();
+		return !gAgentWearables.isCOFChangeInProgress();
 	}
 	if (command_name == "take_off")
 	{
@@ -482,6 +628,13 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)
 	return false;
 }
 
+// virtual
+void LLOutfitsList::showGearMenu(LLView* spawning_view)
+{
+	if (!mGearMenu) return;
+	mGearMenu->show(spawning_view);
+}
+
 boost::signals2::connection LLOutfitsList::setSelectionChangeCallback(selection_change_callback_t cb)
 {
 	return mSelectionChangeSignal.connect(cb);
@@ -761,7 +914,7 @@ void LLOutfitsList::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)
 
 	uuid_vec_t selected_uuids;
 
-	// Collect seleted items from all selected lists.
+	// Collect selected items from all selected lists.
 	for (wearables_lists_map_t::iterator iter = mSelectedListsMap.begin();
 			iter != mSelectedListsMap.end();
 			++iter)
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index 14a1aab415..d207624792 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -41,6 +41,7 @@
 
 class LLAccordionCtrlTab;
 class LLInventoryCategoriesObserver;
+class LLOutfitListGearMenu;
 class LLWearableItemsList;
 class LLListContextMenu;
 
@@ -98,6 +99,8 @@ public:
 
 	/*virtual*/ bool isActionEnabled(const LLSD& userdata);
 
+	/*virtual*/ void showGearMenu(LLView* spawning_view);
+
 	const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; }
 
 	boost::signals2::connection setSelectionChangeCallback(selection_change_callback_t cb);
@@ -196,6 +199,7 @@ private:
 	typedef outfits_map_t::value_type					outfits_map_value_t;
 	outfits_map_t					mOutfitsMap;
 
+	LLOutfitListGearMenu*			mGearMenu;
 	LLListContextMenu*				mOutfitMenu;
 
 	bool							mIsInitialized;
diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h
index af984c521c..f1901a63a4 100644
--- a/indra/newview/llpanelappearancetab.h
+++ b/indra/newview/llpanelappearancetab.h
@@ -44,6 +44,8 @@ public:
 
 	virtual bool isActionEnabled(const LLSD& userdata) = 0;
 
+	virtual void showGearMenu(LLView* spawning_view) = 0;
+
 	static const std::string& getFilterSubString() { return sFilterSubString; }
 
 protected:
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
index 57c82b7ac4..2f1cad8a75 100644
--- a/indra/newview/llpaneloutfitsinventory.cpp
+++ b/indra/newview/llpaneloutfitsinventory.cpp
@@ -33,7 +33,6 @@
 
 #include "llpaneloutfitsinventory.h"
 
-#include "llmenugl.h"
 #include "llnotificationsutil.h"
 #include "lltabcontainer.h"
 
@@ -48,189 +47,16 @@
 #include "llsidepanelappearance.h"
 #include "llsidetray.h"
 #include "llviewerfoldertype.h"
-#include "llviewermenu.h"
 
 static const std::string OUTFITS_TAB_NAME = "outfitslist_tab";
 static const std::string COF_TAB_NAME = "cof_tab";
 
 static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory");
 
-class LLPanelOutfitsInventory;
-class LLOutfitListGearMenu
-{
-public:
-	LLOutfitListGearMenu(LLOutfitsList* olist, LLPanelOutfitsInventory* parent_panel)
-	:	mOutfitList(olist),
-		mMyOutfitsPanel(parent_panel),
-		mMenu(NULL)
-	{
-		llassert_always(mOutfitList);
-
-		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
-		LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
-
-		registrar.add("Gear.Wear", boost::bind(&LLOutfitListGearMenu::onWear, this));
-		registrar.add("Gear.TakeOff", boost::bind(&LLOutfitListGearMenu::onTakeOff, this));
-		registrar.add("Gear.Rename", boost::bind(&LLOutfitListGearMenu::onRename, this));
-		registrar.add("Gear.Delete", boost::bind(&LLOutfitListGearMenu::onDelete, this));
-		registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2));
-
-		enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitListGearMenu::onEnable, this, _2));
-		enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2));
-
-		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
-			"menu_outfit_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-		llassert(mMenu);
-	}
-
-	LLMenuGL* getMenu() { return mMenu; }
-
-	void show(LLView* spawning_view)
-	{
-		if (!mMenu) return;
-
-		updateItemsVisibility();
-		mMenu->buildDrawLabels();
-		mMenu->updateParent(LLMenuGL::sMenuContainer);
-		S32 menu_x = 0;
-		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
-		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
-	}
-
-	void updateItemsVisibility()
-	{
-		if (!mMenu) return;
-
-		bool have_selection = getSelectedOutfitID().notNull();
-		mMenu->setItemVisible("sepatator1", have_selection);
-		mMenu->setItemVisible("sepatator2", have_selection);
-		mMenu->arrangeAndClear(); // update menu height
-	}
-
-private:
-	const LLUUID& getSelectedOutfitID()
-	{
-		return mOutfitList->getSelectedOutfitUUID();
-	}
-
-	LLViewerInventoryCategory* getSelectedOutfit()
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.isNull())
-		{
-			return NULL;
-		}
-
-		LLViewerInventoryCategory* cat = gInventory.getCategory(selected_outfit_id);
-		return cat;
-	}
-
-	void onWear()
-	{
-		LLViewerInventoryCategory* selected_outfit = getSelectedOutfit();
-		if (selected_outfit)
-		{
-			LLAppearanceMgr::instance().wearInventoryCategory(
-				selected_outfit, /*copy=*/ FALSE, /*append=*/ FALSE);
-		}
-	}
-
-	void onTakeOff()
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.notNull())
-		{
-			LLAppearanceMgr::instance().takeOffOutfit(selected_outfit_id);
-		}
-	}
-
-	void onRename()
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.notNull())
-		{
-			LLAppearanceMgr::instance().renameOutfit(selected_outfit_id);
-		}
-	}
-
-	void onDelete()
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.notNull())
-		{
-			remove_category(&gInventory, selected_outfit_id);
-		}
-	}
-
-	void onCreate(const LLSD& data)
-	{
-		LLWearableType::EType type = LLWearableType::typeNameToType(data.asString());
-		if (type == LLWearableType::WT_NONE)
-		{
-			llwarns << "Invalid wearable type" << llendl;
-			return;
-		}
-
-		LLAgentWearables::createWearable(type, true);
-	}
-
-	bool onEnable(LLSD::String param)
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.isNull()) // no selection or invalid outfit selected
-		{
-			return false;
-		}
-
-		if ("rename" == param)
-		{
-			return get_is_category_renameable(&gInventory, selected_outfit_id);
-		}
-		else if ("delete" == param)
-		{
-			return LLAppearanceMgr::instance().getCanRemoveOutfit(selected_outfit_id);
-		}
-		else if ("take_off" == param)
-		{
-			return LLAppearanceMgr::getCanRemoveFromCOF(selected_outfit_id);
-		}
-		else if ("wear" == param)
-		{
-			return mMyOutfitsPanel->isActionEnabled(param);
-		}
-
-
-		return true;
-	}
-
-	bool onVisible(LLSD::String param)
-	{
-		const LLUUID& selected_outfit_id = getSelectedOutfitID();
-		if (selected_outfit_id.isNull()) // no selection or invalid outfit selected
-		{
-			return false;
-		}
-
-		bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == selected_outfit_id;
-
-		if ("wear" == param)
-		{
-			return !is_worn;
-		}
-
-		return true;
-	}
-
-	LLOutfitsList*	mOutfitList;
-	LLMenuGL*		mMenu;
-	LLPanelOutfitsInventory* mMyOutfitsPanel;
-};
-
 LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
 	mMyOutfitsPanel(NULL),
 	mCurrentOutfitPanel(NULL),
 	mActivePanel(NULL),
-	mGearMenu(NULL),
 	mInitialized(false)
 {
 	gAgentWearables.addLoadedCallback(boost::bind(&LLPanelOutfitsInventory::onWearablesLoaded, this));
@@ -244,7 +70,6 @@ LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
 
 LLPanelOutfitsInventory::~LLPanelOutfitsInventory()
 {
-	delete mGearMenu;
 }
 
 // virtual
@@ -417,8 +242,6 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()
 	mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::showGearMenu, this));
 	mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this));
 	mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this));
-
-	mGearMenu = new LLOutfitListGearMenu(mMyOutfitsPanel, this);
 }
 
 void LLPanelOutfitsInventory::updateListCommands()
@@ -428,9 +251,6 @@ void LLPanelOutfitsInventory::updateListCommands()
 	bool wear_visible = !isCOFPanelActive();
 	bool make_outfit_enabled = isActionEnabled("save_outfit");
 
-	// *TODO: Enable gear menu for Wearing tab.
-	childSetEnabled("options_gear_btn", wear_visible);
-
 	mListCommands->childSetEnabled("trash_btn", trash_enabled);
 	mListCommands->childSetEnabled("wear_btn", wear_enabled);
 	mListCommands->childSetVisible("wear_btn", wear_visible);
@@ -439,10 +259,10 @@ void LLPanelOutfitsInventory::updateListCommands()
 
 void LLPanelOutfitsInventory::showGearMenu()
 {
-	if (!mGearMenu) return;
+	if (!mActivePanel) return;
 
 	LLView* spawning_view = getChild<LLView>("options_gear_btn");
-	mGearMenu->show(spawning_view);
+	mActivePanel->showGearMenu(spawning_view);
 }
 
 void LLPanelOutfitsInventory::onTrashButtonClick()
@@ -456,8 +276,6 @@ void LLPanelOutfitsInventory::onTrashButtonClick()
 bool LLPanelOutfitsInventory::isActionEnabled(const LLSD& userdata)
 {
 	return mActivePanel && mActivePanel->isActionEnabled(userdata);
-		if (gAgentWearables.isCOFChangeInProgress()) return FALSE;
-
 }
 // List Commands                                                                //
 //////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
index ff5d8b96bc..a50e047140 100644
--- a/indra/newview/llpaneloutfitsinventory.h
+++ b/indra/newview/llpaneloutfitsinventory.h
@@ -88,9 +88,6 @@ private:
 
 	//////////////////////////////////////////////////////////////////////////////////
 	// List Commands                                                                //
-public:
-	BOOL isActionEnabled(const LLSD& command_name);
-
 protected:
 	void initListCommandsHandlers();
 	void updateListCommands();
@@ -103,7 +100,6 @@ protected:
 	void onWearablesLoading();
 private:
 	LLPanel*					mListCommands;
-	LLOutfitListGearMenu*		mGearMenu;
 	LLMenuGL*					mMenuAdd;
 	// List Commands                                                                //
 	//////////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 27f13a8093..b8852890ad 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -36,8 +36,64 @@
 #include "llappearancemgr.h"
 #include "llinventorymodel.h"
 #include "llinventoryobserver.h"
+#include "llsidetray.h"
+#include "llviewermenu.h"
 #include "llwearableitemslist.h"
 
+// Context menu and Gear menu helper.
+static void edit_outfit()
+{
+	LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit"));
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+class LLWearingGearMenu
+{
+public:
+	LLWearingGearMenu()
+	:	mMenu(NULL)
+	{
+		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+
+		registrar.add("Gear.Edit", boost::bind(&edit_outfit));
+
+		mMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>(
+			"menu_wearing_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+		llassert(mMenu);
+	}
+
+	void show(LLView* spawning_view)
+	{
+		if (!mMenu) return;
+
+		mMenu->buildDrawLabels();
+		mMenu->updateParent(LLMenuGL::sMenuContainer);
+		S32 menu_x = 0;
+		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight();
+		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y);
+	}
+
+private:
+	LLMenuGL*		mMenu;
+};
+
+//////////////////////////////////////////////////////////////////////////
+
+class LLWearingContextMenu : public LLListContextMenu
+{
+protected:
+	/* virtual */ LLContextMenu* createMenu()
+	{
+		LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+
+		registrar.add("Wearing.Edit", boost::bind(&edit_outfit));
+
+		return createFromFile("menu_wearing_tab.xml");
+	}
+};
+
+//////////////////////////////////////////////////////////////////////////
 
 std::string LLPanelAppearanceTab::sFilterSubString = LLStringUtil::null;
 
@@ -49,10 +105,16 @@ LLPanelWearing::LLPanelWearing()
 	,	mIsInitialized(false)
 {
 	mCategoriesObserver = new LLInventoryCategoriesObserver();
+
+	mGearMenu = new LLWearingGearMenu();
+	mContextMenu = new LLWearingContextMenu();
 }
 
 LLPanelWearing::~LLPanelWearing()
 {
+	delete mGearMenu;
+	delete mContextMenu;
+
 	if (gInventory.containsObserver(mCategoriesObserver))
 	{
 		gInventory.removeObserver(mCategoriesObserver);
@@ -63,6 +125,8 @@ LLPanelWearing::~LLPanelWearing()
 BOOL LLPanelWearing::postBuild()
 {
 	mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list");
+	mCOFItemsList->setRightMouseDownCallback(boost::bind(&LLPanelWearing::onWearableItemsListRightClick, this, _1, _2, _3));
+
 	return TRUE;
 }
 
@@ -106,6 +170,7 @@ void LLPanelWearing::setFilterSubString(const std::string& string)
 	mCOFItemsList->setFilterSubString(sFilterSubString);
 }
 
+// virtual
 bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
 {
 	const std::string command_name = userdata.asString();
@@ -120,6 +185,13 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
 	return false;
 }
 
+// virtual
+void LLPanelWearing::showGearMenu(LLView* spawning_view)
+{
+	if (!mGearMenu) return;
+	mGearMenu->show(spawning_view);
+}
+
 boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb)
 {
 	if (!mCOFItemsList) return boost::signals2::connection();
@@ -127,4 +199,16 @@ boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_ca
 	return mCOFItemsList->setCommitCallback(cb);
 }
 
+void LLPanelWearing::onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y)
+{
+	LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(ctrl);
+	if (!list) return;
+
+	uuid_vec_t selected_uuids;
+
+	list->getSelectedUUIDs(selected_uuids);
+
+	mContextMenu->show(ctrl, selected_uuids, x, y);
+}
+
 // EOF
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
index 15d0a3dd6d..1573990d13 100644
--- a/indra/newview/llpanelwearing.h
+++ b/indra/newview/llpanelwearing.h
@@ -38,7 +38,9 @@
 #include "llpanelappearancetab.h"
 
 class LLInventoryCategoriesObserver;
+class LLListContextMenu;
 class LLWearableItemsList;
+class LLWearingGearMenu;
 
 /**
  * @class LLPanelWearing
@@ -61,11 +63,17 @@ public:
 
 	/*virtual*/ bool isActionEnabled(const LLSD& userdata);
 
+	/*virtual*/ void showGearMenu(LLView* spawning_view);
+
 	boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb);
 
 private:
+	void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y);
+
 	LLInventoryCategoriesObserver* 	mCategoriesObserver;
 	LLWearableItemsList* 			mCOFItemsList;
+	LLWearingGearMenu*				mGearMenu;
+	LLListContextMenu*				mContextMenu;
 
 	bool							mIsInitialized;
 };
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
new file mode 100644
index 0000000000..84431a2f69
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu
+ layout="topleft"
+ name="Gear Wearing">
+    <menu_item_call
+     label="Edit Outfit"
+     layout="topleft"
+     name="edit">
+        <on_click
+         function="Gear.Edit" />
+    </menu_item_call>
+</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
new file mode 100644
index 0000000000..85505f9972
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Wearing">
+    <menu_item_call
+     label="Edit Outfit"
+     layout="topleft"
+     name="edit">
+        <on_click
+         function="Wearing.Edit" />
+    </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index 9cd14c00fc..b365540d1f 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -53,6 +53,7 @@
              left="1"
              multi_select="true"
              name="cof_items_list"
+             standalone="false"
              top="0"
              translate="false"
              width="310"
-- 
cgit v1.2.3


From 2af4dae64eef9940a564def2628de45516316219 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Wed, 23 Jun 2010 11:59:13 -0700
Subject: CT-575 WIP DA translation for set 12

---
 .../skins/default/xui/da/floater_camera.xml        | 25 ++----
 .../skins/default/xui/da/floater_incoming_call.xml |  8 +-
 .../skins/default/xui/da/floater_snapshot.xml      | 23 ++++--
 .../default/xui/da/floater_voice_controls.xml      |  8 +-
 .../skins/default/xui/da/inspect_object.xml        | 11 ++-
 .../skins/default/xui/da/menu_hide_navbar.xml      |  1 +
 .../skins/default/xui/da/menu_inventory.xml        |  1 +
 .../skins/default/xui/da/menu_save_outfit.xml      |  2 +-
 indra/newview/skins/default/xui/da/menu_viewer.xml | 17 ++--
 .../newview/skins/default/xui/da/notifications.xml | 96 ++++++++++++++++++++--
 .../skins/default/xui/da/panel_edit_shape.xml      | 13 ++-
 .../skins/default/xui/da/panel_edit_wearable.xml   |  7 +-
 .../skins/default/xui/da/panel_outfit_edit.xml     | 18 ++--
 .../default/xui/da/panel_outfits_inventory.xml     |  3 +-
 .../newview/skins/default/xui/da/panel_places.xml  |  4 +-
 .../default/xui/da/panel_preferences_advanced.xml  |  2 +-
 .../skins/default/xui/da/panel_status_bar.xml      |  6 +-
 .../skins/default/xui/da/sidepanel_inventory.xml   | 10 +--
 indra/newview/skins/default/xui/da/strings.xml     | 52 ++++++++++--
 19 files changed, 225 insertions(+), 82 deletions(-)

diff --git a/indra/newview/skins/default/xui/da/floater_camera.xml b/indra/newview/skins/default/xui/da/floater_camera.xml
index 37e3307960..a1b98ec4ce 100644
--- a/indra/newview/skins/default/xui/da/floater_camera.xml
+++ b/indra/newview/skins/default/xui/da/floater_camera.xml
@@ -9,35 +9,28 @@
 	<floater.string name="move_tooltip">
 		Flyt kamera op og ned, til venstre og højre
 	</floater.string>
-	<floater.string name="orbit_mode_title">
-		Kredsløb
+	<floater.string name="camera_modes_title">
+		Kamera valg
 	</floater.string>
 	<floater.string name="pan_mode_title">
-		Panorér
+		Kredsløb zoom panorering
 	</floater.string>
-	<floater.string name="avatar_view_mode_title">
+	<floater.string name="presets_mode_title">
 		Forvalg
 	</floater.string>
 	<floater.string name="free_mode_title">
 		Se objekt
 	</floater.string>
 	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="Flyt kamera op og ned, til venstre og højre"/>
 		<panel name="zoom" tool_tip="Zoom kamera mod fokus">
+			<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera kredser rundt om fokus"/>
 			<slider_bar name="zoom_slider" tool_tip="Zoom kamera mod fokus"/>
-		</panel>
-		<joystick_rotate name="cam_rotate_stick" tool_tip="Kreds kamera omkring fokus"/>
-		<panel name="camera_presets">
-			<button name="rear_view" tool_tip="Se bagfra"/>
-			<button name="group_view" tool_tip="Se som gruppe"/>
-			<button name="front_view" tool_tip="Se forfra"/>
-			<button name="mouselook_view" tool_tip="Førsteperson"/>
+			<joystick_track name="cam_track_stick" tool_tip="Flyt kamera op og ned, venstre og højre"/>
 		</panel>
 	</panel>
 	<panel name="buttons">
-		<button label="" name="orbit_btn" tool_tip="Rotér kamera"/>
-		<button label="" name="pan_btn" tool_tip="Panorér kamera"/>
-		<button label="" name="avatarview_btn" tool_tip="Forvalg"/>
-		<button label="" name="freecamera_btn" tool_tip="Se objekt"/>
+		<button label="" name="presets_btn" tool_tip="Forvalg"/>
+		<button label="" name="pan_btn" tool_tip="Kredsløb zoom panorering"/>
+		<button label="" name="avatarview_btn" tool_tip="Kamera valg"/>
 	</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/da/floater_incoming_call.xml b/indra/newview/skins/default/xui/da/floater_incoming_call.xml
index 2349174db2..7a3c3e466a 100644
--- a/indra/newview/skins/default/xui/da/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/da/floater_incoming_call.xml
@@ -16,7 +16,13 @@
 		har sluttet sig til stemme chat opkald med en konference chat.
 	</floater.string>
 	<floater.string name="VoiceInviteGroup">
-		deltager nu i Stemme chat opkald med denne gruppe [GROUP].
+		netop tilsuttet stemme kanal for &apos;[GROUP]&apos;.
+	</floater.string>
+	<floater.string name="VoiceInviteQuestionGroup">
+		Ønsker du at forlade [CURRENT_CHAT] og tilsutte dig kald med &apos;[GROUP]&apos;?
+	</floater.string>
+	<floater.string name="VoiceInviteQuestionDefault">
+		Ønsker du at forlade [CURRENT_CHAT] og tilslutte dig denne stemmechat?
 	</floater.string>
 	<text name="question">
 		Ønsker du at forlade [CURRENT_CHAT] og slutte dig til denne stemme chat?
diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml
index 7f7fb8ddf0..a62bd60757 100644
--- a/indra/newview/skins/default/xui/da/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/da/floater_snapshot.xml
@@ -5,12 +5,19 @@
 	</floater.string>
 	<button label="Tag nyt foto" name="new_snapshot_btn"/>
 	<line_editor label="Beskrivelse" name="description"/>
-	<button label="Del foto" name="share"/>
-	<button label="Del på internettet" name="share_to_web"/>
-	<button label="Gem til beholdning" name="save_to_inventory"/>
-	<button label="Gem foto" name="save"/>
-	<button label="Email foto" name="share_to_email"/>
-	<button label="Gem på computer" name="save_to_computer"/>
-	<button label="Sæt som profil billede" name="set_profile_pic"/>
-	<button label="Tilbage" name="cancel"/>
+	<panel name="panel_snapshot_main">
+		<button label="Del foto" name="share"/>
+		<button label="Gem foto" name="save"/>
+		<button label="Sæt til profilbillede" name="set_profile_pic"/>
+	</panel>
+	<panel name="panel_snapshot_share">
+		<button label="Del på internettet" name="share_to_web"/>
+		<button label="E-mail foto" name="share_to_email"/>
+		<button label="Tilbage" name="cancel_share"/>
+	</panel>
+	<panel name="panel_snapshot_save">
+		<button label="Gem til min beholdning" name="save_to_inventory"/>
+		<button label="Gem til min computer" name="save_to_computer"/>
+		<button label="Tilbage" name="cancel_save"/>
+	</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
index 05e9eb6cdd..2e59dfd649 100644
--- a/indra/newview/skins/default/xui/da/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
@@ -19,8 +19,10 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Min avatar:"/>
 		</layout_panel>
-		<layout_panel name="leave_call_btn_panel">
-			<button label="Forlad opkald" name="leave_call_btn"/>
-		</layout_panel>
+		<layout_stack name="voice_effect_and_leave_call_stack">
+			<layout_panel name="leave_call_btn_panel">
+				<button label="Forlad opkald" name="leave_call_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/da/inspect_object.xml b/indra/newview/skins/default/xui/da/inspect_object.xml
index 8cbcf6cac8..78ccc5b869 100644
--- a/indra/newview/skins/default/xui/da/inspect_object.xml
+++ b/indra/newview/skins/default/xui/da/inspect_object.xml
@@ -8,8 +8,8 @@
 		Af [CREATOR]
 	</string>
 	<string name="CreatorAndOwner">
-		af [CREATOR]
-ejer [OWNER]
+		Af [CREATOR]
+Owner [OWNER]
 	</string>
 	<string name="Price">
 		L$[AMOUNT]
@@ -23,6 +23,13 @@ ejer [OWNER]
 	<string name="Sit">
 		Sid
 	</string>
+	<text name="object_name" value="Test objekt navn der reelt er to linier og meget lang"/>
+	<text name="price_text">
+		L$30,000
+	</text>
+	<text name="object_description">
+		Dette er en meget lang beskrivelse af et objekt udformet så den fylder mindst 80 karakterer i længden eller endda nærmere 120 på dette sted. Man kan aldrig vide....
+	</text>
 	<button label="Køb" name="buy_btn"/>
 	<button label="Betal" name="pay_btn"/>
 	<button label="Tag kopi" name="take_free_copy_btn"/>
diff --git a/indra/newview/skins/default/xui/da/menu_hide_navbar.xml b/indra/newview/skins/default/xui/da/menu_hide_navbar.xml
index 45276adda4..d96a8a8a17 100644
--- a/indra/newview/skins/default/xui/da/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/da/menu_hide_navbar.xml
@@ -2,4 +2,5 @@
 <menu name="hide_navbar_menu">
 	<menu_item_check label="Vis navigationsbjælke" name="ShowNavbarNavigationPanel"/>
 	<menu_item_check label="Vis favoritbjælke" name="ShowNavbarFavoritesPanel"/>
+	<menu_item_check label="Vis min lokation bjælke" name="ShowMiniLocationPanel"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/da/menu_inventory.xml b/indra/newview/skins/default/xui/da/menu_inventory.xml
index ff70ec7886..2eafeb3fcc 100644
--- a/indra/newview/skins/default/xui/da/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/da/menu_inventory.xml
@@ -78,6 +78,7 @@
 	<menu label="Vedhæft til HUD" name="Attach To HUD"/>
 	<menu_item_call label="Redigér" name="Wearable Edit"/>
 	<menu_item_call label="Tag på" name="Wearable Wear"/>
+	<menu_item_call label="Tilføj" name="Wearable Add"/>
 	<menu_item_call label="Tag af" name="Take Off"/>
 	<menu_item_call label="--ingen valg--" name="--no options--"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/da/menu_save_outfit.xml b/indra/newview/skins/default/xui/da/menu_save_outfit.xml
index 3d89715ea8..188229b586 100644
--- a/indra/newview/skins/default/xui/da/menu_save_outfit.xml
+++ b/indra/newview/skins/default/xui/da/menu_save_outfit.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <toggleable_menu name="save_outfit_menu">
 	<menu_item_call label="Gem" name="save_outfit"/>
-	<menu_item_call label="Gem som ny" name="save_as_new_outfit"/>
+	<menu_item_call label="Gem som" name="save_as_new_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index a061292eb0..6449a00f2f 100644
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -9,6 +9,7 @@
 		<menu_item_check label="Beholdning" name="Inventory"/>
 		<menu_item_check label="Min beholdning" name="ShowSidetrayInventory"/>
 		<menu_item_check label="Mine bevægelser" name="Gestures"/>
+		<menu_item_check label="Min stemme" name="ShowVoice"/>
 		<menu label="Min status" name="Status">
 			<menu_item_call label="Væk" name="Set Away"/>
 			<menu_item_call label="Optaget" name="Set Busy"/>
@@ -68,6 +69,12 @@
 		<menu_item_call label="Sammenkæd" name="Link"/>
 		<menu_item_call label="Adskil" name="Unlink"/>
 		<menu_item_check label="Redigér sammekædede objekter" name="Edit Linked Parts"/>
+		<menu label="Vis lænkede dele" name="Select Linked Parts">
+			<menu_item_call label="Vælg næste del" name="Select Next Part"/>
+			<menu_item_call label="Vælg forrige del" name="Select Previous Part"/>
+			<menu_item_call label="Inkludér næste del" name="Include Next Part"/>
+			<menu_item_call label="Inkludér forrige del" name="Include Previous Part"/>
+		</menu>
 		<menu_item_call label="Fokusér på valgte" name="Focus on Selection"/>
 		<menu_item_call label="Zoom til valgte" name="Zoom to Selection"/>
 		<menu label="Objekt" name="Object">
@@ -98,11 +105,11 @@
 			<menu_item_call label="Benyt valgte som grundlag for gitter" name="Use Selection for Grid"/>
 			<menu_item_call label="Gitter indstillinger" name="Grid Options"/>
 		</menu>
-		<menu label="Vis lænkede dele" name="Select Linked Parts">
-			<menu_item_call label="Vælg næste del" name="Select Next Part"/>
-			<menu_item_call label="Vælg forrige del" name="Select Previous Part"/>
-			<menu_item_call label="Inkludér næste del" name="Include Next Part"/>
-			<menu_item_call label="Inkludér forrige del" name="Include Previous Part"/>
+		<menu label="Send" name="Upload">
+			<menu_item_call label="Billede (L$[COST])..." name="Upload Image"/>
+			<menu_item_call label="Lyd (L$[COST])..." name="Upload Sound"/>
+			<menu_item_call label="Animation (L$[COST])..." name="Upload Animation"/>
+			<menu_item_call label="Mange (L$[COST] pr. fil)..." name="Bulk Upload"/>
 		</menu>
 	</menu>
 	<menu label="Hjælp" name="Help">
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 72a1ab6a29..76cf73e1e6 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -267,6 +267,11 @@ Dette skyldes ofte nyt hardware som endnu ikke er blevet testet med [APP_NAME].
 Grafik kvaliteten sættes til &apos;lav&apos; for at undgå typiske problemer med drivere. Dette vil slå visse grafik funktioner fra.
 Vi anbefaler at opdatere driverne til dit grafikkort.
 Grafik kvaliteten kan forbedres i indstillinger &gt; Grafik.
+	</notification>
+	<notification name="CannotCopyWarning">
+		Du har ikke rettigheder til at kopiere følgende genstande:
+[ITEMS]
+og du vil miste dem fra din beholdning hvis du forærer dem væk. Er du sikker på at du vil tilbyde disse genstande?
 	</notification>
 	<notification name="CannotGiveCategory">
 		Du har ikke tilladelse til at videreføre den valgte mappe.
@@ -412,6 +417,26 @@ Tilbyd venskab til [NAME]?
 			<button name="Cancel" text="Annullér"/>
 		</form>
 	</notification>
+	<notification label="Gem" name="SaveWearableAs">
+		Gem genstand til beholdning som:
+		<form name="form">
+			<input name="message">
+				[DESC] (ny)
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annullér"/>
+		</form>
+	</notification>
+	<notification label="Omdøb sæt" name="RenameOutfit">
+		Nyt navn til sæt:
+		<form name="form">
+			<input name="new_name">
+				[NAME]
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annullér"/>
+		</form>
+	</notification>
 	<notification name="ConfirmItemDeleteHasLinks">
 		Mindst en af genstandene har lænkede genstande der peger på den. Hvis du sletter denne genstand, vil lænkninger ikke virke mere.  Det anbefales kraftigt at fjerne lænkninger først.
 
@@ -677,9 +702,9 @@ Gå til &apos;Knowledge Base&apos; for mere information om indholdsratings.
 		Du har ikke adgang til denne region på grund af din valgte indholdsrating.
 	</notification>
 	<notification name="RegionEntryAccessBlocked_Change">
-		Du har ikke adgang til den region, da din indholdsrating ikke tillader dette.
+		Du har ikke adgang til denne region på grund af din opsætning af indholdsrating.
 
-Klik på &quot;Ændre præference&quot; for at forhøje din indholdsrating for direkte adgang nu. Ved at gøre dette vil du få lov til at søge og få adgang til [REGIONMATURITY] indhold. Hvis du ønsker at ændre denne opsætning senere, kan du gøre dette fra Mig &gt; Indstillinger &gt; Generelt.
+For at få adgang til den ønskede region skal du ændre din indholdsrating. Dette vil give dig ret til at søge og får tilgang til indhold af typen [REGIONMATURITY]. For at omgøre ændringer gå til Mig &gt; Indstillinger &gt; Generelt.
 		<form name="form">
 			<button name="OK" text="Ændre indstillinger"/>
 			<button name="Cancel" text="Luk"/>
@@ -1460,6 +1485,21 @@ Klik på Acceptér for at deltage eller Afvis for at afvise invitationen. Klik p
 	<notification name="VoiceLoginRetry">
 		Vi laver en stemmekanal til dig. Det kan tage op til et minut.
 	</notification>
+	<notification name="VoiceEffectsExpired">
+		En eller flere af dine stemme &quot;morphs&quot; er udløbet.
+[[URL] Click here] for at forny dit abbonnement.
+	</notification>
+	<notification name="VoiceEffectsExpiredInUse">
+		Den aktive stemme &quot;morph&quot; er udløbet og din normale stemme opsætning er genaktiveret.
+[[URL] Click here] for at forny dit abbonnement.
+	</notification>
+	<notification name="VoiceEffectsWillExpire">
+		En eller flere af dine stemme &quot;morphs&quot; vil udløbe om mindre end [INTERVAL] dage.
+[[URL] Click here] for at forny dit abbonnement.
+	</notification>
+	<notification name="VoiceEffectsNew">
+		Nye stemme &quot;morphs&quot; er tilgængelige!
+	</notification>
 	<notification name="Cannot enter parcel: not a group member">
 		Kun medlemmer af en bestemt gruppe kan besøge dette område.
 	</notification>
@@ -1526,18 +1566,36 @@ De vil blive blokeret nogle få sekunder af sikkerhedsmæssige årsager.
 Knappen vil blive vist når der er nok plads til den.
 	</notification>
 	<notification name="ShareNotification">
-		Træk genstande fra beholdning til en person i beboer vælgeren
+		Vælg beboere at dele med.
+	</notification>
+	<notification name="ShareItemsConfirmation">
+		Er du sikker på at du vil dele følgende genstande:
+
+[ITEMS]
+
+Med følgende beboere:
+
+[RESIDENTS]
+		<usetemplate name="okcancelbuttons" notext="Annullér" yestext="Ok"/>
+	</notification>
+	<notification name="ItemsShared">
+		Genstande er nu delt.
 	</notification>
 	<notification name="DeedToGroupFail">
 		Dedikering til gruppe fejlede.
 	</notification>
 	<notification name="AvatarRezNotification">
 		( [EXISTENCE] sekunder i live )
-Avatar &apos;[NAME]&apos; declouded in [TIME] seconds.
+Avatar &apos;[NAME]&apos; var ikke sky mere, efter [TIME] sekunder.
 	</notification>
-	<notification name="AvatarRezSelfNotification">
-		( [EXISTENCE] sekunder i live )
-Du afsluttede klargøring af dit sæt på [TIME] sekunder.
+	<notification name="AvatarRezSelfBakedDoneNotification">
+		( [EXISTENCE] seconds alive )
+Du blev færdig med at fremvise dit sæt efter [TIME] sekunder.
+	</notification>
+	<notification name="AvatarRezSelfBakedUpdateNotification">
+		( [EXISTENCE] seconds alive )
+Du sendte en opdatering af dit udseende efter [TIME] sekunder.
+[STATUS]
 	</notification>
 	<notification name="AvatarRezCloudNotification">
 		( [EXISTENCE] sekunder i live )
@@ -1559,9 +1617,31 @@ Avatar &apos;[NAME]&apos; skiftede til udseende modus.
 		( [EXISTENCE] sekunder i live )
 Avatar &apos;[NAME]&apos; har forladt udseende modus.
 	</notification>
+	<notification name="NoConnect">
+		Vi har problemer med at oprette forbindelse via [PROTOCOL] [HOSTID].
+Check venligst din netværks- og firewallsetup.
+		<form name="form">
+			<button name="OK" text="OK"/>
+		</form>
+	</notification>
+	<notification name="NoVoiceConnect">
+		Vi har problemer med at oprette forbindelse til din stemme server:
+
+[HOSTID]
+
+Stemme kommunikation vil ikke være tilgængelig.
+Check venligst din netværks- og firewall setup.
+		<form name="form">
+			<button name="OK" text="OK"/>
+		</form>
+	</notification>
 	<notification name="AvatarRezLeftNotification">
 		( [EXISTENCE] sekunder i live )
 Avatar &apos;[NAME]&apos; forsvandt helt &quot;uploaded&quot;.
+	</notification>
+	<notification name="AvatarRezSelfBakeNotification">
+		( [EXISTENCE] seconds alive )
+Du sendte en [RESOLUTION] tekstur til &apos;[BODYREGION]&apos; efter [TIME] sekunder.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Er du sikker på at du vil forlade dette opkald?
@@ -1574,7 +1654,7 @@ vil have lyden slukket - selv efter de har forladt kaldet.
 
 
 Sluk for alles lyd?
-		<usetemplate ignoretext="Bekræft før jeg slukker for alle deltageres lyd i gruppe-kald" name="okcancelignore" notext="OK" yestext="Annullér"/>
+		<usetemplate ignoretext="Bekræft før jeg slukker for alle deltageres lyd i gruppe-kald" name="okcancelignore" notext="Annullér" yestext="Ok"/>
 	</notification>
 	<global name="UnsupportedGLRequirements">
 		Det ser ikke ud til at din hardware opfylder minimumskravene til [APP_NAME]. [APP_NAME] kræver et OpenGL grafikkort som understøter &apos;multitexture&apos;. Check eventuelt om du har de nyeste drivere for grafikkortet, og de nyeste service-packs og patches til dit operativsystem.
diff --git a/indra/newview/skins/default/xui/da/panel_edit_shape.xml b/indra/newview/skins/default/xui/da/panel_edit_shape.xml
index 4360fe35f5..7c1ffe5cfa 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_shape.xml
@@ -1,8 +1,15 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="edit_shape_panel">
-	<text name="avatar_height">
-		[HEIGHT] meter høj
-	</text>
+	<string name="meters">
+		Meter
+	</string>
+	<string name="feet">
+		Fod
+	</string>
+	<string name="height">
+		Højde:
+	</string>
+	<text name="avatar_height"/>
 	<panel label="Trøje" name="accordion_panel">
 		<accordion name="wearable_accordion">
 			<accordion_tab name="shape_body_tab" title="Krop"/>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
index 8e6990fe31..f927f918a1 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
@@ -72,7 +72,7 @@
 	<string name="jacket_desc_text">
 		Jakke:
 	</string>
-	<string name="skirt_skirt_desc_text">
+	<string name="skirt_desc_text">
 		Nederdel:
 	</string>
 	<string name="gloves_desc_text">
@@ -100,11 +100,6 @@
 		<icon name="male_icon" tool_tip="Mandlig"/>
 		<icon name="female_icon" tool_tip="Kvindelig"/>
 	</panel>
-	<panel label="gear_buttom_panel" name="gear_buttom_panel">
-		<button name="friends_viewsort_btn" tool_tip="Valg"/>
-		<button name="add_btn" tool_tip="TODO"/>
-		<button name="del_btn" tool_tip="TODO"/>
-	</panel>
 	<panel name="button_panel">
 		<button label="Gem som" name="save_as_button"/>
 		<button label="Vend tilbage" name="revert_button"/>
diff --git a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
index 9aa9fd14cc..a02c9ba399 100644
--- a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
@@ -13,7 +13,7 @@
 	<string name="Filter.All" value="Alle"/>
 	<string name="Filter.Clothes/Body" value="Tøj/Krop"/>
 	<string name="Filter.Objects" value="Objekter"/>
-	<button label="redigér" name="edit_wearable_btn"/>
+	<string name="Filter.Custom" value="Tilpasset filter"/>
 	<text name="title" value="Redigér sæt"/>
 	<panel label="bottom_panel" name="header_panel">
 		<panel label="bottom_panel" name="outfit_name_and_status">
@@ -23,20 +23,16 @@
 	</panel>
 	<layout_stack name="im_panels">
 		<layout_panel label="IM kontrolpanel" name="outfit_wearables_panel">
-			<panel label="bottom_panel" name="edit_panel"/>
-		</layout_panel>
-		<layout_panel name="add_wearables_panel">
-			<text name="add_to_outfit_label" value="Tilføj til sæt:"/>
 			<layout_stack name="filter_panels">
-				<layout_panel label="IM kontrolpanel" name="filter_panel">
-					<filter_editor label="Filter" name="look_item_filter"/>
+				<layout_panel name="add_button_and_combobox">
+					<button label="Tilføj mere..." name="show_add_wearables_btn"/>
+				</layout_panel>
+				<layout_panel name="filter_panel">
+					<filter_editor label="Filtrér tøj i beholdning" name="look_item_filter"/>
 				</layout_panel>
 			</layout_stack>
-			<panel label="add_wearables_button_bar" name="add_wearables_button_bar">
-				<button label="F" name="folder_view_btn"/>
-				<button label="L" name="list_view_btn"/>
-			</panel>
 		</layout_panel>
+		<layout_panel name="add_wearables_panel"/>
 	</layout_stack>
 	<panel name="save_revert_button_bar">
 		<button label="Gem" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
index 681701aba2..4bc9ff99a9 100644
--- a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
@@ -7,8 +7,7 @@
 	<panel name="bottom_panel">
 		<button name="options_gear_btn" tool_tip="Vis flere muligheder"/>
 		<dnd_button name="trash_btn" tool_tip="Fjern valgte genstand"/>
-		<button label="Gem sæt" name="make_outfit_btn" tool_tip="Gem udseende som nyt sæt"/>
+		<button label="Gem som" name="save_btn"/>
 		<button label="Tag på" name="wear_btn" tool_tip="Tag valgte sæt på"/>
-		<button label="Redigér sæt" name="edit_current_outfit_btn"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml
index c06176f994..ac15da1717 100644
--- a/indra/newview/skins/default/xui/da/panel_places.xml
+++ b/indra/newview/skins/default/xui/da/panel_places.xml
@@ -5,12 +5,12 @@
 	<filter_editor label="Filtrér mine steder" name="Filter"/>
 	<panel name="button_panel">
 		<button label="Teleportér" name="teleport_btn" tool_tip="Teleportér til det valgte område"/>
-		<button label="Kort" name="map_btn"/>
+		<button label="Kort" name="map_btn" tool_tip="Vis dette område på verdenskortet"/>
 		<button label="Redigér" name="edit_btn" tool_tip="Redigér landemærke information"/>
 		<button label="▼" name="overflow_btn" tool_tip="Vise flere valgmuligheder"/>
 		<button label="Gem" name="save_btn"/>
 		<button label="Annullér" name="cancel_btn"/>
 		<button label="Luk" name="close_btn"/>
-		<button label="Profil" name="profile_btn"/>
+		<button label="Profil" name="profile_btn" tool_tip="Vis profil for stedet"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
index 807d7939b8..b267c75673 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
@@ -13,7 +13,7 @@
 	</text>
 	<check_box label="Byg/Redigér" name="edit_camera_movement" tool_tip="Benyt automatisk kamera positionering ved start og slut af editerings modus"/>
 	<check_box label="Udseende" name="appearance_camera_movement" tool_tip="Benyt automatisk kamera positionering ved redigering"/>
-	<check_box initial_value="1" label="Sidepanel" name="appearance_sidebar_positioning" tool_tip="Benyt automatisk positionering af kamera"/>
+	<check_box initial_value="sand" label="Sidepanel" name="appearance_sidebar_positioning" tool_tip="Benyt automatisk positionering af kamera"/>
 	<check_box label="Vis avatar i førsteperson" name="first_person_avatar_visible"/>
 	<check_box label="Piletaster bruges altid til bevægelse" name="arrow_keys_move_avatar_check"/>
 	<check_box label="Tast-tast-hold for at løbe" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/da/panel_status_bar.xml b/indra/newview/skins/default/xui/da/panel_status_bar.xml
index 08ffafd5a6..8633f12d24 100644
--- a/indra/newview/skins/default/xui/da/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/da/panel_status_bar.xml
@@ -21,8 +21,10 @@
 	<panel.string name="buycurrencylabel">
 		L$ [AMT]
 	</panel.string>
-	<button label="" label_selected="" name="buycurrency" tool_tip="Min balance"/>
-	<button label="Køb L$" name="buyL" tool_tip="Klik for at købe flere L$"/>
+	<panel name="balance_bg">
+		<text name="balance" tool_tip="Min status" value="L$20"/>
+		<button label="KØB L$" name="buyL" tool_tip="Klik for at købe flere L$"/>
+	</panel>
 	<text name="TimeText" tool_tip="Nuværende tid (Pacific)">
 		24:00 PST
 	</text>
diff --git a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
index 767d74ca3f..64ee3f0428 100644
--- a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
@@ -2,12 +2,12 @@
 <panel label="Ting" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Profil" name="info_btn"/>
-			<button label="Del" name="share_btn"/>
-			<button label="Køb ind" name="shop_btn"/>
-			<button label="Bær" name="wear_btn"/>
+			<button label="Profil" name="info_btn" tool_tip="Vis objekt profil"/>
+			<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>
+			<button label="Køb ind" name="shop_btn" tool_tip="Åben hjemmeside for markedsplads"/>
+			<button label="Bær" name="wear_btn" tool_tip="Tag valgte sæt på"/>
 			<button label="Afspil" name="play_btn"/>
-			<button label="Teleportér" name="teleport_btn"/>
+			<button label="Teleportér" name="teleport_btn" tool_tip="Teleport til det valgte område"/>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index 5ceb0612a8..af0f685826 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -95,7 +95,7 @@
 		Et ugyldig hostnavn blev brugt for at få adgang til serveren. Check venligst din SLURL eller navnet på hosten.
 	</string>
 	<string name="CertExpired">
-		Certifikat returneret fra nettet ser ud til at være udløbet.  Check venligst din systemtid eller kontakt administratoren af dette net.
+		Det certifikat der blev returneret ser ud til at være udløbet. Check venligst din systemtid på computeren.
 	</string>
 	<string name="CertKeyUsage">
 		Det certifikat der blev returneret af serveren kan ikke benyttes til SSL.  Kontakt venligst administrator af dette net.
@@ -104,7 +104,7 @@
 		For mange certifikater i serverens certifikat streng.  Kontakt venligst administrator af dette net.
 	</string>
 	<string name="CertInvalidSignature">
-		Certifikat signaturen returneret på dette net kan ikke bekræftes.  Kontakt venligst administrator af dette net.
+		Signaturen på certifkat der blev returneret af Second Life serveren kunne ikke bekræftes.
 	</string>
 	<string name="LoginFailedNoNetwork">
 		Netværksfejl: Kunne ikke etablere forbindelse, check venligst din netværksforbindelse.
@@ -729,6 +729,12 @@
 	<string name="land_type_unknown">
 		(ukendt)
 	</string>
+	<string name="Estate / Full Region">
+		Estate / Hel region
+	</string>
+	<string name="Mainland / Full Region">
+		Mainland / Hel region
+	</string>
 	<string name="all_files">
 		Alle filer
 	</string>
@@ -873,6 +879,9 @@
 	<string name="NewWearable">
 		Ny [WEARABLE_ITEM]
 	</string>
+	<string name="CreateNewWearable">
+		Opret [WEARABLE_TYPE]
+	</string>
 	<string name="next">
 		Næste
 	</string>
@@ -3445,6 +3454,9 @@ Hvis du bliver ved med at modtage denne besked, kontakt venligst [SUPPORT_SITE].
 	<string name="session_initialization_timed_out_error">
 		Initialisering af session er &quot;timed out&quot;
 	</string>
+	<string name="voice_morphing_url">
+		http://secondlife.com/landing/voicemorphing
+	</string>
 	<string name="paid_you_ldollars">
 		[NAME] betalte dig L$[AMOUNT]
 	</string>
@@ -3615,16 +3627,16 @@ Krænkelsesanmeldelse
 	<string name="Male - Wow">
 		Mand - Wow
 	</string>
-	<string name="FeMale - Excuse me">
+	<string name="Female - Excuse me">
 		Kvinde - Undskyld mig
 	</string>
-	<string name="FeMale - Get lost">
+	<string name="Female - Get lost">
 		Kvinde - Skrid!
 	</string>
-	<string name="FeMale - Blow kiss">
+	<string name="Female - Blow kiss">
 		Kvinde - Pust et kys
 	</string>
-	<string name="FeMale - Boo">
+	<string name="Female - Boo">
 		Kvinde - Boo
 	</string>
 	<string name="Female - Bored">
@@ -3657,4 +3669,32 @@ Krænkelsesanmeldelse
 	<string name="texture_load_dimensions_error">
 		Kan ikke hente billeder større end  [WIDTH]*[HEIGHT]
 	</string>
+	<string name="words_separator" value=","/>
+	<string name="server_is_down">
+		Desværre er noget gået galt.
+
+	Check venligst status.secondlifegrid.net for at se om der skulle være driftsproblemer.
+	Hvis du bliver ved med at have problemer, check venligst din firewall- og netværksopsætning.
+	</string>
+	<string name="dateTimeWeekdaysNames">
+		Søndag:Mandag:Tirsdag:Onsdag:Torsdag:Fredag:Lørdag
+	</string>
+	<string name="dateTimeWeekdaysShortNames">
+		Søn:Man:Tir:Ons:Tor:Fre:Lør
+	</string>
+	<string name="dateTimeMonthNames">
+		Januar:Februar:Marts:April:Maj:Juni:Juli:August:September:Oktober:November:December
+	</string>
+	<string name="dateTimeMonthShortNames">
+		Jan:Feb:Mar:Apr:Maj:Jun:Jul:Aug:Sep:Okt:Nov:Dec
+	</string>
+	<string name="dateTimeDayFormat">
+		[MDAY]
+	</string>
+	<string name="dateTimeAM">
+		AM
+	</string>
+	<string name="dateTimePM">
+		PM
+	</string>
 </strings>
-- 
cgit v1.2.3


From 4f2d241c1781bc7d580b03a89318aafd4519d4d5 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Wed, 23 Jun 2010 11:59:33 -0700
Subject: CT-575 WIP DA translation for set 12, new files

---
 .../skins/default/xui/da/floater_voice_effect.xml  | 29 ++++++++++++++++++++++
 .../skins/default/xui/da/menu_cof_attachment.xml   |  4 +++
 .../skins/default/xui/da/menu_cof_body_part.xml    |  5 ++++
 .../skins/default/xui/da/menu_cof_clothing.xml     |  7 ++++++
 .../newview/skins/default/xui/da/menu_cof_gear.xml |  5 ++++
 .../skins/default/xui/da/menu_outfit_gear.xml      | 26 +++++++++++++++++++
 .../skins/default/xui/da/menu_outfit_tab.xml       |  9 +++++++
 .../default/xui/da/menu_wearable_list_item.xml     | 13 ++++++++++
 .../skins/default/xui/da/panel_voice_effect.xml    | 15 +++++++++++
 9 files changed, 113 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/da/floater_voice_effect.xml
 create mode 100644 indra/newview/skins/default/xui/da/menu_cof_attachment.xml
 create mode 100644 indra/newview/skins/default/xui/da/menu_cof_body_part.xml
 create mode 100644 indra/newview/skins/default/xui/da/menu_cof_clothing.xml
 create mode 100644 indra/newview/skins/default/xui/da/menu_cof_gear.xml
 create mode 100644 indra/newview/skins/default/xui/da/menu_outfit_gear.xml
 create mode 100644 indra/newview/skins/default/xui/da/menu_outfit_tab.xml
 create mode 100644 indra/newview/skins/default/xui/da/menu_wearable_list_item.xml
 create mode 100644 indra/newview/skins/default/xui/da/panel_voice_effect.xml

diff --git a/indra/newview/skins/default/xui/da/floater_voice_effect.xml b/indra/newview/skins/default/xui/da/floater_voice_effect.xml
new file mode 100644
index 0000000000..543224c6f6
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_voice_effect.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Steder" name="voice_effects" title="SE STEMME &quot;MORPH&quot;">
+	<string name="no_voice_effect">
+		(Ingen stemme &quot;morph&quot;)
+	</string>
+	<string name="active_voice_effect">
+		(Aktiv)
+	</string>
+	<string name="unsubscribed_voice_effect">
+		(Ikke aktiveret)
+	</string>
+	<string name="new_voice_effect">
+		(Ny!)
+	</string>
+	<text name="status_text">
+		For at se stemme &quot;morph&quot; effekter, skal du klikke på &quot;optag&quot; kanppen for at optage en stump stemme, derefter klik på en stemme &quot;morph&quot; på listen for at høre hvordan det vil lyde.
+
+For at vende tilbage til lokal stemme-chat luk dette vindue.
+	</text>
+	<button label="Optage prøve" name="record_btn" tool_tip="Optag en stemmeprøve."/>
+	<button label="Stop" name="record_stop_btn"/>
+	<text name="voice_morphing_link">
+		[[URL] Hent stemme &quot;morph&quot;]
+	</text>
+	<scroll_list name="voice_effect_list" tool_tip="Optag en prøve med din stemme og klik på en effekt for at teste.">
+		<scroll_list.columns label="Stemme &quot;morph&quot;" name="name"/>
+		<scroll_list.columns label="Udløber" name="expires"/>
+	</scroll_list>
+</floater>
diff --git a/indra/newview/skins/default/xui/da/menu_cof_attachment.xml b/indra/newview/skins/default/xui/da/menu_cof_attachment.xml
new file mode 100644
index 0000000000..9d7fc0f223
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+	<menu_item_call label="Tag af" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_cof_body_part.xml b/indra/newview/skins/default/xui/da/menu_cof_body_part.xml
new file mode 100644
index 0000000000..0e90d5a3ae
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+	<menu_item_call label="Erstat" name="replace"/>
+	<menu_item_call label="Redigér" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_cof_clothing.xml b/indra/newview/skins/default/xui/da/menu_cof_clothing.xml
new file mode 100644
index 0000000000..73d97cd167
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_cof_clothing.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+	<menu_item_call label="Tag af" name="take_off"/>
+	<menu_item_call label="Flyt et lag op" name="move_up"/>
+	<menu_item_call label="Flyt et lag ned" name="move_down"/>
+	<menu_item_call label="Redigér" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_cof_gear.xml b/indra/newview/skins/default/xui/da/menu_cof_gear.xml
new file mode 100644
index 0000000000..f44369fd84
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+	<menu label="Nyt tøj" name="COF.Gear.New_Clothes"/>
+	<menu label="Nye kropsdele" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_outfit_gear.xml b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml
new file mode 100644
index 0000000000..3ed0df9041
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+	<menu_item_call label="Tag på - Erstat nuværende sæt" name="wear"/>
+	<menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/>
+	<menu label="Nyt tøj" name="New Clothes">
+		<menu_item_call label="Ny trøje" name="New Shirt"/>
+		<menu_item_call label="Nye bukser" name="New Pants"/>
+		<menu_item_call label="Nye sko" name="New Shoes"/>
+		<menu_item_call label="Nye strømper" name="New Socks"/>
+		<menu_item_call label="Ny jakke" name="New Jacket"/>
+		<menu_item_call label="Ny nederdel" name="New Skirt"/>
+		<menu_item_call label="Nye handsker" name="New Gloves"/>
+		<menu_item_call label="Ny undertrøje" name="New Undershirt"/>
+		<menu_item_call label="Nye underbukser" name="New Underpants"/>
+		<menu_item_call label="Ny alpha" name="New Alpha"/>
+		<menu_item_call label="Ny tatovering" name="New Tattoo"/>
+	</menu>
+	<menu label="Nye kropsdele" name="New Body Parts">
+		<menu_item_call label="Ny figur" name="New Shape"/>
+		<menu_item_call label="Nyt hud" name="New Skin"/>
+		<menu_item_call label="Nyt hår" name="New Hair"/>
+		<menu_item_call label="Nye øjne" name="New Eyes"/>
+	</menu>
+	<menu_item_call label="Omdøb sæt" name="rename"/>
+	<menu_item_call label="Slet sæt" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/da/menu_outfit_tab.xml b/indra/newview/skins/default/xui/da/menu_outfit_tab.xml
new file mode 100644
index 0000000000..35bb1ae685
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+	<menu_item_call label="Tag på - Erstat nuværende sæt" name="wear_replace"/>
+	<menu_item_call label="Tag på - Tilføj til nuværende sæt" name="wear_add"/>
+	<menu_item_call label="Tag af - Fjern fra nuværende sæt" name="take_off"/>
+	<menu_item_call label="Redigér sæt" name="edit"/>
+	<menu_item_call label="Omdøb" name="rename"/>
+	<menu_item_call label="Slet sæt" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml
new file mode 100644
index 0000000000..6ec5e50e5b
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+	<menu_item_call label="Tag på" name="wear"/>
+	<menu_item_call label="Tilføj" name="wear_add"/>
+	<menu_item_call label="Tag af" name="take_off_or_detach"/>
+	<menu_item_call label="Tag af" name="detach"/>
+	<context_menu label="Vedhæft til  ▶" name="wearable_attach_to"/>
+	<context_menu label="Vedhæft på HUD  ▶" name="wearable_attach_to_hud"/>
+	<menu_item_call label="Tag af" name="take_off"/>
+	<menu_item_call label="Redigér" name="edit"/>
+	<menu_item_call label="Objekt profil" name="object_profile"/>
+	<menu_item_call label="Vis original" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/da/panel_voice_effect.xml b/indra/newview/skins/default/xui/da/panel_voice_effect.xml
new file mode 100644
index 0000000000..8800d2e12d
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/panel_voice_effect.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_voice_effect">
+	<string name="no_voice_effect">
+		Ingen stemme &quot;morph&quot;
+	</string>
+	<string name="preview_voice_effects">
+		Se stemme &quot;morph&quot;  ▶
+	</string>
+	<string name="get_voice_effects">
+		Hente stemme &quot;morph&quot;  ▶
+	</string>
+	<combo_box name="voice_effect" tool_tip="Vælg en stemme &quot;morph&quot; effekt for at ændre din stemme.">
+		<combo_box.item label="Ingen stemme &quot;morph&quot;" name="no_voice_effect"/>
+	</combo_box>
+</panel>
-- 
cgit v1.2.3


From 537678a8d81082ea5621f097ffd477ef291a0f02 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Wed, 23 Jun 2010 14:11:02 -0700
Subject: ND-47489 WIP FR translation for set 12

---
 .../skins/default/xui/fr/floater_camera.xml        | 25 +++---
 .../skins/default/xui/fr/floater_incoming_call.xml |  8 +-
 .../skins/default/xui/fr/floater_snapshot.xml      | 23 ++++--
 .../default/xui/fr/floater_voice_controls.xml      |  8 +-
 .../skins/default/xui/fr/inspect_object.xml        | 10 +--
 .../skins/default/xui/fr/menu_hide_navbar.xml      |  1 +
 .../skins/default/xui/fr/menu_inventory.xml        |  1 +
 .../skins/default/xui/fr/menu_save_outfit.xml      |  2 +-
 indra/newview/skins/default/xui/fr/menu_viewer.xml | 17 ++--
 .../newview/skins/default/xui/fr/notifications.xml | 91 ++++++++++++++++++++--
 .../skins/default/xui/fr/panel_edit_shape.xml      | 13 +++-
 .../skins/default/xui/fr/panel_edit_wearable.xml   |  9 +--
 .../skins/default/xui/fr/panel_outfit_edit.xml     | 18 ++---
 .../default/xui/fr/panel_outfits_inventory.xml     |  3 +-
 .../newview/skins/default/xui/fr/panel_places.xml  |  4 +-
 .../default/xui/fr/panel_preferences_advanced.xml  |  2 +-
 .../skins/default/xui/fr/panel_status_bar.xml      |  6 +-
 .../skins/default/xui/fr/sidepanel_inventory.xml   | 10 +--
 indra/newview/skins/default/xui/fr/strings.xml     | 52 +++++++++++--
 19 files changed, 218 insertions(+), 85 deletions(-)

diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml
index 558551b649..b0834fe170 100644
--- a/indra/newview/skins/default/xui/fr/floater_camera.xml
+++ b/indra/newview/skins/default/xui/fr/floater_camera.xml
@@ -9,35 +9,28 @@
 	<floater.string name="move_tooltip">
 		Déplacer la caméra vers le haut et le bas, la gauche et la droite
 	</floater.string>
-	<floater.string name="orbit_mode_title">
-		Faire tourner
+	<floater.string name="camera_modes_title">
+		Modes
 	</floater.string>
 	<floater.string name="pan_mode_title">
-		Faire un panoramique
+		Rotation - Zoom - Panoramique
 	</floater.string>
-	<floater.string name="avatar_view_mode_title">
+	<floater.string name="presets_mode_title">
 		Préréglages
 	</floater.string>
 	<floater.string name="free_mode_title">
 		Voir l&apos;objet
 	</floater.string>
 	<panel name="controls">
-		<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
 		<panel name="zoom" tool_tip="Zoomer en direction du point central">
+			<joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/>
 			<slider_bar name="zoom_slider" tool_tip="Zoomer en direction du point central"/>
-		</panel>
-		<joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/>
-		<panel name="camera_presets">
-			<button name="rear_view" tool_tip="Vue arrière"/>
-			<button name="group_view" tool_tip="Vue Groupe"/>
-			<button name="front_view" tool_tip="Vue frontale"/>
-			<button name="mouselook_view" tool_tip="Vue subjective"/>
+			<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
 		</panel>
 	</panel>
 	<panel name="buttons">
-		<button label="" name="orbit_btn" tool_tip="Faire tourner la caméra"/>
-		<button label="" name="pan_btn" tool_tip="Faire un panoramique"/>
-		<button label="" name="avatarview_btn" tool_tip="Préréglages"/>
-		<button label="" name="freecamera_btn" tool_tip="Voir l&apos;objet"/>
+		<button label="" name="presets_btn" tool_tip="Préréglages"/>
+		<button label="" name="pan_btn" tool_tip="Rotation - Zoom - Panoramique"/>
+		<button label="" name="avatarview_btn" tool_tip="Modes"/>
 	</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
index 110c61aedc..43a7424851 100644
--- a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
@@ -16,7 +16,13 @@
 		a rejoint un chat vocal avec conférence.
 	</floater.string>
 	<floater.string name="VoiceInviteGroup">
-		a rejoint un chat vocal avec le groupe [GROUP].
+		vient de rejoindre le canal vocal [GROUP].
+	</floater.string>
+	<floater.string name="VoiceInviteQuestionGroup">
+		Voulez-vous quitter [CURRENT_CHAT] et rejoindre l&apos;appel avec [GROUP] ?
+	</floater.string>
+	<floater.string name="VoiceInviteQuestionDefault">
+		Voulez-vous quitter [CURRENT_CHAT] et rejoindre ce chat vocal ?
 	</floater.string>
 	<text name="question">
 		Voulez-vous quitter [CURRENT_CHAT] et rejoindre ce chat vocal ?
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
index 381a513bda..033ee7443c 100644
--- a/indra/newview/skins/default/xui/fr/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
@@ -5,12 +5,19 @@
 	</floater.string>
 	<button label="Rafraîchir" name="new_snapshot_btn"/>
 	<line_editor label="Description" name="description"/>
-	<button label="Partager" name="share"/>
-	<button label="Partage Web" name="share_to_web"/>
-	<button label="Dans mon inventaire" name="save_to_inventory"/>
-	<button label="Enregistrer" name="save"/>
-	<button label="Envoi par e-mail" name="share_to_email"/>
-	<button label="Sur mon ordinateur" name="save_to_computer"/>
-	<button label="Image de profil" name="set_profile_pic"/>
-	<button label="Précédent" name="cancel"/>
+	<panel name="panel_snapshot_main">
+		<button label="Partager" name="share"/>
+		<button label="Enregistrer" name="save"/>
+		<button label="Image de profil" name="set_profile_pic"/>
+	</panel>
+	<panel name="panel_snapshot_share">
+		<button label="Partage Web" name="share_to_web"/>
+		<button label="Envoi par e-mail" name="share_to_email"/>
+		<button label="Précédent" name="cancel_share"/>
+	</panel>
+	<panel name="panel_snapshot_save">
+		<button label="Dans mon inventaire" name="save_to_inventory"/>
+		<button label="Sur mon ordinateur" name="save_to_computer"/>
+		<button label="Précédent" name="cancel_save"/>
+	</panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
index 1a7bc228fa..5c26527ed6 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
@@ -19,8 +19,10 @@
 		<layout_panel name="my_panel">
 			<text name="user_text" value="Mon avatar :"/>
 		</layout_panel>
-		<layout_panel name="leave_call_btn_panel">
-			<button label="Quitter l&apos;appel" name="leave_call_btn"/>
-		</layout_panel>
+		<layout_stack name="voice_effect_and_leave_call_stack">
+			<layout_panel name="leave_call_btn_panel">
+				<button label="Quitter l&apos;appel" name="leave_call_btn"/>
+			</layout_panel>
+		</layout_stack>
 	</layout_stack>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/inspect_object.xml b/indra/newview/skins/default/xui/fr/inspect_object.xml
index e50de400fd..b66af7a2bf 100644
--- a/indra/newview/skins/default/xui/fr/inspect_object.xml
+++ b/indra/newview/skins/default/xui/fr/inspect_object.xml
@@ -8,8 +8,8 @@
 		Par [CREATOR]
 	</string>
 	<string name="CreatorAndOwner">
-		par [CREATOR]
-propriétaire [OWNER]
+		De [CREATOR]
+Propriétaire [OWNER]
 	</string>
 	<string name="Price">
 		[AMOUNT] L$
@@ -23,16 +23,16 @@ propriétaire [OWNER]
 	<string name="Sit">
 		M&apos;asseoir
 	</string>
-	<text name="object_name" value="Nom d&apos;objet de test vraiment très long"/>
+	<text name="object_name" value="Test Object Name That Is actually two lines and Really Long"/>
 	<text name="object_creator">
 		par secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
 owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
 	</text>
 	<text name="price_text">
-		300 000 L$
+		30 000 L$
 	</text>
 	<text name="object_description">
-		Cette description d&apos;objet est vraiment très longue : elle compte au moins 80 caractères, voire plus de 120, vraiment très très longue. Who knows, really?
+		This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really?
 	</text>
 	<text name="object_media_url">
 		http://www.superdupertest.com
diff --git a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml
index 3a7126fe50..86a2ddd185 100644
--- a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml
+++ b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml
@@ -2,4 +2,5 @@
 <menu name="hide_navbar_menu">
 	<menu_item_check label="Afficher la barre de navigation" name="ShowNavbarNavigationPanel"/>
 	<menu_item_check label="Afficher la barre des Favoris" name="ShowNavbarFavoritesPanel"/>
+	<menu_item_check label="Afficher la mini-barre d&apos;emplacement" name="ShowMiniLocationPanel"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml
index 4b9a05edd6..8b0d726e51 100644
--- a/indra/newview/skins/default/xui/fr/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inventory.xml
@@ -81,6 +81,7 @@
 	<menu label="Attacher au HUD " name="Attach To HUD"/>
 	<menu_item_call label="Éditer" name="Wearable Edit"/>
 	<menu_item_call label="Porter" name="Wearable Wear"/>
+	<menu_item_call label="Ajouter" name="Wearable Add"/>
 	<menu_item_call label="Enlever" name="Take Off"/>
 	<menu_item_call label="--aucune option--" name="--no options--"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_save_outfit.xml b/indra/newview/skins/default/xui/fr/menu_save_outfit.xml
index fbec933382..f78db411b3 100644
--- a/indra/newview/skins/default/xui/fr/menu_save_outfit.xml
+++ b/indra/newview/skins/default/xui/fr/menu_save_outfit.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <toggleable_menu name="save_outfit_menu">
 	<menu_item_call label="Enregistrer" name="save_outfit"/>
-	<menu_item_call label="Enregistrer comme nouvelle" name="save_as_new_outfit"/>
+	<menu_item_call label="Enregistrer sous" name="save_as_new_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 4c7cdefbe8..0976f0c72a 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -11,6 +11,7 @@
 		<menu_item_check label="Mon inventaire" name="Inventory"/>
 		<menu_item_check label="Mon inventaire" name="ShowSidetrayInventory"/>
 		<menu_item_check label="Mes gestes" name="Gestures"/>
+		<menu_item_check label="Ma voix" name="ShowVoice"/>
 		<menu label="Mon statut" name="Status">
 			<menu_item_call label="Absent" name="Set Away"/>
 			<menu_item_call label="Occupé" name="Set Busy"/>
@@ -70,6 +71,12 @@
 		<menu_item_call label="Lien" name="Link"/>
 		<menu_item_call label="Annuler le lien" name="Unlink"/>
 		<menu_item_check label="Modifier les parties liées" name="Edit Linked Parts"/>
+		<menu label="Sélectionner les parties liées" name="Select Linked Parts">
+			<menu_item_call label="Sélectionner la partie suivante" name="Select Next Part"/>
+			<menu_item_call label="Sélectionner la partie précédente" name="Select Previous Part"/>
+			<menu_item_call label="Inclure la partie suivante" name="Include Next Part"/>
+			<menu_item_call label="Inclure la partie précédente" name="Include Previous Part"/>
+		</menu>
 		<menu_item_call label="Point central sur la sélection" name="Focus on Selection"/>
 		<menu_item_call label="Zoomer sur la sélection" name="Zoom to Selection"/>
 		<menu label="Objet" name="Object">
@@ -100,11 +107,11 @@
 			<menu_item_call label="Utiliser la sélection pour la grille" name="Use Selection for Grid"/>
 			<menu_item_call label="Options de la grille" name="Grid Options"/>
 		</menu>
-		<menu label="Sélectionner les parties liées" name="Select Linked Parts">
-			<menu_item_call label="Sélectionner la partie suivante" name="Select Next Part"/>
-			<menu_item_call label="Sélectionner la partie précédente" name="Select Previous Part"/>
-			<menu_item_call label="Inclure la partie suivante" name="Include Next Part"/>
-			<menu_item_call label="Inclure la partie précédente" name="Include Previous Part"/>
+		<menu label="Charger" name="Upload">
+			<menu_item_call label="Image ([COST] L$)..." name="Upload Image"/>
+			<menu_item_call label="Son ([COST] L$)..." name="Upload Sound"/>
+			<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
+			<menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/>
 		</menu>
 	</menu>
 	<menu label="Aide" name="Help">
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index bb1c4242ee..32f779f538 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -474,7 +474,9 @@ La qualité des graphiques peut être augmentée à la section Préférences &gt
 		Le terraformage est interdit dans la région [REGION].
 	</notification>
 	<notification name="CannotCopyWarning">
-		Vous n&apos;êtes pas autorisé à copier cet objet et il disparaîtra de votre inventaire si vous le donnez. Souhaitez-vous vraiment offrir cet objet ?
+		Vous n&apos;êtes pas autorisé à copier les articles suivants :
+[ITEMS].
+Ceux-ci disparaîtront donc de votre inventaire si vous les donnez. Voulez-vous vraiment offrir ces articles ?
 		<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
 	</notification>
 	<notification name="CannotGiveItem">
@@ -943,6 +945,26 @@ Proposer à [NAME] de devenir votre ami(e) ?
 			<button name="Cancel" text="Annuler"/>
 		</form>
 	</notification>
+	<notification label="Enregistrer l&apos;article à porter" name="SaveWearableAs">
+		Enregistrer l&apos;article dans mon inventaire comme :
+		<form name="form">
+			<input name="message">
+				[DESC] (nouv.)
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
+	<notification label="Renommer la tenue" name="RenameOutfit">
+		Nouveau nom de la tenue :
+		<form name="form">
+			<input name="new_name">
+				[NAME]
+			</input>
+			<button name="Offer" text="OK"/>
+			<button name="Cancel" text="Annuler"/>
+		</form>
+	</notification>
 	<notification name="RemoveFromFriends">
 		Voulez-vous supprimer [FIRST_NAME] [LAST_NAME] de votre liste d&apos;amis ?
 		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
@@ -1555,7 +1577,7 @@ Souhaitez-vous en savoir plus sur les différentes catégories d&apos;accès ?
 	<notification name="RegionEntryAccessBlocked_Change">
 		La catégorie de contenu définie dans vos préférences ne vous permet pas de pénétrer dans cette région.
 
-Pour cela, cliquez sur Modifier les préférences afin de spécifier une catégorie plus élevée. Vous pourrez alors rechercher du contenu [REGIONMATURITY] et y accéder. Pour modifier ce paramètre ultérieurement, accédez à Moi &gt; Préférences &gt; Général, le moment voulu.
+Pour cela, vous devez modifier votre paramètre de catégorie de contenu. Vous pourrez alors rechercher du contenu [REGIONMATURITY] et y accéder. Pour annuler vos modifications, accédez à Moi &gt; Préférences &gt; Général.
 		<form name="form">
 			<button name="OK" text="Modifier les préférences"/>
 			<button default="true" name="Cancel" text="Fermer"/>
@@ -2573,6 +2595,21 @@ Pour y participer, cliquez sur Accepter. Sinon, cliquez sur Refuser. Pour ignore
 	<notification name="VoiceLoginRetry">
 		Nous sommes en train de créer un canal vocal pour vous. Veuillez patienter quelques instants.
 	</notification>
+	<notification name="VoiceEffectsExpired">
+		Au moins l&apos;un des effets de voix auxquels vous êtes abonné a expiré.
+[[URL] Cliquez ici] pour renouveler votre abonnement.
+	</notification>
+	<notification name="VoiceEffectsExpiredInUse">
+		L&apos;effet de voix actif a expiré. Vos paramètres de voix normaux ont été rétablis.
+[[URL] Cliquez ici] pour renouveler votre abonnement.
+	</notification>
+	<notification name="VoiceEffectsWillExpire">
+		Au moins l&apos;un de vos effets de voix expirera dans moins de [INTERVAL] jours.
+[[URL] Cliquez ici] pour renouveler votre abonnement.
+	</notification>
+	<notification name="VoiceEffectsNew">
+		De nouveaux effets de voix sont disponibles !
+	</notification>
 	<notification name="Cannot enter parcel: not a group member">
 		Seuls les membres d&apos;un certain groupe peuvent visiter cette zone.
 	</notification>
@@ -2639,18 +2676,36 @@ Elles vont être bloquées pendant quelques secondes pour votre sécurité.
 Le bouton sera affiché quand il y aura suffisamment de place.
 	</notification>
 	<notification name="ShareNotification">
-		Faire glisser des articles de l&apos;inventaire sur une personne dans le sélecteur de résident
+		Sélectionnez les résidents avec lesquels partager l&apos;élément.
+	</notification>
+	<notification name="ShareItemsConfirmation">
+		Voulez-vous vraiment partager les articles suivants :
+
+[ITEMS]
+
+avec les résidents suivants :
+
+[RESIDENTS] ?
+		<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Ok"/>
+	</notification>
+	<notification name="ItemsShared">
+		Articles partagés.
 	</notification>
 	<notification name="DeedToGroupFail">
 		Échec de cession au groupe.
 	</notification>
 	<notification name="AvatarRezNotification">
 		([EXISTENCE] secondes d&apos;existence)
-Nuage de l&apos;avatar [NAME] disparu en [TIME] secondes.
+Nuage de l&apos;avatar [NAME] disparu au bout de [TIME] secondes.
 	</notification>
-	<notification name="AvatarRezSelfNotification">
+	<notification name="AvatarRezSelfBakedDoneNotification">
 		([EXISTENCE] secondes d&apos;existence)
-Vous avez terminé de figer votre tenue en [TIME] secondes.
+Tenue figée au bout de [TIME] secondes.
+	</notification>
+	<notification name="AvatarRezSelfBakedUpdateNotification">
+		([EXISTENCE] secondes d&apos;existence)
+Mise à jour de votre apparence transmise au bout de [TIME] secondes.
+[STATUS]
 	</notification>
 	<notification name="AvatarRezCloudNotification">
 		([EXISTENCE] secondes d&apos;existence)
@@ -2672,9 +2727,31 @@ L&apos;avatar [NAME] est entré en mode Apparence.
 		([EXISTENCE] secondes d&apos;existence)
 L&apos;avatar [NAME] a quitté le mode Apparence.
 	</notification>
+	<notification name="NoConnect">
+		Problèmes de connexion via [PROTOCOL] [HOSTID].
+Veuillez vérifier la configuration de votre réseau et de votre pare-feu.
+		<form name="form">
+			<button name="OK" text="OK"/>
+		</form>
+	</notification>
+	<notification name="NoVoiceConnect">
+		Problèmes de connexion à votre serveur vocal :
+
+[HOSTID]
+
+Aucune communication vocale n&apos;est disponible.
+Veuillez vérifier la configuration de votre réseau et de votre pare-feu.
+		<form name="form">
+			<button name="OK" text="OK"/>
+		</form>
+	</notification>
 	<notification name="AvatarRezLeftNotification">
 		([EXISTENCE] secondes d&apos;existence)
 Départ de l&apos;avatar [NAME] entièrement chargé.
+	</notification>
+	<notification name="AvatarRezSelfBakeNotification">
+		([EXISTENCE] secondes d&apos;existence)
+Texture figée de [RESOLUTION] chargée pour [BODYREGION] au bout de [TIME] secondes.
 	</notification>
 	<notification name="ConfirmLeaveCall">
 		Voulez-vous vraiment quitter cet appel ?
@@ -2686,7 +2763,7 @@ Les résidents rejoignant l&apos;appel ultérieurement seront également
 ignorés, même si vous quittez l&apos;appel.
 
 Ignorer les autres ?
-		<usetemplate ignoretext="Confirmer avant d&apos;ignorer les autres lors d&apos;un appel de groupe" name="okcancelignore" notext="Ok" yestext="Annuler"/>
+		<usetemplate ignoretext="Confirmer avant d&apos;ignorer les autres lors d&apos;un appel de groupe" name="okcancelignore" notext="Annuler" yestext="Ok"/>
 	</notification>
 	<global name="UnsupportedCPU">
 		- Votre processeur ne remplit pas les conditions minimum requises.
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml
index 88f0635d97..6a5f71a36b 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml
@@ -1,8 +1,15 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="edit_shape_panel">
-	<text name="avatar_height">
-		Taille : [HEIGHT] mètres
-	</text>
+	<string name="meters">
+		mètres
+	</string>
+	<string name="feet">
+		pieds
+	</string>
+	<string name="height">
+		Taille :
+	</string>
+	<text name="avatar_height"/>
 	<panel label="Chemise" name="accordion_panel">
 		<accordion name="wearable_accordion">
 			<accordion_tab name="shape_body_tab" title="Corps"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
index e0762bd791..60c46a9f2e 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
@@ -72,8 +72,8 @@
 	<string name="jacket_desc_text">
 		Veste :
 	</string>
-	<string name="skirt_skirt_desc_text">
-		Jupe :
+	<string name="skirt_desc_text">
+		Jupe :
 	</string>
 	<string name="gloves_desc_text">
 		Gants :
@@ -100,11 +100,6 @@
 		<icon name="male_icon" tool_tip="Homme"/>
 		<icon name="female_icon" tool_tip="Femme"/>
 	</panel>
-	<panel label="gear_buttom_panel" name="gear_buttom_panel">
-		<button name="friends_viewsort_btn" tool_tip="Options"/>
-		<button name="add_btn" tool_tip="TODO"/>
-		<button name="del_btn" tool_tip="TODO"/>
-	</panel>
 	<panel name="button_panel">
 		<button label="Enregistrer sous" name="save_as_button"/>
 		<button label="Rétablir" name="revert_button" width="130"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
index 4c869d05c8..0764cfb6e7 100644
--- a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
@@ -13,7 +13,7 @@
 	<string name="Filter.All" value="Tout"/>
 	<string name="Filter.Clothes/Body" value="Habits/Corps"/>
 	<string name="Filter.Objects" value="Objets"/>
-	<button label="modifier" name="edit_wearable_btn"/>
+	<string name="Filter.Custom" value="Filtre personnalisé"/>
 	<text name="title" value="Modifier la tenue"/>
 	<panel label="bottom_panel" name="header_panel">
 		<panel label="bottom_panel" name="outfit_name_and_status">
@@ -23,20 +23,16 @@
 	</panel>
 	<layout_stack name="im_panels">
 		<layout_panel label="Panneau de contrôle IM" name="outfit_wearables_panel">
-			<panel label="bottom_panel" name="edit_panel"/>
-		</layout_panel>
-		<layout_panel name="add_wearables_panel">
-			<text name="add_to_outfit_label" value="Ajouter à la tenue :"/>
 			<layout_stack name="filter_panels">
-				<layout_panel label="Panneau de contrôle IM" name="filter_panel">
-					<filter_editor label="Filtre" name="look_item_filter"/>
+				<layout_panel name="add_button_and_combobox">
+					<button label="Ajouter plus..." name="show_add_wearables_btn"/>
+				</layout_panel>
+				<layout_panel name="filter_panel">
+					<filter_editor label="Filtrer ce qui peut être porté dans l&apos;inventaire" name="look_item_filter"/>
 				</layout_panel>
 			</layout_stack>
-			<panel label="add_wearables_button_bar" name="add_wearables_button_bar">
-				<button label="D" name="folder_view_btn"/>
-				<button label="L" name="list_view_btn"/>
-			</panel>
 		</layout_panel>
+		<layout_panel name="add_wearables_panel"/>
 	</layout_stack>
 	<panel name="save_revert_button_bar">
 		<button label="Enregistrer" name="save_btn"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
index f4fa3a2838..22e6adfb89 100644
--- a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
@@ -7,8 +7,7 @@
 	<panel name="bottom_panel">
 		<button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
 		<dnd_button name="trash_btn" tool_tip="Supprimer l&apos;objet sélectionné"/>
-		<button label="Enregistrer la tenue" name="make_outfit_btn" tool_tip="Enregistrer l&apos;apparence comme tenue"/>
+		<button label="Enregistrer sous" name="save_btn"/>
 		<button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/>
-		<button label="Modifier tenue" name="edit_current_outfit_btn"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml
index 9990c4612d..efb06cfce9 100644
--- a/indra/newview/skins/default/xui/fr/panel_places.xml
+++ b/indra/newview/skins/default/xui/fr/panel_places.xml
@@ -5,12 +5,12 @@
 	<filter_editor label="Filtrer les endroits" name="Filter"/>
 	<panel name="button_panel">
 		<button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone sélectionnée"/>
-		<button label="Carte" name="map_btn"/>
+		<button label="Carte" name="map_btn" tool_tip="Afficher la zone correspondante sur la carte du monde"/>
 		<button label="Éditer" name="edit_btn" tool_tip="Modifier les informations du repère"/>
 		<button label="▼" name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
 		<button label="Enregistrer" name="save_btn"/>
 		<button label="Annuler" name="cancel_btn"/>
 		<button label="Fermer" name="close_btn"/>
-		<button label="Profil" name="profile_btn"/>
+		<button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l&apos;endroit"/>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
index 6b8e68bd98..9af3a8a5d8 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
@@ -13,7 +13,7 @@
 	</text>
 	<check_box label="Construire/Modifier" name="edit_camera_movement" tool_tip="Utilisez le positionnement automatique de la caméra quand vous accédez au mode de modification et quand vous le quittez"/>
 	<check_box label="Apparence" name="appearance_camera_movement" tool_tip="Utiliser le positionnement automatique de la caméra quand je suis en mode Édition"/>
-	<check_box label="Panneau latéral" name="appearance_sidebar_positioning" tool_tip="Positionnement auto de la caméra pour le panneau latéral"/>
+	<check_box initial_value="true" label="Panneau latéral" name="appearance_sidebar_positioning" tool_tip="Positionnement auto de la caméra pour le panneau latéral"/>
 	<check_box label="Afficher en vue subjective" name="first_person_avatar_visible"/>
 	<check_box label="Les touches de direction me font toujours me déplacer" name="arrow_keys_move_avatar_check"/>
 	<check_box label="Appuyer deux fois et maintenir enfoncé pour courir" name="tap_tap_hold_to_run"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
index dffb1d4238..3c56fa68e7 100644
--- a/indra/newview/skins/default/xui/fr/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
@@ -21,8 +21,10 @@
 	<panel.string name="buycurrencylabel">
 		[AMT] L$
 	</panel.string>
-	<button label="" label_selected="" name="buycurrency" tool_tip="Mon solde"/>
-	<button label="Acheter L$" name="buyL" tool_tip="Cliquez pour acheter plus de L$"/>
+	<panel name="balance_bg">
+		<text name="balance" tool_tip="Mon solde" value="20 L$"/>
+		<button label="ACHETER L$" name="buyL" tool_tip="Cliquer pour acheter plus de L$"/>
+	</panel>
 	<text name="TimeText" tool_tip="Heure actuelle (Pacifique)">
 		00h00 PST
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
index 893b64d4b2..ebee1af45b 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
@@ -2,12 +2,12 @@
 <panel label="Choses" name="objects panel">
 	<panel label="" name="sidepanel__inventory_panel">
 		<panel name="button_panel">
-			<button label="Profil" name="info_btn"/>
-			<button label="Partager" name="share_btn"/>
-			<button label="Acheter" name="shop_btn"/>
-			<button label="Porter" name="wear_btn"/>
+			<button label="Profil" name="info_btn" tool_tip="Afficher le profil de l&apos;objet"/>
+			<button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire"/>
+			<button label="Acheter" name="shop_btn" tool_tip="Accéder à la place du marché sur le Web"/>
+			<button label="Porter" name="wear_btn" tool_tip="Porter la tenue sélectionnée"/>
 			<button label="Jouer" name="play_btn"/>
-			<button label="Téléporter" name="teleport_btn"/>
+			<button label="Téléporter" name="teleport_btn" tool_tip="Me téléporter jusqu&apos;à la zone sélectionnée"/>
 		</panel>
 	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 15d5847c58..d95cfaedb4 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -107,7 +107,7 @@
 		Nom d&apos;hôte non valide utilisé pour accéder au serveur. Vérifiez votre nom d&apos;hôte de grille ou SLURL.
 	</string>
 	<string name="CertExpired">
-		Il semble que le certificat renvoyé par la grille ait expiré. Vérifiez votre horloge système ou contactez l&apos;administrateur de la grille.
+		Il semble que le certificat renvoyé par la grille ait expiré.  Vérifiez votre horloge système ou contactez l&apos;administrateur de la grille.
 	</string>
 	<string name="CertKeyUsage">
 		Impossible d&apos;utiliser le certificat renvoyé par le serveur pour SSL. Contactez l&apos;administrateur de la grille.
@@ -116,7 +116,7 @@
 		Certificats trop nombreux dans la chaîne des certificats du serveur. Contactez l&apos;administrateur de la grille.
 	</string>
 	<string name="CertInvalidSignature">
-		Impossible de vérifier la signature de certificat renvoyée par le serveur de la grille. Contactez l&apos;administrateur de la grille.
+		Impossible de vérifier la signature de certificat renvoyée par le serveur de la grille.  Contactez l&apos;administrateur de la grille.
 	</string>
 	<string name="LoginFailedNoNetwork">
 		Erreur réseau : impossible d&apos;établir la connexion. Veuillez vérifier votre connexion réseau.
@@ -753,6 +753,12 @@
 	<string name="land_type_unknown">
 		(inconnu)
 	</string>
+	<string name="Estate / Full Region">
+		Domaine / Région entière
+	</string>
+	<string name="Mainland / Full Region">
+		Continent / Région entière
+	</string>
 	<string name="all_files">
 		Tous fichiers
 	</string>
@@ -897,6 +903,9 @@
 	<string name="NewWearable">
 		Nouv. [WEARABLE_ITEM]
 	</string>
+	<string name="CreateNewWearable">
+		Créer [WEARABLE_TYPE]
+	</string>
 	<string name="next">
 		Suivant
 	</string>
@@ -3550,6 +3559,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 	<string name="session_initialization_timed_out_error">
 		Expiration du délai d&apos;initialisation de la session
 	</string>
+	<string name="voice_morphing_url">
+		http://secondlife.com/landing/voicemorphing
+	</string>
 	<string name="paid_you_ldollars">
 		[NAME] vous a payé [AMOUNT] L$
 	</string>
@@ -3720,16 +3732,16 @@ de l&apos;infraction signalée
 	<string name="Male - Wow">
 		Homme - Ouah !
 	</string>
-	<string name="FeMale - Excuse me">
+	<string name="Female - Excuse me">
 		Femme - Demander pardon
 	</string>
-	<string name="FeMale - Get lost">
+	<string name="Female - Get lost">
 		Femme - Dire d&apos;aller au diable
 	</string>
-	<string name="FeMale - Blow kiss">
+	<string name="Female - Blow kiss">
 		Femme - Envoyer un baiser
 	</string>
-	<string name="FeMale - Boo">
+	<string name="Female - Boo">
 		Femme - Hou !
 	</string>
 	<string name="Female - Bored">
@@ -3762,4 +3774,32 @@ de l&apos;infraction signalée
 	<string name="texture_load_dimensions_error">
 		Impossible de charger des images de taille supérieure à [WIDTH]*[HEIGHT]
 	</string>
+	<string name="words_separator" value=","/>
+	<string name="server_is_down">
+		Malgré nos efforts, une erreur inattendue s&apos;est produite.
+
+	Veuillez vous reporter à status.secondlifegrid.net afin de déterminer si un problème connu existe avec ce service.  
+        Si le problème persiste, vérifiez la configuration de votre réseau et de votre pare-feu.
+	</string>
+	<string name="dateTimeWeekdaysNames">
+		Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
+	</string>
+	<string name="dateTimeWeekdaysShortNames">
+		Sun:Mon:Tue:Wed:Thu:Fri:Sat
+	</string>
+	<string name="dateTimeMonthNames">
+		January:February:March:April:May:June:July:August:September:October:November:December
+	</string>
+	<string name="dateTimeMonthShortNames">
+		Jan:Feb:Mar:Apr:May:Jun:Jul:Aug:Sep:Oct:Nov:Dec
+	</string>
+	<string name="dateTimeDayFormat">
+		[MDAY]
+	</string>
+	<string name="dateTimeAM">
+		AM
+	</string>
+	<string name="dateTimePM">
+		PM
+	</string>
 </strings>
-- 
cgit v1.2.3


From 049d84838c2dbfc69c10d1b7d541b9811c8ae727 Mon Sep 17 00:00:00 2001
From: Eli Linden <eli@lindenlab.com>
Date: Wed, 23 Jun 2010 14:11:11 -0700
Subject: ND-47489 WIP FR translation for set 12

---
 .../skins/default/xui/fr/floater_voice_effect.xml  | 29 ++++++++++++++++++++++
 .../skins/default/xui/fr/menu_cof_attachment.xml   |  4 +++
 .../skins/default/xui/fr/menu_cof_body_part.xml    |  5 ++++
 .../skins/default/xui/fr/menu_cof_clothing.xml     |  7 ++++++
 .../newview/skins/default/xui/fr/menu_cof_gear.xml |  5 ++++
 .../skins/default/xui/fr/menu_outfit_gear.xml      | 26 +++++++++++++++++++
 .../skins/default/xui/fr/menu_outfit_tab.xml       |  9 +++++++
 .../default/xui/fr/menu_wearable_list_item.xml     | 13 ++++++++++
 .../skins/default/xui/fr/panel_voice_effect.xml    | 15 +++++++++++
 9 files changed, 113 insertions(+)
 create mode 100644 indra/newview/skins/default/xui/fr/floater_voice_effect.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_cof_attachment.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_cof_body_part.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_cof_clothing.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_cof_gear.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_outfit_gear.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_outfit_tab.xml
 create mode 100644 indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml
 create mode 100644 indra/newview/skins/default/xui/fr/panel_voice_effect.xml

diff --git a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
new file mode 100644
index 0000000000..d7f0ff7f6b
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater label="Endroits" name="voice_effects" title="APERÇU DES EFFETS DE VOIX">
+	<string name="no_voice_effect">
+		(Aucun effet de voix)
+	</string>
+	<string name="active_voice_effect">
+		(Actif)
+	</string>
+	<string name="unsubscribed_voice_effect">
+		(Pas d&apos;abonnement)
+	</string>
+	<string name="new_voice_effect">
+		(Nouveau !)
+	</string>
+	<text name="status_text">
+		Pour obtenir un aperçu des effets, enregistrez un court extrait de votre voix en cliquant sur le bouton ci-dessous, puis cliquez sur l&apos;une des entrées de la liste. Vous entendrez alors le son de votre voix transformée.
+
+Pour vous reconnecter au chat vocal près de vous, fermez cette fenêtre.
+	</text>
+	<button label="Enregistrer un extrait" name="record_btn" tool_tip="Enregistrez un extrait de votre voix."/>
+	<button label="Arrêter" name="record_stop_btn"/>
+	<text name="voice_morphing_link">
+		[[URL] Obtenir un effet de voix]
+	</text>
+	<scroll_list name="voice_effect_list" tool_tip="Enregistrez un extrait de votre voix, puis cliquez sur un effet pour obtenir un aperçu.">
+		<scroll_list.columns label="Effet de voix" name="name"/>
+		<scroll_list.columns label="Date d&apos;expiration" name="expires"/>
+	</scroll_list>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml b/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml
new file mode 100644
index 0000000000..a4ead48b6b
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+	<menu_item_call label="Détacher" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml b/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml
new file mode 100644
index 0000000000..4b6907fcc6
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+	<menu_item_call label="Remplacer" name="replace"/>
+	<menu_item_call label="Modifier" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml b/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml
new file mode 100644
index 0000000000..c5641c756a
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+	<menu_item_call label="Enlever" name="take_off"/>
+	<menu_item_call label="Couche supérieure" name="move_up"/>
+	<menu_item_call label="Couche inférieure" name="move_down"/>
+	<menu_item_call label="Modifier" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_gear.xml b/indra/newview/skins/default/xui/fr/menu_cof_gear.xml
new file mode 100644
index 0000000000..8276d57025
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+	<menu label="Nouveaux habits" name="COF.Gear.New_Clothes"/>
+	<menu label="Nouvelles parties du corps" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml b/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml
new file mode 100644
index 0000000000..93730c6206
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+	<menu_item_call label="Porter - Remplacer la tenue actuelle" name="wear"/>
+	<menu_item_call label="Enlever - Supprimer de la tenue actuelle" name="take_off"/>
+	<menu label="Nouveaux habits" name="New Clothes">
+		<menu_item_call label="Nouvelle chemise" name="New Shirt"/>
+		<menu_item_call label="Nouveau pantalon" name="New Pants"/>
+		<menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
+		<menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
+		<menu_item_call label="Nouvelle veste" name="New Jacket"/>
+		<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
+		<menu_item_call label="Nouveaux gants" name="New Gloves"/>
+		<menu_item_call label="Nouveau débardeur" name="New Undershirt"/>
+		<menu_item_call label="Nouveau caleçon" name="New Underpants"/>
+		<menu_item_call label="Nouvel alpha" name="New Alpha"/>
+		<menu_item_call label="Nouveau tatouage" name="New Tattoo"/>
+	</menu>
+	<menu label="Nouvelles parties du corps" name="New Body Parts">
+		<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
+		<menu_item_call label="Nouvelle peau" name="New Skin"/>
+		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
+		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
+	</menu>
+	<menu_item_call label="Renommer la tenue" name="rename"/>
+	<menu_item_call label="Supprimer la tenue" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml b/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml
new file mode 100644
index 0000000000..a68715108f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+	<menu_item_call label="Porter - Remplacer la tenue actuelle" name="wear_replace"/>
+	<menu_item_call label="Porter - Ajouter à la tenue actuelle" name="wear_add"/>
+	<menu_item_call label="Enlever - Supprimer de la tenue actuelle" name="take_off"/>
+	<menu_item_call label="Modifier la tenue" name="edit"/>
+	<menu_item_call label="Renommer" name="rename"/>
+	<menu_item_call label="Supprimer la tenue" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml
new file mode 100644
index 0000000000..207ba79148
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+	<menu_item_call label="Porter" name="wear"/>
+	<menu_item_call label="Ajouter" name="wear_add"/>
+	<menu_item_call label="Enlever / Détacher" name="take_off_or_detach"/>
+	<menu_item_call label="Détacher" name="detach"/>
+	<context_menu label="Attacher à  ▶" name="wearable_attach_to"/>
+	<context_menu label="Attacher au HUD  ▶" name="wearable_attach_to_hud"/>
+	<menu_item_call label="Enlever" name="take_off"/>
+	<menu_item_call label="Modifier" name="edit"/>
+	<menu_item_call label="Profil de l&apos;objet" name="object_profile"/>
+	<menu_item_call label="Afficher l&apos;original" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/fr/panel_voice_effect.xml b/indra/newview/skins/default/xui/fr/panel_voice_effect.xml
new file mode 100644
index 0000000000..01734295f2
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_voice_effect.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_voice_effect">
+	<string name="no_voice_effect">
+		Aucun effet de voix
+	</string>
+	<string name="preview_voice_effects">
+		Aperçu des effets de voix  ▶
+	</string>
+	<string name="get_voice_effects">
+		Obtenir un effet de voix  ▶
+	</string>
+	<combo_box name="voice_effect" tool_tip="Sélectionnez un effet pour modifier le son de votre voix.">
+		<combo_box.item label="Aucun effet de voix" name="no_voice_effect"/>
+	</combo_box>
+</panel>
-- 
cgit v1.2.3


From c964abf525f81bc1263eaf3a447b40c63d08c9ac Mon Sep 17 00:00:00 2001
From: "Nyx (Neal Orman)" <nyx@lindenlab.com>
Date: Wed, 23 Jun 2010 18:35:29 -0400
Subject: EXT-7988 FIX wrong highlight color for worn items

green is too green. EmphasisColor is the new green.

Reviewed by Erica
---
 indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
index 49c2abe1a5..50be0ac1a1 100644
--- a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
@@ -15,5 +15,5 @@
   <worn_style
    font="SansSerifSmall"
    font.style="BOLD"
-   color="green" />
+   color="EmphasisColor" />
 </inventory_list_item>
-- 
cgit v1.2.3


From 9aad53a4370b7647e4f907be7c3dc908906491b9 Mon Sep 17 00:00:00 2001
From: Andrew Dyukov <adyukov@productengine.com>
Date: Thu, 24 Jun 2010 01:52:26 +0300
Subject: EXT-7158 FIXED Implemented showing of full outfit content if its name
 or any item(s) inside it match current filter.

- Added availability to force showing unmatched items to LLFlatListViewEx

- Applied it to wearable items lists in LLOutfitsList

- Changed condition for outfit accordion tab showing (because now all items are visible, so checking their number doesn't help).
Used here check for a flag added in this fix, which tells whether last applied filter found any matches in the list.

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

--HG--
branch : product-engine
---
 indra/llui/llflatlistview.cpp   | 21 ++++++++++++++++++++-
 indra/llui/llflatlistview.h     | 17 +++++++++++++++++
 indra/newview/lloutfitslist.cpp |  7 ++++++-
 3 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index c7463e581c..f22b49f30f 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -1226,6 +1226,8 @@ LLFlatListViewEx::LLFlatListViewEx(const Params& p)
 :	LLFlatListView(p)
 , mNoFilteredItemsMsg(p.no_filtered_items_msg)
 , mNoItemsMsg(p.no_items_msg)
+, mForceShowingUnmatchedItems(false)
+, mLastFilterSucceded(false)
 {
 
 }
@@ -1250,6 +1252,16 @@ void LLFlatListViewEx::updateNoItemsMessage(const std::string& filter_string)
 
 }
 
+bool LLFlatListViewEx::getForceShowingUnmatchedItems()
+{
+	return mForceShowingUnmatchedItems;
+}
+
+void LLFlatListViewEx::setForceShowingUnmatchedItems(bool show)
+{
+	mForceShowingUnmatchedItems = show;
+}
+
 void LLFlatListViewEx::setFilterSubString(const std::string& filter_str)
 {
 	if (0 != LLStringUtil::compareInsensitive(filter_str, mFilterSubString))
@@ -1273,6 +1285,7 @@ void LLFlatListViewEx::filterItems()
 	item_panel_list_t items;
 	getItems(items);
 
+	mLastFilterSucceded = false;
 	for (item_panel_list_t::iterator
 			 iter = items.begin(),
 			 iter_end = items.end();
@@ -1283,13 +1296,14 @@ 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;
 			pItem->setVisible(true);
 		}
 		else
 		{
 			// TODO: implement (re)storing of current selection.
 			selectItem(pItem, false);
-			pItem->setVisible(false);
+			pItem->setVisible(mForceShowingUnmatchedItems);
 		}
 	}
 
@@ -1297,4 +1311,9 @@ void LLFlatListViewEx::filterItems()
 	notifyParentItemsRectChanged();
 }
 
+bool LLFlatListViewEx::wasLasFilterSuccessfull()
+{
+	return mLastFilterSucceded;
+}
+
 //EOF
diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h
index 0820a7ab67..caeddfc179 100644
--- a/indra/llui/llflatlistview.h
+++ b/indra/llui/llflatlistview.h
@@ -470,6 +470,10 @@ public:
 	void setNoItemsMsg(const std::string& msg) { mNoItemsMsg = msg; }
 	void setNoFilteredItemsMsg(const std::string& msg) { mNoFilteredItemsMsg = msg; }
 
+	bool getForceShowingUnmatchedItems();
+
+	void setForceShowingUnmatchedItems(bool show);
+
 	/**
 	 * Sets up new filter string and filters the list.
 	 */
@@ -481,6 +485,11 @@ public:
 	 */
 	void filterItems();
 
+	/**
+	 * Returns true if last call of filterItems() found at least one matching item
+	 */
+	bool wasLasFilterSuccessfull();
+
 protected:
 	LLFlatListViewEx(const Params& p);
 
@@ -496,6 +505,14 @@ private:
 	std::string mNoFilteredItemsMsg;
 	std::string mNoItemsMsg;
 	std::string	mFilterSubString;
+	/**
+	 * Show list items that don't match current filter
+	 */
+	bool mForceShowingUnmatchedItems;
+	/**
+	 * True if last call of filterItems() found at least one matching item
+	 */
+	bool mLastFilterSucceded;
 };
 
 #endif
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index b8489d450b..67442dd573 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -439,6 +439,9 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
 		// Setting callback to reset items selection inside outfit on accordion collapsing and expanding (EXT-7875)
 		tab->setDropDownStateChangedCallback(boost::bind(&LLOutfitsList::resetItemSelection, this, list, cat_id));
 
+		// force showing list items that don't match current filter(EXT-7158)
+		list->setForceShowingUnmatchedItems(true);
+
 		// Setting list commit callback to monitor currently selected wearable item.
 		list->setCommitCallback(boost::bind(&LLOutfitsList::onSelectionChange, this, _1));
 
@@ -850,6 +853,8 @@ void LLOutfitsList::applyFilter(const std::string& new_filter_substring)
 			restoreOutfitSelection(tab, iter->first);
 		}
 	}
+
+	mAccordion->arrange();
 }
 
 void LLOutfitsList::applyFilterToTab(
@@ -873,7 +878,7 @@ void LLOutfitsList::applyFilterToTab(
 	{
 		// hide tab if its title doesn't pass filter
 		// and it has no visible items
-		tab->setVisible(list->size() > 0);
+		tab->setVisible(list->wasLasFilterSuccessfull());
 
 		// remove title highlighting because it might
 		// have been previously highlighted by less restrictive filter
-- 
cgit v1.2.3


From be059c2111d1eb880a8b0e5565690ff528d30587 Mon Sep 17 00:00:00 2001
From: "jonathanwolk@149.2.168.192.in-addr.arpa"
 <jonathanwolk@149.2.168.192.in-addr.arpa>
Date: Wed, 23 Jun 2010 16:14:22 -0700
Subject: Fix for EXT-6954 'rendering artifact when editing an object.' 
 Reviewed by qarl

---
 indra/newview/llmanip.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp
index 957e88960d..a43118755e 100644
--- a/indra/newview/llmanip.cpp
+++ b/indra/newview/llmanip.cpp
@@ -435,12 +435,12 @@ void LLManip::renderXYZ(const LLVector3 &vec)
 	S32 vertical_offset = window_center_y - VERTICAL_OFFSET;
 
 
-	glPushMatrix();
+	gGL.pushMatrix();
 	{
 		LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square");
 		gViewerWindow->setup2DRender();
 		const LLVector2& display_scale = gViewerWindow->getDisplayScale();
-		glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
+		gGL.scalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
 		gGL.color4f(0.f, 0.f, 0.f, 0.7f);
 
 		imagep->draw(
@@ -450,7 +450,7 @@ void LLManip::renderXYZ(const LLVector3 &vec)
 			PAD * 2 + 10, 
 			LLColor4(0.f, 0.f, 0.f, 0.7f) );
 	}
-	glPopMatrix();
+	gGL.popMatrix();
 
 	gViewerWindow->setup3DRender();
 
-- 
cgit v1.2.3


From 0aabcc81346390fe312bf03355744a6e13ab0927 Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 23 Jun 2010 16:50:06 -0700
Subject: EXT-7767 FIX Outfit editor doesn't appear to have a default camera
 view

---
 indra/newview/llagentcamera.cpp | 74 ++++++++++++++++++++++-------------------
 indra/newview/llagentcamera.h   |  3 +-
 indra/newview/llmorphview.cpp   |  2 --
 indra/newview/llmorphview.h     |  7 ++--
 indra/newview/llvoavatar.cpp    |  2 +-
 5 files changed, 43 insertions(+), 45 deletions(-)

diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 9cf0a659c1..70f9fa03e4 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -156,7 +156,6 @@ LLAgentCamera::LLAgentCamera() :
 	mFocusObjectOffset(),
 	mFocusDotRadius( 0.1f ),			// meters
 	mTrackFocusObject(TRUE),
-	mUIOffset(0.f),
 
 	mAtKey(0), // Either 1, 0, or -1... indicates that movement-key is pressed
 	mWalkKey(0), // like AtKey, but causes less forward thrust
@@ -1407,13 +1406,6 @@ void LLAgentCamera::updateCamera()
 
 //	llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl;
 
-	F32 ui_offset = 0.f;
-	if( CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode ) 
-	{
-		ui_offset = calcCustomizeAvatarUIOffset( camera_pos_global );
-	}
-
-
 	LLVector3 focus_agent = gAgent.getPosAgentFromGlobal(mFocusGlobal);
 	
 	mCameraPositionAgent = gAgent.getPosAgentFromGlobal(camera_pos_global);
@@ -1424,9 +1416,6 @@ void LLAgentCamera::updateCamera()
 	LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, mCameraUpVector, focus_agent);
 	//LLViewerCamera::getInstance()->updateCameraLocation(mCameraPositionAgent, camera_skyward, focus_agent);
 	//end Ventrella
-
-	//RN: translate UI offset after camera is oriented properly
-	LLViewerCamera::getInstance()->translate(LLViewerCamera::getInstance()->getLeftAxis() * ui_offset);
 	
 	// Change FOV
 	LLViewerCamera::getInstance()->setView(LLViewerCamera::getInstance()->getDefaultFOV() / (1.f + mCameraCurrentFOVZoomFactor));
@@ -1531,18 +1520,6 @@ void LLAgentCamera::validateFocusObject()
 	}
 }
 
-//-----------------------------------------------------------------------------
-// calcCustomizeAvatarUIOffset()
-//-----------------------------------------------------------------------------
-F32 LLAgentCamera::calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global)
-{
-	F32 ui_offset = 0.f;
-
-	F32 range = (F32)dist_vec(camera_pos_global, getFocusGlobal());
-	mUIOffset = lerp(mUIOffset, ui_offset, LLCriticalDamp::getInterpolant(0.05f));
-	return mUIOffset * range;
-}
-
 //-----------------------------------------------------------------------------
 // calcFocusPositionTargetGlobal()
 //-----------------------------------------------------------------------------
@@ -2332,6 +2309,18 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came
 		LLVOAvatarSelf::onCustomizeStart();
 	}
 
+
+	// default focus point for customize avatar
+	LLVector3 focus_target;
+	if (isAgentAvatarValid())
+	{
+		focus_target = gAgentAvatarp->mHeadp->getWorldPosition();
+	}
+	else
+	{
+		focus_target = gAgent.getPositionAgent();
+	}
+
 	if (isAgentAvatarValid())
 	{
 		if(avatar_animate)
@@ -2339,7 +2328,7 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came
 			// slamming the avatar's axis to the camera so that when the rotation
 			// completes it correctly points to the front of the avatar
 			// Remove any pitch or rotation from the avatar
-			LLVector3 at = LLViewerCamera::getInstance()->getAtAxis();
+			LLVector3 at = gAgent.getAtAxis();
 			at.mV[VZ] = 0.f;
 			at.normalize();
 			gAgent.resetAxes(at);
@@ -2351,17 +2340,25 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came
 
 			if (turn_motion)
 			{
-				mAnimationDuration = turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP;
+				setAnimationDuration(turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP);
 
 			}
 			else
 			{
-				mAnimationDuration = gSavedSettings.getF32("ZoomTime");
+				setAnimationDuration(gSavedSettings.getF32("ZoomTime"));
 			}
 		}
 
-		// this is what sets the avatar as the mFocusTargetGlobal
-		setFocusGlobal(LLVector3d::zero);
+		LLVector3 agent_at = gAgent.getAtAxis();
+		agent_at.mV[VZ] = 0.f;
+		agent_at.normalize();
+
+		LLVector3d camera_offset(agent_at * -1.0);
+		// push camera up and out from avatar
+		camera_offset.mdV[VZ] = 0.1f; 
+		camera_offset *= 3.5f;
+		LLVector3d focus_target_global = gAgent.getPosGlobalFromAgent(focus_target);
+		setCameraPosAndFocusGlobal(focus_target_global + camera_offset, focus_target_global, gAgent.getID());
 		
 		gAgentAvatarp->updateMeshTextures();
 	}
@@ -2391,6 +2388,19 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset)
 // Focus point management
 //
 
+void LLAgentCamera::setAnimationDuration(F32 duration)
+{ 
+	if (mCameraAnimating)
+	{
+		F32 animation_left = llmax(0.f, mAnimationDuration - mAnimationTimer.getElapsedTimeF32());
+		mAnimationDuration = llmax(duration, animation_left);
+	}
+	else
+	{
+		mAnimationDuration = duration; 
+	}
+}
+
 //-----------------------------------------------------------------------------
 // startCameraAnimation()
 //-----------------------------------------------------------------------------
@@ -2398,9 +2408,9 @@ void LLAgentCamera::startCameraAnimation()
 {
 	mAnimationCameraStartGlobal = getCameraPositionGlobal();
 	mAnimationFocusStartGlobal = mFocusGlobal;
+	setAnimationDuration(gSavedSettings.getF32("ZoomTime"));
 	mAnimationTimer.reset();
 	mCameraAnimating = TRUE;
-	mAnimationDuration = gSavedSettings.getF32("ZoomTime");
 }
 
 //-----------------------------------------------------------------------------
@@ -2546,12 +2556,6 @@ void LLAgentCamera::setCameraPosAndFocusGlobal(const LLVector3d& camera_pos, con
 	if (focus_delta_squared > ANIM_EPSILON_SQUARED)
 	{
 		startCameraAnimation();
-
-		if (CAMERA_MODE_CUSTOMIZE_AVATAR == mCameraMode) 
-		{
-			// Compensate for the fact that the camera has already been offset to make room for LLFloaterCustomize.
-			mAnimationCameraStartGlobal -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * calcCustomizeAvatarUIOffset( mAnimationCameraStartGlobal ));
-		}
 	}
 	
 	//LLViewerCamera::getInstance()->setOrigin( gAgent.getPosAgentFromGlobal( camera_pos ) );
diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h
index 7afb5c0ed9..aba8b0b67f 100644
--- a/indra/newview/llagentcamera.h
+++ b/indra/newview/llagentcamera.h
@@ -184,7 +184,7 @@ private:
 public:
 	void			setCameraAnimating(BOOL b)			{ mCameraAnimating = b; }
 	BOOL			getCameraAnimating()				{ return mCameraAnimating; }
-	void			setAnimationDuration(F32 seconds) 	{ mAnimationDuration = seconds; }
+	void			setAnimationDuration(F32 seconds);
 	void			startCameraAnimation();
 	void			stopCameraAnimation();
 private:
@@ -225,7 +225,6 @@ private:
 	LLVector3		mFocusObjectOffset;
 	F32				mFocusDotRadius; 				// Meters
 	BOOL			mTrackFocusObject;
-	F32				mUIOffset;	
 	
 	//--------------------------------------------------------------------
 	// Lookat / Pointat
diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp
index 4c28e98e62..61fc932bab 100644
--- a/indra/newview/llmorphview.cpp
+++ b/indra/newview/llmorphview.cpp
@@ -75,7 +75,6 @@ LLMorphView::LLMorphView(const LLMorphView::Params& p)
 	mOldCameraNearClip( 0.f ),
 	mCameraPitch( 0.f ),
 	mCameraYaw( 0.f ),
-	mCameraDist( -1.f ),
 	mCameraDrivenByKeys( FALSE )
 {}
 
@@ -86,7 +85,6 @@ void	LLMorphView::initialize()
 {
 	mCameraPitch = 0.f;
 	mCameraYaw = 0.f;
-	mCameraDist = -1.f;
 
 	if (!isAgentAvatarValid() || gAgentAvatarp->isDead())
 	{
diff --git a/indra/newview/llmorphview.h b/indra/newview/llmorphview.h
index 493f906c6b..f0f04dfda3 100644
--- a/indra/newview/llmorphview.h
+++ b/indra/newview/llmorphview.h
@@ -53,7 +53,6 @@ public:
 	};
 	LLMorphView(const LLMorphView::Params&);
 	
-	void		initialize();
 	void		shutdown();
 
 	// inherited methods
@@ -64,12 +63,13 @@ public:
 
 	void		setCameraOffset(const LLVector3d& camera_offset)	{mCameraOffset = camera_offset;}
 	void		setCameraTargetOffset(const LLVector3d& camera_target_offset) {mCameraTargetOffset = camera_target_offset;}
-	void		setCameraDistToDefault()					{ mCameraDist = -1.f; }
 
 	void		updateCamera();
 	void		setCameraDrivenByKeys( BOOL b );
 
 protected:
+	void		initialize();
+
 	LLJoint*	mCameraTargetJoint;
 	LLVector3d	mCameraOffset;
 	LLVector3d	mCameraTargetOffset;
@@ -82,9 +82,6 @@ protected:
 	F32			mCameraPitch;
 	F32			mCameraYaw;
 
-	// camera zoom
-	F32			mCameraDist;
-
 	BOOL		mCameraDrivenByKeys;
 };
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 4ef166fb71..f2f91dcc4a 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3201,7 +3201,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
 		visible = (LLDrawable::getCurrentFrame()+mID.mData[0])%mUpdatePeriod == 0 ? TRUE : FALSE;
 	}
 
-	if (!visible)
+	if (!visible && !isSelf())
 	{
 		updateMotions(LLCharacter::HIDDEN_UPDATE);
 		return FALSE;
-- 
cgit v1.2.3


From bb083dfca471edde7d44f161be2aabca92e72d02 Mon Sep 17 00:00:00 2001
From: "Nyx (Neal Orman)" <nyx@lindenlab.com>
Date: Wed, 23 Jun 2010 20:53:24 -0400
Subject: EXT-7958 FIX fixed shop button in the appearance sidepanel

updated icon, and fixed XUI so it displays properly.

Code reviewed by Monroe
---
 indra/newview/llpaneloutfitedit.cpp                   |   3 ++-
 indra/newview/skins/default/textures/icons/Shop.png   | Bin 647 -> 3104 bytes
 .../skins/default/xui/en/panel_outfit_edit.xml        |  18 +++++++++++++++---
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index aac020087b..ea7d233333 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -328,7 +328,8 @@ BOOL LLPanelOutfitEdit::postBuild()
 	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL);
 	childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
 	childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);
-	childSetCommitCallback("shop_btn", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
+	childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
+	childSetCommitCallback("shop_btn_2", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);
 
 	mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
 	mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this));
diff --git a/indra/newview/skins/default/textures/icons/Shop.png b/indra/newview/skins/default/textures/icons/Shop.png
index d7e0001dc6..9d091fed44 100644
Binary files a/indra/newview/skins/default/textures/icons/Shop.png and b/indra/newview/skins/default/textures/icons/Shop.png differ
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 d6549adfef..4abd7dceac 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -391,12 +391,12 @@ It is calculated as border_size + 2*UIResizeBarOverlap
          follows="bottom|right"
          height="25"
          image_hover_unselected="Toolbar_Middle_Over"
-         image_overlay="AddItem_Off"
+         image_overlay="Shop"
          image_selected="Toolbar_Middle_Selected"
          image_unselected="Toolbar_Middle_Off"
          layout="topleft"
          left_pad="0"
-         name="shop_btn"
+         name="shop_btn_1"
          top="1"
          width="31" />
     </panel>
@@ -472,8 +472,20 @@ It is calculated as border_size + 2*UIResizeBarOverlap
          layout="topleft"
          left_pad="1"
          name="dummy_right_icon"
-         width="184" >
+         width="153" >
         </icon>
+        <button
+         follows="bottom|right"
+         height="25"
+         image_hover_unselected="Toolbar_Middle_Over"
+         image_overlay="Shop"
+         image_selected="Toolbar_Middle_Selected"
+         image_unselected="Toolbar_Middle_Off"
+         layout="topleft"
+         left_pad="0"
+         name="shop_btn_2"
+         top="1"
+         width="31" />
     </panel>
     
     <!-- SAVE AND REVERT BUTTONS -->
-- 
cgit v1.2.3


From 6dd35018d2f7aa84973b8e7ff743e8de6454f01c Mon Sep 17 00:00:00 2001
From: Richard Nelson <none@none>
Date: Wed, 23 Jun 2010 18:32:31 -0700
Subject: EXT-7767 FIX Outfit editor doesn't appear to have a default camera
 view added some comments and cleaned up code based on review

---
 indra/newview/llagentcamera.cpp       | 7 ++++---
 indra/newview/llagentcamera.h         | 1 -
 indra/newview/llpaneleditwearable.cpp | 1 -
 indra/newview/lltoolfocus.cpp         | 1 -
 indra/newview/llvoavatar.cpp          | 3 +++
 5 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 70f9fa03e4..e1a0162441 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -95,6 +95,8 @@ const F32 OBJECT_MIN_ZOOM = 0.02f;
 const F32 APPEARANCE_MIN_ZOOM = 0.39f;
 const F32 APPEARANCE_MAX_ZOOM = 8.f;
 
+const F32 CUSTOMIZE_AVATAR_CAMERA_DEFAULT_DIST = 3.5f;
+
 const F32 GROUND_TO_AIR_CAMERA_TRANSITION_TIME = 0.5f;
 const F32 GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME = 0.5f;
 
@@ -2325,8 +2327,6 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came
 	{
 		if(avatar_animate)
 		{	
-			// slamming the avatar's axis to the camera so that when the rotation
-			// completes it correctly points to the front of the avatar
 			// Remove any pitch or rotation from the avatar
 			LLVector3 at = gAgent.getAtAxis();
 			at.mV[VZ] = 0.f;
@@ -2356,7 +2356,7 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came
 		LLVector3d camera_offset(agent_at * -1.0);
 		// push camera up and out from avatar
 		camera_offset.mdV[VZ] = 0.1f; 
-		camera_offset *= 3.5f;
+		camera_offset *= CUSTOMIZE_AVATAR_CAMERA_DEFAULT_DIST;
 		LLVector3d focus_target_global = gAgent.getPosGlobalFromAgent(focus_target);
 		setCameraPosAndFocusGlobal(focus_target_global + camera_offset, focus_target_global, gAgent.getID());
 		
@@ -2392,6 +2392,7 @@ void LLAgentCamera::setAnimationDuration(F32 duration)
 { 
 	if (mCameraAnimating)
 	{
+		// do not cut any existing camera animation short
 		F32 animation_left = llmax(0.f, mAnimationDuration - mAnimationTimer.getElapsedTimeF32());
 		mAnimationDuration = llmax(duration, animation_left);
 	}
diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h
index aba8b0b67f..3b8f88733a 100644
--- a/indra/newview/llagentcamera.h
+++ b/indra/newview/llagentcamera.h
@@ -137,7 +137,6 @@ public:
 	F32				getCameraMinOffGround(); 		// Minimum height off ground for this mode, meters
 	void			setCameraCollidePlane(const LLVector4 &plane) { mCameraCollidePlane = plane; }
 	BOOL			calcCameraMinDistance(F32 &obj_min_distance);
-	F32				calcCustomizeAvatarUIOffset(const LLVector3d& camera_pos_global);
 	F32				getCurrentCameraBuildOffset() 	{ return (F32)mCameraFocusOffset.length(); }
 	void			clearCameraLag() { mCameraLag.clearVec(); }
 private:
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index 71edd39348..ae54909945 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -1127,7 +1127,6 @@ void LLPanelEditWearable::changeCamera(U8 subpart)
 	}
 
 	// Update the camera
-	gMorphView->setCameraDistToDefault();
 	gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) );
 	gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset );
 	gMorphView->setCameraOffset( subpart_entry->mCameraOffset );
diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp
index 032714cabf..b9875f465a 100644
--- a/indra/newview/lltoolfocus.cpp
+++ b/indra/newview/lltoolfocus.cpp
@@ -236,7 +236,6 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info)
 		gAgentCamera.setFocusOnAvatar(FALSE, FALSE);
 		
 		LLVector3d cam_pos = gAgentCamera.getCameraPositionGlobal();
-		cam_pos -= LLVector3d(LLViewerCamera::getInstance()->getLeftAxis() * gAgentCamera.calcCustomizeAvatarUIOffset( cam_pos ));
 
 		gAgentCamera.setCameraPosAndFocusGlobal( cam_pos, pick_info.mPosGlobal, pick_info.mObjectID);
 	}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index f2f91dcc4a..3dce4ce0bc 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -3201,6 +3201,9 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
 		visible = (LLDrawable::getCurrentFrame()+mID.mData[0])%mUpdatePeriod == 0 ? TRUE : FALSE;
 	}
 
+	// don't early out for your own avatar, as we rely on your animations playing reliably
+	// for example, the "turn around" animation when entering customize avatar needs to trigger
+	// even when your avatar is offscreen
 	if (!visible && !isSelf())
 	{
 		updateMotions(LLCharacter::HIDDEN_UPDATE);
-- 
cgit v1.2.3


From 32283ca3397965ed28ad23492db362355a3dbef5 Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Thu, 24 Jun 2010 11:53:26 +0300
Subject: EXT-7777 FIXED reverted changes to show loading indicator for
 "Wear/Attach" action.

Because it was too hard to fix EXT-7949 having so extremly lack of time.
Proper fix for EXT-7949 requires changes in different places of the code calling add/removeCOFItemLink().

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

--HG--
branch : product-engine
---
 indra/newview/llappearancemgr.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 597076503d..ce022ac840 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -935,7 +935,9 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up
 	// That means subscribers will be notified that loading is done after first item in a batch is worn.
 	// (loading indicator disappears for example before all selected items are worn)
 	// Have not fix this issue for 2.1 because of stability reason. EXT-7777.
-	gAgentWearables.notifyLoadingStarted();
+
+	// Disabled for now because it is *not* acceptable to call updateAppearanceFromCOF() multiple times
+//	gAgentWearables.notifyLoadingStarted();
 
 	LLViewerInventoryItem* item_to_wear = gInventory.getItem(item_id_to_wear);
 	if (!item_to_wear) return false;
@@ -2540,7 +2542,8 @@ void LLAppearanceMgr::registerAttachment(const LLUUID& item_id)
 	   {
 		   // we have to pass do_update = true to call LLAppearanceMgr::updateAppearanceFromCOF.
 		   // it will trigger gAgentWariables.notifyLoadingFinished()
-		   LLAppearanceMgr::addCOFItemLink(item_id, true);  // Add COF link for item.
+		   // But it is not acceptable solution. See EXT-7777
+		   LLAppearanceMgr::addCOFItemLink(item_id, false);  // Add COF link for item.
 	   }
 	   else
 	   {
@@ -2570,7 +2573,7 @@ void LLAppearanceMgr::linkRegisteredAttachments()
 		 ++it)
 	{
 		LLUUID item_id = *it;
-		addCOFItemLink(item_id, true);
+		addCOFItemLink(item_id, false);
 	}
 	mRegisteredAttachments.clear();
 }
-- 
cgit v1.2.3


From a3d8f6ee4549d301fab51a08fbac7a9f48e22be2 Mon Sep 17 00:00:00 2001
From: Mike Antipov <mantipov@productengine.com>
Date: Thu, 24 Jun 2010 12:43:06 +0300
Subject: Reverted changes in <string> reformatting made in f7ac28b29eec.

this is necessary to avoid new translate cycle for already translated strings in format <string name=""> VALUE <string/>

--HG--
branch : product-engine
---
 .../skins/default/xui/en/panel_edit_wearable.xml   | 150 ++++++++++++---------
 1 file changed, 90 insertions(+), 60 deletions(-)

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 06255353a7..fc1caca9e9 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -12,95 +12,125 @@
  top="0"
  width="333">
     <string
-     name="edit_shape_title"
-     value="Editing Shape" />
+     name="edit_shape_title">
+        Editing Shape
+    </string>
     <string
-     name="edit_skin_title"
-     value="Editing Skin" />
+     name="edit_skin_title">
+        Editing Skin
+    </string>
     <string
-     name="edit_hair_title"
-     value="Editing Hair" />
+     name="edit_hair_title">
+        Editing Hair
+    </string>
     <string
-     name="edit_eyes_title"
-     value="Editing Eyes" />
+     name="edit_eyes_title">
+        Editing Eyes
+    </string>
     <string
-     name="edit_shirt_title"
-     value="Editing Shirt" />
+     name="edit_shirt_title">
+        Editing Shirt
+    </string>
     <string
-     name="edit_pants_title"
-     value="Editing Pants" />
+     name="edit_pants_title">
+        Editing Pants
+    </string>
     <string
-     name="edit_shoes_title"
-     value="Editing Shoes" />
+     name="edit_shoes_title">
+        Editing Shoes
+    </string>
     <string
-     name="edit_socks_title"
-     value="Editing Socks" />
+     name="edit_socks_title">
+        Editing Socks
+    </string>
     <string
-     name="edit_jacket_title"
-     value="Editing Jacket" />
+     name="edit_jacket_title">
+        Editing Jacket
+    </string>
     <string
-     name="edit_skirt_title"
-     value="Editing Skirt" />
+     name="edit_skirt_title">
+        Editing Skirt
+    </string>
     <string
-     name="edit_gloves_title"
-     value="Editing Gloves" />
+     name="edit_gloves_title">
+        Editing Gloves
+    </string>
     <string
-     name="edit_undershirt_title"
-     value="Editing Undershirt" />
+     name="edit_undershirt_title">
+        Editing Undershirt
+    </string>
     <string
-     name="edit_underpants_title"
-     value="Editing Underpants" />
+     name="edit_underpants_title">
+        Editing Underpants
+    </string>
     <string
-     name="edit_alpha_title"
-     value="Editing Alpha Mask" />
+     name="edit_alpha_title">
+        Editing Alpha Mask
+    </string>
     <string
-     name="edit_tattoo_title"
-     value="Editing Tattoo" />
+     name="edit_tattoo_title">
+        Editing Tattoo
+    </string>
     <string
-     name="shape_desc_text"
-     value="Shape:" />
+     name="shape_desc_text">
+        Shape:
+    </string>
     <string
-     name="skin_desc_text"
-     value="Skin:" />
+     name="skin_desc_text">
+        Skin:
+    </string>
     <string
-     name="hair_desc_text"
-     value="Hair:" />
+     name="hair_desc_text">
+        Hair:
+    </string>
     <string
-     name="eyes_desc_text"
-     value="Eyes:" />
+     name="eyes_desc_text">
+        Eyes:
+    </string>
     <string
-     name="shirt_desc_text"
-     value="Shirt:" />
+     name="shirt_desc_text">
+        Shirt:
+    </string>
     <string
-     name="pants_desc_text"
-     value="Pants:" />
+     name="pants_desc_text">
+        Pants:
+    </string>
     <string
-     name="shoes_desc_text"
-     value="Shoes:" />
+     name="shoes_desc_text">
+        Shoes:
+    </string>
     <string
-     name="socks_desc_text"
-     value="Socks:" />
+    name="socks_desc_text">
+        Socks:
+    </string>
     <string
-     name="jacket_desc_text"
-     value="Jacket:" />
+     name="jacket_desc_text">
+        Jacket:
+    </string>
     <string
-     name="skirt_desc_text"
-     value="Skirt:" />
+     name="skirt_desc_text">
+        Skirt:
+    </string>
     <string
-     name="gloves_desc_text"
-     value="Gloves:" />
+    name="gloves_desc_text">
+        Gloves:
+    </string>
     <string
-     name="undershirt_desc_text"
-     value="Undershirt:" />
+     name="undershirt_desc_text">
+        Undershirt:
+    </string>
     <string
-     name="underpants_desc_text"
-     value="Underpants:" />
+     name="underpants_desc_text">
+        Underpants:
+    </string>
     <string
-     name="alpha_desc_text"
-     value="Alpha Mask:" />
+     name="alpha_desc_text">
+        Alpha Mask:
+    </string>
     <string
-     name="tattoo_desc_text"
-     value="Tattoo:" />
+     name="tattoo_desc_text">
+        Tattoo:
+    </string>
     <button
      follows="top|left"
      height="24"
-- 
cgit v1.2.3


From 8f892d0f36fda170a5cecf0aea89887d6d0e45ef Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Thu, 24 Jun 2010 13:04:20 +0100
Subject: SNOW-611 / SNOW-505 FIXED boost::coroutines headers broken for newish
 GCC versions.

---
 install.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/install.xml b/install.xml
index f69d781c67..39806a664d 100644
--- a/install.xml
+++ b/install.xml
@@ -200,9 +200,9 @@
           <key>linux</key>
           <map>
             <key>md5sum</key>
-            <string>d58ac1a8396ac983b67cc3e3541457e3</string>
+            <string>4db3d74e40d149eeec06f4d97a609bb1</string>
             <key>url</key>
-            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100222a.tar.bz2</uri>
+            <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.39.0-linux-20100624.tar.bz2</uri>
           </map>
           <key>linux64</key>
           <map>
-- 
cgit v1.2.3