diff options
-rw-r--r-- | indra/newview/llpanelgroupinvite.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp index b9b347d4be..c082e9a2d1 100644 --- a/indra/newview/llpanelgroupinvite.cpp +++ b/indra/newview/llpanelgroupinvite.cpp @@ -85,6 +85,7 @@ public: std::string mAlreadyInGroup; std::string mTooManySelected; bool mConfirmedOwnerInvite; + std::set<LLUUID> mInviteeIDs; void (*mCloseCallback)(void* data); @@ -110,31 +111,30 @@ LLPanelGroupInvite::impl::~impl() { } +const S32 MAX_GROUP_INVITES = 100; // Max invites per request. 100 to match server cap. + void LLPanelGroupInvite::impl::addUsers(const std::vector<std::string>& names, const uuid_vec_t& agent_ids) { std::string name; LLUUID id; + if (names.size() + mInviteeIDs.size() > MAX_GROUP_INVITES) + { + // Fail! Show a warning and don't add any names. + LLSD msg; + msg["MESSAGE"] = mTooManySelected; + LLNotificationsUtil::add("GenericAlert", msg); + return; + } + for (S32 i = 0; i < (S32)names.size(); i++) { name = names[i]; id = agent_ids[i]; // Make sure this agent isn't already in the list. - bool already_in_list = false; - std::vector<LLScrollListItem*> items = mInvitees->getAllData(); - for (std::vector<LLScrollListItem*>::iterator iter = items.begin(); - iter != items.end(); ++iter) - { - LLScrollListItem* item = *iter; - if (item->getUUID() == id) - { - already_in_list = true; - break; - } - } - if (already_in_list) + if (mInviteeIDs.find(id) != mInviteeIDs.end()) { continue; } @@ -145,6 +145,7 @@ void LLPanelGroupInvite::impl::addUsers(const std::vector<std::string>& names, row["columns"][0]["value"] = name; mInvitees->addElement(row); + mInviteeIDs.insert(id); } } @@ -186,7 +187,6 @@ void LLPanelGroupInvite::impl::submitInvitations() role_member_pairs[item->getUUID()] = role_id; } - const S32 MAX_GROUP_INVITES = 100; // Max invites per request. 100 to match server cap. if (role_member_pairs.size() > MAX_GROUP_INVITES) { // Fail! @@ -325,6 +325,12 @@ void LLPanelGroupInvite::impl::handleRemove() mInvitees->getAllSelected(); if (selection.empty()) return; + std::vector<LLScrollListItem*>::iterator iter; + for(iter = selection.begin(); iter != selection.end(); ++iter) + { + mInviteeIDs.erase( (*iter)->getUUID() ); + } + // Remove all selected invitees. mInvitees->deleteSelectedItems(); mRemoveButton->setEnabled(FALSE); @@ -430,6 +436,7 @@ void LLPanelGroupInvite::clear() mImplementation->mRoleNames->clear(); mImplementation->mRoleNames->removeall(); mImplementation->mOKButton->setEnabled(FALSE); + mImplementation->mInviteeIDs.clear(); } void LLPanelGroupInvite::addUsers(uuid_vec_t& agent_ids) |