diff options
-rw-r--r-- | indra/newview/llpanelprofile.cpp | 207 | ||||
-rw-r--r-- | indra/newview/llpanelprofile.h | 9 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_profile_secondlife.xml | 18 |
3 files changed, 87 insertions, 147 deletions
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index 41d8a3e51c..85f443635d 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -468,123 +468,8 @@ public: }; LLProfileHandler gProfileHandler; - -////////////////////////////////////////////////////////////////////////// -// LLAgentHandler - -class LLAgentHandler : public LLCommandHandler -{ -public: - // requires trusted browser to trigger - LLAgentHandler() : LLCommandHandler("agent", UNTRUSTED_THROTTLE) { } - - bool handle(const LLSD& params, const LLSD& query_map, - LLMediaCtrl* web) - { - if (params.size() < 2) return false; - LLUUID avatar_id; - if (!avatar_id.set(params[0], FALSE)) - { - return false; - } - - const std::string verb = params[1].asString(); - if (verb == "about") - { - LLAvatarActions::showProfile(avatar_id); - return true; - } - - if (verb == "inspect") - { - LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id)); - return true; - } - - if (verb == "im") - { - LLAvatarActions::startIM(avatar_id); - return true; - } - - if (verb == "pay") - { - if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableAvatarPay")) - { - LLNotificationsUtil::add("NoAvatarPay", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit")); - return true; - } - - LLAvatarActions::pay(avatar_id); - return true; - } - - if (verb == "offerteleport") - { - LLAvatarActions::offerTeleport(avatar_id); - return true; - } - - if (verb == "requestfriend") - { - LLAvatarActions::requestFriendshipDialog(avatar_id); - return true; - } - - if (verb == "removefriend") - { - LLAvatarActions::removeFriendDialog(avatar_id); - return true; - } - - if (verb == "mute") - { - if (! LLAvatarActions::isBlocked(avatar_id)) - { - LLAvatarActions::toggleBlock(avatar_id); - } - return true; - } - - if (verb == "unmute") - { - if (LLAvatarActions::isBlocked(avatar_id)) - { - LLAvatarActions::toggleBlock(avatar_id); - } - return true; - } - - if (verb == "block") - { - if (params.size() > 2) - { - const std::string object_name = LLURI::unescape(params[2].asString()); - LLMute mute(avatar_id, object_name, LLMute::OBJECT); - LLMuteList::getInstance()->add(mute); - LLPanelBlockedList::showPanelAndSelect(mute.mID); - } - return true; - } - - if (verb == "unblock") - { - if (params.size() > 2) - { - const std::string object_name = params[2].asString(); - LLMute mute(avatar_id, object_name, LLMute::OBJECT); - LLMuteList::getInstance()->remove(mute); - } - return true; - } - return false; - } -}; -LLAgentHandler gAgentHandler; - - ///---------------------------------------------------------------------------- -/// LLFloaterInventoryFinder +/// LLFloaterProfilePermissions ///---------------------------------------------------------------------------- class LLFloaterProfilePermissions @@ -605,7 +490,8 @@ private: void fillRightsData(); void rightsConfirmationCallback(const LLSD& notification, const LLSD& response); void confirmModifyRights(bool grant); - void onCommitRights(); + void onCommitSeeOnlineRights(); + void onCommitEditRights(); void onApplyRights(); void onCancel(); @@ -651,7 +537,8 @@ BOOL LLFloaterProfilePermissions::postBuild() mOkBtn = getChild<LLButton>("perms_btn_ok"); mCancelBtn = getChild<LLButton>("perms_btn_cancel"); - mEditObjectRights->setCommitCallback([this](LLUICtrl*, void*) { onCommitRights(); }, nullptr); + mOnlineStatus->setCommitCallback([this](LLUICtrl*, void*) { onCommitSeeOnlineRights(); }, nullptr); + mEditObjectRights->setCommitCallback([this](LLUICtrl*, void*) { onCommitEditRights(); }, nullptr); mOkBtn->setCommitCallback([this](LLUICtrl*, void*) { onApplyRights(); }, nullptr); mCancelBtn->setCommitCallback([this](LLUICtrl*, void*) { onCancel(); }, nullptr); @@ -704,7 +591,9 @@ void LLFloaterProfilePermissions::fillRightsData() { S32 rights = relation->getRightsGrantedTo(); - mOnlineStatus->setValue(LLRelationship::GRANT_ONLINE_STATUS & rights ? TRUE : FALSE); + BOOL see_online = LLRelationship::GRANT_ONLINE_STATUS & rights ? TRUE : FALSE; + mOnlineStatus->setValue(see_online); + mMapRights->setEnabled(see_online); mMapRights->setValue(LLRelationship::GRANT_MAP_LOCATION & rights ? TRUE : FALSE); mEditObjectRights->setValue(LLRelationship::GRANT_MODIFY_OBJECTS & rights ? TRUE : FALSE); } @@ -733,13 +622,38 @@ void LLFloaterProfilePermissions::confirmModifyRights(bool grant) boost::bind(&LLFloaterProfilePermissions::rightsConfirmationCallback, this, _1, _2)); } -void LLFloaterProfilePermissions::onCommitRights() +void LLFloaterProfilePermissions::onCommitSeeOnlineRights() +{ + bool see_online = mOnlineStatus->getValue().asBoolean(); + mMapRights->setEnabled(see_online); + if (see_online) + { + const LLRelationship* relation = LLAvatarTracker::instance().getBuddyInfo(mAvatarID); + if (relation) + { + S32 rights = relation->getRightsGrantedTo(); + mMapRights->setValue(LLRelationship::GRANT_MAP_LOCATION & rights ? TRUE : FALSE); + } + else + { + closeFloater(); + LL_INFOS("ProfilePermissions") << "Floater closing since agent is no longer a friend" << LL_ENDL; + } + } + else + { + mMapRights->setValue(FALSE); + } +} + +void LLFloaterProfilePermissions::onCommitEditRights() { const LLRelationship* buddy_relationship = LLAvatarTracker::instance().getBuddyInfo(mAvatarID); if (!buddy_relationship) { - LL_WARNS("ProfilePermissions") << "Trying to modify rights for non-friend avatar. Skipped." << LL_ENDL; + LL_WARNS("ProfilePermissions") << "Trying to modify rights for non-friend avatar. Closing floater." << LL_ENDL; + closeFloater(); return; } @@ -844,6 +758,13 @@ BOOL LLPanelProfileSecondLife::postBuild() getChild<LLButton>("open_notes")->setCommitCallback([this](LLUICtrl*, void*) { onOpenNotes(); }, nullptr); + mCanSeeOnlineIcon->setMouseUpCallback([this](LLUICtrl*, S32 x, S32 y, MASK mask) { onShowAgentPermissionsDialog(); }); + mCantSeeOnlineIcon->setMouseUpCallback([this](LLUICtrl*, S32 x, S32 y, MASK mask) { onShowAgentPermissionsDialog(); }); + mCanSeeOnMapIcon->setMouseUpCallback([this](LLUICtrl*, S32 x, S32 y, MASK mask) { onShowAgentPermissionsDialog(); }); + mCantSeeOnMapIcon->setMouseUpCallback([this](LLUICtrl*, S32 x, S32 y, MASK mask) { onShowAgentPermissionsDialog(); }); + mCanEditObjectsIcon->setMouseUpCallback([this](LLUICtrl*, S32 x, S32 y, MASK mask) { onShowAgentPermissionsDialog(); }); + mCantEditObjectsIcon->setMouseUpCallback([this](LLUICtrl*, S32 x, S32 y, MASK mask) { onShowAgentPermissionsDialog(); }); + return TRUE; } @@ -995,9 +916,10 @@ void LLPanelProfileSecondLife::openGroupProfile() void LLPanelProfileSecondLife::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name) { mAvatarNameCacheConnection.disconnect(); - // Should be possible to get this from AgentProfile capability - getChild<LLUICtrl>("display_name")->setValue( av_name.getDisplayName() ); - getChild<LLUICtrl>("user_name")->setValue(av_name.getAccountName()); + if (getIsLoaded()) + { + fillNameAgeData(av_name, mBornOn); + } } void LLPanelProfileSecondLife::setNotesSnippet(std::string ¬es) @@ -1049,10 +971,21 @@ void LLPanelProfileSecondLife::fillCommonData(const LLAvatarData* avatar_data) // and to make sure icons in text will be up to date LLAvatarIconIDCache::getInstance()->add(avatar_data->avatar_id, avatar_data->image_id); - LLStringUtil::format_map_t args; - args["[AGE]"] = LLDateUtil::ageFromDate( avatar_data->born_on, LLDate::now()); - std::string register_date = getString("AgeFormat", args); - getChild<LLUICtrl>("user_age")->setValue(register_date); + mBornOn = avatar_data->born_on; + + // Should be possible to get user and display names from AgentProfile capability + // but at the moment contraining this to limits of LLAvatarData + LLAvatarName av_name; + if (LLAvatarNameCache::get(avatar_data->avatar_id, &av_name)) + { + fillNameAgeData(av_name, mBornOn); + } + else if (!mAvatarNameCacheConnection.connected()) + { + // shouldn't happen, but just in case + mAvatarNameCacheConnection = LLAvatarNameCache::get(getAvatarId(), boost::bind(&LLPanelProfileSecondLife::onAvatarNameCache, this, _1, _2)); + } + setDescriptionText(avatar_data->about_text); if (avatar_data->image_id.notNull()) @@ -1144,10 +1077,16 @@ void LLPanelProfileSecondLife::fillRightsData() } childSetVisible("permissions_panel", NULL != relation); - childSetVisible("spacer_layout", NULL == relation); - childSetVisible("frind_layout", NULL != relation); - childSetVisible("online_layout", false); - childSetVisible("offline_layout", false); +} + +void LLPanelProfileSecondLife::fillNameAgeData(const LLAvatarName &av_name, const LLDate &born_on) +{ + LLStringUtil::format_map_t args; + args["[AGE]"] = LLDateUtil::ageFromDate(born_on, LLDate::now()); + args["[NAME]"] = av_name.getAccountName(); + std::string register_date = getString("NameAgeFormat", args); + getChild<LLUICtrl>("user_name_age")->setValue(register_date); + getChild<LLUICtrl>("display_name")->setValue(av_name.getDisplayName()); } void LLPanelProfileSecondLife::onImageLoaded(BOOL success, LLViewerFetchedTexture *imagep) @@ -1620,13 +1559,15 @@ void LLPanelProfileSecondLife::onShowAgentPermissionsDialog() LLFloaterProfilePermissions * perms = new LLFloaterProfilePermissions(parent_floater, getAvatarId()); mFloaterPermissionsHandle = perms->getHandle(); perms->openFloater(); + perms->setVisibleAndFrontmost(TRUE); parent_floater->addDependentFloater(mFloaterPermissionsHandle); } } else // already open { - floater->closeFloater(); + floater->setMinimized(FALSE); + floater->setVisibleAndFrontmost(TRUE); } } diff --git a/indra/newview/llpanelprofile.h b/indra/newview/llpanelprofile.h index 2f2437ed0a..4985ec0015 100644 --- a/indra/newview/llpanelprofile.h +++ b/indra/newview/llpanelprofile.h @@ -136,8 +136,16 @@ protected: */ void fillAccountStatus(const LLAvatarData* avatar_data); + /** + * Sets permissions specific icon + */ void fillRightsData(); + /** + * Fills user name, display name, age. + */ + void fillNameAgeData(const LLAvatarName &av_name, const LLDate &born_on); + void onImageLoaded(BOOL success, LLViewerFetchedTexture *imagep); static void onImageLoaded(BOOL success, LLViewerFetchedTexture *src_vi, @@ -204,6 +212,7 @@ private: bool mWaitingForImageUpload; bool mAllowPublish; std::string mDescriptionText; + LLDate mBornOn; boost::signals2::connection mAvatarNameCacheConnection; }; diff --git a/indra/newview/skins/default/xui/en/panel_profile_secondlife.xml b/indra/newview/skins/default/xui/en/panel_profile_secondlife.xml index 853e782de1..7dd16de0ed 100644 --- a/indra/newview/skins/default/xui/en/panel_profile_secondlife.xml +++ b/indra/newview/skins/default/xui/en/panel_profile_secondlife.xml @@ -10,8 +10,8 @@ layout="topleft" > <string - name="AgeFormat" - value="[AGE]" /> + name="NameAgeFormat" + value="[NAME] ([AGE])" /> <string name="partner_text" value="Partner: [LINK]" /> @@ -99,17 +99,7 @@ Account: [ACCTTYPE] layout="topleft"/> <text - name="user_name" - value="(loading...)" - top_pad="0" - left_delta="0" - right="-1" - height="16" - follows="left|top|right" - layout="topleft"/> - - <text - name="user_age" + name="user_name_age" value="(loading...)" top_pad="0" left_delta="0" @@ -171,7 +161,7 @@ Account: [ACCTTYPE] <text name="frind_text" value="You are friends" - text_color="Green" + text_color="ConversationFriendColor" top="0" left="0" right="-1" |