(EXT-6722) Create modified inventory view for "my outfits" tab in top-level appearance sidebar (tier 1)
llui: - Setting container panel for accordion tab control to dynamically add tabs to accordions. - Added method to dynamically remove accordion tabs. - Added LLIconCtrl image setter. newview: - Class LLOutfitsList - a list of agents's outfits from "My Outfits" inventory category which represents each outfit by an accordion tab with a list of items inside it. - Class LLWearableItemsList - a list of wearable items used in each accordion tab of "My Outfits" tab. - Class LLInventoryItemsList - a base class for LLWearableItemsList that represents inventory items by panels in LLFlatListView. - Class LLPanelInventoryItem - inventory item representation for a flat list. Item icon is set according to item type. - Class LLInventoryCategoriesObserver - an observer used in LLOutfitsList for monitoring changes to "My Outfits" inventory category and updating outfits accordion tabs and list of items for each outfit. Reviewed by Mike Antipov https://codereview.productengine.com/secondlife/r/285/ --HG-- branch : product-enginemaster
parent
4a975bd1c2
commit
fbfc851766
|
|
@ -329,7 +329,7 @@ void LLAccordionCtrl::addCollapsibleCtrl(LLView* view)
|
|||
LLAccordionCtrlTab* accordion_tab = dynamic_cast<LLAccordionCtrlTab*>(view);
|
||||
if(!accordion_tab)
|
||||
return;
|
||||
if(std::find(getChildList()->begin(),getChildList()->end(),accordion_tab) == getChildList()->end())
|
||||
if(std::find(beginChild(), endChild(), accordion_tab) == endChild())
|
||||
addChild(accordion_tab);
|
||||
mAccordionTabs.push_back(accordion_tab);
|
||||
|
||||
|
|
@ -343,7 +343,7 @@ void LLAccordionCtrl::removeCollapsibleCtrl(LLView* view)
|
|||
if(!accordion_tab)
|
||||
return;
|
||||
|
||||
if(std::find(getChildList()->begin(),getChildList()->end(),accordion_tab) != getChildList()->end())
|
||||
if(std::find(beginChild(), endChild(), accordion_tab) != endChild())
|
||||
removeChild(accordion_tab);
|
||||
|
||||
for (std::vector<LLAccordionCtrlTab*>::iterator iter = mAccordionTabs.begin();
|
||||
|
|
|
|||
|
|
@ -554,7 +554,8 @@ S32 LLAccordionCtrlTab::notifyParent(const LLSD& info)
|
|||
}
|
||||
|
||||
//LLAccordionCtrl should rearrange accodion tab if one of accordion change its size
|
||||
getParent()->notifyParent(info);
|
||||
if (getParent()) // A parent may not be set if tabs are added dynamically.
|
||||
getParent()->notifyParent(info);
|
||||
return 1;
|
||||
}
|
||||
else if(str_action == "select_prev")
|
||||
|
|
|
|||
|
|
@ -2,6 +2,10 @@
|
|||
* @file llinventoryitemslist.cpp
|
||||
* @brief A list of inventory items represented by LLFlatListView.
|
||||
*
|
||||
* Class LLInventoryItemsList implements a flat list of inventory items.
|
||||
* Class LLPanelInventoryListItem displays inventory item as an element
|
||||
* of LLInventoryItemsList.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2010, Linden Research, Inc.
|
||||
|
|
@ -39,33 +43,31 @@
|
|||
#include "lliconctrl.h"
|
||||
|
||||
#include "llinventoryfunctions.h"
|
||||
#include "llinventorymodel.h"
|
||||
#include "lltextutil.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLPanelInventoryItem::LLPanelInventoryItem(LLAssetType::EType asset_type,
|
||||
LLInventoryType::EType inventory_type,
|
||||
U32 wearable_type,
|
||||
const std::string &item_name,
|
||||
const std::string &hl)
|
||||
: LLPanel()
|
||||
,mItemName(item_name)
|
||||
,mHighlightedText(hl)
|
||||
,mIcon(NULL)
|
||||
,mTitle(NULL)
|
||||
// static
|
||||
LLPanelInventoryListItem* LLPanelInventoryListItem::createItemPanel(const LLViewerInventoryItem* item)
|
||||
{
|
||||
mItemIcon = get_item_icon(asset_type, inventory_type, wearable_type, FALSE);
|
||||
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory_item.xml");
|
||||
if (item)
|
||||
{
|
||||
return new LLPanelInventoryListItem(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
LLPanelInventoryItem::~LLPanelInventoryItem()
|
||||
LLPanelInventoryListItem::~LLPanelInventoryListItem()
|
||||
{}
|
||||
|
||||
//virtual
|
||||
BOOL LLPanelInventoryItem::postBuild()
|
||||
BOOL LLPanelInventoryListItem::postBuild()
|
||||
{
|
||||
mIcon = getChild<LLIconCtrl>("item_icon");
|
||||
mTitle = getChild<LLTextBox>("item_name");
|
||||
|
|
@ -76,14 +78,14 @@ BOOL LLPanelInventoryItem::postBuild()
|
|||
}
|
||||
|
||||
//virtual
|
||||
void LLPanelInventoryItem::setValue(const LLSD& value)
|
||||
void LLPanelInventoryListItem::setValue(const LLSD& value)
|
||||
{
|
||||
if (!value.isMap()) return;
|
||||
if (!value.has("selected")) return;
|
||||
childSetVisible("selected_icon", value["selected"]);
|
||||
}
|
||||
|
||||
void LLPanelInventoryItem::updateItem()
|
||||
void LLPanelInventoryListItem::updateItem()
|
||||
{
|
||||
if (mItemIcon.notNull())
|
||||
mIcon->setImage(mItemIcon);
|
||||
|
|
@ -95,28 +97,47 @@ void LLPanelInventoryItem::updateItem()
|
|||
mHighlightedText);
|
||||
}
|
||||
|
||||
void LLPanelInventoryItem::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
void LLPanelInventoryListItem::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
childSetVisible("hovered_icon", true);
|
||||
|
||||
LLPanel::onMouseEnter(x, y, mask);
|
||||
}
|
||||
|
||||
void LLPanelInventoryItem::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
void LLPanelInventoryListItem::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
childSetVisible("hovered_icon", false);
|
||||
|
||||
LLPanel::onMouseLeave(x, y, mask);
|
||||
}
|
||||
|
||||
LLPanelInventoryListItem::LLPanelInventoryListItem(const LLViewerInventoryItem* item)
|
||||
: LLPanel()
|
||||
,mIcon(NULL)
|
||||
,mTitle(NULL)
|
||||
{
|
||||
mItemName = item->getName();
|
||||
mItemIcon = get_item_icon(item->getType(), item->getInventoryType(), item->getFlags(), FALSE);
|
||||
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory_item.xml");
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLInventoryItemsList::LLInventoryItemsList(const LLFlatListView::Params& p)
|
||||
LLInventoryItemsList::Params::Params()
|
||||
{}
|
||||
|
||||
LLInventoryItemsList::LLInventoryItemsList(const LLInventoryItemsList::Params& p)
|
||||
: LLFlatListView(p)
|
||||
, mNeedsRefresh(false)
|
||||
{}
|
||||
{
|
||||
// TODO: mCommitOnSelectionChange is set to "false" in LLFlatListView
|
||||
// but reset to true in all derived classes. This settings might need to
|
||||
// be added to LLFlatListView::Params() and/or set to "true" by default.
|
||||
setCommitOnSelectionChange(true);
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLInventoryItemsList::~LLInventoryItemsList()
|
||||
|
|
@ -196,10 +217,15 @@ void LLInventoryItemsList::computeDifference(
|
|||
|
||||
void LLInventoryItemsList::addNewItem(LLViewerInventoryItem* item)
|
||||
{
|
||||
llassert(item);
|
||||
if (!item)
|
||||
{
|
||||
llwarns << "No inventory item. Couldn't create flat list item." << llendl;
|
||||
llassert(!"No inventory item. Couldn't create flat list item.");
|
||||
}
|
||||
|
||||
LLPanelInventoryItem *list_item = new LLPanelInventoryItem(item->getType(),
|
||||
item->getInventoryType(), item->getFlags(), item->getName(), LLStringUtil::null);
|
||||
LLPanelInventoryListItem *list_item = LLPanelInventoryListItem::createItemPanel(item);
|
||||
if (!list_item)
|
||||
return;
|
||||
|
||||
if (!addItem(list_item, item->getUUID()))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,6 +2,10 @@
|
|||
* @file llinventoryitemslist.h
|
||||
* @brief A list of inventory items represented by LLFlatListView.
|
||||
*
|
||||
* Class LLInventoryItemsList implements a flat list of inventory items.
|
||||
* Class LLPanelInventoryListItem displays inventory item as an element
|
||||
* of LLInventoryItemsList.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2010, Linden Research, Inc.
|
||||
|
|
@ -32,28 +36,23 @@
|
|||
#ifndef LL_LLINVENTORYITEMSLIST_H
|
||||
#define LL_LLINVENTORYITEMSLIST_H
|
||||
|
||||
#include "lldarray.h"
|
||||
|
||||
#include "llpanel.h"
|
||||
|
||||
#include "llassettype.h"
|
||||
|
||||
#include "llinventorytype.h"
|
||||
|
||||
// newview
|
||||
#include "llflatlistview.h"
|
||||
#include "llinventorymodel.h"
|
||||
|
||||
class LLIconCtrl;
|
||||
class LLTextBox;
|
||||
class LLViewerInventoryItem;
|
||||
|
||||
class LLPanelInventoryItem : public LLPanel
|
||||
class LLPanelInventoryListItem : public LLPanel
|
||||
{
|
||||
public:
|
||||
LLPanelInventoryItem(LLAssetType::EType asset_type,
|
||||
LLInventoryType::EType inventory_type,
|
||||
U32 wearable_type,
|
||||
const std::string &item_name,
|
||||
const std::string &hl);
|
||||
virtual ~LLPanelInventoryItem();
|
||||
static LLPanelInventoryListItem* createItemPanel(const LLViewerInventoryItem* item);
|
||||
|
||||
virtual ~LLPanelInventoryListItem();
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void setValue(const LLSD& value);
|
||||
|
|
@ -63,6 +62,9 @@ public:
|
|||
void onMouseEnter(S32 x, S32 y, MASK mask);
|
||||
void onMouseLeave(S32 x, S32 y, MASK mask);
|
||||
|
||||
protected:
|
||||
LLPanelInventoryListItem(const LLViewerInventoryItem* item);
|
||||
|
||||
private:
|
||||
LLIconCtrl* mIcon;
|
||||
LLTextBox* mTitle;
|
||||
|
|
@ -72,13 +74,17 @@ private:
|
|||
std::string mHighlightedText;
|
||||
};
|
||||
|
||||
|
||||
class LLInventoryItemsList : public LLFlatListView
|
||||
{
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLFlatListView::Params>
|
||||
{
|
||||
Params();
|
||||
};
|
||||
|
||||
virtual ~LLInventoryItemsList();
|
||||
|
||||
void refreshList(const LLInventoryModel::item_array_t item_array);
|
||||
void refreshList(const LLDynamicArray<LLPointer<LLViewerInventoryItem> > item_array);
|
||||
|
||||
/**
|
||||
* Let list know items need to be refreshed in next draw()
|
||||
|
|
@ -91,7 +97,7 @@ public:
|
|||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
LLInventoryItemsList(const LLFlatListView::Params& p);
|
||||
LLInventoryItemsList(const LLInventoryItemsList::Params& p);
|
||||
|
||||
uuid_vec_t& getIDs() { return mIDs; }
|
||||
|
||||
|
|
|
|||
|
|
@ -658,11 +658,13 @@ void LLInventoryCategoriesObserver::changed(U32 mask)
|
|||
|
||||
for (category_map_t::iterator iter = mCategoryMap.begin();
|
||||
iter != mCategoryMap.end();
|
||||
iter++)
|
||||
++iter)
|
||||
{
|
||||
// Inventory category version is used to find out if some changes
|
||||
// to a category have been made.
|
||||
S32 version = gInventory.getCategory((*iter).first)->getVersion();
|
||||
LLViewerInventoryCategory* category = gInventory.getCategory((*iter).first);
|
||||
if (!category)
|
||||
continue;
|
||||
|
||||
S32 version = category->getVersion();
|
||||
if (version != (*iter).second.mVersion)
|
||||
{
|
||||
// Update category version in map.
|
||||
|
|
@ -674,11 +676,27 @@ void LLInventoryCategoriesObserver::changed(U32 mask)
|
|||
|
||||
void LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t cb)
|
||||
{
|
||||
S32 version = gInventory.getCategory(cat_id)->getVersion();
|
||||
S32 version;
|
||||
LLViewerInventoryCategory* category = gInventory.getCategory(cat_id);
|
||||
if (category)
|
||||
{
|
||||
// Inventory category version is used to find out if some changes
|
||||
// to a category have been made.
|
||||
version = category->getVersion();
|
||||
}
|
||||
else
|
||||
{
|
||||
// If category could not be retrieved it might mean that
|
||||
// inventory is unusable at the moment so the category is
|
||||
// stored with VERSION_UNKNOWN and it may be updated later.
|
||||
version = LLViewerInventoryCategory::VERSION_UNKNOWN;
|
||||
}
|
||||
|
||||
version = category->getVersion();
|
||||
mCategoryMap.insert(category_map_value_t(cat_id, LLCategoryData(cb, version)));
|
||||
}
|
||||
|
||||
void LLInventoryCategoriesObserver::removeCategory(const LLUUID& cat_id)
|
||||
{
|
||||
mCategoryMap.erase(mCategoryMap.find(cat_id));
|
||||
mCategoryMap.erase(cat_id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,9 @@
|
|||
|
||||
#include "lloutfitslist.h"
|
||||
|
||||
// llcommon
|
||||
#include "llcommonutils.h"
|
||||
|
||||
#include "llaccordionctrl.h"
|
||||
#include "llaccordionctrltab.h"
|
||||
#include "llinventoryfunctions.h"
|
||||
|
|
@ -45,7 +48,12 @@ LLOutfitsList::LLOutfitsList()
|
|||
: LLPanel()
|
||||
, mAccordion(NULL)
|
||||
, mListCommands(NULL)
|
||||
{}
|
||||
{
|
||||
mCategoriesObserver = new LLInventoryCategoriesObserver();
|
||||
gInventory.addObserver(mCategoriesObserver);
|
||||
|
||||
gInventory.addObserver(this);
|
||||
}
|
||||
|
||||
LLOutfitsList::~LLOutfitsList()
|
||||
{
|
||||
|
|
@ -65,11 +73,6 @@ BOOL LLOutfitsList::postBuild()
|
|||
{
|
||||
mAccordion = getChild<LLAccordionCtrl>("outfits_accordion");
|
||||
|
||||
mCategoriesObserver = new LLInventoryCategoriesObserver();
|
||||
gInventory.addObserver(mCategoriesObserver);
|
||||
|
||||
gInventory.addObserver(this);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -79,15 +82,15 @@ void LLOutfitsList::changed(U32 mask)
|
|||
if (!gInventory.isInventoryUsable())
|
||||
return;
|
||||
|
||||
// Start observing changes in "My Outfits" category.
|
||||
const LLUUID outfits = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
|
||||
mCategoriesObserver->addCategory(outfits,
|
||||
boost::bind(&LLOutfitsList::refreshList, this, outfits));
|
||||
|
||||
LLViewerInventoryCategory* category = gInventory.getCategory(outfits);
|
||||
if (!category)
|
||||
return;
|
||||
|
||||
// Start observing changes in "My Outfits" category.
|
||||
mCategoriesObserver->addCategory(outfits,
|
||||
boost::bind(&LLOutfitsList::refreshList, this, outfits));
|
||||
|
||||
// Fetch "My Outfits" 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
|
||||
|
|
@ -121,7 +124,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
|
|||
// Creating a vector of newly collected sub-categories UUIDs.
|
||||
for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
|
||||
iter != cat_array.end();
|
||||
iter++)
|
||||
++iter)
|
||||
{
|
||||
vnew.push_back((*iter)->getUUID());
|
||||
}
|
||||
|
|
@ -131,35 +134,21 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
|
|||
// Creating a vector of currently displayed sub-categories UUIDs.
|
||||
for (outfits_map_t::const_iterator iter = mOutfitsMap.begin();
|
||||
iter != mOutfitsMap.end();
|
||||
iter++)
|
||||
++iter)
|
||||
{
|
||||
vcur.push_back((*iter).first);
|
||||
}
|
||||
|
||||
// Sorting both vectors to compare.
|
||||
std::sort(vcur.begin(), vcur.end());
|
||||
std::sort(vnew.begin(), vnew.end());
|
||||
|
||||
uuid_vec_t vadded;
|
||||
uuid_vec_t vremoved;
|
||||
|
||||
uuid_vec_t::iterator it;
|
||||
size_t maxsize = llmax(vcur.size(), vnew.size());
|
||||
vadded.resize(maxsize);
|
||||
vremoved.resize(maxsize);
|
||||
|
||||
// what to remove
|
||||
it = set_difference(vcur.begin(), vcur.end(), vnew.begin(), vnew.end(), vremoved.begin());
|
||||
vremoved.erase(it, vremoved.end());
|
||||
|
||||
// what to add
|
||||
it = set_difference(vnew.begin(), vnew.end(), vcur.begin(), vcur.end(), vadded.begin());
|
||||
vadded.erase(it, vadded.end());
|
||||
// Create added and removed items vectors.
|
||||
LLCommonUtils::computeDifference(vnew, vcur, vadded, vremoved);
|
||||
|
||||
// Handle added tabs.
|
||||
for (uuid_vec_t::const_iterator iter = vadded.begin();
|
||||
iter != vadded.end();
|
||||
iter++)
|
||||
++iter)
|
||||
{
|
||||
const LLUUID cat_id = (*iter);
|
||||
LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id);
|
||||
|
|
@ -175,7 +164,7 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
|
|||
LLAccordionCtrlTab* tab = LLUICtrlFactory::defaultBuilder<LLAccordionCtrlTab>(accordionXmlNode, NULL, NULL);
|
||||
|
||||
// *TODO: LLUICtrlFactory::defaultBuilder does not use "display_children" from xml. Should be investigated.
|
||||
tab->setDisplayChildren(false);
|
||||
tab->setDisplayChildren(false);
|
||||
mAccordion->addCollapsibleCtrl(tab);
|
||||
|
||||
// Map the new tab with outfit category UUID.
|
||||
|
|
@ -185,6 +174,9 @@ void LLOutfitsList::refreshList(const LLUUID& category_id)
|
|||
LLWearableItemsList* list = tab->getChild<LLWearableItemsList>("wearable_items_list");
|
||||
mCategoriesObserver->addCategory(cat_id, boost::bind(&LLWearableItemsList::updateList, list, cat_id));
|
||||
|
||||
// Setting drop down callback to monitor currently selected outfit.
|
||||
tab->setDropDownStateChangedCallback(boost::bind(&LLOutfitsList::onTabExpandedCollapsed, this, list));
|
||||
|
||||
// Fetch the new outfit contents.
|
||||
cat->fetch();
|
||||
|
||||
|
|
@ -252,6 +244,14 @@ void LLOutfitsList::updateOutfitTab(const LLUUID& category_id)
|
|||
}
|
||||
}
|
||||
|
||||
void LLOutfitsList::onTabExpandedCollapsed(LLWearableItemsList* list)
|
||||
{
|
||||
if (!list)
|
||||
return;
|
||||
|
||||
// TODO: Add outfit selection handling.
|
||||
}
|
||||
|
||||
void LLOutfitsList::setFilterSubString(const std::string& string)
|
||||
{
|
||||
mFilterSubString = string;
|
||||
|
|
|
|||
|
|
@ -41,6 +41,17 @@ class LLAccordionCtrl;
|
|||
class LLAccordionCtrlTab;
|
||||
class LLWearableItemsList;
|
||||
|
||||
/**
|
||||
* @class LLOutfitsList
|
||||
*
|
||||
* A list of agents's outfits from "My Outfits" inventory category
|
||||
* which displays each outfit in an accordion tab with a flat list
|
||||
* of items inside it.
|
||||
* Uses LLInventoryCategoriesObserver to monitor changes to "My Outfits"
|
||||
* inventory category and refresh the outfits listed in it.
|
||||
* This class is derived from LLInventoryObserver to know when inventory
|
||||
* becomes usable and it is safe to request data from inventory model.
|
||||
*/
|
||||
class LLOutfitsList : public LLPanel, public LLInventoryObserver
|
||||
{
|
||||
public:
|
||||
|
|
@ -56,6 +67,8 @@ public:
|
|||
// Update tab displaying outfit identified by category_id.
|
||||
void updateOutfitTab(const LLUUID& category_id);
|
||||
|
||||
void onTabExpandedCollapsed(LLWearableItemsList* list);
|
||||
|
||||
void setFilterSubString(const std::string& string);
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -62,7 +62,10 @@ bool LLFindOutfitItems::operator()(LLInventoryCategory* cat,
|
|||
|
||||
static const LLDefaultChildRegistry::Register<LLWearableItemsList> r("wearable_items_list");
|
||||
|
||||
LLWearableItemsList::LLWearableItemsList(const LLFlatListView::Params& p)
|
||||
LLWearableItemsList::Params::Params()
|
||||
{}
|
||||
|
||||
LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
|
||||
: LLInventoryItemsList(p)
|
||||
{}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,23 +34,32 @@
|
|||
|
||||
#include "llpanel.h"
|
||||
|
||||
#include "llassettype.h"
|
||||
|
||||
#include "llinventorytype.h"
|
||||
|
||||
// newview
|
||||
#include "llinventoryitemslist.h"
|
||||
|
||||
/**
|
||||
* @class LLWearableItemsList
|
||||
*
|
||||
* A flat list of wearable inventory items.
|
||||
* Collects all items that can be a part of an outfit from
|
||||
* an inventory category specified by UUID and displays them
|
||||
* as a flat list.
|
||||
*/
|
||||
class LLWearableItemsList : public LLInventoryItemsList
|
||||
{
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLInventoryItemsList::Params>
|
||||
{
|
||||
Params();
|
||||
};
|
||||
|
||||
virtual ~LLWearableItemsList();
|
||||
|
||||
void updateList(const LLUUID& category_id);
|
||||
|
||||
protected:
|
||||
friend class LLUICtrlFactory;
|
||||
LLWearableItemsList(const LLFlatListView::Params& p);
|
||||
LLWearableItemsList(const LLWearableItemsList::Params& p);
|
||||
};
|
||||
|
||||
#endif //LL_LLWEARABLEITEMSLIST_H
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<!-- *NOTE: mantipov: this xml is intended to be used inside panel_outfits_list.xml for each outfit folder-->
|
||||
<!-- All accordion tabs in the My Appearance/My Outfits panel will be created from this one at runtume-->
|
||||
<!-- All accordion tabs in the My Appearance/My Outfits panel will be created from this one at runtime-->
|
||||
<accordion_tab
|
||||
display_children="false"
|
||||
follows="all"
|
||||
height="40"
|
||||
height="45"
|
||||
layout="topleft"
|
||||
name="Mockup Tab"
|
||||
title="Mockup Tab"
|
||||
|
|
|
|||
Loading…
Reference in New Issue