diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 049232b5eccee072fd23bdd208c9dacea7b8653e..6ddda34ba299b97b4b1821c7099aca2009a9bde6 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11944,7 +11944,7 @@ <key>Persist</key> <integer>1</integer> <key>Type</key> - <string>Boolean</string> + <string>U32</string> <key>Value</key> <integer>1</integer> </map> diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 35ffd12143f19e1d418696e9de8251c9a28531d4..b3918eb03678b0c4be32586004788c61de556451 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -59,6 +59,15 @@ static const F32 LIT_UPDATE_PERIOD = 2; // Used to limit time spent for avatar list update per frame. static const unsigned ADD_LIMIT = 50; +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2013-06-03 (Catznip-3.4) +void LLAvatarList::ShowPermissionTypeNames::declareValues() +{ + declare("never", SP_NEVER); + declare("hover", SP_HOVER); + declare("nondefault", SP_NONDEFAULT); +} +// [/SL:KB] + bool LLAvatarList::contains(const LLUUID& id) { const uuid_vec_t& ids = getIDs(); @@ -94,10 +103,11 @@ void LLAvatarList::setSpeakingIndicatorsVisible(bool visible) } } -void LLAvatarList::showPermissions(bool visible) +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2013-06-03 (Catznip-3.4) +void LLAvatarList::showPermissions(EShowPermissionType spType) { // Save the value for new items to use. - mShowPermissions = visible; + mShowPermissions = spType; // Enable or disable showing permissions icons for all existing items. std::vector<LLPanel*> items; @@ -126,7 +136,7 @@ LLAvatarList::Params::Params() , show_info_btn("show_info_btn", true) , show_profile_btn("show_profile_btn", true) , show_speaking_indicator("show_speaking_indicator", true) -, show_permissions_granted("show_permissions_granted", false) +, show_permissions_granted("show_permissions_granted", SP_NEVER) { } diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 0e25a256f0addf95ccfe2cba81f541521ed75b2a..3ff837d9f10d57bbc38bb299af5904bc251209b3 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -47,6 +47,11 @@ class LLAvatarList final : public LLFlatListViewEx { LOG_CLASS(LLAvatarList); public: + struct ShowPermissionTypeNames : public LLInitParam::TypeValuesHelper<EShowPermissionType, ShowPermissionTypeNames> + { + static void declareValues(); + }; + struct Params : public LLInitParam::Block<Params, LLFlatListViewEx::Params> { Optional<bool> ignore_online_status, // show all items as online @@ -54,8 +59,8 @@ class LLAvatarList final : public LLFlatListViewEx show_distance, // *HACK: my sinuses hurt and i want pizza. show_info_btn, show_profile_btn, - show_speaking_indicator, - show_permissions_granted; + show_speaking_indicator; + Optional<EShowPermissionType, ShowPermissionTypeNames> show_permissions_granted; Params(); }; @@ -79,7 +84,10 @@ class LLAvatarList final : public LLFlatListViewEx void toggleIcons(); void setSpeakingIndicatorsVisible(bool visible); - void showPermissions(bool visible); +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2013-06-03 (Catznip-3.4) + void showPermissions(EShowPermissionType spType); +// [/SL:KB] +// void showPermissions(bool visible); void sortByName(); void setShowIcons(std::string param_name); bool getIconsVisible() const { return mShowIcons; } @@ -137,7 +145,10 @@ class LLAvatarList final : public LLFlatListViewEx bool mShowInfoBtn; bool mShowProfileBtn; bool mShowSpeakingIndicator; - bool mShowPermissions; +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2013-06-03 (Catznip-3.4) + EShowPermissionType mShowPermissions; +// [/SL:KB] +// bool mShowPermissions; bool mShowCompleteName; // [RLVa:KB] - RLVa-1.2.0 bool mRlvCheckShowNames; diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 14a36eb975cb962208b91cefca7bed9db1f7e8e6..ea000d959e70f94b890e01ac498b504e9090a05d 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -39,7 +39,9 @@ #include "llagent.h" #include "llavatarnamecache.h" #include "llavatariconctrl.h" +#include "llnotificationsutil.h" #include "lloutputmonitorctrl.h" +#include "llslurl.h" #include "lltooldraganddrop.h" // [RLVa:KB] - Checked: RLVa-2.0.1 #include "rlvactions.h" @@ -73,7 +75,8 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/) // [RLVa:KB] - Checked: RLVa-1.2.0 mRlvCheckShowNames(false), // [/RLVa:KB] - mShowPermissions(false), + mShowPermissions(SP_NEVER), +// mShowPermissions(false), mShowCompleteName(false), mHovered(false), mAvatarNameCacheConnection(), @@ -107,17 +110,20 @@ BOOL LLAvatarListItem::postBuild() mDistance = getChild<LLTextBox>("distance"); mLastInteractionTime = getChild<LLTextBox>("last_interaction"); - mIconPermissionOnline = getChild<LLIconCtrl>("permission_online_icon"); - mIconPermissionMap = getChild<LLIconCtrl>("permission_map_icon"); - mIconPermissionEditMine = getChild<LLIconCtrl>("permission_edit_mine_icon"); + mIconPermissionOnline = getChild<LLButton>("permission_online_icon"); + mIconPermissionMap = getChild<LLButton>("permission_map_icon"); + mIconPermissionEditMine = getChild<LLButton>("permission_edit_mine_icon"); + + mIconPermissionOnline->setClickedCallback(boost::bind(&LLAvatarListItem::onPermissionBtnToggle, this, (S32)LLRelationship::GRANT_ONLINE_STATUS)); + mIconPermissionMap->setClickedCallback(boost::bind(&LLAvatarListItem::onPermissionBtnToggle, this, (S32)LLRelationship::GRANT_MAP_LOCATION)); + mIconPermissionEditMine->setClickedCallback(boost::bind(&LLAvatarListItem::onPermissionBtnToggle, this, (S32)LLRelationship::GRANT_MODIFY_OBJECTS)); + mIconPermissionEditTheirs = getChild<LLIconCtrl>("permission_edit_theirs_icon"); mIconPermissionMapTheirs = getChild<LLIconCtrl>("permission_map_theirs_icon"); - mIconPermissionOnlineTheirs = getChild<LLIconCtrl>("permission_online_theirs_icon"); mIconPermissionOnline->setVisible(false); mIconPermissionMap->setVisible(false); mIconPermissionEditMine->setVisible(false); mIconPermissionEditTheirs->setVisible(false); - mIconPermissionOnlineTheirs->setVisible(false); mIconPermissionMapTheirs->setVisible(false); mIconHovered = getChild<LLIconCtrl>("hovered_icon"); @@ -145,6 +151,11 @@ BOOL LLAvatarListItem::postBuild() sStaticInitialized = true; } + mIconPermissionOnline->setEnabled(SP_NEVER != mShowPermissions); + mIconPermissionMap->setEnabled(SP_NEVER != mShowPermissions); + mIconPermissionEditMine->setEnabled(SP_NEVER != mShowPermissions); + mIconPermissionEditTheirs->setEnabled(SP_NEVER != mShowPermissions); + mIconPermissionMapTheirs->setEnabled(SP_NEVER != mShowPermissions); return TRUE; } @@ -195,7 +206,10 @@ void LLAvatarListItem::onMouseEnter(S32 x, S32 y, MASK mask) mHovered = true; LLPanel::onMouseEnter(x, y, mask); - showPermissions(mShowPermissions); +// showPermissions(mShowPermissions); +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-10-26 (Catznip-2.3) + refreshPermissions(); +// [/SL:KB] updateChildren(); } @@ -208,7 +222,10 @@ void LLAvatarListItem::onMouseLeave(S32 x, S32 y, MASK mask) mHovered = false; LLPanel::onMouseLeave(x, y, mask); - showPermissions(false); +// showPermissions(false); +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-10-26 (Catznip-2.3) + refreshPermissions(); +// [/SL:KB] updateChildren(); } @@ -220,7 +237,10 @@ void LLAvatarListItem::changed(U32 mask) if (mask & LLFriendObserver::POWERS) { - showPermissions(mShowPermissions && mHovered); +// showPermissions(mShowPermissions && mHovered); +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-10-26 (Catznip-2.3) + refreshPermissions(); +// [/SL:KB] updateChildren(); } } @@ -310,6 +330,25 @@ void LLAvatarListItem::setAvatarId(const LLUUID& id, const LLUUID& session_id, b } } +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-10-24 (Catznip-2.3) +void LLAvatarListItem::setShowPermissions(EShowPermissionType spType) +{ + mShowPermissions = spType; + +// [SL:KB] - Patch: UI-SidepanelPeople | Checked: 2011-05-13 (Catznip-2.6) + // Reenable the controls for updateChildren() + mIconPermissionOnline->setEnabled(SP_NEVER != mShowPermissions); + mIconPermissionMap->setEnabled(SP_NEVER != mShowPermissions); + mIconPermissionEditMine->setEnabled(SP_NEVER != mShowPermissions); + mIconPermissionEditTheirs->setEnabled(SP_NEVER != mShowPermissions); + mIconPermissionMapTheirs->setEnabled(SP_NEVER != mShowPermissions); +// [/SL:KB] + + refreshPermissions(); + updateChildren(); +} +// [/SL:KB] + void LLAvatarListItem::showDistance(bool show) { mDistance->setVisible(show); @@ -379,6 +418,81 @@ void LLAvatarListItem::onProfileBtnClick() LLAvatarActions::showProfile(mAvatarId); } +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-11-04 (Catznip-2.3) +void LLAvatarListItem::onPermissionBtnToggle(S32 toggleRight) +{ + LLRelationship* pRelationship = const_cast<LLRelationship*>(LLAvatarTracker::instance().getBuddyInfo(mAvatarId)); + if (!pRelationship) + return; + + if (LLRelationship::GRANT_MODIFY_OBJECTS != toggleRight) + { + S32 rights = pRelationship->getRightsGrantedTo(); + if ( (rights & toggleRight) == toggleRight) + { + rights &= ~toggleRight; + // Revoke the permission locally until we hear back from the region + pRelationship->revokeRights(toggleRight, LLRelationship::GRANT_NONE); + } + else + { + rights |= toggleRight; + // Grant the permission locally until we hear back from the region + pRelationship->grantRights(toggleRight, LLRelationship::GRANT_NONE); + } + + LLAvatarPropertiesProcessor::getInstance()->sendFriendRights(mAvatarId, rights); + refreshPermissions(); + updateChildren(); + } + else + { + LLSD args; + args["NAME"] = LLSLURL("agent", mAvatarId, "fullname").getSLURLString(); + + if (!pRelationship->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS)) + { + LLNotificationsUtil::add("GrantModifyRights", args, LLSD(), + boost::bind(&LLAvatarListItem::onModifyRightsConfirmationCallback, this, _1, _2, true)); + } + else + { + LLNotificationsUtil::add("RevokeModifyRights", args, LLSD(), + boost::bind(&LLAvatarListItem::onModifyRightsConfirmationCallback, this, _1, _2, false)); + } + } +} + +void LLAvatarListItem::onModifyRightsConfirmationCallback(const LLSD& notification, const LLSD& response, bool fGrant) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option == 0) + { + LLRelationship* pRelationship = const_cast<LLRelationship*>(LLAvatarTracker::instance().getBuddyInfo(mAvatarId)); + if (!pRelationship) + return; + + S32 rights = pRelationship->getRightsGrantedTo(); + if (!fGrant) + { + rights &= ~LLRelationship::GRANT_MODIFY_OBJECTS; + // Revoke the permission locally until we hear back from the region + pRelationship->revokeRights(LLRelationship::GRANT_MODIFY_OBJECTS, LLRelationship::GRANT_NONE); + } + else + { + rights |= LLRelationship::GRANT_MODIFY_OBJECTS; + // Grant the permission locally until we hear back from the region + pRelationship->grantRights(LLRelationship::GRANT_MODIFY_OBJECTS, LLRelationship::GRANT_NONE); + } + + LLAvatarPropertiesProcessor::getInstance()->sendFriendRights(mAvatarId, rights); + refreshPermissions(); + updateChildren(); + } +} +// [/SL:KB] + BOOL LLAvatarListItem::handleDoubleClick(S32 x, S32 y, MASK mask) { // if(mInfoBtn->getRect().pointInRect(x, y)) @@ -573,12 +687,11 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item) S32 permission_edit_theirs_width = avatar_item->mIconPermissionEditMine->getRect().mLeft - avatar_item->mIconPermissionEditTheirs->getRect().mLeft; S32 permission_map_theirs_width = avatar_item->mIconPermissionEditTheirs->getRect().mLeft - avatar_item->mIconPermissionMapTheirs->getRect().mLeft; - S32 permission_online_theirs_width = avatar_item->mIconPermissionMapTheirs->getRect().mLeft - avatar_item->mIconPermissionOnlineTheirs->getRect().mLeft; // last interaction time textbox width + padding - S32 last_interaction_time_width = avatar_item->mIconPermissionOnlineTheirs->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft; + S32 last_interaction_time_width = avatar_item->mIconPermissionMapTheirs->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft; - S32 distance_width = avatar_item->mIconPermissionOnlineTheirs->getRect().mLeft - avatar_item->mDistance->getRect().mLeft; + S32 distance_width = avatar_item->mIconPermissionMapTheirs->getRect().mLeft - avatar_item->mDistance->getRect().mLeft; // avatar icon width + padding S32 icon_width = avatar_item->mAvatarName->getRect().mLeft - avatar_item->mAvatarIcon->getRect().mLeft; @@ -590,7 +703,6 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item) sChildrenWidths[--index] = 0; // for avatar name we don't need its width, it will be calculated as "left available space" sChildrenWidths[--index] = distance_width; sChildrenWidths[--index] = last_interaction_time_width; - sChildrenWidths[--index] = permission_online_theirs_width; sChildrenWidths[--index] = permission_map_theirs_width; sChildrenWidths[--index] = permission_edit_theirs_width; sChildrenWidths[--index] = permission_edit_mine_width; @@ -678,16 +790,36 @@ void LLAvatarListItem::updateChildren() LL_DEBUGS("AvatarItemReshape") << "name rect after: " << name_view_rect << LL_ENDL; } -bool LLAvatarListItem::showPermissions(bool visible) +//bool LLAvatarListItem::showPermissions(bool visible) +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-10-26 (Catznip-2.3) +bool LLAvatarListItem::refreshPermissions() +// [/SL:KB] { + static const std::string strUngrantedOverlay = "Permission_Ungranted"; + const LLRelationship* relation = LLAvatarTracker::instance().getBuddyInfo(getAvatarId()); - if(relation && visible) +// if(relation && visible) +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-10-26 (Catznip-2.3) + if( (relation) && (((SP_HOVER == mShowPermissions) && (mHovered)) || (SP_NONDEFAULT == mShowPermissions)) ) +// [/SL:KB] { - mIconPermissionOnline->setVisible(relation->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS)); - mIconPermissionMap->setVisible(relation->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION)); - mIconPermissionEditMine->setVisible(relation->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS)); +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-10-26 (Catznip-2.3) + bool fGrantedOnline = relation->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS); + mIconPermissionOnline->setVisible( (!fGrantedOnline) || (mHovered) ); + mIconPermissionOnline->setImageOverlay( (fGrantedOnline) ? "" : strUngrantedOverlay); + + bool fGrantedMap = relation->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION); + mIconPermissionMap->setVisible( (fGrantedMap) || (mHovered) ); + mIconPermissionMap->setImageOverlay( (fGrantedMap) ? "" : strUngrantedOverlay); + + bool fGrantedEditMine = relation->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS); + mIconPermissionEditMine->setVisible( (fGrantedEditMine) || (mHovered) ); + mIconPermissionEditMine->setImageOverlay( (fGrantedEditMine) ? "" : strUngrantedOverlay); +// [/SL:KB] +// mIconPermissionOnline->setVisible(relation->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS)); +// mIconPermissionMap->setVisible(relation->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION)); +// mIconPermissionEditMine->setVisible(relation->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS)); mIconPermissionEditTheirs->setVisible(relation->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS)); - mIconPermissionOnlineTheirs->setVisible(relation->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS)); mIconPermissionMapTheirs->setVisible(relation->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION)); } else @@ -696,7 +828,6 @@ bool LLAvatarListItem::showPermissions(bool visible) mIconPermissionMap->setVisible(false); mIconPermissionEditMine->setVisible(false); mIconPermissionEditTheirs->setVisible(false); - mIconPermissionOnlineTheirs->setVisible(false); mIconPermissionMapTheirs->setVisible(false); } @@ -739,9 +870,6 @@ LLView* LLAvatarListItem::getItemChildView(EAvatarListItemChildIndex child_view_ case ALIC_PERMISSION_MAP_THEIRS: child_view = mIconPermissionMapTheirs; break; - case ALIC_PERMISSION_ONLINE_THEIRS: - child_view = mIconPermissionOnlineTheirs; - break; case ALIC_INFO_BUTTON: child_view = mInfoBtn; break; diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index d801fcfb290a66b066cd9fbed3aaf732dcc61a9c..57cabe8d34bfda43c1e2fdd5778bca6326dd7aa0 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -40,6 +40,13 @@ class LLAvatarIconCtrl; class LLOutputMonitorCtrl; class LLAvatarName; class LLIconCtrl; +typedef enum +{ + SP_NEVER = 0, // Never show permission icons + SP_HOVER = 1, // Only show permission icons on hover + SP_NONDEFAULT = 2, // Show permissions different from default + SP_COUNT +} EShowPermissionType; class LLAvatarListItem : public LLPanel, public LLFriendObserver { @@ -104,7 +111,10 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver void setShowProfileBtn(bool show); void setShowInfoBtn(bool show); void showSpeakingIndicator(bool show); - void setShowPermissions(bool show) { mShowPermissions = show; }; +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2013-06-03 (Catznip-3.4) + void setShowPermissions(EShowPermissionType spType); +// [/SL:KB] +// void setShowPermissions(bool show) { mShowPermissions = show; }; void showDistance(bool show); void showLastInteractionTime(bool show); void setAvatarIconVisible(bool visible); @@ -119,6 +129,10 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver void onInfoBtnClick(); void onProfileBtnClick(); +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-11-04 (Catznip-2.3) + void onPermissionBtnToggle(S32 toggleRight); + void onModifyRightsConfirmationCallback(const LLSD& notification, const LLSD& response, bool fGrant); +// [/SL:KB] /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask) final override; @@ -131,18 +145,15 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver LLAvatarIconCtrl* mAvatarIcon = nullptr; /// Indicator for permission to see me online. - LLIconCtrl* mIconPermissionOnline = nullptr; + LLButton* mIconPermissionOnline = nullptr; /// Indicator for permission to see my position on the map. - LLIconCtrl* mIconPermissionMap = nullptr; + LLButton* mIconPermissionMap = nullptr; /// Indicator for permission to edit my objects. - LLIconCtrl* mIconPermissionEditMine = nullptr; + LLButton* mIconPermissionEditMine = nullptr; /// Indicator for permission to edit their objects. LLIconCtrl* mIconPermissionEditTheirs = nullptr; - /// Indicator for permission to show their position on the map. LLIconCtrl* mIconPermissionMapTheirs = nullptr; - /// Indicator for permission to see their online status. - LLIconCtrl* mIconPermissionOnlineTheirs = nullptr; LLIconCtrl* mIconHovered = nullptr; @@ -203,7 +214,10 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver * * Need to call updateChildren() afterwards to sort out their layout. */ - bool showPermissions(bool visible); +// bool showPermissions(bool visible); +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2010-10-26 (Catznip-2.3) + bool refreshPermissions(); +// [/SL:KB] /** * Gets child view specified by index. @@ -233,7 +247,10 @@ class LLAvatarListItem : public LLPanel, public LLFriendObserver // [/RLVa:KB] /// indicates whether to show icons representing permissions granted - bool mShowPermissions; +// [SL:KB] - Patch: UI-PeopleFriendPermissions | Checked: 2013-06-03 (Catznip-3.4) + EShowPermissionType mShowPermissions; +// [/SL:KB] +// bool mShowPermissions; /// true when the mouse pointer is hovering over this item bool mHovered; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 20d3281946ae0ef7368487951fed855fb24a1759..c27d3e52604da8d8e08aad7d1d63c2ea668d0397 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -633,15 +633,19 @@ BOOL LLPanelPeople::postBuild() friends_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFriendListUpdater, _2)); friends_tab->setVisibleCallback(boost::bind(&LLPanelPeople::removePicker, this)); + EShowPermissionType spType = (EShowPermissionType)gSavedSettings.getU32("FriendsListShowPermissions"); + if (spType >= SP_COUNT) + spType = SP_NEVER; + mOnlineFriendList = friends_tab->getChild<LLAvatarList>("avatars_online"); mAllFriendList = friends_tab->getChild<LLAvatarList>("avatars_all"); mOnlineFriendList->setNoItemsCommentText(getString("no_friends_online")); mOnlineFriendList->setShowIcons("FriendsListShowIcons"); - mOnlineFriendList->showPermissions(gSavedSettings.getBOOL("FriendsListShowPermissions")); + mOnlineFriendList->showPermissions(spType); mOnlineFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames")); mAllFriendList->setNoItemsCommentText(getString("no_friends")); mAllFriendList->setShowIcons("FriendsListShowIcons"); - mAllFriendList->showPermissions(gSavedSettings.getBOOL("FriendsListShowPermissions")); + mAllFriendList->showPermissions(spType); mAllFriendList->setShowCompleteName(!gSavedSettings.getBOOL("FriendsListHideUsernames")); LLPanel* nearby_tab = getChild<LLPanel>(NEARBY_TAB_NAME); @@ -1344,14 +1348,21 @@ void LLPanelPeople::onFriendsViewSortMenuItemClicked(const LLSD& userdata) mAllFriendList->toggleIcons(); mOnlineFriendList->toggleIcons(); } - else if (chosen_item == "view_permissions") + else if ( ("view_permissions_never" == chosen_item) || + ("view_permissions_hover" == chosen_item) || + ("view_permissions_nondefault" == chosen_item) ) { - bool show_permissions = !gSavedSettings.getBOOL("FriendsListShowPermissions"); - gSavedSettings.setBOOL("FriendsListShowPermissions", show_permissions); - - mAllFriendList->showPermissions(show_permissions); - mOnlineFriendList->showPermissions(show_permissions); + EShowPermissionType spType = SP_NEVER; + if ("view_permissions_hover" == chosen_item) + spType = SP_HOVER; + else if ("view_permissions_nondefault" == chosen_item) + spType = SP_NONDEFAULT; + gSavedSettings.setU32("FriendsListShowPermissions", (U32)spType); + + mAllFriendList->showPermissions(spType); + mOnlineFriendList->showPermissions(spType); } + else if (chosen_item == "view_usernames") { bool hide_usernames = !gSavedSettings.getBOOL("FriendsListHideUsernames"); @@ -1453,6 +1464,14 @@ bool LLPanelPeople::onFriendsViewSortMenuItemCheck(const LLSD& userdata) if (item == "sort_status") return sort_order == E_SORT_BY_STATUS; + EShowPermissionType spType = (EShowPermissionType)gSavedSettings.getU32("FriendsListShowPermissions"); + if ("view_permissions_never" == item) + return SP_NEVER == spType; + if ("view_permissions_hover" == item) + return SP_HOVER == spType; + if ("view_permissions_nondefault" == item) + return SP_NONDEFAULT == spType; + return false; } diff --git a/indra/newview/skins/default/textures/icons/Permission_Ungranted.png b/indra/newview/skins/default/textures/icons/Permission_Ungranted.png new file mode 100644 index 0000000000000000000000000000000000000000..d206af4433b0cb9e551e20e39bcff2837d310f81 Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Permission_Ungranted.png differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index d90e234469a405695cf0f83eb7459361afb19d7a..cf9d25b10bd1f6678d5bf087b11e3c6151ca5286 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -519,6 +519,7 @@ with the same filename but different name <texture name="Permission_Visible_Them_Map" file_name="icons/see_them_on_map.png" preload="false" /> <texture name="Permission_Edit_Objects_Mine" file_name="icons/edit_mine.png" preload="false" /> <texture name="Permission_Edit_Objects_Theirs" file_name="icons/edit_theirs.png" preload="false" /> + <texture name="Permission_Ungranted" file_name="icons/Permission_Ungranted.png" preload="false" /> <texture name="Play_Off" file_name="icons/Play_Off.png" preload="false" /> <texture name="Play_Over" file_name="icons/Play_Over.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml index b5a4b87acd1bda66124856aaaf4f2d70fa8a3a6a..d8b9e96942ba9887185cbdd4745dac784b770555 100644 --- a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml +++ b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml @@ -24,6 +24,40 @@ parameter="sort_status" /> </menu_item_check> <menu_item_separator layout="topleft" /> + <context_menu + label="Show permissions" + name="People Show Permissions" > + <menu_item_check + name="view_permissions" + label="Never"> + <menu_item_check.on_click + function="People.Friends.ViewSort.Action" + parameter="view_permissions_never" /> + <menu_item_check.on_check + function="People.Friends.ViewSort.CheckItem" + parameter="view_permissions_never" /> + </menu_item_check> + <menu_item_check + name="view_permissions" + label="On hover"> + <menu_item_check.on_click + function="People.Friends.ViewSort.Action" + parameter="view_permissions_hover" /> + <menu_item_check.on_check + function="People.Friends.ViewSort.CheckItem" + parameter="view_permissions_hover" /> + </menu_item_check> + <menu_item_check + name="view_permissions" + label="Per user"> + <menu_item_check.on_click + function="People.Friends.ViewSort.Action" + parameter="view_permissions_nondefault" /> + <menu_item_check.on_check + function="People.Friends.ViewSort.CheckItem" + parameter="view_permissions_nondefault" /> + </menu_item_check> + </context_menu> <menu_item_check name="view_icons" label="View People Icons"> <menu_item_check.on_click function="People.Friends.ViewSort.Action" @@ -32,14 +66,6 @@ function="CheckControl" parameter="FriendsListShowIcons" /> </menu_item_check> - <menu_item_check name="view_permissions" label="View Permissions Granted"> - <menu_item_check.on_click - function="People.Friends.ViewSort.Action" - parameter="view_permissions" /> - <menu_item_check.on_check - function="CheckControl" - parameter="FriendsListShowPermissions" /> - </menu_item_check> <menu_item_check name="view_usernames" label="Hide usernames"> <menu_item_check.on_click function="People.Friends.ViewSort.Action" diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml index 1c2ca9f0b91be9f1853106e500ba429abdc5bda5..1aab704c428fb3170930416b648d5da376197721 100644 --- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml @@ -88,17 +88,7 @@ value="0s" width="38" /> <icon - height="16" - follows="right" - image_name="Permission_Visible_Them_Online" - layout="topleft" - left_pad="3" - right="-167" - name="permission_online_theirs_icon" - tool_tip="You can see this friend's online status" - top="4" - width="16" /> - <icon + enabled="false" height="16" follows="right" image_name="Permission_Visible_Them_Map" @@ -110,6 +100,7 @@ top="4" width="16" /> <icon + enabled="false" height="16" follows="right" image_name="Permission_Edit_Objects_Theirs" @@ -120,10 +111,11 @@ tool_tip="You can edit this friend's objects" top="4" width="16" /> - <icon + <button + enabled="false" height="16" follows="right" - image_name="Permission_Edit_Objects_Mine" + image_unselected="Permission_Edit_Objects_Mine" layout="topleft" left_pad="3" right="-110" @@ -131,10 +123,11 @@ tool_tip="This friend can edit, delete or take your objects" top_delta="0" width="16" /> - <icon + <button + enabled="false" height="16" follows="right" - image_name="Permission_Visible_Map" + image_unselected="Permission_Visible_Map" layout="topleft" left_pad="3" tool_tip="This friend can locate you on the map" @@ -142,10 +135,11 @@ name="permission_map_icon" top_delta="0" width="16" /> - <icon + <button + enabled="false" height="16" follows="right" - image_name="Permission_Visible_Online" + image_unselected="Permission_Visible_Online" layout="topleft" left_pad="3" right="-72"