summaryrefslogtreecommitdiff
path: root/indra/newview/llavatariconctrl.cpp
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2009-07-30 23:22:41 +0000
committerSteven Bennetts <steve@lindenlab.com>2009-07-30 23:22:41 +0000
commite97f7728a90dd66014f6b3f0cd5e8d4c71f48691 (patch)
tree4be178df6b50a3395105cdd3ac0044d6467a9fa3 /indra/newview/llavatariconctrl.cpp
parentd5aa10143a0e6457b3326ba839c81b7c956a015e (diff)
merge https://svn.aws.productengine.com/secondlife/export-from-ll/viewer-2-0/indra@1170 https://svn.aws.productengine.com/secondlife/pe/stable-1/indra@1187 -> viewer-2.0.0-3
Diffstat (limited to 'indra/newview/llavatariconctrl.cpp')
-rw-r--r--indra/newview/llavatariconctrl.cpp82
1 files changed, 55 insertions, 27 deletions
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index a3b8f6726d..f6eb7f6494 100644
--- a/indra/newview/llavatariconctrl.cpp
+++ b/indra/newview/llavatariconctrl.cpp
@@ -42,12 +42,15 @@
#include "lluictrlfactory.h"
#include "llcachename.h"
+#include "llagentdata.h"
#define MENU_ITEM_VIEW_PROFILE 0
#define MENU_ITEM_SEND_IM 1
static LLDefaultChildRegistry::Register<LLAvatarIconCtrl> r("avatar_icon");
+LLAvatarIconCtrl::avatar_image_map_t LLAvatarIconCtrl::sImagesCache;
+
LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p)
: LLIconCtrl(p),
mDrawTooltip(p.draw_tooltip)
@@ -137,7 +140,17 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
LLAvatarPropertiesProcessor::getInstance()->addObserver(value.asUUID(), this);
LLAvatarPropertiesProcessor::getInstance()->sendDataRequest(value.asUUID(),APT_PROPERTIES);
mAvatarId = value.asUUID();
+
+ // Check if cache already contains image_id for that avatar
+ avatar_image_map_t::iterator it;
+
+ it = sImagesCache.find(mAvatarId);
+ if (it != sImagesCache.end())
+ {
+ updateFromCache(it->second);
+ }
}
+
}
else
{
@@ -147,6 +160,37 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)
gCacheName->get(mAvatarId, FALSE, boost::bind(&LLAvatarIconCtrl::nameUpdatedCallback, this, _1, _2, _3, _4));
}
+void LLAvatarIconCtrl::updateFromCache(LLAvatarIconCtrl::LLImagesCacheItem data)
+{
+ // Update the avatar
+ if (data.image_id.notNull())
+ {
+ LLIconCtrl::setValue(data.image_id);
+ }
+ else
+ {
+ LLIconCtrl::setValue("default_profile_picture.j2c");
+ }
+
+ // Update color of status symbol and tool tip
+ if (data.flags & AVATAR_ONLINE)
+ {
+ mStatusSymbol->setColor(LLColor4::green);
+ if (mDrawTooltip)
+ {
+ setToolTip((LLStringExplicit)"Online");
+ }
+ }
+ else
+ {
+ mStatusSymbol->setColor(LLColor4::grey);
+ if (mDrawTooltip)
+ {
+ setToolTip((LLStringExplicit)"Offline");
+ }
+ }
+}
+
//virtual
void LLAvatarIconCtrl::processProperties(void* data, EAvatarProcessorType type)
{
@@ -160,33 +204,10 @@ void LLAvatarIconCtrl::processProperties(void* data, EAvatarProcessorType type)
return;
}
- // Update the avatar
- if (avatar_data->image_id.notNull())
- {
- LLIconCtrl::setValue(avatar_data->image_id);
- }
- else
- {
- LLIconCtrl::setValue("default_profile_picture.j2c");
- }
+ LLAvatarIconCtrl::LLImagesCacheItem data(avatar_data->image_id, avatar_data->flags);
- // Update color of status symbol and tool tip
- if (avatar_data->flags & AVATAR_ONLINE)
- {
- mStatusSymbol->setColor(LLColor4::green);
- if (mDrawTooltip)
- {
- setToolTip((LLStringExplicit)"Online");
- }
- }
- else
- {
- mStatusSymbol->setColor(LLColor4::grey);
- if (mDrawTooltip)
- {
- setToolTip((LLStringExplicit)"Offline");
- }
- }
+ updateFromCache(data);
+ sImagesCache.insert(std::pair<LLUUID, LLAvatarIconCtrl::LLImagesCacheItem>(mAvatarId, data));
}
}
}
@@ -198,10 +219,17 @@ BOOL LLAvatarIconCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
if(menu)
{
bool is_friend = LLAvatarTracker::instance().getBuddyInfo(mAvatarId) != NULL;
-
+
menu->setItemEnabled("Add Friend", !is_friend);
menu->setItemEnabled("Remove Friend", is_friend);
+ if(gAgentID == mAvatarId)
+ {
+ menu->setItemEnabled("Add Friend", false);
+ menu->setItemEnabled("Send IM", false);
+ menu->setItemEnabled("Remove Friend", false);
+ }
+
menu->buildDrawLabels();
menu->updateParent(LLMenuGL::sMenuContainer);
LLMenuGL::showPopup(this, menu, x, y);