diff options
Diffstat (limited to 'indra/newview/llavatarlist.h')
-rw-r--r-- | indra/newview/llavatarlist.h | 89 |
1 files changed, 39 insertions, 50 deletions
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 639ed83ada..8d79e073d2 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -33,88 +33,77 @@ #ifndef LL_LLAVATARLIST_H #define LL_LLAVATARLIST_H -#include <llscrolllistctrl.h> +#include "llflatlistview.h" + +#include "llavatarlistitem.h" -// *TODO: derive from ListView when it's ready. -class LLAvatarList : public LLScrollListCtrl +class LLAvatarList : public LLFlatListView { LOG_CLASS(LLAvatarList); public: - struct Params : public LLInitParam::Block<Params, LLScrollListCtrl::Params> + struct Params : public LLInitParam::Block<Params, LLFlatListView::Params> { Optional<S32> volume_column_width; Optional<bool> online_go_first; Params(); }; - enum EColumnOrder - { - COL_VOLUME, - COL_NAME, - COL_ONLINE, - COL_ID, - }; - LLAvatarList(const Params&); virtual ~LLAvatarList() {} - /*virtual*/ void draw(); - BOOL update(const std::vector<LLUUID>& all_buddies, const std::string& name_filter = LLStringUtil::null); + void setContextMenu(LLAvatarListItem::ContextMenu* menu) { mContextMenu = menu; } + + void sortByName(); + protected: - std::vector<LLUUID> getSelectedIDs(); - void addItem(const LLUUID& id, const std::string& name, BOOL is_bold, EAddPosition pos = ADD_BOTTOM); + void addNewItem(const LLUUID& id, const std::string& name, BOOL is_bold, EAddPosition pos = ADD_BOTTOM); + void computeDifference( + const std::vector<LLUUID>& vnew, + std::vector<LLUUID>& vadded, + std::vector<LLUUID>& vremoved); private: - static std::string getVolumeIcon(const LLUUID& id); /// determine volume icon from current avatar volume - void updateVolume(); // update volume for all avatars - bool mHaveVolumeColumn; bool mOnlineGoFirst; -}; - -#include "llflatlistview.h" + LLAvatarListItem::ContextMenu* mContextMenu; +}; -class LLAvatarListTmp : public LLFlatListView +/** Abstract comparator for avatar items */ +class LLAvatarItemComparator : public LLFlatListView::ItemComparator { - LOG_CLASS(LLAvatarListTmp); -public: - struct Params : public LLInitParam::Block<Params, LLFlatListView::Params> - { - Optional<S32> volume_column_width; - Optional<bool> online_go_first; - Params(); - }; - - LLAvatarListTmp(const Params&); - virtual ~LLAvatarListTmp() {} - - /*virtual*/ void draw(); + LOG_CLASS(LLAvatarItemComparator); - BOOL update(const std::vector<LLUUID>& all_buddies, - const std::string& name_filter = LLStringUtil::null); +public: + LLAvatarItemComparator() {}; + virtual ~LLAvatarItemComparator() {}; - const LLUUID getCurrentID() const; - void setCommentText( const std::string& comment_text); + virtual bool compare(const LLPanel* item1, const LLPanel* item2) const; protected: - std::vector<LLUUID> getSelectedIDs(); - void addNewItem(const LLUUID& id, const std::string& name, BOOL is_bold, EAddPosition pos = ADD_BOTTOM); - /*virtual*/ bool removeItemPair(item_pair_t* item_pair); -private: - static std::string getVolumeIcon(const LLUUID& id); /// determine volume icon from current avatar volume - void updateVolume(); // update volume for all avatars - void setCommentVisible(bool visible) const; + /** + * Returns true if avatar_item1 < avatar_item2, false otherwise + * Implement this method in your particular comparator. + * In Linux a compiler failed to build it using the name "compare", so it was renamed to doCompare + */ + virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const = 0; +}; - bool mHaveVolumeColumn; - bool mOnlineGoFirst; -}; +class LLAvatarItemNameComparator : public LLAvatarItemComparator +{ + LOG_CLASS(LLAvatarItemNameComparator); +public: + LLAvatarItemNameComparator() {}; + virtual ~LLAvatarItemNameComparator() {}; +protected: + virtual bool doCompare(const LLAvatarListItem* avatar_item1, const LLAvatarListItem* avatar_item2) const; +}; #endif // LL_LLAVATARLIST_H |