llavatarlistitem.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llavatarlistitem.h
  3.  * @avatar list item header file
  4.  *
  5.  * $LicenseInfo:firstyear=2009&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2009-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLAVATARLISTITEM_H
  33. #define LL_LLAVATARLISTITEM_H
  34. #include "llpanel.h"
  35. #include "lloutputmonitorctrl.h"
  36. #include "llbutton.h"
  37. #include "lltextbox.h"
  38. #include "llstyle.h"
  39. #include "llcallingcard.h" // for LLFriendObserver
  40. class LLAvatarIconCtrl;
  41. class LLAvatarListItem : public LLPanel, public LLFriendObserver
  42. {
  43. public:
  44. struct Params : public LLInitParam::Block<Params, LLPanel::Params>
  45. {
  46. Optional<LLStyle::Params> default_style,
  47. voice_call_invited_style,
  48. voice_call_joined_style,
  49. voice_call_left_style,
  50. online_style,
  51. offline_style;
  52. Params();
  53. };
  54. typedef enum e_item_state_type {
  55. IS_DEFAULT,
  56. IS_VOICE_INVITED,
  57. IS_VOICE_JOINED,
  58. IS_VOICE_LEFT,
  59. IS_ONLINE,
  60. IS_OFFLINE,
  61. } EItemState;
  62. class ContextMenu
  63. {
  64. public:
  65. virtual void show(LLView* spawning_view, const std::vector<LLUUID>& selected_uuids, S32 x, S32 y) = 0;
  66. };
  67. /**
  68.  * Creates an instance of LLAvatarListItem.
  69.  *
  70.  * It is not registered with LLDefaultChildRegistry. It is built via LLUICtrlFactory::buildPanel
  71.  * or via registered LLCallbackMap depend on passed parameter.
  72.  * 
  73.  * @param not_from_ui_factory if true instance will be build with LLUICtrlFactory::buildPanel 
  74.  * otherwise it should be registered via LLCallbackMap before creating.
  75.  */
  76. LLAvatarListItem(bool not_from_ui_factory = true);
  77. virtual ~LLAvatarListItem();
  78. virtual BOOL postBuild();
  79. /**
  80.  * Processes notification from speaker indicator to update children when indicator's visibility is changed.
  81.  */
  82. virtual S32 notifyParent(const LLSD& info);
  83. virtual void onMouseLeave(S32 x, S32 y, MASK mask);
  84. virtual void onMouseEnter(S32 x, S32 y, MASK mask);
  85. virtual void setValue(const LLSD& value);
  86. virtual void changed(U32 mask); // from LLFriendObserver
  87. void setOnline(bool online);
  88. void setName(const std::string& name);
  89. void setHighlight(const std::string& highlight);
  90. void setState(EItemState item_style);
  91. void setAvatarId(const LLUUID& id, bool ignore_status_changes = false);
  92. void setLastInteractionTime(U32 secs_since);
  93. //Show/hide profile/info btn, translating speaker indicator and avatar name coordinates accordingly
  94. void setShowProfileBtn(bool show);
  95. void setShowInfoBtn(bool show);
  96. void showSpeakingIndicator(bool show);
  97. void showLastInteractionTime(bool show);
  98. void setAvatarIconVisible(bool visible);
  99. const LLUUID& getAvatarId() const;
  100. const std::string getAvatarName() const;
  101. void onInfoBtnClick();
  102. void onProfileBtnClick();
  103. /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
  104. protected:
  105. /**
  106.  * Contains indicator to show voice activity. 
  107.  */
  108. LLOutputMonitorCtrl* mSpeakingIndicator;
  109. LLAvatarIconCtrl* mAvatarIcon;
  110. private:
  111. typedef enum e_online_status {
  112. E_OFFLINE,
  113. E_ONLINE,
  114. E_UNKNOWN,
  115. } EOnlineStatus;
  116. /**
  117.  * Enumeration of item elements in order from right to left.
  118.  * 
  119.  * updateChildren() assumes that indexes are in the such order to process avatar icon easier.
  120.  *
  121.  * @see updateChildren()
  122.  */
  123. typedef enum e_avatar_item_child {
  124. ALIC_SPEAKER_INDICATOR,
  125. ALIC_PROFILE_BUTTON,
  126. ALIC_INFO_BUTTON,
  127. ALIC_INTERACTION_TIME,
  128. ALIC_NAME,
  129. ALIC_ICON,
  130. ALIC_COUNT,
  131. } EAvatarListItemChildIndex;
  132. void setNameInternal(const std::string& name, const std::string& highlight);
  133. void onNameCache(const std::string& first_name, const std::string& last_name);
  134. std::string formatSeconds(U32 secs);
  135. typedef std::map<EItemState, LLColor4> icon_color_map_t;
  136. static icon_color_map_t& getItemIconColorMap();
  137. /**
  138.  * Initializes widths of all children to use them while changing visibility of any of them.
  139.  *
  140.  * @see updateChildren()
  141.  */
  142. static void initChildrenWidths(LLAvatarListItem* self);
  143. /**
  144.  * Updates position and rectangle of visible children to fit all available item's width.
  145.  */
  146. void updateChildren();
  147. /**
  148.  * Gets child view specified by index.
  149.  *
  150.  * This method implemented via switch by all EAvatarListItemChildIndex values.
  151.  * It is used to not store children in array or vector to avoid of increasing memory usage.
  152.  */
  153. LLView* getItemChildView(EAvatarListItemChildIndex child_index);
  154. LLTextBox* mAvatarName;
  155. LLTextBox* mLastInteractionTime;
  156. LLStyle::Params mAvatarNameStyle;
  157. LLButton* mInfoBtn;
  158. LLButton* mProfileBtn;
  159. LLUUID mAvatarId;
  160. std::string mHighlihtSubstring; // substring to highlight
  161. EOnlineStatus mOnlineStatus;
  162. //Flag indicating that info/profile button shouldn't be shown at all.
  163. //Speaker indicator and avatar name coords are translated accordingly
  164. bool mShowInfoBtn;
  165. bool mShowProfileBtn;
  166. static bool sStaticInitialized; // this variable is introduced to improve code readability
  167. static S32  sLeftPadding; // padding to first left visible child (icon or name)
  168. static S32  sRightNamePadding; // right padding from name to next visible child
  169. /**
  170.  * Contains widths of each child specified by EAvatarListItemChildIndex
  171.  * including padding to the next right one.
  172.  *
  173.  * @see initChildrenWidths()
  174.  */
  175. static S32 sChildrenWidths[ALIC_COUNT];
  176. };
  177. #endif //LL_LLAVATARLISTITEM_H