summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMateusz Piekos <mateuszpiekos@gmail.com>2012-08-07 17:52:36 (GMT)
committerMateusz Piekos <mateuszpiekos@gmail.com>2012-08-07 17:52:36 (GMT)
commita7a2f6124fd733926a0effe486cffee03bf9fde0 (patch)
treed028d9613b72f4fbaca031b33b718eb5ca6666e9 /Swift/Controllers/WhiteboardManager.cpp
parent4239fd83f1774cbcae15a501a4aa8d9fa4925181 (diff)
downloadswift-contrib-a7a2f6124fd733926a0effe486cffee03bf9fde0.zip
swift-contrib-a7a2f6124fd733926a0effe486cffee03bf9fde0.tar.bz2
"Chats" tab shows opened whiteboard sessions
Diffstat (limited to 'Swift/Controllers/WhiteboardManager.cpp')
-rw-r--r--Swift/Controllers/WhiteboardManager.cpp34
1 files changed, 29 insertions, 5 deletions
diff --git a/Swift/Controllers/WhiteboardManager.cpp b/Swift/Controllers/WhiteboardManager.cpp
index 1aa238e..bb73ae3 100644
--- a/Swift/Controllers/WhiteboardManager.cpp
+++ b/Swift/Controllers/WhiteboardManager.cpp
@@ -13,14 +13,20 @@
#include <Swift/Controllers/UIEvents/AcceptWhiteboardSessionUIEvent.h>
#include <Swift/Controllers/UIEvents/CancelWhiteboardSessionUIEvent.h>
#include <Swift/Controllers/UIEvents/ShowWhiteboardUIEvent.h>
+#include <Swift/Controllers/UIInterfaces/ChatListWindowFactory.h>
#include "Swiften/Client/NickResolver.h"
#include <Swiften/Client/StanzaChannel.h>
+#include <Swiften/Avatars/AvatarManager.h>
#include <Swiften/Whiteboard/WhiteboardSessionManager.h>
namespace Swift {
typedef std::pair<JID, WhiteboardWindow*> JIDWhiteboardWindowPair;
- WhiteboardManager::WhiteboardManager(WhiteboardWindowFactory* whiteboardWindowFactory, UIEventStream* uiEventStream, NickResolver* nickResolver, WhiteboardSessionManager* whiteboardSessionManager) : whiteboardWindowFactory_(whiteboardWindowFactory), uiEventStream_(uiEventStream), nickResolver_(nickResolver), whiteboardSessionManager_(whiteboardSessionManager) {
+ WhiteboardManager::WhiteboardManager(WhiteboardWindowFactory* whiteboardWindowFactory, ChatListWindowFactory* chatListWindowFactory, UIEventStream* uiEventStream, NickResolver* nickResolver, AvatarManager* avatarManager, WhiteboardSessionManager* whiteboardSessionManager) : whiteboardWindowFactory_(whiteboardWindowFactory), uiEventStream_(uiEventStream), nickResolver_(nickResolver), avatarManager_(avatarManager), whiteboardSessionManager_(whiteboardSessionManager) {
+ chatListWindow_ = chatListWindowFactory->createChatListWindow(uiEventStream_);
+ chatListWindow_->onWhiteboardActivated.connect(boost::bind(&WhiteboardManager::activateWindow, this, _1));
+ whiteboardSessionManager_->onRequestAccepted.connect(boost::bind(&WhiteboardManager::handleSessionAccepted, this, _1));
+ whiteboardSessionManager_->onSessionTerminate.connect(boost::bind(&WhiteboardManager::handleSessionTerminated, this, _1));
uiEventConnection_ = uiEventStream_->onUIEvent.connect(boost::bind(&WhiteboardManager::handleUIEvent, this, _1));
}
@@ -66,10 +72,7 @@ namespace Swift {
}
boost::shared_ptr<ShowWhiteboardUIEvent> showWindowEvent = boost::dynamic_pointer_cast<ShowWhiteboardUIEvent>(event);
if (showWindowEvent) {
- WhiteboardWindow* window = findWhiteboardWindow(showWindowEvent->getContact());
- if (window != NULL) {
- window->activateWindow();
- }
+ activateWindow(showWindowEvent->getContact());
}
}
@@ -93,4 +96,25 @@ namespace Swift {
session->cancel();
}
}
+
+ void WhiteboardManager::handleSessionAccepted(const JID& from) {
+ boost::filesystem::path path;
+ JID bareJID = from.toBare();
+ if (avatarManager_) {
+ path = avatarManager_->getAvatarPath(bareJID);
+ }
+ ChatListWindow::Chat chat(bareJID, nickResolver_->jidToNick(bareJID), "", 0, StatusShow::None, path, false);
+ chatListWindow_->addWhiteboardSession(chat);
+ }
+
+ void WhiteboardManager::handleSessionTerminated(const JID& from) {
+ chatListWindow_->removeWhiteboardSession(from.toBare());
+ }
+
+ void WhiteboardManager::activateWindow(const JID& jid) {
+ WhiteboardWindow* window = findWhiteboardWindow(jid);
+ if (window != NULL) {
+ window->activateWindow();
+ }
+ }
}