diff options
Diffstat (limited to 'Swift')
| -rw-r--r-- | Swift/Controllers/UIInterfaces/WhiteboardWindow.h | 2 | ||||
| -rw-r--r-- | Swift/Controllers/UIInterfaces/WhiteboardWindowFactory.h | 2 | ||||
| -rw-r--r-- | Swift/Controllers/WhiteboardManager.cpp | 48 | ||||
| -rw-r--r-- | Swift/Controllers/WhiteboardManager.h | 5 | ||||
| -rw-r--r-- | Swift/QtUI/QtUIFactory.cpp | 2 | ||||
| -rw-r--r-- | Swift/QtUI/QtUIFactory.h | 2 | ||||
| -rw-r--r-- | Swift/QtUI/Whiteboard/QtWhiteboardWindow.cpp | 33 | ||||
| -rw-r--r-- | Swift/QtUI/Whiteboard/QtWhiteboardWindow.h | 13 | 
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_;  	};  } | 
 Swift
 Swift