summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2015-01-24 20:56:24 -0800
committerMerov Linden <merov@lindenlab.com>2015-01-24 20:56:24 -0800
commita62b1a26f5fcc88fa00c90075fa3c02b1f611e4c (patch)
tree592eaf489dde00402c935582248c3e689bab3597
parent855696c36980ded4aa93c315e1cd3d7e2b278446 (diff)
DD-301 : Add show only listing folders as an optional filter
-rwxr-xr-xindra/newview/llfloatermarketplacelistings.cpp23
-rwxr-xr-xindra/newview/llfloatermarketplacelistings.h2
-rwxr-xr-xindra/newview/llinventoryfilter.cpp26
-rwxr-xr-xindra/newview/llinventoryfilter.h4
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_marketplace_view.xml10
5 files changed, 61 insertions, 4 deletions
diff --git a/indra/newview/llfloatermarketplacelistings.cpp b/indra/newview/llfloatermarketplacelistings.cpp
index 229bf0b0b1..f4c138b890 100755
--- a/indra/newview/llfloatermarketplacelistings.cpp
+++ b/indra/newview/llfloatermarketplacelistings.cpp
@@ -53,7 +53,7 @@ static LLPanelInjector<LLPanelMarketplaceListings> t_panel_status("llpanelmarket
LLPanelMarketplaceListings::LLPanelMarketplaceListings()
: mRootFolder(NULL)
, mSortOrder(LLInventoryFilter::SO_FOLDERS_BY_NAME)
-, mFilterType(LLInventoryFilter::FILTERTYPE_NONE)
+, mFilterListingFoldersOnly(false)
{
mCommitCallbackRegistrar.add("Marketplace.ViewSort.Action", boost::bind(&LLPanelMarketplaceListings::onViewSortMenuItemClicked, this, _2));
mEnableCallbackRegistrar.add("Marketplace.ViewSort.CheckItem", boost::bind(&LLPanelMarketplaceListings::onViewSortMenuItemCheck, this, _2));
@@ -226,6 +226,21 @@ void LLPanelMarketplaceListings::onViewSortMenuItemClicked(const LLSD& userdata)
panel = (LLInventoryPanel*)tabs_panel->getPanelByName("Unassociated Items");
panel->setSortOrder(mSortOrder);
}
+ // Filter option
+ else if (chosen_item == "show_only_listing_folders")
+ {
+ mFilterListingFoldersOnly = !mFilterListingFoldersOnly;
+ // Set each panel with that filter flag
+ LLTabContainer* tabs_panel = getChild<LLTabContainer>("marketplace_filter_tabs");
+ LLInventoryPanel* panel = (LLInventoryPanel*)tabs_panel->getPanelByName("All Items");
+ panel->getFilter().setFilterMarketplaceListingFolders(mFilterListingFoldersOnly);
+ panel = (LLInventoryPanel*)tabs_panel->getPanelByName("Active Items");
+ panel->getFilter().setFilterMarketplaceListingFolders(mFilterListingFoldersOnly);
+ panel = (LLInventoryPanel*)tabs_panel->getPanelByName("Inactive Items");
+ panel->getFilter().setFilterMarketplaceListingFolders(mFilterListingFoldersOnly);
+ panel = (LLInventoryPanel*)tabs_panel->getPanelByName("Unassociated Items");
+ panel->getFilter().setFilterMarketplaceListingFolders(mFilterListingFoldersOnly);
+ }
}
bool LLPanelMarketplaceListings::onViewSortMenuItemCheck(const LLSD& userdata)
@@ -233,7 +248,13 @@ bool LLPanelMarketplaceListings::onViewSortMenuItemCheck(const LLSD& userdata)
std::string chosen_item = userdata.asString();
if (chosen_item == "sort_by_stock_amount")
+ {
return mSortOrder == LLInventoryFilter::SO_FOLDERS_BY_WEIGHT;
+ }
+ else if (chosen_item == "show_only_listing_folders")
+ {
+ return mFilterListingFoldersOnly;
+ }
return false;
}
diff --git a/indra/newview/llfloatermarketplacelistings.h b/indra/newview/llfloatermarketplacelistings.h
index 9249347877..f6aa0ef0a6 100755
--- a/indra/newview/llfloatermarketplacelistings.h
+++ b/indra/newview/llfloatermarketplacelistings.h
@@ -74,8 +74,8 @@ private:
LLButton* mAuditBtn;
LLFilterEditor* mFilterEditor;
std::string mFilterSubString;
+ bool mFilterListingFoldersOnly;
LLInventoryFilter::ESortOrderType mSortOrder;
- LLInventoryFilter::EFilterType mFilterType;
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index 8fcfbd646f..d0fb994043 100755
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -146,10 +146,20 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
// Marketplace folder filtering
const U32 filterTypes = mFilterOps.mFilterTypes;
- const U32 marketplace_filter = FILTERTYPE_MARKETPLACE_ACTIVE | FILTERTYPE_MARKETPLACE_INACTIVE | FILTERTYPE_MARKETPLACE_UNASSOCIATED;
+ const U32 marketplace_filter = FILTERTYPE_MARKETPLACE_ACTIVE | FILTERTYPE_MARKETPLACE_INACTIVE |
+ FILTERTYPE_MARKETPLACE_UNASSOCIATED | FILTERTYPE_MARKETPLACE_LISTING_FOLDER;
if (filterTypes & marketplace_filter)
{
S32 depth = depth_nesting_in_marketplace(folder_id);
+
+ if (filterTypes & FILTERTYPE_MARKETPLACE_LISTING_FOLDER)
+ {
+ if (depth > 1)
+ {
+ return false;
+ }
+ }
+
if (depth > 0)
{
LLUUID listing_uuid = nested_parent_id(folder_id, depth);
@@ -551,6 +561,20 @@ void LLInventoryFilter::setFilterMarketplaceUnassociatedFolders()
mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_UNASSOCIATED;
}
+void LLInventoryFilter::setFilterMarketplaceListingFolders(bool select_only_listing_folders)
+{
+ if (select_only_listing_folders)
+ {
+ mFilterOps.mFilterTypes |= FILTERTYPE_MARKETPLACE_LISTING_FOLDER;
+ setModified(FILTER_MORE_RESTRICTIVE);
+ }
+ else
+ {
+ mFilterOps.mFilterTypes &= ~FILTERTYPE_MARKETPLACE_LISTING_FOLDER;
+ setModified(FILTER_LESS_RESTRICTIVE);
+ }
+}
+
void LLInventoryFilter::setFilterUUID(const LLUUID& object_id)
{
if (mFilterOps.mFilterUUID == LLUUID::null)
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index c270b90b09..90fa444cf2 100755
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -55,7 +55,8 @@ public:
FILTERTYPE_EMPTYFOLDERS = 0x1 << 5, // pass if folder is not a system folder to be hidden if empty
FILTERTYPE_MARKETPLACE_ACTIVE = 0x1 << 6, // pass if folder is a marketplace active folder
FILTERTYPE_MARKETPLACE_INACTIVE = 0x1 << 7, // pass if folder is a marketplace inactive folder
- FILTERTYPE_MARKETPLACE_UNASSOCIATED = 0x1 << 8 // pass if folder is a marketplace non associated (no market ID) folder
+ FILTERTYPE_MARKETPLACE_UNASSOCIATED = 0x1 << 8, // pass if folder is a marketplace non associated (no market ID) folder
+ FILTERTYPE_MARKETPLACE_LISTING_FOLDER = 0x1 << 9 // pass iff folder is a listing folder
};
enum EFilterDateDirection
@@ -177,6 +178,7 @@ public:
void setFilterMarketplaceActiveFolders();
void setFilterMarketplaceInactiveFolders();
void setFilterMarketplaceUnassociatedFolders();
+ void setFilterMarketplaceListingFolders(bool select_only_listing_folders);
void updateFilterTypes(U64 types, U64& current_types);
void setFilterSubString(const std::string& string);
diff --git a/indra/newview/skins/default/xui/en/menu_marketplace_view.xml b/indra/newview/skins/default/xui/en/menu_marketplace_view.xml
index cff5ec1040..a9e9b5a28f 100755
--- a/indra/newview/skins/default/xui/en/menu_marketplace_view.xml
+++ b/indra/newview/skins/default/xui/en/menu_marketplace_view.xml
@@ -13,4 +13,14 @@
function="Marketplace.ViewSort.CheckItem"
parameter="sort_by_stock_amount"/>
</menu_item_check>
+ <menu_item_check
+ label="Show only listing folders"
+ name="show_only_listing_folders">
+ <menu_item_check.on_click
+ function="Marketplace.ViewSort.Action"
+ parameter="show_only_listing_folders"/>
+ <menu_item_check.on_check
+ function="Marketplace.ViewSort.CheckItem"
+ parameter="show_only_listing_folders"/>
+ </menu_item_check>
</toggleable_menu>