From db371c98248b790eed22a6295d33dd1d02adc602 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 11 Nov 2011 23:58:37 -0800 Subject: EXP-1498 : Hide empty system folders. System folders can be specifically marked to be hidden if empty in the LLViewerFolderDictionary constructor. --- indra/newview/llinventorypanel.cpp | 46 ++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 12 deletions(-) (limited to 'indra/newview/llinventorypanel.cpp') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index acbec531b6..aff48b1961 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -618,22 +618,41 @@ LLFolderView * LLInventoryPanel::createFolderView(LLInvFVBridge * bridge, bool u LLFolderViewFolder * LLInventoryPanel::createFolderViewFolder(LLInvFVBridge * bridge) { - LLFolderViewFolder::Params params; + // Create the folder ui widget, unless it's an empty system folder that should be hidden + // Note : we still let the code create a listener for it (in case something shows up in it) + // but we simply skip creating the ui ctrl and adding it. + // *TODO : Need to be verified: if the listener is triggered and something added, will the code + // crash (because it's assuming, wrongly, that the uictrl exists)? + + bool is_system_folder = bridge->isSystemFolder(); + bool is_hidden_if_empty = LLViewerFolderType::lookupIsHiddenIfEmpty(bridge->getPreferredType()); + bool is_empty = (mInventory->categoryHasChildren(bridge->getUUID()) != LLInventoryModel::CHILDREN_YES); + + if (!is_system_folder || !is_empty || !is_hidden_if_empty) + { + LLFolderViewFolder::Params params; - params.name = bridge->getDisplayName(); - params.icon = bridge->getIcon(); - params.icon_open = bridge->getOpenIcon(); + params.name = bridge->getDisplayName(); + params.icon = bridge->getIcon(); + params.icon_open = bridge->getOpenIcon(); - if (mShowItemLinkOverlays) // if false, then links show up just like normal items + if (mShowItemLinkOverlays) // if false, then links show up just like normal items + { + params.icon_overlay = LLUI::getUIImage("Inv_Link"); + } + + params.root = mFolderRoot; + params.listener = bridge; + params.tool_tip = params.name; + + return LLUICtrlFactory::create(params); + } + else { - params.icon_overlay = LLUI::getUIImage("Inv_Link"); + // It's an empty system folder that should be hidden -> return NULL + return NULL; } - - params.root = mFolderRoot; - params.listener = bridge; - params.tool_tip = params.name; - return LLUICtrlFactory::create(params); } LLFolderViewItem * LLInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge) @@ -697,7 +716,10 @@ LLFolderViewItem* LLInventoryPanel::buildNewViews(const LLUUID& id) if (new_listener) { LLFolderViewFolder* folderp = createFolderViewFolder(new_listener); - folderp->setItemSortOrder(mFolderRoot->getSortOrder()); + if (folderp) + { + folderp->setItemSortOrder(mFolderRoot->getSortOrder()); + } itemp = folderp; } } -- cgit v1.2.3 From 28344855dc4c4b20f4188e7dd64991707d87377f Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 17 Nov 2011 19:48:39 -0800 Subject: EXP-1498 : Always create the folder widget, move empty filtering to foltering code. Still update issues though. --- indra/newview/llinventorypanel.cpp | 41 ++++++++++---------------------------- 1 file changed, 11 insertions(+), 30 deletions(-) (limited to 'indra/newview/llinventorypanel.cpp') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index aff48b1961..a9ec4af4f3 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -618,41 +618,22 @@ LLFolderView * LLInventoryPanel::createFolderView(LLInvFVBridge * bridge, bool u LLFolderViewFolder * LLInventoryPanel::createFolderViewFolder(LLInvFVBridge * bridge) { - // Create the folder ui widget, unless it's an empty system folder that should be hidden - // Note : we still let the code create a listener for it (in case something shows up in it) - // but we simply skip creating the ui ctrl and adding it. - // *TODO : Need to be verified: if the listener is triggered and something added, will the code - // crash (because it's assuming, wrongly, that the uictrl exists)? - - bool is_system_folder = bridge->isSystemFolder(); - bool is_hidden_if_empty = LLViewerFolderType::lookupIsHiddenIfEmpty(bridge->getPreferredType()); - bool is_empty = (mInventory->categoryHasChildren(bridge->getUUID()) != LLInventoryModel::CHILDREN_YES); - - if (!is_system_folder || !is_empty || !is_hidden_if_empty) - { - LLFolderViewFolder::Params params; + LLFolderViewFolder::Params params; - params.name = bridge->getDisplayName(); - params.icon = bridge->getIcon(); - params.icon_open = bridge->getOpenIcon(); - - if (mShowItemLinkOverlays) // if false, then links show up just like normal items - { - params.icon_overlay = LLUI::getUIImage("Inv_Link"); - } - - params.root = mFolderRoot; - params.listener = bridge; - params.tool_tip = params.name; + params.name = bridge->getDisplayName(); + params.icon = bridge->getIcon(); + params.icon_open = bridge->getOpenIcon(); - return LLUICtrlFactory::create(params); - } - else + if (mShowItemLinkOverlays) // if false, then links show up just like normal items { - // It's an empty system folder that should be hidden -> return NULL - return NULL; + params.icon_overlay = LLUI::getUIImage("Inv_Link"); } + + params.root = mFolderRoot; + params.listener = bridge; + params.tool_tip = params.name; + return LLUICtrlFactory::create(params); } LLFolderViewItem * LLInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge) -- cgit v1.2.3 From 7c2bbfc4fc905e8fff63d58f19f5e22cd755281c Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 18 Nov 2011 17:22:40 -0800 Subject: EXP-1498, EXP-1595, EXP-1596 : Hide empty system folders in a dynamic way, turn the setting ON by default --- indra/newview/llinventorypanel.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'indra/newview/llinventorypanel.cpp') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index a9ec4af4f3..d06374d232 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -240,6 +240,12 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params) getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_INBOX)); getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_OUTBOX)); + // set the filter for the empty folder if the debug setting is on + if (gSavedSettings.getBOOL("DebugHideEmptySystemFolders")) + { + getFilter()->setFilterEmptySystemFolders(); + } + // Initialize base class params. LLPanel::initFromParams(params); } -- cgit v1.2.3