diff options
Diffstat (limited to 'Swift/Controllers/Roster/Roster.h')
-rw-r--r-- | Swift/Controllers/Roster/Roster.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Swift/Controllers/Roster/Roster.h b/Swift/Controllers/Roster/Roster.h new file mode 100644 index 0000000..70ff0b5 --- /dev/null +++ b/Swift/Controllers/Roster/Roster.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include "Swiften/Base/String.h" +#include "Swiften/JID/JID.h" +#include "Swift/Controllers/Roster/RosterItemOperation.h" +#include "Swift/Controllers/Roster/RosterFilter.h" + +#include <vector> +#include <map> +#include "Swiften/Base/boost_bsignals.h" +#include <boost/shared_ptr.hpp> + +namespace Swift { + +class RosterItem; +class GroupRosterItem; +class ContactRosterItem; + +class Roster { + public: + Roster(bool sortByStatus = true, bool fullJIDMapping = false); + ~Roster(); + + void addContact(const JID& jid, const JID& displayJID, const String& name, const String& group, const String& avatarPath); + void removeContact(const JID& jid); + void removeContactFromGroup(const JID& jid, const String& group); + void removeAll(); + void applyOnItems(const RosterItemOperation& operation); + void applyOnAllItems(const RosterItemOperation& operation); + void applyOnItem(const RosterItemOperation& operation, const JID& jid); + void addFilter(RosterFilter *filter) {filters_.push_back(filter);filterAll();}; + void removeFilter(RosterFilter *filter); + GroupRosterItem* getRoot(); + std::vector<RosterFilter*> getFilters() {return filters_;}; + boost::signal<void (GroupRosterItem*)> onChildrenChanged; + boost::signal<void (GroupRosterItem*)> onGroupAdded; + boost::signal<void (RosterItem*)> onDataChanged; + private: + GroupRosterItem* getGroup(const String& groupName); + void handleDataChanged(RosterItem* item); + void handleChildrenChanged(GroupRosterItem* item); + void filterGroup(GroupRosterItem* item); + void filterContact(ContactRosterItem* contact, GroupRosterItem* group); + void filterAll(); + GroupRosterItem* root_; + std::vector<RosterFilter*> filters_; + std::map<JID, std::vector<ContactRosterItem*> > itemMap_; + bool fullJIDMapping_; + bool sortByStatus_; +}; + +} |