diff --git a/indra/newview/fsfloaterradar.cpp b/indra/newview/fsfloaterradar.cpp index 903ad2cf6d..ad6d8b6625 100644 --- a/indra/newview/fsfloaterradar.cpp +++ b/indra/newview/fsfloaterradar.cpp @@ -28,65 +28,24 @@ #include "fsfloaterradar.h" -#include "llnotificationsutil.h" -#include "llfiltereditor.h" -#include "llavataractions.h" -#include "rlvhandler.h" - - FSFloaterRadar::FSFloaterRadar(const LLSD& key) : LLFloater(key), - mFilterSubString(LLStringUtil::null), - mFilterSubStringOrig(LLStringUtil::null), - mFilterEditor(NULL), - mRadarPanel(NULL), - mRadarChangeConnection() + mRadarPanel(NULL) { - mCommitCallbackRegistrar.add("People.addFriend", boost::bind(&FSFloaterRadar::onAddFriendButtonClicked, this)); } FSFloaterRadar::~FSFloaterRadar() { - if (LLVoiceClient::instanceExists()) - { - LLVoiceClient::getInstance()->removeObserver(this); - } - - if (mRadarChangeConnection.connected()) - { - mRadarChangeConnection.disconnect(); - } } BOOL FSFloaterRadar::postBuild() { - mFilterEditor = getChild("filter_input"); - mFilterEditor->setCommitCallback(boost::bind(&FSFloaterRadar::onFilterEdit, this, _2)); - - mProfileButton = getChild("view_profile_btn"); - mIMButton = getChild("im_btn"); - mCallButton = getChild("call_btn"); - mTeleportButton = getChild("teleport_btn"); - mShareButton = getChild("share_btn"); - - mProfileButton->setCommitCallback(boost::bind(&FSFloaterRadar::onViewProfileButtonClicked, this)); - mIMButton->setCommitCallback(boost::bind(&FSFloaterRadar::onImButtonClicked, this)); - mCallButton->setCommitCallback(boost::bind(&FSFloaterRadar::onCallButtonClicked, this)); - mTeleportButton->setCommitCallback(boost::bind(&FSFloaterRadar::onTeleportButtonClicked, this)); - mShareButton->setCommitCallback(boost::bind(&FSFloaterRadar::onShareButtonClicked, this)); - mRadarPanel = findChild("panel_radar"); if (!mRadarPanel) { return FALSE; } mRadarPanel->setVisibleCheckFunction(boost::bind(&FSFloaterRadar::getVisible, this)); - mRadarChangeConnection = mRadarPanel->setChangeCallback(boost::bind(&FSFloaterRadar::updateButtons, this)); - - LLVoiceClient::getInstance()->addObserver(this); - - // call this method in case some list is empty and buttons can be in inconsistent state - updateButtons(); return TRUE; } @@ -99,117 +58,3 @@ void FSFloaterRadar::onOpen(const LLSD& key) LLFloater::onOpen(key); } -// virtual -void FSFloaterRadar::onChange(EStatusType status, const std::string &channelURI, bool proximal) -{ - if (status == STATUS_JOINING || status == STATUS_LEFT_CHANNEL) - { - return; - } - - updateButtons(); -} - -void FSFloaterRadar::updateButtons() -{ - LLUUID selected_id; - - uuid_vec_t selected_uuids; - mRadarPanel->getCurrentItemIDs(selected_uuids); - - bool item_selected = (selected_uuids.size() == 1); - bool multiple_selected = (selected_uuids.size() >= 1); - bool enable_calls = LLVoiceClient::getInstance()->isVoiceWorking() && LLVoiceClient::getInstance()->voiceEnabled(); - -// [RLVa:KB] - Checked: 2010-06-04 (RLVa-1.2.2a) | Modified: RLVa-1.2.0d - if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) - { - item_selected = multiple_selected = false; - } -// [/RLBa:KB] - - mProfileButton->setEnabled(item_selected); - mShareButton->setEnabled(item_selected); - mIMButton->setEnabled(multiple_selected); // allow starting the friends conference for multiple selection - mCallButton->setEnabled(multiple_selected && enable_calls); - mTeleportButton->setEnabled(multiple_selected /* && LLAvatarActions::canOfferTeleport(selected_uuids) */ ); // LO - Dont block the TP button at all. -} - -void FSFloaterRadar::onFilterEdit(const std::string& search_string) -{ - mFilterSubStringOrig = search_string; - LLStringUtil::trimHead(mFilterSubStringOrig); - // Searches are case-insensitive - std::string search_upper = mFilterSubStringOrig; - LLStringUtil::toUpper(search_upper); - - if (mFilterSubString == search_upper) - { - return; - } - - mFilterSubString = search_upper; - - // Apply new filter. - mRadarPanel->setFilter(mFilterSubStringOrig); -} - -void FSFloaterRadar::onViewProfileButtonClicked() -{ - LLUUID id = mRadarPanel->getCurrentItemID(); - LLAvatarActions::showProfile(id); -} - -void FSFloaterRadar::onAddFriendButtonClicked() -{ - LLUUID id = mRadarPanel->getCurrentItemID(); - if (id.notNull()) - { - LLAvatarActions::requestFriendshipDialog(id); - } -} - -void FSFloaterRadar::onImButtonClicked() -{ - uuid_vec_t selected_uuids; - mRadarPanel->getCurrentItemIDs(selected_uuids); - if ( selected_uuids.size() == 1 ) - { - // if selected only one person then start up IM - LLAvatarActions::startIM(selected_uuids.at(0)); - } - else if ( selected_uuids.size() > 1 ) - { - // for multiple selection start up friends conference - LLAvatarActions::startConference(selected_uuids); - } -} - -void FSFloaterRadar::onCallButtonClicked() -{ - uuid_vec_t selected_uuids; - mRadarPanel->getCurrentItemIDs(selected_uuids); - - if (selected_uuids.size() == 1) - { - // initiate a P2P voice chat with the selected user - LLAvatarActions::startCall(mRadarPanel->getCurrentItemID()); - } - else if (selected_uuids.size() > 1) - { - // initiate an ad-hoc voice chat with multiple users - LLAvatarActions::startAdhocCall(selected_uuids); - } -} - -void FSFloaterRadar::onTeleportButtonClicked() -{ - uuid_vec_t selected_uuids; - mRadarPanel->getCurrentItemIDs(selected_uuids); - LLAvatarActions::offerTeleport(selected_uuids); -} - -void FSFloaterRadar::onShareButtonClicked() -{ - LLAvatarActions::share(mRadarPanel->getCurrentItemID()); -} diff --git a/indra/newview/fsfloaterradar.h b/indra/newview/fsfloaterradar.h index 56f93aeee6..9af73a79d8 100644 --- a/indra/newview/fsfloaterradar.h +++ b/indra/newview/fsfloaterradar.h @@ -31,14 +31,12 @@ #include "fspanelradar.h" #include "fsradar.h" -#include "llvoiceclient.h" class LLButton; class LLFilterEditor; class FSFloaterRadar : public LLFloater - , public LLVoiceClientStatusObserver { LOG_CLASS(FSFloaterRadar); public: @@ -48,35 +46,8 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ void onOpen(const LLSD& key); - // Implements LLVoiceClientStatusObserver::onChange() to enable call buttons - // when voice is available - /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); - private: - void updateButtons(); - - // UI callbacks - void onFilterEdit(const std::string& search_string); - void onViewProfileButtonClicked(); - void onAddFriendButtonClicked(); - void onImButtonClicked(); - void onCallButtonClicked(); - void onTeleportButtonClicked(); - void onShareButtonClicked(); - FSPanelRadar* mRadarPanel; - LLFilterEditor* mFilterEditor; - - LLButton* mProfileButton; - LLButton* mShareButton; - LLButton* mIMButton; - LLButton* mCallButton; - LLButton* mTeleportButton; - - std::string mFilterSubString; - std::string mFilterSubStringOrig; - - boost::signals2::connection mRadarChangeConnection; }; #endif // FS_FLOATERRADAR_H diff --git a/indra/newview/fspanelradar.cpp b/indra/newview/fspanelradar.cpp index 5043a82f9b..d3866ed4fe 100644 --- a/indra/newview/fspanelradar.cpp +++ b/indra/newview/fspanelradar.cpp @@ -29,6 +29,7 @@ #include "fspanelradar.h" // libs +#include "llfiltereditor.h" #include "llfloaterreg.h" #include "lllayoutstack.h" #include "llmenugl.h" @@ -78,13 +79,17 @@ static LLRegisterPanelClassWrapper t_fs_panel_radar("fs_panel_rada FSPanelRadar::FSPanelRadar() : LLPanel(), - mRadarGearButton(NULL), + mRadarGearButton(NULL), + mOptionsButton(NULL), mMiniMap(NULL), + mFilterSubString(LLStringUtil::null), + mFilterSubStringOrig(LLStringUtil::null), mRadarList(NULL), mVisibleCheckFunction(NULL) { mButtonsUpdater = new FSButtonsUpdater(boost::bind(&FSPanelRadar::updateButtons, this)); - mCommitCallbackRegistrar.add("People.addFriend", boost::bind(&FSPanelRadar::onAddFriendButtonClicked, this)); + mCommitCallbackRegistrar.add("People.addFriend", boost::bind(&FSPanelRadar::onAddFriendButtonClicked, this)); + mCommitCallbackRegistrar.add("Radar.Gear", boost::bind(&FSPanelRadar::onGearButtonClicked, this, _1)); } FSPanelRadar::~FSPanelRadar() @@ -92,7 +97,7 @@ FSPanelRadar::~FSPanelRadar() mUpdateSignalConnection.disconnect(); delete mButtonsUpdater; - if (mRadarGearMenuHandle.get()) mRadarGearMenuHandle.get()->die(); + if (mÓptionsMenuHandle.get()) mÓptionsMenuHandle.get()->die(); } BOOL FSPanelRadar::postBuild() @@ -106,26 +111,29 @@ BOOL FSPanelRadar::postBuild() mRadarList->setCommitCallback(boost::bind(&FSPanelRadar::onRadarListCommitted, this)); mMiniMap = getChild("Net Map"); - mAddFriendButton = getChild("add_friend_btn_nearby"); + mAddFriendButton = getChild("add_friend_btn"); + + getChild("nearby_filter_input")->setCommitCallback(boost::bind(&FSPanelRadar::onFilterEdit, this, _2)); // Create menus. LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; - registrar.add("Radar.Gear.Action", boost::bind(&FSPanelRadar::onGearMenuItemClicked, this, _2)); - registrar.add("Radar.NameFmt", boost::bind(&FSRadar::onRadarNameFmtClicked, _2)); - registrar.add("Radar.ReportTo", boost::bind(&FSRadar::onRadarReportToClicked, _2)); + registrar.add("Radar.Option.Action", boost::bind(&FSPanelRadar::onGearMenuItemClicked, this, _2)); + registrar.add("Radar.NameFmt", boost::bind(&FSRadar::onRadarNameFmtClicked, _2)); + registrar.add("Radar.ReportTo", boost::bind(&FSRadar::onRadarReportToClicked, _2)); enable_registrar.add("Radar.NameFmtCheck", boost::bind(&FSRadar::radarNameFmtCheck, _2)); enable_registrar.add("Radar.ReportToCheck", boost::bind(&FSRadar::radarReportToCheck, _2)); + + mRadarGearButton = getChild("gear_btn"); + mOptionsButton = getChild("options_btn"); - mRadarGearButton = getChild("nearby_view_sort_btn"); - - LLToggleableMenu* radar_gear = LLUICtrlFactory::getInstance()->createFromFile("menu_fs_radar_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); - if (radar_gear) + LLToggleableMenu* options_menu = LLUICtrlFactory::getInstance()->createFromFile("menu_fs_radar_gear.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); + if (options_menu) { - mRadarGearMenuHandle = radar_gear->getHandle(); - mRadarGearButton->setMenu(radar_gear); + mÓptionsMenuHandle = options_menu->getHandle(); + mOptionsButton->setMenu(options_menu, LLMenuButton::MP_BOTTOM_LEFT); } // Register for radar updates @@ -154,6 +162,7 @@ void FSPanelRadar::updateButtons() is_friend = LLAvatarTracker::instance().getBuddyInfo(selected_id) != NULL; } mAddFriendButton->setEnabled(!is_friend && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); + mRadarGearButton->setEnabled(selected_uuids.size() > 0); } LLUUID FSPanelRadar::getCurrentItemID() const @@ -179,10 +188,23 @@ void FSPanelRadar::getCurrentItemIDs(uuid_vec_t& selected_uuids) const } } -void FSPanelRadar::setFilter(const std::string& search_string) +void FSPanelRadar::onFilterEdit(const std::string& search_string) { + mFilterSubStringOrig = search_string; + LLStringUtil::trimHead(mFilterSubStringOrig); + // Searches are case-insensitive + std::string search_upper = mFilterSubStringOrig; + LLStringUtil::toUpper(search_upper); + + if (mFilterSubString == search_upper) + { + return; + } + + mFilterSubString = search_upper; + // Apply new filter. - mRadarList->setFilterString(search_string); + mRadarList->setFilterString(mFilterSubStringOrig); } void FSPanelRadar::onRadarListDoubleClicked() @@ -244,6 +266,14 @@ void FSPanelRadar::onGearMenuItemClicked(const LLSD& userdata) } } +void FSPanelRadar::onGearButtonClicked(LLUICtrl* btn) +{ + uuid_vec_t selected_uuids; + getCurrentItemIDs(selected_uuids); + // Spawn at bottom left corner of the button. + FSFloaterRadarMenu::gFSRadarMenu.show(btn, selected_uuids, 0, 0); +} + void FSPanelRadar::requestUpdate() { FSRadar* radar = FSRadar::getInstance(); diff --git a/indra/newview/fspanelradar.h b/indra/newview/fspanelradar.h index 50cc63e2e2..4c989461e7 100644 --- a/indra/newview/fspanelradar.h +++ b/indra/newview/fspanelradar.h @@ -51,7 +51,6 @@ public: void requestUpdate(); LLUUID getCurrentItemID() const; void getCurrentItemIDs(uuid_vec_t& selected_uuids) const; - void setFilter(const std::string& search_string); typedef boost::signals2::signal change_callback_t; boost::signals2::connection setChangeCallback(const change_callback_t::slot_type& cb) @@ -74,16 +73,22 @@ private: void onRadarListCommitted(); void onRadarListDoubleClicked(); void onGearMenuItemClicked(const LLSD& userdata); + void onFilterEdit(const std::string& search_string); + void onGearButtonClicked(LLUICtrl* btn); FSRadarListCtrl* mRadarList; LLNetMap* mMiniMap; - LLMenuButton* mRadarGearButton; + LLButton* mRadarGearButton; LLButton* mAddFriendButton; + LLMenuButton* mOptionsButton; - LLHandle mRadarGearMenuHandle; + LLHandle mÓptionsMenuHandle; FSRadar::Updater* mButtonsUpdater; + std::string mFilterSubString; + std::string mFilterSubStringOrig; + // Slot connection for FSRadar updates boost::signals2::connection mUpdateSignalConnection; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 5fd01a74f2..91c72e0dd9 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -589,7 +589,8 @@ void LLPanelPeople::removePicker() BOOL LLPanelPeople::postBuild() { - getChild("nearby_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); + // Firestorm radar + //getChild("nearby_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); getChild("friends_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); getChild("groups_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); getChild("recent_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); diff --git a/indra/newview/skins/ansastorm/xui/en/floater_fs_radar.xml b/indra/newview/skins/ansastorm/xui/en/floater_fs_radar.xml deleted file mode 100644 index bb3cd00650..0000000000 --- a/indra/newview/skins/ansastorm/xui/en/floater_fs_radar.xml +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/ansastorm/xui/en/panel_people.xml b/indra/newview/skins/ansastorm/xui/en/panel_people.xml index 6b3a0fa332..cc68f52366 100644 --- a/indra/newview/skins/ansastorm/xui/en/panel_people.xml +++ b/indra/newview/skins/ansastorm/xui/en/panel_people.xml @@ -85,6 +85,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="nearby_panel" right="-1" top="0"> + - - + + width="219" /> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 2fc1f69f18..01cc909791 100755 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -85,6 +85,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="nearby_panel" right="-1" top="0"> + -