diff options
Diffstat (limited to 'Swift/Controllers/Roster/TableRoster.h')
| -rw-r--r-- | Swift/Controllers/Roster/TableRoster.h | 83 | 
1 files changed, 83 insertions, 0 deletions
| diff --git a/Swift/Controllers/Roster/TableRoster.h b/Swift/Controllers/Roster/TableRoster.h new file mode 100644 index 0000000..8ff16d0 --- /dev/null +++ b/Swift/Controllers/Roster/TableRoster.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2011 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include <string> +#include <vector> +#include <Swiften/Base/boost_bsignals.h> + +#include <Swiften/JID/JID.h> +#include <Swiften/Elements/StatusShow.h> + +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 std::string& avatarPath) : name(name), description(description), jid(jid), status(status), avatarPath(avatarPath) { +				} +				std::string name; +				std::string description; +				JID jid; +				StatusShow::Type status; +				std::string 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<Index> updatedRows; +				std::vector<Index> insertedRows; +				std::vector<Index> deletedRows; +				std::vector<size_t> insertedSections; +				std::vector<size_t> 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<void (const Update&)> onUpdate; + +		private: +			void handleUpdateTimerTick(); +			void scheduleUpdate(); + +		private: +			friend class SectionNameEquals; +			struct Section { +				Section(const std::string& name) : name(name) { +				} + +				std::string name; +				std::vector<Item> items; +			}; + +			Roster* model; +			std::vector<Section> sections; +			bool updatePending; +			boost::shared_ptr<Timer> updateTimer; +	}; +} | 
 Swift
 Swift