diff options
21 files changed, 201 insertions, 127 deletions
diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index 919a3d6..654f735 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -1,3 +1,3 @@ /* - * Copyright (c) 2010-2013 Kevin Smith + * Copyright (c) 2010-2014 Kevin Smith * Licensed under the GNU General Public License v3. @@ -931,7 +931,7 @@ std::vector<ChatListWindow::Chat> ChatsManager::getRecentChats() const { -std::vector<Contact> Swift::ChatsManager::getContacts() { - std::vector<Contact> result; +std::vector<Contact::ref> Swift::ChatsManager::getContacts() { + std::vector<Contact::ref> result; foreach (ChatListWindow::Chat chat, recentChats_) { if (!chat.isMUC) { - result.push_back(Contact(chat.chatName.empty() ? chat.jid.toString() : chat.chatName, chat.jid, chat.statusType, chat.avatarPath)); + result.push_back(boost::make_shared<Contact>(chat.chatName.empty() ? chat.jid.toString() : chat.chatName, chat.jid, chat.statusType, chat.avatarPath)); } diff --git a/Swift/Controllers/Chat/ChatsManager.h b/Swift/Controllers/Chat/ChatsManager.h index 979d52a..88a0986 100644 --- a/Swift/Controllers/Chat/ChatsManager.h +++ b/Swift/Controllers/Chat/ChatsManager.h @@ -1,3 +1,3 @@ /* - * Copyright (c) 2010-2013 Kevin Smith + * Copyright (c) 2010-2014 Kevin Smith * Licensed under the GNU General Public License v3. @@ -75,3 +75,3 @@ namespace Swift { std::vector<ChatListWindow::Chat> getRecentChats() const; - virtual std::vector<Contact> getContacts(); + virtual std::vector<Contact::ref> getContacts(); diff --git a/Swift/Controllers/Chat/UserSearchController.cpp b/Swift/Controllers/Chat/UserSearchController.cpp index 7844c1b..8503609 100644 --- a/Swift/Controllers/Chat/UserSearchController.cpp +++ b/Swift/Controllers/Chat/UserSearchController.cpp @@ -217,3 +217,3 @@ void UserSearchController::handleJIDUpdateRequested(const std::vector<JID>& jids if (window_) { - std::vector<Contact> updates; + std::vector<Contact::ref> updates; foreach(const JID& jid, jids) { @@ -226,3 +226,3 @@ void UserSearchController::handleJIDUpdateRequested(const std::vector<JID>& jids void UserSearchController::handleJIDAddRequested(const std::vector<JID>& jids) { - std::vector<Contact> contacts; + std::vector<Contact::ref> contacts; foreach(const JID& jid, jids) { @@ -233,5 +233,5 @@ void UserSearchController::handleJIDAddRequested(const std::vector<JID>& jids) { -Contact UserSearchController::convertJIDtoContact(const JID& jid) { - Contact contact; - contact.jid = jid; +Contact::ref UserSearchController::convertJIDtoContact(const JID& jid) { + Contact::ref contact = boost::make_shared<Contact>(); + contact->jid = jid; @@ -240,3 +240,3 @@ Contact UserSearchController::convertJIDtoContact(const JID& jid) { if (rosterItem && !rosterItem->getName().empty()) { - contact.name = rosterItem->getName(); + contact->name = rosterItem->getName(); } else { @@ -244,5 +244,5 @@ Contact UserSearchController::convertJIDtoContact(const JID& jid) { if (vcard && !vcard->getFullName().empty()) { - contact.name = vcard->getFullName(); + contact->name = vcard->getFullName(); } else { - contact.name = jid.toString(); + contact->name = jid.toString(); } @@ -253,5 +253,5 @@ Contact UserSearchController::convertJIDtoContact(const JID& jid) { if (presence) { - contact.statusType = presence->getShow(); + contact->statusType = presence->getShow(); } else { - contact.statusType = StatusShow::None; + contact->statusType = StatusShow::None; } @@ -259,3 +259,3 @@ Contact UserSearchController::convertJIDtoContact(const JID& jid) { // avatar lookup - contact.avatarPath = avatarManager_->getAvatarPath(jid); + contact->avatarPath = avatarManager_->getAvatarPath(jid); return contact; diff --git a/Swift/Controllers/Chat/UserSearchController.h b/Swift/Controllers/Chat/UserSearchController.h index fc4c8e9..d630580 100644 --- a/Swift/Controllers/Chat/UserSearchController.h +++ b/Swift/Controllers/Chat/UserSearchController.h @@ -9,9 +9,9 @@ #include <boost/shared_ptr.hpp> + #include <map> #include <vector> -#include <Swiften/Base/boost_bsignals.h> - -#include <Swiften/Elements/SearchPayload.h> #include <string> -#include <Swiften/JID/JID.h> + +#include <Swift/Controllers/Contact.h> +#include <Swiften/Base/boost_bsignals.h> #include <Swiften/Elements/DiscoInfo.h> @@ -19,4 +19,6 @@ #include <Swiften/Elements/ErrorPayload.h> -#include <Swiften/Elements/VCard.h> #include <Swiften/Elements/Presence.h> +#include <Swiften/Elements/SearchPayload.h> +#include <Swiften/Elements/VCard.h> +#include <Swiften/JID/JID.h> @@ -34,3 +36,2 @@ namespace Swift { class PresenceOracle; - class Contact; @@ -70,3 +71,3 @@ namespace Swift { void handleJIDAddRequested(const std::vector<JID>& jids); - Contact convertJIDtoContact(const JID& jid); + Contact::ref convertJIDtoContact(const JID& jid); void endDiscoWalker(); diff --git a/Swift/Controllers/Contact.h b/Swift/Controllers/Contact.h index 039cd23..ceba152 100644 --- a/Swift/Controllers/Contact.h +++ b/Swift/Controllers/Contact.h @@ -6,4 +6,11 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + #pragma once +#include <boost/enable_shared_from_this.hpp> #include <boost/filesystem/path.hpp> @@ -15,4 +22,6 @@ namespace Swift { -class Contact { +class Contact : public boost::enable_shared_from_this<Contact> { public: + typedef boost::shared_ptr<Contact> ref; + Contact(); diff --git a/Swift/Controllers/ContactProvider.h b/Swift/Controllers/ContactProvider.h index 9ce371f..0e56de5 100644 --- a/Swift/Controllers/ContactProvider.h +++ b/Swift/Controllers/ContactProvider.h @@ -6,2 +6,8 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + #pragma once @@ -17,3 +23,3 @@ class ContactProvider { virtual ~ContactProvider(); - virtual std::vector<Contact> getContacts() = 0; + virtual std::vector<Contact::ref> getContacts() = 0; }; diff --git a/Swift/Controllers/ContactSuggester.cpp b/Swift/Controllers/ContactSuggester.cpp index f1104b0..41e0261 100644 --- a/Swift/Controllers/ContactSuggester.cpp +++ b/Swift/Controllers/ContactSuggester.cpp @@ -6,2 +6,8 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + #include <Swift/Controllers/ContactSuggester.h> @@ -36,8 +42,8 @@ void ContactSuggester::addContactProvider(ContactProvider* provider) { -bool ContactSuggester::matchContact(const std::string& search, const Contact& c) { - return fuzzyMatch(c.name, search) || fuzzyMatch(c.jid.toString(), search); +bool ContactSuggester::matchContact(const std::string& search, const Contact::ref& c) { + return fuzzyMatch(c->name, search) || fuzzyMatch(c->jid.toString(), search); } -std::vector<Contact> ContactSuggester::getSuggestions(const std::string& search) const { - std::vector<Contact> results; +std::vector<Contact::ref> ContactSuggester::getSuggestions(const std::string& search) const { + std::vector<Contact::ref> results; @@ -47,10 +53,7 @@ std::vector<Contact> ContactSuggester::getSuggestions(const std::string& search) - std::sort(results.begin(), results.end(), - lambda::bind(&Contact::jid, lambda::_1) < lambda::bind(&Contact::jid, lambda::_2)); - results.erase(std::unique(results.begin(), results.end(), - lambda::bind(&Contact::jid, lambda::_1) == lambda::bind(&Contact::jid, lambda::_2)), - results.end()); + std::sort(results.begin(), results.end(), ContactSuggester::contactLexicographicalSortPredicate); + results.erase(std::unique(results.begin(), results.end(), ContactSuggester::contactEqualityPredicate), results.end()); results.erase(std::remove_if(results.begin(), results.end(), !lambda::bind(&ContactSuggester::matchContact, search, lambda::_1)), results.end()); - std::sort(results.begin(), results.end(), ContactSuggester::chatSortPredicate); + std::sort(results.begin(), results.end(), ContactSuggester::contactSmartSortPredicate); @@ -71,7 +74,15 @@ bool ContactSuggester::fuzzyMatch(std::string text, std::string match) { -bool ContactSuggester::chatSortPredicate(const Contact& a, const Contact& b) { - if (a.statusType == b.statusType) { - return a.name.compare(b.name) < 0; +bool ContactSuggester::contactLexicographicalSortPredicate(const Contact::ref& a, const Contact::ref& b) { + return a->jid < b->jid; +} + +bool ContactSuggester::contactEqualityPredicate(const Contact::ref& a, const Contact::ref& b) { + return a->jid == b->jid; +} + +bool ContactSuggester::contactSmartSortPredicate(const Contact::ref& a, const Contact::ref& b) { + if (a->statusType == b->statusType) { + return a->name.compare(b->name) < 0; } else { - return a.statusType < b.statusType; + return a->statusType < b->statusType; } diff --git a/Swift/Controllers/ContactSuggester.h b/Swift/Controllers/ContactSuggester.h index 137e5d3..67b912c 100644 --- a/Swift/Controllers/ContactSuggester.h +++ b/Swift/Controllers/ContactSuggester.h @@ -6,2 +6,8 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + #pragma once @@ -23,5 +29,5 @@ namespace Swift { - std::vector<Contact> getSuggestions(const std::string& search) const; + std::vector<Contact::ref> getSuggestions(const std::string& search) const; private: - static bool matchContact(const std::string& search, const Contact& c); + static bool matchContact(const std::string& search, const Contact::ref& c); /** @@ -30,3 +36,5 @@ namespace Swift { static bool fuzzyMatch(std::string text, std::string match); - static bool chatSortPredicate(const Contact& a, const Contact& b); + static bool contactLexicographicalSortPredicate(const Contact::ref& a, const Contact::ref& b); + static bool contactEqualityPredicate(const Contact::ref& a, const Contact::ref& b); + static bool contactSmartSortPredicate(const Contact::ref& a, const Contact::ref& b); diff --git a/Swift/Controllers/ContactsFromXMPPRoster.cpp b/Swift/Controllers/ContactsFromXMPPRoster.cpp index 15a7767..7559962 100644 --- a/Swift/Controllers/ContactsFromXMPPRoster.cpp +++ b/Swift/Controllers/ContactsFromXMPPRoster.cpp @@ -6,2 +6,8 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + #include <Swift/Controllers/ContactsFromXMPPRoster.h> @@ -23,9 +29,9 @@ ContactsFromXMPPRoster::~ContactsFromXMPPRoster() { -std::vector<Contact> ContactsFromXMPPRoster::getContacts() { - std::vector<Contact> results; +std::vector<Contact::ref> ContactsFromXMPPRoster::getContacts() { + std::vector<Contact::ref> results; std::vector<XMPPRosterItem> rosterItems = roster_->getItems(); foreach(const XMPPRosterItem& rosterItem, rosterItems) { - Contact contact(rosterItem.getName().empty() ? rosterItem.getJID().toString() : rosterItem.getName(), rosterItem.getJID(), StatusShow::None,""); - contact.statusType = presenceOracle_->getHighestPriorityPresence(contact.jid) ? presenceOracle_->getHighestPriorityPresence(contact.jid)->getShow() : StatusShow::None; - contact.avatarPath = avatarManager_->getAvatarPath(contact.jid); + Contact::ref contact = boost::make_shared<Contact>(rosterItem.getName().empty() ? rosterItem.getJID().toString() : rosterItem.getName(), rosterItem.getJID(), StatusShow::None,""); + contact->statusType = presenceOracle_->getHighestPriorityPresence(contact->jid) ? presenceOracle_->getHighestPriorityPresence(contact->jid)->getShow() : StatusShow::None; + contact->avatarPath = avatarManager_->getAvatarPath(contact->jid); results.push_back(contact); diff --git a/Swift/Controllers/ContactsFromXMPPRoster.h b/Swift/Controllers/ContactsFromXMPPRoster.h index 3815a99..4adc606 100644 --- a/Swift/Controllers/ContactsFromXMPPRoster.h +++ b/Swift/Controllers/ContactsFromXMPPRoster.h @@ -6,2 +6,8 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + #pragma once @@ -21,3 +27,3 @@ class ContactsFromXMPPRoster : public ContactProvider { - virtual std::vector<Contact> getContacts(); + virtual std::vector<Contact::ref> getContacts(); private: diff --git a/Swift/Controllers/UIInterfaces/UserSearchWindow.h b/Swift/Controllers/UIInterfaces/UserSearchWindow.h index 0245f34..56992cc 100644 --- a/Swift/Controllers/UIInterfaces/UserSearchWindow.h +++ b/Swift/Controllers/UIInterfaces/UserSearchWindow.h @@ -34,3 +34,3 @@ namespace Swift { virtual void prepopulateJIDAndName(const JID& jid, const std::string& name) = 0; - virtual void setContactSuggestions(const std::vector<Contact>& suggestions) = 0; + virtual void setContactSuggestions(const std::vector<Contact::ref>& suggestions) = 0; virtual void setJIDs(const std::vector<JID>&) = 0; @@ -40,4 +40,4 @@ namespace Swift { virtual void setCanStartImpromptuChats(bool supportsImpromptu) = 0; - virtual void updateContacts(const std::vector<Contact>& contacts) = 0; - virtual void addContacts(const std::vector<Contact>& contacts) = 0; + virtual void updateContacts(const std::vector<Contact::ref>& contacts) = 0; + virtual void addContacts(const std::vector<Contact::ref>& contacts) = 0; diff --git a/Swift/QtUI/UserSearch/ContactListDelegate.cpp b/Swift/QtUI/UserSearch/ContactListDelegate.cpp index 29cab83..56c479b 100644 --- a/Swift/QtUI/UserSearch/ContactListDelegate.cpp +++ b/Swift/QtUI/UserSearch/ContactListDelegate.cpp @@ -6,2 +6,8 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + #include <Swift/QtUI/UserSearch/ContactListDelegate.h> @@ -23,3 +29,3 @@ void ContactListDelegate::paint(QPainter* painter, const QStyleOptionViewItem& o } - const Contact* contact = static_cast<Contact*>(index.internalPointer()); + const Contact::ref contact = static_cast<Contact*>(index.internalPointer())->shared_from_this(); QColor nameColor = index.data(Qt::TextColorRole).value<QColor>(); diff --git a/Swift/QtUI/UserSearch/ContactListModel.cpp b/Swift/QtUI/UserSearch/ContactListModel.cpp index 907142f..ef6383c 100644 --- a/Swift/QtUI/UserSearch/ContactListModel.cpp +++ b/Swift/QtUI/UserSearch/ContactListModel.cpp @@ -54,3 +54,3 @@ ContactListModel::ContactListModel(bool editable) : QAbstractItemModel(), editab -void ContactListModel::setList(const std::vector<Contact>& list) { +void ContactListModel::setList(const std::vector<Contact::ref>& list) { emit layoutAboutToBeChanged(); @@ -60,3 +60,3 @@ void ContactListModel::setList(const std::vector<Contact>& list) { -const std::vector<Contact>& ContactListModel::getList() const { +const std::vector<Contact::ref>& ContactListModel::getList() const { return contacts_; @@ -64,2 +64,6 @@ const std::vector<Contact>& ContactListModel::getList() const { +Contact::ref ContactListModel::getContact(const size_t i) const { + return contacts_[i]; +} + Qt::ItemFlags ContactListModel::flags(const QModelIndex& index) const { @@ -80,5 +84,5 @@ QVariant ContactListModel::data(const QModelIndex& index, int role) const { if (boost::numeric_cast<size_t>(index.row()) < contacts_.size()) { - const Contact& contact = contacts_[index.row()]; + const Contact::ref& contact = contacts_[index.row()]; if (role == Qt::EditRole) { - return P2QSTRING(contact.jid.toString()); + return P2QSTRING(contact->jid.toString()); } @@ -95,3 +99,3 @@ QModelIndex ContactListModel::index(int row, int column, const QModelIndex& pare - return boost::numeric_cast<size_t>(row) < contacts_.size() ? createIndex(row, column, (void*)&(contacts_[row])) : QModelIndex(); + return boost::numeric_cast<size_t>(row) < contacts_.size() ? createIndex(row, column, contacts_[row].get()) : QModelIndex(); } @@ -120,7 +124,7 @@ bool ContactListModel::removeRows(int row, int /*count*/, const QModelIndex& /*p -QVariant ContactListModel::dataForContact(const Contact& contact, int role) const { +QVariant ContactListModel::dataForContact(const Contact::ref& contact, int role) const { switch (role) { - case Qt::DisplayRole: return P2QSTRING(contact.name); - case DetailTextRole: return P2QSTRING(contact.jid.toString()); - case AvatarRole: return QVariant(P2QSTRING(pathToString(contact.avatarPath))); + case Qt::DisplayRole: return P2QSTRING(contact->name); + case DetailTextRole: return P2QSTRING(contact->jid.toString()); + case AvatarRole: return QVariant(P2QSTRING(pathToString(contact->avatarPath))); case PresenceIconRole: return getPresenceIconForContact(contact); @@ -130,4 +134,4 @@ QVariant ContactListModel::dataForContact(const Contact& contact, int role) cons -QIcon ContactListModel::getPresenceIconForContact(const Contact& contact) const { - return QIcon(statusShowTypeToIconPath(contact.statusType)); +QIcon ContactListModel::getPresenceIconForContact(const Contact::ref& contact) const { + return QIcon(statusShowTypeToIconPath(contact->statusType)); } diff --git a/Swift/QtUI/UserSearch/ContactListModel.h b/Swift/QtUI/UserSearch/ContactListModel.h index 6ca505e..e582ac4 100644 --- a/Swift/QtUI/UserSearch/ContactListModel.h +++ b/Swift/QtUI/UserSearch/ContactListModel.h @@ -38,4 +38,5 @@ namespace Swift { - void setList(const std::vector<Contact>& list); - const std::vector<Contact>& getList() const; + void setList(const std::vector<Contact::ref>& list); + const std::vector<Contact::ref>& getList() const; + Contact::ref getContact(const size_t i) const; @@ -50,7 +51,7 @@ namespace Swift { private: - QVariant dataForContact(const Contact& contact, int role) const; - QIcon getPresenceIconForContact(const Contact& contact) const; + QVariant dataForContact(const Contact::ref& contact, int role) const; + QIcon getPresenceIconForContact(const Contact::ref& contact) const; signals: - void onListChanged(std::vector<Contact> list); + void onListChanged(std::vector<Contact::ref> list); void onJIDsDropped(const std::vector<JID>& contact); @@ -59,3 +60,3 @@ namespace Swift { bool editable_; - std::vector<Contact> contacts_; + std::vector<Contact::ref> contacts_; }; diff --git a/Swift/QtUI/UserSearch/QtContactListWidget.cpp b/Swift/QtUI/UserSearch/QtContactListWidget.cpp index 6ad1169..4adc929 100644 --- a/Swift/QtUI/UserSearch/QtContactListWidget.cpp +++ b/Swift/QtUI/UserSearch/QtContactListWidget.cpp @@ -28,3 +28,3 @@ QtContactListWidget::QtContactListWidget(QWidget* parent, SettingsProvider* sett - connect(contactListModel_, SIGNAL(onListChanged(std::vector<Contact>)), this, SIGNAL(onListChanged(std::vector<Contact>))); + connect(contactListModel_, SIGNAL(onListChanged(std::vector<Contact::ref>)), this, SIGNAL(onListChanged(std::vector<Contact::ref>))); connect(contactListModel_, SIGNAL(onJIDsDropped(std::vector<JID>)), this, SIGNAL(onJIDsAdded(std::vector<JID>))); @@ -63,3 +63,3 @@ QtContactListWidget::~QtContactListWidget() { -void QtContactListWidget::setList(const std::vector<Contact>& list) { +void QtContactListWidget::setList(const std::vector<Contact::ref>& list) { contactListModel_->setList(list); @@ -67,3 +67,3 @@ void QtContactListWidget::setList(const std::vector<Contact>& list) { -std::vector<Contact> QtContactListWidget::getList() const { +std::vector<Contact::ref> QtContactListWidget::getList() const { return contactListModel_->getList(); @@ -71,2 +71,6 @@ std::vector<Contact> QtContactListWidget::getList() const { +Contact::ref QtContactListWidget::getContact(const size_t i) { + return contactListModel_->getContact(i); +} + void QtContactListWidget::setMaximumNoOfContactsToOne(bool limited) { @@ -75,7 +79,7 @@ void QtContactListWidget::setMaximumNoOfContactsToOne(bool limited) { -void QtContactListWidget::updateContacts(const std::vector<Contact>& contactUpdates) { - std::vector<Contact> contacts = contactListModel_->getList(); - foreach(const Contact& contactUpdate, contactUpdates) { +void QtContactListWidget::updateContacts(const std::vector<Contact::ref>& contactUpdates) { + std::vector<Contact::ref> contacts = contactListModel_->getList(); + foreach(const Contact::ref& contactUpdate, contactUpdates) { for(size_t n = 0; n < contacts.size(); n++) { - if (contactUpdate.jid == contacts[n].jid) { + if (contactUpdate->jid == contacts[n]->jid) { contacts[n] = contactUpdate; diff --git a/Swift/QtUI/UserSearch/QtContactListWidget.h b/Swift/QtUI/UserSearch/QtContactListWidget.h index a83b47a..601d320 100644 --- a/Swift/QtUI/UserSearch/QtContactListWidget.h +++ b/Swift/QtUI/UserSearch/QtContactListWidget.h @@ -38,4 +38,5 @@ public: - void setList(const std::vector<Contact>& list); - std::vector<Contact> getList() const; + void setList(const std::vector<Contact::ref>& list); + std::vector<Contact::ref> getList() const; + Contact::ref getContact(const size_t i); void setMaximumNoOfContactsToOne(bool limited); @@ -43,6 +44,6 @@ public: public slots: - void updateContacts(const std::vector<Contact>& contactUpdates); + void updateContacts(const std::vector<Contact::ref>& contactUpdates); signals: - void onListChanged(std::vector<Contact> list); + void onListChanged(std::vector<Contact::ref> list); void onJIDsAdded(const std::vector<JID>& jids); diff --git a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp index de935d9..a4a4610 100644 --- a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp +++ b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp @@ -6,2 +6,8 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + #include <Swift/QtUI/UserSearch/QtSuggestingJIDInput.h> @@ -25,3 +31,3 @@ namespace Swift { -QtSuggestingJIDInput::QtSuggestingJIDInput(QWidget* parent, SettingsProvider* settings) : QLineEdit(parent), settings_(settings), currentContact_(NULL) { +QtSuggestingJIDInput::QtSuggestingJIDInput(QWidget* parent, SettingsProvider* settings) : QLineEdit(parent), settings_(settings) { treeViewPopup_ = new QTreeView(); @@ -59,19 +65,20 @@ QtSuggestingJIDInput::~QtSuggestingJIDInput() { -const Contact* QtSuggestingJIDInput::getContact() { - if (currentContact_ != NULL) { +Contact::ref QtSuggestingJIDInput::getContact() { + if (!!currentContact_) { return currentContact_; - } else { - if (!text().isEmpty()) { - JID jid(Q2PSTRING(text())); - if (jid.isValid()) { - manualContact_.name = jid.toString(); - manualContact_.jid = jid; - return &manualContact_; - } + } + + if (!text().isEmpty()) { + JID jid(Q2PSTRING(text())); + if (jid.isValid()) { + Contact::ref manualContact = boost::make_shared<Contact>(); + manualContact->name = jid.toString(); + manualContact->jid = jid; + return manualContact; } - return NULL; } + return boost::shared_ptr<Contact>(); } -void QtSuggestingJIDInput::setSuggestions(const std::vector<Contact>& suggestions) { +void QtSuggestingJIDInput::setSuggestions(const std::vector<Contact::ref>& suggestions) { contactListModel_->setList(suggestions); @@ -82,3 +89,3 @@ void QtSuggestingJIDInput::setSuggestions(const std::vector<Contact>& suggestion } else { - currentContact_ = NULL; + currentContact_.reset(); } @@ -102,3 +109,3 @@ void QtSuggestingJIDInput::keyPressEvent(QKeyEvent* event) { if (!contactListModel_->getList().empty() && index.isValid()) { - currentContact_ = &contactListModel_->getList()[index.row()]; + currentContact_ = contactListModel_->getContact(index.row()); setText(P2QSTRING(currentContact_->jid.toString())); @@ -107,3 +114,3 @@ void QtSuggestingJIDInput::keyPressEvent(QKeyEvent* event) { } else { - currentContact_ = NULL; + currentContact_.reset(); } @@ -132,3 +139,3 @@ void QtSuggestingJIDInput::handleClicked(const QModelIndex& index) { if (index.isValid()) { - currentContact_ = &contactListModel_->getList()[index.row()]; + currentContact_ = contactListModel_->getContact(index.row()); setText(""); diff --git a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h index 9ec0512..25e7d42 100644 --- a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h +++ b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h @@ -6,2 +6,8 @@ +/* + * Copyright (c) 2014 Kevin Smith and Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + #pragma once @@ -25,5 +31,5 @@ class QtSuggestingJIDInput : public QLineEdit { - const Contact* getContact(); + Contact::ref getContact(); - void setSuggestions(const std::vector<Contact>& suggestions); + void setSuggestions(const std::vector<Contact::ref>& suggestions); @@ -54,4 +60,3 @@ class QtSuggestingJIDInput : public QLineEdit { ContactListDelegate* contactListDelegate_; - Contact manualContact_; - const Contact* currentContact_; + Contact::ref currentContact_; }; diff --git a/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp b/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp index 47d62d9..597c88b 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp +++ b/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp @@ -49,3 +49,3 @@ QtUserSearchFirstMultiJIDPage::QtUserSearchFirstMultiJIDPage(UserSearchWindow::T - connect(contactList_, SIGNAL(onListChanged(std::vector<Contact>)), this, SLOT(emitCompletenessCheck())); + connect(contactList_, SIGNAL(onListChanged(std::vector<Contact::ref>)), this, SLOT(emitCompletenessCheck())); connect(jid_, SIGNAL(editingDone()), this, SLOT(handleEditingDone())); diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp index ed0fae2..c154c8f 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp +++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp @@ -132,3 +132,3 @@ void QtUserSearchWindow::handleAccepted() { if (contactVector_.size() == 1) { - boost::shared_ptr<UIEvent> event(new RequestChatUIEvent(contactVector_[0].jid)); + boost::shared_ptr<UIEvent> event(new RequestChatUIEvent(contactVector_[0]->jid)); eventStream_->send(event); @@ -137,4 +137,4 @@ void QtUserSearchWindow::handleAccepted() { - foreach(const Contact& contact, contactVector_) { - jids.push_back(contact.jid); + foreach(Contact::ref contact, contactVector_) { + jids.push_back(contact->jid); } @@ -144,4 +144,4 @@ void QtUserSearchWindow::handleAccepted() { case InviteToChat: - foreach(const Contact& contact, contactVector_) { - jids.push_back(contact.jid); + foreach(Contact::ref contact, contactVector_) { + jids.push_back(contact->jid); } @@ -158,5 +158,4 @@ void QtUserSearchWindow::handleContactSuggestionRequested(const QString& text) { void QtUserSearchWindow::addContact() { - if (firstMultiJIDPage_->jid_->getContact() != 0) { - Contact contact = *(firstMultiJIDPage_->jid_->getContact()); - contactVector_.push_back(contact); + if (!!firstMultiJIDPage_->jid_->getContact()) { + contactVector_.push_back(firstMultiJIDPage_->jid_->getContact()); } @@ -273,3 +272,3 @@ JID QtUserSearchWindow::getContactJID() const { void QtUserSearchWindow::addSearchedJIDToList(const JID& jid) { - Contact contact(jid, jid.toString(), StatusShow::None, ""); + Contact::ref contact = boost::make_shared<Contact>(jid, jid.toString(), StatusShow::None, ""); contactVector_.push_back(contact); @@ -338,3 +337,3 @@ void QtUserSearchWindow::prepopulateJIDAndName(const JID& jid, const std::string -void QtUserSearchWindow::setContactSuggestions(const std::vector<Contact>& suggestions) { +void QtUserSearchWindow::setContactSuggestions(const std::vector<Contact::ref>& suggestions) { if (type_ == AddContact) { @@ -363,4 +362,4 @@ std::vector<JID> QtUserSearchWindow::getJIDs() const { std::vector<JID> jids; - foreach (const Contact& contact, contactVector_) { - jids.push_back(contact.jid); + foreach (Contact::ref contact, contactVector_) { + jids.push_back(contact->jid); } @@ -376,3 +375,3 @@ void QtUserSearchWindow::setCanStartImpromptuChats(bool supportsImpromptu) { -void QtUserSearchWindow::updateContacts(const std::vector<Contact>& contacts) { +void QtUserSearchWindow::updateContacts(const std::vector<Contact::ref>& contacts) { if (type_ != AddContact) { @@ -382,9 +381,9 @@ void QtUserSearchWindow::updateContacts(const std::vector<Contact>& contacts) { -void QtUserSearchWindow::addContacts(const std::vector<Contact>& contacts) { +void QtUserSearchWindow::addContacts(const std::vector<Contact::ref>& contacts) { if (type_ != AddContact) { /* prevent duplicate JIDs from appearing in the contact list */ - foreach (const Contact& newContact, contacts) { + foreach (Contact::ref newContact, contacts) { bool found = false; - foreach (const Contact& oldContact, contactVector_) { - if (newContact.jid == oldContact.jid) { + foreach (Contact::ref oldContact, contactVector_) { + if (newContact->jid == oldContact->jid) { found = true; @@ -407,3 +406,3 @@ void QtUserSearchWindow::handleAddViaSearch() { -void QtUserSearchWindow::handleListChanged(std::vector<Contact> list) { +void QtUserSearchWindow::handleListChanged(std::vector<Contact::ref> list) { contactVector_ = list; @@ -472,3 +471,3 @@ void QtUserSearchWindow::setFirstPage(QString title) { connect(firstMultiJIDPage_->addViaSearchButton_, SIGNAL(clicked()), this, SLOT(handleAddViaSearch())); - connect(firstMultiJIDPage_->contactList_, SIGNAL(onListChanged(std::vector<Contact>)), this, SLOT(handleListChanged(std::vector<Contact>))); + connect(firstMultiJIDPage_->contactList_, SIGNAL(onListChanged(std::vector<Contact::ref>)), this, SLOT(handleListChanged(std::vector<Contact::ref>))); connect(firstMultiJIDPage_->contactList_, SIGNAL(onJIDsAdded(std::vector<JID>)), this, SLOT(handleJIDsAdded(std::vector<JID>))); diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.h b/Swift/QtUI/UserSearch/QtUserSearchWindow.h index 941e455..bb89e51 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchWindow.h +++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.h @@ -45,3 +45,3 @@ namespace Swift { virtual void prepopulateJIDAndName(const JID& jid, const std::string& name); - virtual void setContactSuggestions(const std::vector<Contact>& suggestions); + virtual void setContactSuggestions(const std::vector<Contact::ref>& suggestions); virtual void setJIDs(const std::vector<JID> &jids); @@ -51,4 +51,4 @@ namespace Swift { virtual void setCanStartImpromptuChats(bool supportsImpromptu); - virtual void updateContacts(const std::vector<Contact> &contacts); - virtual void addContacts(const std::vector<Contact>& contacts); + virtual void updateContacts(const std::vector<Contact::ref> &contacts); + virtual void addContacts(const std::vector<Contact::ref>& contacts); @@ -64,3 +64,3 @@ namespace Swift { void handleAddViaSearch(); - void handleListChanged(std::vector<Contact> list); + void handleListChanged(std::vector<Contact::ref> list); void handleJIDsAdded(std::vector<JID> jids); @@ -93,3 +93,3 @@ namespace Swift { int lastPage_; - std::vector<Contact> contactVector_; + std::vector<Contact::ref> contactVector_; SettingsProvider* settings_; |
Swift