MAINT-3710 FIXED List of members is removed from General tab. Title column is added to the list in Members tab. Roles tab is renamed to Roles & Members and Roles sub-tab is default now.

master
Mnikolenko ProductEngine 2014-02-10 12:09:32 +02:00
parent b4448cf2eb
commit 1be85e1a0a
6 changed files with 14 additions and 234 deletions

View File

@ -63,14 +63,12 @@ const S32 DECLINE_TO_STATE = 0;
LLPanelGroupGeneral::LLPanelGroupGeneral()
: LLPanelGroupTab(),
mPendingMemberUpdate(FALSE),
mChanged(FALSE),
mFirstUse(TRUE),
mGroupNameEditor(NULL),
mFounderName(NULL),
mInsignia(NULL),
mEditCharter(NULL),
mListVisibleMembers(NULL),
mCtrlShowInGroupList(NULL),
mComboMature(NULL),
mCtrlOpenEnrollment(NULL),
@ -79,18 +77,13 @@ LLPanelGroupGeneral::LLPanelGroupGeneral()
mCtrlReceiveNotices(NULL),
mCtrlListGroup(NULL),
mActiveTitleLabel(NULL),
mComboActiveTitle(NULL),
mAvatarNameCacheConnection()
mComboActiveTitle(NULL)
{
}
LLPanelGroupGeneral::~LLPanelGroupGeneral()
{
if (mAvatarNameCacheConnection.connected())
{
mAvatarNameCacheConnection.disconnect();
}
}
BOOL LLPanelGroupGeneral::postBuild()
@ -105,17 +98,6 @@ BOOL LLPanelGroupGeneral::postBuild()
mEditCharter->setFocusChangedCallback(boost::bind(onFocusEdit, _1, this));
}
mListVisibleMembers = getChild<LLNameListCtrl>("visible_members", recurse);
if (mListVisibleMembers)
{
mListVisibleMembers->setDoubleClickCallback(openProfile, this);
mListVisibleMembers->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
mListVisibleMembers->setSortCallback(boost::bind(&LLPanelGroupGeneral::sortMembersList,this,_1,_2,_3));
}
// Options
mCtrlShowInGroupList = getChild<LLCheckBoxCtrl>("show_in_group_list", recurse);
if (mCtrlShowInGroupList)
@ -290,21 +272,6 @@ void LLPanelGroupGeneral::onClickInfo(void *userdata)
}
// static
void LLPanelGroupGeneral::openProfile(void* data)
{
LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data;
if (self && self->mListVisibleMembers)
{
LLScrollListItem* selected = self->mListVisibleMembers->getFirstSelected();
if (selected)
{
LLAvatarActions::showProfile(selected->getUUID());
}
}
}
bool LLPanelGroupGeneral::needsApply(std::string& mesg)
{
updateChanged();
@ -336,11 +303,6 @@ void LLPanelGroupGeneral::activate()
void LLPanelGroupGeneral::draw()
{
LLPanelGroupTab::draw();
if (mPendingMemberUpdate)
{
updateMembers();
}
}
bool LLPanelGroupGeneral::apply(std::string& mesg)
@ -522,10 +484,6 @@ bool LLPanelGroupGeneral::createGroupCallback(const LLSD& notification, const LL
return false;
}
static F32 sSDTime = 0.0f;
static F32 sElementTime = 0.0f;
static F32 sAllTime = 0.0f;
// virtual
void LLPanelGroupGeneral::update(LLGroupChange gc)
{
@ -666,132 +624,10 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
{
mEditCharter->setText(gdatap->mCharter);
}
if (mListVisibleMembers)
{
mListVisibleMembers->deleteAllItems();
if (gdatap->isMemberDataComplete())
{
mMemberProgress = gdatap->mMembers.begin();
mPendingMemberUpdate = TRUE;
sSDTime = 0.0f;
sElementTime = 0.0f;
sAllTime = 0.0f;
}
else
{
std::stringstream pending;
pending << "Retrieving member list (" << gdatap->mMembers.size() << "\\" << gdatap->mMemberCount << ")";
LLSD row;
row["columns"][0]["value"] = pending.str();
row["columns"][0]["column"] = "name";
mListVisibleMembers->setEnabled(FALSE);
mListVisibleMembers->addElement(row);
}
}
resetDirty();
}
void LLPanelGroupGeneral::updateMembers()
{
mPendingMemberUpdate = FALSE;
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
if (!mListVisibleMembers
|| !gdatap
|| !gdatap->isMemberDataComplete()
|| gdatap->mMembers.empty())
{
return;
}
LLTimer update_time;
update_time.setTimerExpirySec(UPDATE_MEMBERS_SECONDS_PER_FRAME);
LLAvatarName av_name;
for( ; mMemberProgress != gdatap->mMembers.end() && !update_time.hasExpired();
++mMemberProgress)
{
LLGroupMemberData* member = mMemberProgress->second;
if (!member)
{
continue;
}
if (LLAvatarNameCache::get(mMemberProgress->first, &av_name))
{
addMember(mMemberProgress->second);
}
else
{
// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
// *TODO : Use a callback per member, not for the panel group.
if (mAvatarNameCacheConnection.connected())
{
mAvatarNameCacheConnection.disconnect();
}
mAvatarNameCacheConnection = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupGeneral::onNameCache, this, gdatap->getMemberVersion(), member, _2));
}
}
if (mMemberProgress == gdatap->mMembers.end())
{
lldebugs << " member list completed." << llendl;
mListVisibleMembers->setEnabled(TRUE);
}
else
{
mPendingMemberUpdate = TRUE;
mListVisibleMembers->setEnabled(FALSE);
}
}
void LLPanelGroupGeneral::addMember(LLGroupMemberData* member)
{
LLNameListCtrl::NameItem item_params;
item_params.value = member->getID();
LLScrollListCell::Params column;
item_params.columns.add().column("name").font.name("SANSSERIF_SMALL");
item_params.columns.add().column("title").value(member->getTitle()).font.name("SANSSERIF_SMALL");
item_params.columns.add().column("status").value(member->getOnlineStatus()).font.name("SANSSERIF_SMALL");
LLScrollListItem* member_row = mListVisibleMembers->addNameItemRow(item_params);
if ( member->isOwner() )
{
LLScrollListText* name_textp = dynamic_cast<LLScrollListText*>(member_row->getColumn(0));
if (name_textp)
name_textp->setFontStyle(LLFontGL::BOLD);
}
}
void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
{
mAvatarNameCacheConnection.disconnect();
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
if (!gdatap
|| !gdatap->isMemberDataComplete()
|| gdatap->getMemberVersion() != update_id)
{
// Stale data
return;
}
addMember(member);
}
void LLPanelGroupGeneral::updateChanged()
{
// List all the controls we want to check for changes...
@ -867,17 +703,6 @@ void LLPanelGroupGeneral::reset()
mEditCharter->setText(empty_str);
mGroupNameEditor->setText(empty_str);
}
{
LLSD row;
row["columns"][0]["value"] = "no members yet";
row["columns"][0]["column"] = "name";
mListVisibleMembers->deleteAllItems();
mListVisibleMembers->setEnabled(FALSE);
mListVisibleMembers->addElement(row);
}
{
mComboMature->setEnabled(true);
@ -964,18 +789,3 @@ void LLPanelGroupGeneral::setGroupID(const LLUUID& id)
activate();
}
S32 LLPanelGroupGeneral::sortMembersList(S32 col_idx,const LLScrollListItem* i1,const LLScrollListItem* i2)
{
const LLScrollListCell *cell1 = i1->getColumn(col_idx);
const LLScrollListCell *cell2 = i2->getColumn(col_idx);
if(col_idx == 2)
{
if(LLStringUtil::compareDict(cell1->getValue().asString(),"Online") == 0 )
return 1;
if(LLStringUtil::compareDict(cell2->getValue().asString(),"Online") == 0 )
return -1;
}
return LLStringUtil::compareDict(cell1->getValue().asString(), cell2->getValue().asString());
}

View File

@ -62,8 +62,6 @@ public:
virtual void setGroupID(const LLUUID& id);
virtual void setupCtrls (LLPanel* parent);
void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name);
private:
void reset();
@ -75,18 +73,12 @@ private:
static void onCommitEnrollment(LLUICtrl* ctrl, void* data);
static void onClickInfo(void* userdata);
static void onReceiveNotices(LLUICtrl* ctrl, void* data);
static void openProfile(void* data);
S32 sortMembersList(S32,const LLScrollListItem*,const LLScrollListItem*);
void addMember(LLGroupMemberData* member);
static bool joinDlgCB(const LLSD& notification, const LLSD& response);
void updateMembers();
void updateChanged();
bool confirmMatureApply(const LLSD& notification, const LLSD& response);
BOOL mPendingMemberUpdate;
BOOL mChanged;
BOOL mFirstUse;
std::string mIncompleteMemberDataStr;
@ -97,8 +89,6 @@ private:
LLTextureCtrl *mInsignia;
LLTextEditor *mEditCharter;
LLNameListCtrl *mListVisibleMembers;
// Options (include any updates in updateChanged)
LLCheckBoxCtrl *mCtrlShowInGroupList;
LLCheckBoxCtrl *mCtrlOpenEnrollment;
@ -109,9 +99,6 @@ private:
LLTextBox *mActiveTitleLabel;
LLComboBox *mComboActiveTitle;
LLComboBox *mComboMature;
LLGroupMgrGroupData::member_list_t::iterator mMemberProgress;
boost::signals2::connection mAvatarNameCacheConnection;
};
#endif

View File

@ -1636,6 +1636,9 @@ void LLPanelGroupMembersSubTab::addMemberToList(LLGroupMemberData* data)
item_params.columns.add().column("online").value(data->getOnlineStatus())
.font.name("SANSSERIF_SMALL").style("NORMAL");
item_params.columns.add().column("title").value(data->getTitle()).font.name("SANSSERIF_SMALL").style("NORMAL");;
mMembersList->addNameItemRow(item_params);
mHasMatch = TRUE;
@ -2658,7 +2661,7 @@ void LLPanelGroupRoles::setGroupID(const LLUUID& id)
button->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_INVITE));
if(mSubTabContainer)
mSubTabContainer->selectTab(0);
mSubTabContainer->selectTab(1);
activate();
}

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
label="General"
height="604"
height="420"
width="304"
class="panel_group_general"
name="general_tab">
@ -101,31 +101,7 @@ Hover your mouse over the options for more help.
text_readonly_color="White"
word_wrap="true">
Group Charter
</text_editor>
<name_list
column_padding="0"
draw_heading="true"
follows="left|top|right"
heading_height="23"
height="160"
layout="topleft"
left="0"
name="visible_members"
short_names="false"
top_pad="2">
<name_list.columns
label="Member"
name="name"
relative_width="0.4" />
<name_list.columns
label="Title"
name="title"
relative_width="0.4" />
<name_list.columns
label="Status"
name="status"
relative_width="0.2" />
</name_list>
</text_editor>
<text
follows="left|top|right"
type="string"

View File

@ -131,7 +131,7 @@ background_visible="true"
expanded="false"
layout="topleft"
name="group_roles_tab"
title="Roles"
title="Roles &amp; Members"
fit_panel="false">
<panel
border="false"

View File

@ -94,11 +94,15 @@ clicking on their names.
<name_list.columns
label="Donation"
name="donated"
relative_width="0.25" />
relative_width="0.2" />
<name_list.columns
label="Status"
name="online"
relative_width="0.14" />
relative_width="0.18" />
<name_list.columns
label="Title"
name="title"
relative_width="0.18" />
</name_list>
<button
height="23"