summaryrefslogtreecommitdiffstats
path: root/Swift
diff options
context:
space:
mode:
Diffstat (limited to 'Swift')
-rw-r--r--Swift/Controllers/UIInterfaces/WhiteboardWindow.h2
-rw-r--r--Swift/Controllers/UIInterfaces/WhiteboardWindowFactory.h2
-rw-r--r--Swift/Controllers/WhiteboardManager.cpp48
-rw-r--r--Swift/Controllers/WhiteboardManager.h5
-rw-r--r--Swift/QtUI/QtUIFactory.cpp2
-rw-r--r--Swift/QtUI/QtUIFactory.h2
-rw-r--r--Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp33
-rw-r--r--Swift/QtUI/Whiteboard/QtWhiteboardWindow.h13
8 files changed, 77 insertions, 30 deletions
diff --git a/Swift/Controllers/UIInterfaces/WhiteboardWindow.h b/Swift/Controllers/UIInterfaces/WhiteboardWindow.h
index bedb057..ae736d7 100644
--- a/Swift/Controllers/UIInterfaces/WhiteboardWindow.h
+++ b/Swift/Controllers/UIInterfaces/WhiteboardWindow.h
@@ -11,6 +11,7 @@
#include <string>
namespace Swift {
+ class WhiteboardSession;
class WhiteboardWindow {
public:
@@ -18,6 +19,7 @@ namespace Swift {
virtual void show() = 0;
virtual void addItem(const std::string& item) = 0;
+ virtual void setSession(boost::shared_ptr<WhiteboardSession> session) = 0;
boost::signal<void (std::string)> onItemAdd;
};
diff --git a/Swift/Controllers/UIInterfaces/WhiteboardWindowFactory.h b/Swift/Controllers/UIInterfaces/WhiteboardWindowFactory.h
index 7e0fe81..c2d2f6c 100644
--- a/Swift/Controllers/UIInterfaces/WhiteboardWindowFactory.h
+++ b/Swift/Controllers/UIInterfaces/WhiteboardWindowFactory.h
@@ -14,6 +14,6 @@ namespace Swift {
public :
virtual ~WhiteboardWindowFactory() {};
- virtual WhiteboardWindow* createWhiteboardWindow(WhiteboardSession* whiteboardSession) = 0;
+ virtual WhiteboardWindow* createWhiteboardWindow(boost::shared_ptr<WhiteboardSession> whiteboardSession) = 0;
};
}
diff --git a/Swift/Controllers/WhiteboardManager.cpp b/Swift/Controllers/WhiteboardManager.cpp
index 37c3263..f6db4ff 100644
--- a/Swift/Controllers/WhiteboardManager.cpp
+++ b/Swift/Controllers/WhiteboardManager.cpp
@@ -20,7 +20,6 @@ namespace Swift {
WhiteboardManager::WhiteboardManager(WhiteboardWindowFactory* whiteboardWindowFactory, UIEventStream* uiEventStream, WhiteboardSessionManager* whiteboardSessionManager) : whiteboardWindowFactory_(whiteboardWindowFactory), uiEventStream_(uiEventStream), whiteboardSessionManager_(whiteboardSessionManager) {
uiEventConnection_ = uiEventStream_->onUIEvent.connect(boost::bind(&WhiteboardManager::handleUIEvent, this, _1));
- whiteboardSessionManager_->onRequestAccepted.connect(boost::bind(&WhiteboardManager::handleAcceptedRequest, this, _1, _2));
}
WhiteboardManager::~WhiteboardManager() {
@@ -29,23 +28,30 @@ namespace Swift {
}
}
- WhiteboardWindow* WhiteboardManager::createNewWhiteboardWindow(const JID& contact, WhiteboardSession* session) {
+ WhiteboardWindow* WhiteboardManager::createNewWhiteboardWindow(const JID& contact, WhiteboardSession::ref session) {
WhiteboardWindow *window = whiteboardWindowFactory_->createWhiteboardWindow(session);
- whiteboardWindows_[contact] = window;
+ whiteboardWindows_[contact.toBare()] = window;
return window;
}
WhiteboardWindow* WhiteboardManager::findWhiteboardWindow(const JID& contact) {
- if (whiteboardWindows_.find(contact) == whiteboardWindows_.end()) {
+ if (whiteboardWindows_.find(contact.toBare()) == whiteboardWindows_.end()) {
return NULL;
}
- return whiteboardWindows_[contact];
+ return whiteboardWindows_[contact.toBare()];
}
void WhiteboardManager::handleUIEvent(boost::shared_ptr<UIEvent> event) {
- boost::shared_ptr<RequestWhiteboardUIEvent> whiteboardEvent = boost::dynamic_pointer_cast<RequestWhiteboardUIEvent>(event);
- if (whiteboardEvent) {
- whiteboardSessionManager_->requestSession(whiteboardEvent->getContact());
+ boost::shared_ptr<RequestWhiteboardUIEvent> requestWhiteboardEvent = boost::dynamic_pointer_cast<RequestWhiteboardUIEvent>(event);
+ if (requestWhiteboardEvent) {
+ JID contact = requestWhiteboardEvent->getContact();
+ WhiteboardSession::ref session = whiteboardSessionManager_->requestSession(contact);
+ WhiteboardWindow* window = findWhiteboardWindow(contact);
+ if (window == NULL) {
+ createNewWhiteboardWindow(contact, session);
+ } else {
+ window->setSession(session);
+ }
}
boost::shared_ptr<AcceptWhiteboardSessionUIEvent> sessionAcceptEvent = boost::dynamic_pointer_cast<AcceptWhiteboardSessionUIEvent>(event);
if (sessionAcceptEvent) {
@@ -53,24 +59,28 @@ namespace Swift {
}
boost::shared_ptr<CancelWhiteboardSessionUIEvent> sessionCancelEvent = boost::dynamic_pointer_cast<CancelWhiteboardSessionUIEvent>(event);
if (sessionCancelEvent) {
- whiteboardSessionManager_->cancelSession(sessionCancelEvent->getContact());
+ cancelSession(sessionCancelEvent->getContact());
}
}
void WhiteboardManager::acceptSession(const JID& from) {
- WhiteboardSession* session = whiteboardSessionManager_->acceptSession(from);
- WhiteboardWindow* window = findWhiteboardWindow(from);
- if (window == NULL) {
- window = createNewWhiteboardWindow(from, session);
+ IncomingWhiteboardSession::ref session = boost::dynamic_pointer_cast<IncomingWhiteboardSession>(whiteboardSessionManager_->getSession(from));
+ if (session) {
+ session->accept();
+ WhiteboardWindow* window = findWhiteboardWindow(from);
+ if (window == NULL) {
+ window = createNewWhiteboardWindow(from, session);
+ } else {
+ window->setSession(session);
+ }
+ window->show();
}
- window->show();
}
- void WhiteboardManager::handleAcceptedRequest(const JID& from, WhiteboardSession* session) {
- WhiteboardWindow* window = findWhiteboardWindow(from);
- if (window == NULL) {
- window = createNewWhiteboardWindow(from, session);
+ void WhiteboardManager::cancelSession(const JID& from) {
+ IncomingWhiteboardSession::ref session = boost::dynamic_pointer_cast<IncomingWhiteboardSession>(whiteboardSessionManager_->getSession(from));
+ if (session) {
+ session->cancel();
}
- window->show();
}
}
diff --git a/Swift/Controllers/WhiteboardManager.h b/Swift/Controllers/WhiteboardManager.h
index 2690f36..52d9bae 100644
--- a/Swift/Controllers/WhiteboardManager.h
+++ b/Swift/Controllers/WhiteboardManager.h
@@ -16,6 +16,7 @@
#include <Swift/Controllers/UIEvents/UIEventStream.h>
#include <Swift/Controllers/UIInterfaces/WhiteboardWindowFactory.h>
#include <Swift/Controllers/UIInterfaces/WhiteboardWindow.h>
+#include <Swiften/Whiteboard/WhiteboardSession.h>
namespace Swift {
class WhiteboardSessionManager;
@@ -25,12 +26,12 @@ namespace Swift {
WhiteboardManager(WhiteboardWindowFactory* whiteboardWindowFactory, UIEventStream* uiEventStream, WhiteboardSessionManager* whiteboardSessionManager);
~WhiteboardManager();
- WhiteboardWindow* createNewWhiteboardWindow(const JID& contact, WhiteboardSession* session);
+ WhiteboardWindow* createNewWhiteboardWindow(const JID& contact, WhiteboardSession::ref session);
private:
void handleUIEvent(boost::shared_ptr<UIEvent> event);
void acceptSession(const JID& from);
- void handleAcceptedRequest(const JID& from, WhiteboardSession* session);
+ void cancelSession(const JID& from);
WhiteboardWindow* findWhiteboardWindow(const JID& contact);
private:
diff --git a/Swift/QtUI/QtUIFactory.cpp b/Swift/QtUI/QtUIFactory.cpp
index e0fc532..38e065c 100644
--- a/Swift/QtUI/QtUIFactory.cpp
+++ b/Swift/QtUI/QtUIFactory.cpp
@@ -136,7 +136,7 @@ ContactEditWindow* QtUIFactory::createContactEditWindow() {
return new QtContactEditWindow();
}
-WhiteboardWindow* QtUIFactory::createWhiteboardWindow(WhiteboardSession* whiteboardSession) {
+WhiteboardWindow* QtUIFactory::createWhiteboardWindow(boost::shared_ptr<WhiteboardSession> whiteboardSession) {
return new QtWhiteboardWindow(whiteboardSession);
}
diff --git a/Swift/QtUI/QtUIFactory.h b/Swift/QtUI/QtUIFactory.h
index 951b19c..d307759 100644
--- a/Swift/QtUI/QtUIFactory.h
+++ b/Swift/QtUI/QtUIFactory.h
@@ -43,7 +43,7 @@ namespace Swift {
virtual ProfileWindow* createProfileWindow();
virtual ContactEditWindow* createContactEditWindow();
virtual FileTransferListWidget* createFileTransferListWidget();
- virtual WhiteboardWindow* createWhiteboardWindow(WhiteboardSession* whiteboardSession);
+ virtual WhiteboardWindow* createWhiteboardWindow(boost::shared_ptr<WhiteboardSession> whiteboardSession);
virtual void createAdHocCommandWindow(boost::shared_ptr<OutgoingAdHocCommandSession> command);
private slots:
diff --git a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp
index e0e68ba..3527eba 100644
--- a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp
+++ b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp
@@ -13,10 +13,11 @@
#include <Swiften/Whiteboard/WhiteboardSession.h>
#include <Swiften/Elements/WhiteboardPayload.h>
+#include <QMessageBox>
using namespace std;
namespace Swift {
- QtWhiteboardWindow::QtWhiteboardWindow(WhiteboardSession* whiteboardSession) : QWidget(), whiteboardSession_(whiteboardSession) {
+ QtWhiteboardWindow::QtWhiteboardWindow(WhiteboardSession::ref whiteboardSession) : QWidget() {
layout = new QVBoxLayout(this);
hLayout = new QHBoxLayout;
sidebarLayout = new QVBoxLayout;
@@ -121,7 +122,7 @@ namespace Swift {
layout->addLayout(hLayout);
this->setLayout(layout);
- whiteboardSession_->onDataReceived.connect(boost::bind(&QtWhiteboardWindow::addItem, this, _1));
+ setSession(whiteboardSession);
}
void QtWhiteboardWindow::addItem(const std::string& item) {
@@ -222,10 +223,19 @@ namespace Swift {
{
graphicsView->setMode(GView::Select);
}
+
void QtWhiteboardWindow::show()
{
QWidget::show();
}
+
+ void QtWhiteboardWindow::setSession(WhiteboardSession::ref session) {
+ whiteboardSession_ = session;
+ whiteboardSession_->onDataReceived.connect(boost::bind(&QtWhiteboardWindow::addItem, this, _1));
+ whiteboardSession_->onRequestAccepted.connect(boost::bind(&QWidget::show, this));
+ whiteboardSession_->onSessionTerminateReceived.connect(boost::bind(&QtWhiteboardWindow::handleSessionTerminate, this));
+ }
+
void QtWhiteboardWindow::handleLastItemChanged(QGraphicsItem* item) {
std::string serialized;
QGraphicsLineItem* lineItem = qgraphicsitem_cast<QGraphicsLineItem*>(item);
@@ -261,6 +271,25 @@ namespace Swift {
// stanzaChannel_->sendMessage(mes);*/
whiteboardSession_->sendData(serialized);
}
+ }
+ void QtWhiteboardWindow::handleSessionTerminate() {
+ QMessageBox box(this);
+ box.setText(tr("Session was terminated by other user"));
+ box.setIcon(QMessageBox::Information);
+ box.exec();
+ hide();
+ }
+
+ void QtWhiteboardWindow::closeEvent(QCloseEvent* event) {
+ QMessageBox box(this);
+ box.setText(tr("Closing window is equivalent closing the session. Are you sure you want to do this?"));
+ box.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+ box.setIcon(QMessageBox::Question);
+ if (box.exec() == QMessageBox::Yes) {
+ whiteboardSession_->cancel();
+ } else {
+ event->ignore();
+ }
}
}
diff --git a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.h b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.h
index f1a9ed5..4c0a065 100644
--- a/Swift/QtUI/Whiteboard/QtWhiteboardWindow.h
+++ b/Swift/QtUI/Whiteboard/QtWhiteboardWindow.h
@@ -8,6 +8,7 @@
#include <Swift/Controllers/UIInterfaces/WhiteboardWindow.h>
#include <Swiften/Elements/Message.h>
+#include <Swiften/Whiteboard/WhiteboardSession.h>
#include <QWidget>
#include <QGraphicsView>
@@ -20,19 +21,19 @@
#include <QSpinBox>
#include <QColorDialog>
#include <QToolButton>
+#include <QCloseEvent>
#include "GView.h"
namespace Swift {
- class WhiteboardSession;
-
class QtWhiteboardWindow : public QWidget, public WhiteboardWindow
{
Q_OBJECT;
public:
- QtWhiteboardWindow(WhiteboardSession* whiteboardSession);
+ QtWhiteboardWindow(WhiteboardSession::ref whiteboardSession);
void addItem(const std::string& item);
void show();
+ void setSession(WhiteboardSession::ref session);
private slots:
void changeLineWidth(int i);
@@ -50,6 +51,10 @@ namespace Swift {
void handleLastItemChanged(QGraphicsItem* item);
private:
+ void handleSessionTerminate();
+ void closeEvent(QCloseEvent* event);
+
+ private:
QGraphicsScene* scene;
GView* graphicsView;
QVBoxLayout* layout;
@@ -72,6 +77,6 @@ namespace Swift {
QToolButton* polygonButton;
QToolButton* selectButton;
- WhiteboardSession* whiteboardSession_;
+ WhiteboardSession::ref whiteboardSession_;
};
}