diff options
author | Kevin Smith <git@kismith.co.uk> | 2012-05-31 17:27:48 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2012-05-31 17:30:34 (GMT) |
commit | 6aeb44a905b0c1955ea3afe4ea2025370544e699 (patch) | |
tree | f5d99af0cd87d628263643dc2aa98353d3d3b78d /Swift/QtUI | |
parent | 59f1bfcf315a77834ddbce20cc05892d211ab55c (diff) | |
download | swift-6aeb44a905b0c1955ea3afe4ea2025370544e699.zip swift-6aeb44a905b0c1955ea3afe4ea2025370544e699.tar.bz2 |
Very poor prototype of a MUC invite dialog
Diffstat (limited to 'Swift/QtUI')
-rw-r--r-- | Swift/QtUI/QtChatWindow.cpp | 13 | ||||
-rw-r--r-- | Swift/QtUI/QtChatWindow.h | 2 | ||||
-rw-r--r-- | Swift/QtUI/QtInviteToChatWindow.cpp | 107 | ||||
-rw-r--r-- | Swift/QtUI/QtInviteToChatWindow.h | 41 | ||||
-rw-r--r-- | Swift/QtUI/SConscript | 1 |
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", |