summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2012-09-28 11:15:45 -0700
committerMerov Linden <merov@lindenlab.com>2012-09-28 11:15:45 -0700
commit0651e10afff81a6e32828c122753d87b8503a79b (patch)
tree3d0b9b8a42f45a3b120ef68b643509010736f84b /indra
parent30ea13381884bca7a07e2bca16e5bde0ccacb530 (diff)
CHUI-342, CHUI-366 and CHUI-367 : WIP : Allow a NO_TOOLTIP value for tooltips, update display/user names and sort on display/user names
Diffstat (limited to 'indra')
-rw-r--r--indra/llui/llview.cpp22
-rw-r--r--indra/llui/llview.h1
-rw-r--r--indra/newview/llconversationmodel.cpp10
-rwxr-xr-xindra/newview/llconversationmodel.h2
-rwxr-xr-xindra/newview/llimfloatercontainer.cpp33
-rw-r--r--indra/newview/llimfloatercontainer.h1
6 files changed, 53 insertions, 16 deletions
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 5c2b3236f6..49e7eaef99 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -870,16 +870,18 @@ BOOL LLView::handleToolTip(S32 x, S32 y, MASK mask)
std::string tooltip = getToolTip();
if (!tooltip.empty())
{
- // allow "scrubbing" over ui by showing next tooltip immediately
- // if previous one was still visible
- F32 timeout = LLToolTipMgr::instance().toolTipVisible()
- ? LLUI::sSettingGroups["config"]->getF32( "ToolTipFastDelay" )
- : LLUI::sSettingGroups["config"]->getF32( "ToolTipDelay" );
- LLToolTipMgr::instance().show(LLToolTip::Params()
- .message(tooltip)
- .sticky_rect(calcScreenRect())
- .delay_time(timeout));
-
+ if (tooltip != NO_TOOLTIP_STRING)
+ {
+ // allow "scrubbing" over ui by showing next tooltip immediately
+ // if previous one was still visible
+ F32 timeout = LLToolTipMgr::instance().toolTipVisible()
+ ? LLUI::sSettingGroups["config"]->getF32( "ToolTipFastDelay" )
+ : LLUI::sSettingGroups["config"]->getF32( "ToolTipDelay" );
+ LLToolTipMgr::instance().show(LLToolTip::Params()
+ .message(tooltip)
+ .sticky_rect(calcScreenRect())
+ .delay_time(timeout));
+ }
handled = TRUE;
}
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 1c35349510..ba896b65a4 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -67,6 +67,7 @@ const BOOL NOT_MOUSE_OPAQUE = FALSE;
const U32 GL_NAME_UI_RESERVED = 2;
+static const std::string NO_TOOLTIP_STRING = " ";
// maintains render state during traversal of UI tree
class LLViewDrawContext
diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp
index 7d0ffa0788..176c05248d 100644
--- a/indra/newview/llconversationmodel.cpp
+++ b/indra/newview/llconversationmodel.cpp
@@ -36,6 +36,7 @@
LLConversationItem::LLConversationItem(std::string display_name, const LLUUID& uuid, LLFolderViewModelInterface& root_view_model) :
LLFolderViewModelItemCommon(root_view_model),
mName(display_name),
+ mUseNameForSort(true),
mUUID(uuid),
mNeedsRefresh(true),
mConvType(CONV_UNKNOWN),
@@ -46,6 +47,7 @@ LLConversationItem::LLConversationItem(std::string display_name, const LLUUID& u
LLConversationItem::LLConversationItem(const LLUUID& uuid, LLFolderViewModelInterface& root_view_model) :
LLFolderViewModelItemCommon(root_view_model),
mName(""),
+ mUseNameForSort(true),
mUUID(uuid),
mNeedsRefresh(true),
mConvType(CONV_UNKNOWN),
@@ -56,6 +58,7 @@ LLConversationItem::LLConversationItem(const LLUUID& uuid, LLFolderViewModelInte
LLConversationItem::LLConversationItem(LLFolderViewModelInterface& root_view_model) :
LLFolderViewModelItemCommon(root_view_model),
mName(""),
+ mUseNameForSort(true),
mUUID(),
mNeedsRefresh(true),
mConvType(CONV_UNKNOWN),
@@ -251,8 +254,9 @@ LLConversationItemParticipant::LLConversationItemParticipant(const LLUUID& uuid,
void LLConversationItemParticipant::onAvatarNameCache(const LLAvatarName& av_name)
{
- mName = av_name.mUsername;
- mDisplayName = av_name.mDisplayName;
+ mUseNameForSort = !av_name.mUsername.empty();
+ mName = (mUseNameForSort ? av_name.mUsername : NO_TOOLTIP_STRING);
+ mDisplayName = (av_name.mDisplayName.empty() ? mName : av_name.mDisplayName);
mNeedsRefresh = true;
if (mParent)
{
@@ -363,7 +367,7 @@ bool LLConversationSort::operator()(const LLConversationItem* const& a, const LL
}
// By default, in all other possible cases (including sort order type LLConversationFilter::SO_NAME of course),
// we sort by name
- S32 compare = LLStringUtil::compareDict(a->getName(), b->getName());
+ S32 compare = LLStringUtil::compareDict((a->useNameForSort() ? a->getName() : a->getDisplayName()), (b->useNameForSort() ? b->getName() : b->getDisplayName()));
return (compare < 0);
}
diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h
index 30f94d51ae..82d4f0a710 100755
--- a/indra/newview/llconversationmodel.h
+++ b/indra/newview/llconversationmodel.h
@@ -123,9 +123,11 @@ public:
void resetRefresh() { mNeedsRefresh = false; }
bool needsRefresh() { return mNeedsRefresh; }
+ bool const useNameForSort() const { return mUseNameForSort; }
protected:
std::string mName; // Name of the session or the participant
+ bool mUseNameForSort;
LLUUID mUUID; // UUID of the session or the participant
EConversationType mConvType; // Type of conversation item
bool mNeedsRefresh; // Flag signaling to the view that something changed for this item
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
index e64247cd60..26b4e6c903 100755
--- a/indra/newview/llimfloatercontainer.cpp
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -158,8 +158,7 @@ BOOL LLIMFloaterContainer::postBuild()
collapseMessagesPane(gSavedPerAccountSettings.getBOOL("ConversationsMessagePaneCollapsed"));
collapseConversationsPane(gSavedPerAccountSettings.getBOOL("ConversationsListPaneCollapsed"));
- LLAvatarNameCache::addUseDisplayNamesCallback(
- boost::bind(&LLIMConversation::processChatHistoryStyleUpdate));
+ LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLIMConversation::processChatHistoryStyleUpdate));
if (! mMessagesPane->isCollapsed())
{
@@ -176,8 +175,11 @@ BOOL LLIMFloaterContainer::postBuild()
mInitialized = true;
- // Add callback: we'll take care of view updates on idle
+ // Add callbacks:
+ // We'll take care of view updates on idle
gIdleCallbacks.addFunction(idle, this);
+ // When display name option change, we need to reload all participant names
+ LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLIMFloaterContainer::processParticipantsStyleUpdate, this));
return TRUE;
}
@@ -330,6 +332,31 @@ void LLIMFloaterContainer::setMinimized(BOOL b)
}
}
+// Update all participants in the conversation lists
+void LLIMFloaterContainer::processParticipantsStyleUpdate()
+{
+ // On each session in mConversationsItems
+ for (conversations_items_map::iterator it_session = mConversationsItems.begin(); it_session != mConversationsItems.end(); it_session++)
+ {
+ // Get the current session descriptors
+ LLConversationItem* session_model = it_session->second;
+ // Iterate through each model participant child
+ LLFolderViewModelItemCommon::child_list_t::const_iterator current_participant_model = session_model->getChildrenBegin();
+ LLFolderViewModelItemCommon::child_list_t::const_iterator end_participant_model = session_model->getChildrenEnd();
+ while (current_participant_model != end_participant_model)
+ {
+ LLConversationItemParticipant* participant_model = dynamic_cast<LLConversationItemParticipant*>(*current_participant_model);
+ // Get the avatar name for this participant id from the cache and update the model
+ LLUUID participant_id = participant_model->getUUID();
+ LLAvatarName av_name;
+ LLAvatarNameCache::get(participant_id,&av_name);
+ participant_model->onAvatarNameCache(av_name);
+ // Next participant
+ current_participant_model++;
+ }
+ }
+}
+
// static
void LLIMFloaterContainer::idle(void* user_data)
{
diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h
index 070feb3273..2debc2455b 100644
--- a/indra/newview/llimfloatercontainer.h
+++ b/indra/newview/llimfloatercontainer.h
@@ -96,6 +96,7 @@ private:
void onNewMessageReceived(const LLSD& data);
void onExpandCollapseButtonClicked();
+ void processParticipantsStyleUpdate();
void collapseConversationsPane(bool collapse);