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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llavatarlist.h
  3.  * @brief Generic avatar list
  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_LLAVATARLIST_H
  33. #define LL_LLAVATARLIST_H
  34. #include "llflatlistview.h"
  35. #include "llavatarlistitem.h"
  36. class LLTimer;
  37. /**
  38.  * Generic list of avatars.
  39.  * 
  40.  * Updates itself when it's dirty, using optional name filter.
  41.  * To initiate update, modify the UUID list and call setDirty().
  42.  * 
  43.  * @see getIDs()
  44.  * @see setDirty()
  45.  * @see setNameFilter()
  46.  */
  47. class LLAvatarList : public LLFlatListView
  48. {
  49. LOG_CLASS(LLAvatarList);
  50. public:
  51. typedef std::vector<LLUUID> uuid_vector_t;
  52. struct Params : public LLInitParam::Block<Params, LLFlatListView::Params> 
  53. {
  54. Optional<bool> ignore_online_status, // show all items as online
  55. show_last_interaction_time, // show most recent interaction time. *HACK: move this to a derived class
  56. show_info_btn,
  57. show_profile_btn,
  58. show_speaking_indicator;
  59. Params();
  60. };
  61. LLAvatarList(const Params&);
  62. virtual ~LLAvatarList();
  63. virtual void draw(); // from LLView
  64. virtual void clear();
  65. void setNameFilter(const std::string& filter);
  66. void setDirty(bool val = true) { mDirty = val; }
  67. uuid_vector_t& getIDs()  { return mIDs; }
  68. bool contains(const LLUUID& id);
  69. void setContextMenu(LLAvatarListItem::ContextMenu* menu) { mContextMenu = menu; }
  70. void toggleIcons();
  71. void setSpeakingIndicatorsVisible(bool visible);
  72. void sortByName();
  73. void setShowIcons(std::string param_name);
  74. bool getIconsVisible() const { return mShowIcons; }
  75. const std::string getIconParamName() const{return mIconParamName;}
  76. virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
  77. // Return true if filter has at least one match.
  78. bool filterHasMatches();
  79. boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb);
  80. boost::signals2::connection setItemDoubleClickCallback(const mouse_signal_t::slot_type& cb);
  81. protected:
  82. void refresh();
  83. void addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos = ADD_BOTTOM);
  84. void computeDifference(
  85. const std::vector<LLUUID>& vnew,
  86. std::vector<LLUUID>& vadded,
  87. std::vector<LLUUID>& vremoved);
  88. void updateLastInteractionTimes();
  89. void onItemDoucleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask);
  90. private:
  91. bool mIgnoreOnlineStatus;
  92. bool mShowLastInteractionTime;
  93. bool mDirty;
  94. bool mShowIcons;
  95. bool mShowInfoBtn;
  96. bool mShowProfileBtn;
  97. bool mShowSpeakingIndicator;
  98. LLTimer* mLITUpdateTimer; // last interaction time update timer
  99. std::string mIconParamName;
  100. std::string mNameFilter;
  101. uuid_vector_t mIDs;
  102. LLAvatarListItem::ContextMenu* mContextMenu;
  103. commit_signal_t mRefreshCompleteSignal;
  104. mouse_signal_t mItemDoubleClickSignal;
  105. };
  106. /** Abstract comparator for avatar items */
  107. class LLAvatarItemComparator : public LLFlatListView::ItemComparator
  108. {
  109. LOG_CLASS(LLAvatarItemComparator);
  110. public:
  111. LLAvatarItemComparator() {};
  112. virtual ~LLAvatarItemComparator() {};
  113. virtual bool compare(const LLPanel* item1, const LLPanel* item2) const;
  114. protected:
  115. /** 
  116.  * Returns true if avatar_item1 < avatar_item2, false otherwise 
  117.  * Implement this method in your particular comparator.
  118.  * In Linux a compiler failed to build it using the name "compare", so it was renamed to doCompare
  119.  */
  120. virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const = 0;
  121. };
  122. class LLAvatarItemNameComparator : public LLAvatarItemComparator
  123. {
  124. LOG_CLASS(LLAvatarItemNameComparator);
  125. public:
  126. LLAvatarItemNameComparator() {};
  127. virtual ~LLAvatarItemNameComparator() {};
  128. protected:
  129. virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const;
  130. };
  131. class LLAvatarItemAgentOnTopComparator : public LLAvatarItemNameComparator
  132. {
  133. LOG_CLASS(LLAvatarItemAgentOnTopComparator);
  134. public:
  135. LLAvatarItemAgentOnTopComparator() {};
  136. virtual ~LLAvatarItemAgentOnTopComparator() {};
  137. protected:
  138. virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const;
  139. };
  140. #endif // LL_LLAVATARLIST_H