diff --git a/indra/newview/fsfloatercontacts.cpp b/indra/newview/fsfloatercontacts.cpp
index c37889e900..a428e77ec7 100644
--- a/indra/newview/fsfloatercontacts.cpp
+++ b/indra/newview/fsfloatercontacts.cpp
@@ -698,6 +698,12 @@ void FSFloaterContacts::addFriend(const LLUUID& agent_id)
edit_my_object_column["type"] = "checkbox";
edit_my_object_column["value"] = relationInfo->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS);
+ LLSD& online_their_column = element["columns"][LIST_ONLINE_THEIRS];
+ online_their_column["column"] = "icon_visible_online_theirs";
+ online_their_column["type"] = "checkbox";
+ online_their_column["enabled"] = "";
+ online_their_column["value"] = relationInfo->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS);
+
LLSD& visible_their_map_column = element["columns"][LIST_VISIBLE_MAP_THEIRS];
visible_their_map_column["column"] = "icon_visible_map_theirs";
visible_their_map_column["type"] = "checkbox";
@@ -778,6 +784,7 @@ void FSFloaterContacts::updateFriendItem(const LLUUID& agent_id, const LLRelatio
itemp->getColumn(LIST_VISIBLE_ONLINE)->setValue(info->isRightGrantedTo(LLRelationship::GRANT_ONLINE_STATUS));
itemp->getColumn(LIST_VISIBLE_MAP)->setValue(info->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION));
itemp->getColumn(LIST_EDIT_MINE)->setValue(info->isRightGrantedTo(LLRelationship::GRANT_MODIFY_OBJECTS));
+ itemp->getColumn(LIST_ONLINE_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS));
itemp->getColumn(LIST_VISIBLE_MAP_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION));
itemp->getColumn(LIST_EDIT_THEIRS)->setValue(info->isRightGrantedFrom(LLRelationship::GRANT_MODIFY_OBJECTS));
S32 change_generation = info->getChangeSerialNum();
@@ -1201,6 +1208,7 @@ void FSFloaterContacts::onColumnDisplayModeChanged(const std::string& settings_n
else if (p.name.getValue() == "icon_visible_online" ||
p.name.getValue() == "icon_visible_map" ||
p.name.getValue() == "icon_edit_mine" ||
+ p.name.getValue() == "icon_visible_online_theirs" ||
p.name.getValue() == "icon_visible_map_theirs" ||
p.name.getValue() == "icon_edit_theirs")
{
diff --git a/indra/newview/fsfloatercontacts.h b/indra/newview/fsfloatercontacts.h
index 0f7eca3a22..35a24e16ef 100644
--- a/indra/newview/fsfloatercontacts.h
+++ b/indra/newview/fsfloatercontacts.h
@@ -92,6 +92,7 @@ private:
LIST_VISIBLE_ONLINE,
LIST_VISIBLE_MAP,
LIST_EDIT_MINE,
+ LIST_ONLINE_THEIRS,
LIST_VISIBLE_MAP_THEIRS,
LIST_EDIT_THEIRS,
LIST_FRIEND_UPDATE_GEN
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index fb8dd4b891..8b8972b5e5 100755
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -84,6 +84,10 @@ LLAvatarListItem::LLAvatarListItem(bool not_from_ui_factory/* = true*/)
mBtnPermissionMap(NULL),
mBtnPermissionEditMine(NULL),
mIconPermissionEditTheirs(NULL),
+ // Extended Friend Permissions
+ mIconPermissionMapTheirs(NULL),
+ mIconPermissionOnlineTheirs(NULL),
+ //
mSpeakingIndicator(NULL),
mInfoBtn(NULL),
mProfileBtn(NULL),
@@ -165,6 +169,10 @@ BOOL LLAvatarListItem::postBuild()
mBtnPermissionMap = getChild("permission_map_btn");
mBtnPermissionEditMine = getChild("permission_edit_mine_btn");
mIconPermissionEditTheirs = getChild("permission_edit_theirs_icon");
+ // Extended Friend Permissions
+ mIconPermissionMapTheirs = getChild("permission_map_theirs_icon");
+ mIconPermissionOnlineTheirs = getChild("permission_online_theirs_icon");
+ //
mBtnPermissionOnline->setClickedCallback(boost::bind(&LLAvatarListItem::onPermissionOnlineClick, this));
mBtnPermissionMap->setClickedCallback(boost::bind(&LLAvatarListItem::onPermissionMapClick, this));
@@ -177,6 +185,10 @@ BOOL LLAvatarListItem::postBuild()
mBtnPermissionEditMine->setVisible(false);
mBtnPermissionEditMine->setIsChrome(TRUE);
mIconPermissionEditTheirs->setVisible(false);
+ // Extended Friend Permissions
+ mIconPermissionMapTheirs->setVisible(false);
+ mIconPermissionOnlineTheirs->setVisible(false);
+ //
// radar
@@ -946,6 +958,11 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item)
//S32 permission_edit_theirs_width = avatar_item->mIconPermissionEditMine->getRect().mLeft - avatar_item->mIconPermissionEditTheirs->getRect().mLeft;
S32 permission_edit_theirs_width = 18;
+ // Extended Friend Permissions
+ S32 permission_online_theirs_width = 18;
+ S32 permission_map_theirs_width = 18;
+ //
+
// last interaction time textbox width + padding
//S32 last_interaction_time_width = avatar_item->mIconPermissionEditTheirs->getRect().mLeft - avatar_item->mLastInteractionTime->getRect().mLeft;
S32 last_interaction_time_width = 37;
@@ -961,6 +978,10 @@ void LLAvatarListItem::initChildrenWidths(LLAvatarListItem* avatar_item)
sChildrenWidths[--index] = icon_width;
sChildrenWidths[--index] = 0; // for avatar name we don't need its width, it will be calculated as "left available space"
sChildrenWidths[--index] = last_interaction_time_width;
+ // Extended Friend Permissions
+ sChildrenWidths[--index] = permission_online_theirs_width;
+ sChildrenWidths[--index] = permission_map_theirs_width;
+ //
sChildrenWidths[--index] = permission_edit_theirs_width;
sChildrenWidths[--index] = permission_edit_mine_width;
sChildrenWidths[--index] = permission_map_width;
@@ -1094,11 +1115,25 @@ bool LLAvatarListItem::showPermissions(bool visible)
mIconPermissionEditTheirs->setColor(LLUIColorTable::instance().getColor("White_10"));
else
mIconPermissionEditTheirs->setColor(LLUIColorTable::instance().getColor("White"));
+ // Extended Friend Permissions
+ if (!relation->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION))
+ mIconPermissionMapTheirs->setColor(LLUIColorTable::instance().getColor("White_10"));
+ else
+ mIconPermissionMapTheirs->setColor(LLUIColorTable::instance().getColor("White"));
+ if (!relation->isRightGrantedFrom(LLRelationship::GRANT_ONLINE_STATUS))
+ mIconPermissionOnlineTheirs->setColor(LLUIColorTable::instance().getColor("White_10"));
+ else
+ mIconPermissionOnlineTheirs->setColor(LLUIColorTable::instance().getColor("White"));
+ //
mBtnPermissionOnline->setVisible(true);
mBtnPermissionMap->setVisible(true);
mBtnPermissionEditMine->setVisible(true);
mIconPermissionEditTheirs->setVisible(true);
+ // Extended Friend Permissions
+ mIconPermissionMapTheirs->setVisible(true);
+ mIconPermissionOnlineTheirs->setVisible(true);
+ //
}
else
@@ -1107,6 +1142,10 @@ bool LLAvatarListItem::showPermissions(bool visible)
mBtnPermissionMap->setVisible(false);
mBtnPermissionEditMine->setVisible(false);
mIconPermissionEditTheirs->setVisible(false);
+ // Extended Friend Permissions
+ mIconPermissionMapTheirs->setVisible(false);
+ mIconPermissionOnlineTheirs->setVisible(false);
+ //
}
updateChildren();
@@ -1243,6 +1282,14 @@ LLView* LLAvatarListItem::getItemChildView(EAvatarListItemChildIndex child_view_
case ALIC_PERMISSION_EDIT_THEIRS:
child_view = mIconPermissionEditTheirs;
break;
+ // Extended Friend Permissions
+ 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 81cc14f360..a86c932c9f 100755
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -185,6 +185,12 @@ protected:
LLButton* mBtnPermissionEditMine;
/// Indicator for permission to edit their objects.
LLIconCtrl* mIconPermissionEditTheirs;
+ // Extended Friend Permissions
+ /// Indicator for permission to show their position on the map.
+ LLIconCtrl* mIconPermissionMapTheirs;
+ /// Indicator for permission to see their online status.
+ LLIconCtrl* mIconPermissionOnlineTheirs;
+ //
void confirmModifyRights(bool grant, S32 rights);
void rightsConfirmationCallback(const LLSD& notification,
const LLSD& response, S32 rights);
@@ -231,6 +237,10 @@ private:
ALIC_PERMISSION_MAP,
ALIC_PERMISSION_EDIT_MINE,
ALIC_PERMISSION_EDIT_THEIRS,
+ // Extended Friend Permissions
+ ALIC_PERMISSION_MAP_THEIRS,
+ ALIC_PERMISSION_ONLINE_THEIRS,
+ //
ALIC_INTERACTION_TIME,
ALIC_NAME,
ALIC_ICON,
diff --git a/indra/newview/skins/ansastorm/xui/en/panel_fs_contacts_friends.xml b/indra/newview/skins/ansastorm/xui/en/panel_fs_contacts_friends.xml
index 03e67eda2f..243189f80e 100644
--- a/indra/newview/skins/ansastorm/xui/en/panel_fs_contacts_friends.xml
+++ b/indra/newview/skins/ansastorm/xui/en/panel_fs_contacts_friends.xml
@@ -74,6 +74,11 @@
name="icon_edit_mine"
tool_tip="Friend can edit, delete or take objects"
width="16" />
+
+
+
diff --git a/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml
index e550484e39..6980566b8d 100755
--- a/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml
@@ -23,7 +23,9 @@
-
+
+
+
diff --git a/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml b/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml
index 5950196d15..4e9ec614e3 100644
--- a/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml
+++ b/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml
@@ -8,8 +8,9 @@
-
-
+
+
+
+
+
+
+
+
+