Fixed major bug EXT-4336 (Inspectors display groups as people).
Added storing item type (avatar/group) in its value, so that we can choose the proper inspector. --HG-- branch : product-enginemeow-7.2.2
parent
c008e692b5
commit
a2d083f3ce
|
|
@ -74,12 +74,12 @@ void LLNameListCtrl::addNameItem(const LLUUID& agent_id, EAddPosition pos,
|
|||
{
|
||||
//llinfos << "LLNameListCtrl::addNameItem " << agent_id << llendl;
|
||||
|
||||
std::string fullname;
|
||||
gCacheName->getFullName(agent_id, fullname);
|
||||
NameItem item;
|
||||
item.value = agent_id;
|
||||
item.enabled = enabled;
|
||||
item.target = INDIVIDUAL;
|
||||
|
||||
fullname.append(suffix);
|
||||
|
||||
addStringUUIDItem(fullname, agent_id, pos, enabled);
|
||||
addNameItemRow(item, pos);
|
||||
}
|
||||
|
||||
// virtual, public
|
||||
|
|
@ -130,11 +130,12 @@ BOOL LLNameListCtrl::handleDragAndDrop(
|
|||
return handled;
|
||||
}
|
||||
|
||||
void LLNameListCtrl::showAvatarInspector(const LLUUID& avatar_id)
|
||||
void LLNameListCtrl::showInspector(const LLUUID& avatar_id, bool is_group)
|
||||
{
|
||||
LLSD key;
|
||||
key["avatar_id"] = avatar_id;
|
||||
LLFloaterReg::showInstance("inspect_avatar", key);
|
||||
if (is_group)
|
||||
LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", avatar_id));
|
||||
else
|
||||
LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id));
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
@ -147,7 +148,7 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
|
|||
&& column_index == mNameColumnIndex)
|
||||
{
|
||||
// ...this is the column with the avatar name
|
||||
LLUUID avatar_id = hit_item->getValue().asUUID();
|
||||
LLUUID avatar_id = getItemId(hit_item);
|
||||
if (avatar_id.notNull())
|
||||
{
|
||||
// ...valid avatar id
|
||||
|
|
@ -164,9 +165,12 @@ BOOL LLNameListCtrl::handleToolTip(S32 x, S32 y, MASK mask)
|
|||
LLCoordGL pos( sticky_rect.mRight - 16, sticky_rect.mTop );
|
||||
LLPointer<LLUIImage> icon = LLUI::getUIImage("Info_Small");
|
||||
|
||||
// Should we show a group or an avatar inspector?
|
||||
bool is_group = hit_item->getValue()["is_group"].asBoolean();
|
||||
|
||||
LLToolTip::Params params;
|
||||
params.background_visible( false );
|
||||
params.click_callback( boost::bind(&LLNameListCtrl::showAvatarInspector, this, avatar_id) );
|
||||
params.click_callback( boost::bind(&LLNameListCtrl::showInspector, this, avatar_id, is_group) );
|
||||
params.delay_time(0.0f); // spawn instantly on hover
|
||||
params.image( icon );
|
||||
params.message("");
|
||||
|
|
@ -220,9 +224,22 @@ LLScrollListItem* LLNameListCtrl::addElement(const LLSD& element, EAddPosition p
|
|||
}
|
||||
|
||||
|
||||
LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem& name_item, EAddPosition pos)
|
||||
LLScrollListItem* LLNameListCtrl::addNameItemRow(
|
||||
const LLNameListCtrl::NameItem& name_item,
|
||||
EAddPosition pos,
|
||||
std::string& suffix)
|
||||
{
|
||||
LLScrollListItem* item = LLScrollListCtrl::addRow(name_item, pos);
|
||||
LLUUID id = name_item.value().asUUID();
|
||||
LLScrollListItem* item = NULL;
|
||||
|
||||
// Store item type so that we can invoke the proper inspector.
|
||||
// *TODO Vadim: Is there a more proper way of storing additional item data?
|
||||
{
|
||||
LLNameListCtrl::NameItem name_item_(name_item);
|
||||
name_item_.value = LLSD().with("uuid", id).with("is_group", name_item.target() == GROUP);
|
||||
item = LLScrollListCtrl::addRow(name_item_, pos);
|
||||
}
|
||||
|
||||
if (!item) return NULL;
|
||||
|
||||
// use supplied name by default
|
||||
|
|
@ -230,7 +247,7 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem&
|
|||
switch(name_item.target)
|
||||
{
|
||||
case GROUP:
|
||||
gCacheName->getGroupName(name_item.value().asUUID(), fullname);
|
||||
gCacheName->getGroupName(id, fullname);
|
||||
// fullname will be "nobody" if group not found
|
||||
break;
|
||||
case SPECIAL:
|
||||
|
|
@ -239,7 +256,7 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem&
|
|||
case INDIVIDUAL:
|
||||
{
|
||||
std::string name;
|
||||
if (gCacheName->getFullName(name_item.value().asUUID(), name))
|
||||
if (gCacheName->getFullName(id, name))
|
||||
{
|
||||
fullname = name;
|
||||
}
|
||||
|
|
@ -249,6 +266,12 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem&
|
|||
break;
|
||||
}
|
||||
|
||||
// Append optional suffix.
|
||||
if (!suffix.empty())
|
||||
{
|
||||
fullname.append(suffix);
|
||||
}
|
||||
|
||||
LLScrollListCell* cell = item->getColumn(mNameColumnIndex);
|
||||
if (cell)
|
||||
{
|
||||
|
|
@ -270,15 +293,24 @@ LLScrollListItem* LLNameListCtrl::addNameItemRow(const LLNameListCtrl::NameItem&
|
|||
// public
|
||||
void LLNameListCtrl::removeNameItem(const LLUUID& agent_id)
|
||||
{
|
||||
BOOL item_exists = selectByID( agent_id );
|
||||
if(item_exists)
|
||||
// Find the item specified with agent_id.
|
||||
S32 idx = -1;
|
||||
for (item_list::iterator it = getItemList().begin(); it != getItemList().end(); it++)
|
||||
{
|
||||
S32 index = getItemIndex(getFirstSelected());
|
||||
if(index >= 0)
|
||||
LLScrollListItem* item = *it;
|
||||
if (getItemId(item) == agent_id)
|
||||
{
|
||||
deleteSingleItem(index);
|
||||
idx = getItemIndex(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove it.
|
||||
if (idx >= 0)
|
||||
{
|
||||
selectNthItem(idx); // not sure whether this is needed, taken from previous implementation
|
||||
deleteSingleItem(idx);
|
||||
}
|
||||
}
|
||||
|
||||
// public
|
||||
|
|
@ -303,7 +335,7 @@ void LLNameListCtrl::refresh(const LLUUID& id, const std::string& first,
|
|||
for (iter = getItemList().begin(); iter != getItemList().end(); iter++)
|
||||
{
|
||||
LLScrollListItem* item = *iter;
|
||||
if (item->getUUID() == id)
|
||||
if (getItemId(item) == id)
|
||||
{
|
||||
LLScrollListCell* cell = (LLScrollListCell*)item->getColumn(0);
|
||||
cell = item->getColumn(mNameColumnIndex);
|
||||
|
|
@ -343,3 +375,9 @@ void LLNameListCtrl::updateColumns()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
LLUUID LLNameListCtrl::getItemId(LLScrollListItem* item)
|
||||
{
|
||||
return item->getValue()["uuid"].asUUID();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ public:
|
|||
void addNameItem(NameItem& item, EAddPosition pos = ADD_BOTTOM);
|
||||
|
||||
/*virtual*/ LLScrollListItem* addElement(const LLSD& element, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL);
|
||||
LLScrollListItem* addNameItemRow(const NameItem& value, EAddPosition pos = ADD_BOTTOM);
|
||||
LLScrollListItem* addNameItemRow(const NameItem& value, EAddPosition pos = ADD_BOTTOM, std::string& suffix = LLStringUtil::null);
|
||||
|
||||
// Add a user to the list by name. It will be added, the name
|
||||
// requested from the cache, and updated as necessary.
|
||||
|
|
@ -121,7 +121,8 @@ public:
|
|||
|
||||
/*virtual*/ void updateColumns();
|
||||
private:
|
||||
void showAvatarInspector(const LLUUID& avatar_id);
|
||||
void showInspector(const LLUUID& avatar_id, bool is_group);
|
||||
static LLUUID getItemId(LLScrollListItem* item);
|
||||
|
||||
private:
|
||||
S32 mNameColumnIndex;
|
||||
|
|
|
|||
Loading…
Reference in New Issue