From eaf114fdfd7967178c168c907ca24f2faa97a7cf Mon Sep 17 00:00:00 2001 From: Igor Borovkov Date: Fri, 9 Jul 2010 17:47:33 +0300 Subject: EXT-7786 FIXED COF Wearables List is updated only when visible (panel outfit eidt) Every single delete/create operation in the COF causes LLCOFWearables to be updated - on each update its contained LLFlatListView is repopulated. That means massive creation of LLPanel's instances (LLUICtrlFactory::buildPanel(...)). Half of the panel creation time is spent in the EXPAT xml library on parsing the .xml files of the panel item. I've forbidden updates of LLCOFWearables when Panel Outfit Edit is not in the visible chain. Panel Outfit Edit is now updated only when it is visible Also LLCOFWearables refures to refresh its content if COF category version hasn't been changed since the last refresh. Reviewed by Neal Orman at https://codereview.productengine.com/secondlife/r/715 --HG-- branch : product-engine --- indra/newview/llcofwearables.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'indra/newview/llcofwearables.cpp') diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 4c0f51056d..f613fae42d 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -283,7 +283,8 @@ LLCOFWearables::LLCOFWearables() : LLPanel(), mClothingTab(NULL), mAttachmentsTab(NULL), mBodyPartsTab(NULL), - mLastSelectedTab(NULL) + mLastSelectedTab(NULL), + mCOFVersion(-1) { mClothingMenu = new CofClothingContextMenu(this); mAttachmentMenu = new CofAttachmentContextMenu(this); @@ -378,6 +379,23 @@ void LLCOFWearables::onAccordionTabStateChanged(LLUICtrl* ctrl, const LLSD& expa void LLCOFWearables::refresh() { + const LLUUID cof_id = LLAppearanceMgr::instance().getCOF(); + if (cof_id.isNull()) + { + llwarns << "COF ID cannot be NULL" << llendl; + return; + } + + LLViewerInventoryCategory* catp = gInventory.getCategory(cof_id); + if (!catp) + { + llwarns << "COF category cannot be NULL" << llendl; + return; + } + + if (mCOFVersion == catp->getVersion()) return; + mCOFVersion = catp->getVersion(); + typedef std::vector values_vector_t; typedef std::map selection_map_t; @@ -393,7 +411,7 @@ void LLCOFWearables::refresh() LLInventoryModel::cat_array_t cats; LLInventoryModel::item_array_t cof_items; - gInventory.collectDescendents(LLAppearanceMgr::getInstance()->getCOF(), cats, cof_items, LLInventoryModel::EXCLUDE_TRASH); + gInventory.collectDescendents(cof_id, cats, cof_items, LLInventoryModel::EXCLUDE_TRASH); populateAttachmentsAndBodypartsLists(cof_items); -- cgit v1.3 From 1f79bee86ee65a2eb3800db6be1853dd79d7a49d Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Fri, 9 Jul 2010 14:26:56 -0700 Subject: 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 Vir --- indra/llui/llbutton.cpp | 1 + indra/llui/llflatlistview.cpp | 21 ++- indra/llui/llflatlistview.h | 11 +- indra/llui/lltextbase.cpp | 56 ++++-- indra/llui/lltextbase.h | 18 +- indra/llui/lltexteditor.cpp | 2 - indra/llui/lluictrl.cpp | 7 +- indra/llui/lluictrlfactory.h | 2 +- indra/llui/lluistring.cpp | 13 +- indra/llui/llview.h | 7 +- indra/llui/llviewquery.cpp | 14 +- indra/llui/llviewquery.h | 2 +- indra/newview/llcofwearables.cpp | 2 +- indra/newview/lldndbutton.cpp | 2 +- indra/newview/lldndbutton.h | 2 +- indra/newview/llinspectobject.cpp | 3 +- indra/newview/llinventoryitemslist.cpp | 8 +- indra/newview/llinventorylistitem.cpp | 93 +++++++--- indra/newview/llinventorylistitem.h | 31 ++-- indra/newview/llsidetray.cpp | 14 +- indra/newview/llsidetray.h | 14 +- indra/newview/llwearableitemslist.cpp | 196 ++++++++++++++++----- indra/newview/llwearableitemslist.h | 58 ++++-- indra/newview/llwindebug.cpp | 2 +- .../default/xui/en/panel_body_parts_list_item.xml | 105 ----------- .../default/xui/en/panel_clothing_list_item.xml | 137 -------------- .../xui/en/panel_deletable_wearable_list_item.xml | 73 -------- .../xui/en/panel_dummy_clothing_list_item.xml | 83 --------- .../default/xui/en/widgets/bodyparts_list_item.xml | 73 ++++++++ .../default/xui/en/widgets/clothing_list_item.xml | 93 ++++++++++ .../en/widgets/deletable_wearable_list_item.xml | 43 +++++ .../xui/en/widgets/dummy_clothing_list_item.xml | 52 ++++++ .../default/xui/en/widgets/inventory_list_item.xml | 35 +++- 33 files changed, 696 insertions(+), 577 deletions(-) delete mode 100644 indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml delete mode 100644 indra/newview/skins/default/xui/en/panel_clothing_list_item.xml delete mode 100644 indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml delete mode 100644 indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml create mode 100644 indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml create mode 100644 indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml create mode 100644 indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml create mode 100644 indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml (limited to 'indra/newview/llcofwearables.cpp') diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 39e46a7ccb..aeedf62379 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -1,3 +1,4 @@ + /** * @file llbutton.cpp * @brief LLButton base class diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index b87851490d..209bc6925f 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -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; } diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h index ded46d8122..29b6b718af 100644 --- a/indra/llui/llflatlistview.h +++ b/indra/llui/llflatlistview.h @@ -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 diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 223998569b..ed03645944 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -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 // diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 300ee0f05f..4b0eeeb7d6 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -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 diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index c9474d66b7..130cda3784 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -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? diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index 3ade46d367..ff330f863a 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -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 diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index c99acee48e..ff99712c5f 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -182,7 +182,7 @@ public: void popFactoryFunctions(); template - static T* createWidget(typename T::Params& params, LLView* parent = NULL) + static T* createWidget(typename const T::Params& params, LLView* parent = NULL) { T* widget = NULL; diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp index f7a53e87de..ac9e71665f 100644 --- a/indra/llui/lluistring.cpp +++ b/indra/llui/lluistring.cpp @@ -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 diff --git a/indra/llui/llview.h b/indra/llui/llview.h index aba6c310f1..8e705ed701 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -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 T* LLView::getChild(const std::string& name, BOOL recurse) const diff --git a/indra/llui/llviewquery.cpp b/indra/llui/llviewquery.cpp index bdb3d223a6..1b44cc528e 100644 --- a/indra/llui/llviewquery.cpp +++ b/indra/llui/llviewquery.cpp @@ -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 diff --git a/indra/llui/llviewquery.h b/indra/llui/llviewquery.h index 98d9bf8796..68af31933d 100644 --- a/indra/llui/llviewquery.h +++ b/indra/llui/llviewquery.h @@ -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: diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index f278fb6a7b..48ad762965 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -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; } diff --git a/indra/newview/lldndbutton.cpp b/indra/newview/lldndbutton.cpp index 22f2bb1d16..4f4c7dead7 100644 --- a/indra/newview/lldndbutton.cpp +++ b/indra/newview/lldndbutton.cpp @@ -42,7 +42,7 @@ LLDragAndDropButton::Params::Params() } -LLDragAndDropButton::LLDragAndDropButton(Params& params) +LLDragAndDropButton::LLDragAndDropButton(const Params& params) : LLButton(params) { diff --git a/indra/newview/lldndbutton.h b/indra/newview/lldndbutton.h index c888268187..433b3f7ff5 100644 --- a/indra/newview/lldndbutton.h +++ b/indra/newview/lldndbutton.h @@ -54,7 +54,7 @@ public: Params(); }; - LLDragAndDropButton(Params& params); + LLDragAndDropButton(const Params& params); typedef boost::function("object_creator"); - textbox->mURLClickSignal.connect( - boost::bind(&LLInspectObject::closeFloater, this, false) ); + textbox->setURLClickedCallback(boost::bind(&LLInspectObject::closeFloater, this, false) ); // Hook up functionality getChild("buy_btn")->setCommitCallback( diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp index fbb3774917..e01f05c0f2 100644 --- a/indra/newview/llinventoryitemslist.cpp +++ b/indra/newview/llinventoryitemslist.cpp @@ -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 diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp index c487aa10a7..e4a7a158a3 100644 --- a/indra/newview/llinventorylistitem.cpp +++ b/indra/newview/llinventorylistitem.cpp @@ -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(); + 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("item_icon")); - setTitleCtrl(getChild("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(icon_params); + if (mIconCtrl) + { + addChild(mIconCtrl); + } + else + { + mIconCtrl = dynamic_cast(LLUICtrlFactory::createDefaultWidget("item_icon")); + } + + LLTextBox::Params text_params(params.item_name); + applyXUILayout(text_params, this); + + mTitleCtrl = LLUICtrlFactory::create(text_params); + if (mTitleCtrl) + { + addChild(mTitleCtrl); + } + else + { + mTitleCtrl = dynamic_cast(LLUICtrlFactory::createDefaultWidget("item_title")); + } } class WidgetVisibilityChanger diff --git a/indra/newview/llinventorylistitem.h b/indra/newview/llinventorylistitem.h index f29d92d51c..575f6aec19 100644 --- a/indra/newview/llinventorylistitem.h +++ b/indra/newview/llinventorylistitem.h @@ -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 default_style, worn_style; + Optional hover_image, + selected_image, + separator_image; + Optional item_icon; + Optional 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 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; diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 98282c1673..7104f3934d 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -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 (bparams); button->setLabel(name); diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index 3a8d308425..406cdc9055 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -54,13 +54,13 @@ public: : public LLInitParam::Block { // initial state - Optional collapsed; - Optional tab_btn_image_normal; - Optional tab_btn_image_selected; + Optional collapsed; + Optional tab_btn_image_normal, + tab_btn_image_selected; - Optional default_button_width; - Optional default_button_height; - Optional default_button_margin; + Optional 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 child_vector_t; typedef child_vector_t::iterator child_vector_iter_t; typedef child_vector_t::const_iterator child_vector_const_iter_t; diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 9f9a9bef35..973ffc2e07 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -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(); + + 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,24 +154,54 @@ LLPanelClothingListItem* LLPanelClothingListItem::create(LLViewerInventoryItem* LLPanelClothingListItem* list_item = NULL; if(item) { - list_item = new LLPanelClothingListItem(item); - list_item->init(); + const LLPanelClothingListItem::Params& params = LLUICtrlFactory::getDefaultParams(); + 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(button_params)); -LLPanelClothingListItem::~LLPanelClothingListItem() -{ + button_params = params.down_btn; + applyXUILayout(button_params, this); + addChild(LLUICtrlFactory::create(button_params)); + + LLPanel::Params panel_params = params.lock_panel; + applyXUILayout(panel_params, this); + LLPanel* lock_panelp = LLUICtrlFactory::create(panel_params); + addChild(lock_panelp); + + panel_params = params.edit_panel; + applyXUILayout(panel_params, this); + LLPanel* edit_panelp = LLUICtrlFactory::create(panel_params); + addChild(edit_panelp); + + if (lock_panelp) + { + LLIconCtrl::Params icon_params = params.lock_icon; + applyXUILayout(icon_params, this); + lock_panelp->addChild(LLUICtrlFactory::create(icon_params)); + } + + if (edit_panelp) + { + button_params = params.edit_btn; + applyXUILayout(button_params, this); + edit_panelp->addChild(LLUICtrlFactory::create(button_params)); + } + + setSeparatorVisible(false); } -void LLPanelClothingListItem::init() +LLPanelClothingListItem::~LLPanelClothingListItem() { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_clothing_list_item.xml"); } BOOL LLPanelClothingListItem::postBuild() @@ -178,30 +223,62 @@ 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(); + 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(panel_params); + addChild(edit_panelp); -LLPanelBodyPartsListItem::~LLPanelBodyPartsListItem() -{ + panel_params = params.lock_panel; + applyXUILayout(panel_params, this); + LLPanel* lock_panelp = LLUICtrlFactory::create(panel_params); + addChild(lock_panelp); + + if (edit_panelp) + { + LLButton::Params btn_params = params.edit_btn; + applyXUILayout(btn_params, this); + edit_panelp->addChild(LLUICtrlFactory::create(btn_params)); + } + + if (lock_panelp) + { + LLIconCtrl::Params icon_params = params.lock_icon; + applyXUILayout(icon_params, this); + lock_panelp->addChild(LLUICtrlFactory::create(icon_params)); + } + + setSeparatorVisible(true); } -void LLPanelBodyPartsListItem::init() +LLPanelBodyPartsListItem::~LLPanelBodyPartsListItem() { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_body_parts_list_item.xml"); } BOOL LLPanelBodyPartsListItem::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(); + 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(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(); + + 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* list_item = new LLPanelDummyClothingListItem(w_type, params); + list_item->initFromParams(params); + list_item->postBuild(); return list_item; } BOOL LLPanelDummyClothingListItem::postBuild() { - LLIconCtrl* icon = getChild("item_icon"); - setIconCtrl(icon); - setTitleCtrl(getChild("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(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(button_params)); + } + + setSeparatorVisible(true); } typedef std::map clothing_to_string_map_t; diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index d16a2a89c8..367b648b3d 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -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 + { + Optional 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 + { + Optional up_btn, + down_btn, + edit_btn; + Optional lock_panel, + edit_panel; + Optional 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 + { + Optional edit_btn; + Optional lock_panel, + edit_panel; + Optional 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 + { + Optional add_panel; + Optional 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); diff --git a/indra/newview/llwindebug.cpp b/indra/newview/llwindebug.cpp index 502fefd4ef..0eb043a7a3 100644 --- a/indra/newview/llwindebug.cpp +++ b/indra/newview/llwindebug.cpp @@ -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); } } diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml deleted file mode 100644 index 4f989a6f6f..0000000000 --- a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - -