master
Richard Linden 2010-07-09 14:30:49 -07:00
commit 5b1386e5b6
34 changed files with 696 additions and 628 deletions

View File

@ -1,3 +1,4 @@
/**
* @file llbutton.cpp
* @brief LLButton base class

View File

@ -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;
if (rearrange)
{
rearrangeItems();
notifyParentItemsRectChanged();
}
return true;
}
@ -1099,7 +1102,7 @@ void LLFlatListView::onFocusReceived()
{
if (size())
{
mSelectedItemsBorder->setVisible(TRUE);
mSelectedItemsBorder->setVisible(TRUE);
}
gEditMenuHandler = this;
}

View File

@ -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

View File

@ -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
//

View File

@ -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

View File

@ -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?

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -501,7 +501,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;
}
@ -637,10 +637,10 @@ LLAssetType::EType LLCOFWearables::getExpandedAccordionAssetType()
const LLAccordionCtrlTab* expanded_tab = accordion_ctrl->getExpandedTab();
return get_if_there(mTab2AssetType, expanded_tab, LLAssetType::AT_NONE);
}
}
LLAssetType::EType LLCOFWearables::getSelectedAccordionAssetType()
{
{
static LLAccordionCtrl* accordion_ctrl = getChild<LLAccordionCtrl>("cof_wearables_accordion");
const LLAccordionCtrlTab* selected_tab = accordion_ctrl->getSelectedTab();

View File

@ -42,7 +42,7 @@ LLDragAndDropButton::Params::Params()
}
LLDragAndDropButton::LLDragAndDropButton(Params& params)
LLDragAndDropButton::LLDragAndDropButton(const Params& params)
: LLButton(params)
{

View File

@ -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*/,

View File

@ -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(

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);
if (add_panelp)
{
LLButton::Params button_params(params.add_btn);
applyXUILayout(button_params, this);
add_panelp->addChild(LLUICtrlFactory::create<LLButton>(button_params));
}
void LLPanelDummyClothingListItem::init()
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_dummy_clothing_list_item.xml");
setSeparatorVisible(true);
}
typedef std::map<LLWearableType::EType, std::string> clothing_to_string_map_t;

View File

@ -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);

View File

@ -91,7 +91,7 @@ LONG NTAPI vectoredHandler(PEXCEPTION_POINTERS exception_infop)
}
// static
void LLWinDebug::init()
void LLWinDebug::init()
{
static bool s_first_run = true;
// Load the dbghelp dll now, instead of waiting for the crash.

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -1,51 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
follows="top|right|left"
height="20"
layout="topleft"
left="0"
name="inventory_item"
top="0"
width="380">
<icon
follows="top|right|left"
height="20"
image_name="ListItem_Over"
layout="topleft"
left="0"
name="hovered_icon"
top="0"
visible="false"
width="380" />
<icon
height="20"
follows="top|right|left"
image_name="ListItem_Select"
layout="topleft"
left="0"
name="selected_icon"
top="0"
visible="false"
width="380" />
<icon
height="16"
follows="top|left"
image_name="Inv_Object"
layout="topleft"
left="0"
name="item_icon"
top="0"
width="16" />
<text
follows="left|right"
height="20"
layout="topleft"
left_pad="5"
allow_html="false"
use_ellipses="true"
name="item_name"
text_color="white"
top="4"
value="..."
width="359" />
</panel>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>