fix for normall bug EXT-3245 Icon of group in list in "Group" tab is refreshed only after restarting Viewer

--HG--
branch : product-engine
master
Yuri Chebotarev 2009-12-11 12:24:19 +02:00
parent 791465bab9
commit e699dcb0c9
4 changed files with 24 additions and 1 deletions

View File

@ -225,6 +225,11 @@ mGroupID(LLUUID::null)
}
}
LLGroupListItem::~LLGroupListItem()
{
LLGroupMgr::getInstance()->removeObserver(this);
}
//virtual
BOOL LLGroupListItem::postBuild()
{
@ -277,8 +282,13 @@ void LLGroupListItem::setName(const std::string& name, const std::string& highli
void LLGroupListItem::setGroupID(const LLUUID& group_id)
{
LLGroupMgr::getInstance()->removeObserver(this);
mID = group_id;
mGroupID = group_id;
setActive(group_id == gAgent.getGroupID());
LLGroupMgr::getInstance()->addObserver(this);
}
void LLGroupListItem::setGroupIconID(const LLUUID& group_icon_id)
@ -337,4 +347,11 @@ void LLGroupListItem::onProfileBtnClick()
LLGroupActions::show(mGroupID);
}
void LLGroupListItem::changed(LLGroupChange gc)
{
LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mID);
if(group_data)
setGroupIconID(group_data->mInsigniaID);
}
//EOF

View File

@ -38,6 +38,7 @@
#include "llpanel.h"
#include "llpointer.h"
#include "llstyle.h"
#include "llgroupmgr.h"
/**
* Auto-updating list of agent groups.
@ -80,9 +81,11 @@ class LLIconCtrl;
class LLTextBox;
class LLGroupListItem : public LLPanel
, public LLGroupMgrObserver
{
public:
LLGroupListItem();
~LLGroupListItem();
/*virtual*/ BOOL postBuild();
/*virtual*/ void setValue(const LLSD& value);
void onMouseEnter(S32 x, S32 y, MASK mask);
@ -96,6 +99,7 @@ public:
void setGroupIconID(const LLUUID& group_icon_id);
void setGroupIconVisible(bool visible);
virtual void changed(LLGroupChange gc);
private:
void setActive(bool active);
void onInfoBtnClick();

View File

@ -758,7 +758,8 @@ void LLGroupMgr::clearGroupData(const LLUUID& group_id)
void LLGroupMgr::addObserver(LLGroupMgrObserver* observer)
{
mObservers.insert(std::pair<LLUUID, LLGroupMgrObserver*>(observer->getID(), observer));
if( observer->getID() != LLUUID::null )
mObservers.insert(std::pair<LLUUID, LLGroupMgrObserver*>(observer->getID(), observer));
}
void LLGroupMgr::removeObserver(LLGroupMgrObserver* observer)

View File

@ -45,6 +45,7 @@ class LLGroupMgrObserver
{
public:
LLGroupMgrObserver(const LLUUID& id) : mID(id){};
LLGroupMgrObserver() : mID(LLUUID::null){};
virtual ~LLGroupMgrObserver(){};
virtual void changed(LLGroupChange gc) = 0;
const LLUUID& getID() { return mID; }