/* * Copyright (c) 2011-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include namespace Swift { class Roster; class TimerFactory; class Timer; class TableRoster { public: struct Item { Item(const std::string& name, const std::string& description, const JID& jid, StatusShow::Type status, const boost::filesystem::path& avatarPath) : name(name), description(description), jid(jid), status(status), avatarPath(avatarPath) { } std::string name; std::string description; JID jid; StatusShow::Type status; boost::filesystem::path avatarPath; }; struct Index { Index(size_t section = 0, size_t row = 0) : section(section), row(row) { } size_t section; size_t row; bool operator==(const Index& o) const { return o.section == section && o.row == row; } }; struct Update { std::vector updatedRows; std::vector insertedRows; std::vector deletedRows; std::vector insertedSections; std::vector deletedSections; }; TableRoster(Roster* model, TimerFactory* timerFactory, int updateDelay); ~TableRoster(); size_t getNumberOfSections() const; size_t getNumberOfRowsInSection(size_t section) const; const std::string& getSectionTitle(size_t); const Item& getItem(const Index&) const; boost::signal onUpdate; private: void handleUpdateTimerTick(); void scheduleUpdate(); private: friend struct SectionNameEquals; struct Section { Section(const std::string& name) : name(name) { } std::string name; std::vector items; }; Roster* model; std::vector
sections; bool updatePending; boost::shared_ptr updateTimer; }; }