EXT-8237 FIX Opening up Edit Outfit- Add More->Shirt causes FPS to drop from 60fps to 18fps for a really long time
EXT-8235 FIX HUGE long delay when reopening and/or closing edit outfit sidepanel if "Add More..." is active EXT-7695 FIX UI lockup after add wearable, right click av -> Change Outfit reviewed by Virmaster
parent
419bfb16fd
commit
1f79bee86e
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
/**
|
||||
* @file llbutton.cpp
|
||||
* @brief LLButton base class
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ bool LLFlatListView::insertItemAfter(LLPanel* after_item, LLPanel* item_to_add,
|
|||
}
|
||||
|
||||
|
||||
bool LLFlatListView::removeItem(LLPanel* item)
|
||||
bool LLFlatListView::removeItem(LLPanel* item, bool rearrange)
|
||||
{
|
||||
if (!item) return false;
|
||||
if (item->getParent() != mItemsPanel) return false;
|
||||
|
|
@ -165,22 +165,22 @@ bool LLFlatListView::removeItem(LLPanel* item)
|
|||
item_pair_t* item_pair = getItemPair(item);
|
||||
if (!item_pair) return false;
|
||||
|
||||
return removeItemPair(item_pair);
|
||||
return removeItemPair(item_pair, rearrange);
|
||||
}
|
||||
|
||||
bool LLFlatListView::removeItemByValue(const LLSD& value)
|
||||
bool LLFlatListView::removeItemByValue(const LLSD& value, bool rearrange)
|
||||
{
|
||||
if (value.isUndefined()) return false;
|
||||
|
||||
item_pair_t* item_pair = getItemPair(value);
|
||||
if (!item_pair) return false;
|
||||
|
||||
return removeItemPair(item_pair);
|
||||
return removeItemPair(item_pair, rearrange);
|
||||
}
|
||||
|
||||
bool LLFlatListView::removeItemByUUID(const LLUUID& uuid)
|
||||
bool LLFlatListView::removeItemByUUID(const LLUUID& uuid, bool rearrange)
|
||||
{
|
||||
return removeItemByValue(LLSD(uuid));
|
||||
return removeItemByValue(LLSD(uuid), rearrange);
|
||||
}
|
||||
|
||||
LLPanel* LLFlatListView::getItemByValue(const LLSD& value) const
|
||||
|
|
@ -970,7 +970,7 @@ bool LLFlatListView::isSelected(item_pair_t* item_pair) const
|
|||
return std::find(mSelectedItemPairs.begin(), it_end, item_pair) != it_end;
|
||||
}
|
||||
|
||||
bool LLFlatListView::removeItemPair(item_pair_t* item_pair)
|
||||
bool LLFlatListView::removeItemPair(item_pair_t* item_pair, bool rearrange)
|
||||
{
|
||||
llassert(item_pair);
|
||||
|
||||
|
|
@ -1002,8 +1002,11 @@ bool LLFlatListView::removeItemPair(item_pair_t* item_pair)
|
|||
item_pair->first->die();
|
||||
delete item_pair;
|
||||
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
if (rearrange)
|
||||
{
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,6 +117,9 @@ public:
|
|||
Params();
|
||||
};
|
||||
|
||||
// disable traversal when finding widget to hand focus off to
|
||||
/*virtual*/ BOOL canFocusChildren() const { return FALSE; }
|
||||
|
||||
/**
|
||||
* Connects callback to signal called when Return key is pressed.
|
||||
*/
|
||||
|
|
@ -149,19 +152,19 @@ public:
|
|||
* Remove specified item
|
||||
* @return true if the item was removed, false otherwise
|
||||
*/
|
||||
virtual bool removeItem(LLPanel* item);
|
||||
virtual bool removeItem(LLPanel* item, bool rearrange = true);
|
||||
|
||||
/**
|
||||
* Remove an item specified by value
|
||||
* @return true if the item was removed, false otherwise
|
||||
*/
|
||||
virtual bool removeItemByValue(const LLSD& value);
|
||||
virtual bool removeItemByValue(const LLSD& value, bool rearrange = true);
|
||||
|
||||
/**
|
||||
* Remove an item specified by uuid
|
||||
* @return true if the item was removed, false otherwise
|
||||
*/
|
||||
virtual bool removeItemByUUID(const LLUUID& uuid);
|
||||
virtual bool removeItemByUUID(const LLUUID& uuid, bool rearrange = true);
|
||||
|
||||
/**
|
||||
* Get an item by value
|
||||
|
|
@ -349,7 +352,7 @@ protected:
|
|||
|
||||
virtual bool isSelected(item_pair_t* item_pair) const;
|
||||
|
||||
virtual bool removeItemPair(item_pair_t* item_pair);
|
||||
virtual bool removeItemPair(item_pair_t* item_pair, bool rearrange);
|
||||
|
||||
/**
|
||||
* Notify parent about changed size of internal controls with "size_changes" action
|
||||
|
|
|
|||
|
|
@ -66,7 +66,10 @@ bool LLTextBase::compare_segment_end::operator()(const LLTextSegmentPtr& a, cons
|
|||
{
|
||||
return a->getStart() < b->getStart();
|
||||
}
|
||||
return a->getEnd() < b->getEnd();
|
||||
else
|
||||
{
|
||||
return a->getEnd() < b->getEnd();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -174,7 +177,7 @@ LLTextBase::Params::Params()
|
|||
|
||||
LLTextBase::LLTextBase(const LLTextBase::Params &p)
|
||||
: LLUICtrl(p, LLTextViewModelPtr(new LLTextViewModel)),
|
||||
mURLClickSignal(),
|
||||
mURLClickSignal(NULL),
|
||||
mMaxTextByteLength( p.max_text_length ),
|
||||
mDefaultFont(p.font),
|
||||
mFontShadow(p.font_shadow),
|
||||
|
|
@ -209,7 +212,8 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
|
|||
mParseHTML(p.allow_html),
|
||||
mParseHighlights(p.parse_highlights),
|
||||
mBGVisible(p.bg_visible),
|
||||
mScroller(NULL)
|
||||
mScroller(NULL),
|
||||
mStyleDirty(true)
|
||||
{
|
||||
if(p.allow_scroll)
|
||||
{
|
||||
|
|
@ -248,9 +252,8 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
|
|||
|
||||
LLTextBase::~LLTextBase()
|
||||
{
|
||||
// Menu, like any other LLUICtrl, is deleted by its parent - gMenuHolder
|
||||
|
||||
mSegments.clear();
|
||||
delete mURLClickSignal;
|
||||
}
|
||||
|
||||
void LLTextBase::initFromParams(const LLTextBase::Params& p)
|
||||
|
|
@ -296,13 +299,18 @@ bool LLTextBase::truncate()
|
|||
return did_truncate;
|
||||
}
|
||||
|
||||
LLStyle::Params LLTextBase::getDefaultStyleParams()
|
||||
const LLStyle::Params& LLTextBase::getDefaultStyleParams()
|
||||
{
|
||||
return LLStyle::Params()
|
||||
.color(LLUIColor(&mFgColor))
|
||||
.readonly_color(LLUIColor(&mReadOnlyFgColor))
|
||||
.font(mDefaultFont)
|
||||
.drop_shadow(mFontShadow);
|
||||
if (mStyleDirty)
|
||||
{
|
||||
mDefaultStyle
|
||||
.color(LLUIColor(&mFgColor))
|
||||
.readonly_color(LLUIColor(&mReadOnlyFgColor))
|
||||
.font(mDefaultFont)
|
||||
.drop_shadow(mFontShadow);
|
||||
mStyleDirty = false;
|
||||
}
|
||||
return mDefaultStyle;
|
||||
}
|
||||
|
||||
void LLTextBase::onValueChange(S32 start, S32 end)
|
||||
|
|
@ -861,11 +869,12 @@ BOOL LLTextBase::handleMouseUp(S32 x, S32 y, MASK mask)
|
|||
if (cur_segment && cur_segment->handleMouseUp(x, y, mask))
|
||||
{
|
||||
// Did we just click on a link?
|
||||
if (cur_segment->getStyle()
|
||||
if (mURLClickSignal
|
||||
&& cur_segment->getStyle()
|
||||
&& cur_segment->getStyle()->isLink())
|
||||
{
|
||||
// *TODO: send URL here?
|
||||
mURLClickSignal(this, LLSD() );
|
||||
(*mURLClickSignal)(this, LLSD() );
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -1039,12 +1048,14 @@ void LLTextBase::draw()
|
|||
void LLTextBase::setColor( const LLColor4& c )
|
||||
{
|
||||
mFgColor = c;
|
||||
mStyleDirty = true;
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLTextBase::setReadOnlyColor(const LLColor4 &c)
|
||||
{
|
||||
mReadOnlyFgColor = c;
|
||||
mStyleDirty = true;
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
@ -1488,12 +1499,22 @@ void LLTextBase::getSegmentAndOffset( S32 startpos, segment_set_t::iterator* seg
|
|||
|
||||
LLTextBase::segment_set_t::iterator LLTextBase::getSegIterContaining(S32 index)
|
||||
{
|
||||
if (index > getLength()) { return mSegments.end(); }
|
||||
|
||||
// when there are no segments, we return the end iterator, which must be checked by caller
|
||||
if (mSegments.size() <= 1) { return mSegments.begin(); }
|
||||
|
||||
segment_set_t::iterator it = mSegments.upper_bound(new LLIndexSegment(index));
|
||||
return it;
|
||||
}
|
||||
|
||||
LLTextBase::segment_set_t::const_iterator LLTextBase::getSegIterContaining(S32 index) const
|
||||
{
|
||||
if (index > getLength()) { return mSegments.end(); }
|
||||
|
||||
// when there are no segments, we return the end iterator, which must be checked by caller
|
||||
if (mSegments.size() <= 1) { return mSegments.begin(); }
|
||||
|
||||
LLTextBase::segment_set_t::const_iterator it = mSegments.upper_bound(new LLIndexSegment(index));
|
||||
return it;
|
||||
}
|
||||
|
|
@ -2324,6 +2345,15 @@ LLRect LLTextBase::getVisibleDocumentRect() const
|
|||
}
|
||||
}
|
||||
|
||||
boost::signals2::connection LLTextBase::setURLClickedCallback(const commit_signal_t::slot_type& cb)
|
||||
{
|
||||
if (!mURLClickSignal)
|
||||
{
|
||||
mURLClickSignal = new commit_signal_t();
|
||||
}
|
||||
return mURLClickSignal->connect(cb);
|
||||
}
|
||||
|
||||
//
|
||||
// LLTextSegment
|
||||
//
|
||||
|
|
|
|||
|
|
@ -361,10 +361,7 @@ public:
|
|||
virtual void appendLineBreakSegment(const LLStyle::Params& style_params);
|
||||
virtual void appendImageSegment(const LLStyle::Params& style_params);
|
||||
virtual void appendWidget(const LLInlineViewSegment::Params& params, const std::string& text, bool allow_undo);
|
||||
|
||||
public:
|
||||
// Fired when a URL link is clicked
|
||||
commit_signal_t mURLClickSignal;
|
||||
boost::signals2::connection setURLClickedCallback(const commit_signal_t::slot_type& cb);
|
||||
|
||||
protected:
|
||||
// helper structs
|
||||
|
|
@ -457,7 +454,7 @@ protected:
|
|||
void createDefaultSegment();
|
||||
virtual void updateSegments();
|
||||
void insertSegment(LLTextSegmentPtr segment_to_insert);
|
||||
LLStyle::Params getDefaultStyleParams();
|
||||
const LLStyle::Params& getDefaultStyleParams();
|
||||
|
||||
// manage lines
|
||||
S32 getLineStart( S32 line ) const;
|
||||
|
|
@ -497,6 +494,12 @@ protected:
|
|||
LLRect mVisibleTextRect; // The rect in which text is drawn. Excludes borders.
|
||||
LLRect mTextBoundingRect;
|
||||
|
||||
// default text style
|
||||
LLStyle::Params mDefaultStyle;
|
||||
bool mStyleDirty;
|
||||
const LLFontGL* const mDefaultFont; // font that is used when none specified, can only be set by constructor
|
||||
const LLFontGL::ShadowType mFontShadow; // shadow style, can only be set by constructor
|
||||
|
||||
// colors
|
||||
LLUIColor mCursorColor;
|
||||
LLUIColor mFgColor;
|
||||
|
|
@ -523,8 +526,6 @@ protected:
|
|||
LLFontGL::VAlign mVAlign;
|
||||
F32 mLineSpacingMult; // multiple of line height used as space for a single line of text (e.g. 1.5 to get 50% padding)
|
||||
S32 mLineSpacingPixels; // padding between lines
|
||||
const LLFontGL* mDefaultFont; // font that is used when none specified
|
||||
LLFontGL::ShadowType mFontShadow;
|
||||
bool mBorderVisible;
|
||||
bool mParseHTML; // make URLs interactive
|
||||
bool mParseHighlights; // highlight user-defined keywords
|
||||
|
|
@ -547,6 +548,9 @@ protected:
|
|||
bool mScrollNeeded; // need to change scroll region because of change to cursor position
|
||||
S32 mScrollIndex; // index of first character to keep visible in scroll region
|
||||
|
||||
// Fired when a URL link is clicked
|
||||
commit_signal_t* mURLClickSignal;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -264,8 +264,6 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
|
|||
mContextMenu(NULL),
|
||||
mShowContextMenu(p.show_context_menu)
|
||||
{
|
||||
mDefaultFont = p.font;
|
||||
|
||||
mSourceID.generate();
|
||||
|
||||
//FIXME: use image?
|
||||
|
|
|
|||
|
|
@ -675,7 +675,7 @@ BOOL LLUICtrl::getIsChrome() const
|
|||
class CompareByDefaultTabGroup: public LLCompareByTabOrder
|
||||
{
|
||||
public:
|
||||
CompareByDefaultTabGroup(LLView::child_tab_order_t order, S32 default_tab_group):
|
||||
CompareByDefaultTabGroup(const LLView::child_tab_order_t& order, S32 default_tab_group):
|
||||
LLCompareByTabOrder(order),
|
||||
mDefaultTabGroup(default_tab_group) {}
|
||||
private:
|
||||
|
|
@ -699,13 +699,16 @@ class LLUICtrl::DefaultTabGroupFirstSorter : public LLQuerySorter, public LLSing
|
|||
{
|
||||
public:
|
||||
/*virtual*/ void operator() (LLView * parent, viewList_t &children) const
|
||||
{
|
||||
{
|
||||
children.sort(CompareByDefaultTabGroup(parent->getCtrlOrder(), parent->getDefaultTabGroup()));
|
||||
}
|
||||
};
|
||||
|
||||
LLFastTimer::DeclareTimer FTM_FOCUS_FIRST_ITEM("Focus First Item");
|
||||
|
||||
BOOL LLUICtrl::focusFirstItem(BOOL prefer_text_fields, BOOL focus_flash)
|
||||
{
|
||||
LLFastTimer _(FTM_FOCUS_FIRST_ITEM);
|
||||
// try to select default tab group child
|
||||
LLCtrlQuery query = getTabOrderQuery();
|
||||
// sort things such that the default tab group is at the front
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ public:
|
|||
void popFactoryFunctions();
|
||||
|
||||
template<typename T>
|
||||
static T* createWidget(typename T::Params& params, LLView* parent = NULL)
|
||||
static T* createWidget(typename const T::Params& params, LLView* parent = NULL)
|
||||
{
|
||||
T* widget = NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -135,9 +135,16 @@ void LLUIString::updateResult() const
|
|||
mResult = mOrig;
|
||||
|
||||
// get the defailt args + local args
|
||||
LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
|
||||
combined_args.insert(mArgs.begin(), mArgs.end());
|
||||
LLStringUtil::format(mResult, combined_args);
|
||||
if (mArgs.empty())
|
||||
{
|
||||
LLStringUtil::format(mResult, LLTrans::getDefaultArgs());
|
||||
}
|
||||
else
|
||||
{
|
||||
LLStringUtil::format_map_t combined_args = LLTrans::getDefaultArgs();
|
||||
combined_args.insert(mArgs.begin(), mArgs.end());
|
||||
LLStringUtil::format(mResult, combined_args);
|
||||
}
|
||||
}
|
||||
|
||||
void LLUIString::updateWResult() const
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ public:
|
|||
|
||||
virtual BOOL postBuild() { return TRUE; }
|
||||
|
||||
child_tab_order_t getCtrlOrder() const { return mCtrlOrder; }
|
||||
const child_tab_order_t& getCtrlOrder() const { return mCtrlOrder; }
|
||||
ctrl_list_t getCtrlList() const;
|
||||
ctrl_list_t getCtrlListSorted() const;
|
||||
|
||||
|
|
@ -620,12 +620,13 @@ public:
|
|||
class LLCompareByTabOrder
|
||||
{
|
||||
public:
|
||||
LLCompareByTabOrder(LLView::child_tab_order_t order) : mTabOrder(order) {}
|
||||
LLCompareByTabOrder(const LLView::child_tab_order_t& order) : mTabOrder(order) {}
|
||||
virtual ~LLCompareByTabOrder() {}
|
||||
bool operator() (const LLView* const a, const LLView* const b) const;
|
||||
private:
|
||||
virtual bool compareTabOrders(const LLView::tab_order_t & a, const LLView::tab_order_t & b) const { return a < b; }
|
||||
LLView::child_tab_order_t mTabOrder;
|
||||
// ok to store a reference, as this should only be allocated on stack during view query operations
|
||||
const LLView::child_tab_order_t& mTabOrder;
|
||||
};
|
||||
|
||||
template <class T> T* LLView::getChild(const std::string& name, BOOL recurse) const
|
||||
|
|
|
|||
|
|
@ -95,8 +95,8 @@ viewList_t LLViewQuery::run(LLView* view) const
|
|||
if (pre.first)
|
||||
{
|
||||
post = runFilters(view, filtered_children, mPostFilters);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(pre.first && post.first)
|
||||
{
|
||||
|
|
@ -119,12 +119,12 @@ void LLViewQuery::filterChildren(LLView * view, viewList_t & filtered_children)
|
|||
(*mSorterp)(view, views); // sort the children per the sorter
|
||||
}
|
||||
for(LLView::child_list_iter_t iter = views.begin();
|
||||
iter != views.end();
|
||||
iter++)
|
||||
{
|
||||
viewList_t indiv_children = this->run(*iter);
|
||||
filtered_children.insert(filtered_children.end(), indiv_children.begin(), indiv_children.end());
|
||||
}
|
||||
iter != views.end();
|
||||
iter++)
|
||||
{
|
||||
viewList_t indiv_children = this->run(*iter);
|
||||
filtered_children.splice(filtered_children.end(), indiv_children);
|
||||
}
|
||||
}
|
||||
|
||||
filterResult_t LLViewQuery::runFilters(LLView * view, const viewList_t children, const filterList_t filters) const
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ public:
|
|||
viewList_t operator () (LLView * view) const { return run(view); }
|
||||
|
||||
// override this method to provide iteration over other types of children
|
||||
virtual void filterChildren(LLView * view, viewList_t & filtered_children) const;
|
||||
virtual void filterChildren(LLView * view, viewList_t& filtered_children) const;
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
|||
|
|
@ -463,7 +463,7 @@ LLPanelClothingListItem* LLCOFWearables::buildClothingListItem(LLViewerInventory
|
|||
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_icon", last);
|
||||
item_panel->setSeparatorVisible(last);
|
||||
|
||||
return item_panel;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ LLDragAndDropButton::Params::Params()
|
|||
|
||||
}
|
||||
|
||||
LLDragAndDropButton::LLDragAndDropButton(Params& params)
|
||||
LLDragAndDropButton::LLDragAndDropButton(const Params& params)
|
||||
: LLButton(params)
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public:
|
|||
Params();
|
||||
};
|
||||
|
||||
LLDragAndDropButton(Params& params);
|
||||
LLDragAndDropButton(const Params& params);
|
||||
|
||||
typedef boost::function<bool (
|
||||
S32 /*x*/, S32 /*y*/, MASK /*mask*/, BOOL /*drop*/,
|
||||
|
|
|
|||
|
|
@ -161,8 +161,7 @@ BOOL LLInspectObject::postBuild(void)
|
|||
|
||||
// Hide floater when name links clicked
|
||||
LLTextBox* textbox = getChild<LLTextBox>("object_creator");
|
||||
textbox->mURLClickSignal.connect(
|
||||
boost::bind(&LLInspectObject::closeFloater, this, false) );
|
||||
textbox->setURLClickedCallback(boost::bind(&LLInspectObject::closeFloater, this, false) );
|
||||
|
||||
// Hook up functionality
|
||||
getChild<LLUICtrl>("buy_btn")->setCommitCallback(
|
||||
|
|
|
|||
|
|
@ -107,9 +107,12 @@ void LLInventoryItemsList::idle(void* user_data)
|
|||
}
|
||||
}
|
||||
|
||||
LLFastTimer::DeclareTimer FTM_INVENTORY_ITEMS_REFRESH("Inventory List Refresh");
|
||||
|
||||
void LLInventoryItemsList::refresh()
|
||||
{
|
||||
static const unsigned ADD_LIMIT = 50;
|
||||
LLFastTimer _(FTM_INVENTORY_ITEMS_REFRESH);
|
||||
static const unsigned ADD_LIMIT = 20;
|
||||
|
||||
uuid_vec_t added_items;
|
||||
uuid_vec_t removed_items;
|
||||
|
|
@ -140,7 +143,8 @@ void LLInventoryItemsList::refresh()
|
|||
it = removed_items.begin();
|
||||
for( ; removed_items.end() != it; ++it)
|
||||
{
|
||||
removeItemByUUID(*it);
|
||||
// don't filter items right away
|
||||
removeItemByUUID(*it, false);
|
||||
}
|
||||
|
||||
// Filter, rearrange and notify parent about shape changes
|
||||
|
|
|
|||
|
|
@ -51,7 +51,12 @@ static const S32 WIDGET_SPACING = 3;
|
|||
|
||||
LLPanelInventoryListItemBase::Params::Params()
|
||||
: default_style("default_style"),
|
||||
worn_style("worn_style")
|
||||
worn_style("worn_style"),
|
||||
hover_image("hover_image"),
|
||||
selected_image("selected_image"),
|
||||
separator_image("separator_image"),
|
||||
item_icon("item_icon"),
|
||||
item_name("item_name")
|
||||
{};
|
||||
|
||||
LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInventoryItem* item)
|
||||
|
|
@ -59,8 +64,10 @@ LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInven
|
|||
LLPanelInventoryListItemBase* list_item = NULL;
|
||||
if (item)
|
||||
{
|
||||
list_item = new LLPanelInventoryListItemBase(item);
|
||||
list_item->init();
|
||||
const LLPanelInventoryListItemBase::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelInventoryListItemBase>();
|
||||
list_item = new LLPanelInventoryListItemBase(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
|
@ -76,6 +83,25 @@ void LLPanelInventoryListItemBase::draw()
|
|||
}
|
||||
setNeedsRefresh(false);
|
||||
}
|
||||
|
||||
if (mHovered && mHoverImage)
|
||||
{
|
||||
mHoverImage->draw(getLocalRect());
|
||||
}
|
||||
|
||||
if (mSelected && mSelectedImage)
|
||||
{
|
||||
mSelectedImage->draw(getLocalRect());
|
||||
}
|
||||
|
||||
if (mSeparatorVisible && mSeparatorImage)
|
||||
{
|
||||
// stretch along bottom of listitem, using image height
|
||||
LLRect separator_rect = getLocalRect();
|
||||
separator_rect.mTop = mSeparatorImage->getHeight();
|
||||
mSeparatorImage->draw(separator_rect);
|
||||
}
|
||||
|
||||
LLPanel::draw();
|
||||
}
|
||||
|
||||
|
|
@ -134,9 +160,6 @@ void LLPanelInventoryListItemBase::setShowWidget(LLUICtrl* ctrl, bool show)
|
|||
|
||||
BOOL LLPanelInventoryListItemBase::postBuild()
|
||||
{
|
||||
setIconCtrl(getChild<LLIconCtrl>("item_icon"));
|
||||
setTitleCtrl(getChild<LLTextBox>("item_name"));
|
||||
|
||||
LLViewerInventoryItem* inv_item = getItem();
|
||||
if (inv_item)
|
||||
{
|
||||
|
|
@ -156,18 +179,18 @@ void LLPanelInventoryListItemBase::setValue(const LLSD& value)
|
|||
{
|
||||
if (!value.isMap()) return;
|
||||
if (!value.has("selected")) return;
|
||||
childSetVisible("selected_icon", value["selected"]);
|
||||
mSelected = value["selected"];
|
||||
}
|
||||
|
||||
void LLPanelInventoryListItemBase::onMouseEnter(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
childSetVisible("hovered_icon", true);
|
||||
mHovered = true;
|
||||
LLPanel::onMouseEnter(x, y, mask);
|
||||
}
|
||||
|
||||
void LLPanelInventoryListItemBase::onMouseLeave(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
childSetVisible("hovered_icon", false);
|
||||
mHovered = false;
|
||||
LLPanel::onMouseLeave(x, y, mask);
|
||||
}
|
||||
|
||||
|
|
@ -244,21 +267,47 @@ S32 LLPanelInventoryListItemBase::notify(const LLSD& info)
|
|||
return rv;
|
||||
}
|
||||
|
||||
LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem* item)
|
||||
: LLPanel()
|
||||
, mInventoryItemUUID(item ? item->getUUID() : LLUUID::null)
|
||||
, mIconCtrl(NULL)
|
||||
, mTitleCtrl(NULL)
|
||||
, mWidgetSpacing(WIDGET_SPACING)
|
||||
, mLeftWidgetsWidth(0)
|
||||
, mRightWidgetsWidth(0)
|
||||
, mNeedsRefresh(false)
|
||||
LLPanelInventoryListItemBase::LLPanelInventoryListItemBase(LLViewerInventoryItem* item, const LLPanelInventoryListItemBase::Params& params)
|
||||
: LLPanel(params),
|
||||
mInventoryItemUUID(item ? item->getUUID() : LLUUID::null),
|
||||
mIconCtrl(NULL),
|
||||
mTitleCtrl(NULL),
|
||||
mWidgetSpacing(WIDGET_SPACING),
|
||||
mLeftWidgetsWidth(0),
|
||||
mRightWidgetsWidth(0),
|
||||
mNeedsRefresh(false),
|
||||
mHovered(false),
|
||||
mSelected(false),
|
||||
mSeparatorVisible(false),
|
||||
mHoverImage(params.hover_image),
|
||||
mSelectedImage(params.selected_image),
|
||||
mSeparatorImage(params.separator_image)
|
||||
{
|
||||
}
|
||||
LLIconCtrl::Params icon_params(params.item_icon);
|
||||
applyXUILayout(icon_params, this);
|
||||
|
||||
void LLPanelInventoryListItemBase::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory_item.xml");
|
||||
mIconCtrl = LLUICtrlFactory::create<LLIconCtrl>(icon_params);
|
||||
if (mIconCtrl)
|
||||
{
|
||||
addChild(mIconCtrl);
|
||||
}
|
||||
else
|
||||
{
|
||||
mIconCtrl = dynamic_cast<LLIconCtrl*>(LLUICtrlFactory::createDefaultWidget<LLIconCtrl>("item_icon"));
|
||||
}
|
||||
|
||||
LLTextBox::Params text_params(params.item_name);
|
||||
applyXUILayout(text_params, this);
|
||||
|
||||
mTitleCtrl = LLUICtrlFactory::create<LLTextBox>(text_params);
|
||||
if (mTitleCtrl)
|
||||
{
|
||||
addChild(mTitleCtrl);
|
||||
}
|
||||
else
|
||||
{
|
||||
mTitleCtrl = dynamic_cast<LLTextBox*>(LLUICtrlFactory::createDefaultWidget<LLTextBox>("item_title"));
|
||||
}
|
||||
}
|
||||
|
||||
class WidgetVisibilityChanger
|
||||
|
|
|
|||
|
|
@ -41,12 +41,12 @@
|
|||
// llui
|
||||
#include "llpanel.h"
|
||||
#include "llstyle.h"
|
||||
#include "lliconctrl.h"
|
||||
#include "lltextbox.h"
|
||||
|
||||
// newview
|
||||
#include "llwearabletype.h"
|
||||
|
||||
class LLIconCtrl;
|
||||
class LLTextBox;
|
||||
class LLViewerInventoryItem;
|
||||
|
||||
/**
|
||||
|
|
@ -70,6 +70,11 @@ public:
|
|||
{
|
||||
Optional<LLStyle::Params> default_style,
|
||||
worn_style;
|
||||
Optional<LLUIImage*> hover_image,
|
||||
selected_image,
|
||||
separator_image;
|
||||
Optional<LLIconCtrl::Params> item_icon;
|
||||
Optional<LLTextBox::Params> item_name;
|
||||
Params();
|
||||
};
|
||||
|
||||
|
|
@ -149,30 +154,22 @@ public:
|
|||
/** Get the associated inventory item */
|
||||
LLViewerInventoryItem* getItem() const;
|
||||
|
||||
void setSeparatorVisible(bool visible) { mSeparatorVisible = visible; }
|
||||
|
||||
virtual ~LLPanelInventoryListItemBase(){}
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelInventoryListItemBase(LLViewerInventoryItem* item);
|
||||
LLPanelInventoryListItemBase(LLViewerInventoryItem* item, const Params& params);
|
||||
|
||||
typedef std::vector<LLUICtrl*> widget_array_t;
|
||||
|
||||
/**
|
||||
* Use it from a factory function to build panel, do not build panel in constructor
|
||||
*/
|
||||
virtual void init();
|
||||
|
||||
/**
|
||||
* Called after inventory item was updated, update panel widgets to reflect inventory changes.
|
||||
*/
|
||||
virtual void updateItem(const std::string& name,
|
||||
EItemState item_state = IS_DEFAULT);
|
||||
|
||||
/** setter for mIconCtrl */
|
||||
void setIconCtrl(LLIconCtrl* icon) { mIconCtrl = icon; }
|
||||
/** setter for MTitleCtrl */
|
||||
void setTitleCtrl(LLTextBox* tb) { mTitleCtrl = tb; }
|
||||
|
||||
void setLeftWidgetsWidth(S32 width) { mLeftWidgetsWidth = width; }
|
||||
void setRightWidgetsWidth(S32 width) { mRightWidgetsWidth = width; }
|
||||
|
||||
|
|
@ -221,6 +218,14 @@ private:
|
|||
LLTextBox* mTitleCtrl;
|
||||
|
||||
LLUIImagePtr mIconImage;
|
||||
LLUIImagePtr mHoverImage;
|
||||
LLUIImagePtr mSelectedImage;
|
||||
LLUIImagePtr mSeparatorImage;
|
||||
|
||||
bool mHovered;
|
||||
bool mSelected;
|
||||
bool mSeparatorVisible;
|
||||
|
||||
std::string mHighlightedText;
|
||||
|
||||
widget_array_t mLeftSideWidgets;
|
||||
|
|
|
|||
|
|
@ -230,15 +230,15 @@ LLSideTrayTab* LLSideTrayTab::createInstance ()
|
|||
|
||||
LLSideTray::Params::Params()
|
||||
: collapsed("collapsed",false),
|
||||
tab_btn_image_normal("tab_btn_image","sidebar_tab_left.tga"),
|
||||
tab_btn_image_selected("tab_btn_image_selected","button_enabled_selected_32x128.tga"),
|
||||
tab_btn_image_normal("tab_btn_image",LLUI::getUIImage("sidebar_tab_left.tga")),
|
||||
tab_btn_image_selected("tab_btn_image_selected",LLUI::getUIImage("button_enabled_selected_32x128.tga")),
|
||||
default_button_width("tab_btn_width",32),
|
||||
default_button_height("tab_btn_height",32),
|
||||
default_button_margin("tab_btn_margin",0)
|
||||
{}
|
||||
|
||||
//virtual
|
||||
LLSideTray::LLSideTray(Params& params)
|
||||
LLSideTray::LLSideTray(const Params& params)
|
||||
: LLPanel(params)
|
||||
,mActiveTab(0)
|
||||
,mCollapsed(false)
|
||||
|
|
@ -373,10 +373,10 @@ LLButton* LLSideTray::createButton (const std::string& name,const std::string& i
|
|||
bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
|
||||
bparams.rect (rect);
|
||||
bparams.tab_stop(false);
|
||||
bparams.image_unselected.name(sidetray_params.tab_btn_image_normal);
|
||||
bparams.image_selected.name(sidetray_params.tab_btn_image_selected);
|
||||
bparams.image_disabled.name(sidetray_params.tab_btn_image_normal);
|
||||
bparams.image_disabled_selected.name(sidetray_params.tab_btn_image_selected);
|
||||
bparams.image_unselected(sidetray_params.tab_btn_image_normal);
|
||||
bparams.image_selected(sidetray_params.tab_btn_image_selected);
|
||||
bparams.image_disabled(sidetray_params.tab_btn_image_normal);
|
||||
bparams.image_disabled_selected(sidetray_params.tab_btn_image_selected);
|
||||
|
||||
LLButton* button = LLUICtrlFactory::create<LLButton> (bparams);
|
||||
button->setLabel(name);
|
||||
|
|
|
|||
|
|
@ -54,13 +54,13 @@ public:
|
|||
: public LLInitParam::Block<Params, LLPanel::Params>
|
||||
{
|
||||
// initial state
|
||||
Optional<bool> collapsed;
|
||||
Optional<std::string> tab_btn_image_normal;
|
||||
Optional<std::string> tab_btn_image_selected;
|
||||
Optional<bool> collapsed;
|
||||
Optional<LLUIImage*> tab_btn_image_normal,
|
||||
tab_btn_image_selected;
|
||||
|
||||
Optional<S32> default_button_width;
|
||||
Optional<S32> default_button_height;
|
||||
Optional<S32> default_button_margin;
|
||||
Optional<S32> default_button_width,
|
||||
default_button_height,
|
||||
default_button_margin;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
|
@ -68,7 +68,7 @@ public:
|
|||
static LLSideTray* getInstance ();
|
||||
static bool instanceCreated ();
|
||||
protected:
|
||||
LLSideTray(Params& params);
|
||||
LLSideTray(const Params& params);
|
||||
typedef std::vector<LLSideTrayTab*> child_vector_t;
|
||||
typedef child_vector_t::iterator child_vector_iter_t;
|
||||
typedef child_vector_t::const_iterator child_vector_const_iter_t;
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@ void LLPanelWearableListItem::onMouseLeave(S32 x, S32 y, MASK mask)
|
|||
reshapeWidgets();
|
||||
}
|
||||
|
||||
LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelInventoryListItemBase(item)
|
||||
LLPanelWearableListItem::LLPanelWearableListItem(LLViewerInventoryItem* item, const LLPanelWearableListItem::Params& params)
|
||||
: LLPanelInventoryListItemBase(item, params)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -101,15 +101,19 @@ LLPanelWearableOutfitItem* LLPanelWearableOutfitItem::create(LLViewerInventoryIt
|
|||
LLPanelWearableOutfitItem* list_item = NULL;
|
||||
if (item)
|
||||
{
|
||||
list_item = new LLPanelWearableOutfitItem(item, worn_indication_enabled);
|
||||
list_item->init();
|
||||
const LLPanelInventoryListItemBase::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelInventoryListItemBase>();
|
||||
|
||||
list_item = new LLPanelWearableOutfitItem(item, worn_indication_enabled, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelWearableOutfitItem::LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
|
||||
bool worn_indication_enabled)
|
||||
: LLPanelInventoryListItemBase(item)
|
||||
bool worn_indication_enabled,
|
||||
const LLPanelWearableOutfitItem::Params& params)
|
||||
: LLPanelInventoryListItemBase(item, params)
|
||||
, mWornIndicationEnabled(worn_indication_enabled)
|
||||
{
|
||||
}
|
||||
|
|
@ -132,6 +136,17 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name,
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelClothingListItem(&typeid(LLPanelClothingListItem::Params), "clothing_list_item");
|
||||
|
||||
|
||||
LLPanelClothingListItem::Params::Params()
|
||||
: up_btn("up_btn"),
|
||||
down_btn("down_btn"),
|
||||
edit_btn("edit_btn"),
|
||||
lock_panel("lock_panel"),
|
||||
edit_panel("edit_panel"),
|
||||
lock_icon("lock_icon")
|
||||
{}
|
||||
|
||||
// static
|
||||
LLPanelClothingListItem* LLPanelClothingListItem::create(LLViewerInventoryItem* item)
|
||||
|
|
@ -139,26 +154,56 @@ LLPanelClothingListItem* LLPanelClothingListItem::create(LLViewerInventoryItem*
|
|||
LLPanelClothingListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
list_item = new LLPanelClothingListItem(item);
|
||||
list_item->init();
|
||||
const LLPanelClothingListItem::Params& params = LLUICtrlFactory::getDefaultParams<LLPanelClothingListItem>();
|
||||
list_item = new LLPanelClothingListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelClothingListItem::LLPanelClothingListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelDeletableWearableListItem(item)
|
||||
LLPanelClothingListItem::LLPanelClothingListItem(LLViewerInventoryItem* item, const LLPanelClothingListItem::Params& params)
|
||||
: LLPanelDeletableWearableListItem(item, params)
|
||||
{
|
||||
LLButton::Params button_params = params.up_btn;
|
||||
applyXUILayout(button_params, this);
|
||||
addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
|
||||
button_params = params.down_btn;
|
||||
applyXUILayout(button_params, this);
|
||||
addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
|
||||
LLPanel::Params panel_params = params.lock_panel;
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* lock_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(lock_panelp);
|
||||
|
||||
panel_params = params.edit_panel;
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* edit_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(edit_panelp);
|
||||
|
||||
if (lock_panelp)
|
||||
{
|
||||
LLIconCtrl::Params icon_params = params.lock_icon;
|
||||
applyXUILayout(icon_params, this);
|
||||
lock_panelp->addChild(LLUICtrlFactory::create<LLIconCtrl>(icon_params));
|
||||
}
|
||||
|
||||
if (edit_panelp)
|
||||
{
|
||||
button_params = params.edit_btn;
|
||||
applyXUILayout(button_params, this);
|
||||
edit_panelp->addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
}
|
||||
|
||||
setSeparatorVisible(false);
|
||||
}
|
||||
|
||||
LLPanelClothingListItem::~LLPanelClothingListItem()
|
||||
{
|
||||
}
|
||||
|
||||
void LLPanelClothingListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_clothing_list_item.xml");
|
||||
}
|
||||
|
||||
BOOL LLPanelClothingListItem::postBuild()
|
||||
{
|
||||
LLPanelDeletableWearableListItem::postBuild();
|
||||
|
|
@ -178,32 +223,64 @@ BOOL LLPanelClothingListItem::postBuild()
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelBodyPartsListItem(&typeid(LLPanelBodyPartsListItem::Params), "bodyparts_list_item");
|
||||
|
||||
|
||||
LLPanelBodyPartsListItem::Params::Params()
|
||||
: edit_btn("edit_btn"),
|
||||
edit_panel("edit_panel"),
|
||||
lock_panel("lock_panel"),
|
||||
lock_icon("lock_icon")
|
||||
{}
|
||||
|
||||
// static
|
||||
LLPanelBodyPartsListItem* LLPanelBodyPartsListItem::create(LLViewerInventoryItem* item)
|
||||
{
|
||||
LLPanelBodyPartsListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
list_item = new LLPanelBodyPartsListItem(item);
|
||||
list_item->init();
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelBodyPartsListItem>();
|
||||
list_item = new LLPanelBodyPartsListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelBodyPartsListItem::LLPanelBodyPartsListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelWearableListItem(item)
|
||||
LLPanelBodyPartsListItem::LLPanelBodyPartsListItem(LLViewerInventoryItem* item, const LLPanelBodyPartsListItem::Params& params)
|
||||
: LLPanelWearableListItem(item, params)
|
||||
{
|
||||
LLPanel::Params panel_params = params.edit_panel;
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* edit_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(edit_panelp);
|
||||
|
||||
panel_params = params.lock_panel;
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* lock_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(lock_panelp);
|
||||
|
||||
if (edit_panelp)
|
||||
{
|
||||
LLButton::Params btn_params = params.edit_btn;
|
||||
applyXUILayout(btn_params, this);
|
||||
edit_panelp->addChild(LLUICtrlFactory::create<LLButton>(btn_params));
|
||||
}
|
||||
|
||||
if (lock_panelp)
|
||||
{
|
||||
LLIconCtrl::Params icon_params = params.lock_icon;
|
||||
applyXUILayout(icon_params, this);
|
||||
lock_panelp->addChild(LLUICtrlFactory::create<LLIconCtrl>(icon_params));
|
||||
}
|
||||
|
||||
setSeparatorVisible(true);
|
||||
}
|
||||
|
||||
LLPanelBodyPartsListItem::~LLPanelBodyPartsListItem()
|
||||
{
|
||||
}
|
||||
|
||||
void LLPanelBodyPartsListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_body_parts_list_item.xml");
|
||||
}
|
||||
|
||||
BOOL LLPanelBodyPartsListItem::postBuild()
|
||||
{
|
||||
LLPanelInventoryListItemBase::postBuild();
|
||||
|
|
@ -214,6 +291,11 @@ BOOL LLPanelBodyPartsListItem::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelDeletableWearableListItem(&typeid(LLPanelDeletableWearableListItem::Params), "deletable_wearable_list_item");
|
||||
|
||||
LLPanelDeletableWearableListItem::Params::Params()
|
||||
: delete_btn("delete_btn")
|
||||
{}
|
||||
|
||||
// static
|
||||
LLPanelDeletableWearableListItem* LLPanelDeletableWearableListItem::create(LLViewerInventoryItem* item)
|
||||
|
|
@ -221,20 +303,22 @@ LLPanelDeletableWearableListItem* LLPanelDeletableWearableListItem::create(LLVie
|
|||
LLPanelDeletableWearableListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
list_item = new LLPanelDeletableWearableListItem(item);
|
||||
list_item->init();
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelDeletableWearableListItem>();
|
||||
list_item = new LLPanelDeletableWearableListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
||||
LLPanelDeletableWearableListItem::LLPanelDeletableWearableListItem(LLViewerInventoryItem* item)
|
||||
: LLPanelWearableListItem(item)
|
||||
LLPanelDeletableWearableListItem::LLPanelDeletableWearableListItem(LLViewerInventoryItem* item, const LLPanelDeletableWearableListItem::Params& params)
|
||||
: LLPanelWearableListItem(item, params)
|
||||
{
|
||||
}
|
||||
LLButton::Params button_params = params.delete_btn;
|
||||
applyXUILayout(button_params, this);
|
||||
addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
|
||||
void LLPanelDeletableWearableListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_deletable_wearable_list_item.xml");
|
||||
setSeparatorVisible(true);
|
||||
}
|
||||
|
||||
BOOL LLPanelDeletableWearableListItem::postBuild()
|
||||
|
|
@ -260,8 +344,11 @@ LLPanelAttachmentListItem* LLPanelAttachmentListItem::create(LLViewerInventoryIt
|
|||
LLPanelAttachmentListItem* list_item = NULL;
|
||||
if(item)
|
||||
{
|
||||
list_item = new LLPanelAttachmentListItem(item);
|
||||
list_item->init();
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelDeletableWearableListItem>();
|
||||
|
||||
list_item = new LLPanelAttachmentListItem(item, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
}
|
||||
return list_item;
|
||||
}
|
||||
|
|
@ -284,27 +371,32 @@ void LLPanelAttachmentListItem::updateItem(const std::string& name,
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
static LLWidgetNameRegistry::StaticRegistrar sRegisterPanelDummyClothingListItem(&typeid(LLPanelDummyClothingListItem::Params), "dummy_clothing_list_item");
|
||||
|
||||
LLPanelDummyClothingListItem::Params::Params()
|
||||
: add_panel("add_panel"),
|
||||
add_btn("add_btn")
|
||||
{}
|
||||
|
||||
LLPanelDummyClothingListItem* LLPanelDummyClothingListItem::create(LLWearableType::EType w_type)
|
||||
{
|
||||
LLPanelDummyClothingListItem* list_item = new LLPanelDummyClothingListItem(w_type);
|
||||
list_item->init();
|
||||
const Params& params = LLUICtrlFactory::getDefaultParams<LLPanelDummyClothingListItem>();
|
||||
|
||||
LLPanelDummyClothingListItem* list_item = new LLPanelDummyClothingListItem(w_type, params);
|
||||
list_item->initFromParams(params);
|
||||
list_item->postBuild();
|
||||
return list_item;
|
||||
}
|
||||
|
||||
BOOL LLPanelDummyClothingListItem::postBuild()
|
||||
{
|
||||
LLIconCtrl* icon = getChild<LLIconCtrl>("item_icon");
|
||||
setIconCtrl(icon);
|
||||
setTitleCtrl(getChild<LLTextBox>("item_name"));
|
||||
|
||||
addWidgetToRightSide("btn_add_panel");
|
||||
|
||||
setIconImage(LLInventoryIcon::getIcon(LLAssetType::AT_CLOTHING, LLInventoryType::IT_NONE, mWearableType, FALSE));
|
||||
updateItem(wearableTypeToString(mWearableType));
|
||||
|
||||
// Make it look loke clothing item - reserve space for 'delete' button
|
||||
setLeftWidgetsWidth(icon->getRect().mLeft);
|
||||
setLeftWidgetsWidth(getChildView("item_icon")->getRect().mLeft);
|
||||
|
||||
setWidgetsVisible(false);
|
||||
reshapeWidgets();
|
||||
|
|
@ -317,15 +409,23 @@ LLWearableType::EType LLPanelDummyClothingListItem::getWearableType() const
|
|||
return mWearableType;
|
||||
}
|
||||
|
||||
LLPanelDummyClothingListItem::LLPanelDummyClothingListItem(LLWearableType::EType w_type)
|
||||
: LLPanelWearableListItem(NULL)
|
||||
, mWearableType(w_type)
|
||||
LLPanelDummyClothingListItem::LLPanelDummyClothingListItem(LLWearableType::EType w_type, const LLPanelDummyClothingListItem::Params& params)
|
||||
: LLPanelWearableListItem(NULL, params),
|
||||
mWearableType(w_type)
|
||||
{
|
||||
}
|
||||
LLPanel::Params panel_params(params.add_panel);
|
||||
applyXUILayout(panel_params, this);
|
||||
LLPanel* add_panelp = LLUICtrlFactory::create<LLPanel>(panel_params);
|
||||
addChild(add_panelp);
|
||||
|
||||
void LLPanelDummyClothingListItem::init()
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_dummy_clothing_list_item.xml");
|
||||
if (add_panelp)
|
||||
{
|
||||
LLButton::Params button_params(params.add_btn);
|
||||
applyXUILayout(button_params, this);
|
||||
add_panelp->addChild(LLUICtrlFactory::create<LLButton>(button_params));
|
||||
}
|
||||
|
||||
setSeparatorVisible(true);
|
||||
}
|
||||
|
||||
typedef std::map<LLWearableType::EType, std::string> clothing_to_string_map_t;
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ public:
|
|||
|
||||
protected:
|
||||
|
||||
LLPanelWearableListItem(LLViewerInventoryItem* item);
|
||||
LLPanelWearableListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -93,7 +93,7 @@ public:
|
|||
|
||||
protected:
|
||||
LLPanelWearableOutfitItem(LLViewerInventoryItem* item,
|
||||
bool worn_indication_enabled);
|
||||
bool worn_indication_enabled, const Params& params);
|
||||
|
||||
private:
|
||||
bool mWornIndicationEnabled;
|
||||
|
|
@ -103,6 +103,13 @@ class LLPanelDeletableWearableListItem : public LLPanelWearableListItem
|
|||
{
|
||||
LOG_CLASS(LLPanelDeletableWearableListItem);
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLPanelWearableListItem::Params>
|
||||
{
|
||||
Optional<LLButton::Params> delete_btn;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
|
||||
static LLPanelDeletableWearableListItem* create(LLViewerInventoryItem* item);
|
||||
|
||||
|
|
@ -116,9 +123,7 @@ public:
|
|||
inline void setShowDeleteButton(bool show) { setShowWidget("btn_delete", show); }
|
||||
|
||||
protected:
|
||||
LLPanelDeletableWearableListItem(LLViewerInventoryItem* item);
|
||||
|
||||
/*virtual*/ void init();
|
||||
LLPanelDeletableWearableListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
};
|
||||
|
||||
/** Outfit list item for an attachment */
|
||||
|
|
@ -134,7 +139,7 @@ public:
|
|||
EItemState item_state = IS_DEFAULT);
|
||||
|
||||
protected:
|
||||
LLPanelAttachmentListItem(LLViewerInventoryItem* item) : LLPanelDeletableWearableListItem(item) {};
|
||||
LLPanelAttachmentListItem(LLViewerInventoryItem* item, const Params& params) : LLPanelDeletableWearableListItem(item, params) {};
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -147,6 +152,18 @@ class LLPanelClothingListItem : public LLPanelDeletableWearableListItem
|
|||
LOG_CLASS(LLPanelClothingListItem);
|
||||
public:
|
||||
|
||||
struct Params : public LLInitParam::Block<Params, LLPanelDeletableWearableListItem::Params>
|
||||
{
|
||||
Optional<LLButton::Params> up_btn,
|
||||
down_btn,
|
||||
edit_btn;
|
||||
Optional<LLPanel::Params> lock_panel,
|
||||
edit_panel;
|
||||
Optional<LLIconCtrl::Params> lock_icon;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
static LLPanelClothingListItem* create(LLViewerInventoryItem* item);
|
||||
|
||||
virtual ~LLPanelClothingListItem();
|
||||
|
|
@ -162,18 +179,25 @@ public:
|
|||
inline void setShowLockButton(bool show) { setShowWidget("btn_lock", show); }
|
||||
inline void setShowEditButton(bool show) { setShowWidget("btn_edit_panel", show); }
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
LLPanelClothingListItem(LLViewerInventoryItem* item);
|
||||
|
||||
/*virtual*/ void init();
|
||||
LLPanelClothingListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
|
||||
};
|
||||
|
||||
class LLPanelBodyPartsListItem : public LLPanelWearableListItem
|
||||
{
|
||||
LOG_CLASS(LLPanelBodyPartsListItem);
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLPanelWearableListItem::Params>
|
||||
{
|
||||
Optional<LLButton::Params> edit_btn;
|
||||
Optional<LLPanel::Params> lock_panel,
|
||||
edit_panel;
|
||||
Optional<LLIconCtrl::Params> lock_icon;
|
||||
|
||||
Params();
|
||||
};
|
||||
|
||||
static LLPanelBodyPartsListItem* create(LLViewerInventoryItem* item);
|
||||
|
||||
|
|
@ -188,9 +212,7 @@ public:
|
|||
inline void setShowEditButton(bool show) { setShowWidget("btn_edit_panel", show); }
|
||||
|
||||
protected:
|
||||
LLPanelBodyPartsListItem(LLViewerInventoryItem* item);
|
||||
|
||||
/*virtual*/ void init();
|
||||
LLPanelBodyPartsListItem(LLViewerInventoryItem* item, const Params& params);
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -202,15 +224,19 @@ protected:
|
|||
class LLPanelDummyClothingListItem : public LLPanelWearableListItem
|
||||
{
|
||||
public:
|
||||
struct Params : public LLInitParam::Block<Params, LLPanelWearableListItem::Params>
|
||||
{
|
||||
Optional<LLPanel::Params> add_panel;
|
||||
Optional<LLButton::Params> add_btn;
|
||||
Params();
|
||||
};
|
||||
static LLPanelDummyClothingListItem* create(LLWearableType::EType w_type);
|
||||
|
||||
/*virtual*/ BOOL postBuild();
|
||||
LLWearableType::EType getWearableType() const;
|
||||
|
||||
protected:
|
||||
LLPanelDummyClothingListItem(LLWearableType::EType w_type);
|
||||
|
||||
/*virtual*/ void init();
|
||||
LLPanelDummyClothingListItem(LLWearableType::EType w_type, const Params& params);
|
||||
|
||||
static std::string wearableTypeToString(LLWearableType::EType w_type);
|
||||
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ void LLWinDebug::init()
|
|||
s_first_run = false;
|
||||
|
||||
// Add this exeption hanlder to save windows style minidump.
|
||||
AddVectoredExceptionHandler(0, &vectoredHandler);
|
||||
//AddVectoredExceptionHandler(0, &vectoredHandler);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,105 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="wearable_item"
|
||||
top="0"
|
||||
width="380">
|
||||
<icon
|
||||
follows="top|right|left"
|
||||
height="22"
|
||||
image_name="ListItem_Over"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="hovered_icon"
|
||||
top="1"
|
||||
visible="false"
|
||||
width="380" />
|
||||
<icon
|
||||
height="22"
|
||||
follows="top|right|left"
|
||||
image_name="ListItem_Select"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="selected_icon"
|
||||
top="1"
|
||||
visible="false"
|
||||
width="380" />
|
||||
<icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<text
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="5"
|
||||
value="..."
|
||||
width="359" />
|
||||
<panel
|
||||
background_visible="false"
|
||||
name="btn_lock"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="You don't have permission to edit">
|
||||
<icon
|
||||
name="btn_lock1"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_name="Locked_Icon"
|
||||
top="2"
|
||||
left="5"
|
||||
height="13"
|
||||
width="9"
|
||||
tab_stop="false" />
|
||||
</panel>
|
||||
<panel
|
||||
background_visible="false"
|
||||
name="btn_edit_panel"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="1"
|
||||
left_pad="3"
|
||||
height="23"
|
||||
width="26"
|
||||
tab_stop="false">
|
||||
<button
|
||||
name="btn_edit"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="Edit_Wrench"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="Edit this shape"/>
|
||||
</panel>
|
||||
<icon
|
||||
follows="left|right|top"
|
||||
height="3"
|
||||
image_name="Wearables_Divider"
|
||||
layout="bottomleft"
|
||||
left="0"
|
||||
name="wearable_type_separator_icon"
|
||||
top="0"
|
||||
visible="true"
|
||||
width="380"/>
|
||||
</panel>
|
||||
|
|
@ -1,137 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="wearable_item"
|
||||
top="0"
|
||||
width="380">
|
||||
<icon
|
||||
follows="top|right|left"
|
||||
height="22"
|
||||
image_name="ListItem_Over"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="hovered_icon"
|
||||
top="1"
|
||||
visible="false"
|
||||
width="380" />
|
||||
<icon
|
||||
height="22"
|
||||
follows="top|right|left"
|
||||
image_name="ListItem_Select"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="selected_icon"
|
||||
top="1"
|
||||
visible="false"
|
||||
width="380" />
|
||||
<button
|
||||
name="btn_delete"
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
image_unselected="Toast_CloseBtn"
|
||||
image_selected="Toast_CloseBtn"
|
||||
top="3"
|
||||
left="0"
|
||||
height="18"
|
||||
width="18"
|
||||
tab_stop="false"
|
||||
tool_tip="Remove from outfit" />
|
||||
<icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left_pad="3"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<text
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="5"
|
||||
value="..."
|
||||
width="359" />
|
||||
<button
|
||||
name="btn_move_up"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="UpArrow_Off"
|
||||
top="1"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false" />
|
||||
<button
|
||||
name="btn_move_down"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="DownArrow_Off"
|
||||
top="1"
|
||||
left_pad="3"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false" />
|
||||
<panel
|
||||
background_visible="false"
|
||||
name="btn_lock"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="You don't have permission to edit">
|
||||
<icon
|
||||
name="btn_lock1"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_name="Locked_Icon"
|
||||
top="2"
|
||||
left="5"
|
||||
height="13"
|
||||
width="9"
|
||||
tab_stop="false" />
|
||||
</panel>
|
||||
<panel
|
||||
background_visible="false"
|
||||
name="btn_edit_panel"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left_pad="3"
|
||||
height="23"
|
||||
width="26"
|
||||
tab_stop="false">
|
||||
<button
|
||||
name="btn_edit"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="Edit_Wrench"
|
||||
top="1"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="Edit this wearable"/>
|
||||
</panel>
|
||||
<icon
|
||||
follows="left|right|top"
|
||||
height="3"
|
||||
image_name="Wearables_Divider"
|
||||
layout="bottomleft"
|
||||
left="0"
|
||||
name="wearable_type_separator_icon"
|
||||
top="0"
|
||||
visible="false"
|
||||
width="380"/>
|
||||
</panel>
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="deletable_wearable_item"
|
||||
top="0"
|
||||
width="380">
|
||||
<icon
|
||||
follows="top|right|left"
|
||||
height="22"
|
||||
image_name="ListItem_Over"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="hovered_icon"
|
||||
top="1"
|
||||
visible="false"
|
||||
width="380" />
|
||||
<icon
|
||||
height="22"
|
||||
follows="top|right|left"
|
||||
image_name="ListItem_Select"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="selected_icon"
|
||||
top="1"
|
||||
visible="false"
|
||||
width="380" />
|
||||
<button
|
||||
name="btn_delete"
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
image_unselected="Toast_CloseBtn"
|
||||
image_selected="Toast_CloseBtn"
|
||||
top="3"
|
||||
left="0"
|
||||
height="18"
|
||||
width="18"
|
||||
tab_stop="false"
|
||||
tool_tip="Remove from outfit"/>
|
||||
<icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left_pad="3"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<text
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="5"
|
||||
value="..."
|
||||
width="359" />
|
||||
<icon
|
||||
follows="left|right|top"
|
||||
height="3"
|
||||
image_name="Wearables_Divider"
|
||||
layout="bottomleft"
|
||||
left="0"
|
||||
name="wearable_type_separator_icon"
|
||||
top="0"
|
||||
visible="true"
|
||||
width="380"/>
|
||||
</panel>
|
||||
|
|
@ -1,83 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="dummy_clothing_item"
|
||||
top="0"
|
||||
width="380">
|
||||
<icon
|
||||
follows="top|right|left"
|
||||
height="22"
|
||||
image_name="ListItem_Over"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="hovered_icon"
|
||||
top="1"
|
||||
visible="false"
|
||||
width="380" />
|
||||
<icon
|
||||
height="22"
|
||||
follows="top|right|left"
|
||||
image_name="ListItem_Select"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="selected_icon"
|
||||
top="1"
|
||||
visible="false"
|
||||
width="380" />
|
||||
<icon
|
||||
height="16"
|
||||
color="0.75 0.75 0.75 1"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<text
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left_pad="5"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="LtGray_50"
|
||||
top="4"
|
||||
value="..."
|
||||
width="359" />
|
||||
<panel
|
||||
name="btn_add_panel"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="26"
|
||||
tab_stop="false">
|
||||
<button
|
||||
name="btn_add"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="AddItem_Off"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="Add more items of this type" />
|
||||
</panel>
|
||||
<icon
|
||||
follows="left|right|top"
|
||||
height="3"
|
||||
image_name="Wearables_Divider"
|
||||
layout="bottomleft"
|
||||
left="0"
|
||||
name="wearable_type_separator_icon"
|
||||
top="0"
|
||||
visible="true"
|
||||
width="380"/>
|
||||
</panel>
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<bodyparts_list_item
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="wearable_item"
|
||||
bottom="0"
|
||||
width="380">
|
||||
<item_icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="21"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="5"
|
||||
value="..."
|
||||
width="359" />
|
||||
<lock_panel
|
||||
background_visible="false"
|
||||
name="btn_lock"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="You don't have permission to edit"/>
|
||||
<lock_icon
|
||||
name="btn_lock1"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_name="Locked_Icon"
|
||||
top="2"
|
||||
left="5"
|
||||
height="13"
|
||||
width="9"
|
||||
tab_stop="false" />
|
||||
<edit_panel
|
||||
background_visible="false"
|
||||
name="btn_edit_panel"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="1"
|
||||
left="17"
|
||||
height="23"
|
||||
width="26"
|
||||
tab_stop="false"/>
|
||||
<edit_btn
|
||||
name="btn_edit"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="Edit_Wrench"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="Edit this shape"/>
|
||||
</bodyparts_list_item>
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<clothing_list_item
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="wearable_item"
|
||||
bottom="0"
|
||||
width="380">
|
||||
<lock_icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="21"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="42"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="5"
|
||||
value="..."
|
||||
width="359" />
|
||||
<up_btn
|
||||
name="btn_move_up"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="UpArrow_Off"
|
||||
top="1"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false" />
|
||||
<down_btn
|
||||
name="btn_move_down"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="DownArrow_Off"
|
||||
top="1"
|
||||
left="26"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false" />
|
||||
<lock_panel
|
||||
background_visible="false"
|
||||
name="btn_lock"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="You don't have permission to edit"/>
|
||||
<lock_icon
|
||||
name="btn_lock1"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_name="Locked_Icon"
|
||||
top="2"
|
||||
left="5"
|
||||
height="13"
|
||||
width="9"
|
||||
tab_stop="false" />
|
||||
<edit_panel
|
||||
background_visible="false"
|
||||
name="btn_edit_panel"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="26"
|
||||
height="23"
|
||||
width="26"
|
||||
tab_stop="false"/>
|
||||
<edit_btn
|
||||
name="btn_edit"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="Edit_Wrench"
|
||||
top="1"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="Edit this wearable"/>
|
||||
</clothing_list_item>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<deletable_wearable_list_item
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="deletable_wearable_item"
|
||||
bottom="0"
|
||||
width="380">
|
||||
<delete_btn
|
||||
name="btn_delete"
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
image_unselected="Toast_CloseBtn"
|
||||
image_selected="Toast_CloseBtn"
|
||||
top="3"
|
||||
left="0"
|
||||
height="18"
|
||||
width="18"
|
||||
tab_stop="false"
|
||||
tool_tip="Remove from outfit"/>
|
||||
<item_icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="24"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="45"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="5"
|
||||
value="..."
|
||||
width="359" />
|
||||
</deletable_wearable_list_item>
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<dummy_clothing_list_item
|
||||
follows="top|right|left"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="dummy_clothing_item"
|
||||
bottom="0"
|
||||
width="380">
|
||||
<item_icon
|
||||
height="16"
|
||||
color="0.75 0.75 0.75 1"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="item_icon"
|
||||
top="2"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
left="41"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="LtGray_50"
|
||||
top="4"
|
||||
value="..."
|
||||
width="359" />
|
||||
<add_panel
|
||||
name="btn_add_panel"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="26"
|
||||
tab_stop="false"/>
|
||||
<add_btn
|
||||
name="btn_add"
|
||||
layout="topleft"
|
||||
follows="top|right"
|
||||
image_overlay="AddItem_Off"
|
||||
top="0"
|
||||
left="0"
|
||||
height="23"
|
||||
width="23"
|
||||
tab_stop="false"
|
||||
tool_tip="Add more items of this type" />
|
||||
</dummy_clothing_list_item>
|
||||
|
|
@ -1,11 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<inventory_list_item
|
||||
height="0"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="inventory_list_item"
|
||||
top="0"
|
||||
width="0">
|
||||
follows="top|right|left"
|
||||
height="20"
|
||||
name="inventory_item"
|
||||
tab_stop="false"
|
||||
hover_image="ListItem_Over"
|
||||
selected_name="ListItem_Select"
|
||||
separator_image="Wearables_Divider"
|
||||
width="380">
|
||||
<!-- DEFAULT style for inventory list item -->
|
||||
<default_style
|
||||
font="SansSerifSmall"
|
||||
|
|
@ -16,4 +18,25 @@
|
|||
font="SansSerifSmall"
|
||||
font.style="BOLD"
|
||||
color="EmphasisColor" />
|
||||
<item_icon
|
||||
height="16"
|
||||
follows="top|left"
|
||||
image_name="Inv_Object"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="item_icon"
|
||||
top="0"
|
||||
width="16" />
|
||||
<item_name
|
||||
follows="left|right"
|
||||
height="20"
|
||||
layout="topleft"
|
||||
left="21"
|
||||
allow_html="false"
|
||||
use_ellipses="true"
|
||||
name="item_name"
|
||||
text_color="white"
|
||||
top="4"
|
||||
value="..."
|
||||
width="359" />
|
||||
</inventory_list_item>
|
||||
|
|
|
|||
Loading…
Reference in New Issue