summaryrefslogtreecommitdiffstats
path: root/Swift
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-03-22 17:40:13 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-03-22 17:40:13 (GMT)
commit1ebd045cadb3585c846ea38c63d508e5aa6ec1e7 (patch)
tree304f2b9e8b92e7ff44aa790a298b1d2592d3f083 /Swift
parent6581ec0c0881263bea671c6122b546483ad6f2e8 (diff)
downloadswift-contrib-1ebd045cadb3585c846ea38c63d508e5aa6ec1e7.zip
swift-contrib-1ebd045cadb3585c846ea38c63d508e5aa6ec1e7.tar.bz2
Sucky UI for subscription requests
Diffstat (limited to 'Swift')
-rw-r--r--Swift/QtUI/EventViewer/QtEventWindow.cpp7
-rw-r--r--Swift/QtUI/QtSubscriptionRequestWindow.cpp77
-rw-r--r--Swift/QtUI/QtSubscriptionRequestWindow.h28
-rw-r--r--Swift/QtUI/SConscript1
4 files changed, 111 insertions, 2 deletions
diff --git a/Swift/QtUI/EventViewer/QtEventWindow.cpp b/Swift/QtUI/EventViewer/QtEventWindow.cpp
index 91eb2c1..def124a 100644
--- a/Swift/QtUI/EventViewer/QtEventWindow.cpp
+++ b/Swift/QtUI/EventViewer/QtEventWindow.cpp
@@ -1,11 +1,14 @@
+
#include "Swift/QtUI/EventViewer/QtEventWindow.h"
#include <qdebug>
#include "Swiften/Events/MessageEvent.h"
+#include "Swift/QtUI/QtSubscriptionRequestWindow.h"
#include "Swiften/Events/SubscriptionRequestEvent.h"
#include "Swift/Controllers/UIEvents/RequestChatUIEvent.h"
+
#include "Swiften/Base/Platform.h"
namespace Swift {
@@ -39,8 +42,8 @@ void QtEventWindow::handleItemActivated(const QModelIndex& item) {
if (messageEvent) {
eventStream_->send(boost::shared_ptr<UIEvent>(new RequestChatUIEvent(messageEvent->getStanza()->getFrom())));
} else if (subscriptionEvent) {
- printf("Subscription activated\n");
- //FIXME: do something
+ QtSubscriptionRequestWindow* window = QtSubscriptionRequestWindow::getWindow(subscriptionEvent, this);
+ window->show();
} else {
qWarning() << "Trying to activate an unexpected event";
}
diff --git a/Swift/QtUI/QtSubscriptionRequestWindow.cpp b/Swift/QtUI/QtSubscriptionRequestWindow.cpp
new file mode 100644
index 0000000..df0c8e6
--- /dev/null
+++ b/Swift/QtUI/QtSubscriptionRequestWindow.cpp
@@ -0,0 +1,77 @@
+#include "Swift/QtUI/QtSubscriptionRequestWindow.h"
+
+#include <QPushButton>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QLabel>
+
+#include "Swift/QtUI/QtSwiftUtil.h"
+
+namespace Swift {
+QtSubscriptionRequestWindow::QtSubscriptionRequestWindow(boost::shared_ptr<SubscriptionRequestEvent> event, QWidget* parent) : QDialog(parent), event_(event) {
+ QString text = P2QSTRING(event->getJID().toString()) + " would like to add you to their roster. Would you like to add them to your roster and share your status when you're online? If you choose to defer this choice, you'll be asked again when you next login.";
+ QVBoxLayout* layout = new QVBoxLayout();
+ QLabel* label = new QLabel(text, this);
+ layout->addWidget(label);
+
+ if (event_->getConcluded()) {
+ QLabel* doneLabel = new QLabel("You have already replied to this request");
+ QPushButton* okButton = new QPushButton("OK", this);
+ connect(okButton, SIGNAL(clicked()), this, SLOT(handleDefer()));
+ layout->addWidget(doneLabel);
+ layout->addWidget(okButton);
+ } else {
+ QPushButton* yesButton = new QPushButton("Yes", this);
+ connect(yesButton, SIGNAL(clicked()), this, SLOT(handleYes()));
+ QPushButton* noButton = new QPushButton("No", this);
+ connect(noButton, SIGNAL(clicked()), this, SLOT(handleNo()));
+ QPushButton* deferButton = new QPushButton("Defer", this);
+ connect(deferButton, SIGNAL(clicked()), this, SLOT(handleDefer()));
+
+ QHBoxLayout* buttonLayout = new QHBoxLayout();
+ buttonLayout->addWidget(yesButton);
+ buttonLayout->addWidget(noButton);
+ buttonLayout->addWidget(deferButton);
+
+ layout->addLayout(buttonLayout);
+ }
+
+ setLayout(layout);
+}
+
+void QtSubscriptionRequestWindow::handleYes() {
+ event_->accept();
+ delete this;
+}
+
+void QtSubscriptionRequestWindow::handleNo() {
+ event_->decline();
+ delete this;
+}
+
+void QtSubscriptionRequestWindow::handleDefer() {
+ delete this;
+}
+
+QtSubscriptionRequestWindow::~QtSubscriptionRequestWindow() {
+ windows_.removeOne(this);
+}
+
+QtSubscriptionRequestWindow* QtSubscriptionRequestWindow::getWindow(boost::shared_ptr<SubscriptionRequestEvent> event, QWidget* parent) {
+ foreach (QtSubscriptionRequestWindow* window, windows_) {
+ if (window->getEvent() == event) {
+ return window;
+ }
+ }
+ QtSubscriptionRequestWindow* window = new QtSubscriptionRequestWindow(event, parent);
+ windows_.append(window);
+ return window;
+}
+
+boost::shared_ptr<SubscriptionRequestEvent> QtSubscriptionRequestWindow::getEvent() {
+ return event_;
+}
+
+QList<QtSubscriptionRequestWindow*> QtSubscriptionRequestWindow::windows_;
+
+}
diff --git a/Swift/QtUI/QtSubscriptionRequestWindow.h b/Swift/QtUI/QtSubscriptionRequestWindow.h
new file mode 100644
index 0000000..692b45b
--- /dev/null
+++ b/Swift/QtUI/QtSubscriptionRequestWindow.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <QDialog>
+
+#include <boost/shared_ptr.hpp>
+
+#include "Swiften/Events/SubscriptionRequestEvent.h"
+
+namespace Swift {
+ class QtSubscriptionRequestWindow : public QDialog {
+ Q_OBJECT
+ public:
+ static QtSubscriptionRequestWindow* getWindow(boost::shared_ptr<SubscriptionRequestEvent> event, QWidget* parent = 0);
+ ~QtSubscriptionRequestWindow();
+ boost::shared_ptr<SubscriptionRequestEvent> getEvent();
+ private slots:
+ void handleYes();
+ void handleNo();
+ void handleDefer();
+ private:
+ QtSubscriptionRequestWindow(boost::shared_ptr<SubscriptionRequestEvent> event, QWidget* parent = 0);
+ static QList<QtSubscriptionRequestWindow*> windows_;
+ boost::shared_ptr<SubscriptionRequestEvent> event_;
+ /*QPushButton* yesButton_;
+ QPushButton* noButton_;
+ QPushButton* deferButton_;*/
+ };
+}
diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript
index f1a229a..e6a62aa 100644
--- a/Swift/QtUI/SConscript
+++ b/Swift/QtUI/SConscript
@@ -84,6 +84,7 @@ sources = [
"EventViewer/QtEventWindowFactory.cpp",
"EventViewer/QtEventWindow.cpp",
"EventViewer/QtEvent.cpp",
+ "QtSubscriptionRequestWindow.cpp",
"QtRosterHeader.cpp",
"qrc_DefaultTheme.cc",
"qrc_Swift.cc",