CHUI-222 FIX Selecting None in inventory filters does not update until inventory selected
parent
c4f59fd588
commit
f6dfd6bf0f
|
|
@ -266,8 +266,6 @@ LLFolderView::~LLFolderView( void )
|
|||
mItems.clear();
|
||||
mFolders.clear();
|
||||
|
||||
//product engine bugfix, prevent deletion of non-heap data
|
||||
//delete mViewModel;
|
||||
mViewModel = NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1543,11 +1543,14 @@ BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
|
|||
|
||||
void LLFolderViewFolder::requestArrange()
|
||||
{
|
||||
mLastArrangeGeneration = -1;
|
||||
// flag all items up to root
|
||||
if (mParentFolder)
|
||||
//if ( mLastArrangeGeneration != -1)
|
||||
{
|
||||
mParentFolder->requestArrange();
|
||||
mLastArrangeGeneration = -1;
|
||||
// flag all items up to root
|
||||
if (mParentFolder)
|
||||
{
|
||||
mParentFolder->requestArrange();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ public:
|
|||
|
||||
virtual bool potentiallyVisible() = 0; // is the item definitely visible or we haven't made up our minds yet?
|
||||
|
||||
virtual bool filter( LLFolderViewFilter& filter) = 0;
|
||||
virtual void filter( LLFolderViewFilter& filter) = 0;
|
||||
virtual bool passedFilter(S32 filter_generation = -1) = 0;
|
||||
virtual bool descendantsPassedFilter(S32 filter_generation = -1) = 0;
|
||||
virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation) = 0;
|
||||
|
|
@ -192,6 +192,7 @@ public:
|
|||
: mSortVersion(-1),
|
||||
mPassedFilter(true),
|
||||
mPassedFolderFilter(true),
|
||||
mPrevPassedAllFilters(false),
|
||||
mFolderViewItem(NULL),
|
||||
mLastFilterGeneration(-1),
|
||||
mMostFilteredDescendantGeneration(-1),
|
||||
|
|
@ -232,6 +233,7 @@ protected:
|
|||
S32 mSortVersion;
|
||||
bool mPassedFilter;
|
||||
bool mPassedFolderFilter;
|
||||
bool mPrevPassedAllFilters;
|
||||
|
||||
S32 mLastFilterGeneration;
|
||||
S32 mMostFilteredDescendantGeneration;
|
||||
|
|
|
|||
|
|
@ -133,8 +133,9 @@ bool LLFolderViewModelItemInventory::passedFilter(S32 filter_generation)
|
|||
filter_generation = mRootViewModel.getFilter()->getFirstSuccessGeneration();
|
||||
|
||||
return mPassedFolderFilter
|
||||
&& mLastFilterGeneration >= filter_generation
|
||||
&& (mPassedFilter || descendantsPassedFilter(filter_generation));
|
||||
&& (descendantsPassedFilter(filter_generation)
|
||||
|| (mLastFilterGeneration >= filter_generation
|
||||
&& mPassedFilter));
|
||||
}
|
||||
|
||||
bool LLFolderViewModelItemInventory::descendantsPassedFilter(S32 filter_generation)
|
||||
|
|
@ -148,30 +149,29 @@ void LLFolderViewModelItemInventory::setPassedFilter(bool passed, bool passed_fo
|
|||
mPassedFilter = passed;
|
||||
mPassedFolderFilter = passed_folder;
|
||||
mLastFilterGeneration = filter_generation;
|
||||
|
||||
bool passed_filter_before = mPrevPassedAllFilters;
|
||||
mPrevPassedAllFilters = passedFilter(filter_generation);
|
||||
|
||||
if (passed_filter_before != mPrevPassedAllFilters)
|
||||
{
|
||||
//TODO RN: ensure this still happens, but without dependency on folderview
|
||||
LLFolderViewFolder* parent_folder = mFolderViewItem->getParentFolder();
|
||||
if (parent_folder)
|
||||
{
|
||||
parent_folder->requestArrange();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter )
|
||||
void LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter )
|
||||
{
|
||||
bool passed_filter_before = item->passedFilter();
|
||||
S32 filter_generation = filter.getCurrentGeneration();
|
||||
S32 must_pass_generation = filter.getFirstRequiredGeneration();
|
||||
|
||||
if (item->getLastFilterGeneration() < filter_generation)
|
||||
{
|
||||
// recursive application of the filter for child items
|
||||
item->filter( filter );
|
||||
|
||||
if (item->getLastFilterGeneration() >= must_pass_generation
|
||||
&& !item->passedFilter(must_pass_generation))
|
||||
{
|
||||
// failed to pass an earlier filter that was a subset of the current one
|
||||
// go ahead and flag this item as done
|
||||
if (item->passedFilter())
|
||||
{
|
||||
llerrs << "Invalid shortcut in inventory filtering!" << llendl;
|
||||
}
|
||||
item->setPassedFilter(false, false, filter_generation);
|
||||
}
|
||||
}
|
||||
|
||||
// track latest generation to pass any child items, for each folder up to root
|
||||
|
|
@ -184,37 +184,34 @@ bool LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* ite
|
|||
view_model->mMostFilteredDescendantGeneration = filter_generation;
|
||||
view_model = static_cast<LLFolderViewModelItemInventory*>(view_model->mParent);
|
||||
}
|
||||
|
||||
return !passed_filter_before;
|
||||
}
|
||||
else // !item->passedfilter()
|
||||
{
|
||||
return passed_filter_before;
|
||||
}
|
||||
}
|
||||
|
||||
bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
|
||||
void LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
|
||||
{
|
||||
bool changed = false;
|
||||
const S32 filter_generation = filter.getCurrentGeneration();
|
||||
const S32 must_pass_generation = filter.getFirstRequiredGeneration();
|
||||
|
||||
if(!mChildren.empty()
|
||||
&& (getLastFilterGeneration() < filter.getFirstRequiredGeneration() // haven't checked descendants against minimum required generation to pass
|
||||
|| descendantsPassedFilter(filter.getFirstRequiredGeneration()))) // or at least one descendant has passed the minimum requirement
|
||||
if (getLastFilterGeneration() >= must_pass_generation
|
||||
&& !passedFilter(must_pass_generation))
|
||||
{
|
||||
// now query children
|
||||
for (child_list_t::iterator iter = mChildren.begin();
|
||||
iter != mChildren.end() && filter.getFilterCount() > 0;
|
||||
++iter)
|
||||
{
|
||||
changed |= filterChildItem((*iter), filter);
|
||||
}
|
||||
// failed to pass an earlier filter that was a subset of the current one
|
||||
// go ahead and flag this item as done
|
||||
setPassedFilter(false, false, filter_generation);
|
||||
return;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
if(!mChildren.empty()
|
||||
&& (getLastFilterGeneration() < must_pass_generation // haven't checked descendants against minimum required generation to pass
|
||||
|| descendantsPassedFilter(must_pass_generation))) // or at least one descendant has passed the minimum requirement
|
||||
{
|
||||
//TODO RN: ensure this still happens, but without dependency on folderview
|
||||
LLFolderViewFolder* folder = static_cast<LLFolderViewFolder*>(mFolderViewItem);
|
||||
folder->requestArrange();
|
||||
// now query children
|
||||
for (child_list_t::iterator iter = mChildren.begin(), end_iter = mChildren.end();
|
||||
iter != end_iter && filter.getFilterCount() > 0;
|
||||
++iter)
|
||||
{
|
||||
filterChildItem((*iter), filter);
|
||||
}
|
||||
}
|
||||
|
||||
// if we didn't use all filter iterations
|
||||
|
|
@ -229,11 +226,10 @@ bool LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
|
|||
? filter.checkFolder(this)
|
||||
: true;
|
||||
|
||||
setPassedFilter(passed_filter, passed_filter_folder, filter.getCurrentGeneration());
|
||||
setPassedFilter(passed_filter, passed_filter_folder, filter_generation);
|
||||
//TODO RN: create interface for string highlighting
|
||||
//mStringMatchOffset = filter.getStringMatchOffset(this);
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
|
||||
LLFolderViewModelInventory* LLInventoryPanel::getFolderViewModel()
|
||||
|
|
|
|||
|
|
@ -59,8 +59,8 @@ public:
|
|||
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 bool filter( LLFolderViewFilter& filter);
|
||||
virtual bool filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter);
|
||||
virtual void filter( LLFolderViewFilter& filter);
|
||||
virtual void filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter);
|
||||
|
||||
virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const = 0;
|
||||
virtual LLToolDragAndDrop::ESource getDragSource() const = 0;
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ public:
|
|||
virtual bool hasChildren() const { return FALSE; }
|
||||
|
||||
virtual bool potentiallyVisible() { return true; }
|
||||
virtual bool filter( LLFolderViewFilter& filter) { return true; }
|
||||
virtual void filter( LLFolderViewFilter& filter) { }
|
||||
virtual bool descendantsPassedFilter(S32 filter_generation = -1) { return true; }
|
||||
virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation) { }
|
||||
virtual bool passedFilter(S32 filter_generation = -1) { return true; }
|
||||
|
|
|
|||
|
|
@ -1616,7 +1616,7 @@ void LLPanelObjectInventory::inventoryChanged(LLViewerObject* object,
|
|||
iter != inventory->end(); )
|
||||
{
|
||||
LLInventoryObject* item = *iter++;
|
||||
LLFloaterProperties* floater = LLFloaterReg::findTypedInstance<LLFloaterProperties>("properites", item->getUUID());
|
||||
LLFloaterProperties* floater = LLFloaterReg::findTypedInstance<LLFloaterProperties>("properties", item->getUUID());
|
||||
if(floater)
|
||||
{
|
||||
floater->refresh();
|
||||
|
|
|
|||
Loading…
Reference in New Issue