summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2012-12-20 18:36:01 -0800
committerMerov Linden <merov@lindenlab.com>2012-12-20 18:36:01 -0800
commit090636f107a2d3ba3438a6690f36eac3ec257314 (patch)
tree27b5d0f6752cd37f81080982dbd83288a0abaed6
parentc81a0b0a5701425aa52521d8600a280d05040517 (diff)
CHUI-429 : Fixed! Add a flag to filter multi/single selection situations in menu building. Implement in conversation contextual menu.
-rw-r--r--indra/llui/llfolderview.cpp5
-rw-r--r--indra/llui/llfolderview.h1
-rw-r--r--indra/newview/llconversationmodel.cpp67
-rwxr-xr-xindra/newview/llconversationmodel.h2
-rw-r--r--indra/newview/llfloaterimcontainer.cpp1
-rw-r--r--indra/newview/skins/default/xui/en/menu_conversation.xml7
6 files changed, 50 insertions, 33 deletions
diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index a33ffc4240..7ae79d94fe 100644
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -1913,14 +1913,15 @@ void LLFolderView::updateMenuOptions(LLMenuGL* menu)
// Successively filter out invalid options
- U32 flags = FIRST_SELECTED_ITEM;
+ U32 multi_select_flag = (mSelectedItems.size() > 1 ? ITEM_IN_MULTI_SELECTION : 0x0);
+ U32 flags = multi_select_flag | FIRST_SELECTED_ITEM;
for (selected_items_t::iterator item_itor = mSelectedItems.begin();
item_itor != mSelectedItems.end();
++item_itor)
{
LLFolderViewItem* selected_item = (*item_itor);
selected_item->buildContextMenu(*menu, flags);
- flags = 0x0;
+ flags = multi_select_flag;
}
addNoOptions(menu);
diff --git a/indra/llui/llfolderview.h b/indra/llui/llfolderview.h
index d4a1434c73..2ee7417240 100644
--- a/indra/llui/llfolderview.h
+++ b/indra/llui/llfolderview.h
@@ -400,5 +400,6 @@ public:
// Flags for buildContextMenu()
const U32 SUPPRESS_OPEN_ITEM = 0x1;
const U32 FIRST_SELECTED_ITEM = 0x2;
+const U32 ITEM_IN_MULTI_SELECTION = 0x4;
#endif // LL_LLFOLDERVIEW_H
diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp
index d03ad92fbc..005439301a 100644
--- a/indra/newview/llconversationmodel.cpp
+++ b/indra/newview/llconversationmodel.cpp
@@ -102,35 +102,44 @@ void LLConversationItem::showProperties(void)
{
}
-void LLConversationItem::buildParticipantMenuOptions(menuentry_vec_t& items)
-{
- items.push_back(std::string("view_profile"));
- items.push_back(std::string("im"));
- items.push_back(std::string("offer_teleport"));
- items.push_back(std::string("voice_call"));
- items.push_back(std::string("chat_history"));
- items.push_back(std::string("separator_chat_history"));
- items.push_back(std::string("add_friend"));
- items.push_back(std::string("remove_friend"));
- items.push_back(std::string("invite_to_group"));
- items.push_back(std::string("separator_invite_to_group"));
- items.push_back(std::string("map"));
- items.push_back(std::string("share"));
- items.push_back(std::string("pay"));
- items.push_back(std::string("block_unblock"));
- items.push_back(std::string("MuteText"));
-
- if(this->getType() != CONV_SESSION_1_ON_1 && mDisplayModeratorOptions)
+void LLConversationItem::buildParticipantMenuOptions(menuentry_vec_t& items, U32 flags)
+{
+ if (flags & ITEM_IN_MULTI_SELECTION)
{
- items.push_back(std::string("Moderator Options Separator"));
- items.push_back(std::string("Moderator Options"));
- items.push_back(std::string("AllowTextChat"));
- items.push_back(std::string("moderate_voice_separator"));
- items.push_back(std::string("ModerateVoiceToggleMuteSelected"));
- items.push_back(std::string("ModerateVoiceMute"));
- items.push_back(std::string("ModerateVoiceUnmute"));
+ items.push_back(std::string("im"));
+ items.push_back(std::string("offer_teleport"));
+ items.push_back(std::string("voice_call"));
+ items.push_back(std::string("remove_friends"));
+ }
+ else
+ {
+ items.push_back(std::string("view_profile"));
+ items.push_back(std::string("im"));
+ items.push_back(std::string("offer_teleport"));
+ items.push_back(std::string("voice_call"));
+ items.push_back(std::string("chat_history"));
+ items.push_back(std::string("separator_chat_history"));
+ items.push_back(std::string("add_friend"));
+ items.push_back(std::string("remove_friend"));
+ items.push_back(std::string("invite_to_group"));
+ items.push_back(std::string("separator_invite_to_group"));
+ items.push_back(std::string("map"));
+ items.push_back(std::string("share"));
+ items.push_back(std::string("pay"));
+ items.push_back(std::string("block_unblock"));
+ items.push_back(std::string("MuteText"));
+
+ if ((getType() != CONV_SESSION_1_ON_1) && mDisplayModeratorOptions)
+ {
+ items.push_back(std::string("Moderator Options Separator"));
+ items.push_back(std::string("Moderator Options"));
+ items.push_back(std::string("AllowTextChat"));
+ items.push_back(std::string("moderate_voice_separator"));
+ items.push_back(std::string("ModerateVoiceToggleMuteSelected"));
+ items.push_back(std::string("ModerateVoiceMute"));
+ items.push_back(std::string("ModerateVoiceUnmute"));
+ }
}
-
}
//
@@ -306,7 +315,7 @@ void LLConversationItemSession::buildContextMenu(LLMenuGL& menu, U32 flags)
{
items.push_back(std::string("close_conversation"));
items.push_back(std::string("separator_disconnect_from_voice"));
- buildParticipantMenuOptions(items);
+ buildParticipantMenuOptions(items, flags);
}
else if(this->getType() == CONV_SESSION_GROUP)
{
@@ -440,7 +449,7 @@ void LLConversationItemParticipant::buildContextMenu(LLMenuGL& menu, U32 flags)
menuentry_vec_t items;
menuentry_vec_t disabled_items;
- buildParticipantMenuOptions(items);
+ buildParticipantMenuOptions(items, flags);
hide_context_entries(menu, items, disabled_items);
}
diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h
index 743a6ba40b..02002d8f70 100755
--- a/indra/newview/llconversationmodel.h
+++ b/indra/newview/llconversationmodel.h
@@ -130,7 +130,7 @@ public:
void postEvent(const std::string& event_type, LLConversationItemSession* session, LLConversationItemParticipant* participant);
- void buildParticipantMenuOptions(menuentry_vec_t& items);
+ void buildParticipantMenuOptions(menuentry_vec_t& items, U32 flags);
protected:
std::string mName; // Name of the session or the participant
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index 92ea6dacde..2019a35faa 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -1232,7 +1232,6 @@ void LLFloaterIMContainer::showConversation(const LLUUID& session_id)
void LLFloaterIMContainer::clearAllFlashStates()
{
- llinfos << "Merov debug : clear all flash states" << llendl;
conversations_widgets_map::iterator widget_it = mConversationsWidgets.begin();
for (;widget_it != mConversationsWidgets.end(); ++widget_it)
{
diff --git a/indra/newview/skins/default/xui/en/menu_conversation.xml b/indra/newview/skins/default/xui/en/menu_conversation.xml
index e0edf384d6..46c6e19fa5 100644
--- a/indra/newview/skins/default/xui/en/menu_conversation.xml
+++ b/indra/newview/skins/default/xui/en/menu_conversation.xml
@@ -76,6 +76,13 @@
<on_enable function="Avatar.EnableItem" parameter="can_delete" />
</menu_item_call>
<menu_item_call
+ label="Remove friends"
+ layout="topleft"
+ name="remove_friends">
+ <on_click function="Avatar.DoToSelected" parameter="remove_friend" />
+ <on_enable function="Avatar.EnableItem" parameter="can_delete" />
+ </menu_item_call>
+ <menu_item_call
label="Invite to group..."
layout="topleft"
name="invite_to_group">