diff options
| author | Merov Linden <merov@lindenlab.com> | 2013-05-06 18:40:22 -0700 | 
|---|---|---|
| committer | Merov Linden <merov@lindenlab.com> | 2013-05-06 18:40:22 -0700 | 
| commit | a26c7df637aea37aa5bf823f41f574d2ddd4ea70 (patch) | |
| tree | aa78044ebced7f959edd2ddc483867f75bfbfe81 /indra/newview | |
| parent | 00275301fc6606c98f77f8fbb8e485b3788831a8 (diff) | |
| parent | 04587bdb9d5e1653d5b19a6ca51e547180994958 (diff) | |
Pull merge from viewer-fbc
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llpanelpeople.cpp | 70 | ||||
| -rw-r--r-- | indra/newview/llpersonfolderview.cpp | 48 | ||||
| -rw-r--r-- | indra/newview/llpersonfolderview.h | 16 | ||||
| -rw-r--r-- | indra/newview/llpersonmodelcommon.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llpersonmodelcommon.h | 10 | ||||
| -rw-r--r-- | indra/newview/llpersontabview.cpp | 53 | ||||
| -rw-r--r-- | indra/newview/llpersontabview.h | 10 | ||||
| -rw-r--r-- | indra/newview/skins/default/textures/icons/Facebook.png | bin | 0 -> 365 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/textures.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/widgets/person_view.xml | 12 | 
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.pngBinary files differ new file mode 100644 index 0000000000..8287d56f88 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/Facebook.png 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" | 
