From 9badcd022d8074fa489b788b9ba5162b6e9291c7 Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Tue, 20 Jan 2009 13:33:29 -0600 Subject: VWR-508/VWR-2199: Create "Worn Items" tab in Inventory Patch by Vadim Bigbear. --- ChangeLog.txt | 15 ++++++++++++++ linden/indra/newview/llfolderview.cpp | 12 +++++++++++ linden/indra/newview/llfolderview.h | 5 +++++ linden/indra/newview/llinventoryview.cpp | 24 ++++++++++++++++++++++ linden/indra/newview/llinventoryview.h | 3 +++ .../skins/default/xui/en-us/floater_inventory.xml | 4 ++++ 6 files changed, 63 insertions(+) diff --git a/ChangeLog.txt b/ChangeLog.txt index b80bd79..24a9082 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -2,6 +2,21 @@ =- 1.1.0 -= =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +2009-01-20 Jacek Antonelli + + * linden/indra/newview/llfolderview.cpp: + VWR-508/VWR-2199: Create "Worn Items" tab in Inventory + Patch by Vadim Bigbear. + * linden/indra/newview/llfolderview.h: + Ditto. + * linden/indra/newview/llinventoryview.cpp: + Ditto. + * linden/indra/newview/llinventoryview.h: + Ditto. + * linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml: + Ditto. + + 2009-01-18 Jacek Antonelli * linden/indra/newview/llpanelinventory.cpp: diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp index cb9a379..4ef52f0 100644 --- a/linden/indra/newview/llfolderview.cpp +++ b/linden/indra/newview/llfolderview.cpp @@ -4490,6 +4490,7 @@ LLInventoryFilter::LLInventoryFilter(const std::string& name) : mSubStringMatchOffset = 0; mFilterSubString.clear(); + mFilterWorn = false; mFilterGeneration = 0; mMustPassGeneration = S32_MAX; mMinRequiredGeneration = 0; @@ -4521,9 +4522,12 @@ BOOL LLInventoryFilter::check(LLFolderViewItem* item) earliest = 0; } LLFolderViewEventListener* listener = item->getListener(); + const LLUUID& item_id = listener->getUUID(); mSubStringMatchOffset = mFilterSubString.size() ? item->getSearchableLabel().find(mFilterSubString) : std::string::npos; BOOL passed = (listener->getNInventoryType() & mFilterOps.mFilterTypes || listener->getNInventoryType() == LLInventoryType::NIT_NONE) && (mFilterSubString.size() == 0 || mSubStringMatchOffset != std::string::npos) + && (mFilterWorn == false || gAgent.isWearingItem(item_id) || + gAgent.getAvatarObject() && gAgent.getAvatarObject()->isWearingAttachment(item_id)) && ((listener->getPermissionMask() & mFilterOps.mPermissions) == mFilterOps.mPermissions) && (listener->getCreationDate() >= earliest && listener->getCreationDate() <= mFilterOps.mMaxDate); return passed; @@ -4544,6 +4548,7 @@ BOOL LLInventoryFilter::isNotDefault() { return mFilterOps.mFilterTypes != mDefaultFilterOps.mFilterTypes || mFilterSubString.size() + || mFilterWorn || mFilterOps.mPermissions != mDefaultFilterOps.mPermissions || mFilterOps.mMinDate != mDefaultFilterOps.mMinDate || mFilterOps.mMaxDate != mDefaultFilterOps.mMaxDate @@ -4554,6 +4559,7 @@ BOOL LLInventoryFilter::isActive() { return mFilterOps.mFilterTypes != LLInventoryType::NIT_ALL || mFilterSubString.size() + || mFilterWorn || mFilterOps.mPermissions != PERM_NONE || mFilterOps.mMinDate != time_min() || mFilterOps.mMaxDate != time_max() @@ -4989,6 +4995,12 @@ std::string LLInventoryFilter::rebuildFilterText() { mFilterText += " - Since Logoff"; } + + if (getFilterWorn()) + { + mFilterText += " - Worn"; + } + return mFilterText; } diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h index af3248d..b668015 100644 --- a/linden/indra/newview/llfolderview.h +++ b/linden/indra/newview/llfolderview.h @@ -194,6 +194,9 @@ public: void setFilterSubString(const std::string& string); const std::string getFilterSubString(BOOL trim = FALSE); + + void setFilterWorn(bool worn) { mFilterWorn = worn; } + bool getFilterWorn() const { return mFilterWorn; } void setFilterPermissions(PermissionMask perms); PermissionMask getFilterPermissions() const { return mFilterOps.mPermissions; } @@ -257,6 +260,7 @@ protected: filter_ops mDefaultFilterOps; std::string::size_type mSubStringMatchOffset; std::string mFilterSubString; + bool mFilterWorn; U32 mOrder; const std::string mName; S32 mFilterGeneration; @@ -745,6 +749,7 @@ public: LLInventoryFilter* getFilter() { return &mFilter; } const std::string getFilterSubString(BOOL trim = FALSE); + bool getFilterWorn() const { return mFilter.getFilterWorn(); } U32 getFilterTypes() const { return mFilter.getFilterTypes(); } PermissionMask getFilterPermissions() const { return mFilter.getFilterPermissions(); } LLInventoryFilter::EFolderShow getShowFolderState() { return mFilter.getShowFolderState(); } diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp index a265906..1e16b92 100644 --- a/linden/indra/newview/llinventoryview.cpp +++ b/linden/indra/newview/llinventoryview.cpp @@ -547,6 +547,15 @@ void LLInventoryView::init(LLInventoryModel* inventory) recent_items_panel->getFilter()->markDefault(); recent_items_panel->setSelectCallback(onSelectionChange, recent_items_panel); } + LLInventoryPanel* worn_items_panel = getChild("Worn Items"); + if (worn_items_panel) + { + worn_items_panel->setSortOrder(gSavedSettings.getU32("InventorySortOrder")); + worn_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); + worn_items_panel->getFilter()->markDefault(); + worn_items_panel->setFilterWorn(true); + worn_items_panel->setSelectCallback(onSelectionChange, worn_items_panel); + } // Now load the stored settings from disk, if available. std::ostringstream filterSaveName; @@ -595,6 +604,7 @@ BOOL LLInventoryView::postBuild() { childSetTabChangeCallback("inventory filter tabs", "All Items", onFilterSelected, this); childSetTabChangeCallback("inventory filter tabs", "Recent Items", onFilterSelected, this); + childSetTabChangeCallback("inventory filter tabs", "Worn Items", onFilterSelected, this); //panel->getFilter()->markDefault(); return TRUE; } @@ -621,6 +631,15 @@ LLInventoryView::~LLInventoryView( void ) filter->toLLSD(filterState); filterRoot[filter->getName()] = filterState; } + + LLInventoryPanel* worn_items_panel = getChild("Worn Items"); + if (worn_items_panel) + { + LLInventoryFilter* filter = worn_items_panel->getFilter(); + LLSD filterState; + filter->toLLSD(filterState); + filterRoot[filter->getName()] = filterState; + } std::ostringstream filterSaveName; filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml"); @@ -1653,6 +1672,11 @@ void LLInventoryPanel::setFilterSubString(const std::string& string) mFolders->getFilter()->setFilterSubString(string); } +void LLInventoryPanel::setFilterWorn(bool worn) +{ + mFolders->getFilter()->setFilterWorn(worn); +} + void LLInventoryPanel::setSortOrder(U32 order) { mFolders->getFilter()->setSortOrder(order); diff --git a/linden/indra/newview/llinventoryview.h b/linden/indra/newview/llinventoryview.h index c5c8532..dd6756a 100644 --- a/linden/indra/newview/llinventoryview.h +++ b/linden/indra/newview/llinventoryview.h @@ -108,6 +108,9 @@ public: U32 getFilterPermMask() const { return mFolders->getFilterPermissions(); } void setFilterSubString(const std::string& string); const std::string getFilterSubString() { return mFolders->getFilterSubString(); } + void setFilterWorn(bool worn); + bool getFilterWorn() const { return mFolders->getFilterWorn(); } + void setSortOrder(U32 order); U32 getSortOrder() { return mFolders->getSortOrder(); } void setSinceLogoff(BOOL sl); diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml index 590555f..3d1c569 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_inventory.xml @@ -61,6 +61,10 @@ follows="left|top|right|bottom" height="431" label="Recent Items" left_delta="0" mouse_opaque="true" name="Recent Items" sort_order="RecentItemsSortOrder" width="461" /> +