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", |