summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/UserSearch')
-rw-r--r--Swift/QtUI/UserSearch/QtUserSearchDetailsPage.cpp18
-rw-r--r--Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h14
-rw-r--r--Swift/QtUI/UserSearch/QtUserSearchWindow.cpp71
-rw-r--r--Swift/QtUI/UserSearch/QtUserSearchWindow.h5
4 files changed, 75 insertions, 33 deletions
diff --git a/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.cpp b/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.cpp
index 779e547..da89a8d 100644
--- a/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.cpp
+++ b/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.cpp
@@ -2,34 +2,50 @@
* Copyright (c) 2011 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#include "Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h"
#include <QVBoxLayout>
+#include <boost/bind.hpp>
+
+#include <Swiften/Base/boost_bsignals.h>
+#include <Swiften/JID/JID.h>
+
#include <Swift/QtUI/QtContactEditWidget.h>
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);
}
+QtUserSearchDetailsPage::~QtUserSearchDetailsPage() {
+
+}
+
+void QtUserSearchDetailsPage::setJID(const JID& jid) {
+ contactJID = jid;
+}
+
+void QtUserSearchDetailsPage::setNameSuggestions(const std::vector<std::string>& nameSuggestions) {
+ editWidget->setNameSuggestions(nameSuggestions);
+}
+
std::set<std::string> QtUserSearchDetailsPage::getSelectedGroups() {
return editWidget->getSelectedGroups();
}
std::string QtUserSearchDetailsPage::getName() {
return editWidget->getName();
}
void QtUserSearchDetailsPage::clear() {
editWidget->clear();
}
-
}
diff --git a/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h b/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h
index 70afcba..9409493 100644
--- a/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h
+++ b/Swift/QtUI/UserSearch/QtUserSearchDetailsPage.h
@@ -1,33 +1,43 @@
/*
* Copyright (c) 2011 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#pragma once
#include <QWizardPage>
+
#include <set>
+#include <string>
+#include <vector>
+#include <Swiften/Elements/VCard.h>
+#include <Swiften/JID/JID.h>
#include <Swift/QtUI/UserSearch/ui_QtUserSearchFieldsPage.h>
namespace Swift {
class QtContactEditWidget;
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);
std::set<std::string> getSelectedGroups();
std::string getName();
void clear();
signals:
- void onUserTriggersFinish();
+ void onUserTriggersFinish();
private:
- QtContactEditWidget* editWidget;
+ QtContactEditWidget* editWidget;
+ JID contactJID;
};
}
diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
index 933612c..53eac07 100644
--- a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
+++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
@@ -84,56 +84,30 @@ void QtUserSearchWindow::handleCurrentChanged(int page) {
JID server = getServerToSearch();
clearForm();
onFormRequested(server);
}
else if (page == 3 && lastPage_ == 2) {
handleSearch();
}
else if (page == 4) {
detailsPage_->clear();
+ detailsPage_->setJID(getContactJID());
+ onNameSuggestionRequested(getContactJID());
}
lastPage_ = page;
}
JID QtUserSearchWindow::getServerToSearch() {
return firstPage_->byRemoteSearch_->isChecked() ? JID(Q2PSTRING(firstPage_->service_->currentText())) : myServer_;
}
void QtUserSearchWindow::handleAccepted() {
- JID jid;
- if (!firstPage_->byJID_->isChecked()) {
- 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 {
- 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 (boost::dynamic_pointer_cast<JIDSingleFormField>(field)) {
- jid = JID(field->getRawValues().at(0));
- break;
- }
- if (field->getName() == "jid") {
- fallbackJid = field->getRawValues().at(0);
- }
- }
- if (!jid.isValid()) {
- jid = fallbackJid;
- }
- }
- }
- else {
- jid = JID(Q2PSTRING(firstPage_->jid_->text()));
- }
+ JID jid = getContactJID();
if (type_ == AddContact) {
eventStream_->send(boost::make_shared<AddContactUIEvent>(jid, detailsPage_->getName(), detailsPage_->getSelectedGroups()));
}
else {
boost::shared_ptr<UIEvent> event(new RequestChatUIEvent(jid));
eventStream_->send(event);
}
}
@@ -184,18 +158,51 @@ void QtUserSearchWindow::handleSearch() {
search->setLast(Q2PSTRING(fieldsPage_->lastInput_->text()));
}
if (fieldsPage_->emailInput_->isEnabled()) {
search->setEMail(Q2PSTRING(fieldsPage_->emailInput_->text()));
}
}
onSearchRequested(search, getServerToSearch());
}
+JID QtUserSearchWindow::getContactJID() const {
+ JID jid;
+ if (!firstPage_->byJID_->isChecked()) {
+ 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 {
+ 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 (boost::dynamic_pointer_cast<JIDSingleFormField>(field)) {
+ jid = JID(field->getRawValues().at(0));
+ break;
+ }
+ if (field->getName() == "jid") {
+ fallbackJid = field->getRawValues().at(0);
+ }
+ }
+ if (!jid.isValid()) {
+ jid = fallbackJid;
+ }
+ }
+ }
+ else {
+ jid = JID(Q2PSTRING(firstPage_->jid_->text()));
+ }
+ return jid;
+}
+
void QtUserSearchWindow::show() {
clear();
QWidget::show();
}
void QtUserSearchWindow::addSavedServices(const std::vector<JID>& services) {
firstPage_->service_->clear();
foreach (JID jid, services) {
firstPage_->service_->addItem(P2QSTRING(jid.toString()));
@@ -217,18 +224,24 @@ void QtUserSearchWindow::setSearchFields(boost::shared_ptr<SearchPayload> fields
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);
+ }
+}
+
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;
}
diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.h b/Swift/QtUI/UserSearch/QtUserSearchWindow.h
index 4cfe93f..9173ba9 100644
--- a/Swift/QtUI/UserSearch/QtUserSearchWindow.h
+++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.h
@@ -32,30 +32,33 @@ namespace Swift {
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 setSearchFields(boost::shared_ptr<SearchPayload> fields);
+ virtual void setNameSuggestions(const std::vector<std::string>& suggestions);
+
protected:
virtual int nextId() const;
private slots:
void handleFirstPageRadioChange();
virtual void handleCurrentChanged(int);
virtual void handleAccepted();
private:
void clearForm();
void setError(const QString& error);
JID getServerToSearch();
void handleSearch();
+ JID getContactJID() const;
private:
UIEventStream* eventStream_;
UserSearchWindow::Type type_;
QAbstractItemModel* model_;
UserSearchDelegate* delegate_;
QtUserSearchFirstPage* firstPage_;
QtUserSearchFieldsPage* fieldsPage_;
QtUserSearchResultsPage* resultsPage_;