summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llpanelpeople.cpp70
-rw-r--r--indra/newview/llpersonfolderview.cpp48
-rw-r--r--indra/newview/llpersonfolderview.h16
-rw-r--r--indra/newview/llpersonmodelcommon.cpp5
-rw-r--r--indra/newview/llpersonmodelcommon.h10
-rw-r--r--indra/newview/llpersontabview.cpp53
-rw-r--r--indra/newview/llpersontabview.h10
-rw-r--r--indra/newview/skins/default/textures/icons/Facebook.pngbin0 -> 365 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/person_view.xml12
10 files changed, 169 insertions, 57 deletions
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 66a183d5e5..af9ecd743c 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -750,31 +750,6 @@ BOOL LLPanelPeople::postBuild()
scroller->setFollowsAll();
mPersonFolderView->setScrollContainer(scroller);
mPersonFolderView->setFollowsAll();
-
- //Create a person tab
- LLPersonTabModel* item = new LLPersonTabModel("Facebook Friends", mPersonFolderViewModel);
- LLPersonTabView::Params params;
- params.name = item->getDisplayName();
- params.root = mPersonFolderView;
- params.listener = item;
- params.tool_tip = params.name;
- LLPersonTabView * widget = LLUICtrlFactory::create<LLPersonTabView>(params);
- widget->addToFolder(mPersonFolderView);
-
- mPersonFolderView->mPersonFolderModelMap[item->getID()] = item;
- mPersonFolderView->mPersonFolderViewMap[item->getID()] = widget;
-
- //Create a person tab
- item = new LLPersonTabModel("Facebook Friends Tab Two", mPersonFolderViewModel);
- params.name = item->getDisplayName();
- params.root = mPersonFolderView;
- params.listener = item;
- params.tool_tip = params.name;
- widget = LLUICtrlFactory::create<LLPersonTabView>(params);
- widget->addToFolder(mPersonFolderView);
-
- mPersonFolderView->mPersonFolderModelMap[item->getID()] = item;
- mPersonFolderView->mPersonFolderViewMap[item->getID()] = widget;
gIdleCallbacks.addFunction(idle, this);
@@ -1667,6 +1642,8 @@ void LLPanelPeople::openFacebookWeb(std::string url)
void LLPanelPeople::showFacebookFriends(const LLSD& friends)
{
mFacebookFriends->clear();
+ LLPersonTabModel::tab_type tab_type;
+ LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance();
for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i)
{
@@ -1676,11 +1653,22 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends)
//add to avatar list
mFacebookFriends->addNewItem(agent_id, name, false);
- //Add to folder view
- LLPersonTabModel * session_model = dynamic_cast<LLPersonTabModel *>(mPersonFolderView->mPersonFolderModelMap.begin()->second);
- if(session_model)
+ //FB+SL but not SL friend
+ if(agent_id.notNull() && !avatar_tracker.isBuddy(agent_id))
+ {
+ tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND;
+ }
+ //FB only friend
+ else
+ {
+ tab_type = LLPersonTabModel::FB_ONLY_FRIEND;
+ }
+
+ //Add to person tab model
+ LLPersonTabModel * person_tab_model = dynamic_cast<LLPersonTabModel *>(mPersonFolderView->getPersonTabModelByIndex(tab_type));
+ if(person_tab_model)
{
- addParticipantToModel(session_model, agent_id, name);
+ addParticipantToModel(person_tab_model, agent_id, name);
}
}
}
@@ -1689,11 +1677,29 @@ void LLPanelPeople::addTestParticipant()
{
std::string suffix("Aa");
std::string prefix("Test Name");
+ LLPersonTabModel * person_tab_model;
+ LLUUID agentID;
+ std::string name;
+ LLPersonTabModel::tab_type tab_type;
+
for(int i = 0; i < 300; ++i)
{
- LLPersonTabModel * person_folder_model = dynamic_cast<LLPersonTabModel *>(mPersonFolderView->mPersonFolderModelMap.begin()->second);
- std::string name = prefix + " " + suffix;
- addParticipantToModel(person_folder_model, gAgent.getID(), name);
+ //Adds FB+SL people that aren't yet SL friends
+ if(i < 10)
+ {
+ tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND;
+ agentID = gAgent.getID();
+ }
+ //Adds FB only friends
+ else
+ {
+ tab_type = LLPersonTabModel::FB_ONLY_FRIEND;
+ agentID = LLUUID(NULL);
+ }
+
+ person_tab_model = dynamic_cast<LLPersonTabModel *>(mPersonFolderView->getPersonTabModelByIndex(tab_type));
+ name = prefix + " " + suffix;
+ addParticipantToModel(person_tab_model, agentID, name);
// Next suffix : Aa, Ab, Ac ... Az, Ba, Bb, Bc ... Bz, Ca, Cb ...
suffix[1]+=1;
if (suffix[1]=='{')
diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp
index 8d2191aebb..7e969fc96c 100644
--- a/indra/newview/llpersonfolderview.cpp
+++ b/indra/newview/llpersonfolderview.cpp
@@ -30,7 +30,6 @@
#include "llpersonfolderview.h"
#include "llpersontabview.h"
-#include "llpersonmodelcommon.h"
LLPersonFolderView::LLPersonFolderView(const Params &p) :
@@ -39,6 +38,8 @@ LLFolderView(p),
{
rename("Persons"); // For tracking!
mConversationsEventStream.listen("ConversationsRefresh", boost::bind(&LLPersonFolderView::onConversationModelEvent, this, _1));
+
+ createPersonTabs();
}
LLPersonFolderView::~LLPersonFolderView()
@@ -73,6 +74,29 @@ BOOL LLPersonFolderView::handleMouseDown( S32 x, S32 y, MASK mask )
return LLView::handleMouseDown( x, y, mask );
}
+void LLPersonFolderView::createPersonTabs()
+{
+ createPersonTab(LLPersonTabModel::FB_SL_NON_SL_FRIEND, "SL residents you may want to friend");
+ createPersonTab(LLPersonTabModel::FB_ONLY_FRIEND, "Invite people you know to SL");
+}
+
+void LLPersonFolderView::createPersonTab(LLPersonTabModel::tab_type tab_type, const std::string& tab_name)
+{
+ //Create a person tab
+ LLPersonTabModel* item = new LLPersonTabModel(tab_type, tab_name, *mViewModel);
+ LLPersonTabView::Params params;
+ params.name = item->getDisplayName();
+ params.root = this;
+ params.listener = item;
+ params.tool_tip = params.name;
+ LLPersonTabView * widget = LLUICtrlFactory::create<LLPersonTabView>(params);
+ widget->addToFolder(this);
+
+ mIndexToFolderMap[tab_type] = item->getID();
+ mPersonFolderModelMap[item->getID()] = item;
+ mPersonFolderViewMap[item->getID()] = widget;
+}
+
bool LLPersonFolderView::onConversationModelEvent(const LLSD &event)
{
std::string type = event.get("type").asString();
@@ -81,17 +105,17 @@ bool LLPersonFolderView::onConversationModelEvent(const LLSD &event)
if(type == "add_participant")
{
- LLPersonTabModel * person_folder_model = dynamic_cast<LLPersonTabModel *>(mPersonFolderModelMap[folder_id]);
- LLPersonTabView * person_folder_view = dynamic_cast<LLPersonTabView *>(mPersonFolderViewMap[folder_id]);
+ LLPersonTabModel * person_tab_model = dynamic_cast<LLPersonTabModel *>(mPersonFolderModelMap[folder_id]);
+ LLPersonTabView * person_tab_view = dynamic_cast<LLPersonTabView *>(mPersonFolderViewMap[folder_id]);
- if(person_folder_model)
+ if(person_tab_model)
{
- LLPersonModel * person_model = person_folder_model->findParticipant(person_id);
+ LLPersonModel * person_model = person_tab_model->findParticipant(person_id);
if(person_model)
{
- LLPersonView * participant_view = createConversationViewParticipant(person_model);
- participant_view->addToFolder(person_folder_view);
+ LLPersonView * person_view = createConversationViewParticipant(person_model);
+ person_view->addToFolder(person_tab_view);
}
}
}
@@ -113,3 +137,13 @@ LLPersonView * LLPersonFolderView::createConversationViewParticipant(LLPersonMod
return LLUICtrlFactory::create<LLPersonView>(params);
}
+
+LLPersonTabModel * LLPersonFolderView::getPersonTabModelByIndex(LLPersonTabModel::tab_type tab_type)
+{
+ return mPersonFolderModelMap[mIndexToFolderMap[tab_type]];
+}
+
+LLPersonTabView * LLPersonFolderView::getPersonTabViewByIndex(LLPersonTabModel::tab_type tab_type)
+{
+ return mPersonFolderViewMap[mIndexToFolderMap[tab_type]];
+}
diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h
index 74e9142a7c..85dec6515d 100644
--- a/indra/newview/llpersonfolderview.h
+++ b/indra/newview/llpersonfolderview.h
@@ -27,7 +27,10 @@
#ifndef LL_LLPERSONFOLDERVIEW_H
#define LL_LLPERSONFOLDERVIEW_H
-class LLPersonTabModel;
+#include "llevents.h"
+#include "llfolderview.h"
+#include "llpersonmodelcommon.h"
+
class LLPersonTabView;
class LLPersonView;
class LLPersonModel;
@@ -35,9 +38,6 @@ class LLPersonModel;
typedef std::map<LLUUID, LLPersonTabModel *> person_folder_model_map;
typedef std::map<LLUUID, LLPersonTabView *> person_folder_view_map;
-#include "llevents.h"
-#include "llfolderview.h"
-
class LLPersonFolderView : public LLFolderView
{
public:
@@ -50,13 +50,19 @@ public:
LLPersonFolderView(const Params &p);
~LLPersonFolderView();
+ BOOL handleMouseDown( S32 x, S32 y, MASK mask );
+
+ void createPersonTabs();
+ void createPersonTab(LLPersonTabModel::tab_type tab_type, const std::string& tab_name);
bool onConversationModelEvent(const LLSD &event);
LLPersonView * createConversationViewParticipant(LLPersonModel * item);
- BOOL handleMouseDown( S32 x, S32 y, MASK mask );
+ LLPersonTabModel * getPersonTabModelByIndex(LLPersonTabModel::tab_type tab_type);
+ LLPersonTabView * getPersonTabViewByIndex(LLPersonTabModel::tab_type tab_type);
person_folder_model_map mPersonFolderModelMap;
person_folder_view_map mPersonFolderViewMap;
+ std::map<LLPersonTabModel::tab_type, LLUUID> mIndexToFolderMap;
LLEventStream mConversationsEventStream;
};
diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp
index 9fefc17345..b3424cc451 100644
--- a/indra/newview/llpersonmodelcommon.cpp
+++ b/indra/newview/llpersonmodelcommon.cpp
@@ -151,8 +151,9 @@ void LLPersonModelCommon::setPassedFilter(bool passed, S32 filter_generation, st
// LLPersonTabModel
//
-LLPersonTabModel::LLPersonTabModel(std::string display_name, LLFolderViewModelInterface& root_view_model) :
-LLPersonModelCommon(display_name,root_view_model)
+LLPersonTabModel::LLPersonTabModel(tab_type tab_type, std::string display_name, LLFolderViewModelInterface& root_view_model) :
+LLPersonModelCommon(display_name,root_view_model),
+mTabType(tab_type)
{
}
diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h
index 1b8197cf6a..5f3801874d 100644
--- a/indra/newview/llpersonmodelcommon.h
+++ b/indra/newview/llpersonmodelcommon.h
@@ -109,7 +109,13 @@ protected:
class LLPersonTabModel : public LLPersonModelCommon
{
public:
- LLPersonTabModel(std::string display_name, LLFolderViewModelInterface& root_view_model);
+ enum tab_type
+ {
+ FB_SL_NON_SL_FRIEND,
+ FB_ONLY_FRIEND,
+ };
+
+ LLPersonTabModel(tab_type tab_type, std::string display_name, LLFolderViewModelInterface& root_view_model);
LLPersonTabModel(LLFolderViewModelInterface& root_view_model);
LLPointer<LLUIImage> getIcon() const { return NULL; }
@@ -119,6 +125,8 @@ public:
void clearParticipants();
LLPersonModel* findParticipant(const LLUUID& person_id);
+ tab_type mTabType;
+
private:
};
diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp
index fdc024beb8..6aa51febcb 100644
--- a/indra/newview/llpersontabview.cpp
+++ b/indra/newview/llpersontabview.cpp
@@ -125,6 +125,7 @@ bool LLPersonView::sChildrenWidthsInitialized = false;
ChildWidthVec LLPersonView::mChildWidthVec;
LLPersonView::Params::Params() :
+facebook_icon("facebook_icon"),
avatar_icon("avatar_icon"),
last_interaction_time_textbox("last_interaction_time_textbox"),
permission_edit_theirs_icon("permission_edit_theirs_icon"),
@@ -140,6 +141,7 @@ LLPersonView::LLPersonView(const LLPersonView::Params& p) :
LLFolderViewItem(p),
mImageOver(LLUI::getUIImage("ListItem_Over")),
mImageSelected(LLUI::getUIImage("ListItem_Select")),
+mFacebookIcon(NULL),
mAvatarIcon(NULL),
mLastInteractionTimeTextbox(NULL),
mPermissionEditTheirsIcon(NULL),
@@ -154,14 +156,38 @@ mOutputMonitorCtrl(NULL)
S32 LLPersonView::getLabelXPos()
{
- return getIndentation() + mAvatarIcon->getRect().getWidth() + mIconPad;
+ S32 label_x_pos;
+
+ if(mAvatarIcon->getVisible())
+ {
+ label_x_pos = getIndentation() + mAvatarIcon->getRect().getWidth() + mIconPad;
+ }
+ else
+ {
+ label_x_pos = getIndentation() + mFacebookIcon->getRect().getWidth() + mIconPad;
+ }
+
+
+ return label_x_pos;
}
void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view)
{
LLFolderViewItem::addToFolder(person_folder_view);
- //Added item to folder, could change folder's mHasVisibleChildren flag so call arrange
+ //Added item to folder could change folder's mHasVisibleChildren flag so call arrange
person_folder_view->requestArrange();
+
+ mPersonTabModel = static_cast<LLPersonTabModel *>(getParentFolder()->getViewModelItem());
+
+ if(mPersonTabModel->mTabType == LLPersonTabModel::FB_SL_NON_SL_FRIEND)
+ {
+ mAvatarIcon->setVisible(TRUE);
+ }
+ else if(mPersonTabModel->mTabType == LLPersonTabModel::FB_ONLY_FRIEND)
+ {
+ mFacebookIcon->setVisible(TRUE);
+ }
+
}
LLPersonView::~LLPersonView()
@@ -191,16 +217,24 @@ BOOL LLPersonView::postBuild()
void LLPersonView::onMouseEnter(S32 x, S32 y, MASK mask)
{
- mInfoBtn->setVisible(TRUE);
- mProfileBtn->setVisible(TRUE);
+ if(mPersonTabModel->mTabType == LLPersonTabModel::FB_SL_NON_SL_FRIEND)
+ {
+ mInfoBtn->setVisible(TRUE);
+ mProfileBtn->setVisible(TRUE);
+ }
+
updateChildren();
LLFolderViewItem::onMouseEnter(x, y, mask);
}
void LLPersonView::onMouseLeave(S32 x, S32 y, MASK mask)
{
- mInfoBtn->setVisible(FALSE);
- mProfileBtn->setVisible(FALSE);
+ if(mPersonTabModel->mTabType == LLPersonTabModel::FB_SL_NON_SL_FRIEND)
+ {
+ mInfoBtn->setVisible(FALSE);
+ mProfileBtn->setVisible(FALSE);
+ }
+
updateChildren();
LLFolderViewItem::onMouseLeave(x, y, mask);
}
@@ -285,11 +319,16 @@ void LLPersonView::drawHighlight()
void LLPersonView::initFromParams(const LLPersonView::Params & params)
{
+ LLIconCtrl::Params facebook_icon_params(params.facebook_icon());
+ applyXUILayout(facebook_icon_params, this);
+ mFacebookIcon = LLUICtrlFactory::create<LLIconCtrl>(facebook_icon_params);
+ addChild(mFacebookIcon);
+
LLAvatarIconCtrl::Params avatar_icon_params(params.avatar_icon());
applyXUILayout(avatar_icon_params, this);
mAvatarIcon = LLUICtrlFactory::create<LLAvatarIconCtrl>(avatar_icon_params);
addChild(mAvatarIcon);
-
+
LLTextBox::Params last_interaction_time_textbox(params.last_interaction_time_textbox());
applyXUILayout(last_interaction_time_textbox, this);
mLastInteractionTimeTextbox = LLUICtrlFactory::create<LLTextBox>(last_interaction_time_textbox);
diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h
index 9cce615167..9839a1eaaf 100644
--- a/indra/newview/llpersontabview.h
+++ b/indra/newview/llpersontabview.h
@@ -33,6 +33,8 @@
#include "lloutputmonitorctrl.h"
#include "lltextbox.h"
+class LLPersonTabModel;
+
class LLPersonTabView : public LLFolderViewFolder
{
@@ -75,6 +77,7 @@ public:
struct Params : public LLInitParam::Block<Params, LLFolderViewItem::Params>
{
Params();
+ Optional<LLIconCtrl::Params> facebook_icon;
Optional<LLAvatarIconCtrl::Params> avatar_icon;
Optional<LLTextBox::Params> last_interaction_time_textbox;
Optional<LLIconCtrl::Params> permission_edit_theirs_icon;
@@ -104,9 +107,12 @@ protected:
private:
+ //Short-cut to tab model
+ LLPersonTabModel * mPersonTabModel;
+
LLPointer<LLUIImage> mImageOver;
LLPointer<LLUIImage> mImageSelected;
-
+ LLIconCtrl * mFacebookIcon;
LLAvatarIconCtrl* mAvatarIcon;
LLTextBox * mLastInteractionTimeTextbox;
LLIconCtrl * mPermissionEditTheirsIcon;
@@ -117,8 +123,6 @@ private:
LLButton * mProfileBtn;
LLOutputMonitorCtrl * mOutputMonitorCtrl;
-
-
typedef enum e_avatar_item_child {
ALIC_SPEAKER_INDICATOR,
ALIC_PROFILE_BUTTON,
diff --git a/indra/newview/skins/default/textures/icons/Facebook.png b/indra/newview/skins/default/textures/icons/Facebook.png
new file mode 100644
index 0000000000..8287d56f88
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Facebook.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 5b17ef94db..18146943a5 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -199,6 +199,8 @@ with the same filename but different name
<texture name="ExternalBrowser_Off" file_name="icons/ExternalBrowser_Off.png" preload="false" />
<texture name="Edit_Wrench" file_name="icons/Edit_Wrench.png" preload="false" />
+ <texture name="Facebook_Icon" file_name="icons/Facebook.png" preload="false" />
+
<texture name="Favorite_Star_Active" file_name="navbar/Favorite_Star_Active.png" preload="false" />
<texture name="Favorite_Star_Off" file_name="navbar/Favorite_Star_Off.png" preload="false" />
<texture name="Favorite_Star_Press" file_name="navbar/Favorite_Star_Press.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/widgets/person_view.xml b/indra/newview/skins/default/xui/en/widgets/person_view.xml
index 4a39109f36..006437401c 100644
--- a/indra/newview/skins/default/xui/en/widgets/person_view.xml
+++ b/indra/newview/skins/default/xui/en/widgets/person_view.xml
@@ -13,6 +13,17 @@
text_pad_right="4"
arrow_size="10"
max_folder_item_overlap="2">
+ <facebook_icon
+ layout="topleft"
+ follows="left"
+ height="16"
+ image_name="Facebook_Icon"
+ left="5"
+ top="5"
+ name="facebook_icon"
+ tool_tip="Facebook User"
+ visible="false"
+ width="16" />
<avatar_icon
follows="left"
layout="topleft"
@@ -20,6 +31,7 @@
default_icon_name="Generic_Person"
left="5"
top="2"
+ visible="false"
width="20" />
<last_interaction_time_textbox
layout="topleft"