From 1e44163bf45d73d9634bfe8892a9a34f7d053ab2 Mon Sep 17 00:00:00 2001 From: Kadah Date: Sun, 23 Jan 2011 23:50:32 -0800 Subject: [PATCH] Contacts Floater: Added listing and action to buttons on groups tab --- indra/newview/fscontactsfloater.cpp | 109 ++++++++++++++---- indra/newview/fscontactsfloater.h | 12 ++ .../default/xui/en/fs_floater_contacts.xml | 6 + .../xui/en/fs_panel_contacts_groups.xml | 40 ++++--- 4 files changed, 129 insertions(+), 38 deletions(-) diff --git a/indra/newview/fscontactsfloater.cpp b/indra/newview/fscontactsfloater.cpp index d5ffc91624..8b0106e3ec 100644 --- a/indra/newview/fscontactsfloater.cpp +++ b/indra/newview/fscontactsfloater.cpp @@ -41,6 +41,8 @@ #include "llcallingcard.h" // for LLAvatarTracker #include "llfloateravatarpicker.h" #include "llfriendcard.h" +#include "llgroupactions.h" +#include "llgrouplist.h" #include "llsidetray.h" static const std::string FRIENDS_TAB_NAME = "friends_panel"; @@ -87,7 +89,8 @@ static const LLAvatarItemStatusComparator STATUS_COMPARATOR; FSFloaterContacts::FSFloaterContacts(const LLSD& seed) : LLFloater(seed), mTabContainer(NULL), - mFriendList(NULL) + mFriendList(NULL), + mGroupList(NULL) { } @@ -118,6 +121,23 @@ BOOL FSFloaterContacts::postBuild() mFriendsTab->childSetAction("remove_btn", boost::bind(&FSFloaterContacts::onDeleteFriendButtonClicked, this)); mFriendsTab->childSetAction("add_btn", boost::bind(&FSFloaterContacts::onAddFriendWizButtonClicked, this)); + mGroupsTab = getChild(GROUP_TAB_NAME); + mGroupList = mGroupsTab->getChild("group_list"); + mGroupList->setNoItemsMsg(getString("no_groups_msg")); + mGroupList->setNoFilteredItemsMsg(getString("no_filtered_groups_msg")); + + mGroupList->setDoubleClickCallback(boost::bind(&FSFloaterContacts::onGroupChatButtonClicked, this)); + // mGroupList->setCommitCallback(boost::bind(&FSFloaterContacts::updateButtons, this)); + mGroupList->setReturnCallback(boost::bind(&FSFloaterContacts::onGroupChatButtonClicked, this)); + + + mGroupsTab->childSetAction("chat_btn", boost::bind(&FSFloaterContacts::onGroupChatButtonClicked, this)); + mGroupsTab->childSetAction("info_btn", boost::bind(&FSFloaterContacts::onGroupInfoButtonClicked, this)); + mGroupsTab->childSetAction("activate_btn", boost::bind(&FSFloaterContacts::onGroupActivateButtonClicked, this)); + mGroupsTab->childSetAction("leave_btn", boost::bind(&FSFloaterContacts::onGroupLeaveButtonClicked, this)); + mGroupsTab->childSetAction("create_btn", boost::bind(&FSFloaterContacts::onGroupCreateButtonClicked, this)); + mGroupsTab->childSetAction("search_btn", boost::bind(&FSFloaterContacts::onGroupSearchButtonClicked, this)); + return TRUE; } @@ -134,6 +154,27 @@ void FSFloaterContacts::onOpen(const LLSD& key) } +// +// Friend actions +// + +void FSFloaterContacts::onAvatarListDoubleClicked(LLUICtrl* ctrl) +{ + LLAvatarListItem* item = dynamic_cast(ctrl); + if(!item) + { + return; + } + + LLUUID clicked_id = item->getAvatarId(); + +#if 0 // SJB: Useful for testing, but not currently functional or to spec + LLAvatarActions::showProfile(clicked_id); +#else // spec says open IM window + LLAvatarActions::startIM(clicked_id); +#endif +} + void FSFloaterContacts::onImButtonClicked() { uuid_vec_t selected_uuids; @@ -166,7 +207,8 @@ void FSFloaterContacts::onTeleportButtonClicked() void FSFloaterContacts::onPayButtonClicked() { LLUUID id = getCurrentItemID(); - LLAvatarActions::pay(id); + if (id.notNull()) + LLAvatarActions::pay(id); } void FSFloaterContacts::onDeleteFriendButtonClicked() @@ -213,6 +255,45 @@ void FSFloaterContacts::onAddFriendWizButtonClicked() } } +// +// Group actions +// + +void FSFloaterContacts::onGroupChatButtonClicked() +{ + LLUUID group_id = getCurrentItemID(); + if (group_id.notNull()) + LLGroupActions::startIM(group_id); +} + +void FSFloaterContacts::onGroupInfoButtonClicked() +{ + LLGroupActions::show(getCurrentItemID()); +} + +void FSFloaterContacts::onGroupActivateButtonClicked() +{ + LLGroupActions::activate(mGroupList->getSelectedUUID()); +} + +void FSFloaterContacts::onGroupLeaveButtonClicked() +{ + LLUUID group_id = getCurrentItemID(); + if (group_id.notNull()) + LLGroupActions::leave(group_id); +} + +void FSFloaterContacts::onGroupCreateButtonClicked() +{ + LLGroupActions::createGroup(); +} + +void FSFloaterContacts::onGroupSearchButtonClicked() +{ + LLGroupActions::search(); +} + + std::string FSFloaterContacts::getActiveTabName() const { @@ -226,8 +307,8 @@ LLUUID FSFloaterContacts::getCurrentItemID() const if (cur_tab == FRIENDS_TAB_NAME) return mFriendList->getSelectedUUID(); - // if (cur_tab == GROUP_TAB_NAME) - // return mGroupList->getSelectedUUID(); + if (cur_tab == GROUP_TAB_NAME) + return mGroupList->getSelectedUUID(); llassert(0 && "unknown tab selected"); return LLUUID::null; @@ -239,29 +320,13 @@ void FSFloaterContacts::getCurrentItemIDs(uuid_vec_t& selected_uuids) const if (cur_tab == FRIENDS_TAB_NAME) mFriendList->getSelectedUUIDs(selected_uuids); - // else if (cur_tab == GROUP_TAB_NAME) - // mGroupList->getSelectedUUIDs(selected_uuids); + else if (cur_tab == GROUP_TAB_NAME) + mGroupList->getSelectedUUIDs(selected_uuids); else llassert(0 && "unknown tab selected"); } -void FSFloaterContacts::onAvatarListDoubleClicked(LLUICtrl* ctrl) -{ - LLAvatarListItem* item = dynamic_cast(ctrl); - if(!item) - { - return; - } - - LLUUID clicked_id = item->getAvatarId(); - -#if 0 // SJB: Useful for testing, but not currently functional or to spec - LLAvatarActions::showProfile(clicked_id); -#else // spec says open IM window - LLAvatarActions::startIM(clicked_id); -#endif -} // static diff --git a/indra/newview/fscontactsfloater.h b/indra/newview/fscontactsfloater.h index 45f7e88974..b0e2d1e96a 100644 --- a/indra/newview/fscontactsfloater.h +++ b/indra/newview/fscontactsfloater.h @@ -35,6 +35,7 @@ class LLAvatarList; class LLAvatarName; +class LLGroupList; class LLPanel; class LLTabContainer; @@ -52,6 +53,8 @@ public: LLPanel* mFriendsTab; LLAvatarList* mFriendList; + LLPanel* mGroupsTab; + LLGroupList* mGroupList; private: std::string getActiveTabName() const; @@ -64,6 +67,7 @@ private: // misc callbacks static void onAvatarPicked(const uuid_vec_t& ids, const std::vector names); + // friend buttons void onViewProfileButtonClicked(); void onImButtonClicked(); void onTeleportButtonClicked(); @@ -71,6 +75,14 @@ private: void onDeleteFriendButtonClicked(); void onAddFriendWizButtonClicked(); + // group buttons + void onGroupChatButtonClicked(); + void onGroupInfoButtonClicked(); + void onGroupActivateButtonClicked(); + void onGroupLeaveButtonClicked(); + void onGroupCreateButtonClicked(); + void onGroupSearchButtonClicked(); + LLTabContainer* mTabContainer; }; diff --git a/indra/newview/skins/default/xui/en/fs_floater_contacts.xml b/indra/newview/skins/default/xui/en/fs_floater_contacts.xml index 72b71c0d67..fcbb04b494 100644 --- a/indra/newview/skins/default/xui/en/fs_floater_contacts.xml +++ b/indra/newview/skins/default/xui/en/fs_floater_contacts.xml @@ -15,6 +15,12 @@ + + - + +