summaryrefslogtreecommitdiff
path: root/indra/newview/llavatarlistitem.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llavatarlistitem.h')
-rw-r--r--indra/newview/llavatarlistitem.h125
1 files changed, 115 insertions, 10 deletions
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
index 10c0b17005..426d80e0a8 100644
--- a/indra/newview/llavatarlistitem.h
+++ b/indra/newview/llavatarlistitem.h
@@ -37,6 +37,7 @@
#include "lloutputmonitorctrl.h"
#include "llbutton.h"
#include "lltextbox.h"
+#include "llstyle.h"
#include "llcallingcard.h" // for LLFriendObserver
@@ -45,16 +46,51 @@ class LLAvatarIconCtrl;
class LLAvatarListItem : public LLPanel, public LLFriendObserver
{
public:
+ 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,
+ IS_ONLINE,
+ IS_OFFLINE,
+ } EItemState;
+
class ContextMenu
{
public:
virtual void show(LLView* spawning_view, const std::vector<LLUUID>& selected_uuids, S32 x, S32 y) = 0;
};
- LLAvatarListItem();
+ /**
+ * 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();
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);
virtual void setValue(const LLSD& value);
@@ -62,8 +98,15 @@ public:
void setOnline(bool online);
void setName(const std::string& name);
+ void setHighlight(const std::string& highlight);
+ void setState(EItemState item_style);
void setAvatarId(const LLUUID& id, bool ignore_status_changes = false);
- void setLastInteractionTime(const std::string& val);
+ void setLastInteractionTime(U32 secs_since);
+ //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);
void setAvatarIconVisible(bool visible);
const LLUUID& getAvatarId() const;
@@ -72,11 +115,15 @@ public:
void onInfoBtnClick();
void onProfileBtnClick();
- void showSpeakingIndicator(bool show) { mSpeakingIndicator->setVisible(show); }
- void showInfoBtn(bool show_info_btn) {mInfoBtn->setVisible(show_info_btn); }
- void showLastInteractionTime(bool show);
+ /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+
+protected:
+ /**
+ * Contains indicator to show voice activity.
+ */
+ LLOutputMonitorCtrl* mSpeakingIndicator;
- void setContextMenu(ContextMenu* menu) { mContextMenu = menu; }
+ LLAvatarIconCtrl* mAvatarIcon;
private:
@@ -86,20 +133,78 @@ private:
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_SPEAKER_INDICATOR,
+ 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);
void onNameCache(const std::string& first_name, const std::string& last_name);
- LLAvatarIconCtrl* mAvatarIcon;
+ std::string formatSeconds(U32 secs);
+
+ 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);
+
LLTextBox* mAvatarName;
LLTextBox* mLastInteractionTime;
+ LLStyle::Params mAvatarNameStyle;
- LLOutputMonitorCtrl* mSpeakingIndicator;
LLButton* mInfoBtn;
LLButton* mProfileBtn;
- ContextMenu* mContextMenu;
LLUUID mAvatarId;
+ std::string mHighlihtSubstring; // substring to highlight
EOnlineStatus mOnlineStatus;
- static S32 sIconWidth; // icon width + padding
+ //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];
+
};
#endif //LL_LLAVATARLISTITEM_H