/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include namespace Swift { class GroupRosterItem : public RosterItem { public: GroupRosterItem(const std::string& name, GroupRosterItem* parent, bool sortByStatus); virtual ~GroupRosterItem(); const std::vector& getChildren() const; const std::vector& getDisplayedChildren() const; void addChild(RosterItem* item); std::unique_ptr removeChild(const JID& jid); std::unique_ptr removeGroupChild(const std::string& group); void removeAll(); void setDisplayed(RosterItem* item, bool displayed); void setExpanded(bool expanded); bool isExpanded() const; void setManualSort(const std::string& manualSortValue); virtual const std::string& getSortableDisplayName() const; boost::signals2::signal onExpandedChanged; boost::signals2::signal onChildrenChanged; static bool itemLessThanWithStatus(const RosterItem* left, const RosterItem* right); static bool itemLessThanWithoutStatus(const RosterItem* left, const RosterItem* right); private: void handleChildrenChanged(GroupRosterItem* group); void handleDataChanged(RosterItem* item); bool sortDisplayed(); private: std::string name_; bool expanded_; std::vector children_; std::vector displayedChildren_; bool sortByStatus_; bool manualSort_; std::string manualSortValue_; }; }