diff options
| -rw-r--r-- | Swift/Controllers/Roster/TableRoster.cpp | 36 | ||||
| -rw-r--r-- | Swift/Controllers/Roster/TableRoster.h | 51 | ||||
| -rw-r--r-- | Swift/Controllers/SConscript | 1 | 
3 files changed, 88 insertions, 0 deletions
| diff --git a/Swift/Controllers/Roster/TableRoster.cpp b/Swift/Controllers/Roster/TableRoster.cpp new file mode 100644 index 0000000..fda7de8 --- /dev/null +++ b/Swift/Controllers/Roster/TableRoster.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2011 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swift/Controllers/Roster/TableRoster.h> + +#include <boost/cast.hpp> + +#include <Swift/Controllers/Roster/Roster.h> +#include <Swift/Controllers/Roster/GroupRosterItem.h> + +using namespace Swift; + +TableRoster::TableRoster(Roster* model) : model(model) { +} +			 +size_t TableRoster::getNumberOfSections() const { +	return model ? model->getRoot()->getDisplayedChildren().size() : 0; +} + +size_t TableRoster::getNumberOfRowsInSection(size_t section) const { +	return boost::polymorphic_downcast<Swift::GroupRosterItem*>(model->getRoot()->getDisplayedChildren()[section])->getDisplayedChildren().size(); +} + +const std::string& TableRoster::getSectionTitle(size_t section) { +	return model->getRoot()->getDisplayedChildren()[section]->getDisplayName(); +} + +TableRoster::Item TableRoster::getItem(const Index& index) const { +	Item item; +	item.name = boost::polymorphic_downcast<Swift::GroupRosterItem*>(model->getRoot()->getDisplayedChildren().at(index.section))->getDisplayedChildren().at(index.row)->getDisplayName(); +	item.description = "My Status"; +	return item; +} diff --git a/Swift/Controllers/Roster/TableRoster.h b/Swift/Controllers/Roster/TableRoster.h new file mode 100644 index 0000000..7d92995 --- /dev/null +++ b/Swift/Controllers/Roster/TableRoster.h @@ -0,0 +1,51 @@ +/* + * 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> + +namespace Swift { +	class Roster; + +	class TableRoster { +		public: +			struct Item { +				std::string name; +				std::string description; +				JID jid; +			}; +			struct Index { +				Index(size_t section, size_t row) : section(section), row(row) {  +				} +				size_t section; +				size_t row; +			}; + +			TableRoster(Roster* model); +			 +			size_t getNumberOfSections() const; +			size_t getNumberOfRowsInSection(size_t section) const; + +			const std::string& getSectionTitle(size_t); + +			Item getItem(const Index&) const; + +			boost::signal<void ()> onBeginUpdates; +			boost::signal<void (const std::vector<Index>&)> onRowsInserted; +			boost::signal<void (const std::vector<Index>&)> onRowsDeleted; +			boost::signal<void (const std::vector<size_t>&)> onSectionsInserted; +			boost::signal<void (const std::vector<size_t>&)> onSectionsDeleted; +			boost::signal<void ()> onEndUpdates; + +		private: +			Roster* model; +	}; +} diff --git a/Swift/Controllers/SConscript b/Swift/Controllers/SConscript index eed1f4d..a7df3a9 100644 --- a/Swift/Controllers/SConscript +++ b/Swift/Controllers/SConscript @@ -37,6 +37,7 @@ if env["SCONS_STAGE"] == "build" :  			"Roster/GroupRosterItem.cpp",  			"Roster/RosterItem.cpp",  			"Roster/Roster.cpp", +			"Roster/TableRoster.cpp",  			"EventWindowController.cpp",  			"SoundEventController.cpp",  			"SystemTrayController.cpp", | 
 Swift
 Swift