diff options
| -rw-r--r-- | indra/newview/llconversationmodel.cpp | 38 | ||||
| -rw-r--r-- | indra/newview/llconversationmodel.h | 15 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.h | 2 | ||||
| -rw-r--r-- | indra/newview/llparticipantlist.cpp | 2 | 
5 files changed, 50 insertions, 28 deletions
| diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp index fa49987d15..e810bac1d9 100644 --- a/indra/newview/llconversationmodel.cpp +++ b/indra/newview/llconversationmodel.cpp @@ -78,14 +78,6 @@ void LLConversationItem::showProperties(void)  {  } -bool LLConversationSort::operator()(const LLConversationItem* const& a, const LLConversationItem* const& b) const -{ -	// We compare only by name for the moment -	// *TODO : Implement the sorting by date -	S32 compare = LLStringUtil::compareDict(a->getDisplayName(), b->getDisplayName()); -	return (compare < 0); -} -  //  // LLConversationItemSession  //  @@ -197,12 +189,38 @@ void LLConversationItemParticipant::onAvatarNameCache(const LLAvatarName& av_nam  {  	mName = av_name.mDisplayName;  	// *TODO : we should also store that one, to be used in the tooltip : av_name.mUsername -	// *TODO : we need to request or initiate a list resort  	mNeedsRefresh = true; +	if (mParent) +	{ +		mParent->requestSort(); +	}  }  void LLConversationItemParticipant::dumpDebugData()  {  	llinfos << "Merov debug : participant, uuid = " << mUUID << ", name = " << mName << ", muted = " << mIsMuted << ", moderator = " << mIsModerator << llendl; -}	 +} + +// +// LLConversationSort +//  + +bool LLConversationSort::operator()(const LLConversationItem* const& a, const LLConversationItem* const& b) const +{ +	// For the moment, we sort only by name +	// *TODO : Implement the sorting by date as well (most recent first) +	// *TODO : Check the type of item (session/participants) as order should be different for both (eventually) +	S32 compare = LLStringUtil::compareDict(a->getDisplayName(), b->getDisplayName()); +	return (compare < 0);	 +} + +// +// LLConversationViewModel +// + +void LLConversationViewModel::sort(LLFolderViewFolder* folder)  +{ +	base_t::sort(folder); +} +  // EOF diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h index 26c7a29d76..2775bf8186 100644 --- a/indra/newview/llconversationmodel.h +++ b/indra/newview/llconversationmodel.h @@ -208,23 +208,14 @@ private:  class LLConversationSort  {  public: -	LLConversationSort(U32 order = 0) -	:	mSortOrder(order), -	mByDate(false), -	mByName(false) -	{ -		mByDate = (order & LLConversationFilter::SO_DATE); -		mByName = (order & LLConversationFilter::SO_NAME); -	} +	LLConversationSort(U32 order = 0) : mSortOrder(order) { } -	bool isByDate() const { return mByDate; } +	bool isByDate() const { return (mSortOrder & LLConversationFilter::SO_DATE); }  	U32 getSortOrder() const { return mSortOrder; }  	bool operator()(const LLConversationItem* const& a, const LLConversationItem* const& b) const;  private:  	U32  mSortOrder; -	bool mByDate; -	bool mByName;  };  class LLConversationViewModel @@ -233,7 +224,7 @@ class LLConversationViewModel  public:  	typedef LLFolderViewModel<LLConversationSort, LLConversationItem, LLConversationItem, LLConversationFilter> base_t; -	void sort(LLFolderViewFolder* folder) { } // *TODO : implement conversation sort +	void sort(LLFolderViewFolder* folder);  	bool contentsReady() { return true; }	// *TODO : we need to check that participants names are available somewhat  	bool startDrag(std::vector<LLFolderViewModelItem*>& items) { return false; } // We do not allow drag of conversation items diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 480f964939..faca92e662 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -45,6 +45,7 @@  #include "lltransientfloatermgr.h"  #include "llviewercontrol.h"  #include "llconversationview.h" +#include "llcallbacklist.h"  //  // LLIMFloaterContainer @@ -66,6 +67,8 @@ LLIMFloaterContainer::LLIMFloaterContainer(const LLSD& seed)  LLIMFloaterContainer::~LLIMFloaterContainer()  { +	gIdleCallbacks.deleteFunction(idle, this); +  	mNewMessageConnection.disconnect();  	LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::IM, this); @@ -150,6 +153,10 @@ BOOL LLIMFloaterContainer::postBuild()          mConversationsPane->handleReshape(list_size, TRUE);  	}  	mInitialized = true; + +	// Add callback: we'll take care of view updates on idle +	gIdleCallbacks.addFunction(idle, this); +  	return TRUE;  } @@ -301,6 +308,13 @@ void LLIMFloaterContainer::setMinimized(BOOL b)  	}  } +//static +void LLIMFloaterContainer::idle(void* user_data) +{ +	LLIMFloaterContainer* panel = (LLIMFloaterContainer*)user_data; +	panel->mConversationsRoot->update(); +} +  void LLIMFloaterContainer::draw()  {  	// CHUI Notes @@ -356,6 +370,8 @@ void LLIMFloaterContainer::draw()  		}  	} +	repositioningWidgets(); +  	if (mTabContainer->getTabCount() == 0)  	{  		// Do not close the container when every conversation is torn off because the user @@ -363,8 +379,6 @@ void LLIMFloaterContainer::draw()  		collapseMessagesPane(true);  	}  	LLFloater::draw(); - -	repositioningWidgets();  }  void LLIMFloaterContainer::tabClose() @@ -600,7 +614,7 @@ void LLIMFloaterContainer::addConversationListItem(const LLUUID& uuid)  	}  	if (!item)  	{ -		llinfos << "Merov debug : Couldn't create conversation session item : " << display_name << llendl; +		llwarns << "Couldn't create conversation session item : " << display_name << llendl;  		return;  	}  	// *TODO: Should we flag LLConversationItemSession with a mIsNearbyChat? @@ -623,7 +637,6 @@ void LLIMFloaterContainer::addConversationListItem(const LLUUID& uuid)  	// Note: usually, we do not get an updated avatar list at that point  	LLFolderViewModelItemCommon::child_list_t::const_iterator current_participant_model = item->getChildrenBegin();  	LLFolderViewModelItemCommon::child_list_t::const_iterator end_participant_model = item->getChildrenEnd(); -	llinfos << "Merov debug : create participant, children size = " << item->getChildrenCount() << llendl;  	while (current_participant_model != end_participant_model)  	{  		LLConversationItem* participant_model = dynamic_cast<LLConversationItem*>(*current_participant_model); diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h index 53e3849600..324adfcc11 100644 --- a/indra/newview/llimfloatercontainer.h +++ b/indra/newview/llimfloatercontainer.h @@ -75,6 +75,8 @@ public:  	void collapseMessagesPane(bool collapse); +	// Callbacks +	static void idle(void* user_data);  	// LLIMSessionObserver observe triggers  	/*virtual*/ void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id); diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index 2282734109..0d1a37c835 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -675,8 +675,6 @@ void LLParticipantList::addAvatarIDExceptAgent(const LLUUID& avatar_id)  	// *TODO : Merov : need to update the online/offline status of the participant.  	// Hack for this: LLAvatarTracker::instance().isBuddyOnline(avatar_id)) -	llinfos << "Merov debug : added participant, name = " << participant->getName() << llendl; -	  	// Add the participant model to the session's children list  	addParticipant(participant); | 
