CHUI-267 FIX Full inventory listing not always shown for test account

changed LLFolderViewModelInterface::getFilter() to return a reference, since it is never NULL
removed sort order from filter, which was causing unneeded filtering
master
Richard Linden 2012-08-01 01:14:27 -07:00
parent 8f7871911d
commit a204059d2e
21 changed files with 239 additions and 267 deletions

View File

@ -274,7 +274,7 @@ BOOL LLFolderView::canFocusChildren() const
return FALSE;
}
BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)
void LLFolderView::addFolder( LLFolderViewFolder* folder)
{
LLFolderViewFolder::addFolder(folder);
@ -288,8 +288,6 @@ BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)
//{
// mFolders.insert(mFolders.begin(), folder);
//}
return TRUE;
}
void LLFolderView::closeAllFolders()
@ -1769,14 +1767,14 @@ void LLFolderView::update()
// until that inventory is loaded up.
LLFastTimer t2(FTM_INVENTORY);
if (getFolderViewModel()->getFilter()->isModified() && getFolderViewModel()->getFilter()->isNotDefault())
if (getFolderViewModel()->getFilter().isModified() && getFolderViewModel()->getFilter().isNotDefault())
{
mNeedsAutoSelect = TRUE;
}
getFolderViewModel()->getFilter()->clearModified();
getFolderViewModel()->getFilter().clearModified();
// filter to determine visibility before arranging
filter(*(getFolderViewModel()->getFilter()));
filter(getFolderViewModel()->getFilter());
// automatically show matching items, and select first one if we had a selection
if (mNeedsAutoSelect)
@ -1794,7 +1792,7 @@ void LLFolderView::update()
// Open filtered folders for folder views with mAutoSelectOverride=TRUE.
// Used by LLPlacesFolderView.
if (getFolderViewModel()->getFilter()->showAllResults())
if (getFolderViewModel()->getFilter().showAllResults())
{
// these are named variables to get around gcc not binding non-const references to rvalues
// and functor application is inherently non-const to allow for stateful functors

View File

@ -121,7 +121,7 @@ public:
void closeAllFolders();
void openTopLevelFolders();
virtual BOOL addFolder( LLFolderViewFolder* folder);
virtual void addFolder( LLFolderViewFolder* folder);
// Find width and height of this object and its children. Also
// makes sure that this view and its children are the right size.

View File

@ -221,11 +221,11 @@ void LLFolderViewItem::refresh()
mIconOpen = vmi.getIconOpen();
mIconOverlay = vmi.getIconOverlay();
if (mRoot->useLabelSuffix())
{
if (mRoot->useLabelSuffix())
{
mLabelStyle = vmi.getLabelStyle();
mLabelSuffix = vmi.getLabelSuffix();
}
}
//TODO RN: make sure this logic still fires
//std::string searchable_label(mLabel);
@ -255,7 +255,7 @@ void LLFolderViewItem::arrangeAndSet(BOOL set_selection,
LLFolderView* root = getRoot();
if (getParentFolder())
{
getParentFolder()->requestArrange();
getParentFolder()->requestArrange();
}
if(set_selection)
{
@ -275,9 +275,9 @@ std::set<LLFolderViewItem*> LLFolderViewItem::getSelectionList() const
}
// addToFolder() returns TRUE if it succeeds. FALSE otherwise
BOOL LLFolderViewItem::addToFolder(LLFolderViewFolder* folder)
void LLFolderViewItem::addToFolder(LLFolderViewFolder* folder)
{
return folder->addItem(this);
folder->addItem(this);
}
@ -418,12 +418,12 @@ void LLFolderViewItem::rename(const std::string& new_name)
{
getViewModelItem()->renameItem(new_name);
if(mParentFolder)
{
mParentFolder->requestSort();
}
}
//if(mParentFolder)
//{
// mParentFolder->requestSort();
//}
}
}
const std::string& LLFolderViewItem::getName( void ) const
{
@ -839,9 +839,9 @@ LLFolderViewFolder::~LLFolderViewFolder( void )
}
// addToFolder() returns TRUE if it succeeds. FALSE otherwise
BOOL LLFolderViewFolder::addToFolder(LLFolderViewFolder* folder)
void LLFolderViewFolder::addToFolder(LLFolderViewFolder* folder)
{
return folder->addFolder(this);
folder->addFolder(this);
}
static LLFastTimer::DeclareTimer FTM_ARRANGE("Arrange");
@ -1008,11 +1008,6 @@ BOOL LLFolderViewFolder::needsArrange()
return mLastArrangeGeneration < getRoot()->getArrangeGeneration();
}
void LLFolderViewFolder::requestSort()
{
getViewModelItem()->requestSort();
}
//TODO RN: get height resetting working
//void LLFolderViewFolder::setPassedFilter(BOOL passed, BOOL passed_folder, S32 filter_generation)
//{
@ -1417,7 +1412,6 @@ void LLFolderViewFolder::extractItem( LLFolderViewItem* item )
}
//item has been removed, need to update filter
getViewModelItem()->removeChild(item->getViewModelItem());
getViewModelItem()->dirtyFilter();
//because an item is going away regardless of filter status, force rearrange
requestArrange();
removeChild(item);
@ -1483,7 +1477,7 @@ BOOL LLFolderViewFolder::isRemovable()
}
// this is an internal method used for adding items to folders.
BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
void LLFolderViewFolder::addItem(LLFolderViewItem* item)
{
if (item->getParentFolder())
{
@ -1496,7 +1490,6 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
item->setRect(LLRect(0, 0, getRect().getWidth(), 0));
item->setVisible(FALSE);
addChild(item);
// TODO RN - port creation date management to new code location
#if 0
@ -1504,10 +1497,7 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
setCreationDate(llmax<time_t>(mCreationDate, item->getCreationDate()));
#endif
// Handle sorting
requestArrange();
requestSort();
addChild(item);
getViewModelItem()->addChild(item->getViewModelItem());
// TODO RN - port creation date management to new code location
#if 0
@ -1533,14 +1523,10 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
// parentp = parentp->getParentFolder();
//}
item->getViewModelItem()->dirtyFilter();
return TRUE;
}
// this is an internal method used for adding items to folders.
BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
void LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
{
if (folder->mParentFolder)
{
@ -1551,30 +1537,26 @@ BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
folder->setOrigin(0, 0);
folder->reshape(getRect().getWidth(), 0);
folder->setVisible(FALSE);
addChild( folder );
// rearrange all descendants too, as our indentation level might have changed
folder->requestArrange();
requestSort();
//folder->requestArrange();
//requestSort();
addChild( folder );
getViewModelItem()->addChild(folder->getViewModelItem());
//After addChild since addChild assigns parent to bubble up to when calling dirtyFilter
folder->getViewModelItem()->dirtyFilter();
return TRUE;
}
void LLFolderViewFolder::requestArrange()
{
//if ( mLastArrangeGeneration != -1)
{
mLastArrangeGeneration = -1;
// flag all items up to root
if (mParentFolder)
{
mParentFolder->requestArrange();
}
mLastArrangeGeneration = -1;
// flag all items up to root
if (mParentFolder)
{
mParentFolder->requestArrange();
}
}
}
void LLFolderViewFolder::toggleOpen()
{

View File

@ -116,8 +116,8 @@ protected:
// this is an internal method used for adding items to folders. A
// no-op at this level, but reimplemented in derived classes.
virtual BOOL addItem(LLFolderViewItem*) { return FALSE; }
virtual BOOL addFolder(LLFolderViewFolder*) { return FALSE; }
virtual void addItem(LLFolderViewItem*) { }
virtual void addFolder(LLFolderViewFolder*) { }
static LLFontGL* getLabelFontForStyle(U8 style);
@ -131,7 +131,7 @@ public:
virtual ~LLFolderViewItem( void );
// addToFolder() returns TRUE if it succeeds. FALSE otherwise
virtual BOOL addToFolder(LLFolderViewFolder* folder);
virtual void addToFolder(LLFolderViewFolder* folder);
// Finds width and height of this object and it's children. Also
// makes sure that this view and it's children are the right size.
@ -297,7 +297,7 @@ public:
LLFolderViewItem* getPreviousFromChild( LLFolderViewItem*, BOOL include_children = TRUE );
// addToFolder() returns TRUE if it succeeds. FALSE otherwise
virtual BOOL addToFolder(LLFolderViewFolder* folder);
virtual void addToFolder(LLFolderViewFolder* folder);
// Finds width and height of this object and it's children. Also
// makes sure that this view and it's children are the right size.
@ -356,8 +356,6 @@ public:
// Called when a child is refreshed.
virtual void requestArrange();
virtual void requestSort();
// internal method which doesn't update the entire view. This
// method was written because the list iterators destroy the state
// of other iterations, thus, we can't arrange while iterating
@ -381,8 +379,6 @@ public:
void applyFunctorToChildren(LLFolderViewFunctor& functor);
virtual void openItem( void );
virtual BOOL addItem(LLFolderViewItem* item);
virtual BOOL addFolder( LLFolderViewFolder* folder);
// LLView functionality
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
@ -412,6 +408,14 @@ public:
LLFolderViewFolder* getCommonAncestor(LLFolderViewItem* item_a, LLFolderViewItem* item_b, bool& reverse);
void gatherChildRangeExclusive(LLFolderViewItem* start, LLFolderViewItem* end, bool reverse, std::vector<LLFolderViewItem*>& items);
protected:
friend void LLFolderViewItem::addToFolder(LLFolderViewFolder*);
// internal functions for tracking folders and items separately
// use addToFolder() virtual method to ensure folders are always added to mFolders
// and not mItems
void addItem(LLFolderViewItem* item);
void addFolder( LLFolderViewFolder* folder);
public:
//WARNING: do not call directly...use the appropriate LLFolderViewModel-derived class instead
template<typename SORT_FUNC> void sortFolders(const SORT_FUNC& func) { mFolders.sort(func); }

View File

@ -36,18 +36,18 @@ bool LLFolderViewModelCommon::needsSort(LLFolderViewModelItem* item)
std::string LLFolderViewModelCommon::getStatusText()
{
if (!contentsReady() || mFolderView->getViewModelItem()->getLastFilterGeneration() < getFilter()->getCurrentGeneration())
if (!contentsReady() || mFolderView->getViewModelItem()->getLastFilterGeneration() < getFilter().getCurrentGeneration())
{
return LLTrans::getString("Searching");
}
else
{
return getFilter()->getEmptyLookupMessage();
return getFilter().getEmptyLookupMessage();
}
}
void LLFolderViewModelCommon::filter()
{
getFilter()->setFilterCount(llclamp(LLUI::sSettingGroups["config"]->getS32("FilterItemsPerFrame"), 1, 5000));
mFolderView->getViewModelItem()->filter(*getFilter());
getFilter().setFilterCount(llclamp(LLUI::sSettingGroups["config"]->getS32("FilterItemsPerFrame"), 1, 5000));
mFolderView->getViewModelItem()->filter(getFilter());
}

View File

@ -107,6 +107,24 @@ public:
virtual S32 getFirstRequiredGeneration() const = 0;
};
class LLFolderViewModelInterface
{
public:
virtual ~LLFolderViewModelInterface() {}
virtual void requestSortAll() = 0;
virtual void sort(class LLFolderViewFolder*) = 0;
virtual void filter() = 0;
virtual bool contentsReady() = 0;
virtual void setFolderView(LLFolderView* folder_view) = 0;
virtual LLFolderViewFilter& getFilter() = 0;
virtual const LLFolderViewFilter& getFilter() const = 0;
virtual std::string getStatusText() = 0;
virtual bool startDrag(std::vector<LLFolderViewModelItem*>& items) = 0;
};
// This is am abstract base class that users of the folderview classes
// would use to bridge the folder view with the underlying data
class LLFolderViewModelItem
@ -188,15 +206,15 @@ protected:
class LLFolderViewModelItemCommon : public LLFolderViewModelItem
{
public:
LLFolderViewModelItemCommon()
LLFolderViewModelItemCommon(LLFolderViewModelInterface& root_view_model)
: mSortVersion(-1),
mPassedFilter(true),
mPassedFolderFilter(true),
mPrevPassedAllFilters(false),
mFolderViewItem(NULL),
mLastFilterGeneration(-1),
mMostFilteredDescendantGeneration(-1),
mParent(NULL)
mParent(NULL),
mRootViewModel(root_view_model)
{
std::for_each(mChildren.begin(), mChildren.end(), DeletePointer());
}
@ -220,20 +238,55 @@ public:
{
mChildren.push_back(child);
child->setParent(this);
dirtyFilter();
requestSort();
}
virtual void removeChild(LLFolderViewModelItem* child)
{
mChildren.remove(child);
child->setParent(NULL);
dirtyFilter();
}
void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation)
{
mPassedFilter = passed;
mPassedFolderFilter = passed_folder;
mLastFilterGeneration = filter_generation;
}
virtual bool potentiallyVisible()
{
return passedFilter() // we've passed the filter
|| getLastFilterGeneration() < mRootViewModel.getFilter().getFirstSuccessGeneration() // or we don't know yet
|| descendantsPassedFilter();
}
virtual bool passedFilter(S32 filter_generation = -1)
{
if (filter_generation < 0)
filter_generation = mRootViewModel.getFilter().getFirstSuccessGeneration();
bool passed_folder_filter = mPassedFolderFilter && mLastFilterGeneration >= filter_generation;
bool passed_filter = mPassedFilter && mLastFilterGeneration >= filter_generation;
return passed_folder_filter
&& (descendantsPassedFilter(filter_generation)
|| passed_filter);
}
virtual bool descendantsPassedFilter(S32 filter_generation = -1)
{
if (filter_generation < 0) filter_generation = mRootViewModel.getFilter().getFirstSuccessGeneration();
return mMostFilteredDescendantGeneration >= filter_generation;
}
protected:
virtual void setParent(LLFolderViewModelItem* parent) { mParent = parent; }
S32 mSortVersion;
bool mPassedFilter;
bool mPassedFolderFilter;
bool mPrevPassedAllFilters;
S32 mLastFilterGeneration;
S32 mMostFilteredDescendantGeneration;
@ -242,28 +295,13 @@ protected:
typedef std::list<LLFolderViewModelItem*> child_list_t;
child_list_t mChildren;
LLFolderViewModelItem* mParent;
LLFolderViewModelInterface& mRootViewModel;
void setFolderViewItem(LLFolderViewItem* folder_view_item) { mFolderViewItem = folder_view_item;}
LLFolderViewItem* mFolderViewItem;
};
class LLFolderViewModelInterface
{
public:
virtual ~LLFolderViewModelInterface() {}
virtual void requestSortAll() = 0;
virtual void sort(class LLFolderViewFolder*) = 0;
virtual void filter() = 0;
virtual bool contentsReady() = 0;
virtual void setFolderView(LLFolderView* folder_view) = 0;
virtual LLFolderViewFilter* getFilter() = 0;
virtual const LLFolderViewFilter* getFilter() const = 0;
virtual std::string getStatusText() = 0;
virtual bool startDrag(std::vector<LLFolderViewModelItem*>& items) = 0;
};
class LLFolderViewModelCommon : public LLFolderViewModelInterface
{
@ -307,8 +345,8 @@ public:
virtual const SortType& getSorter() const { return mSorter; }
virtual void setSorter(const SortType& sorter) { mSorter = sorter; requestSortAll(); }
virtual FilterType* getFilter() { return &mFilter; }
virtual const FilterType* getFilter() const { return &mFilter; }
virtual FilterType& getFilter() { return mFilter; }
virtual const FilterType& getFilter() const { return mFilter; }
virtual void setFilter(const FilterType& filter) { mFilter = filter; }
// TODO RN: remove this and put all filtering logic in view model

View File

@ -251,7 +251,7 @@ void LLFloaterOutbox::setupOutbox(const LLUUID& outboxId)
// Set the sort order newest to oldest
mOutboxInventoryPanel->getFolderViewModel()->setSorter(LLInventoryFilter::SO_FOLDERS_BY_NAME);
mOutboxInventoryPanel->getFilter()->markDefault();
mOutboxInventoryPanel->getFilter().markDefault();
fetchOutboxContents();

View File

@ -109,7 +109,12 @@ bool LLFolderViewModelInventory::contentsReady()
void LLFolderViewModelItemInventory::requestSort()
{
LLFolderViewModelItemCommon::requestSort();
if (mRootViewModel.getSorter().isByDate())
LLFolderViewFolder* folderp = dynamic_cast<LLFolderViewFolder*>(mFolderViewItem);
if (folderp)
{
folderp->requestArrange();
}
if (static_cast<LLFolderViewModelInventory&>(mRootViewModel).getSorter().isByDate())
{
// sort by date potentially affects parent folders which use a date
// derived from newest item in them
@ -120,35 +125,9 @@ void LLFolderViewModelItemInventory::requestSort()
}
}
bool LLFolderViewModelItemInventory::potentiallyVisible()
{
return passedFilter() // we've passed the filter
|| getLastFilterGeneration() < mRootViewModel.getFilter()->getFirstSuccessGeneration() // or we don't know yet
|| descendantsPassedFilter();
}
bool LLFolderViewModelItemInventory::passedFilter(S32 filter_generation)
{
if (filter_generation < 0)
filter_generation = mRootViewModel.getFilter()->getFirstSuccessGeneration();
return mPassedFolderFilter
&& (descendantsPassedFilter(filter_generation)
|| (mLastFilterGeneration >= filter_generation
&& mPassedFilter));
}
bool LLFolderViewModelItemInventory::descendantsPassedFilter(S32 filter_generation)
{
if (filter_generation < 0) filter_generation = mRootViewModel.getFilter()->getFirstSuccessGeneration();
return mMostFilteredDescendantGeneration >= filter_generation;
}
void LLFolderViewModelItemInventory::setPassedFilter(bool passed, bool passed_folder, S32 filter_generation)
{
mPassedFilter = passed;
mPassedFolderFilter = passed_folder;
mLastFilterGeneration = filter_generation;
LLFolderViewModelItemCommon::setPassedFilter(passed, passed_folder, filter_generation);
bool passed_filter_before = mPrevPassedAllFilters;
mPrevPassedAllFilters = passedFilter(filter_generation);
@ -324,3 +303,8 @@ bool LLInventorySort::operator()(const LLFolderViewModelItemInventory* const& a,
}
}
LLFolderViewModelItemInventory::LLFolderViewModelItemInventory( class LLFolderViewModelInventory& root_view_model )
: LLFolderViewModelItemCommon(root_view_model),
mPrevPassedAllFilters(false)
{
}

View File

@ -37,9 +37,7 @@ class LLFolderViewModelItemInventory
: public LLFolderViewModelItemCommon
{
public:
LLFolderViewModelItemInventory(class LLFolderViewModelInventory& root_view_model)
: mRootViewModel(root_view_model)
{}
LLFolderViewModelItemInventory(class LLFolderViewModelInventory& root_view_model);
virtual const LLUUID& getUUID() const = 0;
virtual time_t getCreationDate() const = 0; // UTC seconds
virtual void setCreationDate(time_t creation_date_utc) = 0;
@ -55,9 +53,6 @@ public:
virtual EInventorySortGroup getSortGroup() const = 0;
virtual LLInventoryObject* getInventoryObject() const = 0;
virtual void requestSort();
virtual bool potentiallyVisible();
virtual bool passedFilter(S32 filter_generation = -1);
virtual bool descendantsPassedFilter(S32 filter_generation = -1);
virtual void setPassedFilter(bool filtered, bool filtered_folder, S32 filter_generation);
virtual void filter( LLFolderViewFilter& filter);
virtual void filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter);
@ -66,25 +61,36 @@ public:
virtual LLToolDragAndDrop::ESource getDragSource() const = 0;
protected:
class LLFolderViewModelInventory& mRootViewModel;
bool mPrevPassedAllFilters;
};
class LLInventorySort
{
public:
LLInventorySort(U32 order = 0)
: mSortOrder(order),
mByDate(false),
mSystemToTop(false),
mFoldersByName(false)
struct Params : public LLInitParam::Block<Params>
{
mByDate = (order & LLInventoryFilter::SO_DATE);
mSystemToTop = (order & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP);
mFoldersByName = (order & LLInventoryFilter::SO_FOLDERS_BY_NAME);
Optional<S32> order;
Params()
: order("order", 0)
{}
};
LLInventorySort(S32 order = 0)
{
fromParams(Params().order(order));
}
bool isByDate() const { return mByDate; }
U32 getSortOrder() const { return mSortOrder; }
void toParams(Params& p) { p.order(mSortOrder);}
void fromParams(Params& p)
{
mSortOrder = p.order;
mByDate = (mSortOrder & LLInventoryFilter::SO_DATE);
mSystemToTop = (mSortOrder & LLInventoryFilter::SO_SYSTEM_FOLDERS_TO_TOP);
mFoldersByName = (mSortOrder & LLInventoryFilter::SO_FOLDERS_BY_NAME);
}
bool operator()(const LLFolderViewModelItemInventory* const& a, const LLFolderViewModelItemInventory* const& b) const;
private:

View File

@ -900,7 +900,7 @@ LLInventoryModel* LLInvFVBridge::getInventoryModel() const
LLInventoryFilter* LLInvFVBridge::getInventoryFilter() const
{
LLInventoryPanel* panel = mInventoryPanel.get();
return panel ? panel->getFilter() : NULL;
return panel ? &(panel->getFilter()) : NULL;
}
BOOL LLInvFVBridge::isItemInTrash() const

View File

@ -69,7 +69,6 @@ LLInventoryFilter::LLInventoryFilter(const Params& p)
mFilterModified(FILTER_NONE),
mEmptyLookupMessage("InventoryNoMatchingItems"),
mFilterOps(p.filter_ops),
mOrder(p.sort_order),
mFilterSubString(p.substring),
mCurrentGeneration(0),
mFirstRequiredGeneration(0),
@ -703,15 +702,6 @@ void LLInventoryFilter::setShowFolderState(EFolderShow state)
}
}
void LLInventoryFilter::setSortOrder(U32 order)
{
if (mOrder != order)
{
mOrder = order;
setModified();
}
}
void LLInventoryFilter::markDefault()
{
mDefaultFilterOps = mFilterOps;
@ -944,7 +934,6 @@ LLInventoryFilter& LLInventoryFilter::operator=( const LLInventoryFilter& othe
setShowFolderState(other.getShowFolderState());
setFilterPermissions(other.getFilterPermissions());
setFilterSubString(other.getFilterSubString());
setSortOrder(other.getSortOrder());
setDateRangeLastLogoff(other.isSinceLogoff());
return *this;
}
@ -961,7 +950,6 @@ void LLInventoryFilter::toParams(Params& params) const
params.filter_ops.show_folder_state = getShowFolderState();
params.filter_ops.permissions = getFilterPermissions();
params.substring = getFilterSubString();
params.sort_order = getSortOrder();
params.since_logoff = isSinceLogoff();
}
@ -980,7 +968,6 @@ void LLInventoryFilter::fromParams(const Params& params)
setShowFolderState(params.filter_ops.show_folder_state);
setFilterPermissions(params.filter_ops.permissions);
setFilterSubString(params.substring);
setSortOrder(params.sort_order);
setDateRangeLastLogoff(params.since_logoff);
}
@ -1030,10 +1017,6 @@ LLInventoryFilter::EFolderShow LLInventoryFilter::getShowFolderState() const
{
return mFilterOps.mShowFolderState;
}
U32 LLInventoryFilter::getSortOrder() const
{
return mOrder;
}
void LLInventoryFilter::setFilterCount(S32 count)
{

View File

@ -74,8 +74,8 @@ public:
{
struct DateRange : public LLInitParam::Block<DateRange>
{
Optional<time_t> min_date;
Optional<time_t> max_date;
Optional<time_t> min_date,
max_date;
DateRange()
: min_date("min_date", time_min()),
@ -115,18 +115,18 @@ public:
FilterOps(const Params& = Params());
U32 mFilterTypes;
U64 mFilterObjectTypes; // For _OBJECT
U64 mFilterWearableTypes;
U64 mFilterCategoryTypes; // For _CATEGORY
U64 mFilterObjectTypes, // For _OBJECT
mFilterWearableTypes,
mFilterLinks,
mFilterCategoryTypes; // For _CATEGORY
LLUUID mFilterUUID; // for UUID
time_t mMinDate;
time_t mMaxDate;
time_t mMinDate,
mMaxDate;
U32 mHoursAgo;
EFolderShow mShowFolderState;
PermissionMask mPermissions;
U64 mFilterLinks;
};
struct Params : public LLInitParam::Block<Params>
@ -134,14 +134,12 @@ public:
Optional<std::string> name;
Optional<FilterOps::Params> filter_ops;
Optional<std::string> substring;
Optional<U32> sort_order;
Optional<bool> since_logoff;
Params()
: name("name"),
filter_ops(""),
substring("substring"),
sort_order("sort_order"),
since_logoff("since_logoff")
{}
};
@ -203,9 +201,6 @@ public:
void setShowFolderState( EFolderShow state);
EFolderShow getShowFolderState() const;
void setSortOrder(U32 order);
U32 getSortOrder() const;
void setEmptyLookupMessage(const std::string& message);
std::string getEmptyLookupMessage() const;
@ -261,8 +256,6 @@ private:
bool checkAgainstFilterLinks(const class LLFolderViewModelItemInventory* listener) const;
bool checkAgainstClipboard(const LLUUID& object_id) const;
U32 mOrder;
FilterOps mFilterOps;
FilterOps mDefaultFilterOps;

View File

@ -239,13 +239,13 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
}
// hide inbox
getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_INBOX));
getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_OUTBOX));
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();
getFilter().setFilterEmptySystemFolders();
}
// keep track of the clipboard state so that we avoid filtering too much
@ -285,18 +285,18 @@ void LLInventoryPanel::draw()
if (mClipboardState != LLClipboard::instance().getGeneration())
{
mClipboardState = LLClipboard::instance().getGeneration();
getFilter()->setModified(LLClipboard::instance().isCutMode() ? LLInventoryFilter::FILTER_MORE_RESTRICTIVE : LLInventoryFilter::FILTER_LESS_RESTRICTIVE);
getFilter().setModified(LLClipboard::instance().isCutMode() ? LLInventoryFilter::FILTER_MORE_RESTRICTIVE : LLInventoryFilter::FILTER_LESS_RESTRICTIVE);
}
LLPanel::draw();
}
const LLInventoryFilter* LLInventoryPanel::getFilter() const
const LLInventoryFilter& LLInventoryPanel::getFilter() const
{
return getFolderViewModel()->getFilter();
}
LLInventoryFilter* LLInventoryPanel::getFilter()
LLInventoryFilter& LLInventoryPanel::getFilter()
{
return getFolderViewModel()->getFilter();
}
@ -304,50 +304,49 @@ LLInventoryFilter* LLInventoryPanel::getFilter()
void LLInventoryPanel::setFilterTypes(U64 types, LLInventoryFilter::EFilterType filter_type)
{
if (filter_type == LLInventoryFilter::FILTERTYPE_OBJECT)
getFilter()->setFilterObjectTypes(types);
getFilter().setFilterObjectTypes(types);
if (filter_type == LLInventoryFilter::FILTERTYPE_CATEGORY)
getFilter()->setFilterCategoryTypes(types);
getFilter().setFilterCategoryTypes(types);
}
U32 LLInventoryPanel::getFilterObjectTypes() const
{
return getFilter()->getFilterObjectTypes();
return getFilter().getFilterObjectTypes();
}
U32 LLInventoryPanel::getFilterPermMask() const
{
return getFilter()->getFilterPermissions();
return getFilter().getFilterPermissions();
}
void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
{
getFilter()->setFilterPermissions(filter_perm_mask);
getFilter().setFilterPermissions(filter_perm_mask);
}
void LLInventoryPanel::setFilterWearableTypes(U64 types)
{
getFilter()->setFilterWearableTypes(types);
getFilter().setFilterWearableTypes(types);
}
void LLInventoryPanel::setFilterSubString(const std::string& string)
{
getFilter()->setFilterSubString(string);
getFilter().setFilterSubString(string);
}
const std::string LLInventoryPanel::getFilterSubString()
{
return getFilter()->getFilterSubString();
return getFilter().getFilterSubString();
}
void LLInventoryPanel::setSortOrder(U32 order)
{
LLInventorySort sorter(order);
getFilter()->setSortOrder(order);
LLInventorySort sorter(order);
if (order != getFolderViewModel()->getSorter().getSortOrder())
{
getFolderViewModel()->setSorter(LLInventorySort(order));
getFolderViewModel()->setSorter(sorter);
// try to keep selection onscreen, even if it wasn't to start with
mFolderRoot->scrollToShowSelection();
}
@ -360,27 +359,27 @@ U32 LLInventoryPanel::getSortOrder() const
void LLInventoryPanel::setSinceLogoff(BOOL sl)
{
getFilter()->setDateRangeLastLogoff(sl);
getFilter().setDateRangeLastLogoff(sl);
}
void LLInventoryPanel::setHoursAgo(U32 hours)
{
getFilter()->setHoursAgo(hours);
getFilter().setHoursAgo(hours);
}
void LLInventoryPanel::setFilterLinks(U64 filter_links)
{
getFilter()->setFilterLinks(filter_links);
getFilter().setFilterLinks(filter_links);
}
void LLInventoryPanel::setShowFolderState(LLInventoryFilter::EFolderShow show)
{
getFilter()->setShowFolderState(show);
getFilter().setShowFolderState(show);
}
LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
{
return getFilter()->getShowFolderState();
return getFilter().getShowFolderState();
}
void LLInventoryPanel::modelChanged(U32 mask)
@ -473,7 +472,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
{
if (view_folder)
{
view_folder->requestSort();
view_folder->getViewModelItem()->requestSort();
}
}
@ -1088,7 +1087,7 @@ bool LLInventoryPanel::attachObject(const LLSD& userdata)
BOOL LLInventoryPanel::getSinceLogoff()
{
return getFilter()->isSinceLogoff();
return getFilter().isSinceLogoff();
}
// DEBUG ONLY
@ -1214,12 +1213,12 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L
void LLInventoryPanel::addHideFolderType(LLFolderType::EType folder_type)
{
getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << folder_type));
getFilter().setFilterCategoryTypes(getFilter().getFilterCategoryTypes() & ~(1ULL << folder_type));
}
BOOL LLInventoryPanel::getIsHiddenFolderType(LLFolderType::EType folder_type) const
{
return !(getFilter()->getFilterCategoryTypes() & (1ULL << folder_type));
return !(getFilter().getFilterCategoryTypes() & (1ULL << folder_type));
}
void LLInventoryPanel::addItemID( const LLUUID& id, LLFolderViewItem* itemp )
@ -1321,7 +1320,7 @@ public:
{
LLInventoryPanel::initFromParams(p);
// turn on inbox for recent items
getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() | (1ULL << LLFolderType::FT_INBOX));
getFilter().setFilterCategoryTypes(getFilter().getFilterCategoryTypes() | (1ULL << LLFolderType::FT_INBOX));
}
protected:

View File

@ -120,6 +120,12 @@ public:
{}
};
struct InventoryState : public LLInitParam::Block<InventoryState>
{
Mandatory<LLInventoryFilter::Params> filter;
Mandatory<LLInventorySort::Params> sort;
};
//--------------------------------------------------------------------
// Initialization
//--------------------------------------------------------------------
@ -155,8 +161,8 @@ public:
void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
void setSelectCallback(const boost::function<void (const std::deque<LLFolderViewItem*>& items, BOOL user_action)>& cb);
void clearSelection();
LLInventoryFilter* getFilter();
const LLInventoryFilter* getFilter() const;
LLInventoryFilter& getFilter();
const LLInventoryFilter& getFilter() const;
void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT);
U32 getFilterObjectTypes() const;
void setFilterPermMask(PermissionMask filter_perm_mask);

View File

@ -247,10 +247,7 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string)
LLPlacesInventoryPanel* inventory_list = dynamic_cast<LLPlacesInventoryPanel*>(tab->getAccordionView());
if (NULL == inventory_list) continue;
if (inventory_list->getFilter())
{
filter_list(inventory_list, string);
}
filter_list(inventory_list, string);
}
if (sFilterSubString != string)
@ -365,9 +362,6 @@ void LLLandmarksPanel::onSelectorButtonClicked()
void LLLandmarksPanel::updateShowFolderState()
{
if (!mLandmarksInventoryPanel->getFilter())
return;
bool show_all_folders = mLandmarksInventoryPanel->getFilterSubString().empty();
if (show_all_folders)
{
@ -547,7 +541,7 @@ void LLLandmarksPanel::initFavoritesInventoryPanel()
mFavoritesInventoryPanel = getChild<LLPlacesInventoryPanel>("favorites_list");
initLandmarksPanel(mFavoritesInventoryPanel);
mFavoritesInventoryPanel->getFilter()->setEmptyLookupMessage("FavoritesNoMatchingItems");
mFavoritesInventoryPanel->getFilter().setEmptyLookupMessage("FavoritesNoMatchingItems");
initAccordion("tab_favorites", mFavoritesInventoryPanel, true);
}
@ -558,12 +552,7 @@ void LLLandmarksPanel::initLandmarksInventoryPanel()
initLandmarksPanel(mLandmarksInventoryPanel);
// Check if mLandmarksInventoryPanel is properly initialized and has a Filter created.
// In case of a dummy widget getFilter() will return NULL.
if (mLandmarksInventoryPanel->getFilter())
{
mLandmarksInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
}
mLandmarksInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
// subscribe to have auto-rename functionality while creating New Folder
mLandmarksInventoryPanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mLandmarksInventoryPanel, _1, _2));
@ -599,12 +588,7 @@ void LLLandmarksPanel::initLibraryInventoryPanel()
void LLLandmarksPanel::initLandmarksPanel(LLPlacesInventoryPanel* inventory_list)
{
// In case of a dummy widget further we have no Folder View widget and no Filter,
// so further initialization leads to crash.
if (!inventory_list->getFilter())
return;
inventory_list->getFilter()->setEmptyLookupMessage("PlacesNoMatchingItems");
inventory_list->getFilter().setEmptyLookupMessage("PlacesNoMatchingItems");
inventory_list->setFilterTypes(0x1 << LLInventoryType::IT_LANDMARK);
inventory_list->setSelectCallback(boost::bind(&LLLandmarksPanel::onSelectionChange, this, inventory_list, _1, _2));

View File

@ -89,9 +89,9 @@ public:
static void selectNoTypes(void* user_data);
private:
LLPanelMainInventory* mPanelMainInventory;
LLSpinCtrl* mSpinSinceDays;
LLSpinCtrl* mSpinSinceHours;
LLInventoryFilter* mFilter;
LLSpinCtrl* mSpinSinceDays;
LLSpinCtrl* mSpinSinceHours;
LLInventoryFilter* mFilter;
};
///----------------------------------------------------------------------------
@ -131,7 +131,7 @@ BOOL LLPanelMainInventory::postBuild()
mFilterTabs = getChild<LLTabContainer>("inventory filter tabs");
mFilterTabs->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterSelected, this));
//panel->getFilter()->markDefault();
//panel->getFilter().markDefault();
// Set up the default inv. panel/filter settings.
mActivePanel = getChild<LLInventoryPanel>("All Items");
@ -139,7 +139,7 @@ BOOL LLPanelMainInventory::postBuild()
{
// "All Items" is the previous only view, so it gets the InventorySortOrder
mActivePanel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER));
mActivePanel->getFilter()->markDefault();
mActivePanel->getFilter().markDefault();
mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
mActivePanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mActivePanel, _1, _2));
mResortActivePanel = true;
@ -150,7 +150,7 @@ BOOL LLPanelMainInventory::postBuild()
recent_items_panel->setSinceLogoff(TRUE);
recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
recent_items_panel->getFilter()->markDefault();
recent_items_panel->getFilter().markDefault();
recent_items_panel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, recent_items_panel, _1, _2));
}
@ -169,14 +169,14 @@ BOOL LLPanelMainInventory::postBuild()
// Note that the "All Items" settings do not persist.
if(recent_items_panel)
{
if(savedFilterState.has(recent_items_panel->getFilter()->getName()))
if(savedFilterState.has(recent_items_panel->getFilter().getName()))
{
LLSD recent_items = savedFilterState.get(
recent_items_panel->getFilter()->getName());
recent_items_panel->getFilter().getName());
LLInventoryFilter::Params p;
LLParamSDParser parser;
parser.readSD(recent_items, p);
recent_items_panel->getFilter()->fromParams(p);
recent_items_panel->getFilter().fromParams(p);
}
}
@ -213,29 +213,29 @@ LLPanelMainInventory::~LLPanelMainInventory( void )
LLInventoryPanel* all_items_panel = getChild<LLInventoryPanel>("All Items");
if (all_items_panel)
{
LLInventoryFilter* filter = all_items_panel->getFilter();
if (filter)
LLSD filterState;
LLInventoryPanel::InventoryState p;
all_items_panel->getFilter().toParams(p.filter);
all_items_panel->getRootViewModel().getSorter().toParams(p.sort);
if (p.validateBlock(false))
{
LLSD filterState;
LLInventoryFilter::Params p;
filter->toParams(p);
if (p.validateBlock(false))
{
LLParamSDParser().writeSD(filterState, p);
filterRoot[filter->getName()] = filterState;
}
LLParamSDParser().writeSD(filterState, p);
filterRoot[all_items_panel->getName()] = filterState;
}
}
LLInventoryFilter* filter = findChild<LLInventoryPanel>("Recent Items")->getFilter();
if (filter)
LLInventoryPanel* panel = findChild<LLInventoryPanel>("Recent Items");
if (panel)
{
LLSD filterState;
LLInventoryFilter::Params p;
filter->toParams(p);
LLParamSDParser parser;
parser.writeSD(filterState, p);
filterRoot[filter->getName()] = filterState;
LLInventoryPanel::InventoryState p;
panel->getFilter().toParams(p.filter);
panel->getRootViewModel().getSorter().toParams(p.sort);
if (p.validateBlock(false))
{
LLParamSDParser().writeSD(filterState, p);
filterRoot[panel->getName()] = filterState;
}
}
std::ostringstream filterSaveName;
@ -321,7 +321,7 @@ void LLPanelMainInventory::doCreate(const LLSD& userdata)
void LLPanelMainInventory::resetFilters()
{
LLFloaterInventoryFinder *finder = getFinder();
getActivePanel()->getFilter()->resetDefault();
getActivePanel()->getFilter().resetDefault();
if (finder)
{
finder->updateElementsFromFilter();
@ -426,7 +426,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
}
// save current folder open state if no filter currently applied
if (!mActivePanel->getFilter()->isNotDefault())
if (!mActivePanel->getFilter().isNotDefault())
{
mSavedFolderState->setApply(FALSE);
mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
@ -488,13 +488,13 @@ void LLPanelMainInventory::onFilterSelected()
}
setFilterSubString(mFilterSubString);
LLInventoryFilter* filter = mActivePanel->getFilter();
LLInventoryFilter& filter = mActivePanel->getFilter();
LLFloaterInventoryFinder *finder = getFinder();
if (finder)
{
finder->changeFilter(filter);
finder->changeFilter(&filter);
}
if (filter->isActive())
if (filter.isActive())
{
// If our filter is active we may be the first thing requiring a fetch so we better start it here.
LLInventoryModelBackgroundFetch::instance().start();
@ -607,7 +607,7 @@ void LLPanelMainInventory::onFocusReceived()
void LLPanelMainInventory::setFilterTextFromFilter()
{
mFilterText = mActivePanel->getFilter()->getFilterText();
mFilterText = mActivePanel->getFilter().getFilterText();
}
void LLPanelMainInventory::toggleFindOptions()
@ -657,7 +657,7 @@ LLFloaterInventoryFinder* LLPanelMainInventory::getFinder()
LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* inventory_view) :
LLFloater(LLSD()),
mPanelMainInventory(inventory_view),
mFilter(inventory_view->getPanel()->getFilter())
mFilter(&inventory_view->getPanel()->getFilter())
{
buildFromFile("floater_inventory_view_finder.xml");
updateElementsFromFilter();
@ -1082,14 +1082,14 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
const LLUUID& item_id = static_cast<LLFolderViewModelItemInventory*>(current_item->getViewModelItem())->getUUID();
const std::string &item_name = current_item->getViewModelItem()->getName();
mFilterSubString = item_name;
LLInventoryFilter *filter = mActivePanel->getFilter();
filter->setFilterSubString(item_name);
LLInventoryFilter &filter = mActivePanel->getFilter();
filter.setFilterSubString(item_name);
mFilterEditor->setText(item_name);
mFilterEditor->setFocus(TRUE);
filter->setFilterUUID(item_id);
filter->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
filter->setFilterLinks(LLInventoryFilter::FILTERLINK_ONLY_LINKS);
filter.setFilterUUID(item_id);
filter.setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
filter.setFilterLinks(LLInventoryFilter::FILTERLINK_ONLY_LINKS);
}
}

View File

@ -95,13 +95,13 @@ LLInventoryPanel * LLPanelMarketplaceInbox::setupInventoryPanel()
// Set the sort order newest to oldest
mInventoryPanel->getFolderViewModel()->setSorter(LLInventoryFilter::SO_DATE);
mInventoryPanel->getFilter()->markDefault();
mInventoryPanel->getFilter().markDefault();
// Set selection callback for proper update of inventory status buttons
mInventoryPanel->setSelectCallback(boost::bind(&LLPanelMarketplaceInbox::onSelectionChange, this));
// Set up the note to display when the inbox is empty
mInventoryPanel->getFilter()->setEmptyLookupMessage("InventoryInboxNoItems");
mInventoryPanel->getFilter().setEmptyLookupMessage("InventoryInboxNoItems");
// Hide the placeholder text
inbox_inventory_placeholder->setVisible(FALSE);

View File

@ -182,9 +182,9 @@ LLInboxFolderViewItem::LLInboxFolderViewItem(const Params& p)
#endif
}
BOOL LLInboxFolderViewItem::addToFolder(LLFolderViewFolder* folder)
void LLInboxFolderViewItem::addToFolder(LLFolderViewFolder* folder)
{
BOOL retval = LLFolderViewItem::addToFolder(folder);
LLFolderViewItem::addToFolder(folder);
#if SUPPORTING_FRESH_ITEM_COUNT
// Compute freshness if our parent is the root folder for the inbox
@ -193,8 +193,6 @@ BOOL LLInboxFolderViewItem::addToFolder(LLFolderViewFolder* folder)
computeFreshness();
}
#endif
return retval;
}
BOOL LLInboxFolderViewItem::handleDoubleClick(S32 x, S32 y, MASK mask)

View File

@ -95,7 +95,7 @@ public:
LLInboxFolderViewItem(const Params& p);
BOOL addToFolder(LLFolderViewFolder* folder);
void addToFolder(LLFolderViewFolder* folder);
BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
void draw();

View File

@ -1567,11 +1567,8 @@ void LLPanelObjectInventory::reset()
mFolders = LLUICtrlFactory::create<LLFolderView>(p);
// this ensures that we never say "searching..." or "no items found"
//TODO RN: make this happen by manipulating filter object directly
LLInventoryFilter* inventoryFilter = dynamic_cast<LLInventoryFilter*>(mFolders->getFolderViewModel()->getFilter());
if(inventoryFilter)
{
inventoryFilter->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
}
LLInventoryFilter& inventoryFilter = dynamic_cast<LLInventoryFilter&>(mFolders->getFolderViewModel()->getFilter());
inventoryFilter.setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
mFolders->setCallbackRegistrar(&mCommitCallbackRegistrar);

View File

@ -455,7 +455,7 @@ BOOL LLFloaterTexturePicker::postBuild()
// Commented out to scroll to currently selected texture. See EXT-5403.
// // store this filter as the default one
// mInventoryPanel->getRootFolder()->getFilter()->markDefault();
// mInventoryPanel->getRootFolder()->getFilter().markDefault();
// Commented out to stop opening all folders with textures
// mInventoryPanel->openDefaultFolderForType(LLFolderType::FT_TEXTURE);
@ -638,10 +638,10 @@ void LLFloaterTexturePicker::draw()
LLFolderView* folder_view = mInventoryPanel->getRootFolder();
if (!folder_view) return;
LLFolderViewFilter* filter = static_cast<LLFolderViewModelInventory*>(folder_view->getFolderViewModel())->getFilter();
LLFolderViewFilter& filter = static_cast<LLFolderViewModelInventory*>(folder_view->getFolderViewModel())->getFilter();
bool is_filter_active = folder_view->getViewModelItem()->getLastFilterGeneration() < filter->getCurrentGeneration() &&
filter->isNotDefault();
bool is_filter_active = folder_view->getViewModelItem()->getLastFilterGeneration() < filter.getCurrentGeneration() &&
filter.isNotDefault();
// After inventory panel filter is applied we have to update
// constraint rect for the selected item because of folder view
@ -1012,7 +1012,7 @@ void LLFloaterTexturePicker::onFilterEdit(const std::string& search_string )
else if (mInventoryPanel->getFilterSubString().empty())
{
// first letter in search term, save existing folder open state
if (!mInventoryPanel->getFilter()->isNotDefault())
if (!mInventoryPanel->getFilter().isNotDefault())
{
mSavedFolderState.setApply(FALSE);
mInventoryPanel->getRootFolder()->applyFunctorRecursively(mSavedFolderState);