diff options
-rw-r--r-- | Swift/Controllers/Chat/MUCController.cpp | 2 | ||||
-rw-r--r-- | Swiften/Roster/GroupRosterItem.cpp | 10 | ||||
-rw-r--r-- | Swiften/Roster/GroupRosterItem.h | 6 | ||||
-rw-r--r-- | Swiften/Roster/Roster.cpp | 7 | ||||
-rw-r--r-- | Swiften/Roster/Roster.h | 3 |
5 files changed, 18 insertions, 10 deletions
diff --git a/Swift/Controllers/Chat/MUCController.cpp b/Swift/Controllers/Chat/MUCController.cpp index 1ea0ad1..d84c399 100644 --- a/Swift/Controllers/Chat/MUCController.cpp +++ b/Swift/Controllers/Chat/MUCController.cpp @@ -52,7 +52,7 @@ MUCController::MUCController ( joined_ = false; events_ = uiEventStream; - roster_ = new Roster(true); + roster_ = new Roster(false, true); completer_ = new TabComplete(); chatWindow_->setRosterModel(roster_); chatWindow_->setTabComplete(completer_); diff --git a/Swiften/Roster/GroupRosterItem.cpp b/Swiften/Roster/GroupRosterItem.cpp index bf4f838..aa9fdd4 100644 --- a/Swiften/Roster/GroupRosterItem.cpp +++ b/Swiften/Roster/GroupRosterItem.cpp @@ -12,7 +12,7 @@ namespace Swift { -GroupRosterItem::GroupRosterItem(const String& name, GroupRosterItem* parent) : RosterItem(name, parent) { +GroupRosterItem::GroupRosterItem(const String& name, GroupRosterItem* parent, bool sortByStatus) : RosterItem(name, parent), sortByStatus_(sortByStatus) { expanded_ = true; } @@ -115,11 +115,15 @@ bool GroupRosterItem::sortDisplayed() { // return false; // } //Sholudn't need stable_sort here - std::sort(displayedChildren_.begin(), displayedChildren_.end(), itemLessThan); + std::sort(displayedChildren_.begin(), displayedChildren_.end(), sortByStatus_? itemLessThanWithStatus : itemLessThanWithoutStatus); return true; } -bool GroupRosterItem::itemLessThan(const RosterItem* left, const RosterItem* right) { +bool GroupRosterItem::itemLessThanWithoutStatus(const RosterItem* left, const RosterItem* right) { + return left->getSortableDisplayName() < right->getSortableDisplayName(); +} + +bool GroupRosterItem::itemLessThanWithStatus(const RosterItem* left, const RosterItem* right) { const ContactRosterItem* leftContact = dynamic_cast<const ContactRosterItem*>(left); const ContactRosterItem* rightContact = dynamic_cast<const ContactRosterItem*>(right); if (leftContact) { diff --git a/Swiften/Roster/GroupRosterItem.h b/Swiften/Roster/GroupRosterItem.h index 096d053..67ced97 100644 --- a/Swiften/Roster/GroupRosterItem.h +++ b/Swiften/Roster/GroupRosterItem.h @@ -16,7 +16,7 @@ namespace Swift { class GroupRosterItem : public RosterItem { public: - GroupRosterItem(const String& name, GroupRosterItem* parent); + GroupRosterItem(const String& name, GroupRosterItem* parent, bool sortByStatus); virtual ~GroupRosterItem(); const std::vector<RosterItem*>& getChildren() const; const std::vector<RosterItem*>& getDisplayedChildren() const; @@ -25,7 +25,8 @@ class GroupRosterItem : public RosterItem { void removeAll(); void setDisplayed(RosterItem* item, bool displayed); boost::signal<void ()> onChildrenChanged; - static bool itemLessThan(const RosterItem* left, const RosterItem* right); + static bool itemLessThanWithStatus(const RosterItem* left, const RosterItem* right); + static bool itemLessThanWithoutStatus(const RosterItem* left, const RosterItem* right); void setExpanded(bool expanded); bool isExpanded() const; private: @@ -36,6 +37,7 @@ class GroupRosterItem : public RosterItem { bool expanded_; std::vector<RosterItem*> children_; std::vector<RosterItem*> displayedChildren_; + bool sortByStatus_; }; } diff --git a/Swiften/Roster/Roster.cpp b/Swiften/Roster/Roster.cpp index e91b843..64a7241 100644 --- a/Swiften/Roster/Roster.cpp +++ b/Swiften/Roster/Roster.cpp @@ -21,9 +21,10 @@ namespace Swift { -Roster::Roster(bool fullJIDMapping) { +Roster::Roster(bool sortByStatus, bool fullJIDMapping) { + sortByStatus_ = sortByStatus; fullJIDMapping_ = fullJIDMapping; - root_ = new GroupRosterItem("Dummy-Root", NULL); + root_ = new GroupRosterItem("Dummy-Root", NULL, sortByStatus_); root_->onChildrenChanged.connect(boost::bind(&Roster::handleChildrenChanged, this, root_)); } @@ -52,7 +53,7 @@ GroupRosterItem* Roster::getGroup(const String& groupName) { return group; } } - GroupRosterItem* group = new GroupRosterItem(groupName, root_); + GroupRosterItem* group = new GroupRosterItem(groupName, root_, sortByStatus_); root_->addChild(group); group->onChildrenChanged.connect(boost::bind(&Roster::handleChildrenChanged, this, group)); group->onDataChanged.connect(boost::bind(&Roster::handleDataChanged, this, group)); diff --git a/Swiften/Roster/Roster.h b/Swiften/Roster/Roster.h index d54a12e..aa117d7 100644 --- a/Swiften/Roster/Roster.h +++ b/Swiften/Roster/Roster.h @@ -25,7 +25,7 @@ class ContactRosterItem; class Roster { public: - Roster(bool fullJIDMapping = false); + Roster(bool sortByStatus = true, bool fullJIDMapping = false); ~Roster(); void addContact(const JID& jid, const JID& displayJID, const String& name, const String& group); @@ -53,6 +53,7 @@ class Roster { std::vector<RosterFilter*> filters_; std::map<JID, std::vector<ContactRosterItem*> > itemMap_; bool fullJIDMapping_; + bool sortByStatus_; }; } |