diff options
Diffstat (limited to 'Swift/QtUI/UserSearch')
24 files changed, 1201 insertions, 1201 deletions
diff --git a/Swift/QtUI/UserSearch/ContactListDelegate.cpp b/Swift/QtUI/UserSearch/ContactListDelegate.cpp index 989743e..75e25a1 100644 --- a/Swift/QtUI/UserSearch/ContactListDelegate.cpp +++ b/Swift/QtUI/UserSearch/ContactListDelegate.cpp @@ -26,29 +26,29 @@ ContactListDelegate::~ContactListDelegate() { } void ContactListDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { - if (!index.isValid()) { - return; - } - const Contact::ref contact = static_cast<Contact*>(index.internalPointer())->shared_from_this(); - QColor nameColor = index.data(Qt::TextColorRole).value<QColor>(); - QString avatarPath = index.data(ContactListModel::AvatarRole).value<QString>(); - QIcon presenceIcon =index.data(ChatListRecentItem::PresenceIconRole).isValid() && !index.data(ChatListRecentItem::PresenceIconRole).value<QIcon>().isNull() - ? index.data(ChatListRecentItem::PresenceIconRole).value<QIcon>() - : QIcon(":/icons/offline.png"); - QString name = P2QSTRING(contact->name); - QString statusText = P2QSTRING(contact->jid.toString()); - common_.paintContact(painter, option, nameColor, avatarPath, presenceIcon, name, statusText, false, 0, compact_); + if (!index.isValid()) { + return; + } + const Contact::ref contact = static_cast<Contact*>(index.internalPointer())->shared_from_this(); + QColor nameColor = index.data(Qt::TextColorRole).value<QColor>(); + QString avatarPath = index.data(ContactListModel::AvatarRole).value<QString>(); + QIcon presenceIcon =index.data(ChatListRecentItem::PresenceIconRole).isValid() && !index.data(ChatListRecentItem::PresenceIconRole).value<QIcon>().isNull() + ? index.data(ChatListRecentItem::PresenceIconRole).value<QIcon>() + : QIcon(":/icons/offline.png"); + QString name = P2QSTRING(contact->name); + QString statusText = P2QSTRING(contact->jid.toString()); + common_.paintContact(painter, option, nameColor, avatarPath, presenceIcon, name, statusText, false, 0, compact_); } QSize ContactListDelegate::sizeHint(const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/ ) const { - QFontMetrics nameMetrics(common_.nameFont); - QFontMetrics statusMetrics(common_.detailFont); - int sizeByText = 2 * common_.verticalMargin + nameMetrics.height() + statusMetrics.height(); - return QSize(150, sizeByText); + QFontMetrics nameMetrics(common_.nameFont); + QFontMetrics statusMetrics(common_.detailFont); + int sizeByText = 2 * common_.verticalMargin + nameMetrics.height() + statusMetrics.height(); + return QSize(150, sizeByText); } void ContactListDelegate::setCompact(bool compact) { - compact_ = compact; + compact_ = compact; } } diff --git a/Swift/QtUI/UserSearch/ContactListDelegate.h b/Swift/QtUI/UserSearch/ContactListDelegate.h index 7680aba..208246a 100644 --- a/Swift/QtUI/UserSearch/ContactListDelegate.h +++ b/Swift/QtUI/UserSearch/ContactListDelegate.h @@ -13,18 +13,18 @@ namespace Swift { class ContactListDelegate : public QStyledItemDelegate { - public: - ContactListDelegate(bool compact); - virtual ~ContactListDelegate(); + public: + ContactListDelegate(bool compact); + virtual ~ContactListDelegate(); - QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; - void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; + QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; + void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; - public slots: - void setCompact(bool compact); + public slots: + void setCompact(bool compact); - private: - bool compact_; - DelegateCommons common_; + private: + bool compact_; + DelegateCommons common_; }; } diff --git a/Swift/QtUI/UserSearch/ContactListModel.cpp b/Swift/QtUI/UserSearch/ContactListModel.cpp index 3400924..376d3b1 100644 --- a/Swift/QtUI/UserSearch/ContactListModel.cpp +++ b/Swift/QtUI/UserSearch/ContactListModel.cpp @@ -24,116 +24,116 @@ namespace Swift { QDataStream& operator >>(QDataStream& in, StatusShow::Type& e){ - quint32 buffer; - in >> buffer; - switch(buffer) { - case StatusShow::Online: - e = StatusShow::Online; - break; - case StatusShow::Away: - e = StatusShow::Away; - break; - case StatusShow::FFC: - e = StatusShow::FFC; - break; - case StatusShow::XA: - e = StatusShow::XA; - break; - case StatusShow::DND: - e = StatusShow::DND; - break; - default: - e = StatusShow::None; - break; - } - return in; + quint32 buffer; + in >> buffer; + switch(buffer) { + case StatusShow::Online: + e = StatusShow::Online; + break; + case StatusShow::Away: + e = StatusShow::Away; + break; + case StatusShow::FFC: + e = StatusShow::FFC; + break; + case StatusShow::XA: + e = StatusShow::XA; + break; + case StatusShow::DND: + e = StatusShow::DND; + break; + default: + e = StatusShow::None; + break; + } + return in; } ContactListModel::ContactListModel(bool editable) : QAbstractItemModel(), editable_(editable) { } void ContactListModel::setList(const std::vector<Contact::ref>& list) { - emit layoutAboutToBeChanged(); - contacts_ = list; - emit layoutChanged(); + emit layoutAboutToBeChanged(); + contacts_ = list; + emit layoutChanged(); } const std::vector<Contact::ref>& ContactListModel::getList() const { - return contacts_; + return contacts_; } Contact::ref ContactListModel::getContact(const size_t i) const { - return contacts_[i]; + return contacts_[i]; } Qt::ItemFlags ContactListModel::flags(const QModelIndex& index) const { - Qt::ItemFlags flags = QAbstractItemModel::flags(index); - if (index.isValid()) { - flags = flags & ~Qt::ItemIsDropEnabled; - } else { - flags = Qt::ItemIsDropEnabled | flags; - } - return flags; + Qt::ItemFlags flags = QAbstractItemModel::flags(index); + if (index.isValid()) { + flags = flags & ~Qt::ItemIsDropEnabled; + } else { + flags = Qt::ItemIsDropEnabled | flags; + } + return flags; } int ContactListModel::columnCount(const QModelIndex&) const { - return editable_ ? 2 : 1; + return editable_ ? 2 : 1; } QVariant ContactListModel::data(const QModelIndex& index, int role) const { - if ((boost::numeric_cast<size_t>(index.row()) < contacts_.size()) && (index.column() == 0)) { - const Contact::ref& contact = contacts_[index.row()]; - if (role == Qt::EditRole) { - return P2QSTRING(contact->jid.toString()); - } - return dataForContact(contact, role); - } else { - return QVariant(); - } + if ((boost::numeric_cast<size_t>(index.row()) < contacts_.size()) && (index.column() == 0)) { + const Contact::ref& contact = contacts_[index.row()]; + if (role == Qt::EditRole) { + return P2QSTRING(contact->jid.toString()); + } + return dataForContact(contact, role); + } else { + return QVariant(); + } } QModelIndex ContactListModel::index(int row, int column, const QModelIndex& parent) const { - if (!hasIndex(row, column, parent)) { - return QModelIndex(); - } + if (!hasIndex(row, column, parent)) { + return QModelIndex(); + } - return boost::numeric_cast<size_t>(row) < contacts_.size() ? createIndex(row, column, contacts_[row].get()) : QModelIndex(); + return boost::numeric_cast<size_t>(row) < contacts_.size() ? createIndex(row, column, contacts_[row].get()) : QModelIndex(); } QModelIndex ContactListModel::parent(const QModelIndex& index) const { - if (!index.isValid()) { - return QModelIndex(); - } - return QModelIndex(); + if (!index.isValid()) { + return QModelIndex(); + } + return QModelIndex(); } int ContactListModel::rowCount(const QModelIndex& /*parent*/) const { - return contacts_.size(); + return contacts_.size(); } bool ContactListModel::removeRows(int row, int /*count*/, const QModelIndex& /*parent*/) { - if (boost::numeric_cast<size_t>(row) < contacts_.size()) { - emit layoutAboutToBeChanged(); - contacts_.erase(contacts_.begin() + row); - emit layoutChanged(); - onListChanged(getList()); - return true; - } - return false; + if (boost::numeric_cast<size_t>(row) < contacts_.size()) { + emit layoutAboutToBeChanged(); + contacts_.erase(contacts_.begin() + row); + emit layoutChanged(); + onListChanged(getList()); + return true; + } + return false; } 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 PresenceIconRole: return getPresenceIconForContact(contact); - default: return QVariant(); - } + 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 PresenceIconRole: return getPresenceIconForContact(contact); + default: return QVariant(); + } } QIcon ContactListModel::getPresenceIconForContact(const Contact::ref& contact) const { - return QIcon(statusShowTypeToIconPath(contact->statusType)); + return QIcon(statusShowTypeToIconPath(contact->statusType)); } } diff --git a/Swift/QtUI/UserSearch/ContactListModel.h b/Swift/QtUI/UserSearch/ContactListModel.h index e980120..9b61484 100644 --- a/Swift/QtUI/UserSearch/ContactListModel.h +++ b/Swift/QtUI/UserSearch/ContactListModel.h @@ -27,41 +27,41 @@ #include <Swift/QtUI/ChatList/ChatListRecentItem.h> namespace Swift { - class ContactListModel : public QAbstractItemModel { - Q_OBJECT - public: - enum ContactRoles { - DetailTextRole = Qt::UserRole, - AvatarRole = Qt::UserRole + 1, - PresenceIconRole = Qt::UserRole + 2 - }; - - public: - ContactListModel(bool editable); - - void setList(const std::vector<Contact::ref>& list); - const std::vector<Contact::ref>& getList() const; - Contact::ref getContact(const size_t i) const; - - Qt::ItemFlags flags(const QModelIndex& index) const; - int columnCount(const QModelIndex& parent = QModelIndex()) const; - QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; - QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex& index) const; - int rowCount(const QModelIndex& parent = QModelIndex()) const; - bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()); - - private: - QVariant dataForContact(const Contact::ref& contact, int role) const; - QIcon getPresenceIconForContact(const Contact::ref& contact) const; - - signals: - void onListChanged(std::vector<Contact::ref> list); - void onJIDsDropped(const std::vector<JID>& contact); - - private: - bool editable_; - std::vector<Contact::ref> contacts_; - }; + class ContactListModel : public QAbstractItemModel { + Q_OBJECT + public: + enum ContactRoles { + DetailTextRole = Qt::UserRole, + AvatarRole = Qt::UserRole + 1, + PresenceIconRole = Qt::UserRole + 2 + }; + + public: + ContactListModel(bool editable); + + void setList(const std::vector<Contact::ref>& list); + const std::vector<Contact::ref>& getList() const; + Contact::ref getContact(const size_t i) const; + + Qt::ItemFlags flags(const QModelIndex& index) const; + int columnCount(const QModelIndex& parent = QModelIndex()) const; + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex& index) const; + int rowCount(const QModelIndex& parent = QModelIndex()) const; + bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()); + + private: + QVariant dataForContact(const Contact::ref& contact, int role) const; + QIcon getPresenceIconForContact(const Contact::ref& contact) const; + + signals: + void onListChanged(std::vector<Contact::ref> list); + void onJIDsDropped(const std::vector<JID>& contact); + + private: + bool editable_; + std::vector<Contact::ref> contacts_; + }; } diff --git a/Swift/QtUI/UserSearch/QtContactListWidget.cpp b/Swift/QtUI/UserSearch/QtContactListWidget.cpp index 0d55880..99bd791 100644 --- a/Swift/QtUI/UserSearch/QtContactListWidget.cpp +++ b/Swift/QtUI/UserSearch/QtContactListWidget.cpp @@ -24,80 +24,80 @@ namespace Swift { QtContactListWidget::QtContactListWidget(QWidget* parent, SettingsProvider* settings) : QTreeView(parent), settings_(settings), limited_(false) { - contactListModel_ = new ContactListModel(true); - setModel(contactListModel_); + contactListModel_ = new ContactListModel(true); + setModel(contactListModel_); - 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>))); + 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>))); - setSelectionMode(QAbstractItemView::SingleSelection); - setSelectionBehavior(QAbstractItemView::SelectRows); - setUniformRowHeights(true); + setSelectionMode(QAbstractItemView::SingleSelection); + setSelectionBehavior(QAbstractItemView::SelectRows); + setUniformRowHeights(true); - setAlternatingRowColors(true); - setIndentation(0); - setHeaderHidden(true); - setExpandsOnDoubleClick(false); - setItemsExpandable(false); - setEditTriggers(QAbstractItemView::DoubleClicked); + setAlternatingRowColors(true); + setIndentation(0); + setHeaderHidden(true); + setExpandsOnDoubleClick(false); + setItemsExpandable(false); + setEditTriggers(QAbstractItemView::DoubleClicked); - contactListDelegate_ = new ContactListDelegate(settings->getSetting(QtUISettingConstants::COMPACT_ROSTER)); - removableItemDelegate_ = new QtRemovableItemDelegate(style()); + contactListDelegate_ = new ContactListDelegate(settings->getSetting(QtUISettingConstants::COMPACT_ROSTER)); + removableItemDelegate_ = new QtRemovableItemDelegate(style()); - setItemDelegateForColumn(0, contactListDelegate_); - setItemDelegateForColumn(1, removableItemDelegate_); + setItemDelegateForColumn(0, contactListDelegate_); + setItemDelegateForColumn(1, removableItemDelegate_); - header()->resizeSection(1, removableItemDelegate_->sizeHint(QStyleOptionViewItem(), QModelIndex()).width()); + header()->resizeSection(1, removableItemDelegate_->sizeHint(QStyleOptionViewItem(), QModelIndex()).width()); - header()->setStretchLastSection(false); + header()->setStretchLastSection(false); #if QT_VERSION >= 0x050000 - header()->setSectionResizeMode(0, QHeaderView::Stretch); + header()->setSectionResizeMode(0, QHeaderView::Stretch); #else - header()->setResizeMode(0, QHeaderView::Stretch); + header()->setResizeMode(0, QHeaderView::Stretch); #endif } QtContactListWidget::~QtContactListWidget() { - delete contactListDelegate_; - delete removableItemDelegate_; - delete contactListModel_; + delete contactListDelegate_; + delete removableItemDelegate_; + delete contactListModel_; } void QtContactListWidget::setList(const std::vector<Contact::ref>& list) { - contactListModel_->setList(list); + contactListModel_->setList(list); } std::vector<Contact::ref> QtContactListWidget::getList() const { - return contactListModel_->getList(); + return contactListModel_->getList(); } Contact::ref QtContactListWidget::getContact(const size_t i) { - return contactListModel_->getContact(i); + return contactListModel_->getContact(i); } void QtContactListWidget::setMaximumNoOfContactsToOne(bool limited) { - limited_ = limited; + limited_ = limited; } bool QtContactListWidget::isFull() const { - return limited_ && (getList().size() == 1); + return limited_ && (getList().size() == 1); } 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) { - contacts[n] = contactUpdate; - break; - } - } - } - contactListModel_->setList(contacts); + 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) { + contacts[n] = contactUpdate; + break; + } + } + } + contactListModel_->setList(contacts); } void QtContactListWidget::handleSettingsChanged(const std::string&) { - contactListDelegate_->setCompact(settings_->getSetting(QtUISettingConstants::COMPACT_ROSTER)); + contactListDelegate_->setCompact(settings_->getSetting(QtUISettingConstants::COMPACT_ROSTER)); } } diff --git a/Swift/QtUI/UserSearch/QtContactListWidget.h b/Swift/QtUI/UserSearch/QtContactListWidget.h index 59bd8f3..f2483c3 100644 --- a/Swift/QtUI/UserSearch/QtContactListWidget.h +++ b/Swift/QtUI/UserSearch/QtContactListWidget.h @@ -31,33 +31,33 @@ class SettingsProvider; class QtRemovableItemDelegate; class QtContactListWidget : public QTreeView { - Q_OBJECT + Q_OBJECT public: - QtContactListWidget(QWidget* parent, SettingsProvider* settings); - virtual ~QtContactListWidget(); + QtContactListWidget(QWidget* parent, SettingsProvider* settings); + virtual ~QtContactListWidget(); - 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); - bool isFull() 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); + bool isFull() const; public slots: - void updateContacts(const std::vector<Contact::ref>& contactUpdates); + void updateContacts(const std::vector<Contact::ref>& contactUpdates); signals: - void onListChanged(std::vector<Contact::ref> list); - void onJIDsAdded(const std::vector<JID>& jids); + void onListChanged(std::vector<Contact::ref> list); + void onJIDsAdded(const std::vector<JID>& jids); private: - void handleSettingsChanged(const std::string&); + void handleSettingsChanged(const std::string&); private: - SettingsProvider* settings_; - ContactListModel* contactListModel_; - ContactListDelegate* contactListDelegate_; - QtRemovableItemDelegate* removableItemDelegate_; - bool limited_; + SettingsProvider* settings_; + ContactListModel* contactListModel_; + ContactListDelegate* contactListDelegate_; + QtRemovableItemDelegate* removableItemDelegate_; + bool limited_; }; } diff --git a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp index 26d0f05..4e8f4e1 100644 --- a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp +++ b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.cpp @@ -31,180 +31,180 @@ namespace Swift { QtSuggestingJIDInput::QtSuggestingJIDInput(QWidget* parent, SettingsProvider* settings) : QLineEdit(parent), settings_(settings) { - treeViewPopup_ = new QTreeView(); - treeViewPopup_->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); - //treeViewPopup_->setAttribute(Qt::WA_ShowWithoutActivating); - treeViewPopup_->setAlternatingRowColors(true); - treeViewPopup_->setIndentation(0); - treeViewPopup_->setHeaderHidden(true); - treeViewPopup_->setExpandsOnDoubleClick(false); - treeViewPopup_->setItemsExpandable(false); - treeViewPopup_->setSelectionMode(QAbstractItemView::SingleSelection); - treeViewPopup_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); - treeViewPopup_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - QSizePolicy policy(treeViewPopup_->sizePolicy()); - policy.setVerticalPolicy(QSizePolicy::Expanding); - treeViewPopup_->setSizePolicy(policy); - treeViewPopup_->hide(); - treeViewPopup_->setFocusProxy(this); - connect(treeViewPopup_, SIGNAL(clicked(QModelIndex)), this, SLOT(handleClicked(QModelIndex))); - connect(treeViewPopup_, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(handleClicked(QModelIndex))); - - contactListModel_ = new ContactListModel(false); - treeViewPopup_->setModel(contactListModel_); - - contactListDelegate_ = new ContactListDelegate(settings->getSetting(QtUISettingConstants::COMPACT_ROSTER)); - treeViewPopup_->setItemDelegate(contactListDelegate_); - - settings_->onSettingChanged.connect(boost::bind(&QtSuggestingJIDInput::handleSettingsChanged, this, _1)); + treeViewPopup_ = new QTreeView(); + treeViewPopup_->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); + //treeViewPopup_->setAttribute(Qt::WA_ShowWithoutActivating); + treeViewPopup_->setAlternatingRowColors(true); + treeViewPopup_->setIndentation(0); + treeViewPopup_->setHeaderHidden(true); + treeViewPopup_->setExpandsOnDoubleClick(false); + treeViewPopup_->setItemsExpandable(false); + treeViewPopup_->setSelectionMode(QAbstractItemView::SingleSelection); + treeViewPopup_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + treeViewPopup_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + QSizePolicy policy(treeViewPopup_->sizePolicy()); + policy.setVerticalPolicy(QSizePolicy::Expanding); + treeViewPopup_->setSizePolicy(policy); + treeViewPopup_->hide(); + treeViewPopup_->setFocusProxy(this); + connect(treeViewPopup_, SIGNAL(clicked(QModelIndex)), this, SLOT(handleClicked(QModelIndex))); + connect(treeViewPopup_, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(handleClicked(QModelIndex))); + + contactListModel_ = new ContactListModel(false); + treeViewPopup_->setModel(contactListModel_); + + contactListDelegate_ = new ContactListDelegate(settings->getSetting(QtUISettingConstants::COMPACT_ROSTER)); + treeViewPopup_->setItemDelegate(contactListDelegate_); + + settings_->onSettingChanged.connect(boost::bind(&QtSuggestingJIDInput::handleSettingsChanged, this, _1)); } QtSuggestingJIDInput::~QtSuggestingJIDInput() { - settings_->onSettingChanged.disconnect(boost::bind(&QtSuggestingJIDInput::handleSettingsChanged, this, _1)); - delete treeViewPopup_; - delete contactListDelegate_; - delete contactListModel_; + settings_->onSettingChanged.disconnect(boost::bind(&QtSuggestingJIDInput::handleSettingsChanged, this, _1)); + delete treeViewPopup_; + delete contactListDelegate_; + delete contactListModel_; } Contact::ref QtSuggestingJIDInput::getContact() { - if (!!currentContact_) { - return currentContact_; - } - - 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 boost::shared_ptr<Contact>(); + if (!!currentContact_) { + return currentContact_; + } + + 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 boost::shared_ptr<Contact>(); } void QtSuggestingJIDInput::setSuggestions(const std::vector<Contact::ref>& suggestions) { - contactListModel_->setList(suggestions); - positionPopup(); - if (!suggestions.empty()) { - treeViewPopup_->setCurrentIndex(contactListModel_->index(0, 0)); - showPopup(); - } else { - currentContact_.reset(); - hidePopup(); - } + contactListModel_->setList(suggestions); + positionPopup(); + if (!suggestions.empty()) { + treeViewPopup_->setCurrentIndex(contactListModel_->index(0, 0)); + showPopup(); + } else { + currentContact_.reset(); + hidePopup(); + } } void QtSuggestingJIDInput::clear() { - setText(""); - currentContact_.reset(); + setText(""); + currentContact_.reset(); } void QtSuggestingJIDInput::keyPressEvent(QKeyEvent* event) { - if (event->key() == Qt::Key_Up) { - if (contactListModel_->rowCount() > 0) { - int row = treeViewPopup_->currentIndex().row(); - row = (row + contactListModel_->rowCount() - 1) % contactListModel_->rowCount(); - treeViewPopup_->setCurrentIndex(contactListModel_->index(row, 0)); - } - } else if (event->key() == Qt::Key_Down) { - if (contactListModel_->rowCount() > 0) { - int row = treeViewPopup_->currentIndex().row(); - row = (row + contactListModel_->rowCount() + 1) % contactListModel_->rowCount(); - treeViewPopup_->setCurrentIndex(contactListModel_->index(row, 0)); - } - } else if (event->key() == Qt::Key_Return && treeViewPopup_->isVisible()) { - QModelIndex index = treeViewPopup_->currentIndex(); - if (!contactListModel_->getList().empty() && index.isValid()) { - currentContact_ = contactListModel_->getContact(index.row()); - if (currentContact_->jid.isValid()) { - setText(P2QSTRING(currentContact_->jid.toString())); - } else { - setText(P2QSTRING(currentContact_->name)); - } - hidePopup(); - clearFocus(); - } else { - currentContact_.reset(); - } - editingDone(); - } else { - QLineEdit::keyPressEvent(event); - } + if (event->key() == Qt::Key_Up) { + if (contactListModel_->rowCount() > 0) { + int row = treeViewPopup_->currentIndex().row(); + row = (row + contactListModel_->rowCount() - 1) % contactListModel_->rowCount(); + treeViewPopup_->setCurrentIndex(contactListModel_->index(row, 0)); + } + } else if (event->key() == Qt::Key_Down) { + if (contactListModel_->rowCount() > 0) { + int row = treeViewPopup_->currentIndex().row(); + row = (row + contactListModel_->rowCount() + 1) % contactListModel_->rowCount(); + treeViewPopup_->setCurrentIndex(contactListModel_->index(row, 0)); + } + } else if (event->key() == Qt::Key_Return && treeViewPopup_->isVisible()) { + QModelIndex index = treeViewPopup_->currentIndex(); + if (!contactListModel_->getList().empty() && index.isValid()) { + currentContact_ = contactListModel_->getContact(index.row()); + if (currentContact_->jid.isValid()) { + setText(P2QSTRING(currentContact_->jid.toString())); + } else { + setText(P2QSTRING(currentContact_->name)); + } + hidePopup(); + clearFocus(); + } else { + currentContact_.reset(); + } + editingDone(); + } else { + QLineEdit::keyPressEvent(event); + } } void QtSuggestingJIDInput::hideEvent(QHideEvent* /* event */) { - // Hide our popup when we are hidden (can happen when a dialog is closed by the user). - treeViewPopup_->hide(); + // Hide our popup when we are hidden (can happen when a dialog is closed by the user). + treeViewPopup_->hide(); } void QtSuggestingJIDInput::handleApplicationFocusChanged(QWidget* /*old*/, QWidget* /*now*/) { - /* Using the now argument gives use the wrong widget. This is part of the code needed - to prevent stealing of focus when opening a the suggestion window. */ - QWidget* now = qApp->focusWidget(); - if (!now || (now != treeViewPopup_ && now != this && !now->isAncestorOf(this) && !now->isAncestorOf(treeViewPopup_) && !this->isAncestorOf(now) && !treeViewPopup_->isAncestorOf(now))) { - hidePopup(); - } + /* Using the now argument gives use the wrong widget. This is part of the code needed + to prevent stealing of focus when opening a the suggestion window. */ + QWidget* now = qApp->focusWidget(); + if (!now || (now != treeViewPopup_ && now != this && !now->isAncestorOf(this) && !now->isAncestorOf(treeViewPopup_) && !this->isAncestorOf(now) && !treeViewPopup_->isAncestorOf(now))) { + hidePopup(); + } } void QtSuggestingJIDInput::handleSettingsChanged(const std::string& setting) { - if (setting == QtUISettingConstants::COMPACT_ROSTER.getKey()) { - contactListDelegate_->setCompact(settings_->getSetting(QtUISettingConstants::COMPACT_ROSTER)); - } + if (setting == QtUISettingConstants::COMPACT_ROSTER.getKey()) { + contactListDelegate_->setCompact(settings_->getSetting(QtUISettingConstants::COMPACT_ROSTER)); + } } void QtSuggestingJIDInput::handleClicked(const QModelIndex& index) { - if (index.isValid()) { - currentContact_ = contactListModel_->getContact(index.row()); - onUserSelected(currentContact_); - hidePopup(); - } + if (index.isValid()) { + currentContact_ = contactListModel_->getContact(index.row()); + onUserSelected(currentContact_); + hidePopup(); + } } void QtSuggestingJIDInput::positionPopup() { - QDesktopWidget* desktop = QApplication::desktop(); - int screen = desktop->screenNumber(this); - QPoint point = mapToGlobal(QPoint(0, height())); - QRect geometry = desktop->availableGeometry(screen); - int x = point.x(); - int y = point.y(); - int width = this->width(); - int height = 80; - - int screenWidth = geometry.x() + geometry.width(); - if (x + width > screenWidth) { - x = screenWidth - width; - } - - height = treeViewPopup_->sizeHintForRow(0) * contactListModel_->rowCount(); - height = height > 200 ? 200 : height; - - int marginLeft; - int marginTop; - int marginRight; - int marginBottom; - treeViewPopup_->getContentsMargins(&marginLeft, &marginTop, &marginRight, &marginBottom); - height += marginTop + marginBottom; - width += marginLeft + marginRight; - - treeViewPopup_->setGeometry(x, y, width, height); - treeViewPopup_->move(x, y); - treeViewPopup_->setMaximumWidth(width); + QDesktopWidget* desktop = QApplication::desktop(); + int screen = desktop->screenNumber(this); + QPoint point = mapToGlobal(QPoint(0, height())); + QRect geometry = desktop->availableGeometry(screen); + int x = point.x(); + int y = point.y(); + int width = this->width(); + int height = 80; + + int screenWidth = geometry.x() + geometry.width(); + if (x + width > screenWidth) { + x = screenWidth - width; + } + + height = treeViewPopup_->sizeHintForRow(0) * contactListModel_->rowCount(); + height = height > 200 ? 200 : height; + + int marginLeft; + int marginTop; + int marginRight; + int marginBottom; + treeViewPopup_->getContentsMargins(&marginLeft, &marginTop, &marginRight, &marginBottom); + height += marginTop + marginBottom; + width += marginLeft + marginRight; + + treeViewPopup_->setGeometry(x, y, width, height); + treeViewPopup_->move(x, y); + treeViewPopup_->setMaximumWidth(width); } void QtSuggestingJIDInput::showPopup() { - treeViewPopup_->show(); - activateWindow(); - connect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)), this, SLOT(handleApplicationFocusChanged(QWidget*, QWidget*)), Qt::QueuedConnection); - setFocus(); + treeViewPopup_->show(); + activateWindow(); + connect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)), this, SLOT(handleApplicationFocusChanged(QWidget*, QWidget*)), Qt::QueuedConnection); + setFocus(); } void QtSuggestingJIDInput::hidePopup() { - disconnect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)), this, SLOT(handleApplicationFocusChanged(QWidget*, QWidget*))); - treeViewPopup_->hide(); + disconnect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)), this, SLOT(handleApplicationFocusChanged(QWidget*, QWidget*))); + treeViewPopup_->hide(); - // Give focus back to input widget because the hide() call passes the focus to the wrong widget. - setFocus(); + // Give focus back to input widget because the hide() call passes the focus to the wrong widget. + setFocus(); } } diff --git a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h index 73840b4..2077d55 100644 --- a/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h +++ b/Swift/QtUI/UserSearch/QtSuggestingJIDInput.h @@ -26,44 +26,44 @@ class SettingsProvider; class ContactListModel; class QtSuggestingJIDInput : public QLineEdit { - Q_OBJECT - public: - QtSuggestingJIDInput(QWidget* parent, SettingsProvider* settings); - virtual ~QtSuggestingJIDInput(); + Q_OBJECT + public: + QtSuggestingJIDInput(QWidget* parent, SettingsProvider* settings); + virtual ~QtSuggestingJIDInput(); - Contact::ref getContact(); + Contact::ref getContact(); - void setSuggestions(const std::vector<Contact::ref>& suggestions); + void setSuggestions(const std::vector<Contact::ref>& suggestions); - void clear(); + void clear(); - boost::signal<void (const Contact::ref&)> onUserSelected; + boost::signal<void (const Contact::ref&)> onUserSelected; - signals: - void editingDone(); + signals: + void editingDone(); - protected: - virtual void keyPressEvent(QKeyEvent* event); - virtual void hideEvent(QHideEvent* event); + protected: + virtual void keyPressEvent(QKeyEvent* event); + virtual void hideEvent(QHideEvent* event); - private: - void handleSettingsChanged(const std::string& setting); + private: + void handleSettingsChanged(const std::string& setting); - private slots: - void handleClicked(const QModelIndex& index); - void handleApplicationFocusChanged(QWidget* old, QWidget* now); + private slots: + void handleClicked(const QModelIndex& index); + void handleApplicationFocusChanged(QWidget* old, QWidget* now); - private: - void positionPopup(); - void showPopup(); - void hidePopup(); + private: + void positionPopup(); + void showPopup(); + void hidePopup(); - private: - SettingsProvider* settings_; - ContactListModel* contactListModel_; - QTreeView* treeViewPopup_; - ContactListDelegate* contactListDelegate_; - Contact::ref currentContact_; + private: + SettingsProvider* settings_; + ContactListModel* contactListModel_; + QTreeView* treeViewPopup_; + ContactListDelegate* contactListDelegate_; + Contact::ref currentContact_; }; } diff --git a/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.cpp b/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.cpp index 4e8354f..601d6ac 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.cpp +++ b/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.cpp @@ -19,10 +19,10 @@ namespace Swift { QtUserSearchDetailsPage::QtUserSearchDetailsPage(const std::set<std::string>& groups) { - QVBoxLayout* layout = new QVBoxLayout(this); - layout->addWidget(new QLabel(tr("Please choose a name for the contact, and select the groups you want to add the contact to."))); - editWidget = new QtContactEditWidget(groups, this); - layout->addWidget(editWidget); + QVBoxLayout* layout = new QVBoxLayout(this); + layout->addWidget(new QLabel(tr("Please choose a name for the contact, and select the groups you want to add the contact to."))); + editWidget = new QtContactEditWidget(groups, this); + layout->addWidget(editWidget); } QtUserSearchDetailsPage::~QtUserSearchDetailsPage() { @@ -30,27 +30,27 @@ QtUserSearchDetailsPage::~QtUserSearchDetailsPage() { } void QtUserSearchDetailsPage::setJID(const JID& jid) { - contactJID = jid; + contactJID = jid; } void QtUserSearchDetailsPage::setNameSuggestions(const std::vector<std::string>& nameSuggestions) { - editWidget->setNameSuggestions(nameSuggestions); + editWidget->setNameSuggestions(nameSuggestions); } void QtUserSearchDetailsPage::setName(const std::string& name) { - editWidget->setName(name); + editWidget->setName(name); } std::set<std::string> QtUserSearchDetailsPage::getSelectedGroups() { - return editWidget->getSelectedGroups(); + return editWidget->getSelectedGroups(); } std::string QtUserSearchDetailsPage::getName() { - return editWidget->getName(); + return editWidget->getName(); } void QtUserSearchDetailsPage::clear() { - editWidget->clear(); + editWidget->clear(); } } diff --git a/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h b/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h index 568dfe3..7185bce 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h +++ b/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h @@ -18,28 +18,28 @@ #include <Swift/QtUI/UserSearch/ui_QtUserSearchFieldsPage.h> namespace Swift { - class QtContactEditWidget; + class QtContactEditWidget; - class QtUserSearchDetailsPage : public QWizardPage { - Q_OBJECT - public: - QtUserSearchDetailsPage(const std::set<std::string>& availableGroups); - virtual ~QtUserSearchDetailsPage(); + class QtUserSearchDetailsPage : public QWizardPage { + Q_OBJECT + public: + QtUserSearchDetailsPage(const std::set<std::string>& availableGroups); + virtual ~QtUserSearchDetailsPage(); - void setJID(const JID& jid); - void setNameSuggestions(const std::vector<std::string>& nameSuggestions); - void setName(const std::string& name); + void setJID(const JID& jid); + void setNameSuggestions(const std::vector<std::string>& nameSuggestions); + void setName(const std::string& name); - std::set<std::string> getSelectedGroups(); - std::string getName(); + std::set<std::string> getSelectedGroups(); + std::string getName(); - void clear(); + void clear(); - signals: - void onUserTriggersFinish(); + signals: + void onUserTriggersFinish(); - private: - QtContactEditWidget* editWidget; - JID contactJID; - }; + private: + QtContactEditWidget* editWidget; + JID contactJID; + }; } diff --git a/Swift/QtUI/UserSearch/QtUserSearchFieldsPage.cpp b/Swift/QtUI/UserSearch/QtUserSearchFieldsPage.cpp index 9b02273..3a82a62 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchFieldsPage.cpp +++ b/Swift/QtUI/UserSearch/QtUserSearchFieldsPage.cpp @@ -9,34 +9,34 @@ namespace Swift { QtUserSearchFieldsPage::QtUserSearchFieldsPage() : formWidget_(0) { - setupUi(this); + setupUi(this); } bool QtUserSearchFieldsPage::isComplete() const { - if (formWidget_) { - return formWidget_->isEnabled(); - } else { - return nickInput_->isEnabled() || firstInput_->isEnabled() || lastInput_->isEnabled() || emailInput_->isEnabled(); - } + if (formWidget_) { + return formWidget_->isEnabled(); + } else { + return nickInput_->isEnabled() || firstInput_->isEnabled() || lastInput_->isEnabled() || emailInput_->isEnabled(); + } } QtFormWidget* QtUserSearchFieldsPage::getFormWidget() { - return formWidget_; + return formWidget_; } void QtUserSearchFieldsPage::setFormWidget(QtFormWidget *widget) { - if (formWidget_) { - delete formWidget_; - formWidget_ = NULL; - } - if (widget) { - formContainer_->layout()->addWidget(widget); - } - formWidget_ = widget; + if (formWidget_) { + delete formWidget_; + formWidget_ = NULL; + } + if (widget) { + formContainer_->layout()->addWidget(widget); + } + formWidget_ = widget; } void QtUserSearchFieldsPage::emitCompletenessCheck() { - emit completeChanged(); + emit completeChanged(); } } diff --git a/Swift/QtUI/UserSearch/QtUserSearchFieldsPage.h b/Swift/QtUI/UserSearch/QtUserSearchFieldsPage.h index 29ff675..4089d05 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchFieldsPage.h +++ b/Swift/QtUI/UserSearch/QtUserSearchFieldsPage.h @@ -12,19 +12,19 @@ #include <Swift/QtUI/UserSearch/ui_QtUserSearchFieldsPage.h> namespace Swift { - class QtUserSearchFieldsPage : public QWizardPage, public Ui::QtUserSearchFieldsPage { - Q_OBJECT - public: - QtUserSearchFieldsPage(); - virtual bool isComplete() const; + class QtUserSearchFieldsPage : public QWizardPage, public Ui::QtUserSearchFieldsPage { + Q_OBJECT + public: + QtUserSearchFieldsPage(); + virtual bool isComplete() const; - QtFormWidget* getFormWidget(); - void setFormWidget(QtFormWidget *widget); + QtFormWidget* getFormWidget(); + void setFormWidget(QtFormWidget *widget); - public slots: - void emitCompletenessCheck(); + public slots: + void emitCompletenessCheck(); - private: - QtFormWidget *formWidget_; - }; + private: + QtFormWidget *formWidget_; + }; } diff --git a/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp b/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp index 40ea1c0..1327a8f 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp +++ b/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp @@ -25,78 +25,78 @@ namespace Swift { QtUserSearchFirstMultiJIDPage::QtUserSearchFirstMultiJIDPage(UserSearchWindow::Type type, const QString& title, SettingsProvider* settings) { - setupUi(this); - setTitle(title); - QString introText = ""; - switch (type) { - case UserSearchWindow::AddContact: - introText = tr("Add another user to your contact list"); - break; - case UserSearchWindow::ChatToContact: - introText = tr("Chat to another user"); - break; - case UserSearchWindow::InviteToChat: - introText = tr("Invite contact to chat"); - break; - } - - setSubTitle(QString(tr("%1. If you know their address you can enter it directly, or you can search for them.")).arg(introText)); - - contactList_ = new QtContactListWidget(this, settings); - horizontalLayout_5->addWidget(contactList_); - - jid_ = new QtSuggestingJIDInput(this, settings); - horizontalLayout_6->insertWidget(0, jid_); - - connect(contactList_, SIGNAL(onListChanged(std::vector<Contact::ref>)), this, SLOT(emitCompletenessCheck())); - connect(jid_, SIGNAL(editingDone()), this, SLOT(handleEditingDone())); - - setAcceptDrops(true); + setupUi(this); + setTitle(title); + QString introText = ""; + switch (type) { + case UserSearchWindow::AddContact: + introText = tr("Add another user to your contact list"); + break; + case UserSearchWindow::ChatToContact: + introText = tr("Chat to another user"); + break; + case UserSearchWindow::InviteToChat: + introText = tr("Invite contact to chat"); + break; + } + + setSubTitle(QString(tr("%1. If you know their address you can enter it directly, or you can search for them.")).arg(introText)); + + contactList_ = new QtContactListWidget(this, settings); + horizontalLayout_5->addWidget(contactList_); + + jid_ = new QtSuggestingJIDInput(this, settings); + horizontalLayout_6->insertWidget(0, jid_); + + connect(contactList_, SIGNAL(onListChanged(std::vector<Contact::ref>)), this, SLOT(emitCompletenessCheck())); + connect(jid_, SIGNAL(editingDone()), this, SLOT(handleEditingDone())); + + setAcceptDrops(true); } bool QtUserSearchFirstMultiJIDPage::isComplete() const { - return !contactList_->getList().empty(); + return !contactList_->getList().empty(); } void QtUserSearchFirstMultiJIDPage::reset() { - jid_->clear(); - reason_->clear(); + jid_->clear(); + reason_->clear(); } void QtUserSearchFirstMultiJIDPage::emitCompletenessCheck() { - emit completeChanged(); + emit completeChanged(); } void QtUserSearchFirstMultiJIDPage::handleEditingDone() { - addContactButton_->setFocus(); + addContactButton_->setFocus(); } void QtUserSearchFirstMultiJIDPage::dragEnterEvent(QDragEnterEvent *event) { - if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid-list") - || event->mimeData()->hasFormat("application/vnd.swift.contact-jid-muc")) { - if (!contactList_->isFull()) { - event->acceptProposedAction(); - } - } + if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid-list") + || event->mimeData()->hasFormat("application/vnd.swift.contact-jid-muc")) { + if (!contactList_->isFull()) { + event->acceptProposedAction(); + } + } } void QtUserSearchFirstMultiJIDPage::dropEvent(QDropEvent *event) { - if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid-list")) { - QByteArray dataBytes = event->mimeData()->data("application/vnd.swift.contact-jid-list"); - QDataStream dataStream(&dataBytes, QIODevice::ReadOnly); - std::vector<JID> jids; - while (!dataStream.atEnd()) { - QString jidString; - dataStream >> jidString; - jids.push_back(Q2PSTRING(jidString)); - } - onJIDsDropped(jids); - } else if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid-muc")) { - QMessageBox* messageBox = new QMessageBox(this); - messageBox->setText(tr("You can't invite a room to chat.")); - messageBox->setWindowTitle(tr("Error inviting room to chat")); - messageBox->show(); - } + if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid-list")) { + QByteArray dataBytes = event->mimeData()->data("application/vnd.swift.contact-jid-list"); + QDataStream dataStream(&dataBytes, QIODevice::ReadOnly); + std::vector<JID> jids; + while (!dataStream.atEnd()) { + QString jidString; + dataStream >> jidString; + jids.push_back(Q2PSTRING(jidString)); + } + onJIDsDropped(jids); + } else if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid-muc")) { + QMessageBox* messageBox = new QMessageBox(this); + messageBox->setText(tr("You can't invite a room to chat.")); + messageBox->setWindowTitle(tr("Error inviting room to chat")); + messageBox->show(); + } } } diff --git a/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.h b/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.h index 82b8f93..d9147db 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.h +++ b/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.h @@ -19,35 +19,35 @@ #include <Swift/QtUI/UserSearch/ui_QtUserSearchFirstMultiJIDPage.h> namespace Swift { - class UserSearchModel; - class UserSearchDelegate; - class UserSearchResult; - class UIEventStream; - class QtContactListWidget; - class ContactSuggester; - class AvatarManager; - class VCardManager; - class SettingsProvider; - class QtSuggestingJIDInput; - - class QtUserSearchFirstMultiJIDPage : public QWizardPage, public Ui::QtUserSearchFirstMultiJIDPage { - Q_OBJECT - public: - QtUserSearchFirstMultiJIDPage(UserSearchWindow::Type type, const QString& title, SettingsProvider* settings); - virtual bool isComplete() const; - void reset(); - - signals: - void onJIDsDropped(std::vector<JID> jid); - - public slots: - void emitCompletenessCheck(); - void handleEditingDone(); - virtual void dragEnterEvent(QDragEnterEvent *event); - virtual void dropEvent(QDropEvent *event); - - public: - QtContactListWidget* contactList_; - QtSuggestingJIDInput* jid_; - }; + class UserSearchModel; + class UserSearchDelegate; + class UserSearchResult; + class UIEventStream; + class QtContactListWidget; + class ContactSuggester; + class AvatarManager; + class VCardManager; + class SettingsProvider; + class QtSuggestingJIDInput; + + class QtUserSearchFirstMultiJIDPage : public QWizardPage, public Ui::QtUserSearchFirstMultiJIDPage { + Q_OBJECT + public: + QtUserSearchFirstMultiJIDPage(UserSearchWindow::Type type, const QString& title, SettingsProvider* settings); + virtual bool isComplete() const; + void reset(); + + signals: + void onJIDsDropped(std::vector<JID> jid); + + public slots: + void emitCompletenessCheck(); + void handleEditingDone(); + virtual void dragEnterEvent(QDragEnterEvent *event); + virtual void dropEvent(QDropEvent *event); + + public: + QtContactListWidget* contactList_; + QtSuggestingJIDInput* jid_; + }; } diff --git a/Swift/QtUI/UserSearch/QtUserSearchFirstPage.cpp b/Swift/QtUI/UserSearch/QtUserSearchFirstPage.cpp index 93157c7..5d0c9fa 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchFirstPage.cpp +++ b/Swift/QtUI/UserSearch/QtUserSearchFirstPage.cpp @@ -13,37 +13,37 @@ namespace Swift { QtUserSearchFirstPage::QtUserSearchFirstPage(UserSearchWindow::Type type, const QString& title, SettingsProvider* settings) { - setupUi(this); - setTitle(title); - setSubTitle(QString(tr("%1. If you know their address you can enter it directly, or you can search for them.")).arg(type == UserSearchWindow::AddContact ? tr("Add another user to your contact list") : tr("Chat to another user"))); - jid_ = new QtSuggestingJIDInput(this, settings); - horizontalLayout_2->addWidget(jid_); - jidWarning_ = new QLabel(this); - jidWarning_->setPixmap(QPixmap(":icons/warn.png")); - jidWarning_->hide(); - horizontalLayout_2->addWidget(jidWarning_); - setTabOrder(byJID_, jid_); - setTabOrder(jid_, byLocalSearch_); - setTabOrder(byLocalSearch_, byRemoteSearch_); - connect(jid_, SIGNAL(textChanged(const QString&)), this, SLOT(emitCompletenessCheck())); - connect(jid_, SIGNAL(editingDone()), this, SLOT(emitCompletenessCheck())); - connect(service_->lineEdit(), SIGNAL(textChanged(const QString&)), this, SLOT(emitCompletenessCheck())); + setupUi(this); + setTitle(title); + setSubTitle(QString(tr("%1. If you know their address you can enter it directly, or you can search for them.")).arg(type == UserSearchWindow::AddContact ? tr("Add another user to your contact list") : tr("Chat to another user"))); + jid_ = new QtSuggestingJIDInput(this, settings); + horizontalLayout_2->addWidget(jid_); + jidWarning_ = new QLabel(this); + jidWarning_->setPixmap(QPixmap(":icons/warn.png")); + jidWarning_->hide(); + horizontalLayout_2->addWidget(jidWarning_); + setTabOrder(byJID_, jid_); + setTabOrder(jid_, byLocalSearch_); + setTabOrder(byLocalSearch_, byRemoteSearch_); + connect(jid_, SIGNAL(textChanged(const QString&)), this, SLOT(emitCompletenessCheck())); + connect(jid_, SIGNAL(editingDone()), this, SLOT(emitCompletenessCheck())); + connect(service_->lineEdit(), SIGNAL(textChanged(const QString&)), this, SLOT(emitCompletenessCheck())); } bool QtUserSearchFirstPage::isComplete() const { - bool complete = false; - if (byJID_->isChecked()) { - complete = JID(Q2PSTRING(jid_->text().trimmed())).isValid() && jidWarning_->toolTip().isEmpty(); - } else if (byLocalSearch_->isChecked()) { - complete = true; - } else if (byRemoteSearch_->isChecked()) { - complete = JID(Q2PSTRING(service_->currentText().trimmed())).isValid(); - } - return complete; + bool complete = false; + if (byJID_->isChecked()) { + complete = JID(Q2PSTRING(jid_->text().trimmed())).isValid() && jidWarning_->toolTip().isEmpty(); + } else if (byLocalSearch_->isChecked()) { + complete = true; + } else if (byRemoteSearch_->isChecked()) { + complete = JID(Q2PSTRING(service_->currentText().trimmed())).isValid(); + } + return complete; } void QtUserSearchFirstPage::emitCompletenessCheck() { - emit completeChanged(); + emit completeChanged(); } } diff --git a/Swift/QtUI/UserSearch/QtUserSearchFirstPage.h b/Swift/QtUI/UserSearch/QtUserSearchFirstPage.h index 9e765a0..2e73e9e 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchFirstPage.h +++ b/Swift/QtUI/UserSearch/QtUserSearchFirstPage.h @@ -14,20 +14,20 @@ #include <Swift/QtUI/UserSearch/ui_QtUserSearchFirstPage.h> namespace Swift { - class UserSearchModel; - class UserSearchDelegate; - class UserSearchResult; - class UIEventStream; + class UserSearchModel; + class UserSearchDelegate; + class UserSearchResult; + class UIEventStream; - class QtUserSearchFirstPage : public QWizardPage, public Ui::QtUserSearchFirstPage { - Q_OBJECT - public: - QtUserSearchFirstPage(UserSearchWindow::Type type, const QString& title, SettingsProvider* settings); - virtual bool isComplete() const; - public slots: - void emitCompletenessCheck(); - public: - QtSuggestingJIDInput* jid_; - QLabel* jidWarning_; - }; + class QtUserSearchFirstPage : public QWizardPage, public Ui::QtUserSearchFirstPage { + Q_OBJECT + public: + QtUserSearchFirstPage(UserSearchWindow::Type type, const QString& title, SettingsProvider* settings); + virtual bool isComplete() const; + public slots: + void emitCompletenessCheck(); + public: + QtSuggestingJIDInput* jid_; + QLabel* jidWarning_; + }; } diff --git a/Swift/QtUI/UserSearch/QtUserSearchResultsPage.cpp b/Swift/QtUI/UserSearch/QtUserSearchResultsPage.cpp index 6ec4a34..c8a9ad8 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchResultsPage.cpp +++ b/Swift/QtUI/UserSearch/QtUserSearchResultsPage.cpp @@ -9,31 +9,31 @@ namespace Swift { QtUserSearchResultsPage::QtUserSearchResultsPage() { - setupUi(this); - connect(results_, SIGNAL(activated(const QModelIndex&)), this, SLOT(emitCompletenessCheck())); - connect(results_, SIGNAL(activated(const QModelIndex&)), this, SIGNAL(onUserTriggersContinue())); - connect(results_, SIGNAL(clicked(const QModelIndex&)), this, SLOT(emitCompletenessCheck())); - connect(results_, SIGNAL(entered(const QModelIndex&)), this, SLOT(emitCompletenessCheck())); - results_->setExpandsOnDoubleClick(false); - setNoResults(false); + setupUi(this); + connect(results_, SIGNAL(activated(const QModelIndex&)), this, SLOT(emitCompletenessCheck())); + connect(results_, SIGNAL(activated(const QModelIndex&)), this, SIGNAL(onUserTriggersContinue())); + connect(results_, SIGNAL(clicked(const QModelIndex&)), this, SLOT(emitCompletenessCheck())); + connect(results_, SIGNAL(entered(const QModelIndex&)), this, SLOT(emitCompletenessCheck())); + results_->setExpandsOnDoubleClick(false); + setNoResults(false); } bool QtUserSearchResultsPage::isComplete() const { - return results_->currentIndex().isValid(); + return results_->currentIndex().isValid(); } void QtUserSearchResultsPage::setNoResults(bool noResults) { - if (noResults) { - results_->setEnabled(false); - noResults_->show(); - } else { - results_->setEnabled(true); - noResults_->hide(); - } + if (noResults) { + results_->setEnabled(false); + noResults_->show(); + } else { + results_->setEnabled(true); + noResults_->hide(); + } } void QtUserSearchResultsPage::emitCompletenessCheck() { - emit completeChanged(); + emit completeChanged(); } } diff --git a/Swift/QtUI/UserSearch/QtUserSearchResultsPage.h b/Swift/QtUI/UserSearch/QtUserSearchResultsPage.h index d2ee566..33227e6 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchResultsPage.h +++ b/Swift/QtUI/UserSearch/QtUserSearchResultsPage.h @@ -11,15 +11,15 @@ #include <Swift/QtUI/UserSearch/ui_QtUserSearchResultsPage.h> namespace Swift { - class QtUserSearchResultsPage : public QWizardPage, public Ui::QtUserSearchResultsPage { - Q_OBJECT - public: - QtUserSearchResultsPage(); - virtual bool isComplete() const; - void setNoResults(bool noResults); - signals: - void onUserTriggersContinue(); - public slots: - void emitCompletenessCheck(); - }; + class QtUserSearchResultsPage : public QWizardPage, public Ui::QtUserSearchResultsPage { + Q_OBJECT + public: + QtUserSearchResultsPage(); + virtual bool isComplete() const; + void setNoResults(bool noResults); + signals: + void onUserTriggersContinue(); + public slots: + void emitCompletenessCheck(); + }; } diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp index 52b17b0..1140b6e 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp +++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp @@ -37,592 +37,592 @@ namespace Swift { QtUserSearchWindow::QtUserSearchWindow(UIEventStream* eventStream, UserSearchWindow::Type type, const std::set<std::string>& groups, SettingsProvider* settingsProvider) : eventStream_(eventStream), type_(type), model_(NULL), firstMultiJIDPage_(NULL), settings_(settingsProvider), searchNext_(false), supportsImpromptu_(false) { - setupUi(this); + setupUi(this); #ifndef Q_OS_MAC #ifdef Q_OS_WIN32 - setWindowIcon(QIcon(":/logo-icon-16-win.png")); + setWindowIcon(QIcon(":/logo-icon-16-win.png")); #else - setWindowIcon(QIcon(":/logo-icon-16.png")); + setWindowIcon(QIcon(":/logo-icon-16.png")); #endif #endif - QString title; - switch(type) { - case AddContact: - title = tr("Add Contact"); - break; - case ChatToContact: - title = tr("Chat to Users"); - break; - case InviteToChat: - title = tr("Add Users to Chat"); - break; - } - setWindowTitle(title); - - delegate_ = new UserSearchDelegate(this); - - setFirstPage(title); - setSecondPage(); - setThirdPage(); - - detailsPage_ = new QtUserSearchDetailsPage(groups); - setPage(4, detailsPage_); - - connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(handleCurrentChanged(int))); - connect(this, SIGNAL(accepted()), this, SLOT(handleAccepted())); - clear(); + QString title; + switch(type) { + case AddContact: + title = tr("Add Contact"); + break; + case ChatToContact: + title = tr("Chat to Users"); + break; + case InviteToChat: + title = tr("Add Users to Chat"); + break; + } + setWindowTitle(title); + + delegate_ = new UserSearchDelegate(this); + + setFirstPage(title); + setSecondPage(); + setThirdPage(); + + detailsPage_ = new QtUserSearchDetailsPage(groups); + setPage(4, detailsPage_); + + connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(handleCurrentChanged(int))); + connect(this, SIGNAL(accepted()), this, SLOT(handleAccepted())); + clear(); } QtUserSearchWindow::~QtUserSearchWindow() { - delete model_; + delete model_; } void QtUserSearchWindow::handleCurrentChanged(int page) { - searchNext_ = false; - if (firstMultiJIDPage_) { - firstMultiJIDPage_->reset(); - } - resultsPage_->emitCompletenessCheck(); - if (page == 1 && lastPage_ == 3) { - addSearchedJIDToList(getContact()); - setSecondPage(); - } - else if (page == 2 && lastPage_ == 1) { - setError(""); - /* next won't be called if JID is selected */ - JID server = getServerToSearch(); - clearForm(); - onFormRequested(server); - setThirdPage(); - } - else if (page == 3 && lastPage_ == 2) { - JID server = getServerToSearch(); - handleSearch(); - - if (type_ == AddContact) { - bool remote = firstPage_->byRemoteSearch_->isChecked(); - firstPage_->byRemoteSearch_->setChecked(remote); - firstPage_->service_->setEditText(P2QSTRING(server.toString())); - } else { - bool remote = firstMultiJIDPage_->byRemoteSearch_->isChecked(); - setFirstPage(); - firstMultiJIDPage_->byRemoteSearch_->setChecked(remote); - firstMultiJIDPage_->service_->setEditText(P2QSTRING(server.toString())); - } - } - else if (page == 4) { - detailsPage_->clear(); - detailsPage_->setJID(getContactJID()); - onNameSuggestionRequested(getContactJID()); - } - lastPage_ = page; + searchNext_ = false; + if (firstMultiJIDPage_) { + firstMultiJIDPage_->reset(); + } + resultsPage_->emitCompletenessCheck(); + if (page == 1 && lastPage_ == 3) { + addSearchedJIDToList(getContact()); + setSecondPage(); + } + else if (page == 2 && lastPage_ == 1) { + setError(""); + /* next won't be called if JID is selected */ + JID server = getServerToSearch(); + clearForm(); + onFormRequested(server); + setThirdPage(); + } + else if (page == 3 && lastPage_ == 2) { + JID server = getServerToSearch(); + handleSearch(); + + if (type_ == AddContact) { + bool remote = firstPage_->byRemoteSearch_->isChecked(); + firstPage_->byRemoteSearch_->setChecked(remote); + firstPage_->service_->setEditText(P2QSTRING(server.toString())); + } else { + bool remote = firstMultiJIDPage_->byRemoteSearch_->isChecked(); + setFirstPage(); + firstMultiJIDPage_->byRemoteSearch_->setChecked(remote); + firstMultiJIDPage_->service_->setEditText(P2QSTRING(server.toString())); + } + } + else if (page == 4) { + detailsPage_->clear(); + detailsPage_->setJID(getContactJID()); + onNameSuggestionRequested(getContactJID()); + } + lastPage_ = page; } JID QtUserSearchWindow::getServerToSearch() { - if (type_ == AddContact) { - return firstPage_->byRemoteSearch_->isChecked() ? JID(Q2PSTRING(firstPage_->service_->currentText().trimmed())) : myServer_; - } else { - return firstMultiJIDPage_->byRemoteSearch_->isChecked() ? JID(Q2PSTRING(firstMultiJIDPage_->service_->currentText().trimmed())) : myServer_; - } + if (type_ == AddContact) { + return firstPage_->byRemoteSearch_->isChecked() ? JID(Q2PSTRING(firstPage_->service_->currentText().trimmed())) : myServer_; + } else { + return firstMultiJIDPage_->byRemoteSearch_->isChecked() ? JID(Q2PSTRING(firstMultiJIDPage_->service_->currentText().trimmed())) : myServer_; + } } void QtUserSearchWindow::handleAccepted() { - JID jid; - std::vector<JID> jids; - switch(type_) { - case AddContact: - jid = getContactJID(); - eventStream_->send(boost::make_shared<AddContactUIEvent>(jid, detailsPage_->getName(), detailsPage_->getSelectedGroups())); - break; - case ChatToContact: - if (contactVector_.size() == 1) { - boost::shared_ptr<UIEvent> event(new RequestChatUIEvent(contactVector_[0]->jid)); - eventStream_->send(event); - break; - } - - foreach(Contact::ref contact, contactVector_) { - jids.push_back(contact->jid); - } - - eventStream_->send(boost::make_shared<CreateImpromptuMUCUIEvent>(jids, JID(), Q2PSTRING(firstMultiJIDPage_->reason_->text()))); - break; - case InviteToChat: - foreach(Contact::ref contact, contactVector_) { - jids.push_back(contact->jid); - } - eventStream_->send(boost::make_shared<InviteToMUCUIEvent>(roomJID_, jids, Q2PSTRING(firstMultiJIDPage_->reason_->text()))); - break; - } + JID jid; + std::vector<JID> jids; + switch(type_) { + case AddContact: + jid = getContactJID(); + eventStream_->send(boost::make_shared<AddContactUIEvent>(jid, detailsPage_->getName(), detailsPage_->getSelectedGroups())); + break; + case ChatToContact: + if (contactVector_.size() == 1) { + boost::shared_ptr<UIEvent> event(new RequestChatUIEvent(contactVector_[0]->jid)); + eventStream_->send(event); + break; + } + + foreach(Contact::ref contact, contactVector_) { + jids.push_back(contact->jid); + } + + eventStream_->send(boost::make_shared<CreateImpromptuMUCUIEvent>(jids, JID(), Q2PSTRING(firstMultiJIDPage_->reason_->text()))); + break; + case InviteToChat: + foreach(Contact::ref contact, contactVector_) { + jids.push_back(contact->jid); + } + eventStream_->send(boost::make_shared<InviteToMUCUIEvent>(roomJID_, jids, Q2PSTRING(firstMultiJIDPage_->reason_->text()))); + break; + } } void QtUserSearchWindow::handleContactSuggestionRequested(const QString& text) { - std::string stdText = Q2PSTRING(text); - onContactSuggestionsRequested(stdText); + std::string stdText = Q2PSTRING(text); + onContactSuggestionsRequested(stdText); } void QtUserSearchWindow::addContact() { - if (!!firstMultiJIDPage_->jid_->getContact()) { - contactVector_.push_back(firstMultiJIDPage_->jid_->getContact()); - firstMultiJIDPage_->jid_->clear(); - } - firstMultiJIDPage_->contactList_->setList(contactVector_); - firstMultiJIDPage_->emitCompletenessCheck(); - if (type_ == ChatToContact) { - firstMultiJIDPage_->groupBox->setEnabled(supportsImpromptu_ ? 1 : (contactVector_.size() < 1)); - } + if (!!firstMultiJIDPage_->jid_->getContact()) { + contactVector_.push_back(firstMultiJIDPage_->jid_->getContact()); + firstMultiJIDPage_->jid_->clear(); + } + firstMultiJIDPage_->contactList_->setList(contactVector_); + firstMultiJIDPage_->emitCompletenessCheck(); + if (type_ == ChatToContact) { + firstMultiJIDPage_->groupBox->setEnabled(supportsImpromptu_ ? 1 : (contactVector_.size() < 1)); + } } void QtUserSearchWindow::setWarning(const boost::optional<std::string>& message) { - if (message) { - firstPage_->jidWarning_->setToolTip(P2QSTRING((*message))); - firstPage_->jidWarning_->setAccessibleDescription(P2QSTRING((*message))); - firstPage_->jidWarning_->show(); - } - else { - firstPage_->jidWarning_->setToolTip(""); - firstPage_->jidWarning_->setAccessibleDescription(""); - firstPage_->jidWarning_->hide(); - } - firstPage_->emitCompletenessCheck(); + if (message) { + firstPage_->jidWarning_->setToolTip(P2QSTRING((*message))); + firstPage_->jidWarning_->setAccessibleDescription(P2QSTRING((*message))); + firstPage_->jidWarning_->show(); + } + else { + firstPage_->jidWarning_->setToolTip(""); + firstPage_->jidWarning_->setAccessibleDescription(""); + firstPage_->jidWarning_->hide(); + } + firstPage_->emitCompletenessCheck(); } int QtUserSearchWindow::nextId() const { - if (type_ == AddContact) { - switch (currentId()) { - case 1: return firstPage_->byJID_->isChecked() ? (type_ == AddContact ? 4 : -1) : 2; - case 2: return 3; - case 3: return type_ == AddContact ? 4 : -1; - case 4: return -1; - default: return -1; - } - } else { - switch (currentId()) { - case 1: return searchNext_ ? 2 : -1; - case 2: return 3; - case 3: return 1; - case 4: return -1; - default: return -1; - } - } + if (type_ == AddContact) { + switch (currentId()) { + case 1: return firstPage_->byJID_->isChecked() ? (type_ == AddContact ? 4 : -1) : 2; + case 2: return 3; + case 3: return type_ == AddContact ? 4 : -1; + case 4: return -1; + default: return -1; + } + } else { + switch (currentId()) { + case 1: return searchNext_ ? 2 : -1; + case 2: return 3; + case 3: return 1; + case 4: return -1; + default: return -1; + } + } } void QtUserSearchWindow::handleFirstPageRadioChange() { - if (firstPage_->byJID_->isChecked()) { - firstPage_->jid_->setText(""); - firstPage_->jid_->setEnabled(true); - firstPage_->service_->setEnabled(false); - restart(); - } - else if (firstPage_->byRemoteSearch_->isChecked()) { - firstPage_->service_->setEditText(""); - firstPage_->jid_->setEnabled(false); - firstPage_->service_->setEnabled(true); - //firstPage_->jid_->setText(""); - restart(); - } - else { - firstPage_->jid_->setEnabled(false); - firstPage_->service_->setEnabled(false); - restart(); - } + if (firstPage_->byJID_->isChecked()) { + firstPage_->jid_->setText(""); + firstPage_->jid_->setEnabled(true); + firstPage_->service_->setEnabled(false); + restart(); + } + else if (firstPage_->byRemoteSearch_->isChecked()) { + firstPage_->service_->setEditText(""); + firstPage_->jid_->setEnabled(false); + firstPage_->service_->setEnabled(true); + //firstPage_->jid_->setText(""); + restart(); + } + else { + firstPage_->jid_->setEnabled(false); + firstPage_->service_->setEnabled(false); + restart(); + } } void QtUserSearchWindow::handleSearch() { - boost::shared_ptr<SearchPayload> search(new SearchPayload()); - if (fieldsPage_->getFormWidget()) { - search->setForm(fieldsPage_->getFormWidget()->getCompletedForm()); - search->getForm()->clearEmptyTextFields(); - } else { - if (fieldsPage_->nickInput_->isEnabled() && !fieldsPage_->nickInput_->text().isEmpty()) { - search->setNick(Q2PSTRING(fieldsPage_->nickInput_->text())); - } - if (fieldsPage_->firstInput_->isEnabled() && !fieldsPage_->firstInput_->text().isEmpty()) { - search->setFirst(Q2PSTRING(fieldsPage_->firstInput_->text())); - } - if (fieldsPage_->lastInput_->isEnabled() && !fieldsPage_->lastInput_->text().isEmpty()) { - search->setLast(Q2PSTRING(fieldsPage_->lastInput_->text())); - } - if (fieldsPage_->emailInput_->isEnabled() && !fieldsPage_->emailInput_->text().isEmpty()) { - search->setEMail(Q2PSTRING(fieldsPage_->emailInput_->text())); - } - } - onSearchRequested(search, getServerToSearch()); + boost::shared_ptr<SearchPayload> search(new SearchPayload()); + if (fieldsPage_->getFormWidget()) { + search->setForm(fieldsPage_->getFormWidget()->getCompletedForm()); + search->getForm()->clearEmptyTextFields(); + } else { + if (fieldsPage_->nickInput_->isEnabled() && !fieldsPage_->nickInput_->text().isEmpty()) { + search->setNick(Q2PSTRING(fieldsPage_->nickInput_->text())); + } + if (fieldsPage_->firstInput_->isEnabled() && !fieldsPage_->firstInput_->text().isEmpty()) { + search->setFirst(Q2PSTRING(fieldsPage_->firstInput_->text())); + } + if (fieldsPage_->lastInput_->isEnabled() && !fieldsPage_->lastInput_->text().isEmpty()) { + search->setLast(Q2PSTRING(fieldsPage_->lastInput_->text())); + } + if (fieldsPage_->emailInput_->isEnabled() && !fieldsPage_->emailInput_->text().isEmpty()) { + search->setEMail(Q2PSTRING(fieldsPage_->emailInput_->text())); + } + } + onSearchRequested(search, getServerToSearch()); } JID QtUserSearchWindow::getContactJID() const { - JID jid; - - bool useSearchResult; - if (type_ == AddContact) { - useSearchResult = !firstPage_->byJID_->isChecked(); - } else { - useSearchResult = true; - } - - if (useSearchResult) { - if (dynamic_cast<UserSearchModel*>(model_)) { - UserSearchResult* userItem = static_cast<UserSearchResult*>(resultsPage_->results_->currentIndex().internalPointer()); - if (userItem) { /* Remember to leave this if we change to dynamic cast */ - jid = userItem->getJID(); - } - } else if (dynamic_cast<QtFormResultItemModel*>(model_)) { - int row = resultsPage_->results_->currentIndex().row(); - - Form::FormItem item = dynamic_cast<QtFormResultItemModel*>(model_)->getForm()->getItems().at(row); - JID fallbackJid; - foreach(FormField::ref field, item) { - if (field->getType() == FormField::JIDSingleType) { - jid = JID(field->getJIDSingleValue()); - break; - } - if (field->getName() == "jid") { - fallbackJid = field->getValues()[0]; - } - } - if (!jid.isValid()) { - jid = fallbackJid; - } - } - } - else { - jid = JID(Q2PSTRING(firstPage_->jid_->text().trimmed())); - } - return jid; + JID jid; + + bool useSearchResult; + if (type_ == AddContact) { + useSearchResult = !firstPage_->byJID_->isChecked(); + } else { + useSearchResult = true; + } + + if (useSearchResult) { + if (dynamic_cast<UserSearchModel*>(model_)) { + UserSearchResult* userItem = static_cast<UserSearchResult*>(resultsPage_->results_->currentIndex().internalPointer()); + if (userItem) { /* Remember to leave this if we change to dynamic cast */ + jid = userItem->getJID(); + } + } else if (dynamic_cast<QtFormResultItemModel*>(model_)) { + int row = resultsPage_->results_->currentIndex().row(); + + Form::FormItem item = dynamic_cast<QtFormResultItemModel*>(model_)->getForm()->getItems().at(row); + JID fallbackJid; + foreach(FormField::ref field, item) { + if (field->getType() == FormField::JIDSingleType) { + jid = JID(field->getJIDSingleValue()); + break; + } + if (field->getName() == "jid") { + fallbackJid = field->getValues()[0]; + } + } + if (!jid.isValid()) { + jid = fallbackJid; + } + } + } + else { + jid = JID(Q2PSTRING(firstPage_->jid_->text().trimmed())); + } + return jid; } Contact::ref QtUserSearchWindow::getContact() const { - return boost::make_shared<Contact>("", getContactJID(), StatusShow::None, ""); + return boost::make_shared<Contact>("", getContactJID(), StatusShow::None, ""); } void QtUserSearchWindow::addSearchedJIDToList(const Contact::ref& contact) { - std::vector<JID> jids; - jids.push_back(contact->jid); - handleJIDsAdded(jids); - firstMultiJIDPage_->jid_->clear(); + std::vector<JID> jids; + jids.push_back(contact->jid); + handleJIDsAdded(jids); + firstMultiJIDPage_->jid_->clear(); } void QtUserSearchWindow::handleOnSearchedJIDSelected(const Contact::ref& contact) { - firstPage_->jid_->setText(P2QSTRING(contact->jid.toString())); + firstPage_->jid_->setText(P2QSTRING(contact->jid.toString())); } void QtUserSearchWindow::show() { - clear(); - if (type_ == AddContact) { - setWarning(boost::optional<std::string>()); - } - QWidget::show(); + clear(); + if (type_ == AddContact) { + setWarning(boost::optional<std::string>()); + } + QWidget::show(); } void QtUserSearchWindow::addSavedServices(const std::vector<JID>& services) { - if (type_ == AddContact) { - firstPage_->service_->clear(); - foreach (JID jid, services) { - firstPage_->service_->addItem(P2QSTRING(jid.toString())); - } - firstPage_->service_->clearEditText(); - } else { - firstMultiJIDPage_->service_->clear(); - foreach (JID jid, services) { - firstMultiJIDPage_->service_->addItem(P2QSTRING(jid.toString())); - } - firstMultiJIDPage_->service_->clearEditText(); - } + if (type_ == AddContact) { + firstPage_->service_->clear(); + foreach (JID jid, services) { + firstPage_->service_->addItem(P2QSTRING(jid.toString())); + } + firstPage_->service_->clearEditText(); + } else { + firstMultiJIDPage_->service_->clear(); + foreach (JID jid, services) { + firstMultiJIDPage_->service_->addItem(P2QSTRING(jid.toString())); + } + firstMultiJIDPage_->service_->clearEditText(); + } } void QtUserSearchWindow::setSearchFields(boost::shared_ptr<SearchPayload> fields) { - fieldsPage_->fetchingThrobber_->hide(); - fieldsPage_->fetchingThrobber_->movie()->stop(); - fieldsPage_->fetchingLabel_->hide(); - - fieldsPage_->instructionsLabel_->setText(fields->getInstructions() ? P2QSTRING(fields->getInstructions().get()) : "Enter search terms"); - if (fields->getForm()) { - fieldsPage_->setFormWidget(new QtFormWidget(fields->getForm(), fieldsPage_)); - } else { - fieldsPage_->setFormWidget(NULL); - bool enabled[8] = {!!fields->getNick(), !!fields->getNick(), !!fields->getFirst(), !!fields->getFirst(), !!fields->getLast(), !!fields->getLast(), !!fields->getEMail(), !!fields->getEMail()}; - QWidget* legacySearchWidgets[8] = {fieldsPage_->nickInputLabel_, fieldsPage_->nickInput_, fieldsPage_->firstInputLabel_, fieldsPage_->firstInput_, fieldsPage_->lastInputLabel_, fieldsPage_->lastInput_, fieldsPage_->emailInputLabel_, fieldsPage_->emailInput_}; - for (int i = 0; i < 8; i++) { - legacySearchWidgets[i]->setVisible(enabled[i]); - legacySearchWidgets[i]->setEnabled(enabled[i]); - } - } - fieldsPage_->emitCompletenessCheck(); + fieldsPage_->fetchingThrobber_->hide(); + fieldsPage_->fetchingThrobber_->movie()->stop(); + fieldsPage_->fetchingLabel_->hide(); + + fieldsPage_->instructionsLabel_->setText(fields->getInstructions() ? P2QSTRING(fields->getInstructions().get()) : "Enter search terms"); + if (fields->getForm()) { + fieldsPage_->setFormWidget(new QtFormWidget(fields->getForm(), fieldsPage_)); + } else { + fieldsPage_->setFormWidget(NULL); + bool enabled[8] = {!!fields->getNick(), !!fields->getNick(), !!fields->getFirst(), !!fields->getFirst(), !!fields->getLast(), !!fields->getLast(), !!fields->getEMail(), !!fields->getEMail()}; + QWidget* legacySearchWidgets[8] = {fieldsPage_->nickInputLabel_, fieldsPage_->nickInput_, fieldsPage_->firstInputLabel_, fieldsPage_->firstInput_, fieldsPage_->lastInputLabel_, fieldsPage_->lastInput_, fieldsPage_->emailInputLabel_, fieldsPage_->emailInput_}; + for (int i = 0; i < 8; i++) { + legacySearchWidgets[i]->setVisible(enabled[i]); + legacySearchWidgets[i]->setEnabled(enabled[i]); + } + } + fieldsPage_->emitCompletenessCheck(); } void QtUserSearchWindow::setNameSuggestions(const std::vector<std::string>& suggestions) { - if (detailsPage_) { - detailsPage_->setNameSuggestions(suggestions); - } + if (detailsPage_) { + detailsPage_->setNameSuggestions(suggestions); + } } void QtUserSearchWindow::prepopulateJIDAndName(const JID& jid, const std::string& name) { - firstPage_->jid_->setText(P2QSTRING(jid.toBare().toString())); - detailsPage_->setJID(jid); - lastPage_ = 1; - restart(); - next(); - detailsPage_->setName(name); + firstPage_->jid_->setText(P2QSTRING(jid.toBare().toString())); + detailsPage_->setJID(jid); + lastPage_ = 1; + restart(); + next(); + detailsPage_->setName(name); } void QtUserSearchWindow::setContactSuggestions(const std::vector<Contact::ref>& suggestions) { - if (type_ == AddContact) { - firstPage_->jid_->setSuggestions(suggestions); - } else { - firstMultiJIDPage_->jid_->setSuggestions(suggestions); - } + if (type_ == AddContact) { + firstPage_->jid_->setSuggestions(suggestions); + } else { + firstMultiJIDPage_->jid_->setSuggestions(suggestions); + } } void QtUserSearchWindow::setJIDs(const std::vector<JID> &jids) { - foreach(JID jid, jids) { - addSearchedJIDToList(boost::make_shared<Contact>("", jid, StatusShow::None, "")); - } - onJIDUpdateRequested(jids); + foreach(JID jid, jids) { + addSearchedJIDToList(boost::make_shared<Contact>("", jid, StatusShow::None, "")); + } + onJIDUpdateRequested(jids); } void QtUserSearchWindow::setRoomJID(const JID& roomJID) { - roomJID_ = roomJID; + roomJID_ = roomJID; } std::string QtUserSearchWindow::getReason() const { - return Q2PSTRING(firstMultiJIDPage_->reason_->text()); + return Q2PSTRING(firstMultiJIDPage_->reason_->text()); } std::vector<JID> QtUserSearchWindow::getJIDs() const { - std::vector<JID> jids; - foreach (Contact::ref contact, contactVector_) { - jids.push_back(contact->jid); - } - return jids; + std::vector<JID> jids; + foreach (Contact::ref contact, contactVector_) { + jids.push_back(contact->jid); + } + return jids; } void QtUserSearchWindow::setCanStartImpromptuChats(bool supportsImpromptu) { - supportsImpromptu_ = supportsImpromptu; - if (type_ == ChatToContact) { - firstMultiJIDPage_->contactList_->setMaximumNoOfContactsToOne(!supportsImpromptu_); - } + supportsImpromptu_ = supportsImpromptu; + if (type_ == ChatToContact) { + firstMultiJIDPage_->contactList_->setMaximumNoOfContactsToOne(!supportsImpromptu_); + } } void QtUserSearchWindow::updateContacts(const std::vector<Contact::ref>& contacts) { - if (type_ != AddContact) { - firstMultiJIDPage_->contactList_->updateContacts(contacts); - } + if (type_ != AddContact) { + firstMultiJIDPage_->contactList_->updateContacts(contacts); + } } void QtUserSearchWindow::addContacts(const std::vector<Contact::ref>& contacts) { - if (type_ != AddContact) { - /* prevent duplicate JIDs from appearing in the contact list */ - foreach (Contact::ref newContact, contacts) { - bool found = false; - foreach (Contact::ref oldContact, contactVector_) { - if (newContact->jid == oldContact->jid) { - found = true; - break; - } - } - if (!found) { - contactVector_.push_back(newContact); - } - } - if (!supportsImpromptu_ && contactVector_.size() > 1) { - contactVector_.resize(1); /* can't chat with more than one user */ - } - firstMultiJIDPage_->contactList_->setList(contactVector_); - firstMultiJIDPage_->emitCompletenessCheck(); - if (type_ == ChatToContact) { - firstMultiJIDPage_->groupBox->setEnabled(supportsImpromptu_ ? true : (contactVector_.size() < 1)); - } - } + if (type_ != AddContact) { + /* prevent duplicate JIDs from appearing in the contact list */ + foreach (Contact::ref newContact, contacts) { + bool found = false; + foreach (Contact::ref oldContact, contactVector_) { + if (newContact->jid == oldContact->jid) { + found = true; + break; + } + } + if (!found) { + contactVector_.push_back(newContact); + } + } + if (!supportsImpromptu_ && contactVector_.size() > 1) { + contactVector_.resize(1); /* can't chat with more than one user */ + } + firstMultiJIDPage_->contactList_->setList(contactVector_); + firstMultiJIDPage_->emitCompletenessCheck(); + if (type_ == ChatToContact) { + firstMultiJIDPage_->groupBox->setEnabled(supportsImpromptu_ ? true : (contactVector_.size() < 1)); + } + } } void QtUserSearchWindow::setCanSupplyDescription(bool allowed) { - firstMultiJIDPage_->label->setVisible(allowed); - firstMultiJIDPage_->reason_->setVisible(allowed); + firstMultiJIDPage_->label->setVisible(allowed); + firstMultiJIDPage_->reason_->setVisible(allowed); } void QtUserSearchWindow::handleAddViaSearch() { - searchNext_ = true; - next(); + searchNext_ = true; + next(); } void QtUserSearchWindow::handleListChanged(std::vector<Contact::ref> list) { - contactVector_ = list; - if (type_ == ChatToContact) { - firstMultiJIDPage_->groupBox->setEnabled(supportsImpromptu_ ? 1 : (contactVector_.size() < 1)); - } + contactVector_ = list; + if (type_ == ChatToContact) { + firstMultiJIDPage_->groupBox->setEnabled(supportsImpromptu_ ? 1 : (contactVector_.size() < 1)); + } } void QtUserSearchWindow::handleJIDsAdded(std::vector<JID> jids) { - onJIDAddRequested(jids); + onJIDAddRequested(jids); } void QtUserSearchWindow::setResults(const std::vector<UserSearchResult>& results) { - UserSearchModel *newModel = new UserSearchModel(); - newModel->setResults(results); - resultsPage_->results_->setModel(newModel); - resultsPage_->results_->setItemDelegate(delegate_); - resultsPage_->results_->setHeaderHidden(true); - delete model_; - model_ = newModel; - resultsPage_->setNoResults(model_->rowCount() == 0); - resultsPage_->emitCompletenessCheck(); + UserSearchModel *newModel = new UserSearchModel(); + newModel->setResults(results); + resultsPage_->results_->setModel(newModel); + resultsPage_->results_->setItemDelegate(delegate_); + resultsPage_->results_->setHeaderHidden(true); + delete model_; + model_ = newModel; + resultsPage_->setNoResults(model_->rowCount() == 0); + resultsPage_->emitCompletenessCheck(); } void QtUserSearchWindow::setResultsForm(Form::ref results) { - QtFormResultItemModel *newModel = new QtFormResultItemModel(this); - newModel->setForm(results); - resultsPage_->results_->setModel(newModel); - resultsPage_->results_->setItemDelegate(new QItemDelegate()); - resultsPage_->results_->setHeaderHidden(false); + QtFormResultItemModel *newModel = new QtFormResultItemModel(this); + newModel->setForm(results); + resultsPage_->results_->setModel(newModel); + resultsPage_->results_->setItemDelegate(new QItemDelegate()); + resultsPage_->results_->setHeaderHidden(false); #if QT_VERSION >= 0x050000 - resultsPage_->results_->header()->setSectionResizeMode(QHeaderView::ResizeToContents); + resultsPage_->results_->header()->setSectionResizeMode(QHeaderView::ResizeToContents); #else - resultsPage_->results_->header()->setResizeMode(QHeaderView::ResizeToContents); + resultsPage_->results_->header()->setResizeMode(QHeaderView::ResizeToContents); #endif - delete model_; - model_ = newModel; - resultsPage_->setNoResults(model_->rowCount() == 0); - resultsPage_->emitCompletenessCheck(); + delete model_; + model_ = newModel; + resultsPage_->setNoResults(model_->rowCount() == 0); + resultsPage_->emitCompletenessCheck(); } void QtUserSearchWindow::setSelectedService(const JID& jid) { - myServer_ = jid; + myServer_ = jid; } void QtUserSearchWindow::handleJIDEditingDone() { - onJIDEditFieldChanged(JID(Q2PSTRING(firstPage_->jid_->text()))); + onJIDEditFieldChanged(JID(Q2PSTRING(firstPage_->jid_->text()))); } void QtUserSearchWindow::setFirstPage(QString title) { - if (page(1) != 0) { - removePage(1); - } - if (type_ == AddContact) { - firstPage_ = new QtUserSearchFirstPage(type_, title.isEmpty() ? firstPage_->title() : title, settings_); - connect(firstPage_->jid_, SIGNAL(textEdited(QString)), this, SLOT(handleContactSuggestionRequested(QString))); - connect(firstPage_->jid_, SIGNAL(textEdited(QString)), this, SLOT(handleJIDEditingDone()), Qt::UniqueConnection); - firstPage_->jid_->onUserSelected.connect(boost::bind(&QtUserSearchWindow::handleOnSearchedJIDSelected, this, _1)); - connect(firstPage_->byJID_, SIGNAL(toggled(bool)), this, SLOT(handleFirstPageRadioChange())); - connect(firstPage_->byLocalSearch_, SIGNAL(toggled(bool)), this, SLOT(handleFirstPageRadioChange())); - connect(firstPage_->byRemoteSearch_, SIGNAL(toggled(bool)), this, SLOT(handleFirstPageRadioChange())); + if (page(1) != 0) { + removePage(1); + } + if (type_ == AddContact) { + firstPage_ = new QtUserSearchFirstPage(type_, title.isEmpty() ? firstPage_->title() : title, settings_); + connect(firstPage_->jid_, SIGNAL(textEdited(QString)), this, SLOT(handleContactSuggestionRequested(QString))); + connect(firstPage_->jid_, SIGNAL(textEdited(QString)), this, SLOT(handleJIDEditingDone()), Qt::UniqueConnection); + firstPage_->jid_->onUserSelected.connect(boost::bind(&QtUserSearchWindow::handleOnSearchedJIDSelected, this, _1)); + connect(firstPage_->byJID_, SIGNAL(toggled(bool)), this, SLOT(handleFirstPageRadioChange())); + connect(firstPage_->byLocalSearch_, SIGNAL(toggled(bool)), this, SLOT(handleFirstPageRadioChange())); + connect(firstPage_->byRemoteSearch_, SIGNAL(toggled(bool)), this, SLOT(handleFirstPageRadioChange())); #if QT_VERSION >= 0x040700 - firstPage_->jid_->setPlaceholderText(tr("alice@wonderland.lit")); + firstPage_->jid_->setPlaceholderText(tr("alice@wonderland.lit")); #endif - firstPage_->service_->setEnabled(false); - setPage(1, firstPage_); - } else { - firstMultiJIDPage_ = new QtUserSearchFirstMultiJIDPage(type_, title.isEmpty() ? firstMultiJIDPage_->title() : title, settings_); - connect(firstMultiJIDPage_->addContactButton_, SIGNAL(clicked()), this, SLOT(addContact())); - connect(firstMultiJIDPage_->jid_, SIGNAL(textEdited(QString)), this, SLOT(handleContactSuggestionRequested(QString))); - firstMultiJIDPage_->jid_->onUserSelected.connect(boost::bind(&QtUserSearchWindow::addSearchedJIDToList, this, _1)); - connect(firstMultiJIDPage_->addViaSearchButton_, SIGNAL(clicked()), this, SLOT(handleAddViaSearch())); - 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>))); - connect(firstMultiJIDPage_, SIGNAL(onJIDsDropped(std::vector<JID>)), this, SLOT(handleJIDsAdded(std::vector<JID>))); - setPage(1, firstMultiJIDPage_); - } + firstPage_->service_->setEnabled(false); + setPage(1, firstPage_); + } else { + firstMultiJIDPage_ = new QtUserSearchFirstMultiJIDPage(type_, title.isEmpty() ? firstMultiJIDPage_->title() : title, settings_); + connect(firstMultiJIDPage_->addContactButton_, SIGNAL(clicked()), this, SLOT(addContact())); + connect(firstMultiJIDPage_->jid_, SIGNAL(textEdited(QString)), this, SLOT(handleContactSuggestionRequested(QString))); + firstMultiJIDPage_->jid_->onUserSelected.connect(boost::bind(&QtUserSearchWindow::addSearchedJIDToList, this, _1)); + connect(firstMultiJIDPage_->addViaSearchButton_, SIGNAL(clicked()), this, SLOT(handleAddViaSearch())); + 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>))); + connect(firstMultiJIDPage_, SIGNAL(onJIDsDropped(std::vector<JID>)), this, SLOT(handleJIDsAdded(std::vector<JID>))); + setPage(1, firstMultiJIDPage_); + } } void QtUserSearchWindow::setSecondPage() { - if (page(2) != 0) { - removePage(2); - } - fieldsPage_ = new QtUserSearchFieldsPage(); - fieldsPage_->fetchingThrobber_->setMovie(new QMovie(":/icons/throbber.gif", QByteArray(), this)); - fieldsPage_->fetchingThrobber_->movie()->stop(); - setPage(2, fieldsPage_); + if (page(2) != 0) { + removePage(2); + } + fieldsPage_ = new QtUserSearchFieldsPage(); + fieldsPage_->fetchingThrobber_->setMovie(new QMovie(":/icons/throbber.gif", QByteArray(), this)); + fieldsPage_->fetchingThrobber_->movie()->stop(); + setPage(2, fieldsPage_); } void QtUserSearchWindow::setThirdPage() { - if (page(3) != 0) { - removePage(3); - } - resultsPage_ = new QtUserSearchResultsPage(); + if (page(3) != 0) { + removePage(3); + } + resultsPage_ = new QtUserSearchResultsPage(); #ifdef SWIFT_PLATFORM_MACOSX - resultsPage_->results_->setAlternatingRowColors(true); + resultsPage_->results_->setAlternatingRowColors(true); #endif - if (type_ == AddContact) { - connect(resultsPage_, SIGNAL(onUserTriggersContinue()), this, SLOT(next())); - } - else { - connect(resultsPage_, SIGNAL(onUserTriggersContinue()), this, SLOT(next())); - } - setPage(3, resultsPage_); + if (type_ == AddContact) { + connect(resultsPage_, SIGNAL(onUserTriggersContinue()), this, SLOT(next())); + } + else { + connect(resultsPage_, SIGNAL(onUserTriggersContinue()), this, SLOT(next())); + } + setPage(3, resultsPage_); } void QtUserSearchWindow::clearForm() { - fieldsPage_->fetchingThrobber_->show(); - fieldsPage_->fetchingThrobber_->movie()->start(); - fieldsPage_->fetchingLabel_->show(); - QWidget* legacySearchWidgets[8] = {fieldsPage_->nickInputLabel_, fieldsPage_->nickInput_, fieldsPage_->firstInputLabel_, fieldsPage_->firstInput_, fieldsPage_->lastInputLabel_, fieldsPage_->lastInput_, fieldsPage_->emailInputLabel_, fieldsPage_->emailInput_}; - for (int i = 0; i < 8; i++) { - legacySearchWidgets[i]->hide(); - if (QLineEdit* edit = qobject_cast<QLineEdit*>(legacySearchWidgets[i])) { - edit->clear(); - } - } - fieldsPage_->emitCompletenessCheck(); + fieldsPage_->fetchingThrobber_->show(); + fieldsPage_->fetchingThrobber_->movie()->start(); + fieldsPage_->fetchingLabel_->show(); + QWidget* legacySearchWidgets[8] = {fieldsPage_->nickInputLabel_, fieldsPage_->nickInput_, fieldsPage_->firstInputLabel_, fieldsPage_->firstInput_, fieldsPage_->lastInputLabel_, fieldsPage_->lastInput_, fieldsPage_->emailInputLabel_, fieldsPage_->emailInput_}; + for (int i = 0; i < 8; i++) { + legacySearchWidgets[i]->hide(); + if (QLineEdit* edit = qobject_cast<QLineEdit*>(legacySearchWidgets[i])) { + edit->clear(); + } + } + fieldsPage_->emitCompletenessCheck(); } void QtUserSearchWindow::clear() { - QString howText; - if (type_ == AddContact) { - firstPage_->errorLabel_->setVisible(false); - howText = QString(tr("How would you like to find the user to add?")); - firstPage_->howLabel_->setText(howText); - firstPage_->byJID_->setChecked(true); - handleFirstPageRadioChange(); - } else { - contactVector_.clear(); - firstMultiJIDPage_->contactList_->setList(contactVector_); - firstMultiJIDPage_->errorLabel_->setVisible(false); - if (type_ == ChatToContact) { - howText = QString(tr("List of participants:")); - } else if (type_ == InviteToChat) { - howText = QString(tr("Who do you want to invite to the chat?")); - } - firstMultiJIDPage_->howLabel_->setText(howText); - } - clearForm(); - resultsPage_->results_->setModel(NULL); - delete model_; - model_ = NULL; - restart(); - lastPage_ = 1; + QString howText; + if (type_ == AddContact) { + firstPage_->errorLabel_->setVisible(false); + howText = QString(tr("How would you like to find the user to add?")); + firstPage_->howLabel_->setText(howText); + firstPage_->byJID_->setChecked(true); + handleFirstPageRadioChange(); + } else { + contactVector_.clear(); + firstMultiJIDPage_->contactList_->setList(contactVector_); + firstMultiJIDPage_->errorLabel_->setVisible(false); + if (type_ == ChatToContact) { + howText = QString(tr("List of participants:")); + } else if (type_ == InviteToChat) { + howText = QString(tr("Who do you want to invite to the chat?")); + } + firstMultiJIDPage_->howLabel_->setText(howText); + } + clearForm(); + resultsPage_->results_->setModel(NULL); + delete model_; + model_ = NULL; + restart(); + lastPage_ = 1; } void QtUserSearchWindow::setError(const QString& error) { - if (error.isEmpty()) { - if (type_ == AddContact) { - firstPage_->errorLabel_->hide(); - } else { - firstMultiJIDPage_->errorLabel_->hide(); - } - } - else { - if (type_ == AddContact) { - firstPage_->errorLabel_->setText(QString("<font color='red'>%1</font>").arg(error)); - firstPage_->errorLabel_->show(); - } else { - firstMultiJIDPage_->errorLabel_->setText(QString("<font color='red'>%1</font>").arg(error)); - firstMultiJIDPage_->errorLabel_->show(); - } - restart(); - lastPage_ = 1; - } + if (error.isEmpty()) { + if (type_ == AddContact) { + firstPage_->errorLabel_->hide(); + } else { + firstMultiJIDPage_->errorLabel_->hide(); + } + } + else { + if (type_ == AddContact) { + firstPage_->errorLabel_->setText(QString("<font color='red'>%1</font>").arg(error)); + firstPage_->errorLabel_->show(); + } else { + firstMultiJIDPage_->errorLabel_->setText(QString("<font color='red'>%1</font>").arg(error)); + firstMultiJIDPage_->errorLabel_->show(); + } + restart(); + lastPage_ = 1; + } } void QtUserSearchWindow::setSearchError(bool error) { - if (error) { - setError(tr("Error while searching")); - } + if (error) { + setError(tr("Error while searching")); + } } void QtUserSearchWindow::setServerSupportsSearch(bool support) { - if (!support) { - setError(tr("This server doesn't support searching for users.")); - } + if (!support) { + setError(tr("This server doesn't support searching for users.")); + } } } diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.h b/Swift/QtUI/UserSearch/QtUserSearchWindow.h index 81d6e85..bcef0b9 100644 --- a/Swift/QtUI/UserSearch/QtUserSearchWindow.h +++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.h @@ -15,92 +15,92 @@ #include <Swift/QtUI/UserSearch/ui_QtUserSearchWizard.h> namespace Swift { - class UserSearchModel; - class UserSearchDelegate; - class UserSearchResult; - class UIEventStream; - class QtUserSearchFirstPage; - class QtUserSearchFirstMultiJIDPage; - class QtUserSearchFieldsPage; - class QtUserSearchResultsPage; - class QtUserSearchDetailsPage; - class QtFormResultItemModel; - class SettingsProvider; + class UserSearchModel; + class UserSearchDelegate; + class UserSearchResult; + class UIEventStream; + class QtUserSearchFirstPage; + class QtUserSearchFirstMultiJIDPage; + class QtUserSearchFieldsPage; + class QtUserSearchResultsPage; + class QtUserSearchDetailsPage; + class QtFormResultItemModel; + class SettingsProvider; - class QtUserSearchWindow : public QWizard, public UserSearchWindow, private Ui::QtUserSearchWizard { - Q_OBJECT - public: - QtUserSearchWindow(UIEventStream* eventStream, UserSearchWindow::Type type, const std::set<std::string>& groups, SettingsProvider* settingsProvider); - virtual ~QtUserSearchWindow(); + class QtUserSearchWindow : public QWizard, public UserSearchWindow, private Ui::QtUserSearchWizard { + Q_OBJECT + public: + QtUserSearchWindow(UIEventStream* eventStream, UserSearchWindow::Type type, const std::set<std::string>& groups, SettingsProvider* settingsProvider); + virtual ~QtUserSearchWindow(); - virtual void addSavedServices(const std::vector<JID>& services); + virtual void addSavedServices(const std::vector<JID>& services); - virtual void clear(); - virtual void show(); - virtual void setResults(const std::vector<UserSearchResult>& results); - virtual void setResultsForm(Form::ref results); - virtual void setSelectedService(const JID& jid); - virtual void setServerSupportsSearch(bool error); - virtual void setSearchError(bool error); - virtual void setSearchFields(boost::shared_ptr<SearchPayload> fields); - virtual void setNameSuggestions(const std::vector<std::string>& suggestions); - virtual void prepopulateJIDAndName(const JID& jid, const std::string& name); - virtual void setContactSuggestions(const std::vector<Contact::ref>& suggestions); - virtual void setJIDs(const std::vector<JID> &jids); - virtual void setRoomJID(const JID &roomJID); - virtual std::string getReason() const; - virtual std::vector<JID> getJIDs() const; - virtual void setCanStartImpromptuChats(bool supportsImpromptu); - virtual void updateContacts(const std::vector<Contact::ref> &contacts); - virtual void addContacts(const std::vector<Contact::ref>& contacts); - virtual void setCanSupplyDescription(bool allowed); - virtual void setWarning(const boost::optional<std::string>& message); + virtual void clear(); + virtual void show(); + virtual void setResults(const std::vector<UserSearchResult>& results); + virtual void setResultsForm(Form::ref results); + virtual void setSelectedService(const JID& jid); + virtual void setServerSupportsSearch(bool error); + virtual void setSearchError(bool error); + virtual void setSearchFields(boost::shared_ptr<SearchPayload> fields); + virtual void setNameSuggestions(const std::vector<std::string>& suggestions); + virtual void prepopulateJIDAndName(const JID& jid, const std::string& name); + virtual void setContactSuggestions(const std::vector<Contact::ref>& suggestions); + virtual void setJIDs(const std::vector<JID> &jids); + virtual void setRoomJID(const JID &roomJID); + virtual std::string getReason() const; + virtual std::vector<JID> getJIDs() const; + virtual void setCanStartImpromptuChats(bool supportsImpromptu); + virtual void updateContacts(const std::vector<Contact::ref> &contacts); + virtual void addContacts(const std::vector<Contact::ref>& contacts); + virtual void setCanSupplyDescription(bool allowed); + virtual void setWarning(const boost::optional<std::string>& message); - protected: - virtual int nextId() const; + protected: + virtual int nextId() const; - private slots: - void handleFirstPageRadioChange(); - virtual void handleCurrentChanged(int); - virtual void handleAccepted(); - void handleContactSuggestionRequested(const QString& text); - void addContact(); - void handleAddViaSearch(); - void handleListChanged(std::vector<Contact::ref> list); - void handleJIDsAdded(std::vector<JID> jids); - void handleJIDEditingDone(); + private slots: + void handleFirstPageRadioChange(); + virtual void handleCurrentChanged(int); + virtual void handleAccepted(); + void handleContactSuggestionRequested(const QString& text); + void addContact(); + void handleAddViaSearch(); + void handleListChanged(std::vector<Contact::ref> list); + void handleJIDsAdded(std::vector<JID> jids); + void handleJIDEditingDone(); - private: - void setFirstPage(QString title = ""); - void setSecondPage(); - void setThirdPage(); + private: + void setFirstPage(QString title = ""); + void setSecondPage(); + void setThirdPage(); - private: - void clearForm(); - void setError(const QString& error); - JID getServerToSearch(); - void handleSearch(); - JID getContactJID() const; - Contact::ref getContact() const; - void addSearchedJIDToList(const Contact::ref& contact); - void handleOnSearchedJIDSelected(const Contact::ref& contact); + private: + void clearForm(); + void setError(const QString& error); + JID getServerToSearch(); + void handleSearch(); + JID getContactJID() const; + Contact::ref getContact() const; + void addSearchedJIDToList(const Contact::ref& contact); + void handleOnSearchedJIDSelected(const Contact::ref& contact); - private: - UIEventStream* eventStream_; - UserSearchWindow::Type type_; - QAbstractItemModel* model_; - UserSearchDelegate* delegate_; - QtUserSearchFirstPage* firstPage_; - QtUserSearchFirstMultiJIDPage* firstMultiJIDPage_; - QtUserSearchFieldsPage* fieldsPage_; - QtUserSearchResultsPage* resultsPage_; - QtUserSearchDetailsPage* detailsPage_; - JID myServer_; - JID roomJID_; - int lastPage_; - std::vector<Contact::ref> contactVector_; - SettingsProvider* settings_; - bool searchNext_; - bool supportsImpromptu_; - }; + private: + UIEventStream* eventStream_; + UserSearchWindow::Type type_; + QAbstractItemModel* model_; + UserSearchDelegate* delegate_; + QtUserSearchFirstPage* firstPage_; + QtUserSearchFirstMultiJIDPage* firstMultiJIDPage_; + QtUserSearchFieldsPage* fieldsPage_; + QtUserSearchResultsPage* resultsPage_; + QtUserSearchDetailsPage* detailsPage_; + JID myServer_; + JID roomJID_; + int lastPage_; + std::vector<Contact::ref> contactVector_; + SettingsProvider* settings_; + bool searchNext_; + bool supportsImpromptu_; + }; } diff --git a/Swift/QtUI/UserSearch/UserSearchDelegate.cpp b/Swift/QtUI/UserSearch/UserSearchDelegate.cpp index 1ac9eb3..8c7ca9a 100644 --- a/Swift/QtUI/UserSearch/UserSearchDelegate.cpp +++ b/Swift/QtUI/UserSearch/UserSearchDelegate.cpp @@ -27,44 +27,44 @@ UserSearchDelegate::~UserSearchDelegate() { } QSize UserSearchDelegate::sizeHint(const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/ ) const { - //UserSearchItem* item = static_cast<UserSearchItem*>(index.internalPointer()); - QFontMetrics nameMetrics(common_.nameFont); - QFontMetrics statusMetrics(common_.detailFont); - int sizeByText = 2 * common_.verticalMargin + nameMetrics.height() + statusMetrics.height(); - return QSize(150, sizeByText); + //UserSearchItem* item = static_cast<UserSearchItem*>(index.internalPointer()); + QFontMetrics nameMetrics(common_.nameFont); + QFontMetrics statusMetrics(common_.detailFont); + int sizeByText = 2 * common_.verticalMargin + nameMetrics.height() + statusMetrics.height(); + return QSize(150, sizeByText); } -void UserSearchDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { - UserSearchResult* item = static_cast<UserSearchResult*>(index.internalPointer()); - painter->save(); - QRect fullRegion(option.rect); - if (option.state & QStyle::State_Selected) { - painter->fillRect(fullRegion, option.palette.highlight()); - painter->setPen(option.palette.highlightedText().color()); - } - else { - QColor nameColor = UserSearchModel::data(item, Qt::TextColorRole).value<QColor> (); - painter->setPen(QPen(nameColor)); - } - - QFontMetrics nameMetrics(common_.nameFont); - painter->setFont(common_.nameFont); - int extraFontWidth = nameMetrics.width("H"); - int leftOffset = common_.horizontalMargin * 2 + extraFontWidth / 2; - QRect textRegion(fullRegion.adjusted(leftOffset, 0, 0, 0)); - - int nameHeight = nameMetrics.height() + common_.verticalMargin; - QRect nameRegion(textRegion.adjusted(0, common_.verticalMargin, 0, 0)); - - painter->drawText(nameRegion, Qt::AlignTop, UserSearchModel::data(item, Qt::DisplayRole).toString()); - - painter->setFont(common_.detailFont); - painter->setPen(QPen(QColor(160, 160, 160))); - - QRect detailRegion(textRegion.adjusted(0, nameHeight, 0, 0)); - painter->drawText(detailRegion, Qt::AlignTop, UserSearchModel::data(item, UserSearchModel::DetailTextRole).toString()); - - painter->restore(); +void UserSearchDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { + UserSearchResult* item = static_cast<UserSearchResult*>(index.internalPointer()); + painter->save(); + QRect fullRegion(option.rect); + if (option.state & QStyle::State_Selected) { + painter->fillRect(fullRegion, option.palette.highlight()); + painter->setPen(option.palette.highlightedText().color()); + } + else { + QColor nameColor = UserSearchModel::data(item, Qt::TextColorRole).value<QColor> (); + painter->setPen(QPen(nameColor)); + } + + QFontMetrics nameMetrics(common_.nameFont); + painter->setFont(common_.nameFont); + int extraFontWidth = nameMetrics.width("H"); + int leftOffset = common_.horizontalMargin * 2 + extraFontWidth / 2; + QRect textRegion(fullRegion.adjusted(leftOffset, 0, 0, 0)); + + int nameHeight = nameMetrics.height() + common_.verticalMargin; + QRect nameRegion(textRegion.adjusted(0, common_.verticalMargin, 0, 0)); + + painter->drawText(nameRegion, Qt::AlignTop, UserSearchModel::data(item, Qt::DisplayRole).toString()); + + painter->setFont(common_.detailFont); + painter->setPen(QPen(QColor(160, 160, 160))); + + QRect detailRegion(textRegion.adjusted(0, nameHeight, 0, 0)); + painter->drawText(detailRegion, Qt::AlignTop, UserSearchModel::data(item, UserSearchModel::DetailTextRole).toString()); + + painter->restore(); } } diff --git a/Swift/QtUI/UserSearch/UserSearchDelegate.h b/Swift/QtUI/UserSearch/UserSearchDelegate.h index 92fa0e8..8234689 100644 --- a/Swift/QtUI/UserSearch/UserSearchDelegate.h +++ b/Swift/QtUI/UserSearch/UserSearchDelegate.h @@ -13,18 +13,18 @@ #include <Swift/QtUI/Roster/DelegateCommons.h> namespace Swift { - class UserSearchDelegate : public QStyledItemDelegate { - Q_OBJECT - - public: - UserSearchDelegate(QObject* parent = 0); - virtual ~UserSearchDelegate(); - - void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; - QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index ) const; - private: - DelegateCommons common_; - }; + class UserSearchDelegate : public QStyledItemDelegate { + Q_OBJECT + + public: + UserSearchDelegate(QObject* parent = 0); + virtual ~UserSearchDelegate(); + + void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; + QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index ) const; + private: + DelegateCommons common_; + }; } diff --git a/Swift/QtUI/UserSearch/UserSearchModel.cpp b/Swift/QtUI/UserSearch/UserSearchModel.cpp index ba6ede3..b6ac3cf 100644 --- a/Swift/QtUI/UserSearch/UserSearchModel.cpp +++ b/Swift/QtUI/UserSearch/UserSearchModel.cpp @@ -14,76 +14,76 @@ UserSearchModel::UserSearchModel() { } void UserSearchModel::clear() { - emit layoutAboutToBeChanged(); - results_.clear(); - emit layoutChanged(); + emit layoutAboutToBeChanged(); + results_.clear(); + emit layoutChanged(); } void UserSearchModel::setResults(const std::vector<UserSearchResult>& results) { - clear(); - emit layoutAboutToBeChanged(); - results_ = results; - emit layoutChanged(); + clear(); + emit layoutAboutToBeChanged(); + results_ = results; + emit layoutChanged(); } int UserSearchModel::columnCount(const QModelIndex& /*parent*/) const { - return 1; + return 1; } QVariant UserSearchModel::data(const QModelIndex& index, int role) const { - if (!index.isValid()) return QVariant(); - UserSearchResult* result = static_cast<UserSearchResult*>(index.internalPointer()); - return data(result, role); + if (!index.isValid()) return QVariant(); + UserSearchResult* result = static_cast<UserSearchResult*>(index.internalPointer()); + return data(result, role); } QVariant UserSearchModel::data(UserSearchResult* item, int role) { - switch (role) { - case Qt::DisplayRole: return QVariant(nameLine(item)); - case DetailTextRole: return QVariant(detailLine(item)); - default: return QVariant(); - } + switch (role) { + case Qt::DisplayRole: return QVariant(nameLine(item)); + case DetailTextRole: return QVariant(detailLine(item)); + default: return QVariant(); + } } QString UserSearchModel::nameLine(UserSearchResult* item) { - QString result; - const std::map<std::string, std::string> fields = item->getFields(); - std::map<std::string, std::string>::const_iterator first = fields.find("first"); - if (first != fields.end()) { - result += P2QSTRING((*first).second); - } - std::map<std::string, std::string>::const_iterator last = fields.find("last"); - if (last != fields.end()) { - if (!result.isEmpty()) { - result += " "; - } - result += P2QSTRING((*last).second); - } - if (result.isEmpty()) { - result = P2QSTRING(item->getJID().toString()); - } - return result; + QString result; + const std::map<std::string, std::string> fields = item->getFields(); + std::map<std::string, std::string>::const_iterator first = fields.find("first"); + if (first != fields.end()) { + result += P2QSTRING((*first).second); + } + std::map<std::string, std::string>::const_iterator last = fields.find("last"); + if (last != fields.end()) { + if (!result.isEmpty()) { + result += " "; + } + result += P2QSTRING((*last).second); + } + if (result.isEmpty()) { + result = P2QSTRING(item->getJID().toString()); + } + return result; } QString UserSearchModel::detailLine(UserSearchResult* item) { - return P2QSTRING(item->getJID().toString()); + return P2QSTRING(item->getJID().toString()); } QModelIndex UserSearchModel::index(int row, int column, const QModelIndex & parent) const { - if (!hasIndex(row, column, parent)) { - return QModelIndex(); - } - return row < static_cast<int>(results_.size()) ? createIndex(row, column, reinterpret_cast<void*>(const_cast<UserSearchResult*>(&(results_[row])))) : QModelIndex(); + if (!hasIndex(row, column, parent)) { + return QModelIndex(); + } + return row < static_cast<int>(results_.size()) ? createIndex(row, column, reinterpret_cast<void*>(const_cast<UserSearchResult*>(&(results_[row])))) : QModelIndex(); } QModelIndex UserSearchModel::parent(const QModelIndex& /*index*/) const { - return QModelIndex(); + return QModelIndex(); } int UserSearchModel::rowCount(const QModelIndex& parentIndex) const { - if (!parentIndex.isValid()) { - return results_.size(); - } - return 0; + if (!parentIndex.isValid()) { + return results_.size(); + } + return 0; } } diff --git a/Swift/QtUI/UserSearch/UserSearchModel.h b/Swift/QtUI/UserSearch/UserSearchModel.h index db3ef3a..0a57b28 100644 --- a/Swift/QtUI/UserSearch/UserSearchModel.h +++ b/Swift/QtUI/UserSearch/UserSearchModel.h @@ -14,28 +14,28 @@ #include <Swift/Controllers/Chat/UserSearchController.h> namespace Swift { - class UserSearchModel : public QAbstractItemModel { - Q_OBJECT - public: - enum UserItemRoles { - DetailTextRole = Qt::UserRole/*, - AvatarRole = Qt::UserRole + 1, - PresenceIconRole = Qt::UserRole + 2, - StatusShowTypeRole = Qt::UserRole + 3*/ - }; - UserSearchModel(); - void clear(); - void setResults(const std::vector<UserSearchResult>& results); - int columnCount(const QModelIndex& parent = QModelIndex()) const; - QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; - static QVariant data(UserSearchResult* item, int role); - QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex& index) const; - int rowCount(const QModelIndex& parent = QModelIndex()) const; - private: - static QString nameLine(UserSearchResult* item); - static QString detailLine(UserSearchResult* item); - std::vector<UserSearchResult> results_; - }; + class UserSearchModel : public QAbstractItemModel { + Q_OBJECT + public: + enum UserItemRoles { + DetailTextRole = Qt::UserRole/*, + AvatarRole = Qt::UserRole + 1, + PresenceIconRole = Qt::UserRole + 2, + StatusShowTypeRole = Qt::UserRole + 3*/ + }; + UserSearchModel(); + void clear(); + void setResults(const std::vector<UserSearchResult>& results); + int columnCount(const QModelIndex& parent = QModelIndex()) const; + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + static QVariant data(UserSearchResult* item, int role); + QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex& index) const; + int rowCount(const QModelIndex& parent = QModelIndex()) const; + private: + static QString nameLine(UserSearchResult* item); + static QString detailLine(UserSearchResult* item); + std::vector<UserSearchResult> results_; + }; } |