summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2012-05-31 17:27:48 (GMT)
committerKevin Smith <git@kismith.co.uk>2012-05-31 17:30:34 (GMT)
commit6aeb44a905b0c1955ea3afe4ea2025370544e699 (patch)
treef5d99af0cd87d628263643dc2aa98353d3d3b78d /Swift/QtUI
parent59f1bfcf315a77834ddbce20cc05892d211ab55c (diff)
downloadswift-contrib-6aeb44a905b0c1955ea3afe4ea2025370544e699.zip
swift-contrib-6aeb44a905b0c1955ea3afe4ea2025370544e699.tar.bz2
Very poor prototype of a MUC invite dialog
Diffstat (limited to 'Swift/QtUI')
-rw-r--r--Swift/QtUI/QtChatWindow.cpp13
-rw-r--r--Swift/QtUI/QtChatWindow.h2
-rw-r--r--Swift/QtUI/QtInviteToChatWindow.cpp107
-rw-r--r--Swift/QtUI/QtInviteToChatWindow.h41
-rw-r--r--Swift/QtUI/SConscript1
5 files changed, 159 insertions, 5 deletions
diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp
index 52ce701..137c044 100644
--- a/Swift/QtUI/QtChatWindow.cpp
+++ b/Swift/QtUI/QtChatWindow.cpp
@@ -17,6 +17,7 @@
#include "QtTextEdit.h"
#include "QtSettingsProvider.h"
#include "QtScaledAvatarCache.h"
+#include "QtInviteToChatWindow.h"
#include <Swiften/StringCodecs/Base64.h>
#include "SwifTools/TabComplete.h"
@@ -843,11 +844,7 @@ void QtChatWindow::handleActionButtonClicked() {
}
}
else if (result == invite) {
- bool ok;
- QString jid = QInputDialog::getText(this, tr("Enter person's address"), tr("Address:"), QLineEdit::Normal, "", &ok);
- if (ok) {
- onInvitePersonToThisMUCRequest(JID(Q2PSTRING(jid)), "");
- }
+ onInvitePersonToThisMUCRequest();
}
}
@@ -908,4 +905,10 @@ void QtChatWindow::addMUCInvitation(const std::string& senderName, const JID& ji
previousMessageKind_ = PreviousMessageWasMUCInvite;
}
+
+InviteToChatWindow* QtChatWindow::createInviteToChatWindow() {
+ return new QtInviteToChatWindow(this);
+}
+
+
}
diff --git a/Swift/QtUI/QtChatWindow.h b/Swift/QtUI/QtChatWindow.h
index 4b888eb..ff26c9c 100644
--- a/Swift/QtUI/QtChatWindow.h
+++ b/Swift/QtUI/QtChatWindow.h
@@ -91,6 +91,8 @@ namespace Swift {
void setAffiliations(MUCOccupant::Affiliation, const std::vector<JID>&);
void setAvailableRoomActions(const std::vector<RoomAction> &actions);
+ InviteToChatWindow* createInviteToChatWindow();
+
static QString buildChatWindowButton(const QString& name, const QString& id, const QString& arg1 = QString(), const QString& arg2 = QString(), const QString& arg3 = QString());
public slots:
diff --git a/Swift/QtUI/QtInviteToChatWindow.cpp b/Swift/QtUI/QtInviteToChatWindow.cpp
new file mode 100644
index 0000000..d53c493
--- /dev/null
+++ b/Swift/QtUI/QtInviteToChatWindow.cpp
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2012 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swift/QtUI/QtInviteToChatWindow.h>
+
+#include <QHBoxLayout>
+#include <QCompleter>
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QDialogButtonBox>
+
+#include <Swift/QtUI/QtSwiftUtil.h>
+
+namespace Swift {
+
+QtInviteToChatWindow::QtInviteToChatWindow(QWidget* parent) : QDialog(parent) {
+ QBoxLayout *layout = new QBoxLayout(QBoxLayout::TopToBottom, this);
+ layout->setContentsMargins(0,0,0,0);
+ layout->setSpacing(2);
+
+ QLabel* description = new QLabel(tr("Users to invite to this chat (one per line):"));
+ layout->addWidget(description);
+
+ jidsLayout_ = new QBoxLayout(QBoxLayout::TopToBottom);
+ layout->addLayout(jidsLayout_);
+
+ QLabel* reasonLabel = new QLabel(tr("If you want to provide a reason for the invitation, enter it here"));
+ layout->addWidget(reasonLabel);
+ reason_ = new QLineEdit(this);
+ layout->addWidget(reason_);
+ addJIDLine();
+
+ connect(this, SIGNAL(accepted()), this, SLOT(handleAccepting()));
+ connect(this, SIGNAL(rejected()), this, SLOT(handleRejecting()));
+
+
+ QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+
+ connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
+
+ layout->addWidget(buttonBox);
+
+ setModal(false);
+ show();
+}
+
+QtInviteToChatWindow::~QtInviteToChatWindow() {
+
+}
+
+void QtInviteToChatWindow::handleAccepting() {
+ onCompleted();
+}
+
+void QtInviteToChatWindow::handleRejecting() {
+ onDismissed();
+}
+
+std::string QtInviteToChatWindow::getReason() const {
+ return Q2PSTRING(reason_->text());
+}
+
+std::vector<JID> QtInviteToChatWindow::getJIDs() const {
+ std::vector<JID> results;
+ foreach (QLineEdit* jidEdit, jids_) {
+ QStringList parts = jidEdit->text().split(" ");
+ if (parts.size() > 0) {
+ JID jid(Q2PSTRING(parts.last()));
+ if (jid.isValid() && !jid.getNode().empty()) {
+ results.push_back(jid);
+ }
+ }
+ }
+ return results;
+}
+
+void QtInviteToChatWindow::addJIDLine() {
+ QLineEdit* jid = new QLineEdit(this);
+ QCompleter* completer = new QCompleter(completions_, this);
+ completer->setCaseSensitivity(Qt::CaseInsensitive);
+ jid->setCompleter(completer);
+ jids_.push_back(jid);
+ jidsLayout_->addWidget(jid);
+ connect(jid, SIGNAL(textChanged(const QString&)), this, SLOT(handleJIDTextChanged()));
+}
+
+void QtInviteToChatWindow::handleJIDTextChanged() {
+ bool gotEmpty = false;
+ foreach(QLineEdit* edit, jids_) {
+ if (edit->text().isEmpty()) {
+ gotEmpty = true;
+ }
+ }
+ if (!gotEmpty) {
+ addJIDLine();
+ }
+}
+
+}
+
+
+
diff --git a/Swift/QtUI/QtInviteToChatWindow.h b/Swift/QtUI/QtInviteToChatWindow.h
new file mode 100644
index 0000000..c009861
--- /dev/null
+++ b/Swift/QtUI/QtInviteToChatWindow.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2012 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <Swift/Controllers/UIInterfaces/InviteToChatWindow.h>
+
+#include <QDialog>
+#include <QStringList>
+
+class QLineEdit;
+class QBoxLayout;
+
+namespace Swift {
+ class QtInviteToChatWindow : public QDialog, public InviteToChatWindow {
+ Q_OBJECT
+ public:
+ QtInviteToChatWindow(QWidget* parent = NULL);
+ virtual ~QtInviteToChatWindow();
+
+ virtual std::string getReason() const;
+
+ virtual std::vector<JID> getJIDs() const;
+ private:
+ void addJIDLine();
+ private slots:
+ void handleJIDTextChanged();
+ void handleAccepting();
+ void handleRejecting();
+ private:
+ QStringList completions_;
+ QLineEdit* reason_;
+ QBoxLayout* jidsLayout_;
+ std::vector<QLineEdit*> jids_;
+ };
+}
+
+
diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript
index 4c53313..042e2a0 100644
--- a/Swift/QtUI/SConscript
+++ b/Swift/QtUI/SConscript
@@ -109,6 +109,7 @@ sources = [
"QtFormResultItemModel.cpp",
"QtLineEdit.cpp",
"QtJoinMUCWindow.cpp",
+ "QtInviteToChatWindow.cpp",
"Roster/RosterModel.cpp",
"Roster/QtTreeWidget.cpp",
# "Roster/QtTreeWidgetItem.cpp",