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-enginemeow-7.2.2
parent
2d85ec2d59
commit
702efd72ab
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue