diff options
| author | Igor Borovkov <iborovkov@productengine.com> | 2010-07-09 17:47:33 +0300 |
|---|---|---|
| committer | Igor Borovkov <iborovkov@productengine.com> | 2010-07-09 17:47:33 +0300 |
| commit | eaf114fdfd7967178c168c907ca24f2faa97a7cf (patch) | |
| tree | d400c4fc8159204edac63cdc8a04bd4142ed847e /indra/newview/llcofwearables.cpp | |
| parent | b6b0465bbcb4c05e1c0a000224dd03b54afa477f (diff) | |
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
Diffstat (limited to 'indra/newview/llcofwearables.cpp')
| -rw-r--r-- | indra/newview/llcofwearables.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
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<LLSD> values_vector_t; typedef std::map<LLFlatListView*, values_vector_t> 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); |
