diff options
| author | Merov Linden <merov@lindenlab.com> | 2012-09-12 23:21:42 -0700 | 
|---|---|---|
| committer | Merov Linden <merov@lindenlab.com> | 2012-09-12 23:21:42 -0700 | 
| commit | aa191cb98a80cd637b623f1dfb765374bf98dfa6 (patch) | |
| tree | 689e5282dd9fddfa5acce80ce0da1111ba467ecb /indra/newview/llconversationloglist.cpp | |
| parent | 5cad4b5768cccc8301da5e15dd09a0a4e68d4112 (diff) | |
| parent | 51725b3898df96aa5819d86d1e8e7c71b47304f2 (diff) | |
Pull merge from richard/viewer-chui
Diffstat (limited to 'indra/newview/llconversationloglist.cpp')
| -rw-r--r-- | indra/newview/llconversationloglist.cpp | 57 | 
1 files changed, 45 insertions, 12 deletions
diff --git a/indra/newview/llconversationloglist.cpp b/indra/newview/llconversationloglist.cpp index d39e090c22..429e99f7ad 100644 --- a/indra/newview/llconversationloglist.cpp +++ b/indra/newview/llconversationloglist.cpp @@ -143,22 +143,32 @@ void LLConversationLogList::changed()  void LLConversationLogList::changed(const LLUUID& session_id, U32 mask)  { -	if (mask & LLConversationLogObserver::VOICE_STATE) +	LLConversationLogListItem* item = getConversationLogListItem(session_id); + +	if (!item)  	{ -		std::vector<LLPanel*> panels; -		LLFlatListViewEx::getItems(panels); +		return; +	} -		std::vector<LLPanel*>::iterator iter = panels.begin(); +	if (mask & LLConversationLogObserver::CHANGED_TIME) +	{ +		item->updateTimestamp(); -		for (; iter != panels.end(); ++iter) +		// if list is sorted by date and a date of some item has changed, +		// than the whole list should be rebuilt +		if (E_SORT_BY_DATE == getSortOrder())  		{ -			LLConversationLogListItem* item = dynamic_cast<LLConversationLogListItem*>(*iter); - -			if (item && session_id == item->getConversation()->getSessionID() && !item->getConversation()->isConversationPast()) -			{ -				item->initIcons(); -				return; -			} +			mIsDirty = true; +		} +	} +	else if (mask & LLConversationLogObserver::CHANGED_NAME) +	{ +		item->updateName(); +		// if list is sorted by name and a name of some item has changed, +		// than the whole list should be rebuilt +		if (E_SORT_BY_DATE == getSortOrder()) +		{ +			mIsDirty = true;  		}  	}  } @@ -401,6 +411,29 @@ const LLConversation* LLConversationLogList::getSelectedConversation()  	return NULL;  } +LLConversationLogListItem* LLConversationLogList::getConversationLogListItem(const LLUUID& session_id) +{ +	std::vector<LLPanel*> panels; +	LLFlatListViewEx::getItems(panels); +	std::vector<LLPanel*>::iterator iter = panels.begin(); + +	for (; iter != panels.end(); ++iter) +	{ +		LLConversationLogListItem* item = dynamic_cast<LLConversationLogListItem*>(*iter); +		if (item && session_id == item->getConversation()->getSessionID()) +		{ +			return item; +		} +	} + +	return NULL; +} + +LLConversationLogList::ESortOrder LLConversationLogList::getSortOrder() +{ +	return static_cast<ESortOrder>(gSavedSettings.getU32("CallLogSortOrder")); +} +  bool LLConversationLogListItemComparator::compare(const LLPanel* item1, const LLPanel* item2) const  {  	const LLConversationLogListItem* conversation_item1 = dynamic_cast<const LLConversationLogListItem*>(item1);  | 
