summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelgrouproles.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llpanelgrouproles.cpp')
-rw-r--r--indra/newview/llpanelgrouproles.cpp5146
1 files changed, 2573 insertions, 2573 deletions
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index e3d75d5604..89dcd9182e 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -5,21 +5,21 @@
* $LicenseInfo:firstyear=2006&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
- *
+ *
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
+ *
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -59,55 +59,55 @@
static LLPanelInjector<LLPanelGroupRoles> t_panel_group_roles("panel_group_roles");
bool agentCanRemoveFromRole(const LLUUID& group_id,
- const LLUUID& role_id)
+ const LLUUID& role_id)
{
- return gAgent.hasPowerInGroup(group_id, GP_ROLE_REMOVE_MEMBER);
+ return gAgent.hasPowerInGroup(group_id, GP_ROLE_REMOVE_MEMBER);
}
bool agentCanAddToRole(const LLUUID& group_id,
- const LLUUID& role_id)
-{
- if (gAgent.isGodlike())
- return true;
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(group_id);
- if (!gdatap)
- {
- LL_WARNS() << "agentCanAddToRole "
- << "-- No group data!" << LL_ENDL;
- return false;
- }
-
- //make sure the agent is in the group
- LLGroupMgrGroupData::member_list_t::iterator mi = gdatap->mMembers.find(gAgent.getID());
- if (mi == gdatap->mMembers.end())
- {
- return false;
- }
-
- LLGroupMemberData* member_data = (*mi).second;
-
- // Owners can add to any role.
- if ( member_data->isInRole(gdatap->mOwnerRole) )
- {
- return true;
- }
-
- // 'Limited assign members' can add to roles the user is in.
- if ( gAgent.hasPowerInGroup(group_id, GP_ROLE_ASSIGN_MEMBER_LIMITED) &&
- member_data->isInRole(role_id) )
- {
- return true;
- }
-
- // 'assign members' can add to non-owner roles.
- if ( gAgent.hasPowerInGroup(group_id, GP_ROLE_ASSIGN_MEMBER) &&
- role_id != gdatap->mOwnerRole )
- {
- return true;
- }
-
- return false;
+ const LLUUID& role_id)
+{
+ if (gAgent.isGodlike())
+ return true;
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(group_id);
+ if (!gdatap)
+ {
+ LL_WARNS() << "agentCanAddToRole "
+ << "-- No group data!" << LL_ENDL;
+ return false;
+ }
+
+ //make sure the agent is in the group
+ LLGroupMgrGroupData::member_list_t::iterator mi = gdatap->mMembers.find(gAgent.getID());
+ if (mi == gdatap->mMembers.end())
+ {
+ return false;
+ }
+
+ LLGroupMemberData* member_data = (*mi).second;
+
+ // Owners can add to any role.
+ if ( member_data->isInRole(gdatap->mOwnerRole) )
+ {
+ return true;
+ }
+
+ // 'Limited assign members' can add to roles the user is in.
+ if ( gAgent.hasPowerInGroup(group_id, GP_ROLE_ASSIGN_MEMBER_LIMITED) &&
+ member_data->isInRole(role_id) )
+ {
+ return true;
+ }
+
+ // 'assign members' can add to non-owner roles.
+ if ( gAgent.hasPowerInGroup(group_id, GP_ROLE_ASSIGN_MEMBER) &&
+ role_id != gdatap->mOwnerRole )
+ {
+ return true;
+ }
+
+ return false;
}
@@ -115,11 +115,11 @@ bool agentCanAddToRole(const LLUUID& group_id,
// static
LLPanelGroupRoles::LLPanelGroupRoles()
-: LLPanelGroupTab(),
- mCurrentTab(NULL),
- mRequestedTab( NULL ),
- mSubTabContainer( NULL ),
- mFirstUse( TRUE )
+: LLPanelGroupTab(),
+ mCurrentTab(NULL),
+ mRequestedTab( NULL ),
+ mSubTabContainer( NULL ),
+ mFirstUse( TRUE )
{
}
@@ -129,309 +129,309 @@ LLPanelGroupRoles::~LLPanelGroupRoles()
BOOL LLPanelGroupRoles::postBuild()
{
- LL_DEBUGS() << "LLPanelGroupRoles::postBuild()" << LL_ENDL;
+ LL_DEBUGS() << "LLPanelGroupRoles::postBuild()" << LL_ENDL;
- mSubTabContainer = getChild<LLTabContainer>("roles_tab_container");
+ mSubTabContainer = getChild<LLTabContainer>("roles_tab_container");
- if (!mSubTabContainer) return FALSE;
+ if (!mSubTabContainer) return FALSE;
- // Hook up each sub-tabs callback and widgets.
- for (S32 i = 0; i < mSubTabContainer->getTabCount(); ++i)
- {
- LLPanel* panel = mSubTabContainer->getPanelByIndex(i);
- LLPanelGroupSubTab* subtabp = dynamic_cast<LLPanelGroupSubTab*>(panel);
- if (!subtabp)
- {
- LL_WARNS() << "Invalid subtab panel: " << panel->getName() << LL_ENDL;
- return FALSE;
- }
+ // Hook up each sub-tabs callback and widgets.
+ for (S32 i = 0; i < mSubTabContainer->getTabCount(); ++i)
+ {
+ LLPanel* panel = mSubTabContainer->getPanelByIndex(i);
+ LLPanelGroupSubTab* subtabp = dynamic_cast<LLPanelGroupSubTab*>(panel);
+ if (!subtabp)
+ {
+ LL_WARNS() << "Invalid subtab panel: " << panel->getName() << LL_ENDL;
+ return FALSE;
+ }
- // Hand the subtab a pointer to this LLPanelGroupRoles, so that it can
- // look around for the widgets it is interested in.
- if (!subtabp->postBuildSubTab(this))
- return FALSE;
+ // Hand the subtab a pointer to this LLPanelGroupRoles, so that it can
+ // look around for the widgets it is interested in.
+ if (!subtabp->postBuildSubTab(this))
+ return FALSE;
- //subtabp->addObserver(this);
- }
- // Add click callbacks to tab switching.
- mSubTabContainer->setValidateBeforeCommit(boost::bind(&LLPanelGroupRoles::handleSubTabSwitch, this, _1));
+ //subtabp->addObserver(this);
+ }
+ // Add click callbacks to tab switching.
+ mSubTabContainer->setValidateBeforeCommit(boost::bind(&LLPanelGroupRoles::handleSubTabSwitch, this, _1));
- // Set the current tab to whatever is currently being shown.
- mCurrentTab = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
- if (!mCurrentTab)
- {
- // Need to select a tab.
- mSubTabContainer->selectFirstTab();
- mCurrentTab = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
- }
+ // Set the current tab to whatever is currently being shown.
+ mCurrentTab = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
+ if (!mCurrentTab)
+ {
+ // Need to select a tab.
+ mSubTabContainer->selectFirstTab();
+ mCurrentTab = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
+ }
- if (!mCurrentTab) return FALSE;
+ if (!mCurrentTab) return FALSE;
- // Act as though this tab was just activated.
- mCurrentTab->activate();
+ // Act as though this tab was just activated.
+ mCurrentTab->activate();
- // Read apply text from the xml file.
- mDefaultNeedsApplyMesg = getString("default_needs_apply_text");
- mWantApplyMesg = getString("want_apply_text");
+ // Read apply text from the xml file.
+ mDefaultNeedsApplyMesg = getString("default_needs_apply_text");
+ mWantApplyMesg = getString("want_apply_text");
- return LLPanelGroupTab::postBuild();
+ return LLPanelGroupTab::postBuild();
}
BOOL LLPanelGroupRoles::isVisibleByAgent(LLAgent* agentp)
{
- /* This power was removed to make group roles simpler
- return agentp->hasPowerInGroup(mGroupID,
- GP_ROLE_CREATE |
- GP_ROLE_DELETE |
- GP_ROLE_PROPERTIES |
- GP_ROLE_VIEW |
- GP_ROLE_ASSIGN_MEMBER |
- GP_ROLE_REMOVE_MEMBER |
- GP_ROLE_CHANGE_ACTIONS |
- GP_MEMBER_INVITE |
- GP_MEMBER_EJECT |
- GP_MEMBER_OPTIONS );
- */
- return mAllowEdit && agentp->isInGroup(mGroupID);
-
+ /* This power was removed to make group roles simpler
+ return agentp->hasPowerInGroup(mGroupID,
+ GP_ROLE_CREATE |
+ GP_ROLE_DELETE |
+ GP_ROLE_PROPERTIES |
+ GP_ROLE_VIEW |
+ GP_ROLE_ASSIGN_MEMBER |
+ GP_ROLE_REMOVE_MEMBER |
+ GP_ROLE_CHANGE_ACTIONS |
+ GP_MEMBER_INVITE |
+ GP_MEMBER_EJECT |
+ GP_MEMBER_OPTIONS );
+ */
+ return mAllowEdit && agentp->isInGroup(mGroupID);
+
}
bool LLPanelGroupRoles::handleSubTabSwitch(const LLSD& data)
{
- std::string panel_name = data.asString();
-
- if(mRequestedTab != NULL)//we already have tab change request
- {
- return false;
- }
-
- mRequestedTab = static_cast<LLPanelGroupTab*>(mSubTabContainer->getPanelByName(panel_name));
-
- std::string mesg;
- if (mCurrentTab && mCurrentTab->needsApply(mesg))
- {
- // If no message was provided, give a generic one.
- if (mesg.empty())
- {
- mesg = mDefaultNeedsApplyMesg;
- }
- // Create a notify box, telling the user about the unapplied tab.
- LLSD args;
- args["NEEDS_APPLY_MESSAGE"] = mesg;
- args["WANT_APPLY_MESSAGE"] = mWantApplyMesg;
- LLNotificationsUtil::add("PanelGroupApply", args, LLSD(),
- boost::bind(&LLPanelGroupRoles::handleNotifyCallback, this, _1, _2));
- mHasModal = TRUE;
-
- // Returning FALSE will block a close action from finishing until
- // we get a response back from the user.
- return false;
- }
-
- transitionToTab();
- return true;
+ std::string panel_name = data.asString();
+
+ if(mRequestedTab != NULL)//we already have tab change request
+ {
+ return false;
+ }
+
+ mRequestedTab = static_cast<LLPanelGroupTab*>(mSubTabContainer->getPanelByName(panel_name));
+
+ std::string mesg;
+ if (mCurrentTab && mCurrentTab->needsApply(mesg))
+ {
+ // If no message was provided, give a generic one.
+ if (mesg.empty())
+ {
+ mesg = mDefaultNeedsApplyMesg;
+ }
+ // Create a notify box, telling the user about the unapplied tab.
+ LLSD args;
+ args["NEEDS_APPLY_MESSAGE"] = mesg;
+ args["WANT_APPLY_MESSAGE"] = mWantApplyMesg;
+ LLNotificationsUtil::add("PanelGroupApply", args, LLSD(),
+ boost::bind(&LLPanelGroupRoles::handleNotifyCallback, this, _1, _2));
+ mHasModal = TRUE;
+
+ // Returning FALSE will block a close action from finishing until
+ // we get a response back from the user.
+ return false;
+ }
+
+ transitionToTab();
+ return true;
}
void LLPanelGroupRoles::transitionToTab()
{
- // Tell the current panel that it is being deactivated.
- if (mCurrentTab)
- {
- mCurrentTab->deactivate();
- }
-
- // Tell the new panel that it is being activated.
- if (mRequestedTab)
- {
- // This is now the current tab;
- mCurrentTab = mRequestedTab;
- mCurrentTab->activate();
- mRequestedTab = 0;
- }
+ // Tell the current panel that it is being deactivated.
+ if (mCurrentTab)
+ {
+ mCurrentTab->deactivate();
+ }
+
+ // Tell the new panel that it is being activated.
+ if (mRequestedTab)
+ {
+ // This is now the current tab;
+ mCurrentTab = mRequestedTab;
+ mCurrentTab->activate();
+ mRequestedTab = 0;
+ }
}
bool LLPanelGroupRoles::handleNotifyCallback(const LLSD& notification, const LLSD& response)
{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- mHasModal = FALSE;
- LLPanelGroupTab* transition_tab = mRequestedTab;
- switch (option)
- {
- case 0: // "Apply Changes"
- {
- // Try to apply changes, and switch to the requested tab.
- std::string apply_mesg;
- if ( !apply( apply_mesg ) )
- {
- // There was a problem doing the apply.
- if ( !apply_mesg.empty() )
- {
- mHasModal = TRUE;
- LLSD args;
- args["MESSAGE"] = apply_mesg;
- LLNotificationsUtil::add("GenericAlert", args, LLSD(), boost::bind(&LLPanelGroupRoles::onModalClose, this, _1, _2));
- }
- // Skip switching tabs.
- break;
- }
- transitionToTab();
- mSubTabContainer->selectTabPanel( transition_tab );
-
- break;
- }
- case 1: // "Ignore Changes"
- // Switch to the requested panel without applying changes
- cancel();
- transitionToTab();
- mSubTabContainer->selectTabPanel( transition_tab );
- break;
- case 2: // "Cancel"
- default:
- mRequestedTab = NULL;
- // Do nothing. The user is canceling the action.
- break;
- }
- return false;
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ mHasModal = FALSE;
+ LLPanelGroupTab* transition_tab = mRequestedTab;
+ switch (option)
+ {
+ case 0: // "Apply Changes"
+ {
+ // Try to apply changes, and switch to the requested tab.
+ std::string apply_mesg;
+ if ( !apply( apply_mesg ) )
+ {
+ // There was a problem doing the apply.
+ if ( !apply_mesg.empty() )
+ {
+ mHasModal = TRUE;
+ LLSD args;
+ args["MESSAGE"] = apply_mesg;
+ LLNotificationsUtil::add("GenericAlert", args, LLSD(), boost::bind(&LLPanelGroupRoles::onModalClose, this, _1, _2));
+ }
+ // Skip switching tabs.
+ break;
+ }
+ transitionToTab();
+ mSubTabContainer->selectTabPanel( transition_tab );
+
+ break;
+ }
+ case 1: // "Ignore Changes"
+ // Switch to the requested panel without applying changes
+ cancel();
+ transitionToTab();
+ mSubTabContainer->selectTabPanel( transition_tab );
+ break;
+ case 2: // "Cancel"
+ default:
+ mRequestedTab = NULL;
+ // Do nothing. The user is canceling the action.
+ break;
+ }
+ return false;
}
bool LLPanelGroupRoles::onModalClose(const LLSD& notification, const LLSD& response)
{
- mHasModal = FALSE;
- return false;
+ mHasModal = FALSE;
+ return false;
}
bool LLPanelGroupRoles::apply(std::string& mesg)
{
- // Pass this along to the currently visible sub tab.
- if (!mSubTabContainer) return false;
+ // Pass this along to the currently visible sub tab.
+ if (!mSubTabContainer) return false;
- LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
- if (!panelp) return false;
-
- // Ignore the needs apply message.
- std::string ignore_mesg;
- if ( !panelp->needsApply(ignore_mesg) )
- {
- // We don't need to apply anything.
- // We're done.
- return true;
- }
+ LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
+ if (!panelp) return false;
- // Try to do the actual apply.
- return panelp->apply(mesg);
+ // Ignore the needs apply message.
+ std::string ignore_mesg;
+ if ( !panelp->needsApply(ignore_mesg) )
+ {
+ // We don't need to apply anything.
+ // We're done.
+ return true;
+ }
+
+ // Try to do the actual apply.
+ return panelp->apply(mesg);
}
void LLPanelGroupRoles::cancel()
{
- // Pass this along to the currently visible sub tab.
- if (!mSubTabContainer) return;
+ // Pass this along to the currently visible sub tab.
+ if (!mSubTabContainer) return;
- LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
- if (!panelp) return;
+ LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
+ if (!panelp) return;
- panelp->cancel();
+ panelp->cancel();
}
void LLPanelGroupRoles::update(LLGroupChange gc)
{
- if (mGroupID.isNull()) return;
-
- LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
- if (panelp)
- {
- panelp->update(gc);
- }
- else
- {
- LL_WARNS() << "LLPanelGroupRoles::update() -- No subtab to update!" << LL_ENDL;
- }
-
+ if (mGroupID.isNull()) return;
+
+ LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
+ if (panelp)
+ {
+ panelp->update(gc);
+ }
+ else
+ {
+ LL_WARNS() << "LLPanelGroupRoles::update() -- No subtab to update!" << LL_ENDL;
+ }
+
}
void LLPanelGroupRoles::activate()
{
- if (!gAgent.isInGroup(mGroupID)) return;
+ if (!gAgent.isInGroup(mGroupID)) return;
- // Start requesting member and role data if needed.
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ // Start requesting member and role data if needed.
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap || !gdatap->isRoleDataComplete() )
- {
- // Mildly hackish - clear all pending changes
- cancel();
+ if (!gdatap || !gdatap->isRoleDataComplete() )
+ {
+ // Mildly hackish - clear all pending changes
+ cancel();
- LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);
- }
-
- // Need this to get base group member powers
- if (!gdatap || !gdatap->isGroupPropertiesDataComplete() )
- {
- LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mGroupID);
- }
+ LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);
+ }
- mFirstUse = FALSE;
+ // Need this to get base group member powers
+ if (!gdatap || !gdatap->isGroupPropertiesDataComplete() )
+ {
+ LLGroupMgr::getInstance()->sendGroupPropertiesRequest(mGroupID);
+ }
- LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
- if (panelp) panelp->activate();
+ mFirstUse = FALSE;
+
+ LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
+ if (panelp) panelp->activate();
}
void LLPanelGroupRoles::deactivate()
{
- LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
- if (panelp) panelp->deactivate();
+ LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
+ if (panelp) panelp->deactivate();
}
bool LLPanelGroupRoles::needsApply(std::string& mesg)
{
- LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
- if (!panelp) return false;
-
- return panelp->needsApply(mesg);
+ LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
+ if (!panelp) return false;
+
+ return panelp->needsApply(mesg);
}
BOOL LLPanelGroupRoles::hasModal()
{
- if (mHasModal) return TRUE;
+ if (mHasModal) return TRUE;
- LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
- if (!panelp) return FALSE;
-
- return panelp->hasModal();
+ LLPanelGroupTab* panelp = (LLPanelGroupTab*) mSubTabContainer->getCurrentPanel();
+ if (!panelp) return FALSE;
+
+ return panelp->hasModal();
}
void LLPanelGroupRoles::setGroupID(const LLUUID& id)
{
- LLPanelGroupTab::setGroupID(id);
+ LLPanelGroupTab::setGroupID(id);
- LLPanelGroupMembersSubTab* group_members_tab = findChild<LLPanelGroupMembersSubTab>("members_sub_tab");
- LLPanelGroupRolesSubTab* group_roles_tab = findChild<LLPanelGroupRolesSubTab>("roles_sub_tab");
- LLPanelGroupActionsSubTab* group_actions_tab = findChild<LLPanelGroupActionsSubTab>("actions_sub_tab");
- LLPanelGroupBanListSubTab* group_ban_tab = findChild<LLPanelGroupBanListSubTab>("banlist_sub_tab");
+ LLPanelGroupMembersSubTab* group_members_tab = findChild<LLPanelGroupMembersSubTab>("members_sub_tab");
+ LLPanelGroupRolesSubTab* group_roles_tab = findChild<LLPanelGroupRolesSubTab>("roles_sub_tab");
+ LLPanelGroupActionsSubTab* group_actions_tab = findChild<LLPanelGroupActionsSubTab>("actions_sub_tab");
+ LLPanelGroupBanListSubTab* group_ban_tab = findChild<LLPanelGroupBanListSubTab>("banlist_sub_tab");
- if(group_members_tab) group_members_tab->setGroupID(id);
- if(group_roles_tab) group_roles_tab->setGroupID(id);
- if(group_actions_tab) group_actions_tab->setGroupID(id);
- if(group_ban_tab) group_ban_tab->setGroupID(id);
+ if(group_members_tab) group_members_tab->setGroupID(id);
+ if(group_roles_tab) group_roles_tab->setGroupID(id);
+ if(group_actions_tab) group_actions_tab->setGroupID(id);
+ if(group_ban_tab) group_ban_tab->setGroupID(id);
- LLButton* button = getChild<LLButton>("member_invite");
- if ( button )
- button->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_INVITE));
+ LLButton* button = getChild<LLButton>("member_invite");
+ if ( button )
+ button->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_INVITE));
- if(mSubTabContainer)
- mSubTabContainer->selectTab(1);
- group_roles_tab->mFirstOpen = TRUE;
- activate();
+ if(mSubTabContainer)
+ mSubTabContainer->selectTab(1);
+ group_roles_tab->mFirstOpen = TRUE;
+ activate();
}
// LLPanelGroupSubTab ////////////////////////////////////////////////////
LLPanelGroupSubTab::LLPanelGroupSubTab()
-: LLPanelGroupTab(),
- mHeader(NULL),
- mFooter(NULL),
- mActivated(false),
- mHasGroupBanPower(false),
- mSearchEditor(NULL)
+: LLPanelGroupTab(),
+ mHeader(NULL),
+ mFooter(NULL),
+ mActivated(false),
+ mHasGroupBanPower(false),
+ mSearchEditor(NULL)
{
}
@@ -439,339 +439,339 @@ LLPanelGroupSubTab::~LLPanelGroupSubTab()
{
}
-BOOL LLPanelGroupSubTab::postBuildSubTab(LLView* root)
-{
- // Get icons for later use.
- mActionIcons.clear();
+BOOL LLPanelGroupSubTab::postBuildSubTab(LLView* root)
+{
+ // Get icons for later use.
+ mActionIcons.clear();
- if (hasString("power_folder_icon"))
- {
- mActionIcons["folder"] = getString("power_folder_icon");
- }
+ if (hasString("power_folder_icon"))
+ {
+ mActionIcons["folder"] = getString("power_folder_icon");
+ }
- if (hasString("power_all_have_icon"))
- {
- mActionIcons["full"] = getString("power_all_have_icon");
- }
+ if (hasString("power_all_have_icon"))
+ {
+ mActionIcons["full"] = getString("power_all_have_icon");
+ }
- if (hasString("power_partial_icon"))
- {
- mActionIcons["partial"] = getString("power_partial_icon");
- }
- return TRUE;
+ if (hasString("power_partial_icon"))
+ {
+ mActionIcons["partial"] = getString("power_partial_icon");
+ }
+ return TRUE;
}
BOOL LLPanelGroupSubTab::postBuild()
{
- // Hook up the search widgets.
- bool recurse = true;
+ // Hook up the search widgets.
+ bool recurse = true;
- mSearchEditor = findChild<LLFilterEditor>("filter_input", recurse);
- if (mSearchEditor) // SubTab doesn't implement this, only some of derived classes
- {
- mSearchEditor->setCommitCallback(boost::bind(&LLPanelGroupSubTab::setSearchFilter, this, _2));
- }
+ mSearchEditor = findChild<LLFilterEditor>("filter_input", recurse);
+ if (mSearchEditor) // SubTab doesn't implement this, only some of derived classes
+ {
+ mSearchEditor->setCommitCallback(boost::bind(&LLPanelGroupSubTab::setSearchFilter, this, _2));
+ }
- return LLPanelGroupTab::postBuild();
+ return LLPanelGroupTab::postBuild();
}
void LLPanelGroupSubTab::setGroupID(const LLUUID& id)
{
- LLPanelGroupTab::setGroupID(id);
- if(mSearchEditor)
- {
- mSearchEditor->clear();
- setSearchFilter("");
- }
+ LLPanelGroupTab::setGroupID(id);
+ if(mSearchEditor)
+ {
+ mSearchEditor->clear();
+ setSearchFilter("");
+ }
- mActivated = false;
+ mActivated = false;
}
void LLPanelGroupSubTab::setSearchFilter(const std::string& filter)
{
- if(mSearchFilter == filter)
- return;
- mSearchFilter = filter;
- LLStringUtil::toLower(mSearchFilter);
- update(GC_ALL);
- onFilterChanged();
+ if(mSearchFilter == filter)
+ return;
+ mSearchFilter = filter;
+ LLStringUtil::toLower(mSearchFilter);
+ update(GC_ALL);
+ onFilterChanged();
}
void LLPanelGroupSubTab::activate()
{
- setOthersVisible(TRUE);
+ setOthersVisible(TRUE);
}
void LLPanelGroupSubTab::deactivate()
{
- setOthersVisible(FALSE);
+ setOthersVisible(FALSE);
}
void LLPanelGroupSubTab::setOthersVisible(BOOL b)
{
- if (mHeader)
- {
- mHeader->setVisible( b );
- }
+ if (mHeader)
+ {
+ mHeader->setVisible( b );
+ }
- if (mFooter)
- {
- mFooter->setVisible( b );
- }
+ if (mFooter)
+ {
+ mFooter->setVisible( b );
+ }
}
bool LLPanelGroupSubTab::matchesActionSearchFilter(std::string action)
{
- // If the search filter is empty, everything passes.
- if (mSearchFilter.empty()) return true;
-
- LLStringUtil::toLower(action);
- std::string::size_type match = action.find(mSearchFilter);
-
- if (std::string::npos == match)
- {
- // not found
- return false;
- }
- else
- {
- return true;
- }
-}
-
-void LLPanelGroupSubTab::buildActionsList(LLScrollListCtrl* ctrl,
- U64 allowed_by_some,
- U64 allowed_by_all,
- LLUICtrl::commit_callback_t commit_callback,
- BOOL show_all,
- BOOL filter,
- BOOL is_owner_role)
-{
- if (LLGroupMgr::getInstance()->mRoleActionSets.empty())
- {
- LL_WARNS() << "Can't build action list - no actions found." << LL_ENDL;
- return;
- }
-
- mHasGroupBanPower = false;
-
- std::vector<LLRoleActionSet*>::iterator ras_it = LLGroupMgr::getInstance()->mRoleActionSets.begin();
- std::vector<LLRoleActionSet*>::iterator ras_end = LLGroupMgr::getInstance()->mRoleActionSets.end();
- for ( ; ras_it != ras_end; ++ras_it)
- {
- buildActionCategory(ctrl,
- allowed_by_some,
- allowed_by_all,
- (*ras_it),
- commit_callback,
- show_all,
- filter,
- is_owner_role);
- }
+ // If the search filter is empty, everything passes.
+ if (mSearchFilter.empty()) return true;
+
+ LLStringUtil::toLower(action);
+ std::string::size_type match = action.find(mSearchFilter);
+
+ if (std::string::npos == match)
+ {
+ // not found
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+void LLPanelGroupSubTab::buildActionsList(LLScrollListCtrl* ctrl,
+ U64 allowed_by_some,
+ U64 allowed_by_all,
+ LLUICtrl::commit_callback_t commit_callback,
+ BOOL show_all,
+ BOOL filter,
+ BOOL is_owner_role)
+{
+ if (LLGroupMgr::getInstance()->mRoleActionSets.empty())
+ {
+ LL_WARNS() << "Can't build action list - no actions found." << LL_ENDL;
+ return;
+ }
+
+ mHasGroupBanPower = false;
+
+ std::vector<LLRoleActionSet*>::iterator ras_it = LLGroupMgr::getInstance()->mRoleActionSets.begin();
+ std::vector<LLRoleActionSet*>::iterator ras_end = LLGroupMgr::getInstance()->mRoleActionSets.end();
+ for ( ; ras_it != ras_end; ++ras_it)
+ {
+ buildActionCategory(ctrl,
+ allowed_by_some,
+ allowed_by_all,
+ (*ras_it),
+ commit_callback,
+ show_all,
+ filter,
+ is_owner_role);
+ }
}
void LLPanelGroupSubTab::buildActionCategory(LLScrollListCtrl* ctrl,
- U64 allowed_by_some,
- U64 allowed_by_all,
- LLRoleActionSet* action_set,
- LLUICtrl::commit_callback_t commit_callback,
- BOOL show_all,
- BOOL filter,
- BOOL is_owner_role)
-{
- LL_DEBUGS() << "Building role list for: " << action_set->mActionSetData->mName << LL_ENDL;
- // See if the allow mask matches anything in this category.
- if (show_all || (allowed_by_some & action_set->mActionSetData->mPowerBit))
- {
- // List all the actions in this category that at least some members have.
- LLSD row;
-
- row["columns"][0]["column"] = "icon";
- row["columns"][0]["type"] = "icon";
-
- icon_map_t::iterator iter = mActionIcons.find("folder");
- if (iter != mActionIcons.end())
- {
- row["columns"][0]["value"] = (*iter).second;
- }
-
- row["columns"][1]["column"] = "action";
- row["columns"][1]["type"] = "text";
- row["columns"][1]["value"] = LLTrans::getString(action_set->mActionSetData->mName);
- row["columns"][1]["font"]["name"] = "SANSSERIF_SMALL";
-
-
- LLScrollListItem* title_row = ctrl->addElement(row, ADD_BOTTOM, action_set->mActionSetData);
-
- LLScrollListText* name_textp = dynamic_cast<LLScrollListText*>(title_row->getColumn(2)); //?? I have no idea fix getColumn(1) return column spacer...
- if (name_textp)
- name_textp->setFontStyle(LLFontGL::BOLD);
-
- bool category_matches_filter = (filter) ? matchesActionSearchFilter(action_set->mActionSetData->mName) : true;
-
- std::vector<LLRoleAction*>::iterator ra_it = action_set->mActions.begin();
- std::vector<LLRoleAction*>::iterator ra_end = action_set->mActions.end();
-
- bool items_match_filter = false;
- BOOL can_change_actions = (!is_owner_role && gAgent.hasPowerInGroup(mGroupID, GP_ROLE_CHANGE_ACTIONS));
-
- for ( ; ra_it != ra_end; ++ra_it)
- {
- // See if anyone has these action.
- if (!show_all && !(allowed_by_some & (*ra_it)->mPowerBit))
- {
- continue;
- }
-
- // See if we are filtering out these actions
- // If we aren't using filters, category_matches_filter will be true.
- if (!category_matches_filter
- && !matchesActionSearchFilter((*ra_it)->mDescription))
- {
- continue;
- }
-
- items_match_filter = true;
-
- // See if everyone has these actions.
- bool show_full_strength = false;
- if ( (allowed_by_some & (*ra_it)->mPowerBit) == (allowed_by_all & (*ra_it)->mPowerBit) )
- {
- show_full_strength = true;
- }
-
- LLSD row;
-
- S32 column_index = 0;
- row["columns"][column_index]["column"] = "icon";
- ++column_index;
-
-
- S32 check_box_index = -1;
- if (commit_callback)
- {
- row["columns"][column_index]["column"] = "checkbox";
- row["columns"][column_index]["type"] = "checkbox";
- check_box_index = column_index;
- ++column_index;
- }
- else
- {
- if (show_full_strength)
- {
- icon_map_t::iterator iter = mActionIcons.find("full");
- if (iter != mActionIcons.end())
- {
- row["columns"][column_index]["column"] = "checkbox";
- row["columns"][column_index]["type"] = "icon";
- row["columns"][column_index]["value"] = (*iter).second;
- ++column_index;
- }
- }
- else
- {
- icon_map_t::iterator iter = mActionIcons.find("partial");
- if (iter != mActionIcons.end())
- {
- row["columns"][column_index]["column"] = "checkbox";
- row["columns"][column_index]["type"] = "icon";
- row["columns"][column_index]["value"] = (*iter).second;
- ++column_index;
- }
- row["enabled"] = false;
- }
- }
-
- row["columns"][column_index]["column"] = "action";
- row["columns"][column_index]["value"] = (*ra_it)->mDescription;
- row["columns"][column_index]["font"] = "SANSSERIF_SMALL";
-
- if(mHasGroupBanPower)
- {
- // The ban ability is being set. Prevent these abilities from being manipulated
- if((*ra_it)->mPowerBit == GP_MEMBER_EJECT)
- {
- row["enabled"] = false;
- }
- else if((*ra_it)->mPowerBit == GP_ROLE_REMOVE_MEMBER)
- {
- row["enabled"] = false;
- }
- }
- else
- {
- // The ban ability is not set. Allow these abilities to be manipulated
- if((*ra_it)->mPowerBit == GP_MEMBER_EJECT)
- {
- row["enabled"] = true;
- }
- else if((*ra_it)->mPowerBit == GP_ROLE_REMOVE_MEMBER)
- {
- row["enabled"] = true;
- }
- }
-
- LLScrollListItem* item = ctrl->addElement(row, ADD_BOTTOM, (*ra_it));
-
- if (-1 != check_box_index)
- {
- // Extract the checkbox that was created.
- LLScrollListCheck* check_cell = (LLScrollListCheck*) item->getColumn(check_box_index);
- LLCheckBoxCtrl* check = check_cell->getCheckBox();
- check->setEnabled(can_change_actions);
- check->setCommitCallback(commit_callback);
- check->setToolTip( check->getLabel() );
-
- if (show_all)
- {
- check->setTentative(FALSE);
- if (allowed_by_some & (*ra_it)->mPowerBit)
- {
- check->set(TRUE);
- }
- else
- {
- check->set(FALSE);
- }
- }
- else
- {
- check->set(TRUE);
- if (show_full_strength)
- {
- check->setTentative(FALSE);
- }
- else
- {
- check->setTentative(TRUE);
- }
- }
-
- // Regardless of whether or not this ability is allowed by all or some, we want to prevent
- // the group managers from accidentally disabling either of the two additional abilities
- // tied with GP_GROUP_BAN_ACCESS.
- if( (allowed_by_all & GP_GROUP_BAN_ACCESS) == GP_GROUP_BAN_ACCESS ||
- (allowed_by_some & GP_GROUP_BAN_ACCESS) == GP_GROUP_BAN_ACCESS)
- {
- mHasGroupBanPower = true;
- }
- }
- }
-
- if (!items_match_filter)
- {
- S32 title_index = ctrl->getItemIndex(title_row);
- ctrl->deleteSingleItem(title_index);
- }
- }
+ U64 allowed_by_some,
+ U64 allowed_by_all,
+ LLRoleActionSet* action_set,
+ LLUICtrl::commit_callback_t commit_callback,
+ BOOL show_all,
+ BOOL filter,
+ BOOL is_owner_role)
+{
+ LL_DEBUGS() << "Building role list for: " << action_set->mActionSetData->mName << LL_ENDL;
+ // See if the allow mask matches anything in this category.
+ if (show_all || (allowed_by_some & action_set->mActionSetData->mPowerBit))
+ {
+ // List all the actions in this category that at least some members have.
+ LLSD row;
+
+ row["columns"][0]["column"] = "icon";
+ row["columns"][0]["type"] = "icon";
+
+ icon_map_t::iterator iter = mActionIcons.find("folder");
+ if (iter != mActionIcons.end())
+ {
+ row["columns"][0]["value"] = (*iter).second;
+ }
+
+ row["columns"][1]["column"] = "action";
+ row["columns"][1]["type"] = "text";
+ row["columns"][1]["value"] = LLTrans::getString(action_set->mActionSetData->mName);
+ row["columns"][1]["font"]["name"] = "SANSSERIF_SMALL";
+
+
+ LLScrollListItem* title_row = ctrl->addElement(row, ADD_BOTTOM, action_set->mActionSetData);
+
+ LLScrollListText* name_textp = dynamic_cast<LLScrollListText*>(title_row->getColumn(2)); //?? I have no idea fix getColumn(1) return column spacer...
+ if (name_textp)
+ name_textp->setFontStyle(LLFontGL::BOLD);
+
+ bool category_matches_filter = (filter) ? matchesActionSearchFilter(action_set->mActionSetData->mName) : true;
+
+ std::vector<LLRoleAction*>::iterator ra_it = action_set->mActions.begin();
+ std::vector<LLRoleAction*>::iterator ra_end = action_set->mActions.end();
+
+ bool items_match_filter = false;
+ BOOL can_change_actions = (!is_owner_role && gAgent.hasPowerInGroup(mGroupID, GP_ROLE_CHANGE_ACTIONS));
+
+ for ( ; ra_it != ra_end; ++ra_it)
+ {
+ // See if anyone has these action.
+ if (!show_all && !(allowed_by_some & (*ra_it)->mPowerBit))
+ {
+ continue;
+ }
+
+ // See if we are filtering out these actions
+ // If we aren't using filters, category_matches_filter will be true.
+ if (!category_matches_filter
+ && !matchesActionSearchFilter((*ra_it)->mDescription))
+ {
+ continue;
+ }
+
+ items_match_filter = true;
+
+ // See if everyone has these actions.
+ bool show_full_strength = false;
+ if ( (allowed_by_some & (*ra_it)->mPowerBit) == (allowed_by_all & (*ra_it)->mPowerBit) )
+ {
+ show_full_strength = true;
+ }
+
+ LLSD row;
+
+ S32 column_index = 0;
+ row["columns"][column_index]["column"] = "icon";
+ ++column_index;
+
+
+ S32 check_box_index = -1;
+ if (commit_callback)
+ {
+ row["columns"][column_index]["column"] = "checkbox";
+ row["columns"][column_index]["type"] = "checkbox";
+ check_box_index = column_index;
+ ++column_index;
+ }
+ else
+ {
+ if (show_full_strength)
+ {
+ icon_map_t::iterator iter = mActionIcons.find("full");
+ if (iter != mActionIcons.end())
+ {
+ row["columns"][column_index]["column"] = "checkbox";
+ row["columns"][column_index]["type"] = "icon";
+ row["columns"][column_index]["value"] = (*iter).second;
+ ++column_index;
+ }
+ }
+ else
+ {
+ icon_map_t::iterator iter = mActionIcons.find("partial");
+ if (iter != mActionIcons.end())
+ {
+ row["columns"][column_index]["column"] = "checkbox";
+ row["columns"][column_index]["type"] = "icon";
+ row["columns"][column_index]["value"] = (*iter).second;
+ ++column_index;
+ }
+ row["enabled"] = false;
+ }
+ }
+
+ row["columns"][column_index]["column"] = "action";
+ row["columns"][column_index]["value"] = (*ra_it)->mDescription;
+ row["columns"][column_index]["font"] = "SANSSERIF_SMALL";
+
+ if(mHasGroupBanPower)
+ {
+ // The ban ability is being set. Prevent these abilities from being manipulated
+ if((*ra_it)->mPowerBit == GP_MEMBER_EJECT)
+ {
+ row["enabled"] = false;
+ }
+ else if((*ra_it)->mPowerBit == GP_ROLE_REMOVE_MEMBER)
+ {
+ row["enabled"] = false;
+ }
+ }
+ else
+ {
+ // The ban ability is not set. Allow these abilities to be manipulated
+ if((*ra_it)->mPowerBit == GP_MEMBER_EJECT)
+ {
+ row["enabled"] = true;
+ }
+ else if((*ra_it)->mPowerBit == GP_ROLE_REMOVE_MEMBER)
+ {
+ row["enabled"] = true;
+ }
+ }
+
+ LLScrollListItem* item = ctrl->addElement(row, ADD_BOTTOM, (*ra_it));
+
+ if (-1 != check_box_index)
+ {
+ // Extract the checkbox that was created.
+ LLScrollListCheck* check_cell = (LLScrollListCheck*) item->getColumn(check_box_index);
+ LLCheckBoxCtrl* check = check_cell->getCheckBox();
+ check->setEnabled(can_change_actions);
+ check->setCommitCallback(commit_callback);
+ check->setToolTip( check->getLabel() );
+
+ if (show_all)
+ {
+ check->setTentative(FALSE);
+ if (allowed_by_some & (*ra_it)->mPowerBit)
+ {
+ check->set(TRUE);
+ }
+ else
+ {
+ check->set(FALSE);
+ }
+ }
+ else
+ {
+ check->set(TRUE);
+ if (show_full_strength)
+ {
+ check->setTentative(FALSE);
+ }
+ else
+ {
+ check->setTentative(TRUE);
+ }
+ }
+
+ // Regardless of whether or not this ability is allowed by all or some, we want to prevent
+ // the group managers from accidentally disabling either of the two additional abilities
+ // tied with GP_GROUP_BAN_ACCESS.
+ if( (allowed_by_all & GP_GROUP_BAN_ACCESS) == GP_GROUP_BAN_ACCESS ||
+ (allowed_by_some & GP_GROUP_BAN_ACCESS) == GP_GROUP_BAN_ACCESS)
+ {
+ mHasGroupBanPower = true;
+ }
+ }
+ }
+
+ if (!items_match_filter)
+ {
+ S32 title_index = ctrl->getItemIndex(title_row);
+ ctrl->deleteSingleItem(title_index);
+ }
+ }
}
void LLPanelGroupSubTab::setFooterEnabled(BOOL enable)
{
- if (mFooter)
- {
- mFooter->setAllChildrenEnabled(enable);
- }
+ if (mFooter)
+ {
+ mFooter->setAllChildrenEnabled(enable);
+ }
}
@@ -779,1173 +779,1173 @@ void LLPanelGroupSubTab::setFooterEnabled(BOOL enable)
static LLPanelInjector<LLPanelGroupMembersSubTab> t_panel_group_members_subtab("panel_group_members_subtab");
LLPanelGroupMembersSubTab::LLPanelGroupMembersSubTab()
-: LLPanelGroupSubTab(),
- mMembersList(NULL),
- mAssignedRolesList(NULL),
- mAllowedActionsList(NULL),
- mChanged(FALSE),
- mPendingMemberUpdate(FALSE),
- mHasMatch(FALSE),
- mNumOwnerAdditions(0)
+: LLPanelGroupSubTab(),
+ mMembersList(NULL),
+ mAssignedRolesList(NULL),
+ mAllowedActionsList(NULL),
+ mChanged(FALSE),
+ mPendingMemberUpdate(FALSE),
+ mHasMatch(FALSE),
+ mNumOwnerAdditions(0)
{
}
LLPanelGroupMembersSubTab::~LLPanelGroupMembersSubTab()
{
- for (avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.begin(); it != mAvatarNameCacheConnections.end(); ++it)
- {
- if (it->second.connected())
- {
- it->second.disconnect();
- }
- }
- mAvatarNameCacheConnections.clear();
- if (mMembersList)
- {
- gSavedSettings.setString("GroupMembersSortOrder", mMembersList->getSortColumnName());
- }
+ for (avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.begin(); it != mAvatarNameCacheConnections.end(); ++it)
+ {
+ if (it->second.connected())
+ {
+ it->second.disconnect();
+ }
+ }
+ mAvatarNameCacheConnections.clear();
+ if (mMembersList)
+ {
+ gSavedSettings.setString("GroupMembersSortOrder", mMembersList->getSortColumnName());
+ }
}
BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root)
{
- LLPanelGroupSubTab::postBuildSubTab(root);
-
- // Upcast parent so we can ask it for sibling controls.
- LLPanelGroupRoles* parent = (LLPanelGroupRoles*) root;
-
- // Look recursively from the parent to find all our widgets.
- bool recurse = true;
- mHeader = parent->findChild<LLPanel>("members_header", recurse);
- mFooter = parent->findChild<LLPanel>("members_footer", recurse);
-
- mMembersList = parent->getChild<LLNameListCtrl>("member_list", recurse);
- mAssignedRolesList = parent->getChild<LLScrollListCtrl>("member_assigned_roles", recurse);
- mAllowedActionsList = parent->getChild<LLScrollListCtrl>("member_allowed_actions", recurse);
- mActionDescription = parent->getChild<LLTextEditor>("member_action_description", recurse);
-
- if (!mMembersList || !mAssignedRolesList || !mAllowedActionsList || !mActionDescription) return FALSE;
-
- mAllowedActionsList->setCommitOnSelectionChange(TRUE);
- mAllowedActionsList->setCommitCallback(boost::bind(&LLPanelGroupMembersSubTab::updateActionDescription, this));
-
- // We want to be notified whenever a member is selected.
- mMembersList->setCommitOnSelectionChange(TRUE);
- mMembersList->setCommitCallback(onMemberSelect, this);
- // Show the member's profile on double click.
- mMembersList->setDoubleClickCallback(onMemberDoubleClick, this);
- mMembersList->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
- mMembersList->setIsFriendCallback(LLAvatarActions::isFriend);
-
- LLSD row;
- row["columns"][0]["column"] = "name";
- row["columns"][1]["column"] = "donated";
- row["columns"][2]["column"] = "online";
- mMembersList->addElement(row);
- std::string order_by = gSavedSettings.getString("GroupMembersSortOrder");
- if(!order_by.empty())
- {
- mMembersList->sortByColumn(order_by, TRUE);
- }
-
- LLButton* button = parent->getChild<LLButton>("member_invite", recurse);
- if ( button )
- {
- button->setClickedCallback(onInviteMember, this);
- button->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_INVITE));
- }
-
- mEjectBtn = parent->getChild<LLButton>("member_eject", recurse);
- if ( mEjectBtn )
- {
- mEjectBtn->setClickedCallback(onEjectMembers, this);
- mEjectBtn->setEnabled(FALSE);
- }
-
- mBanBtn = parent->getChild<LLButton>("member_ban", recurse);
- if(mBanBtn)
- {
- mBanBtn->setClickedCallback(onBanMember, this);
- mBanBtn->setEnabled(FALSE);
- }
-
- return TRUE;
+ LLPanelGroupSubTab::postBuildSubTab(root);
+
+ // Upcast parent so we can ask it for sibling controls.
+ LLPanelGroupRoles* parent = (LLPanelGroupRoles*) root;
+
+ // Look recursively from the parent to find all our widgets.
+ bool recurse = true;
+ mHeader = parent->findChild<LLPanel>("members_header", recurse);
+ mFooter = parent->findChild<LLPanel>("members_footer", recurse);
+
+ mMembersList = parent->getChild<LLNameListCtrl>("member_list", recurse);
+ mAssignedRolesList = parent->getChild<LLScrollListCtrl>("member_assigned_roles", recurse);
+ mAllowedActionsList = parent->getChild<LLScrollListCtrl>("member_allowed_actions", recurse);
+ mActionDescription = parent->getChild<LLTextEditor>("member_action_description", recurse);
+
+ if (!mMembersList || !mAssignedRolesList || !mAllowedActionsList || !mActionDescription) return FALSE;
+
+ mAllowedActionsList->setCommitOnSelectionChange(TRUE);
+ mAllowedActionsList->setCommitCallback(boost::bind(&LLPanelGroupMembersSubTab::updateActionDescription, this));
+
+ // We want to be notified whenever a member is selected.
+ mMembersList->setCommitOnSelectionChange(TRUE);
+ mMembersList->setCommitCallback(onMemberSelect, this);
+ // Show the member's profile on double click.
+ mMembersList->setDoubleClickCallback(onMemberDoubleClick, this);
+ mMembersList->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
+ mMembersList->setIsFriendCallback(LLAvatarActions::isFriend);
+
+ LLSD row;
+ row["columns"][0]["column"] = "name";
+ row["columns"][1]["column"] = "donated";
+ row["columns"][2]["column"] = "online";
+ mMembersList->addElement(row);
+ std::string order_by = gSavedSettings.getString("GroupMembersSortOrder");
+ if(!order_by.empty())
+ {
+ mMembersList->sortByColumn(order_by, TRUE);
+ }
+
+ LLButton* button = parent->getChild<LLButton>("member_invite", recurse);
+ if ( button )
+ {
+ button->setClickedCallback(onInviteMember, this);
+ button->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_INVITE));
+ }
+
+ mEjectBtn = parent->getChild<LLButton>("member_eject", recurse);
+ if ( mEjectBtn )
+ {
+ mEjectBtn->setClickedCallback(onEjectMembers, this);
+ mEjectBtn->setEnabled(FALSE);
+ }
+
+ mBanBtn = parent->getChild<LLButton>("member_ban", recurse);
+ if(mBanBtn)
+ {
+ mBanBtn->setClickedCallback(onBanMember, this);
+ mBanBtn->setEnabled(FALSE);
+ }
+
+ return TRUE;
}
void LLPanelGroupMembersSubTab::setGroupID(const LLUUID& id)
{
- //clear members list
- if(mMembersList) mMembersList->deleteAllItems();
- if(mAssignedRolesList) mAssignedRolesList->deleteAllItems();
- if(mAllowedActionsList) mAllowedActionsList->deleteAllItems();
+ //clear members list
+ if(mMembersList) mMembersList->deleteAllItems();
+ if(mAssignedRolesList) mAssignedRolesList->deleteAllItems();
+ if(mAllowedActionsList) mAllowedActionsList->deleteAllItems();
- LLPanelGroupSubTab::setGroupID(id);
+ LLPanelGroupSubTab::setGroupID(id);
}
// static
void LLPanelGroupMembersSubTab::onMemberSelect(LLUICtrl* ctrl, void* user_data)
{
- LLPanelGroupMembersSubTab* self = static_cast<LLPanelGroupMembersSubTab*>(user_data);
- self->handleMemberSelect();
+ LLPanelGroupMembersSubTab* self = static_cast<LLPanelGroupMembersSubTab*>(user_data);
+ self->handleMemberSelect();
}
void LLPanelGroupMembersSubTab::handleMemberSelect()
{
- LL_DEBUGS() << "LLPanelGroupMembersSubTab::handleMemberSelect" << LL_ENDL;
-
- mAssignedRolesList->deleteAllItems();
- mAllowedActionsList->deleteAllItems();
- mActionDescription->clear();
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "LLPanelGroupMembersSubTab::handleMemberSelect() "
- << "-- No group data!" << LL_ENDL;
- return;
- }
-
- // Check if there is anything selected.
- std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
- if (selection.empty()) return;
-
- // Build a vector of all selected members, and gather allowed actions.
- uuid_vec_t selected_members;
- U64 allowed_by_all = GP_ALL_POWERS; //0xFFFFffffFFFFffffLL;
- U64 allowed_by_some = 0;
-
- std::vector<LLScrollListItem*>::iterator itor;
- for (itor = selection.begin();
- itor != selection.end(); ++itor)
- {
- LLUUID member_id = (*itor)->getUUID();
-
- selected_members.push_back( member_id );
- // Get this member's power mask including any unsaved changes
-
- U64 powers = getAgentPowersBasedOnRoleChanges( member_id );
-
- allowed_by_all &= powers;
- allowed_by_some |= powers;
- }
- std::sort(selected_members.begin(), selected_members.end());
-
- //////////////////////////////////
- // Build the allowed actions list.
- //////////////////////////////////
- buildActionsList(mAllowedActionsList,
- allowed_by_some,
- allowed_by_all,
- NULL,
- FALSE,
- FALSE,
- FALSE);
-
- //////////////////////////////////
- // Build the assigned roles list.
- //////////////////////////////////
- // Add each role to the assigned roles list.
- LLGroupMgrGroupData::role_list_t::iterator iter = gdatap->mRoles.begin();
- LLGroupMgrGroupData::role_list_t::iterator end = gdatap->mRoles.end();
-
- BOOL can_ban_members = gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS);
- BOOL can_eject_members = gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_EJECT);
- BOOL member_is_owner = FALSE;
-
- for( ; iter != end; ++iter)
- {
- // Count how many selected users are in this role.
- const LLUUID& role_id = iter->first;
- LLGroupRoleData* group_role_data = iter->second;
-
- if (group_role_data)
- {
- const BOOL needs_sort = FALSE;
- S32 count = group_role_data->getMembersInRole(
- selected_members, needs_sort);
- //check if the user has permissions to assign/remove
- //members to/from the role (but the ability to add/remove
- //should only be based on the "saved" changes to the role
- //not in the temp/meta data. -jwolk
- BOOL cb_enable = ( (count > 0) ?
- agentCanRemoveFromRole(mGroupID, role_id) :
- agentCanAddToRole(mGroupID, role_id) );
-
-
- // Owner role has special enabling permissions for removal.
- if (cb_enable && (count > 0) && role_id == gdatap->mOwnerRole)
- {
- // Check if any owners besides this agent are selected.
- uuid_vec_t::const_iterator member_iter;
- uuid_vec_t::const_iterator member_end =
- selected_members.end();
- for (member_iter = selected_members.begin();
- member_iter != member_end;
- ++member_iter)
- {
- // Don't count the agent.
- if ((*member_iter) == gAgent.getID()) continue;
-
- // Look up the member data.
- LLGroupMgrGroupData::member_list_t::iterator mi =
- gdatap->mMembers.find((*member_iter));
- if (mi == gdatap->mMembers.end()) continue;
- LLGroupMemberData* member_data = (*mi).second;
- // Is the member an owner?
- if ( member_data && member_data->isInRole(gdatap->mOwnerRole) )
- {
- // Can't remove other owners.
- cb_enable = FALSE;
- can_ban_members = FALSE;
- break;
- }
- }
- }
-
- //now see if there are any role changes for the selected
- //members and remember to include them
- uuid_vec_t::iterator sel_mem_iter = selected_members.begin();
- for (; sel_mem_iter != selected_members.end(); sel_mem_iter++)
- {
- LLRoleMemberChangeType type;
- if ( getRoleChangeType(*sel_mem_iter, role_id, type) )
- {
- if ( type == RMC_ADD ) count++;
- else if ( type == RMC_REMOVE ) count--;
- }
- }
-
- // If anyone selected is in any role besides 'Everyone' then they can't be ejected.
- if (role_id.notNull() && (count > 0))
- {
- can_eject_members = FALSE;
- if (role_id == gdatap->mOwnerRole)
- {
- member_is_owner = TRUE;
- }
- }
-
- LLRoleData rd;
- if (gdatap->getRoleData(role_id,rd))
- {
- std::ostringstream label;
- label << rd.mRoleName;
- // Don't bother showing a count, if there is only 0 or 1.
- if (count > 1)
- {
- label << ": " << count ;
- }
-
- LLSD row;
- row["id"] = role_id;
-
- row["columns"][0]["column"] = "checkbox";
- row["columns"][0]["type"] = "checkbox";
-
- row["columns"][1]["column"] = "role";
- row["columns"][1]["value"] = label.str();
-
- if (row["id"].asUUID().isNull())
- {
- // This is the everyone role, you can't take people out of the everyone role!
- row["enabled"] = false;
- }
-
- LLScrollListItem* item = mAssignedRolesList->addElement(row);
-
- // Extract the checkbox that was created.
- LLScrollListCheck* check_cell = (LLScrollListCheck*) item->getColumn(0);
- LLCheckBoxCtrl* check = check_cell->getCheckBox();
- check->setCommitCallback(onRoleCheck, this);
- check->set( count > 0 );
- check->setTentative(
- (0 != count)
- && (selected_members.size() !=
- (uuid_vec_t::size_type)count));
-
- //NOTE: as of right now a user can break the group
- //by removing himself from a role if he is the
- //last owner. We should check for this special case
- // -jwolk
- check->setEnabled(cb_enable);
- item->setEnabled(cb_enable);
- }
- }
- else
- {
- // This could happen if changes are not synced right on sub-panel change.
- LL_WARNS() << "No group role data for " << iter->second << LL_ENDL;
- }
- }
- mAssignedRolesList->setEnabled(TRUE);
-
- if (gAgent.isGodlike())
- {
- can_eject_members = TRUE;
- // can_ban_members = TRUE;
- }
-
- if (!can_eject_members && !member_is_owner)
- {
- // Maybe we can eject them because we are an owner...
- LLGroupMgrGroupData::member_list_t::iterator mi = gdatap->mMembers.find(gAgent.getID());
- if (mi != gdatap->mMembers.end())
- {
- LLGroupMemberData* member_data = (*mi).second;
-
- if ( member_data && member_data->isInRole(gdatap->mOwnerRole) )
- {
- can_eject_members = TRUE;
- //can_ban_members = TRUE;
- }
- }
-
- }
-
- // ... or we can eject them because we have all the requisite powers...
- if( gAgent.hasPowerInGroup(mGroupID, GP_ROLE_REMOVE_MEMBER) &&
- !member_is_owner)
- {
- if( gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_EJECT))
- {
- can_eject_members = TRUE;
- }
-
- if( gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS))
- {
- can_ban_members = TRUE;
- }
- }
-
-
- uuid_vec_t::const_iterator member_iter = selected_members.begin();
- uuid_vec_t::const_iterator member_end = selected_members.end();
- for ( ; member_iter != member_end; ++member_iter)
- {
- // Don't count the agent.
- if ((*member_iter) == gAgent.getID())
- {
- can_eject_members = FALSE;
- can_ban_members = FALSE;
- }
- }
-
- mBanBtn->setEnabled(can_ban_members);
- mEjectBtn->setEnabled(can_eject_members);
+ LL_DEBUGS() << "LLPanelGroupMembersSubTab::handleMemberSelect" << LL_ENDL;
+
+ mAssignedRolesList->deleteAllItems();
+ mAllowedActionsList->deleteAllItems();
+ mActionDescription->clear();
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "LLPanelGroupMembersSubTab::handleMemberSelect() "
+ << "-- No group data!" << LL_ENDL;
+ return;
+ }
+
+ // Check if there is anything selected.
+ std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
+ if (selection.empty()) return;
+
+ // Build a vector of all selected members, and gather allowed actions.
+ uuid_vec_t selected_members;
+ U64 allowed_by_all = GP_ALL_POWERS; //0xFFFFffffFFFFffffLL;
+ U64 allowed_by_some = 0;
+
+ std::vector<LLScrollListItem*>::iterator itor;
+ for (itor = selection.begin();
+ itor != selection.end(); ++itor)
+ {
+ LLUUID member_id = (*itor)->getUUID();
+
+ selected_members.push_back( member_id );
+ // Get this member's power mask including any unsaved changes
+
+ U64 powers = getAgentPowersBasedOnRoleChanges( member_id );
+
+ allowed_by_all &= powers;
+ allowed_by_some |= powers;
+ }
+ std::sort(selected_members.begin(), selected_members.end());
+
+ //////////////////////////////////
+ // Build the allowed actions list.
+ //////////////////////////////////
+ buildActionsList(mAllowedActionsList,
+ allowed_by_some,
+ allowed_by_all,
+ NULL,
+ FALSE,
+ FALSE,
+ FALSE);
+
+ //////////////////////////////////
+ // Build the assigned roles list.
+ //////////////////////////////////
+ // Add each role to the assigned roles list.
+ LLGroupMgrGroupData::role_list_t::iterator iter = gdatap->mRoles.begin();
+ LLGroupMgrGroupData::role_list_t::iterator end = gdatap->mRoles.end();
+
+ BOOL can_ban_members = gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS);
+ BOOL can_eject_members = gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_EJECT);
+ BOOL member_is_owner = FALSE;
+
+ for( ; iter != end; ++iter)
+ {
+ // Count how many selected users are in this role.
+ const LLUUID& role_id = iter->first;
+ LLGroupRoleData* group_role_data = iter->second;
+
+ if (group_role_data)
+ {
+ const BOOL needs_sort = FALSE;
+ S32 count = group_role_data->getMembersInRole(
+ selected_members, needs_sort);
+ //check if the user has permissions to assign/remove
+ //members to/from the role (but the ability to add/remove
+ //should only be based on the "saved" changes to the role
+ //not in the temp/meta data. -jwolk
+ BOOL cb_enable = ( (count > 0) ?
+ agentCanRemoveFromRole(mGroupID, role_id) :
+ agentCanAddToRole(mGroupID, role_id) );
+
+
+ // Owner role has special enabling permissions for removal.
+ if (cb_enable && (count > 0) && role_id == gdatap->mOwnerRole)
+ {
+ // Check if any owners besides this agent are selected.
+ uuid_vec_t::const_iterator member_iter;
+ uuid_vec_t::const_iterator member_end =
+ selected_members.end();
+ for (member_iter = selected_members.begin();
+ member_iter != member_end;
+ ++member_iter)
+ {
+ // Don't count the agent.
+ if ((*member_iter) == gAgent.getID()) continue;
+
+ // Look up the member data.
+ LLGroupMgrGroupData::member_list_t::iterator mi =
+ gdatap->mMembers.find((*member_iter));
+ if (mi == gdatap->mMembers.end()) continue;
+ LLGroupMemberData* member_data = (*mi).second;
+ // Is the member an owner?
+ if ( member_data && member_data->isInRole(gdatap->mOwnerRole) )
+ {
+ // Can't remove other owners.
+ cb_enable = FALSE;
+ can_ban_members = FALSE;
+ break;
+ }
+ }
+ }
+
+ //now see if there are any role changes for the selected
+ //members and remember to include them
+ uuid_vec_t::iterator sel_mem_iter = selected_members.begin();
+ for (; sel_mem_iter != selected_members.end(); sel_mem_iter++)
+ {
+ LLRoleMemberChangeType type;
+ if ( getRoleChangeType(*sel_mem_iter, role_id, type) )
+ {
+ if ( type == RMC_ADD ) count++;
+ else if ( type == RMC_REMOVE ) count--;
+ }
+ }
+
+ // If anyone selected is in any role besides 'Everyone' then they can't be ejected.
+ if (role_id.notNull() && (count > 0))
+ {
+ can_eject_members = FALSE;
+ if (role_id == gdatap->mOwnerRole)
+ {
+ member_is_owner = TRUE;
+ }
+ }
+
+ LLRoleData rd;
+ if (gdatap->getRoleData(role_id,rd))
+ {
+ std::ostringstream label;
+ label << rd.mRoleName;
+ // Don't bother showing a count, if there is only 0 or 1.
+ if (count > 1)
+ {
+ label << ": " << count ;
+ }
+
+ LLSD row;
+ row["id"] = role_id;
+
+ row["columns"][0]["column"] = "checkbox";
+ row["columns"][0]["type"] = "checkbox";
+
+ row["columns"][1]["column"] = "role";
+ row["columns"][1]["value"] = label.str();
+
+ if (row["id"].asUUID().isNull())
+ {
+ // This is the everyone role, you can't take people out of the everyone role!
+ row["enabled"] = false;
+ }
+
+ LLScrollListItem* item = mAssignedRolesList->addElement(row);
+
+ // Extract the checkbox that was created.
+ LLScrollListCheck* check_cell = (LLScrollListCheck*) item->getColumn(0);
+ LLCheckBoxCtrl* check = check_cell->getCheckBox();
+ check->setCommitCallback(onRoleCheck, this);
+ check->set( count > 0 );
+ check->setTentative(
+ (0 != count)
+ && (selected_members.size() !=
+ (uuid_vec_t::size_type)count));
+
+ //NOTE: as of right now a user can break the group
+ //by removing himself from a role if he is the
+ //last owner. We should check for this special case
+ // -jwolk
+ check->setEnabled(cb_enable);
+ item->setEnabled(cb_enable);
+ }
+ }
+ else
+ {
+ // This could happen if changes are not synced right on sub-panel change.
+ LL_WARNS() << "No group role data for " << iter->second << LL_ENDL;
+ }
+ }
+ mAssignedRolesList->setEnabled(TRUE);
+
+ if (gAgent.isGodlike())
+ {
+ can_eject_members = TRUE;
+ // can_ban_members = TRUE;
+ }
+
+ if (!can_eject_members && !member_is_owner)
+ {
+ // Maybe we can eject them because we are an owner...
+ LLGroupMgrGroupData::member_list_t::iterator mi = gdatap->mMembers.find(gAgent.getID());
+ if (mi != gdatap->mMembers.end())
+ {
+ LLGroupMemberData* member_data = (*mi).second;
+
+ if ( member_data && member_data->isInRole(gdatap->mOwnerRole) )
+ {
+ can_eject_members = TRUE;
+ //can_ban_members = TRUE;
+ }
+ }
+
+ }
+
+ // ... or we can eject them because we have all the requisite powers...
+ if( gAgent.hasPowerInGroup(mGroupID, GP_ROLE_REMOVE_MEMBER) &&
+ !member_is_owner)
+ {
+ if( gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_EJECT))
+ {
+ can_eject_members = TRUE;
+ }
+
+ if( gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS))
+ {
+ can_ban_members = TRUE;
+ }
+ }
+
+
+ uuid_vec_t::const_iterator member_iter = selected_members.begin();
+ uuid_vec_t::const_iterator member_end = selected_members.end();
+ for ( ; member_iter != member_end; ++member_iter)
+ {
+ // Don't count the agent.
+ if ((*member_iter) == gAgent.getID())
+ {
+ can_eject_members = FALSE;
+ can_ban_members = FALSE;
+ }
+ }
+
+ mBanBtn->setEnabled(can_ban_members);
+ mEjectBtn->setEnabled(can_eject_members);
}
// static
void LLPanelGroupMembersSubTab::onMemberDoubleClick(void* user_data)
{
- LLPanelGroupMembersSubTab* self = static_cast<LLPanelGroupMembersSubTab*>(user_data);
- self->handleMemberDoubleClick();
+ LLPanelGroupMembersSubTab* self = static_cast<LLPanelGroupMembersSubTab*>(user_data);
+ self->handleMemberDoubleClick();
}
//static
void LLPanelGroupMembersSubTab::onInviteMember(void *userdata)
{
- LLPanelGroupMembersSubTab* selfp = (LLPanelGroupMembersSubTab*) userdata;
+ LLPanelGroupMembersSubTab* selfp = (LLPanelGroupMembersSubTab*) userdata;
- if ( selfp )
- {
- selfp->handleInviteMember();
- }
+ if ( selfp )
+ {
+ selfp->handleInviteMember();
+ }
}
void LLPanelGroupMembersSubTab::handleInviteMember()
{
- LLFloaterGroupInvite::showForGroup(mGroupID, NULL, false);
+ LLFloaterGroupInvite::showForGroup(mGroupID, NULL, false);
}
void LLPanelGroupMembersSubTab::onEjectMembers(void *userdata)
{
- LLPanelGroupMembersSubTab* selfp = (LLPanelGroupMembersSubTab*) userdata;
+ LLPanelGroupMembersSubTab* selfp = (LLPanelGroupMembersSubTab*) userdata;
- if ( selfp )
- {
- selfp->confirmEjectMembers();
- }
+ if ( selfp )
+ {
+ selfp->confirmEjectMembers();
+ }
}
void LLPanelGroupMembersSubTab::confirmEjectMembers()
{
- std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
- if (selection.empty()) return;
-
- S32 selection_count = selection.size();
- if (selection_count == 1)
- {
- LLSD args;
- LLAvatarName av_name;
- LLAvatarNameCache::get(mMembersList->getValue(), &av_name);
- args["AVATAR_NAME"] = av_name.getUserName();
- LLSD payload;
- LLNotificationsUtil::add("EjectGroupMemberWarning",
- args,
- payload,
- boost::bind(&LLPanelGroupMembersSubTab::handleEjectCallback, this, _1, _2));
- }
- else
- {
- LLSD args;
- args["COUNT"] = llformat("%d", selection_count);
- LLSD payload;
- LLNotificationsUtil::add("EjectGroupMembersWarning",
- args,
- payload,
- boost::bind(&LLPanelGroupMembersSubTab::handleEjectCallback, this, _1, _2));
- }
+ std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
+ if (selection.empty()) return;
+
+ S32 selection_count = selection.size();
+ if (selection_count == 1)
+ {
+ LLSD args;
+ LLAvatarName av_name;
+ LLAvatarNameCache::get(mMembersList->getValue(), &av_name);
+ args["AVATAR_NAME"] = av_name.getUserName();
+ LLSD payload;
+ LLNotificationsUtil::add("EjectGroupMemberWarning",
+ args,
+ payload,
+ boost::bind(&LLPanelGroupMembersSubTab::handleEjectCallback, this, _1, _2));
+ }
+ else
+ {
+ LLSD args;
+ args["COUNT"] = llformat("%d", selection_count);
+ LLSD payload;
+ LLNotificationsUtil::add("EjectGroupMembersWarning",
+ args,
+ payload,
+ boost::bind(&LLPanelGroupMembersSubTab::handleEjectCallback, this, _1, _2));
+ }
}
void LLPanelGroupMembersSubTab::handleEjectMembers()
{
- //send down an eject message
- uuid_vec_t selected_members;
+ //send down an eject message
+ uuid_vec_t selected_members;
- std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
- if (selection.empty()) return;
+ std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
+ if (selection.empty()) return;
- std::vector<LLScrollListItem*>::iterator itor;
- for (itor = selection.begin() ;
- itor != selection.end(); ++itor)
- {
- LLUUID member_id = (*itor)->getUUID();
- selected_members.push_back( member_id );
- }
+ std::vector<LLScrollListItem*>::iterator itor;
+ for (itor = selection.begin() ;
+ itor != selection.end(); ++itor)
+ {
+ LLUUID member_id = (*itor)->getUUID();
+ selected_members.push_back( member_id );
+ }
- mMembersList->deleteSelectedItems();
+ mMembersList->deleteSelectedItems();
- sendEjectNotifications(mGroupID, selected_members);
+ sendEjectNotifications(mGroupID, selected_members);
- LLGroupMgr::getInstance()->sendGroupMemberEjects(mGroupID, selected_members);
+ LLGroupMgr::getInstance()->sendGroupMemberEjects(mGroupID, selected_members);
}
bool LLPanelGroupMembersSubTab::handleEjectCallback(const LLSD& notification, const LLSD& response)
{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if (0 == option) // Eject button
- {
- handleEjectMembers();
- }
- return false;
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (0 == option) // Eject button
+ {
+ handleEjectMembers();
+ }
+ return false;
}
void LLPanelGroupMembersSubTab::sendEjectNotifications(const LLUUID& group_id, const uuid_vec_t& selected_members)
{
- LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(group_id);
+ LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(group_id);
- if (group_data)
- {
- for (uuid_vec_t::const_iterator i = selected_members.begin(); i != selected_members.end(); ++i)
- {
- LLSD args;
- args["AVATAR_NAME"] = LLSLURL("agent", *i, "completename").getSLURLString();
- args["GROUP_NAME"] = group_data->mName;
-
- LLNotifications::instance().add(LLNotification::Params("EjectAvatarFromGroup").substitutions(args));
- }
- }
+ if (group_data)
+ {
+ for (uuid_vec_t::const_iterator i = selected_members.begin(); i != selected_members.end(); ++i)
+ {
+ LLSD args;
+ args["AVATAR_NAME"] = LLSLURL("agent", *i, "completename").getSLURLString();
+ args["GROUP_NAME"] = group_data->mName;
+
+ LLNotifications::instance().add(LLNotification::Params("EjectAvatarFromGroup").substitutions(args));
+ }
+ }
}
void LLPanelGroupMembersSubTab::handleRoleCheck(const LLUUID& role_id,
- LLRoleMemberChangeType type)
-{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap) return;
-
- //add that the user is requesting to change the roles for selected
- //members
- U64 powers_all_have = GP_ALL_POWERS;
- U64 powers_some_have = 0;
-
- BOOL is_owner_role = ( gdatap->mOwnerRole == role_id );
- LLUUID member_id;
-
- std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
- if (selection.empty())
- {
- return;
- }
-
- for (std::vector<LLScrollListItem*>::iterator itor = selection.begin() ;
- itor != selection.end(); ++itor)
- {
- member_id = (*itor)->getUUID();
-
- //see if we requested a change for this member before
- if ( mMemberRoleChangeData.find(member_id) == mMemberRoleChangeData.end() )
- {
- mMemberRoleChangeData[member_id] = new role_change_data_map_t;
- }
- role_change_data_map_t* role_change_datap = mMemberRoleChangeData[member_id];
-
- //now check to see if the selected group member
- //had changed his association with the selected role before
-
- role_change_data_map_t::iterator role = role_change_datap->find(role_id);
- if ( role != role_change_datap->end() )
- {
- //see if the new change type cancels out the previous change
- if (role->second != type)
- {
- role_change_datap->erase(role_id);
- if ( is_owner_role ) mNumOwnerAdditions--;
- }
- //else do nothing
-
- if ( role_change_datap->empty() )
- {
- //the current member now has no role changes
- //so erase the role change and erase the member's entry
- delete role_change_datap;
+ LLRoleMemberChangeType type)
+{
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap) return;
+
+ //add that the user is requesting to change the roles for selected
+ //members
+ U64 powers_all_have = GP_ALL_POWERS;
+ U64 powers_some_have = 0;
+
+ BOOL is_owner_role = ( gdatap->mOwnerRole == role_id );
+ LLUUID member_id;
+
+ std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
+ if (selection.empty())
+ {
+ return;
+ }
+
+ for (std::vector<LLScrollListItem*>::iterator itor = selection.begin() ;
+ itor != selection.end(); ++itor)
+ {
+ member_id = (*itor)->getUUID();
+
+ //see if we requested a change for this member before
+ if ( mMemberRoleChangeData.find(member_id) == mMemberRoleChangeData.end() )
+ {
+ mMemberRoleChangeData[member_id] = new role_change_data_map_t;
+ }
+ role_change_data_map_t* role_change_datap = mMemberRoleChangeData[member_id];
+
+ //now check to see if the selected group member
+ //had changed his association with the selected role before
+
+ role_change_data_map_t::iterator role = role_change_datap->find(role_id);
+ if ( role != role_change_datap->end() )
+ {
+ //see if the new change type cancels out the previous change
+ if (role->second != type)
+ {
+ role_change_datap->erase(role_id);
+ if ( is_owner_role ) mNumOwnerAdditions--;
+ }
+ //else do nothing
+
+ if ( role_change_datap->empty() )
+ {
+ //the current member now has no role changes
+ //so erase the role change and erase the member's entry
+ delete role_change_datap;
role_change_datap = NULL;
- mMemberRoleChangeData.erase(member_id);
- }
- }
- else
- {
- //a previously unchanged role is being changed
- (*role_change_datap)[role_id] = type;
- if ( is_owner_role && type == RMC_ADD ) mNumOwnerAdditions++;
- }
-
- //we need to calculate what powers the selected members
- //have (including the role changes we're making)
- //so that we can rebuild the action list
- U64 new_powers = getAgentPowersBasedOnRoleChanges(member_id);
-
- powers_all_have &= new_powers;
- powers_some_have |= new_powers;
- }
-
-
- mChanged = !mMemberRoleChangeData.empty();
- notifyObservers();
-
- //alrighty now we need to update the actions list
- //to reflect the changes
- mAllowedActionsList->deleteAllItems();
- buildActionsList(mAllowedActionsList,
- powers_some_have,
- powers_all_have,
- NULL,
- FALSE,
- FALSE,
- FALSE);
-}
-
-// static
+ mMemberRoleChangeData.erase(member_id);
+ }
+ }
+ else
+ {
+ //a previously unchanged role is being changed
+ (*role_change_datap)[role_id] = type;
+ if ( is_owner_role && type == RMC_ADD ) mNumOwnerAdditions++;
+ }
+
+ //we need to calculate what powers the selected members
+ //have (including the role changes we're making)
+ //so that we can rebuild the action list
+ U64 new_powers = getAgentPowersBasedOnRoleChanges(member_id);
+
+ powers_all_have &= new_powers;
+ powers_some_have |= new_powers;
+ }
+
+
+ mChanged = !mMemberRoleChangeData.empty();
+ notifyObservers();
+
+ //alrighty now we need to update the actions list
+ //to reflect the changes
+ mAllowedActionsList->deleteAllItems();
+ buildActionsList(mAllowedActionsList,
+ powers_some_have,
+ powers_all_have,
+ NULL,
+ FALSE,
+ FALSE,
+ FALSE);
+}
+
+// static
void LLPanelGroupMembersSubTab::onRoleCheck(LLUICtrl* ctrl, void* user_data)
{
- LLPanelGroupMembersSubTab* self = static_cast<LLPanelGroupMembersSubTab*>(user_data);
- LLCheckBoxCtrl* check_box = static_cast<LLCheckBoxCtrl*>(ctrl);
- if (!check_box || !self) return;
+ LLPanelGroupMembersSubTab* self = static_cast<LLPanelGroupMembersSubTab*>(user_data);
+ LLCheckBoxCtrl* check_box = static_cast<LLCheckBoxCtrl*>(ctrl);
+ if (!check_box || !self) return;
+
+ LLScrollListItem* first_selected =
+ self->mAssignedRolesList->getFirstSelected();
+ if (first_selected)
+ {
+ LLUUID role_id = first_selected->getUUID();
+ LLRoleMemberChangeType change_type = (check_box->get() ?
+ RMC_ADD :
+ RMC_REMOVE);
- LLScrollListItem* first_selected =
- self->mAssignedRolesList->getFirstSelected();
- if (first_selected)
- {
- LLUUID role_id = first_selected->getUUID();
- LLRoleMemberChangeType change_type = (check_box->get() ?
- RMC_ADD :
- RMC_REMOVE);
-
- self->handleRoleCheck(role_id, change_type);
- }
+ self->handleRoleCheck(role_id, change_type);
+ }
}
void LLPanelGroupMembersSubTab::handleMemberDoubleClick()
{
- LLScrollListItem* selected = mMembersList->getFirstSelected();
- if (selected)
- {
- LLUUID member_id = selected->getUUID();
- LLAvatarActions::showProfile( member_id );
- }
+ LLScrollListItem* selected = mMembersList->getFirstSelected();
+ if (selected)
+ {
+ LLUUID member_id = selected->getUUID();
+ LLAvatarActions::showProfile( member_id );
+ }
}
void LLPanelGroupMembersSubTab::activate()
{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
-
- LLPanelGroupSubTab::activate();
- if(!mActivated)
- {
- if (!gdatap || !gdatap->isMemberDataComplete())
- {
- LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);
- }
-
- if (!gdatap || !gdatap->isRoleMemberDataComplete())
- {
- LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(mGroupID);
- }
-
- update(GC_ALL);
- mActivated = true;
- }
- else
- {
- // Members can be removed outside of this tab, checking changes
- if (!gdatap || (gdatap->isMemberDataComplete() && gdatap->mMembers.size() != mMembersList->getItemCount()))
- {
- update(GC_MEMBER_DATA);
- }
- }
- mActionDescription->clear();
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+
+ LLPanelGroupSubTab::activate();
+ if(!mActivated)
+ {
+ if (!gdatap || !gdatap->isMemberDataComplete())
+ {
+ LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);
+ }
+
+ if (!gdatap || !gdatap->isRoleMemberDataComplete())
+ {
+ LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(mGroupID);
+ }
+
+ update(GC_ALL);
+ mActivated = true;
+ }
+ else
+ {
+ // Members can be removed outside of this tab, checking changes
+ if (!gdatap || (gdatap->isMemberDataComplete() && gdatap->mMembers.size() != mMembersList->getItemCount()))
+ {
+ update(GC_MEMBER_DATA);
+ }
+ }
+ mActionDescription->clear();
}
void LLPanelGroupMembersSubTab::deactivate()
{
- LLPanelGroupSubTab::deactivate();
+ LLPanelGroupSubTab::deactivate();
}
bool LLPanelGroupMembersSubTab::needsApply(std::string& mesg)
{
- return mChanged;
+ return mChanged;
}
void LLPanelGroupMembersSubTab::cancel()
{
- if ( mChanged )
- {
- std::for_each(mMemberRoleChangeData.begin(),
- mMemberRoleChangeData.end(),
- DeletePairedPointer());
- mMemberRoleChangeData.clear();
+ if ( mChanged )
+ {
+ std::for_each(mMemberRoleChangeData.begin(),
+ mMemberRoleChangeData.end(),
+ DeletePairedPointer());
+ mMemberRoleChangeData.clear();
- mChanged = FALSE;
- notifyObservers();
- }
+ mChanged = FALSE;
+ notifyObservers();
+ }
}
bool LLPanelGroupMembersSubTab::apply(std::string& mesg)
{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "Unable to get group data for group " << mGroupID << LL_ENDL;
-
- mesg.assign("Unable to save member data. Try again later.");
- return false;
- }
-
- if (mChanged)
- {
- //figure out if we are somehow adding an owner or not and alert
- //the user...possibly make it ignorable
- if ( mNumOwnerAdditions > 0 )
- {
- LLRoleData rd;
- LLSD args;
-
- if ( gdatap->getRoleData(gdatap->mOwnerRole, rd) )
- {
- mHasModal = TRUE;
- args["ROLE_NAME"] = rd.mRoleName;
- LLNotificationsUtil::add("AddGroupOwnerWarning",
- args,
- LLSD(),
- boost::bind(&LLPanelGroupMembersSubTab::addOwnerCB, this, _1, _2));
- }
- else
- {
- LL_WARNS() << "Unable to get role information for the owner role in group " << mGroupID << LL_ENDL;
-
- mesg.assign("Unable to retried specific group information. Try again later");
- return false;
- }
-
- }
- else
- {
- applyMemberChanges();
- }
- }
-
- return true;
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "Unable to get group data for group " << mGroupID << LL_ENDL;
+
+ mesg.assign("Unable to save member data. Try again later.");
+ return false;
+ }
+
+ if (mChanged)
+ {
+ //figure out if we are somehow adding an owner or not and alert
+ //the user...possibly make it ignorable
+ if ( mNumOwnerAdditions > 0 )
+ {
+ LLRoleData rd;
+ LLSD args;
+
+ if ( gdatap->getRoleData(gdatap->mOwnerRole, rd) )
+ {
+ mHasModal = TRUE;
+ args["ROLE_NAME"] = rd.mRoleName;
+ LLNotificationsUtil::add("AddGroupOwnerWarning",
+ args,
+ LLSD(),
+ boost::bind(&LLPanelGroupMembersSubTab::addOwnerCB, this, _1, _2));
+ }
+ else
+ {
+ LL_WARNS() << "Unable to get role information for the owner role in group " << mGroupID << LL_ENDL;
+
+ mesg.assign("Unable to retried specific group information. Try again later");
+ return false;
+ }
+
+ }
+ else
+ {
+ applyMemberChanges();
+ }
+ }
+
+ return true;
}
bool LLPanelGroupMembersSubTab::addOwnerCB(const LLSD& notification, const LLSD& response)
{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- mHasModal = FALSE;
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ mHasModal = FALSE;
- if (0 == option)
- {
- // User clicked "Yes"
- applyMemberChanges();
- }
- return false;
+ if (0 == option)
+ {
+ // User clicked "Yes"
+ applyMemberChanges();
+ }
+ return false;
}
void LLPanelGroupMembersSubTab::applyMemberChanges()
{
- //sucks to do a find again here, but it is in constant time, so, could
- //be worse
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "Unable to get group data for group " << mGroupID << LL_ENDL;
- return;
- }
-
- //we need to add all of the changed roles data
- //for each member whose role changed
- for (member_role_changes_map_t::iterator member = mMemberRoleChangeData.begin();
- member != mMemberRoleChangeData.end(); ++member)
- {
- for (role_change_data_map_t::iterator role = member->second->begin();
- role != member->second->end(); ++role)
- {
- gdatap->changeRoleMember(role->first, //role_id
- member->first, //member_id
- role->second); //add/remove
- }
-
- member->second->clear();
- delete member->second;
- }
- mMemberRoleChangeData.clear();
-
- LLGroupMgr::getInstance()->sendGroupRoleMemberChanges(mGroupID);
- //force a UI update
- handleMemberSelect();
-
- mChanged = FALSE;
- mNumOwnerAdditions = 0;
- notifyObservers();
+ //sucks to do a find again here, but it is in constant time, so, could
+ //be worse
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "Unable to get group data for group " << mGroupID << LL_ENDL;
+ return;
+ }
+
+ //we need to add all of the changed roles data
+ //for each member whose role changed
+ for (member_role_changes_map_t::iterator member = mMemberRoleChangeData.begin();
+ member != mMemberRoleChangeData.end(); ++member)
+ {
+ for (role_change_data_map_t::iterator role = member->second->begin();
+ role != member->second->end(); ++role)
+ {
+ gdatap->changeRoleMember(role->first, //role_id
+ member->first, //member_id
+ role->second); //add/remove
+ }
+
+ member->second->clear();
+ delete member->second;
+ }
+ mMemberRoleChangeData.clear();
+
+ LLGroupMgr::getInstance()->sendGroupRoleMemberChanges(mGroupID);
+ //force a UI update
+ handleMemberSelect();
+
+ mChanged = FALSE;
+ mNumOwnerAdditions = 0;
+ notifyObservers();
}
bool LLPanelGroupMembersSubTab::matchesSearchFilter(const std::string& fullname)
{
- // If the search filter is empty, everything passes.
- if (mSearchFilter.empty()) return true;
+ // If the search filter is empty, everything passes.
+ if (mSearchFilter.empty()) return true;
- // Create a full name, and compare it to the search filter.
- std::string fullname_lc(fullname);
- LLStringUtil::toLower(fullname_lc);
+ // Create a full name, and compare it to the search filter.
+ std::string fullname_lc(fullname);
+ LLStringUtil::toLower(fullname_lc);
- std::string::size_type match = fullname_lc.find(mSearchFilter);
+ std::string::size_type match = fullname_lc.find(mSearchFilter);
- if (std::string::npos == match)
- {
- // not found
- return false;
- }
- else
- {
- return true;
- }
+ if (std::string::npos == match)
+ {
+ // not found
+ return false;
+ }
+ else
+ {
+ return true;
+ }
}
U64 LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges(const LLUUID& agent_id)
{
- //we loop over all of the changes
- //if we are adding a role, then we simply add the role's powers
- //if we are removing a role, we store that role id away
- //and then we have to build the powers up bases on the roles the agent
- //is in
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- No group data!" << LL_ENDL;
- return GP_NO_POWERS;
- }
-
- LLGroupMgrGroupData::member_list_t::iterator iter = gdatap->mMembers.find(agent_id);
- if ( iter == gdatap->mMembers.end() )
- {
- LL_WARNS() << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- No member data for member with UUID " << agent_id << LL_ENDL;
- return GP_NO_POWERS;
- }
-
- LLGroupMemberData* member_data = (*iter).second;
- if (!member_data)
- {
- LL_WARNS() << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- Null member data for member with UUID " << agent_id << LL_ENDL;
- return GP_NO_POWERS;
- }
-
- //see if there are unsaved role changes for this agent
- role_change_data_map_t* role_change_datap = NULL;
- member_role_changes_map_t::iterator member = mMemberRoleChangeData.find(agent_id);
- if ( member != mMemberRoleChangeData.end() )
- {
- //this member has unsaved role changes
- //so grab them
- role_change_datap = (*member).second;
- }
-
- U64 new_powers = GP_NO_POWERS;
-
- if ( role_change_datap )
- {
- uuid_vec_t roles_to_be_removed;
-
- for (role_change_data_map_t::iterator role = role_change_datap->begin();
- role != role_change_datap->end(); ++ role)
- {
- if ( role->second == RMC_ADD )
- {
- new_powers |= gdatap->getRolePowers(role->first);
- }
- else
- {
- roles_to_be_removed.push_back(role->first);
- }
- }
-
- //loop over the member's current roles, summing up
- //the powers (not including the role we are removing)
- for (LLGroupMemberData::role_list_t::iterator current_role = member_data->roleBegin();
- current_role != member_data->roleEnd(); ++current_role)
- {
- bool role_in_remove_list =
- (std::find(roles_to_be_removed.begin(),
- roles_to_be_removed.end(),
- current_role->second->getID()) !=
- roles_to_be_removed.end());
-
- if ( !role_in_remove_list )
- {
- new_powers |=
- current_role->second->getRoleData().mRolePowers;
- }
- }
- }
- else
- {
- //there are no changes for this member
- //the member's powers are just the ones stored in the group
- //manager
- new_powers = member_data->getAgentPowers();
- }
-
- return new_powers;
+ //we loop over all of the changes
+ //if we are adding a role, then we simply add the role's powers
+ //if we are removing a role, we store that role id away
+ //and then we have to build the powers up bases on the roles the agent
+ //is in
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- No group data!" << LL_ENDL;
+ return GP_NO_POWERS;
+ }
+
+ LLGroupMgrGroupData::member_list_t::iterator iter = gdatap->mMembers.find(agent_id);
+ if ( iter == gdatap->mMembers.end() )
+ {
+ LL_WARNS() << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- No member data for member with UUID " << agent_id << LL_ENDL;
+ return GP_NO_POWERS;
+ }
+
+ LLGroupMemberData* member_data = (*iter).second;
+ if (!member_data)
+ {
+ LL_WARNS() << "LLPanelGroupMembersSubTab::getAgentPowersBasedOnRoleChanges() -- Null member data for member with UUID " << agent_id << LL_ENDL;
+ return GP_NO_POWERS;
+ }
+
+ //see if there are unsaved role changes for this agent
+ role_change_data_map_t* role_change_datap = NULL;
+ member_role_changes_map_t::iterator member = mMemberRoleChangeData.find(agent_id);
+ if ( member != mMemberRoleChangeData.end() )
+ {
+ //this member has unsaved role changes
+ //so grab them
+ role_change_datap = (*member).second;
+ }
+
+ U64 new_powers = GP_NO_POWERS;
+
+ if ( role_change_datap )
+ {
+ uuid_vec_t roles_to_be_removed;
+
+ for (role_change_data_map_t::iterator role = role_change_datap->begin();
+ role != role_change_datap->end(); ++ role)
+ {
+ if ( role->second == RMC_ADD )
+ {
+ new_powers |= gdatap->getRolePowers(role->first);
+ }
+ else
+ {
+ roles_to_be_removed.push_back(role->first);
+ }
+ }
+
+ //loop over the member's current roles, summing up
+ //the powers (not including the role we are removing)
+ for (LLGroupMemberData::role_list_t::iterator current_role = member_data->roleBegin();
+ current_role != member_data->roleEnd(); ++current_role)
+ {
+ bool role_in_remove_list =
+ (std::find(roles_to_be_removed.begin(),
+ roles_to_be_removed.end(),
+ current_role->second->getID()) !=
+ roles_to_be_removed.end());
+
+ if ( !role_in_remove_list )
+ {
+ new_powers |=
+ current_role->second->getRoleData().mRolePowers;
+ }
+ }
+ }
+ else
+ {
+ //there are no changes for this member
+ //the member's powers are just the ones stored in the group
+ //manager
+ new_powers = member_data->getAgentPowers();
+ }
+
+ return new_powers;
}
//If there is no change, returns false be sure to verify
//that there is a role change before attempting to get it or else
//the data will make no sense. Stores the role change type
bool LLPanelGroupMembersSubTab::getRoleChangeType(const LLUUID& member_id,
- const LLUUID& role_id,
- LLRoleMemberChangeType& type)
+ const LLUUID& role_id,
+ LLRoleMemberChangeType& type)
{
- member_role_changes_map_t::iterator member_changes_iter = mMemberRoleChangeData.find(member_id);
- if ( member_changes_iter != mMemberRoleChangeData.end() )
- {
- role_change_data_map_t::iterator role_changes_iter = member_changes_iter->second->find(role_id);
- if ( role_changes_iter != member_changes_iter->second->end() )
- {
- type = role_changes_iter->second;
- return true;
- }
- }
+ member_role_changes_map_t::iterator member_changes_iter = mMemberRoleChangeData.find(member_id);
+ if ( member_changes_iter != mMemberRoleChangeData.end() )
+ {
+ role_change_data_map_t::iterator role_changes_iter = member_changes_iter->second->find(role_id);
+ if ( role_changes_iter != member_changes_iter->second->end() )
+ {
+ type = role_changes_iter->second;
+ return true;
+ }
+ }
- return false;
+ return false;
}
void LLPanelGroupMembersSubTab::draw()
{
- LLPanelGroupSubTab::draw();
+ LLPanelGroupSubTab::draw();
- if (mPendingMemberUpdate)
- {
- updateMembers();
- }
+ if (mPendingMemberUpdate)
+ {
+ updateMembers();
+ }
}
void LLPanelGroupMembersSubTab::update(LLGroupChange gc)
{
- if (mGroupID.isNull()) return;
-
- if ( GC_TITLES == gc || GC_PROPERTIES == gc )
- {
- // Don't care about title or general group properties updates.
- return;
- }
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "LLPanelGroupMembersSubTab::update() -- No group data!" << LL_ENDL;
- return;
- }
-
- // Wait for both all data to be retrieved before displaying anything.
- if ( gdatap->isMemberDataComplete()
- && gdatap->isRoleDataComplete()
- && gdatap->isRoleMemberDataComplete())
- {
- mMemberProgress = gdatap->mMembers.begin();
- mPendingMemberUpdate = TRUE;
- mHasMatch = FALSE;
- }
- else
- {
- // Build a string with info on retrieval progress.
- std::ostringstream retrieved;
-
- if ( gdatap->isRoleDataComplete() && gdatap->isMemberDataComplete() && !gdatap->mMembers.size() )
- {
- // MAINT-5237
- retrieved << "Member list not available.";
- }
- else if ( !gdatap->isMemberDataComplete() )
- {
- // Still busy retreiving member list.
- retrieved << "Retrieving member list (" << gdatap->mMembers.size()
- << " / " << gdatap->mMemberCount << ")...";
- }
- else if( !gdatap->isRoleDataComplete() )
- {
- // Still busy retreiving role list.
- retrieved << "Retrieving role list (" << gdatap->mRoles.size()
- << " / " << gdatap->mRoleCount << ")...";
- }
- else // (!gdatap->isRoleMemberDataComplete())
- {
- // Still busy retreiving role/member mappings.
- retrieved << "Retrieving role member mappings...";
- }
- mMembersList->setEnabled(FALSE);
- mMembersList->setCommentText(retrieved.str());
- }
+ if (mGroupID.isNull()) return;
+
+ if ( GC_TITLES == gc || GC_PROPERTIES == gc )
+ {
+ // Don't care about title or general group properties updates.
+ return;
+ }
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "LLPanelGroupMembersSubTab::update() -- No group data!" << LL_ENDL;
+ return;
+ }
+
+ // Wait for both all data to be retrieved before displaying anything.
+ if ( gdatap->isMemberDataComplete()
+ && gdatap->isRoleDataComplete()
+ && gdatap->isRoleMemberDataComplete())
+ {
+ mMemberProgress = gdatap->mMembers.begin();
+ mPendingMemberUpdate = TRUE;
+ mHasMatch = FALSE;
+ }
+ else
+ {
+ // Build a string with info on retrieval progress.
+ std::ostringstream retrieved;
+
+ if ( gdatap->isRoleDataComplete() && gdatap->isMemberDataComplete() && !gdatap->mMembers.size() )
+ {
+ // MAINT-5237
+ retrieved << "Member list not available.";
+ }
+ else if ( !gdatap->isMemberDataComplete() )
+ {
+ // Still busy retreiving member list.
+ retrieved << "Retrieving member list (" << gdatap->mMembers.size()
+ << " / " << gdatap->mMemberCount << ")...";
+ }
+ else if( !gdatap->isRoleDataComplete() )
+ {
+ // Still busy retreiving role list.
+ retrieved << "Retrieving role list (" << gdatap->mRoles.size()
+ << " / " << gdatap->mRoleCount << ")...";
+ }
+ else // (!gdatap->isRoleMemberDataComplete())
+ {
+ // Still busy retreiving role/member mappings.
+ retrieved << "Retrieving role member mappings...";
+ }
+ mMembersList->setEnabled(FALSE);
+ mMembersList->setCommentText(retrieved.str());
+ }
}
void LLPanelGroupMembersSubTab::addMemberToList(LLGroupMemberData* data)
{
- if (!data) return;
- LLUIString donated = getString("donation_area");
- donated.setArg("[AREA]", llformat("%d", data->getContribution()));
+ if (!data) return;
+ LLUIString donated = getString("donation_area");
+ donated.setArg("[AREA]", llformat("%d", data->getContribution()));
- LLNameListCtrl::NameItem item_params;
- item_params.value = data->getID();
+ LLNameListCtrl::NameItem item_params;
+ item_params.value = data->getID();
- item_params.columns.add().column("name").font.name("SANSSERIF_SMALL").style("NORMAL");
+ item_params.columns.add().column("name").font.name("SANSSERIF_SMALL").style("NORMAL");
- item_params.columns.add().column("donated").value(donated.getString())
- .font.name("SANSSERIF_SMALL").style("NORMAL");
+ item_params.columns.add().column("donated").value(donated.getString())
+ .font.name("SANSSERIF_SMALL").style("NORMAL");
- item_params.columns.add().column("online").value(data->getOnlineStatus())
- .font.name("SANSSERIF_SMALL").style("NORMAL");
+ 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");;
+ item_params.columns.add().column("title").value(data->getTitle()).font.name("SANSSERIF_SMALL").style("NORMAL");;
- mMembersList->addNameItemRow(item_params);
+ mMembersList->addNameItemRow(item_params);
- mHasMatch = TRUE;
+ mHasMatch = TRUE;
}
void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name, const LLUUID& av_id)
{
- avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(av_id);
- if (it != mAvatarNameCacheConnections.end())
- {
- if (it->second.connected())
- {
- it->second.disconnect();
- }
- mAvatarNameCacheConnections.erase(it);
- }
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap
- || gdatap->getMemberVersion() != update_id
- || !member)
- {
- return;
- }
-
- // trying to avoid unnecessary hash lookups
- if (matchesSearchFilter(av_name.getAccountName()))
- {
- addMemberToList(member);
- if(!mMembersList->getEnabled())
- {
- mMembersList->setEnabled(TRUE);
- }
- }
-
+ avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(av_id);
+ if (it != mAvatarNameCacheConnections.end())
+ {
+ if (it->second.connected())
+ {
+ it->second.disconnect();
+ }
+ mAvatarNameCacheConnections.erase(it);
+ }
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap
+ || gdatap->getMemberVersion() != update_id
+ || !member)
+ {
+ return;
+ }
+
+ // trying to avoid unnecessary hash lookups
+ if (matchesSearchFilter(av_name.getAccountName()))
+ {
+ addMemberToList(member);
+ if(!mMembersList->getEnabled())
+ {
+ mMembersList->setEnabled(TRUE);
+ }
+ }
+
}
void LLPanelGroupMembersSubTab::updateMembers()
{
- mPendingMemberUpdate = FALSE;
-
- // Rebuild the members list.
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "LLPanelGroupMembersSubTab::updateMembers() -- No group data!" << LL_ENDL;
- return;
- }
-
- // Make sure all data is still complete. Incomplete data
- // may occur if we refresh.
- if ( !gdatap->isMemberDataComplete()
- || !gdatap->isRoleDataComplete()
- || !gdatap->isRoleMemberDataComplete())
- {
- return;
- }
-
- //cleanup list only for first iteration
- if(mMemberProgress == gdatap->mMembers.begin())
- {
- mMembersList->deleteAllItems();
- }
-
- LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end();
-
- LLTimer update_time;
- update_time.setTimerExpirySec(UPDATE_MEMBERS_SECONDS_PER_FRAME);
-
- for( ; mMemberProgress != end && !update_time.hasExpired(); ++mMemberProgress)
- {
- if (!mMemberProgress->second)
- continue;
-
- // Do filtering on name if it is already in the cache.
- LLAvatarName av_name;
- if (LLAvatarNameCache::get(mMemberProgress->first, &av_name))
- {
- if (matchesSearchFilter(av_name.getAccountName()))
- {
- addMemberToList(mMemberProgress->second);
- }
- }
- else
- {
- // If name is not cached, onNameCache() should be called when it is cached and add this member to list.
- avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(mMemberProgress->first);
- if (it != mAvatarNameCacheConnections.end())
- {
- if (it->second.connected())
- {
- it->second.disconnect();
- }
- mAvatarNameCacheConnections.erase(it);
- }
- mAvatarNameCacheConnections[mMemberProgress->first] = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, this, gdatap->getMemberVersion(), mMemberProgress->second, _2, _1));
- }
- }
-
- if (mMemberProgress == end)
- {
- if (mHasMatch)
- {
- mMembersList->setEnabled(TRUE);
- }
- else if (gdatap->mMembers.size())
- {
- mMembersList->setEnabled(FALSE);
- mMembersList->setCommentText(std::string("No match."));
- }
- }
- else
- {
- mPendingMemberUpdate = TRUE;
- }
-
- // This should clear the other two lists, since nothing is selected.
- handleMemberSelect();
+ mPendingMemberUpdate = FALSE;
+
+ // Rebuild the members list.
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "LLPanelGroupMembersSubTab::updateMembers() -- No group data!" << LL_ENDL;
+ return;
+ }
+
+ // Make sure all data is still complete. Incomplete data
+ // may occur if we refresh.
+ if ( !gdatap->isMemberDataComplete()
+ || !gdatap->isRoleDataComplete()
+ || !gdatap->isRoleMemberDataComplete())
+ {
+ return;
+ }
+
+ //cleanup list only for first iteration
+ if(mMemberProgress == gdatap->mMembers.begin())
+ {
+ mMembersList->deleteAllItems();
+ }
+
+ LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end();
+
+ LLTimer update_time;
+ update_time.setTimerExpirySec(UPDATE_MEMBERS_SECONDS_PER_FRAME);
+
+ for( ; mMemberProgress != end && !update_time.hasExpired(); ++mMemberProgress)
+ {
+ if (!mMemberProgress->second)
+ continue;
+
+ // Do filtering on name if it is already in the cache.
+ LLAvatarName av_name;
+ if (LLAvatarNameCache::get(mMemberProgress->first, &av_name))
+ {
+ if (matchesSearchFilter(av_name.getAccountName()))
+ {
+ addMemberToList(mMemberProgress->second);
+ }
+ }
+ else
+ {
+ // If name is not cached, onNameCache() should be called when it is cached and add this member to list.
+ avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(mMemberProgress->first);
+ if (it != mAvatarNameCacheConnections.end())
+ {
+ if (it->second.connected())
+ {
+ it->second.disconnect();
+ }
+ mAvatarNameCacheConnections.erase(it);
+ }
+ mAvatarNameCacheConnections[mMemberProgress->first] = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, this, gdatap->getMemberVersion(), mMemberProgress->second, _2, _1));
+ }
+ }
+
+ if (mMemberProgress == end)
+ {
+ if (mHasMatch)
+ {
+ mMembersList->setEnabled(TRUE);
+ }
+ else if (gdatap->mMembers.size())
+ {
+ mMembersList->setEnabled(FALSE);
+ mMembersList->setCommentText(std::string("No match."));
+ }
+ }
+ else
+ {
+ mPendingMemberUpdate = TRUE;
+ }
+
+ // This should clear the other two lists, since nothing is selected.
+ handleMemberSelect();
}
void LLPanelGroupMembersSubTab::onBanMember(void* user_data)
{
- LLPanelGroupMembersSubTab* self = static_cast<LLPanelGroupMembersSubTab*>(user_data);
- self->confirmBanMembers();
+ LLPanelGroupMembersSubTab* self = static_cast<LLPanelGroupMembersSubTab*>(user_data);
+ self->confirmBanMembers();
}
void LLPanelGroupMembersSubTab::confirmBanMembers()
{
- std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
- if (selection.empty()) return;
-
- S32 selection_count = selection.size();
- if (selection_count == 1)
- {
- LLSD args;
- LLAvatarName av_name;
- LLAvatarNameCache::get(mMembersList->getValue(), &av_name);
- args["AVATAR_NAME"] = av_name.getUserName();
- LLSD payload;
- LLNotificationsUtil::add("BanGroupMemberWarning",
- args,
- payload,
- boost::bind(&LLPanelGroupMembersSubTab::handleBanCallback, this, _1, _2));
- }
- else
- {
- LLSD args;
- args["COUNT"] = llformat("%d", selection_count);
- LLSD payload;
- LLNotificationsUtil::add("BanGroupMembersWarning",
- args,
- payload,
- boost::bind(&LLPanelGroupMembersSubTab::handleBanCallback, this, _1, _2));
- }
+ std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
+ if (selection.empty()) return;
+
+ S32 selection_count = selection.size();
+ if (selection_count == 1)
+ {
+ LLSD args;
+ LLAvatarName av_name;
+ LLAvatarNameCache::get(mMembersList->getValue(), &av_name);
+ args["AVATAR_NAME"] = av_name.getUserName();
+ LLSD payload;
+ LLNotificationsUtil::add("BanGroupMemberWarning",
+ args,
+ payload,
+ boost::bind(&LLPanelGroupMembersSubTab::handleBanCallback, this, _1, _2));
+ }
+ else
+ {
+ LLSD args;
+ args["COUNT"] = llformat("%d", selection_count);
+ LLSD payload;
+ LLNotificationsUtil::add("BanGroupMembersWarning",
+ args,
+ payload,
+ boost::bind(&LLPanelGroupMembersSubTab::handleBanCallback, this, _1, _2));
+ }
}
bool LLPanelGroupMembersSubTab::handleBanCallback(const LLSD& notification, const LLSD& response)
{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if (0 == option) // Eject button
- {
- handleBanMember();
- }
- return false;
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (0 == option) // Eject button
+ {
+ handleBanMember();
+ }
+ return false;
}
void LLPanelGroupMembersSubTab::updateActionDescription()
{
- mActionDescription->setText(std::string());
- LLScrollListItem* action_item = mAllowedActionsList->getFirstSelected();
- if (!action_item || !mAllowedActionsList->getCanSelect())
- {
- return;
- }
+ mActionDescription->setText(std::string());
+ LLScrollListItem* action_item = mAllowedActionsList->getFirstSelected();
+ if (!action_item || !mAllowedActionsList->getCanSelect())
+ {
+ return;
+ }
- LLRoleAction* rap = (LLRoleAction*)action_item->getUserdata();
- if (rap)
- {
- std::string desc = rap->mLongDescription.empty() ? rap->mDescription : rap->mLongDescription;
- mActionDescription->setText(desc);
- }
+ LLRoleAction* rap = (LLRoleAction*)action_item->getUserdata();
+ if (rap)
+ {
+ std::string desc = rap->mLongDescription.empty() ? rap->mDescription : rap->mLongDescription;
+ mActionDescription->setText(desc);
+ }
}
void LLPanelGroupMembersSubTab::handleBanMember()
{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if(!gdatap)
- {
- LL_WARNS("Groups") << "Unable to get group data for group " << mGroupID << LL_ENDL;
- return;
- }
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if(!gdatap)
+ {
+ LL_WARNS("Groups") << "Unable to get group data for group " << mGroupID << LL_ENDL;
+ return;
+ }
+
+ std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
+ if(selection.empty())
+ {
+ return;
+ }
- std::vector<LLScrollListItem*> selection = mMembersList->getAllSelected();
- if(selection.empty())
- {
- return;
- }
+ uuid_vec_t ban_ids;
+ std::vector<LLScrollListItem*>::iterator itor;
+ for(itor = selection.begin(); itor != selection.end(); ++itor)
+ {
+ LLUUID ban_id = (*itor)->getUUID();
+ ban_ids.push_back(ban_id);
- uuid_vec_t ban_ids;
- std::vector<LLScrollListItem*>::iterator itor;
- for(itor = selection.begin(); itor != selection.end(); ++itor)
- {
- LLUUID ban_id = (*itor)->getUUID();
- ban_ids.push_back(ban_id);
-
- LLGroupBanData ban_data;
- gdatap->createBanEntry(ban_id, ban_data);
- }
+ LLGroupBanData ban_data;
+ gdatap->createBanEntry(ban_id, ban_data);
+ }
- LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_POST, mGroupID, LLGroupMgr::BAN_CREATE, ban_ids);
- handleEjectMembers();
+ LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_POST, mGroupID, LLGroupMgr::BAN_CREATE, ban_ids);
+ handleEjectMembers();
}
@@ -1954,18 +1954,18 @@ static LLPanelInjector<LLPanelGroupRolesSubTab> t_panel_group_roles_subtab("pane
LLPanelGroupRolesSubTab::LLPanelGroupRolesSubTab()
: LLPanelGroupSubTab(),
- mRolesList(NULL),
- mAssignedMembersList(NULL),
- mAllowedActionsList(NULL),
- mRoleName(NULL),
- mRoleTitle(NULL),
- mRoleDescription(NULL),
- mMemberVisibleCheck(NULL),
- mDeleteRoleButton(NULL),
- mCopyRoleButton(NULL),
- mCreateRoleButton(NULL),
- mFirstOpen(TRUE),
- mHasRoleChange(FALSE)
+ mRolesList(NULL),
+ mAssignedMembersList(NULL),
+ mAllowedActionsList(NULL),
+ mRoleName(NULL),
+ mRoleTitle(NULL),
+ mRoleDescription(NULL),
+ mMemberVisibleCheck(NULL),
+ mDeleteRoleButton(NULL),
+ mCopyRoleButton(NULL),
+ mCreateRoleButton(NULL),
+ mFirstOpen(TRUE),
+ mHasRoleChange(FALSE)
{
}
@@ -1975,859 +1975,859 @@ LLPanelGroupRolesSubTab::~LLPanelGroupRolesSubTab()
BOOL LLPanelGroupRolesSubTab::postBuildSubTab(LLView* root)
{
- LLPanelGroupSubTab::postBuildSubTab(root);
+ LLPanelGroupSubTab::postBuildSubTab(root);
- // Upcast parent so we can ask it for sibling controls.
- LLPanelGroupRoles* parent = (LLPanelGroupRoles*) root;
+ // Upcast parent so we can ask it for sibling controls.
+ LLPanelGroupRoles* parent = (LLPanelGroupRoles*) root;
- // Look recursively from the parent to find all our widgets.
- bool recurse = true;
- mHeader = parent->findChild<LLPanel>("roles_header", recurse);
- mFooter = parent->findChild<LLPanel>("roles_footer", recurse);
+ // Look recursively from the parent to find all our widgets.
+ bool recurse = true;
+ mHeader = parent->findChild<LLPanel>("roles_header", recurse);
+ mFooter = parent->findChild<LLPanel>("roles_footer", recurse);
- mRolesList = parent->getChild<LLScrollListCtrl>("role_list", recurse);
- mAssignedMembersList = parent->getChild<LLNameListCtrl>("role_assigned_members", recurse);
- mAllowedActionsList = parent->getChild<LLScrollListCtrl>("role_allowed_actions", recurse);
- mActionDescription = parent->getChild<LLTextEditor>("role_action_description", recurse);
+ mRolesList = parent->getChild<LLScrollListCtrl>("role_list", recurse);
+ mAssignedMembersList = parent->getChild<LLNameListCtrl>("role_assigned_members", recurse);
+ mAllowedActionsList = parent->getChild<LLScrollListCtrl>("role_allowed_actions", recurse);
+ mActionDescription = parent->getChild<LLTextEditor>("role_action_description", recurse);
- mRoleName = parent->getChild<LLLineEditor>("role_name", recurse);
- mRoleTitle = parent->getChild<LLLineEditor>("role_title", recurse);
- mRoleDescription = parent->getChild<LLTextEditor>("role_description", recurse);
+ mRoleName = parent->getChild<LLLineEditor>("role_name", recurse);
+ mRoleTitle = parent->getChild<LLLineEditor>("role_title", recurse);
+ mRoleDescription = parent->getChild<LLTextEditor>("role_description", recurse);
- mMemberVisibleCheck = parent->getChild<LLCheckBoxCtrl>("role_visible_in_list", recurse);
+ mMemberVisibleCheck = parent->getChild<LLCheckBoxCtrl>("role_visible_in_list", recurse);
- if (!mRolesList || !mAssignedMembersList || !mAllowedActionsList || !mActionDescription
- || !mRoleName || !mRoleTitle || !mRoleDescription || !mMemberVisibleCheck)
- {
- LL_WARNS() << "ARG! element not found." << LL_ENDL;
- return FALSE;
- }
+ if (!mRolesList || !mAssignedMembersList || !mAllowedActionsList || !mActionDescription
+ || !mRoleName || !mRoleTitle || !mRoleDescription || !mMemberVisibleCheck)
+ {
+ LL_WARNS() << "ARG! element not found." << LL_ENDL;
+ return FALSE;
+ }
- mRemoveEveryoneTxt = getString("cant_delete_role");
+ mRemoveEveryoneTxt = getString("cant_delete_role");
- mCreateRoleButton =
- parent->getChild<LLButton>("role_create", recurse);
- if ( mCreateRoleButton )
- {
- mCreateRoleButton->setClickedCallback(onCreateRole, this);
- mCreateRoleButton->setEnabled(FALSE);
- }
+ mCreateRoleButton =
+ parent->getChild<LLButton>("role_create", recurse);
+ if ( mCreateRoleButton )
+ {
+ mCreateRoleButton->setClickedCallback(onCreateRole, this);
+ mCreateRoleButton->setEnabled(FALSE);
+ }
- mCopyRoleButton =
- parent->getChild<LLButton>("role_copy", recurse);
- if ( mCopyRoleButton )
- {
- mCopyRoleButton->setClickedCallback(onCopyRole, this);
- mCopyRoleButton->setEnabled(FALSE);
- }
-
- mDeleteRoleButton =
- parent->getChild<LLButton>("role_delete", recurse);
- if ( mDeleteRoleButton )
- {
- mDeleteRoleButton->setClickedCallback(onDeleteRole, this);
- mDeleteRoleButton->setEnabled(FALSE);
- }
+ mCopyRoleButton =
+ parent->getChild<LLButton>("role_copy", recurse);
+ if ( mCopyRoleButton )
+ {
+ mCopyRoleButton->setClickedCallback(onCopyRole, this);
+ mCopyRoleButton->setEnabled(FALSE);
+ }
- mRolesList->setCommitOnSelectionChange(TRUE);
- mRolesList->setCommitCallback(onRoleSelect, this);
+ mDeleteRoleButton =
+ parent->getChild<LLButton>("role_delete", recurse);
+ if ( mDeleteRoleButton )
+ {
+ mDeleteRoleButton->setClickedCallback(onDeleteRole, this);
+ mDeleteRoleButton->setEnabled(FALSE);
+ }
- mAssignedMembersList->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
+ mRolesList->setCommitOnSelectionChange(TRUE);
+ mRolesList->setCommitCallback(onRoleSelect, this);
- mMemberVisibleCheck->setCommitCallback(onMemberVisibilityChange, this);
+ mAssignedMembersList->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
- mAllowedActionsList->setCommitOnSelectionChange(TRUE);
- mAllowedActionsList->setCommitCallback(boost::bind(&LLPanelGroupRolesSubTab::updateActionDescription, this));
+ mMemberVisibleCheck->setCommitCallback(onMemberVisibilityChange, this);
- mRoleName->setCommitOnFocusLost(TRUE);
- mRoleName->setKeystrokeCallback(onPropertiesKey, this);
+ mAllowedActionsList->setCommitOnSelectionChange(TRUE);
+ mAllowedActionsList->setCommitCallback(boost::bind(&LLPanelGroupRolesSubTab::updateActionDescription, this));
- mRoleTitle->setCommitOnFocusLost(TRUE);
- mRoleTitle->setKeystrokeCallback(onPropertiesKey, this);
+ mRoleName->setCommitOnFocusLost(TRUE);
+ mRoleName->setKeystrokeCallback(onPropertiesKey, this);
- mRoleDescription->setCommitOnFocusLost(TRUE);
- mRoleDescription->setKeystrokeCallback(boost::bind(&LLPanelGroupRolesSubTab::onDescriptionKeyStroke, this, _1));
+ mRoleTitle->setCommitOnFocusLost(TRUE);
+ mRoleTitle->setKeystrokeCallback(onPropertiesKey, this);
- setFooterEnabled(FALSE);
+ mRoleDescription->setCommitOnFocusLost(TRUE);
+ mRoleDescription->setKeystrokeCallback(boost::bind(&LLPanelGroupRolesSubTab::onDescriptionKeyStroke, this, _1));
- return TRUE;
+ setFooterEnabled(FALSE);
+
+ return TRUE;
}
void LLPanelGroupRolesSubTab::activate()
{
- LLPanelGroupSubTab::activate();
+ LLPanelGroupSubTab::activate();
- mActionDescription->clear();
- mRolesList->deselectAllItems();
- mAssignedMembersList->deleteAllItems();
- mAllowedActionsList->deleteAllItems();
- mRoleName->clear();
- mRoleDescription->clear();
- mRoleTitle->clear();
+ mActionDescription->clear();
+ mRolesList->deselectAllItems();
+ mAssignedMembersList->deleteAllItems();
+ mAllowedActionsList->deleteAllItems();
+ mRoleName->clear();
+ mRoleDescription->clear();
+ mRoleTitle->clear();
- setFooterEnabled(FALSE);
+ setFooterEnabled(FALSE);
- mHasRoleChange = FALSE;
- update(GC_ALL);
+ mHasRoleChange = FALSE;
+ update(GC_ALL);
}
void LLPanelGroupRolesSubTab::deactivate()
{
- LL_DEBUGS() << "LLPanelGroupRolesSubTab::deactivate()" << LL_ENDL;
+ LL_DEBUGS() << "LLPanelGroupRolesSubTab::deactivate()" << LL_ENDL;
- LLPanelGroupSubTab::deactivate();
- mFirstOpen = FALSE;
+ LLPanelGroupSubTab::deactivate();
+ mFirstOpen = FALSE;
}
bool LLPanelGroupRolesSubTab::needsApply(std::string& mesg)
{
- LL_DEBUGS() << "LLPanelGroupRolesSubTab::needsApply()" << LL_ENDL;
+ LL_DEBUGS() << "LLPanelGroupRolesSubTab::needsApply()" << LL_ENDL;
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if(!gdatap)
- {
- LL_WARNS() << "Unable to get group data for group " << mGroupID << LL_ENDL;
- return false;
- }
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if(!gdatap)
+ {
+ LL_WARNS() << "Unable to get group data for group " << mGroupID << LL_ENDL;
+ return false;
+ }
- return (mHasRoleChange // Text changed in current role
- || (gdatap && gdatap->pendingRoleChanges())); // Pending role changes in the group
+ return (mHasRoleChange // Text changed in current role
+ || (gdatap && gdatap->pendingRoleChanges())); // Pending role changes in the group
}
bool LLPanelGroupRolesSubTab::apply(std::string& mesg)
{
- LL_DEBUGS() << "LLPanelGroupRolesSubTab::apply()" << LL_ENDL;
+ LL_DEBUGS() << "LLPanelGroupRolesSubTab::apply()" << LL_ENDL;
- saveRoleChanges(true);
- mFirstOpen = FALSE;
- LLGroupMgr::getInstance()->sendGroupRoleChanges(mGroupID);
+ saveRoleChanges(true);
+ mFirstOpen = FALSE;
+ LLGroupMgr::getInstance()->sendGroupRoleChanges(mGroupID);
- notifyObservers();
+ notifyObservers();
- return true;
+ return true;
}
void LLPanelGroupRolesSubTab::cancel()
{
- mHasRoleChange = FALSE;
- LLGroupMgr::getInstance()->cancelGroupRoleChanges(mGroupID);
+ mHasRoleChange = FALSE;
+ LLGroupMgr::getInstance()->cancelGroupRoleChanges(mGroupID);
- notifyObservers();
+ notifyObservers();
}
-LLSD LLPanelGroupRolesSubTab::createRoleItem(const LLUUID& role_id,
- std::string name,
- std::string title,
- S32 members)
+LLSD LLPanelGroupRolesSubTab::createRoleItem(const LLUUID& role_id,
+ std::string name,
+ std::string title,
+ S32 members)
{
- LLSD row;
- row["id"] = role_id;
+ LLSD row;
+ row["id"] = role_id;
+
+ row["columns"][0]["column"] = "name";
+ row["columns"][0]["value"] = name;
- row["columns"][0]["column"] = "name";
- row["columns"][0]["value"] = name;
+ row["columns"][1]["column"] = "title";
+ row["columns"][1]["value"] = title;
- row["columns"][1]["column"] = "title";
- row["columns"][1]["value"] = title;
+ row["columns"][2]["column"] = "members";
+ row["columns"][2]["value"] = members;
- row["columns"][2]["column"] = "members";
- row["columns"][2]["value"] = members;
-
- return row;
+ return row;
}
bool LLPanelGroupRolesSubTab::matchesSearchFilter(std::string rolename, std::string roletitle)
{
- // If the search filter is empty, everything passes.
- if (mSearchFilter.empty()) return true;
+ // If the search filter is empty, everything passes.
+ if (mSearchFilter.empty()) return true;
- LLStringUtil::toLower(rolename);
- LLStringUtil::toLower(roletitle);
- std::string::size_type match_name = rolename.find(mSearchFilter);
- std::string::size_type match_title = roletitle.find(mSearchFilter);
+ LLStringUtil::toLower(rolename);
+ LLStringUtil::toLower(roletitle);
+ std::string::size_type match_name = rolename.find(mSearchFilter);
+ std::string::size_type match_title = roletitle.find(mSearchFilter);
- if ( (std::string::npos == match_name)
- && (std::string::npos == match_title))
- {
- // not found
- return false;
- }
- else
- {
- return true;
- }
+ if ( (std::string::npos == match_name)
+ && (std::string::npos == match_title))
+ {
+ // not found
+ return false;
+ }
+ else
+ {
+ return true;
+ }
}
void LLPanelGroupRolesSubTab::update(LLGroupChange gc)
{
- LL_DEBUGS() << "LLPanelGroupRolesSubTab::update()" << LL_ENDL;
-
- if (mGroupID.isNull()) return;
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
-
- if (!gdatap || !gdatap->isRoleDataComplete())
- {
- LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);
- }
- else
- {
- bool had_selection = false;
- LLUUID last_selected;
- if (mRolesList->getFirstSelected())
- {
- last_selected = mRolesList->getFirstSelected()->getUUID();
- had_selection = true;
- }
- mRolesList->deleteAllItems();
-
- LLScrollListItem* item = NULL;
-
- LLGroupMgrGroupData::role_list_t::iterator rit = gdatap->mRoles.begin();
- LLGroupMgrGroupData::role_list_t::iterator end = gdatap->mRoles.end();
-
- for ( ; rit != end; ++rit)
- {
- LLRoleData rd;
- if (gdatap->getRoleData((*rit).first,rd))
- {
- if (matchesSearchFilter(rd.mRoleName, rd.mRoleTitle))
- {
- // If this is the everyone role, then EVERYONE is in it.
- S32 members_in_role = (*rit).first.isNull() ? gdatap->mMembers.size() : (*rit).second->getTotalMembersInRole();
- LLSD row = createRoleItem((*rit).first,rd.mRoleName, rd.mRoleTitle, members_in_role);
- item = mRolesList->addElement(row, ((*rit).first.isNull()) ? ADD_TOP : ADD_BOTTOM, this);
- if (had_selection && ((*rit).first == last_selected))
- {
- item->setSelected(TRUE);
- }
- }
- }
- else
- {
- LL_WARNS() << "LLPanelGroupRolesSubTab::update() No role data for role " << (*rit).first << LL_ENDL;
- }
- }
-
- mRolesList->sortByColumn(std::string("name"), TRUE);
-
- if ( (gdatap->mRoles.size() < (U32)MAX_ROLES)
- && gAgent.hasPowerInGroup(mGroupID, GP_ROLE_CREATE) )
- {
- mCreateRoleButton->setEnabled(TRUE);
- }
- else
- {
- mCreateRoleButton->setEnabled(FALSE);
- }
-
- if (had_selection)
- {
- handleRoleSelect();
- }
- else
- {
- mAssignedMembersList->deleteAllItems();
- mAllowedActionsList->deleteAllItems();
- mRoleName->clear();
- mRoleDescription->clear();
- mRoleTitle->clear();
- setFooterEnabled(FALSE);
- mDeleteRoleButton->setEnabled(FALSE);
- mCopyRoleButton->setEnabled(FALSE);
- }
- }
-
- if ((GC_ROLE_MEMBER_DATA == gc || GC_MEMBER_DATA == gc)
- && gdatap
- && gdatap->isMemberDataComplete()
- && gdatap->isRoleMemberDataComplete())
- {
- buildMembersList();
- }
+ LL_DEBUGS() << "LLPanelGroupRolesSubTab::update()" << LL_ENDL;
+
+ if (mGroupID.isNull()) return;
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+
+ if (!gdatap || !gdatap->isRoleDataComplete())
+ {
+ LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);
+ }
+ else
+ {
+ bool had_selection = false;
+ LLUUID last_selected;
+ if (mRolesList->getFirstSelected())
+ {
+ last_selected = mRolesList->getFirstSelected()->getUUID();
+ had_selection = true;
+ }
+ mRolesList->deleteAllItems();
+
+ LLScrollListItem* item = NULL;
+
+ LLGroupMgrGroupData::role_list_t::iterator rit = gdatap->mRoles.begin();
+ LLGroupMgrGroupData::role_list_t::iterator end = gdatap->mRoles.end();
+
+ for ( ; rit != end; ++rit)
+ {
+ LLRoleData rd;
+ if (gdatap->getRoleData((*rit).first,rd))
+ {
+ if (matchesSearchFilter(rd.mRoleName, rd.mRoleTitle))
+ {
+ // If this is the everyone role, then EVERYONE is in it.
+ S32 members_in_role = (*rit).first.isNull() ? gdatap->mMembers.size() : (*rit).second->getTotalMembersInRole();
+ LLSD row = createRoleItem((*rit).first,rd.mRoleName, rd.mRoleTitle, members_in_role);
+ item = mRolesList->addElement(row, ((*rit).first.isNull()) ? ADD_TOP : ADD_BOTTOM, this);
+ if (had_selection && ((*rit).first == last_selected))
+ {
+ item->setSelected(TRUE);
+ }
+ }
+ }
+ else
+ {
+ LL_WARNS() << "LLPanelGroupRolesSubTab::update() No role data for role " << (*rit).first << LL_ENDL;
+ }
+ }
+
+ mRolesList->sortByColumn(std::string("name"), TRUE);
+
+ if ( (gdatap->mRoles.size() < (U32)MAX_ROLES)
+ && gAgent.hasPowerInGroup(mGroupID, GP_ROLE_CREATE) )
+ {
+ mCreateRoleButton->setEnabled(TRUE);
+ }
+ else
+ {
+ mCreateRoleButton->setEnabled(FALSE);
+ }
+
+ if (had_selection)
+ {
+ handleRoleSelect();
+ }
+ else
+ {
+ mAssignedMembersList->deleteAllItems();
+ mAllowedActionsList->deleteAllItems();
+ mRoleName->clear();
+ mRoleDescription->clear();
+ mRoleTitle->clear();
+ setFooterEnabled(FALSE);
+ mDeleteRoleButton->setEnabled(FALSE);
+ mCopyRoleButton->setEnabled(FALSE);
+ }
+ }
+
+ if ((GC_ROLE_MEMBER_DATA == gc || GC_MEMBER_DATA == gc)
+ && gdatap
+ && gdatap->isMemberDataComplete()
+ && gdatap->isRoleMemberDataComplete())
+ {
+ buildMembersList();
+ }
}
// static
void LLPanelGroupRolesSubTab::onRoleSelect(LLUICtrl* ctrl, void* user_data)
{
- LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
- if (!self)
- return;
+ LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
+ if (!self)
+ return;
- self->handleRoleSelect();
+ self->handleRoleSelect();
}
void LLPanelGroupRolesSubTab::handleRoleSelect()
{
- BOOL can_delete = TRUE;
- LL_DEBUGS() << "LLPanelGroupRolesSubTab::handleRoleSelect()" << LL_ENDL;
-
- mAssignedMembersList->deleteAllItems();
- mAllowedActionsList->deleteAllItems();
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "LLPanelGroupRolesSubTab::handleRoleSelect() "
- << "-- No group data!" << LL_ENDL;
- return;
- }
-
- saveRoleChanges(false);
-
- // Check if there is anything selected.
- LLScrollListItem* item = mRolesList->getFirstSelected();
- if (!item)
- {
- setFooterEnabled(FALSE);
- return;
- }
-
- setFooterEnabled(TRUE);
-
- LLRoleData rd;
- if (gdatap->getRoleData(item->getUUID(),rd))
- {
- BOOL is_owner_role = ( gdatap->mOwnerRole == item->getUUID() );
- mRoleName->setText(rd.mRoleName);
- mRoleTitle->setText(rd.mRoleTitle);
- mRoleDescription->setText(rd.mRoleDescription);
-
- mAllowedActionsList->setEnabled(gAgent.hasPowerInGroup(mGroupID,
- GP_ROLE_CHANGE_ACTIONS));
- buildActionsList(mAllowedActionsList,
- rd.mRolePowers,
- 0LL,
- boost::bind(&LLPanelGroupRolesSubTab::handleActionCheck, this, _1, false),
- TRUE,
- FALSE,
- is_owner_role);
-
-
- mMemberVisibleCheck->set((rd.mRolePowers & GP_MEMBER_VISIBLE_IN_DIR) == GP_MEMBER_VISIBLE_IN_DIR);
- mRoleName->setEnabled(!is_owner_role &&
- gAgent.hasPowerInGroup(mGroupID, GP_ROLE_PROPERTIES));
- mRoleTitle->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_ROLE_PROPERTIES));
- mRoleDescription->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_ROLE_PROPERTIES));
-
- if ( is_owner_role )
- {
- // you can't delete the owner role
- can_delete = FALSE;
- // ... or hide members with this role
- mMemberVisibleCheck->setEnabled(FALSE);
- }
- else
- {
- mMemberVisibleCheck->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_ROLE_PROPERTIES));
- }
-
- if (item->getUUID().isNull())
- {
- // Everyone role, can't edit description or name or delete
- mRoleDescription->setEnabled(FALSE);
- mRoleName->setEnabled(FALSE);
- can_delete = FALSE;
- }
- }
- else
- {
- mRolesList->deselectAllItems();
- mAssignedMembersList->deleteAllItems();
- mAllowedActionsList->deleteAllItems();
- mRoleName->clear();
- mRoleDescription->clear();
- mRoleTitle->clear();
- setFooterEnabled(FALSE);
-
- can_delete = FALSE;
- }
- mSelectedRole = item->getUUID();
- buildMembersList();
-
- mCopyRoleButton->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_ROLE_CREATE));
- can_delete = can_delete && gAgent.hasPowerInGroup(mGroupID,
- GP_ROLE_DELETE);
- mDeleteRoleButton->setEnabled(can_delete);
+ BOOL can_delete = TRUE;
+ LL_DEBUGS() << "LLPanelGroupRolesSubTab::handleRoleSelect()" << LL_ENDL;
+
+ mAssignedMembersList->deleteAllItems();
+ mAllowedActionsList->deleteAllItems();
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "LLPanelGroupRolesSubTab::handleRoleSelect() "
+ << "-- No group data!" << LL_ENDL;
+ return;
+ }
+
+ saveRoleChanges(false);
+
+ // Check if there is anything selected.
+ LLScrollListItem* item = mRolesList->getFirstSelected();
+ if (!item)
+ {
+ setFooterEnabled(FALSE);
+ return;
+ }
+
+ setFooterEnabled(TRUE);
+
+ LLRoleData rd;
+ if (gdatap->getRoleData(item->getUUID(),rd))
+ {
+ BOOL is_owner_role = ( gdatap->mOwnerRole == item->getUUID() );
+ mRoleName->setText(rd.mRoleName);
+ mRoleTitle->setText(rd.mRoleTitle);
+ mRoleDescription->setText(rd.mRoleDescription);
+
+ mAllowedActionsList->setEnabled(gAgent.hasPowerInGroup(mGroupID,
+ GP_ROLE_CHANGE_ACTIONS));
+ buildActionsList(mAllowedActionsList,
+ rd.mRolePowers,
+ 0LL,
+ boost::bind(&LLPanelGroupRolesSubTab::handleActionCheck, this, _1, false),
+ TRUE,
+ FALSE,
+ is_owner_role);
+
+
+ mMemberVisibleCheck->set((rd.mRolePowers & GP_MEMBER_VISIBLE_IN_DIR) == GP_MEMBER_VISIBLE_IN_DIR);
+ mRoleName->setEnabled(!is_owner_role &&
+ gAgent.hasPowerInGroup(mGroupID, GP_ROLE_PROPERTIES));
+ mRoleTitle->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_ROLE_PROPERTIES));
+ mRoleDescription->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_ROLE_PROPERTIES));
+
+ if ( is_owner_role )
+ {
+ // you can't delete the owner role
+ can_delete = FALSE;
+ // ... or hide members with this role
+ mMemberVisibleCheck->setEnabled(FALSE);
+ }
+ else
+ {
+ mMemberVisibleCheck->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_ROLE_PROPERTIES));
+ }
+
+ if (item->getUUID().isNull())
+ {
+ // Everyone role, can't edit description or name or delete
+ mRoleDescription->setEnabled(FALSE);
+ mRoleName->setEnabled(FALSE);
+ can_delete = FALSE;
+ }
+ }
+ else
+ {
+ mRolesList->deselectAllItems();
+ mAssignedMembersList->deleteAllItems();
+ mAllowedActionsList->deleteAllItems();
+ mRoleName->clear();
+ mRoleDescription->clear();
+ mRoleTitle->clear();
+ setFooterEnabled(FALSE);
+
+ can_delete = FALSE;
+ }
+ mSelectedRole = item->getUUID();
+ buildMembersList();
+
+ mCopyRoleButton->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_ROLE_CREATE));
+ can_delete = can_delete && gAgent.hasPowerInGroup(mGroupID,
+ GP_ROLE_DELETE);
+ mDeleteRoleButton->setEnabled(can_delete);
}
void LLPanelGroupRolesSubTab::buildMembersList()
{
- mAssignedMembersList->deleteAllItems();
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "LLPanelGroupRolesSubTab::handleRoleSelect() "
- << "-- No group data!" << LL_ENDL;
- return;
- }
-
- // Check if there is anything selected.
- LLScrollListItem* item = mRolesList->getFirstSelected();
- if (!item) return;
-
- if (item->getUUID().isNull())
- {
- // Special cased 'Everyone' role
- LLGroupMgrGroupData::member_list_t::iterator mit = gdatap->mMembers.begin();
- LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end();
- for ( ; mit != end; ++mit)
- {
- mAssignedMembersList->addNameItem((*mit).first);
- }
- }
- else
- {
- LLGroupMgrGroupData::role_list_t::iterator rit = gdatap->mRoles.find(item->getUUID());
- if (rit != gdatap->mRoles.end())
- {
- LLGroupRoleData* rdatap = (*rit).second;
- if (rdatap)
- {
- uuid_vec_t::const_iterator mit = rdatap->getMembersBegin();
- uuid_vec_t::const_iterator end = rdatap->getMembersEnd();
- for ( ; mit != end; ++mit)
- {
- mAssignedMembersList->addNameItem((*mit));
- }
- }
- }
- }
+ mAssignedMembersList->deleteAllItems();
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "LLPanelGroupRolesSubTab::handleRoleSelect() "
+ << "-- No group data!" << LL_ENDL;
+ return;
+ }
+
+ // Check if there is anything selected.
+ LLScrollListItem* item = mRolesList->getFirstSelected();
+ if (!item) return;
+
+ if (item->getUUID().isNull())
+ {
+ // Special cased 'Everyone' role
+ LLGroupMgrGroupData::member_list_t::iterator mit = gdatap->mMembers.begin();
+ LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end();
+ for ( ; mit != end; ++mit)
+ {
+ mAssignedMembersList->addNameItem((*mit).first);
+ }
+ }
+ else
+ {
+ LLGroupMgrGroupData::role_list_t::iterator rit = gdatap->mRoles.find(item->getUUID());
+ if (rit != gdatap->mRoles.end())
+ {
+ LLGroupRoleData* rdatap = (*rit).second;
+ if (rdatap)
+ {
+ uuid_vec_t::const_iterator mit = rdatap->getMembersBegin();
+ uuid_vec_t::const_iterator end = rdatap->getMembersEnd();
+ for ( ; mit != end; ++mit)
+ {
+ mAssignedMembersList->addNameItem((*mit));
+ }
+ }
+ }
+ }
}
struct ActionCBData
{
- LLPanelGroupRolesSubTab* mSelf;
- LLCheckBoxCtrl* mCheck;
+ LLPanelGroupRolesSubTab* mSelf;
+ LLCheckBoxCtrl* mCheck;
};
void LLPanelGroupRolesSubTab::handleActionCheck(LLUICtrl* ctrl, bool force)
{
- LLCheckBoxCtrl* check = dynamic_cast<LLCheckBoxCtrl*>(ctrl);
- if (!check)
- return;
-
- LL_DEBUGS() << "LLPanelGroupRolesSubTab::handleActionSelect()" << LL_ENDL;
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "LLPanelGroupRolesSubTab::handleRoleSelect() "
- << "-- No group data!" << LL_ENDL;
- return;
- }
-
- LLScrollListItem* action_item = mAllowedActionsList->getFirstSelected();
- if (!action_item)
- {
- return;
- }
-
- LLScrollListItem* role_item = mRolesList->getFirstSelected();
- if (!role_item)
- {
- return;
- }
- LLUUID role_id = role_item->getUUID();
-
- LLRoleAction* rap = (LLRoleAction*)action_item->getUserdata();
- U64 power = rap->mPowerBit;
-
- bool isEnablingAbility = check->get();
- LLRoleData rd;
- LLSD args;
-
- if (isEnablingAbility &&
- !force &&
- ((GP_ROLE_ASSIGN_MEMBER == power) || (GP_ROLE_CHANGE_ACTIONS == power) ))
- {
- // Uncheck the item, for now. It will be
- // checked if they click 'Yes', below.
- check->set(FALSE);
-
- LLRoleData rd;
- LLSD args;
-
- if ( gdatap->getRoleData(role_id, rd) )
- {
- args["ACTION_NAME"] = rap->mDescription;
- args["ROLE_NAME"] = rd.mRoleName;
- mHasModal = TRUE;
- std::string warning = "AssignDangerousActionWarning";
- if (GP_ROLE_CHANGE_ACTIONS == power)
- {
- warning = "AssignDangerousAbilityWarning";
- }
- LLNotificationsUtil::add(warning, args, LLSD(), boost::bind(&LLPanelGroupRolesSubTab::addActionCB, this, _1, _2, check));
- }
- else
- {
- LL_WARNS() << "Unable to look up role information for role id: "
- << role_id << LL_ENDL;
- }
- }
-
- if(GP_GROUP_BAN_ACCESS == power)
- {
- std::string warning = isEnablingAbility ? "AssignBanAbilityWarning" : "RemoveBanAbilityWarning";
-
- //////////////////////////////////////////////////////////////////////////
- // Get role data for both GP_ROLE_REMOVE_MEMBER and GP_MEMBER_EJECT
- // Add description and role name to LLSD
- // Pop up dialog saying "Yo, you also granted these other abilities when you did this!"
- if ( gdatap->getRoleData(role_id, rd) )
- {
- args["ACTION_NAME"] = rap->mDescription;
- args["ROLE_NAME"] = rd.mRoleName;
- mHasModal = TRUE;
-
- std::vector<LLScrollListItem*> all_data = mAllowedActionsList->getAllData();
- std::vector<LLScrollListItem*>::iterator ad_it = all_data.begin();
- std::vector<LLScrollListItem*>::iterator ad_end = all_data.end();
- LLRoleAction* adp;
- for( ; ad_it != ad_end; ++ad_it)
- {
- adp = (LLRoleAction*)(*ad_it)->getUserdata();
- if(adp->mPowerBit == GP_MEMBER_EJECT)
- {
- args["ACTION_NAME_2"] = adp->mDescription;
- }
- else if(adp->mPowerBit == GP_ROLE_REMOVE_MEMBER)
- {
- args["ACTION_NAME_3"] = adp->mDescription;
- }
- }
-
- LLNotificationsUtil::add(warning, args);
- }
- else
- {
- LL_WARNS() << "Unable to look up role information for role id: "
- << role_id << LL_ENDL;
- }
-
- //////////////////////////////////////////////////////////////////////////
-
- U64 current_role_powers = gdatap->getRolePowers(role_id);
-
- if(isEnablingAbility)
- {
- power |= (GP_ROLE_REMOVE_MEMBER | GP_MEMBER_EJECT);
- current_role_powers |= power;
- }
- else
- {
- current_role_powers &= ~GP_GROUP_BAN_ACCESS;
- }
-
- mAllowedActionsList->deleteAllItems();
- buildActionsList( mAllowedActionsList,
- current_role_powers,
- current_role_powers,
- boost::bind(&LLPanelGroupRolesSubTab::handleActionCheck, this, _1, false),
- TRUE,
- FALSE,
- FALSE);
-
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Adding non-specific ability to role
- //////////////////////////////////////////////////////////////////////////
- if(isEnablingAbility)
- {
- gdatap->addRolePower(role_id, power);
- }
- else
- {
- gdatap->removeRolePower(role_id,power);
- }
-
- mHasRoleChange = TRUE;
- notifyObservers();
+ LLCheckBoxCtrl* check = dynamic_cast<LLCheckBoxCtrl*>(ctrl);
+ if (!check)
+ return;
+
+ LL_DEBUGS() << "LLPanelGroupRolesSubTab::handleActionSelect()" << LL_ENDL;
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "LLPanelGroupRolesSubTab::handleRoleSelect() "
+ << "-- No group data!" << LL_ENDL;
+ return;
+ }
+
+ LLScrollListItem* action_item = mAllowedActionsList->getFirstSelected();
+ if (!action_item)
+ {
+ return;
+ }
+
+ LLScrollListItem* role_item = mRolesList->getFirstSelected();
+ if (!role_item)
+ {
+ return;
+ }
+ LLUUID role_id = role_item->getUUID();
+
+ LLRoleAction* rap = (LLRoleAction*)action_item->getUserdata();
+ U64 power = rap->mPowerBit;
+
+ bool isEnablingAbility = check->get();
+ LLRoleData rd;
+ LLSD args;
+
+ if (isEnablingAbility &&
+ !force &&
+ ((GP_ROLE_ASSIGN_MEMBER == power) || (GP_ROLE_CHANGE_ACTIONS == power) ))
+ {
+ // Uncheck the item, for now. It will be
+ // checked if they click 'Yes', below.
+ check->set(FALSE);
+
+ LLRoleData rd;
+ LLSD args;
+
+ if ( gdatap->getRoleData(role_id, rd) )
+ {
+ args["ACTION_NAME"] = rap->mDescription;
+ args["ROLE_NAME"] = rd.mRoleName;
+ mHasModal = TRUE;
+ std::string warning = "AssignDangerousActionWarning";
+ if (GP_ROLE_CHANGE_ACTIONS == power)
+ {
+ warning = "AssignDangerousAbilityWarning";
+ }
+ LLNotificationsUtil::add(warning, args, LLSD(), boost::bind(&LLPanelGroupRolesSubTab::addActionCB, this, _1, _2, check));
+ }
+ else
+ {
+ LL_WARNS() << "Unable to look up role information for role id: "
+ << role_id << LL_ENDL;
+ }
+ }
+
+ if(GP_GROUP_BAN_ACCESS == power)
+ {
+ std::string warning = isEnablingAbility ? "AssignBanAbilityWarning" : "RemoveBanAbilityWarning";
+
+ //////////////////////////////////////////////////////////////////////////
+ // Get role data for both GP_ROLE_REMOVE_MEMBER and GP_MEMBER_EJECT
+ // Add description and role name to LLSD
+ // Pop up dialog saying "Yo, you also granted these other abilities when you did this!"
+ if ( gdatap->getRoleData(role_id, rd) )
+ {
+ args["ACTION_NAME"] = rap->mDescription;
+ args["ROLE_NAME"] = rd.mRoleName;
+ mHasModal = TRUE;
+
+ std::vector<LLScrollListItem*> all_data = mAllowedActionsList->getAllData();
+ std::vector<LLScrollListItem*>::iterator ad_it = all_data.begin();
+ std::vector<LLScrollListItem*>::iterator ad_end = all_data.end();
+ LLRoleAction* adp;
+ for( ; ad_it != ad_end; ++ad_it)
+ {
+ adp = (LLRoleAction*)(*ad_it)->getUserdata();
+ if(adp->mPowerBit == GP_MEMBER_EJECT)
+ {
+ args["ACTION_NAME_2"] = adp->mDescription;
+ }
+ else if(adp->mPowerBit == GP_ROLE_REMOVE_MEMBER)
+ {
+ args["ACTION_NAME_3"] = adp->mDescription;
+ }
+ }
+
+ LLNotificationsUtil::add(warning, args);
+ }
+ else
+ {
+ LL_WARNS() << "Unable to look up role information for role id: "
+ << role_id << LL_ENDL;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+
+ U64 current_role_powers = gdatap->getRolePowers(role_id);
+
+ if(isEnablingAbility)
+ {
+ power |= (GP_ROLE_REMOVE_MEMBER | GP_MEMBER_EJECT);
+ current_role_powers |= power;
+ }
+ else
+ {
+ current_role_powers &= ~GP_GROUP_BAN_ACCESS;
+ }
+
+ mAllowedActionsList->deleteAllItems();
+ buildActionsList( mAllowedActionsList,
+ current_role_powers,
+ current_role_powers,
+ boost::bind(&LLPanelGroupRolesSubTab::handleActionCheck, this, _1, false),
+ TRUE,
+ FALSE,
+ FALSE);
+
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // Adding non-specific ability to role
+ //////////////////////////////////////////////////////////////////////////
+ if(isEnablingAbility)
+ {
+ gdatap->addRolePower(role_id, power);
+ }
+ else
+ {
+ gdatap->removeRolePower(role_id,power);
+ }
+
+ mHasRoleChange = TRUE;
+ notifyObservers();
}
bool LLPanelGroupRolesSubTab::addActionCB(const LLSD& notification, const LLSD& response, LLCheckBoxCtrl* check)
{
- if (!check) return false;
+ if (!check) return false;
- mHasModal = FALSE;
+ mHasModal = FALSE;
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if (0 == option)
- {
- // User clicked "Yes"
- check->set(TRUE);
- const bool force_add = true;
- handleActionCheck(check, force_add);
- }
- return false;
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (0 == option)
+ {
+ // User clicked "Yes"
+ check->set(TRUE);
+ const bool force_add = true;
+ handleActionCheck(check, force_add);
+ }
+ return false;
}
// static
void LLPanelGroupRolesSubTab::onPropertiesKey(LLLineEditor* ctrl, void* user_data)
{
- LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
- if (!self) return;
+ LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
+ if (!self) return;
- self->mHasRoleChange = TRUE;
- self->notifyObservers();
+ self->mHasRoleChange = TRUE;
+ self->notifyObservers();
}
void LLPanelGroupRolesSubTab::onDescriptionKeyStroke(LLTextEditor* caller)
{
- mHasRoleChange = TRUE;
- notifyObservers();
+ mHasRoleChange = TRUE;
+ notifyObservers();
}
-// static
+// static
void LLPanelGroupRolesSubTab::onDescriptionCommit(LLUICtrl* ctrl, void* user_data)
{
- LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
- if (!self) return;
+ LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
+ if (!self) return;
- self->mHasRoleChange = TRUE;
- self->notifyObservers();
+ self->mHasRoleChange = TRUE;
+ self->notifyObservers();
}
-// static
+// static
void LLPanelGroupRolesSubTab::onMemberVisibilityChange(LLUICtrl* ctrl, void* user_data)
{
- LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
- LLCheckBoxCtrl* check = static_cast<LLCheckBoxCtrl*>(ctrl);
- if (!check || !self) return;
+ LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
+ LLCheckBoxCtrl* check = static_cast<LLCheckBoxCtrl*>(ctrl);
+ if (!check || !self) return;
- self->handleMemberVisibilityChange(check->get());
+ self->handleMemberVisibilityChange(check->get());
}
void LLPanelGroupRolesSubTab::handleMemberVisibilityChange(bool value)
{
- LL_DEBUGS() << "LLPanelGroupRolesSubTab::handleMemberVisibilityChange()" << LL_ENDL;
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap)
- {
- LL_WARNS() << "LLPanelGroupRolesSubTab::handleRoleSelect() "
- << "-- No group data!" << LL_ENDL;
- return;
- }
-
- LLScrollListItem* role_item = mRolesList->getFirstSelected();
- if (!role_item)
- {
- return;
- }
-
- if (value)
- {
- gdatap->addRolePower(role_item->getUUID(),GP_MEMBER_VISIBLE_IN_DIR);
- }
- else
- {
- gdatap->removeRolePower(role_item->getUUID(),GP_MEMBER_VISIBLE_IN_DIR);
- }
-}
-
-// static
+ LL_DEBUGS() << "LLPanelGroupRolesSubTab::handleMemberVisibilityChange()" << LL_ENDL;
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (!gdatap)
+ {
+ LL_WARNS() << "LLPanelGroupRolesSubTab::handleRoleSelect() "
+ << "-- No group data!" << LL_ENDL;
+ return;
+ }
+
+ LLScrollListItem* role_item = mRolesList->getFirstSelected();
+ if (!role_item)
+ {
+ return;
+ }
+
+ if (value)
+ {
+ gdatap->addRolePower(role_item->getUUID(),GP_MEMBER_VISIBLE_IN_DIR);
+ }
+ else
+ {
+ gdatap->removeRolePower(role_item->getUUID(),GP_MEMBER_VISIBLE_IN_DIR);
+ }
+}
+
+// static
void LLPanelGroupRolesSubTab::onCreateRole(void* user_data)
{
- LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
- if (!self) return;
+ LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
+ if (!self) return;
- self->handleCreateRole();
+ self->handleCreateRole();
}
void LLPanelGroupRolesSubTab::handleCreateRole()
{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap) return;
+ if (!gdatap) return;
- LLUUID new_role_id;
- new_role_id.generate();
+ LLUUID new_role_id;
+ new_role_id.generate();
- LLRoleData rd;
- rd.mRoleName = "New Role";
- gdatap->createRole(new_role_id,rd);
+ LLRoleData rd;
+ rd.mRoleName = "New Role";
+ gdatap->createRole(new_role_id,rd);
- mRolesList->deselectAllItems(TRUE);
- LLSD row;
- row["id"] = new_role_id;
- row["columns"][0]["column"] = "name";
- row["columns"][0]["value"] = rd.mRoleName;
- mRolesList->addElement(row, ADD_BOTTOM, this);
- mRolesList->selectByID(new_role_id);
+ mRolesList->deselectAllItems(TRUE);
+ LLSD row;
+ row["id"] = new_role_id;
+ row["columns"][0]["column"] = "name";
+ row["columns"][0]["value"] = rd.mRoleName;
+ mRolesList->addElement(row, ADD_BOTTOM, this);
+ mRolesList->selectByID(new_role_id);
- // put focus on name field and select its contents
- if(mRoleName)
- {
- mRoleName->setFocus(TRUE);
- mRoleName->onTabInto();
- gFocusMgr.triggerFocusFlash();
- }
+ // put focus on name field and select its contents
+ if(mRoleName)
+ {
+ mRoleName->setFocus(TRUE);
+ mRoleName->onTabInto();
+ gFocusMgr.triggerFocusFlash();
+ }
- notifyObservers();
+ notifyObservers();
}
-// static
+// static
void LLPanelGroupRolesSubTab::onCopyRole(void* user_data)
{
- LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
- if (!self) return;
+ LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
+ if (!self) return;
- self->handleCopyRole();
+ self->handleCopyRole();
}
void LLPanelGroupRolesSubTab::handleCopyRole()
{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap) return;
+ if (!gdatap) return;
- LLScrollListItem* role_item = mRolesList->getFirstSelected();
- if (!role_item || role_item->getUUID().isNull())
- {
- return;
- }
+ LLScrollListItem* role_item = mRolesList->getFirstSelected();
+ if (!role_item || role_item->getUUID().isNull())
+ {
+ return;
+ }
- LLRoleData rd;
- if (!gdatap->getRoleData(role_item->getUUID(), rd))
- {
- return;
- }
+ LLRoleData rd;
+ if (!gdatap->getRoleData(role_item->getUUID(), rd))
+ {
+ return;
+ }
- LLUUID new_role_id;
- new_role_id.generate();
- rd.mRoleName += "(Copy)";
- gdatap->createRole(new_role_id,rd);
+ LLUUID new_role_id;
+ new_role_id.generate();
+ rd.mRoleName += "(Copy)";
+ gdatap->createRole(new_role_id,rd);
- mRolesList->deselectAllItems(TRUE);
- LLSD row;
- row["id"] = new_role_id;
- row["columns"][0]["column"] = "name";
- row["columns"][0]["value"] = rd.mRoleName;
- mRolesList->addElement(row, ADD_BOTTOM, this);
- mRolesList->selectByID(new_role_id);
+ mRolesList->deselectAllItems(TRUE);
+ LLSD row;
+ row["id"] = new_role_id;
+ row["columns"][0]["column"] = "name";
+ row["columns"][0]["value"] = rd.mRoleName;
+ mRolesList->addElement(row, ADD_BOTTOM, this);
+ mRolesList->selectByID(new_role_id);
- // put focus on name field and select its contents
- if(mRoleName)
- {
- mRoleName->setFocus(TRUE);
- mRoleName->onTabInto();
- gFocusMgr.triggerFocusFlash();
- }
+ // put focus on name field and select its contents
+ if(mRoleName)
+ {
+ mRoleName->setFocus(TRUE);
+ mRoleName->onTabInto();
+ gFocusMgr.triggerFocusFlash();
+ }
- notifyObservers();
+ notifyObservers();
}
-// static
+// static
void LLPanelGroupRolesSubTab::onDeleteRole(void* user_data)
{
- LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
- if (!self) return;
+ LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data);
+ if (!self) return;
- self->handleDeleteRole();
+ self->handleDeleteRole();
}
void LLPanelGroupRolesSubTab::handleDeleteRole()
{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (!gdatap) return;
+ if (!gdatap) return;
- LLScrollListItem* role_item = mRolesList->getFirstSelected();
- if (!role_item)
- {
- return;
- }
+ LLScrollListItem* role_item = mRolesList->getFirstSelected();
+ if (!role_item)
+ {
+ return;
+ }
- if (role_item->getUUID().isNull() || role_item->getUUID() == gdatap->mOwnerRole)
- {
- LLSD args;
- args["MESSAGE"] = mRemoveEveryoneTxt;
- LLNotificationsUtil::add("GenericAlert", args);
- return;
- }
+ if (role_item->getUUID().isNull() || role_item->getUUID() == gdatap->mOwnerRole)
+ {
+ LLSD args;
+ args["MESSAGE"] = mRemoveEveryoneTxt;
+ LLNotificationsUtil::add("GenericAlert", args);
+ return;
+ }
- gdatap->deleteRole(role_item->getUUID());
- mRolesList->deleteSingleItem(mRolesList->getFirstSelectedIndex());
- mRolesList->selectFirstItem();
+ gdatap->deleteRole(role_item->getUUID());
+ mRolesList->deleteSingleItem(mRolesList->getFirstSelectedIndex());
+ mRolesList->selectFirstItem();
- notifyObservers();
+ notifyObservers();
}
void LLPanelGroupRolesSubTab::saveRoleChanges(bool select_saved_role)
{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+
+ if (!gdatap) return;
- if (!gdatap) return;
+ if (mHasRoleChange)
+ {
+ LLRoleData rd;
+ if (!gdatap->getRoleData(mSelectedRole,rd)) return;
- if (mHasRoleChange)
- {
- LLRoleData rd;
- if (!gdatap->getRoleData(mSelectedRole,rd)) return;
+ rd.mRoleName = mRoleName->getText();
+ rd.mRoleDescription = mRoleDescription->getText();
+ rd.mRoleTitle = mRoleTitle->getText();
- rd.mRoleName = mRoleName->getText();
- rd.mRoleDescription = mRoleDescription->getText();
- rd.mRoleTitle = mRoleTitle->getText();
+ S32 role_members_count = 0;
+ if (mSelectedRole.isNull())
+ {
+ role_members_count = gdatap->mMemberCount;
+ }
+ else if(LLGroupRoleData* grd = get_ptr_in_map(gdatap->mRoles, mSelectedRole))
+ {
+ role_members_count = grd->getTotalMembersInRole();
+ }
- S32 role_members_count = 0;
- if (mSelectedRole.isNull())
- {
- role_members_count = gdatap->mMemberCount;
- }
- else if(LLGroupRoleData* grd = get_ptr_in_map(gdatap->mRoles, mSelectedRole))
- {
- role_members_count = grd->getTotalMembersInRole();
- }
+ gdatap->setRoleData(mSelectedRole,rd);
- gdatap->setRoleData(mSelectedRole,rd);
+ mRolesList->deleteSingleItem(mRolesList->getItemIndex(mSelectedRole));
- mRolesList->deleteSingleItem(mRolesList->getItemIndex(mSelectedRole));
-
- LLSD row = createRoleItem(mSelectedRole,rd.mRoleName,rd.mRoleTitle,role_members_count);
- LLScrollListItem* item = mRolesList->addElement(row, ADD_BOTTOM, this);
- item->setSelected(select_saved_role);
+ LLSD row = createRoleItem(mSelectedRole,rd.mRoleName,rd.mRoleTitle,role_members_count);
+ LLScrollListItem* item = mRolesList->addElement(row, ADD_BOTTOM, this);
+ item->setSelected(select_saved_role);
- mHasRoleChange = FALSE;
- }
+ mHasRoleChange = FALSE;
+ }
}
void LLPanelGroupRolesSubTab::updateActionDescription()
{
- mActionDescription->setText(std::string());
- LLScrollListItem* action_item = mAllowedActionsList->getFirstSelected();
- if (!action_item || !mAllowedActionsList->getCanSelect())
- {
- return;
- }
+ mActionDescription->setText(std::string());
+ LLScrollListItem* action_item = mAllowedActionsList->getFirstSelected();
+ if (!action_item || !mAllowedActionsList->getCanSelect())
+ {
+ return;
+ }
- LLRoleAction* rap = (LLRoleAction*)action_item->getUserdata();
- if (rap)
- {
- std::string desc = rap->mLongDescription.empty() ? rap->mDescription : rap->mLongDescription;
- mActionDescription->setText(desc);
- }
+ LLRoleAction* rap = (LLRoleAction*)action_item->getUserdata();
+ if (rap)
+ {
+ std::string desc = rap->mLongDescription.empty() ? rap->mDescription : rap->mLongDescription;
+ mActionDescription->setText(desc);
+ }
}
void LLPanelGroupRolesSubTab::setGroupID(const LLUUID& id)
{
- if(mRolesList) mRolesList->deleteAllItems();
- if(mAssignedMembersList) mAssignedMembersList->deleteAllItems();
- if(mAllowedActionsList) mAllowedActionsList->deleteAllItems();
+ if(mRolesList) mRolesList->deleteAllItems();
+ if(mAssignedMembersList) mAssignedMembersList->deleteAllItems();
+ if(mAllowedActionsList) mAllowedActionsList->deleteAllItems();
- if(mRoleName) mRoleName->clear();
- if(mRoleDescription) mRoleDescription->clear();
- if(mRoleTitle) mRoleTitle->clear();
+ if(mRoleName) mRoleName->clear();
+ if(mRoleDescription) mRoleDescription->clear();
+ if(mRoleTitle) mRoleTitle->clear();
- mHasRoleChange = FALSE;
+ mHasRoleChange = FALSE;
- setFooterEnabled(FALSE);
+ setFooterEnabled(FALSE);
- LLPanelGroupSubTab::setGroupID(id);
+ LLPanelGroupSubTab::setGroupID(id);
}
@@ -2845,198 +2845,198 @@ LLPanelGroupActionsSubTab::~LLPanelGroupActionsSubTab()
BOOL LLPanelGroupActionsSubTab::postBuildSubTab(LLView* root)
{
- LLPanelGroupSubTab::postBuildSubTab(root);
+ LLPanelGroupSubTab::postBuildSubTab(root);
- // Upcast parent so we can ask it for sibling controls.
- LLPanelGroupRoles* parent = (LLPanelGroupRoles*) root;
+ // Upcast parent so we can ask it for sibling controls.
+ LLPanelGroupRoles* parent = (LLPanelGroupRoles*) root;
- // Look recursively from the parent to find all our widgets.
- bool recurse = true;
- mHeader = parent->findChild<LLPanel>("actions_header", recurse);
- mFooter = parent->findChild<LLPanel>("actions_footer", recurse);
+ // Look recursively from the parent to find all our widgets.
+ bool recurse = true;
+ mHeader = parent->findChild<LLPanel>("actions_header", recurse);
+ mFooter = parent->findChild<LLPanel>("actions_footer", recurse);
- mActionDescription = parent->getChild<LLTextEditor>("action_description", recurse);
+ mActionDescription = parent->getChild<LLTextEditor>("action_description", recurse);
- mActionList = parent->getChild<LLScrollListCtrl>("action_list",recurse);
- mActionRoles = parent->getChild<LLScrollListCtrl>("action_roles",recurse);
- mActionMembers = parent->getChild<LLNameListCtrl>("action_members",recurse);
+ mActionList = parent->getChild<LLScrollListCtrl>("action_list",recurse);
+ mActionRoles = parent->getChild<LLScrollListCtrl>("action_roles",recurse);
+ mActionMembers = parent->getChild<LLNameListCtrl>("action_members",recurse);
- if (!mActionList || !mActionDescription || !mActionRoles || !mActionMembers) return FALSE;
+ if (!mActionList || !mActionDescription || !mActionRoles || !mActionMembers) return FALSE;
- mActionList->setCommitOnSelectionChange(TRUE);
- mActionList->setCommitCallback(boost::bind(&LLPanelGroupActionsSubTab::handleActionSelect, this));
- mActionList->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
+ mActionList->setCommitOnSelectionChange(TRUE);
+ mActionList->setCommitCallback(boost::bind(&LLPanelGroupActionsSubTab::handleActionSelect, this));
+ mActionList->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
- update(GC_ALL);
+ update(GC_ALL);
- return TRUE;
+ return TRUE;
}
void LLPanelGroupActionsSubTab::activate()
{
- LLPanelGroupSubTab::activate();
+ LLPanelGroupSubTab::activate();
- update(GC_ALL);
- mActionDescription->clear();
- mActionList->deselectAllItems();
- mActionList->deleteAllItems();
- buildActionsList(mActionList,
- GP_ALL_POWERS,
- GP_ALL_POWERS,
- NULL,
- FALSE,
- TRUE,
- FALSE);
+ update(GC_ALL);
+ mActionDescription->clear();
+ mActionList->deselectAllItems();
+ mActionList->deleteAllItems();
+ buildActionsList(mActionList,
+ GP_ALL_POWERS,
+ GP_ALL_POWERS,
+ NULL,
+ FALSE,
+ TRUE,
+ FALSE);
}
void LLPanelGroupActionsSubTab::deactivate()
{
- LL_DEBUGS() << "LLPanelGroupActionsSubTab::deactivate()" << LL_ENDL;
+ LL_DEBUGS() << "LLPanelGroupActionsSubTab::deactivate()" << LL_ENDL;
- LLPanelGroupSubTab::deactivate();
+ LLPanelGroupSubTab::deactivate();
}
bool LLPanelGroupActionsSubTab::needsApply(std::string& mesg)
{
- LL_DEBUGS() << "LLPanelGroupActionsSubTab::needsApply()" << LL_ENDL;
+ LL_DEBUGS() << "LLPanelGroupActionsSubTab::needsApply()" << LL_ENDL;
- return false;
+ return false;
}
bool LLPanelGroupActionsSubTab::apply(std::string& mesg)
{
- LL_DEBUGS() << "LLPanelGroupActionsSubTab::apply()" << LL_ENDL;
- return true;
+ LL_DEBUGS() << "LLPanelGroupActionsSubTab::apply()" << LL_ENDL;
+ return true;
}
void LLPanelGroupActionsSubTab::update(LLGroupChange gc)
{
- LL_DEBUGS() << "LLPanelGroupActionsSubTab::update()" << LL_ENDL;
+ LL_DEBUGS() << "LLPanelGroupActionsSubTab::update()" << LL_ENDL;
- if (mGroupID.isNull()) return;
+ if (mGroupID.isNull()) return;
- mActionMembers->deleteAllItems();
- mActionRoles->deleteAllItems();
+ mActionMembers->deleteAllItems();
+ mActionRoles->deleteAllItems();
- if(mActionList->hasSelectedItem())
- {
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (gdatap && gdatap->isMemberDataComplete() && gdatap->isRoleDataComplete())
- {
- handleActionSelect();
- }
- }
+ if(mActionList->hasSelectedItem())
+ {
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (gdatap && gdatap->isMemberDataComplete() && gdatap->isRoleDataComplete())
+ {
+ handleActionSelect();
+ }
+ }
}
void LLPanelGroupActionsSubTab::onFilterChanged()
{
- mActionDescription->clear();
- mActionList->deselectAllItems();
- mActionList->deleteAllItems();
- buildActionsList(mActionList,
- GP_ALL_POWERS,
- GP_ALL_POWERS,
- NULL,
- FALSE,
- TRUE,
- FALSE);
+ mActionDescription->clear();
+ mActionList->deselectAllItems();
+ mActionList->deleteAllItems();
+ buildActionsList(mActionList,
+ GP_ALL_POWERS,
+ GP_ALL_POWERS,
+ NULL,
+ FALSE,
+ TRUE,
+ FALSE);
}
void LLPanelGroupActionsSubTab::handleActionSelect()
{
- mActionMembers->deleteAllItems();
- mActionRoles->deleteAllItems();
-
- U64 power_mask = GP_NO_POWERS;
- std::vector<LLScrollListItem*> selection =
- mActionList->getAllSelected();
- if (selection.empty()) return;
-
- LLRoleAction* rap;
-
- std::vector<LLScrollListItem*>::iterator itor;
- for (itor = selection.begin() ;
- itor != selection.end(); ++itor)
- {
- rap = (LLRoleAction*)( (*itor)->getUserdata() );
- power_mask |= rap->mPowerBit;
- }
-
- if (selection.size() == 1)
- {
- LLScrollListItem* item = selection[0];
- rap = (LLRoleAction*)(item->getUserdata());
-
- if (rap->mLongDescription.empty())
- {
- mActionDescription->setText(rap->mDescription);
- }
- else
- {
- mActionDescription->setText(rap->mLongDescription);
- }
- }
- else
- {
- mActionDescription->clear();
- }
-
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
-
- if (!gdatap) return;
-
- if (gdatap->isMemberDataComplete())
- {
- LLGroupMgrGroupData::member_list_t::iterator it = gdatap->mMembers.begin();
- LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end();
- LLGroupMemberData* gmd;
-
- for ( ; it != end; ++it)
- {
- gmd = (*it).second;
- if (!gmd) continue;
- if ((gmd->getAgentPowers() & power_mask) == power_mask)
- {
- mActionMembers->addNameItem(gmd->getID());
- }
- }
- }
- else
- {
- LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);
- }
-
- if (gdatap->isRoleDataComplete())
- {
- LLGroupMgrGroupData::role_list_t::iterator it = gdatap->mRoles.begin();
- LLGroupMgrGroupData::role_list_t::iterator end = gdatap->mRoles.end();
- LLGroupRoleData* rmd;
-
- for ( ; it != end; ++it)
- {
- rmd = (*it).second;
- if (!rmd) continue;
- if ((rmd->getRoleData().mRolePowers & power_mask) == power_mask)
- {
- mActionRoles->addSimpleElement(rmd->getRoleData().mRoleName);
- }
- }
- }
- else
- {
- LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);
- }
+ mActionMembers->deleteAllItems();
+ mActionRoles->deleteAllItems();
+
+ U64 power_mask = GP_NO_POWERS;
+ std::vector<LLScrollListItem*> selection =
+ mActionList->getAllSelected();
+ if (selection.empty()) return;
+
+ LLRoleAction* rap;
+
+ std::vector<LLScrollListItem*>::iterator itor;
+ for (itor = selection.begin() ;
+ itor != selection.end(); ++itor)
+ {
+ rap = (LLRoleAction*)( (*itor)->getUserdata() );
+ power_mask |= rap->mPowerBit;
+ }
+
+ if (selection.size() == 1)
+ {
+ LLScrollListItem* item = selection[0];
+ rap = (LLRoleAction*)(item->getUserdata());
+
+ if (rap->mLongDescription.empty())
+ {
+ mActionDescription->setText(rap->mDescription);
+ }
+ else
+ {
+ mActionDescription->setText(rap->mLongDescription);
+ }
+ }
+ else
+ {
+ mActionDescription->clear();
+ }
+
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+
+ if (!gdatap) return;
+
+ if (gdatap->isMemberDataComplete())
+ {
+ LLGroupMgrGroupData::member_list_t::iterator it = gdatap->mMembers.begin();
+ LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end();
+ LLGroupMemberData* gmd;
+
+ for ( ; it != end; ++it)
+ {
+ gmd = (*it).second;
+ if (!gmd) continue;
+ if ((gmd->getAgentPowers() & power_mask) == power_mask)
+ {
+ mActionMembers->addNameItem(gmd->getID());
+ }
+ }
+ }
+ else
+ {
+ LLGroupMgr::getInstance()->sendCapGroupMembersRequest(mGroupID);
+ }
+
+ if (gdatap->isRoleDataComplete())
+ {
+ LLGroupMgrGroupData::role_list_t::iterator it = gdatap->mRoles.begin();
+ LLGroupMgrGroupData::role_list_t::iterator end = gdatap->mRoles.end();
+ LLGroupRoleData* rmd;
+
+ for ( ; it != end; ++it)
+ {
+ rmd = (*it).second;
+ if (!rmd) continue;
+ if ((rmd->getRoleData().mRolePowers & power_mask) == power_mask)
+ {
+ mActionRoles->addSimpleElement(rmd->getRoleData().mRoleName);
+ }
+ }
+ }
+ else
+ {
+ LLGroupMgr::getInstance()->sendGroupRoleDataRequest(mGroupID);
+ }
}
void LLPanelGroupActionsSubTab::setGroupID(const LLUUID& id)
{
- if(mActionList) mActionList->deleteAllItems();
- if(mActionRoles) mActionRoles->deleteAllItems();
- if(mActionMembers) mActionMembers->deleteAllItems();
+ if(mActionList) mActionList->deleteAllItems();
+ if(mActionRoles) mActionRoles->deleteAllItems();
+ if(mActionMembers) mActionMembers->deleteAllItems();
- if(mActionDescription) mActionDescription->clear();
-
- LLPanelGroupSubTab::setGroupID(id);
+ if(mActionDescription) mActionDescription->clear();
+
+ LLPanelGroupSubTab::setGroupID(id);
}
@@ -3044,282 +3044,282 @@ void LLPanelGroupActionsSubTab::setGroupID(const LLUUID& id)
static LLPanelInjector<LLPanelGroupBanListSubTab> t_panel_group_ban_subtab("panel_group_banlist_subtab");
LLPanelGroupBanListSubTab::LLPanelGroupBanListSubTab()
- : LLPanelGroupSubTab(),
- mBanList(NULL),
- mCreateBanButton(NULL),
- mDeleteBanButton(NULL)
+ : LLPanelGroupSubTab(),
+ mBanList(NULL),
+ mCreateBanButton(NULL),
+ mDeleteBanButton(NULL)
{}
BOOL LLPanelGroupBanListSubTab::postBuildSubTab(LLView* root)
{
- LLPanelGroupSubTab::postBuildSubTab(root);
+ LLPanelGroupSubTab::postBuildSubTab(root);
+
+ // Upcast parent so we can ask it for sibling controls.
+ LLPanelGroupRoles* parent = (LLPanelGroupRoles*)root;
- // Upcast parent so we can ask it for sibling controls.
- LLPanelGroupRoles* parent = (LLPanelGroupRoles*)root;
+ // Look recursively from the parent to find all our widgets.
+ bool recurse = true;
- // Look recursively from the parent to find all our widgets.
- bool recurse = true;
+ mHeader = parent->findChild<LLPanel>("banlist_header", recurse);
+ mFooter = parent->findChild<LLPanel>("banlist_footer", recurse);
- mHeader = parent->findChild<LLPanel>("banlist_header", recurse);
- mFooter = parent->findChild<LLPanel>("banlist_footer", recurse);
+ mBanList = parent->getChild<LLNameListCtrl>("ban_list", recurse);
- mBanList = parent->getChild<LLNameListCtrl>("ban_list", recurse);
-
- mCreateBanButton = parent->getChild<LLButton>("ban_create", recurse);
- mDeleteBanButton = parent->getChild<LLButton>("ban_delete", recurse);
- mRefreshBanListButton = parent->getChild<LLButton>("ban_refresh", recurse);
- mBanCountText = parent->getChild<LLTextBase>("ban_count", recurse);
+ mCreateBanButton = parent->getChild<LLButton>("ban_create", recurse);
+ mDeleteBanButton = parent->getChild<LLButton>("ban_delete", recurse);
+ mRefreshBanListButton = parent->getChild<LLButton>("ban_refresh", recurse);
+ mBanCountText = parent->getChild<LLTextBase>("ban_count", recurse);
- if(!mBanList || !mCreateBanButton || !mDeleteBanButton || !mRefreshBanListButton || !mBanCountText)
- return FALSE;
+ if(!mBanList || !mCreateBanButton || !mDeleteBanButton || !mRefreshBanListButton || !mBanCountText)
+ return FALSE;
- mBanList->setCommitOnSelectionChange(TRUE);
- mBanList->setCommitCallback(onBanEntrySelect, this);
+ mBanList->setCommitOnSelectionChange(TRUE);
+ mBanList->setCommitCallback(onBanEntrySelect, this);
- mCreateBanButton->setClickedCallback(onCreateBanEntry, this);
- mCreateBanButton->setEnabled(FALSE);
+ mCreateBanButton->setClickedCallback(onCreateBanEntry, this);
+ mCreateBanButton->setEnabled(FALSE);
- mDeleteBanButton->setClickedCallback(onDeleteBanEntry, this);
- mDeleteBanButton->setEnabled(FALSE);
-
- mRefreshBanListButton->setClickedCallback(onRefreshBanList, this);
- mRefreshBanListButton->setEnabled(FALSE);
+ mDeleteBanButton->setClickedCallback(onDeleteBanEntry, this);
+ mDeleteBanButton->setEnabled(FALSE);
- setBanCount(0);
+ mRefreshBanListButton->setClickedCallback(onRefreshBanList, this);
+ mRefreshBanListButton->setEnabled(FALSE);
- mBanList->setOnNameListCompleteCallback(boost::bind(&LLPanelGroupBanListSubTab::onBanListCompleted, this, _1));
-
- populateBanList();
+ setBanCount(0);
- setFooterEnabled(FALSE);
- return TRUE;
+ mBanList->setOnNameListCompleteCallback(boost::bind(&LLPanelGroupBanListSubTab::onBanListCompleted, this, _1));
+
+ populateBanList();
+
+ setFooterEnabled(FALSE);
+ return TRUE;
}
void LLPanelGroupBanListSubTab::activate()
{
- LLPanelGroupSubTab::activate();
+ LLPanelGroupSubTab::activate();
- mBanList->deselectAllItems();
- mDeleteBanButton->setEnabled(FALSE);
+ mBanList->deselectAllItems();
+ mDeleteBanButton->setEnabled(FALSE);
- LLGroupMgrGroupData * group_datap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if (group_datap)
- {
- mCreateBanButton->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS) &&
- group_datap->mBanList.size() < GB_MAX_BANNED_AGENTS);
- setBanCount(group_datap->mBanList.size());
- }
- else
- {
- mCreateBanButton->setEnabled(FALSE);
- setBanCount(0);
- }
+ LLGroupMgrGroupData * group_datap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if (group_datap)
+ {
+ mCreateBanButton->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS) &&
+ group_datap->mBanList.size() < GB_MAX_BANNED_AGENTS);
+ setBanCount(group_datap->mBanList.size());
+ }
+ else
+ {
+ mCreateBanButton->setEnabled(FALSE);
+ setBanCount(0);
+ }
- // BAKER: Should I really request everytime activate() is called?
- // Perhaps I should only do it on a force refresh, or if an action on the list happens...
- // Because it's not going to live-update the list anyway... You'd have to refresh if you
- // wanted to see someone else's additions anyway...
- //
- LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_GET, mGroupID);
+ // BAKER: Should I really request everytime activate() is called?
+ // Perhaps I should only do it on a force refresh, or if an action on the list happens...
+ // Because it's not going to live-update the list anyway... You'd have to refresh if you
+ // wanted to see someone else's additions anyway...
+ //
+ LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_GET, mGroupID);
- setFooterEnabled(FALSE);
- update(GC_ALL);
+ setFooterEnabled(FALSE);
+ update(GC_ALL);
}
void LLPanelGroupBanListSubTab::update(LLGroupChange gc)
{
- populateBanList();
+ populateBanList();
}
void LLPanelGroupBanListSubTab::draw()
{
- LLPanelGroupSubTab::draw();
+ LLPanelGroupSubTab::draw();
- // BAKER: Might be good to put it here instead of update, maybe.. See how often draw gets hit.
- //if(
- // populateBanList();
+ // BAKER: Might be good to put it here instead of update, maybe.. See how often draw gets hit.
+ //if(
+ // populateBanList();
}
void LLPanelGroupBanListSubTab::onBanEntrySelect(LLUICtrl* ctrl, void* user_data)
{
- LLPanelGroupBanListSubTab* self = static_cast<LLPanelGroupBanListSubTab*>(user_data);
- if (!self)
- return;
+ LLPanelGroupBanListSubTab* self = static_cast<LLPanelGroupBanListSubTab*>(user_data);
+ if (!self)
+ return;
- self->handleBanEntrySelect();
+ self->handleBanEntrySelect();
}
void LLPanelGroupBanListSubTab::handleBanEntrySelect()
{
- if (gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS))
- {
- mDeleteBanButton->setEnabled(TRUE);
- }
+ if (gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS))
+ {
+ mDeleteBanButton->setEnabled(TRUE);
+ }
}
void LLPanelGroupBanListSubTab::onCreateBanEntry(void* user_data)
{
- LLPanelGroupBanListSubTab* self = static_cast<LLPanelGroupBanListSubTab*>(user_data);
- if (!self)
- return;
+ LLPanelGroupBanListSubTab* self = static_cast<LLPanelGroupBanListSubTab*>(user_data);
+ if (!self)
+ return;
- self->handleCreateBanEntry();
+ self->handleCreateBanEntry();
}
void LLPanelGroupBanListSubTab::handleCreateBanEntry()
{
- LLFloaterGroupBulkBan::showForGroup(mGroupID);
- //populateBanList();
+ LLFloaterGroupBulkBan::showForGroup(mGroupID);
+ //populateBanList();
}
void LLPanelGroupBanListSubTab::onDeleteBanEntry(void* user_data)
{
- LLPanelGroupBanListSubTab* self = static_cast<LLPanelGroupBanListSubTab*>(user_data);
- if (!self)
- return;
+ LLPanelGroupBanListSubTab* self = static_cast<LLPanelGroupBanListSubTab*>(user_data);
+ if (!self)
+ return;
- self->handleDeleteBanEntry();
+ self->handleDeleteBanEntry();
}
void LLPanelGroupBanListSubTab::handleDeleteBanEntry()
{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if(!gdatap)
- {
- LL_WARNS("Groups") << "Unable to get group data for group " << mGroupID << LL_ENDL;
- return;
- }
-
- std::vector<LLScrollListItem*> selection = mBanList->getAllSelected();
- if(selection.empty())
- {
- return;
- }
-
- bool can_ban_members = false;
- if (gAgent.isGodlike() ||
- gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS))
- {
- can_ban_members = true;
- }
-
- // Owners can ban anyone in the group.
- LLGroupMgrGroupData::member_list_t::iterator mi = gdatap->mMembers.find(gAgent.getID());
- if (mi != gdatap->mMembers.end())
- {
- LLGroupMemberData* member_data = (*mi).second;
- if ( member_data && member_data->isInRole(gdatap->mOwnerRole) )
- {
- can_ban_members = true;
- }
- }
-
- if(!can_ban_members)
- return;
-
- std::vector<LLUUID> ban_ids;
- std::vector<LLScrollListItem*>::iterator itor;
- for(itor = selection.begin(); itor != selection.end(); ++itor)
- {
- LLUUID ban_id = (*itor)->getUUID();
- ban_ids.push_back(ban_id);
-
- gdatap->removeBanEntry(ban_id);
- mBanList->removeNameItem(ban_id);
-
- // Removing an item removes the selection, we shouldn't be able to click
- // the button anymore until we reselect another entry.
- mDeleteBanButton->setEnabled(FALSE);
- }
-
- // update ban-count related elements
- mCreateBanButton->setEnabled(TRUE);
- setBanCount(gdatap->mBanList.size());
-
- LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_POST, mGroupID, LLGroupMgr::BAN_DELETE, ban_ids);
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if(!gdatap)
+ {
+ LL_WARNS("Groups") << "Unable to get group data for group " << mGroupID << LL_ENDL;
+ return;
+ }
+
+ std::vector<LLScrollListItem*> selection = mBanList->getAllSelected();
+ if(selection.empty())
+ {
+ return;
+ }
+
+ bool can_ban_members = false;
+ if (gAgent.isGodlike() ||
+ gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS))
+ {
+ can_ban_members = true;
+ }
+
+ // Owners can ban anyone in the group.
+ LLGroupMgrGroupData::member_list_t::iterator mi = gdatap->mMembers.find(gAgent.getID());
+ if (mi != gdatap->mMembers.end())
+ {
+ LLGroupMemberData* member_data = (*mi).second;
+ if ( member_data && member_data->isInRole(gdatap->mOwnerRole) )
+ {
+ can_ban_members = true;
+ }
+ }
+
+ if(!can_ban_members)
+ return;
+
+ std::vector<LLUUID> ban_ids;
+ std::vector<LLScrollListItem*>::iterator itor;
+ for(itor = selection.begin(); itor != selection.end(); ++itor)
+ {
+ LLUUID ban_id = (*itor)->getUUID();
+ ban_ids.push_back(ban_id);
+
+ gdatap->removeBanEntry(ban_id);
+ mBanList->removeNameItem(ban_id);
+
+ // Removing an item removes the selection, we shouldn't be able to click
+ // the button anymore until we reselect another entry.
+ mDeleteBanButton->setEnabled(FALSE);
+ }
+
+ // update ban-count related elements
+ mCreateBanButton->setEnabled(TRUE);
+ setBanCount(gdatap->mBanList.size());
+
+ LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_POST, mGroupID, LLGroupMgr::BAN_DELETE, ban_ids);
}
void LLPanelGroupBanListSubTab::onRefreshBanList(void* user_data)
{
- LLPanelGroupBanListSubTab* self = static_cast<LLPanelGroupBanListSubTab*>(user_data);
- if (!self)
- return;
+ LLPanelGroupBanListSubTab* self = static_cast<LLPanelGroupBanListSubTab*>(user_data);
+ if (!self)
+ return;
- self->handleRefreshBanList();
+ self->handleRefreshBanList();
}
void LLPanelGroupBanListSubTab::handleRefreshBanList()
{
- mRefreshBanListButton->setEnabled(FALSE);
- LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_GET, mGroupID);
+ mRefreshBanListButton->setEnabled(FALSE);
+ LLGroupMgr::getInstance()->sendGroupBanRequest(LLGroupMgr::REQUEST_GET, mGroupID);
}
void LLPanelGroupBanListSubTab::onBanListCompleted(bool isComplete)
{
- if(isComplete)
- {
- mRefreshBanListButton->setEnabled(TRUE);
- populateBanList();
- }
+ if(isComplete)
+ {
+ mRefreshBanListButton->setEnabled(TRUE);
+ populateBanList();
+ }
}
void LLPanelGroupBanListSubTab::setBanCount(U32 ban_count)
{
- LLStringUtil::format_map_t args;
- args["[COUNT]"] = llformat("%d", ban_count);
- args["[LIMIT]"] = llformat("%d", GB_MAX_BANNED_AGENTS);
- mBanCountText->setText(getString("ban_count_template", args));
+ LLStringUtil::format_map_t args;
+ args["[COUNT]"] = llformat("%d", ban_count);
+ args["[LIMIT]"] = llformat("%d", GB_MAX_BANNED_AGENTS);
+ mBanCountText->setText(getString("ban_count_template", args));
}
void LLPanelGroupBanListSubTab::populateBanList()
{
- LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
- if(!gdatap)
- {
- LL_WARNS("Groups") << "Unable to get group data for group " << mGroupID << LL_ENDL;
- return;
- }
-
- mBanList->deleteAllItems();
- std::map<LLUUID,LLGroupBanData>::const_iterator entry = gdatap->mBanList.begin();
- for(; entry != gdatap->mBanList.end(); entry++)
- {
- LLNameListCtrl::NameItem ban_entry;
- ban_entry.value = entry->first;
- LLGroupBanData bd = entry->second;
-
- ban_entry.columns.add().column("name").font.name("SANSSERIF_SMALL").style("NORMAL");
-
- // Baker TODO: MAINT-
- // Check out utc_to_pacific_time()
-
- std::string ban_date_str = bd.mBanDate.toHTTPDateString("%Y/%m/%d");
-// time_t utc_time;
-// utc_time = time_corrected();
-// LLSD substitution;
-// substitution["datetime"] = (S32) utc_time;
-// LLStringUtil::format (ban_date_str, substitution);
-
- //LL_INFOS("BAKER") << "[BAKER] BAN_DATE: " << bd.mBanDate.toHTTPDateString("%Y/%m/%d") << LL_ENDL;
- //LL_INFOS("BAKER") << "[BAKER] BAN_DATE_MODIFIED: " << ban_date_str << LL_ENDL;
-
- //ban_entry.columns.add().column("ban_date").value(ban_date_str.font.name("SANSSERIF_SMALL").style("NORMAL");
- ban_entry.columns.add().column("ban_date").value(bd.mBanDate.toHTTPDateString("%Y/%m/%d")).font.name("SANSSERIF_SMALL").style("NORMAL");
-
- mBanList->addNameItemRow(ban_entry);
- }
-
- mRefreshBanListButton->setEnabled(TRUE);
- mCreateBanButton->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS) &&
- gdatap->mBanList.size() < GB_MAX_BANNED_AGENTS);
- setBanCount(gdatap->mBanList.size());
+ LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
+ if(!gdatap)
+ {
+ LL_WARNS("Groups") << "Unable to get group data for group " << mGroupID << LL_ENDL;
+ return;
+ }
+
+ mBanList->deleteAllItems();
+ std::map<LLUUID,LLGroupBanData>::const_iterator entry = gdatap->mBanList.begin();
+ for(; entry != gdatap->mBanList.end(); entry++)
+ {
+ LLNameListCtrl::NameItem ban_entry;
+ ban_entry.value = entry->first;
+ LLGroupBanData bd = entry->second;
+
+ ban_entry.columns.add().column("name").font.name("SANSSERIF_SMALL").style("NORMAL");
+
+ // Baker TODO: MAINT-
+ // Check out utc_to_pacific_time()
+
+ std::string ban_date_str = bd.mBanDate.toHTTPDateString("%Y/%m/%d");
+// time_t utc_time;
+// utc_time = time_corrected();
+// LLSD substitution;
+// substitution["datetime"] = (S32) utc_time;
+// LLStringUtil::format (ban_date_str, substitution);
+
+ //LL_INFOS("BAKER") << "[BAKER] BAN_DATE: " << bd.mBanDate.toHTTPDateString("%Y/%m/%d") << LL_ENDL;
+ //LL_INFOS("BAKER") << "[BAKER] BAN_DATE_MODIFIED: " << ban_date_str << LL_ENDL;
+
+ //ban_entry.columns.add().column("ban_date").value(ban_date_str.font.name("SANSSERIF_SMALL").style("NORMAL");
+ ban_entry.columns.add().column("ban_date").value(bd.mBanDate.toHTTPDateString("%Y/%m/%d")).font.name("SANSSERIF_SMALL").style("NORMAL");
+
+ mBanList->addNameItemRow(ban_entry);
+ }
+
+ mRefreshBanListButton->setEnabled(TRUE);
+ mCreateBanButton->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_GROUP_BAN_ACCESS) &&
+ gdatap->mBanList.size() < GB_MAX_BANNED_AGENTS);
+ setBanCount(gdatap->mBanList.size());
}
void LLPanelGroupBanListSubTab::setGroupID(const LLUUID& id)
{
- if(mBanList)
- mBanList->deleteAllItems();
+ if(mBanList)
+ mBanList->deleteAllItems();
- setFooterEnabled(FALSE);
- LLPanelGroupSubTab::setGroupID(id);
+ setFooterEnabled(FALSE);
+ LLPanelGroupSubTab::setGroupID(id);
}