summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelavatar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llpanelavatar.cpp')
-rw-r--r--indra/newview/llpanelavatar.cpp103
1 files changed, 95 insertions, 8 deletions
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
index 2c27808f03..b9f422ca6f 100644
--- a/indra/newview/llpanelavatar.cpp
+++ b/indra/newview/llpanelavatar.cpp
@@ -40,6 +40,7 @@
#include "llcombobox.h"
#include "lldateutil.h" // ageFromDate()
#include "llimview.h"
+#include "llnotificationsutil.h"
#include "lltexteditor.h"
#include "lltexturectrl.h"
#include "lltoggleablemenu.h"
@@ -47,6 +48,10 @@
#include "llscrollcontainer.h"
#include "llavatariconctrl.h"
#include "llweb.h"
+#include "llfloaterworldmap.h"
+#include "llfloaterreg.h"
+#include "llnotificationsutil.h"
+#include "llvoiceclient.h"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLDropTarget
@@ -149,6 +154,8 @@ BOOL LLPanelAvatarNotes::postBuild()
childSetCommitCallback("call", boost::bind(&LLPanelAvatarNotes::onCallButtonClick, this), NULL);
childSetCommitCallback("teleport", boost::bind(&LLPanelAvatarNotes::onTeleportButtonClick, this), NULL);
childSetCommitCallback("share", boost::bind(&LLPanelAvatarNotes::onShareButtonClick, this), NULL);
+ childSetCommitCallback("show_on_map_btn", (boost::bind(
+ &LLPanelAvatarNotes::onMapButtonClick, this)), NULL);
LLTextEditor* te = getChild<LLTextEditor>("notes_edit");
te->setCommitCallback(boost::bind(&LLPanelAvatarNotes::onCommitNotes,this));
@@ -194,6 +201,46 @@ void LLPanelAvatarNotes::onCommitNotes()
LLAvatarPropertiesProcessor::getInstance()-> sendNotes(getAvatarId(),notes);
}
+void LLPanelAvatarNotes::rightsConfirmationCallback(const LLSD& notification,
+ const LLSD& response, S32 rights)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option == 0)
+ {
+ LLAvatarPropertiesProcessor::getInstance()->sendFriendRights(
+ getAvatarId(), rights);
+ }
+ else
+ {
+ childSetValue("objects_check",
+ childGetValue("objects_check").asBoolean() ? FALSE : TRUE);
+ }
+}
+
+void LLPanelAvatarNotes::confirmModifyRights(bool grant, S32 rights)
+{
+ std::string first, last;
+ LLSD args;
+ if (gCacheName->getName(getAvatarId(), first, last))
+ {
+ args["FIRST_NAME"] = first;
+ args["LAST_NAME"] = last;
+ }
+
+ if (grant)
+ {
+ LLNotificationsUtil::add("GrantModifyRights", args, LLSD(),
+ boost::bind(&LLPanelAvatarNotes::rightsConfirmationCallback, this,
+ _1, _2, rights));
+ }
+ else
+ {
+ LLNotificationsUtil::add("RevokeModifyRights", args, LLSD(),
+ boost::bind(&LLPanelAvatarNotes::rightsConfirmationCallback, this,
+ _1, _2, rights));
+ }
+}
+
void LLPanelAvatarNotes::onCommitRights()
{
S32 rights = 0;
@@ -205,7 +252,22 @@ void LLPanelAvatarNotes::onCommitRights()
if(childGetValue("objects_check").asBoolean())
rights |= LLRelationship::GRANT_MODIFY_OBJECTS;
- LLAvatarPropertiesProcessor::getInstance()->sendFriendRights(getAvatarId(),rights);
+ const LLRelationship* buddy_relationship =
+ LLAvatarTracker::instance().getBuddyInfo(getAvatarId());
+ bool allow_modify_objects = childGetValue("objects_check").asBoolean();
+
+ // if modify objects checkbox clicked
+ if (buddy_relationship->isRightGrantedTo(
+ LLRelationship::GRANT_MODIFY_OBJECTS) != allow_modify_objects)
+ {
+ confirmModifyRights(allow_modify_objects, rights);
+ }
+ // only one checkbox can trigger commit, so store the rest of rights
+ else
+ {
+ LLAvatarPropertiesProcessor::getInstance()->sendFriendRights(
+ getAvatarId(), rights);
+ }
}
void LLPanelAvatarNotes::processProperties(void* data, EAvatarProcessorType type)
@@ -310,6 +372,7 @@ void LLPanelProfileTab::onOpen(const LLSD& key)
// Update data even if we are viewing same avatar profile as some data might been changed.
setAvatarId(key.asUUID());
updateData();
+ updateButtons();
}
void LLPanelProfileTab::scrollToTop()
@@ -319,6 +382,23 @@ void LLPanelProfileTab::scrollToTop()
scrollContainer->goToTop();
}
+void LLPanelProfileTab::onMapButtonClick()
+{
+ std::string name;
+ gCacheName->getFullName(getAvatarId(), name);
+ gFloaterWorldMap->trackAvatar(getAvatarId(), name);
+ LLFloaterReg::showInstance("world_map");
+}
+
+void LLPanelProfileTab::updateButtons()
+{
+ bool enable_map_btn = LLAvatarTracker::instance().isBuddyOnline(getAvatarId())
+ && gAgent.isGodlike() || is_agent_mappable(getAvatarId());
+
+ childSetEnabled("show_on_map_btn", enable_map_btn);
+ childSetEnabled("call", LLVoiceClient::voiceEnabled());
+}
+
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
@@ -337,9 +417,12 @@ BOOL LLPanelAvatarProfile::postBuild()
childSetCommitCallback("teleport",(boost::bind(&LLPanelAvatarProfile::onTeleportButtonClick,this)),NULL);
childSetCommitCallback("overflow_btn", boost::bind(&LLPanelAvatarProfile::onOverflowButtonClicked, this), NULL);
childSetCommitCallback("share",(boost::bind(&LLPanelAvatarProfile::onShareButtonClick,this)),NULL);
+ childSetCommitCallback("show_on_map_btn", (boost::bind(
+ &LLPanelAvatarProfile::onMapButtonClick, this)), NULL);
LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
registrar.add("Profile.Pay", boost::bind(&LLPanelAvatarProfile::pay, this));
+ registrar.add("Profile.Share", boost::bind(&LLPanelAvatarProfile::share, this));
mProfileMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_profile_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
@@ -449,20 +532,19 @@ void LLPanelAvatarProfile::processGroupProperties(const LLAvatarGroups* avatar_g
for(; it_end != it; ++it)
{
LLAvatarGroups::LLGroupData group_data = *it;
-
- // Check if there is no duplicates for this group
- if (std::find(mGroups.begin(), mGroups.end(), group_data.group_name) == mGroups.end())
- mGroups.push_back(group_data.group_name);
+ mGroups[group_data.group_name] = group_data.group_id;
}
// Creating string, containing group list
std::string groups = "";
- for (group_list_t::const_iterator it = mGroups.begin(); it != mGroups.end(); ++it)
+ for (group_map_t::iterator it = mGroups.begin(); it != mGroups.end(); ++it)
{
if (it != mGroups.begin())
groups += ", ";
- groups += *it;
+
+ std::string group_url="[secondlife:///app/group/" + it->second.asString() + "/about " + it->first + "]";
+ groups += group_url;
}
childSetValue("sl_groups", groups);
@@ -535,6 +617,11 @@ void LLPanelAvatarProfile::pay()
LLAvatarActions::pay(getAvatarId());
}
+void LLPanelAvatarProfile::share()
+{
+ LLAvatarActions::share(getAvatarId());
+}
+
void LLPanelAvatarProfile::onUrlTextboxClicked(const std::string& url)
{
LLWeb::loadURL(url);
@@ -678,7 +765,7 @@ void LLPanelMyProfile::onStatusChanged()
{
gAgent.clearAFK();
gAgent.setBusy();
- LLNotifications::instance().add("BusyModeSet");
+ LLNotificationsUtil::add("BusyModeSet");
}
}