summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorIgor Borovkov <iborovkov@productengine.com>2010-04-30 15:59:23 +0300
committerIgor Borovkov <iborovkov@productengine.com>2010-04-30 15:59:23 +0300
commit702efd72ab9e3a2c619b5313b481e0821d453070 (patch)
treebbb5afcd258b5640e0bd263abbb6086f560f2d83 /indra/newview
parent2d85ec2d59d7e8b23e82d936271b2e695460c335 (diff)
additional patch for EXT-6732 Create specialized view of inventory for "clothing" accordion tab of outfit editor
* reimplemented button bars as static panels not as list items (creating accordion - button bar - list view - adaptor/container) * added management of items' buttons assording to inventory items' states * assigned actions to clothing/bodyparts items' buttons * got rid of separators as distinct items and made them as part of items * removed ad-hoc up/down buttons * removed "+" button from a button bar Reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/322 --HG-- branch : product-engine
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llcofwearables.cpp118
-rw-r--r--indra/newview/llcofwearables.h77
-rw-r--r--indra/newview/llpaneloutfitedit.cpp16
-rw-r--r--indra/newview/llpaneloutfitedit.h2
-rw-r--r--indra/newview/llwearableitemslist.cpp35
-rw-r--r--indra/newview/llwearableitemslist.h16
-rw-r--r--indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_clothing_list_item.xml13
-rw-r--r--indra/newview/skins/default/xui/en/panel_cof_wearables.xml67
-rw-r--r--indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfit_edit.xml25
11 files changed, 256 insertions, 137 deletions
diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
index b8222ebb18..36a8031cce 100644
--- a/indra/newview/llcofwearables.cpp
+++ b/indra/newview/llcofwearables.cpp
@@ -34,10 +34,13 @@
#include "llcofwearables.h"
+#include "llagentdata.h"
#include "llappearancemgr.h"
#include "llinventory.h"
-#include "llinventoryitemslist.h"
#include "llinventoryfunctions.h"
+#include "llwearableitemslist.h"
+
+static LLRegisterPanelClassWrapper<LLCOFAccordionListAdaptor> t_cof_accodion_list_adaptor("accordion_list_adaptor");
static LLRegisterPanelClassWrapper<LLCOFWearables> t_cof_wearables("cof_wearables");
@@ -89,7 +92,6 @@ void LLCOFWearables::onSelectionChange(LLFlatListView* selected_list)
onCommit();
}
-#include "llwearableitemslist.h"
void LLCOFWearables::refresh()
{
clear();
@@ -126,9 +128,10 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel
}
else if (item_type == LLAssetType::AT_BODYPART)
{
- item_panel = LLPanelBodyPartsListItem::create(item);
+ item_panel = buildBodypartListItem(item);
+ if (!item_panel) continue;
+
mBodyParts->addItem(item_panel, item->getUUID(), ADD_BOTTOM, false);
- addWearableTypeSeparator(mBodyParts);
}
}
@@ -143,17 +146,69 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel
mBodyParts->sort(); //*TODO by name
}
- addListButtonBar(mBodyParts, "panel_bodyparts_list_button_bar.xml");
mBodyParts->notify(REARRANGE);
}
+//create a clothing list item, update verbs and show/hide line separator
+LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventoryItem* item, bool first, bool last)
+{
+ llassert(item);
+
+ LLPanelClothingListItem* item_panel = LLPanelClothingListItem::create(item);
+ if (!item_panel) return NULL;
+
+ //updating verbs
+ //we don't need to use permissions of a link but of an actual/linked item
+ if (item->getLinkedItem()) item = item->getLinkedItem();
+
+ bool allow_modify = item->getPermissions().allowModifyBy(gAgentID);
+
+ item_panel->setShowLockButton(!allow_modify);
+ item_panel->setShowEditButton(allow_modify);
+
+ item_panel->setShowMoveUpButton(!first);
+ item_panel->setShowMoveDownButton(!last);
+
+ //setting callbacks
+ //*TODO move that item panel's inner structure disclosing stuff into the panels
+ item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable);
+ item_panel->childSetAction("btn_move_up", mCOFCallbacks.mMoveWearableCloser);
+ item_panel->childSetAction("btn_move_down", mCOFCallbacks.mMoveWearableFurther);
+ item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable);
+
+ //turning on gray separator line for the last item in the items group of the same wearable type
+ item_panel->childSetVisible("wearable_type_separator_panel", last);
+
+ return item_panel;
+}
+
+LLPanelBodyPartsListItem* LLCOFWearables::buildBodypartListItem(LLViewerInventoryItem* item)
+{
+ llassert(item);
+
+ LLPanelBodyPartsListItem* item_panel = LLPanelBodyPartsListItem::create(item);
+ if (!item_panel) return NULL;
+
+ //updating verbs
+ //we don't need to use permissions of a link but of an actual/linked item
+ if (item->getLinkedItem()) item = item->getLinkedItem();
+
+ bool allow_modify = item->getPermissions().allowModifyBy(gAgentID);
+ item_panel->setShowLockButton(!allow_modify);
+ item_panel->setShowEditButton(allow_modify);
+
+ //setting callbacks
+ //*TODO move that item panel's inner structure disclosing stuff into the panels
+ item_panel->childSetAction("btn_delete", mCOFCallbacks.mDeleteWearable);
+ item_panel->childSetAction("btn_edit", mCOFCallbacks.mEditWearable);
+
+ return item_panel;
+}
void LLCOFWearables::populateClothingList(LLAppearanceMgr::wearables_by_type_t& clothing_by_type)
{
llassert(clothing_by_type.size() == WT_COUNT);
- addListButtonBar(mClothing, "panel_clothing_list_button_bar.xml");
-
for (U32 type = WT_SHIRT; type < WT_COUNT; ++type)
{
U32 size = clothing_by_type[type].size();
@@ -165,13 +220,11 @@ void LLCOFWearables::populateClothingList(LLAppearanceMgr::wearables_by_type_t&
{
LLViewerInventoryItem* item = clothing_by_type[type][i];
- LLPanelInventoryListItemBase* item_panel = LLPanelClothingListItem::create(item);
+ LLPanelClothingListItem* item_panel = buildClothingListItem(item, i == 0, i == size - 1);
if (!item_panel) continue;
mClothing->addItem(item_panel, item->getUUID(), ADD_BOTTOM, false);
}
-
- addWearableTypeSeparator(mClothing);
}
addClothingTypesDummies(clothing_by_type);
@@ -179,21 +232,6 @@ void LLCOFWearables::populateClothingList(LLAppearanceMgr::wearables_by_type_t&
mClothing->notify(REARRANGE);
}
-void LLCOFWearables::addListButtonBar(LLFlatListView* list, std::string xml_filename)
-{
- llassert(list);
- llassert(xml_filename.length());
-
- LLPanel::Params params;
- LLPanel* button_bar = LLUICtrlFactory::create<LLPanel>(params);
- LLUICtrlFactory::instance().buildPanel(button_bar, xml_filename);
-
- LLRect rc = button_bar->getRect();
- button_bar->reshape(list->getItemsRect().getWidth(), rc.getHeight());
-
- list->addItem(button_bar, LLUUID::null, ADD_TOP, false);
-}
-
//adding dummy items for missing wearable types
void LLCOFWearables::addClothingTypesDummies(const LLAppearanceMgr::wearables_by_type_t& clothing_by_type)
{
@@ -208,26 +246,9 @@ void LLCOFWearables::addClothingTypesDummies(const LLAppearanceMgr::wearables_by
LLPanelInventoryListItemBase* item_panel = LLPanelDummyClothingListItem::create(w_type);
if(!item_panel) continue;
mClothing->addItem(item_panel, LLUUID::null, ADD_BOTTOM, false);
- addWearableTypeSeparator(mClothing);
}
}
-void LLCOFWearables::addWearableTypeSeparator(LLFlatListView* list)
-{
- llassert(list);
-
- static LLXMLNodePtr separator_xml_node = getXMLNode("panel_wearable_type_separator.xml");
- if (separator_xml_node->isNull()) return;
-
- LLPanel* separator = LLUICtrlFactory::defaultBuilder<LLPanel>(separator_xml_node, NULL, NULL);
-
- LLRect rc = separator->getRect();
- rc.setOriginAndSize(0, 0, list->getItemsRect().getWidth(), rc.getHeight());
- separator->setRect(rc);
-
- list->addItem(separator, LLUUID::null, ADD_BOTTOM, false);
-}
-
LLUUID LLCOFWearables::getSelectedUUID()
{
if (!mLastSelectedList) return LLUUID::null;
@@ -242,17 +263,4 @@ void LLCOFWearables::clear()
mBodyParts->clear();
}
-LLXMLNodePtr LLCOFWearables::getXMLNode(std::string xml_filename)
-{
- LLXMLNodePtr xmlNode = NULL;
- bool success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, xmlNode);
- if (!success)
- {
- llwarning("Failed to read xml", 0);
- return NULL;
- }
-
- return xmlNode;
-}
-
//EOF
diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h
index fec6d34db2..c256d2a05d 100644
--- a/indra/newview/llcofwearables.h
+++ b/indra/newview/llcofwearables.h
@@ -36,12 +36,80 @@
#include "llpanel.h"
#include "llinventorymodel.h"
#include "llappearancemgr.h"
+#include "llwearableitemslist.h"
class LLFlatListView;
+/**
+ * Adaptor between LLAccordionCtrlTab and LLFlatListView to facilitate communication between them
+ * (notify, notifyParent) regarding size changes of a list and selection changes across accordion tabs.
+ * Besides that it acts as a container for the LLFlatListView and a button bar on top of it.
+ */
+class LLCOFAccordionListAdaptor : public LLPanel
+{
+public:
+ LLCOFAccordionListAdaptor() : LLPanel() {};
+ ~LLCOFAccordionListAdaptor() {};
+
+ S32 notifyParent(const LLSD& info)
+ {
+ LLView* parent = getParent();
+ if (!parent) return -1;
+
+ if (!info.has("action") || "size_changes" != info["action"])
+ {
+ return parent->notifyParent(info);
+ }
+
+ LLRect rc;
+ childGetRect("button_bar", rc);
+
+ LLSD params;
+ params["action"] = "size_changes";
+ params["width"] = info["width"];
+ params["height"] = info["height"].asInteger() + rc.getHeight();
+
+ return parent->notifyParent(params);
+ }
+
+
+ S32 notify(const LLSD& info)
+ {
+ for (child_list_const_iter_t iter = beginChild(); iter != endChild(); iter++)
+ {
+ if (dynamic_cast<LLFlatListView*>(*iter))
+ {
+ return (*iter)->notify(info);
+ }
+ }
+ return LLPanel::notify(info);
+ };
+};
+
+
class LLCOFWearables : public LLPanel
{
public:
+
+ /**
+ * Represents a collection of callbacks assigned to inventory panel item's buttons
+ */
+ class LLCOFCallbacks
+ {
+ public:
+ LLCOFCallbacks() {};
+ virtual ~LLCOFCallbacks() {};
+
+ typedef boost::function<void (void*)> cof_callback_t;
+
+ cof_callback_t mMoveWearableCloser;
+ cof_callback_t mMoveWearableFurther;
+ cof_callback_t mEditWearable;
+ cof_callback_t mDeleteWearable;
+ };
+
+
+
LLCOFWearables();
virtual ~LLCOFWearables() {};
@@ -52,17 +120,18 @@ public:
void refresh();
void clear();
+ LLCOFCallbacks& getCOFCallbacks() { return mCOFCallbacks; }
+
protected:
void populateAttachmentsAndBodypartsLists(const LLInventoryModel::item_array_t& cof_items);
void populateClothingList(LLAppearanceMgr::wearables_by_type_t& clothing_by_type);
- void addListButtonBar(LLFlatListView* list, std::string xml_filename);
void addClothingTypesDummies(const LLAppearanceMgr::wearables_by_type_t& clothing_by_type);
- void addWearableTypeSeparator(LLFlatListView* list);
void onSelectionChange(LLFlatListView* selected_list);
- LLXMLNodePtr getXMLNode(std::string xml_filename);
+ LLPanelClothingListItem* buildClothingListItem(LLViewerInventoryItem* item, bool first, bool last);
+ LLPanelBodyPartsListItem* buildBodypartListItem(LLViewerInventoryItem* item);
LLFlatListView* mAttachments;
LLFlatListView* mClothing;
@@ -70,6 +139,8 @@ protected:
LLFlatListView* mLastSelectedList;
+ LLCOFCallbacks mCOFCallbacks;
+
};
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index dbccd243da..fe93f45c89 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -174,13 +174,20 @@ BOOL LLPanelOutfitEdit::postBuild()
mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name");
- childSetCommitCallback("add_btn", boost::bind(&LLPanelOutfitEdit::showAddWearablesPanel, this), NULL);
childSetCommitCallback("filter_button", boost::bind(&LLPanelOutfitEdit::showWearablesFilter, this), NULL);
childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showFilteredWearablesPanel, this), NULL);
mCOFWearables = getChild<LLCOFWearables>("cof_wearables_list");
mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onOutfitItemSelectionChange, this));
+ mCOFWearables->getCOFCallbacks().mEditWearable = boost::bind(&LLPanelOutfitEdit::onEditWearableClicked, this);
+ mCOFWearables->getCOFCallbacks().mDeleteWearable = boost::bind(&LLPanelOutfitEdit::onRemoveFromOutfitClicked, this);
+ mCOFWearables->getCOFCallbacks().mMoveWearableCloser = boost::bind(&LLPanelOutfitEdit::moveWearable, this, true);
+ mCOFWearables->getCOFCallbacks().mMoveWearableFurther = boost::bind(&LLPanelOutfitEdit::moveWearable, this, false);
+
+ mCOFWearables->childSetAction("add_btn", boost::bind(&LLPanelOutfitEdit::toggleAddWearablesPanel, this));
+
+
mInventoryItemsPanel = getChild<LLInventoryPanel>("inventory_items");
mInventoryItemsPanel->setFilterTypes(ALL_ITEMS_MASK);
mInventoryItemsPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
@@ -233,9 +240,6 @@ BOOL LLPanelOutfitEdit::postBuild()
mWearableListManager = new LLFilteredWearableListManager(
getChild<LLInventoryItemsList>("filtered_wearables_list"), ALL_ITEMS_MASK);
-
- childSetAction("move_closer_btn", boost::bind(&LLPanelOutfitEdit::moveWearable, this, true));
- childSetAction("move_further_btn", boost::bind(&LLPanelOutfitEdit::moveWearable, this, false));
return TRUE;
}
@@ -252,9 +256,9 @@ void LLPanelOutfitEdit::moveWearable(bool closer_to_body)
updateLookInfo();
}
-void LLPanelOutfitEdit::showAddWearablesPanel()
+void LLPanelOutfitEdit::toggleAddWearablesPanel()
{
- childSetVisible("add_wearables_panel", childGetValue("add_btn"));
+ childSetVisible("add_wearables_panel", !childIsVisible("add_wearables_panel"));
}
void LLPanelOutfitEdit::showWearablesFilter()
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index 21fa849289..3d01303ee1 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -90,7 +90,7 @@ public:
void moveWearable(bool closer_to_body);
- void showAddWearablesPanel();
+ void toggleAddWearablesPanel();
void showWearablesFilter();
void showFilteredWearablesPanel();
void saveOutfit(bool as_new = false);
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 56b2791993..bd5d8d9357 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -136,31 +136,6 @@ BOOL LLPanelClothingListItem::postBuild()
return TRUE;
}
-void LLPanelClothingListItem::setShowDeleteButton(bool show)
-{
- setShowWidget("btn_delete", show);
-}
-
-void LLPanelClothingListItem::setShowMoveUpButton(bool show)
-{
- setShowWidget("btn_move_up", show);
-}
-
-void LLPanelClothingListItem::setShowMoveDownButton(bool show)
-{
- setShowWidget("btn_move_down", show);
-}
-
-void LLPanelClothingListItem::setShowLockButton(bool show)
-{
- setShowWidget("btn_lock", show);
-}
-
-void LLPanelClothingListItem::setShowEditButton(bool show)
-{
- setShowWidget("btn_edit", show);
-}
-
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
@@ -201,16 +176,6 @@ BOOL LLPanelBodyPartsListItem::postBuild()
return TRUE;
}
-void LLPanelBodyPartsListItem::setShowLockButton(bool show)
-{
- setShowWidget("btn_lock", show);
-}
-
-void LLPanelBodyPartsListItem::setShowEditButton(bool show)
-{
- setShowWidget("btn_edit", show);
-}
-
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index c4a415dfbf..29532a15c1 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -86,11 +86,13 @@ public:
/**
* Make button visible during mouse over event.
*/
- inline void setShowDeleteButton(bool show);
- inline void setShowMoveUpButton(bool show);
- inline void setShowMoveDownButton(bool show);
- inline void setShowLockButton(bool show);
- inline void setShowEditButton(bool show);
+ inline void setShowDeleteButton(bool show) { setShowWidget("btn_delete", show); }
+ inline void setShowMoveUpButton(bool show) { setShowWidget("btn_move_up", show); }
+
+ inline void setShowMoveDownButton(bool show) { setShowWidget("btn_move_down", show); }
+ inline void setShowLockButton(bool show) { setShowWidget("btn_lock", show); }
+ inline void setShowEditButton(bool show) { setShowWidget("btn_edit", show); }
+
protected:
@@ -113,8 +115,8 @@ public:
/**
* Make button visible during mouse over event.
*/
- inline void setShowLockButton(bool show);
- inline void setShowEditButton(bool show);
+ inline void setShowLockButton(bool show) { setShowWidget("btn_lock", show); }
+ inline void setShowEditButton(bool show) { setShowWidget("btn_edit", show); }
protected:
LLPanelBodyPartsListItem(LLViewerInventoryItem* item);
diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml
index 4313d450fb..115964e5f2 100644
--- a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="top|right|left"
- height="20"
+ height="22"
layout="topleft"
left="0"
name="wearable_item"
@@ -69,4 +69,14 @@
height="20"
width="20"
tab_stop="false" />
+ <panel
+ background_visible="true"
+ bg_alpha_color="0.4 0.4 0.4 1.0"
+ bottom="0"
+ follows="left|right|top"
+ height="1"
+ layout="bottomleft"
+ left="0"
+ name="wearable_type_separator_panel"
+ width="380"/>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml
index 8dc67de06f..7cc9c46c08 100644
--- a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="top|right|left"
- height="20"
+ height="23"
layout="topleft"
left="0"
name="wearable_item"
@@ -101,4 +101,15 @@
height="20"
width="20"
tab_stop="false" />
+ <panel
+ background_visible="true"
+ bg_alpha_color="0.4 0.4 0.4 1.0"
+ bottom="0"
+ follows="left|right|top"
+ height="1"
+ layout="bottomleft"
+ left="0"
+ name="wearable_type_separator_panel"
+ visible="false"
+ width="380"/>
</panel>
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 d8a8dbbea4..e13847e412 100644
--- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
+++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
@@ -3,7 +3,6 @@
background_visible="true"
bg_alpha_color="DkGray"
border="false"
- bottom="0"
follows="all"
height="200"
left="0"
@@ -11,7 +10,7 @@
width="313">
<accordion
follows="all"
- height="373"
+ height="200"
layout="topleft"
left="3"
single_expansion="true"
@@ -27,7 +26,7 @@
<flat_list_view
allow_select="true"
follows="all"
- height="150"
+ height="10"
layout="topleft"
left="0"
name="list_attachments"
@@ -38,29 +37,71 @@
layout="topleft"
name="tab_clothing"
title="Clothing">
- <flat_list_view
- allow_select="true"
+
+ <!-- *NOTE there should be no any gaps between the button bar and the list -
+ accordiong-list adaptor won't employ them while calculating new height when the size of the list changes -->
+ <panel
+ background_visible="false"
+ class="accordion_list_adaptor"
follows="all"
- height="150"
+ height="45"
layout="topleft"
left="0"
- name="list_clothing"
+ name="button_bar_adaptor"
top="0"
- width="307" />
+ width="307">
+ <panel
+ bevel="none"
+ filename="panel_clothing_list_button_bar.xml"
+ height="35"
+ name="button_bar"
+ top="0"
+ width="307" />
+ <flat_list_view
+ allow_select="true"
+ follows="all"
+ height="10"
+ layout="topleft"
+ left="0"
+ name="list_clothing"
+ top_pad="0"
+ width="307" />
+ </panel>
</accordion_tab>
<accordion_tab
layout="topleft"
name="tab_body_parts"
title="Body Parts">
- <flat_list_view
- allow_select="true"
+
+ <!-- *NOTE there should be no any gaps between the button bar and the list -
+ accordiong-list adaptor won't employ them while calculating new height when the size of the list changes -->
+ <panel
+ background_visible="false"
+ class="accordion_list_adaptor"
follows="all"
- height="150"
+ height="45"
layout="topleft"
left="0"
- name="list_body_parts"
+ name="button_bar_adaptor"
top="0"
- width="307" />
+ width="307">
+ <panel
+ bevel="none"
+ filename="panel_bodyparts_list_button_bar.xml"
+ height="35"
+ name="button_bar"
+ top="0"
+ width="307"/>
+ <flat_list_view
+ allow_select="true"
+ follows="all"
+ height="10"
+ layout="topleft"
+ left="0"
+ name="list_body_parts"
+ top_pad="0"
+ width="307" />
+ </panel>
</accordion_tab>
</accordion>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml
index dbbfa8f2e2..c5a60ced88 100644
--- a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="top|right|left"
- height="20"
+ height="22"
layout="topleft"
left="0"
name="dummy_clothing_item"
@@ -59,4 +59,14 @@
height="20"
width="20"
tab_stop="false" />
+ <panel
+ background_visible="true"
+ bg_alpha_color="0.4 0.4 0.4 1.0"
+ bottom="0"
+ follows="left|right|top"
+ height="1"
+ layout="bottomleft"
+ left="0"
+ name="wearable_type_separator_panel"
+ width="380"/>
</panel>
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 a9f588698a..1da9304f03 100644
--- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
@@ -130,7 +130,7 @@
animate="false"
default_tab_group="2"
follows="all"
- height="470"
+ height="450"
width="300"
layout="topleft"
orientation="vertical"
@@ -140,8 +140,7 @@
left="5">
<layout_panel
layout="topleft"
- follows="left|top|right"
- height="220"
+ height="225"
label="IM Control Panel"
min_height="100"
name="outfit_wearables_panel"
@@ -151,27 +150,26 @@
<!-- List containing items from the COF and Base outfit -->
<panel
- background_visible="false"
class="cof_wearables"
filename="panel_cof_wearables.xml"
follows="left|top|right|bottom"
- height="193"
+ height="198"
layout="topleft"
left="0"
name="cof_wearables_list"
top="0"
width="300" />
- <panel
+ <panel
background_visible="true"
bevel_style="none"
+ bottom="0"
follows="bottom|left|right"
height="27"
label="bottom_panel"
- layout="topleft"
+ layout="bottomleft"
left="0"
name="edit_panel"
- top_pad="0"
width="300">
<button
follows="bottom|left"
@@ -186,11 +184,10 @@
top="1"
width="31" />
<button
- is_toggle="true"
follows="bottom|left"
height="25"
image_hover_unselected="Toolbar_Middle_Over"
- image_overlay="AddItem_Off"
+ image_overlay=""
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
@@ -214,7 +211,7 @@
follows="bottom|left"
height="25"
image_hover_unselected="Toolbar_Middle_Over"
- image_overlay="Movement_Forward_On"
+ image_overlay=""
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
@@ -226,7 +223,7 @@
follows="bottom|left"
height="25"
image_hover_unselected="Toolbar_Middle_Over"
- image_overlay="Movement_Backward_On"
+ image_overlay=""
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
@@ -261,8 +258,8 @@
<layout_panel
auto_resize="true"
default_tab_group="3"
- height="210"
- min_height="210"
+ height="225"
+ min_height="225"
name="add_wearables_panel"
width="300"
tab_group="2"