diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llui/llfolderview.cpp | 2 | ||||
| -rwxr-xr-x | indra/llui/llfolderviewitem.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelpeople.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llpersonfolderview.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llpersonmodelcommon.cpp | 28 | ||||
| -rw-r--r-- | indra/newview/llpersonmodelcommon.h | 14 | 
6 files changed, 36 insertions, 12 deletions
| diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index cf449217f5..9cf822892e 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -1652,7 +1652,7 @@ void LLFolderView::update()  	}    BOOL is_visible = isInVisibleChain(); - +        // Puts folders/items in proper positions    // arrange() takes the model filter flag into account and call sort() if necessary (CHUI-849)    // It also handles the open/close folder animation diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 6c147ccc12..0c0c54c38c 100755 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -1109,7 +1109,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )  BOOL LLFolderViewFolder::needsArrange()  { -	return mLastArrangeGeneration < getRoot()->getArrangeGeneration();  +	return mLastArrangeGeneration < getRoot()->getArrangeGeneration();  }  // Passes selection information on to children and record selection diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index f7492a51e1..af9ecd743c 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1199,6 +1199,7 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string)      else if (cur_tab == FBCTESTTWO_TAB_NAME)      {          mPersonFolderViewModel.getFilter().setFilterSubString(filter); +        mPersonFolderView->requestArrange();      }  } diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index c22e4f3e58..7e969fc96c 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -36,6 +36,7 @@ LLPersonFolderView::LLPersonFolderView(const Params &p) :  LLFolderView(p),  	mConversationsEventStream("ConversationsEventsTwo")  { +    rename("Persons");  // For tracking!  	mConversationsEventStream.listen("ConversationsRefresh", boost::bind(&LLPersonFolderView::onConversationModelEvent, this, _1));  	createPersonTabs(); diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index 70a24ac77a..b3424cc451 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -48,6 +48,7 @@ LLPersonModelCommon::LLPersonModelCommon(LLFolderViewModelInterface& root_view_m      LLFolderViewModelItemCommon(root_view_model),  	mName(""),      mSearchableName(""), +    mPrevPassedAllFilters(false),  	mID(LLUUID().generateNewID())  {  } @@ -103,11 +104,11 @@ bool LLPersonModelCommon::filter( LLFolderViewFilter& filter)          llinfos << "Merov : LLPersonModelCommon::filter, exit, no modif" << llendl;          return true;      } -*/         + */      if (!mChildren.empty())      {          // If the current instance has children, it's a "person folder" and always passes filters (we do not filter out empty folders) -        setPassedFilter(1, -1); +        setPassedFilter(1, filter.getCurrentGeneration());          // Call filter recursively on all children          for (child_list_t::iterator iter = mChildren.begin(), end_iter = mChildren.end();              iter != end_iter; @@ -121,13 +122,31 @@ bool LLPersonModelCommon::filter( LLFolderViewFilter& filter)      {          // If there's no children, the current instance is a person and we check and set the passed filter flag on it          const bool passed_filter = filter.check(this); -        setPassedFilter(passed_filter, -1, filter.getStringMatchOffset(this), filter.getFilterStringSize()); +        setPassedFilter(passed_filter, filter.getCurrentGeneration(), filter.getStringMatchOffset(this), filter.getFilterStringSize());      }      filter.clearModified();      return true;  } +void LLPersonModelCommon::setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset, std::string::size_type string_size) +{ +	LLFolderViewModelItemCommon::setPassedFilter(passed, filter_generation, string_offset, string_size); +	bool before = mPrevPassedAllFilters; +	mPrevPassedAllFilters = passedFilter(filter_generation); +     +    if (before != mPrevPassedAllFilters) +	{ +        // Need to rearrange the folder if the filtered state of the item changed +		LLFolderViewFolder* parent_folder = mFolderViewItem->getParentFolder(); +		if (parent_folder) +		{ +			parent_folder->requestArrange(); +		} +	} +} + +  //  // LLPersonTabModel  //  @@ -218,7 +237,8 @@ LLPersonViewFilter::LLPersonViewFilter() :      mEmptyLookupMessage(""),      mFilterSubString(""),      mName(""), -    mFilterModified(FILTER_NONE) +    mFilterModified(FILTER_NONE), +    mCurrentGeneration(0)  {  } diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index 7be3387564..5f3801874d 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -75,7 +75,7 @@ public:  	virtual bool filter( LLFolderViewFilter& filter);  	virtual bool descendantsPassedFilter(S32 filter_generation = -1) { return true; } -//	virtual void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) { } +	virtual void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0);  	virtual bool passedFilter(S32 filter_generation = -1) { return mPassedFilter; }  	// The action callbacks @@ -102,6 +102,7 @@ protected:  	std::string mName;              // Name of the person  	std::string mSearchableName;	// Name used in string matching for this person +    bool mPrevPassedAllFilters;  	LLUUID mID;  };	 @@ -180,7 +181,7 @@ public:  	void 				clearModified();  	const std::string& 	getName() const { return mName; }  	const std::string& 	getFilterText() { return mName; } -	void 				setModified(EFilterModified behavior = FILTER_RESTART) { mFilterModified = behavior; } +	void 				setModified(EFilterModified behavior = FILTER_RESTART) { mFilterModified = behavior; mCurrentGeneration++; }  	// +-------------------------------------------------------------------+  	// + Time @@ -201,10 +202,10 @@ public:  	// +-------------------------------------------------------------------+  	// + Generation  	// +-------------------------------------------------------------------+ -    // Note : unclear if we have to take tab on generation at that point -	S32 				getCurrentGeneration() const { return 0; } -	S32 				getFirstSuccessGeneration() const { return 0; } -	S32 				getFirstRequiredGeneration() const { return 0; } +    // Note : For the moment, we do not support restrictive filtering so all generation indexes are pointing to the current generation +	S32 				getCurrentGeneration() const { return mCurrentGeneration; } +	S32 				getFirstSuccessGeneration() const { return mCurrentGeneration; } +	S32 				getFirstRequiredGeneration() const { return mCurrentGeneration; }      // Non Virtual Methods (i.e. specific to this class)  	void 				setFilterSubString(const std::string& string); @@ -214,6 +215,7 @@ private:  	std::string         mEmptyLookupMessage;  	std::string			mFilterSubString;  	EFilterModified 	mFilterModified; +	S32					mCurrentGeneration;  };  class LLPersonViewSort | 
