Skip to content
Snippets Groups Projects
llavatarlistitem.h 6.26 KiB
Newer Older
  • Learn to ignore specific revisions
  • /** 
     * @file llavatarlistitem.h
     * @avatar list item header file
     *
    
    Steven Bennetts's avatar
    Steven Bennetts committed
     * $LicenseInfo:firstyear=2009&license=viewergpl$
    
    Steven Bennetts's avatar
    Steven Bennetts committed
     * Copyright (c) 2009, Linden Research, Inc.
    
     * 
     * Second Life Viewer Source Code
     * The source code in this file ("Source Code") is provided by Linden Lab
     * to you under the terms of the GNU General Public License, version 2.0
     * ("GPL"), unless you have obtained a separate licensing agreement
     * ("Other License"), formally executed by you and Linden Lab.  Terms of
     * the GPL can be found in doc/GPL-license.txt in this distribution, or
     * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
     * 
     * There are special exceptions to the terms and conditions of the GPL as
     * it is applied to this Source Code. View the full text of the exception
     * in the file doc/FLOSS-exception.txt in this software distribution, or
     * online at
     * http://secondlifegrid.net/programs/open_source/licensing/flossexception
     * 
     * By copying, modifying or distributing this software, you acknowledge
     * that you have read and understood your obligations described above,
     * and agree to abide by those obligations.
     * 
     * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
     * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
     * COMPLETENESS OR PERFORMANCE.
     * $/LicenseInfo$
     */
    
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    #ifndef LL_LLAVATARLISTITEM_H
    #define LL_LLAVATARLISTITEM_H
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    #include "llpanel.h"
    #include "lloutputmonitorctrl.h"
    #include "llbutton.h"
    #include "lltextbox.h"
    
    #include "llcallingcard.h" // for LLFriendObserver
    
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    class LLAvatarIconCtrl;
    
    
    class LLAvatarListItem : public LLPanel, public LLFriendObserver
    
    	struct Params : public LLInitParam::Block<Params, LLPanel::Params>
    	{
    		Optional<LLStyle::Params>	default_style,
    									voice_call_invited_style,
    									voice_call_joined_style,
    									voice_call_left_style,
    									online_style,
    									offline_style;
    
    		Params();
    	};
    
    
    	typedef enum e_item_state_type {
    
    		IS_DEFAULT,
    		IS_VOICE_INVITED,
    		IS_VOICE_JOINED,
    		IS_VOICE_LEFT,
    
    	} EItemState;
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    	class ContextMenu
    	{
    	public:
    
    		virtual void show(LLView* spawning_view, const std::vector<LLUUID>& selected_uuids, S32 x, S32 y) = 0;
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    	};
    
    
    	/**
    	 * Creates an instance of LLAvatarListItem.
    	 *
    	 * It is not registered with LLDefaultChildRegistry. It is built via LLUICtrlFactory::buildPanel
    	 * or via registered LLCallbackMap depend on passed parameter.
    	 * 
    	 * @param not_from_ui_factory if true instance will be build with LLUICtrlFactory::buildPanel 
    	 * otherwise it should be registered via LLCallbackMap before creating.
    	 */
    	LLAvatarListItem(bool not_from_ui_factory = true);
    
    	virtual ~LLAvatarListItem();
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    	virtual BOOL postBuild();
    
    
    	/**
    	 * Processes notification from speaker indicator to update children when indicator's visibility is changed.
    	 */
    	virtual S32	notifyParent(const LLSD& info);
    
    	virtual void onMouseLeave(S32 x, S32 y, MASK mask);
    	virtual void onMouseEnter(S32 x, S32 y, MASK mask);
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    	virtual void setValue(const LLSD& value);
    
    	virtual void changed(U32 mask); // from LLFriendObserver
    
    	void setOnline(bool online);
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    	void setName(const std::string& name);
    
    Vadim Savchuk's avatar
    Vadim Savchuk committed
    	void setHighlight(const std::string& highlight);
    
    	void setState(EItemState item_style);
    
    	void setAvatarId(const LLUUID& id, const LLUUID& session_id, bool ignore_status_changes = false);
    
    	//Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly
    
    	void setShowProfileBtn(bool show);
    	void setShowInfoBtn(bool show);
    
    	void showSpeakingIndicator(bool show);
    	void showLastInteractionTime(bool show);
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    	
    	const LLUUID& getAvatarId() const;
    	const std::string getAvatarName() const;
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    
    	void onInfoBtnClick();
    
    	/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
    
    
    protected:
    	/**
    	 * Contains indicator to show voice activity. 
    	 */
    	LLOutputMonitorCtrl* mSpeakingIndicator;
    
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    private:
    
    
    	typedef enum e_online_status {
    		E_OFFLINE,
    		E_ONLINE,
    		E_UNKNOWN,
    	} EOnlineStatus;
    
    
    	/**
    	 * Enumeration of item elements in order from right to left.
    	 * 
    	 * updateChildren() assumes that indexes are in the such order to process avatar icon easier.
    	 *
    	 * @see updateChildren()
    	 */
    	typedef enum e_avatar_item_child {
    
    		ALIC_PROFILE_BUTTON,
    		ALIC_INFO_BUTTON,
    		ALIC_INTERACTION_TIME,
    		ALIC_NAME,
    		ALIC_ICON,
    		ALIC_COUNT,
    	} EAvatarListItemChildIndex;
    
    
    	void setNameInternal(const std::string& name, const std::string& highlight);
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    	void onNameCache(const std::string& first_name, const std::string& last_name);
    
    
    	typedef std::map<EItemState, LLColor4> icon_color_map_t;
    
    	static icon_color_map_t& getItemIconColorMap();
    
    	/**
    	 * Initializes widths of all children to use them while changing visibility of any of them.
    	 *
    	 * @see updateChildren()
    	 */
    	static void initChildrenWidths(LLAvatarListItem* self);
    
    	/**
    	 * Updates position and rectangle of visible children to fit all available item's width.
    	 */
    	void updateChildren();
    
    	/**
    	 * Gets child view specified by index.
    	 *
    	 * This method implemented via switch by all EAvatarListItemChildIndex values.
    	 * It is used to not store children in array or vector to avoid of increasing memory usage.
    	 */
    	LLView* getItemChildView(EAvatarListItemChildIndex child_index);
    
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    	LLTextBox* mAvatarName;
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    	
    	LLButton* mInfoBtn;
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    
    	LLUUID mAvatarId;
    
    	std::string mHighlihtSubstring; // substring to highlight
    
    	EOnlineStatus mOnlineStatus;
    
    	//Flag indicating that info/profile button shouldn't be shown at all.
    	//Speaker indicator and avatar name coords are translated accordingly
    	bool mShowInfoBtn;
    	bool mShowProfileBtn;
    
    	static bool	sStaticInitialized; // this variable is introduced to improve code readability
    
    	static S32  sLeftPadding; // padding to first left visible child (icon or name)
    	static S32  sRightNamePadding; // right padding from name to next visible child
    
    	/**
    	 * Contains widths of each child specified by EAvatarListItemChildIndex
    	 * including padding to the next right one.
    	 *
    	 * @see initChildrenWidths()
    	 */
    	static S32 sChildrenWidths[ALIC_COUNT];
    
    
    Steven Bennetts's avatar
    Steven Bennetts committed
    
    #endif //LL_LLAVATARLISTITEM_H