Fixed minor bug EXT-2955 ("Teleport" button is enabled in profile panel of offline avatar).

- Fixed not only "Teleport" button from profile, but also from IM (according to comment in JIRA).

--HG--
branch : product-engine
meow-7.2.2
Andrew Dyukov 2009-12-29 19:55:23 +02:00
parent 540b88bded
commit 9737349a72
3 changed files with 96 additions and 2 deletions

View File

@ -331,6 +331,33 @@ void LLPanelAvatarNotes::onShareButtonClick()
//*TODO not implemented.
}
LLPanelAvatarNotes::~LLPanelAvatarNotes()
{
if(getAvatarId().notNull())
{
LLAvatarTracker::instance().removeParticularFriendObserver(getAvatarId(), this);
}
}
// virtual, called by LLAvatarTracker
void LLPanelAvatarNotes::changed(U32 mask)
{
childSetEnabled("teleport", LLAvatarTracker::instance().isBuddyOnline(getAvatarId()));
}
void LLPanelAvatarNotes::setAvatarId(const LLUUID& id)
{
if(id.notNull())
{
if(getAvatarId().notNull())
{
LLAvatarTracker::instance().removeParticularFriendObserver(getAvatarId(), this);
}
LLPanelProfileTab::setAvatarId(id);
LLAvatarTracker::instance().addParticularFriendObserver(getAvatarId(), this);
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
@ -396,9 +423,18 @@ void LLPanelProfileTab::onMapButtonClick()
void LLPanelProfileTab::updateButtons()
{
bool enable_map_btn = LLAvatarTracker::instance().isBuddyOnline(getAvatarId())
&& gAgent.isGodlike() || is_agent_mappable(getAvatarId());
bool is_avatar_online = LLAvatarTracker::instance().isBuddyOnline(getAvatarId());
if(LLAvatarActions::isFriend(getAvatarId()))
{
childSetEnabled("teleport", is_avatar_online);
}
else
{
childSetEnabled("teleport", true);
}
bool enable_map_btn = is_avatar_online && gAgent.isGodlike() || is_agent_mappable(getAvatarId());
childSetEnabled("show_on_map_btn", enable_map_btn);
childSetEnabled("call", LLAvatarActions::canCall(getAvatarId()));
}
@ -716,6 +752,33 @@ void LLPanelAvatarProfile::onOverflowButtonClicked()
LLMenuGL::showPopup(this, mProfileMenu, rect.mRight, rect.mTop);
}
LLPanelAvatarProfile::~LLPanelAvatarProfile()
{
if(getAvatarId().notNull())
{
LLAvatarTracker::instance().removeParticularFriendObserver(getAvatarId(), this);
}
}
// virtual, called by LLAvatarTracker
void LLPanelAvatarProfile::changed(U32 mask)
{
childSetEnabled("teleport", LLAvatarTracker::instance().isBuddyOnline(getAvatarId()));
}
void LLPanelAvatarProfile::setAvatarId(const LLUUID& id)
{
if(id.notNull())
{
if(getAvatarId().notNull())
{
LLAvatarTracker::instance().removeParticularFriendObserver(getAvatarId(), this);
}
LLPanelProfileTab::setAvatarId(id);
LLAvatarTracker::instance().addParticularFriendObserver(getAvatarId(), this);
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////

View File

@ -35,6 +35,7 @@
#include "llpanel.h"
#include "llavatarpropertiesprocessor.h"
#include "llcallingcard.h"
class LLComboBox;
class LLLineEditor;
@ -120,12 +121,21 @@ private:
*/
class LLPanelAvatarProfile
: public LLPanelProfileTab
, public LLFriendObserver
{
public:
LLPanelAvatarProfile();
/*virtual*/ ~LLPanelAvatarProfile();
/*virtual*/ void onOpen(const LLSD& key);
/**
* LLFriendObserver trigger
*/
virtual void changed(U32 mask);
/*virtual*/ void setAvatarId(const LLUUID& id);
/**
* Processes data received from server.
*/
@ -246,9 +256,18 @@ private:
*/
class LLPanelAvatarNotes
: public LLPanelProfileTab
, public LLFriendObserver
{
public:
LLPanelAvatarNotes();
/*virtual*/ ~LLPanelAvatarNotes();
virtual void setAvatarId(const LLUUID& id);
/**
* LLFriendObserver trigger
*/
virtual void changed(U32 mask);
/*virtual*/ void onOpen(const LLSD& key);

View File

@ -184,6 +184,12 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
// Disable "Add friend" button for friends.
childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID));
// Disable "Teleport" button if friend is offline
if(LLAvatarActions::isFriend(mAvatarID))
{
childSetEnabled("teleport_btn", LLAvatarTracker::instance().isBuddyOnline(mAvatarID));
}
getChild<LLAvatarIconCtrl>("avatar_icon")->setValue(mAvatarID);
@ -214,6 +220,12 @@ void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
void LLPanelIMControlPanel::changed(U32 mask)
{
childSetEnabled("add_friend_btn", !LLAvatarActions::isFriend(mAvatarID));
// Disable "Teleport" button if friend is offline
if(LLAvatarActions::isFriend(mAvatarID))
{
childSetEnabled("teleport_btn", LLAvatarTracker::instance().isBuddyOnline(mAvatarID));
}
}
void LLPanelIMControlPanel::nameUpdatedCallback(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group)