diff options
author | Richard Maudsley <richard.maudsley@isode.com> | 2014-05-02 09:19:23 (GMT) |
---|---|---|
committer | Swift Review <review@swift.im> | 2014-07-09 09:03:34 (GMT) |
commit | acac7962ba04c083377f62f4265ecc754176f74e (patch) | |
tree | fa2db718854d10c76e81fc54b0b1f2b33a12963f /Swift/Controllers/AdHocManager.cpp | |
parent | 8ab7ca17fdde8f8fb62a0c574478aa2c4c01a9bc (diff) | |
download | swift-contrib-acac7962ba04c083377f62f4265ecc754176f74e.zip swift-contrib-acac7962ba04c083377f62f4265ecc754176f74e.tar.bz2 |
Refactor AdHoc forms.
Test-Information:
Check that forms still open properly and can be submitted and canceled. Check that error message is displayed if disconnected when a form is open.
Change-Id: I23e35730b0decdfb5cf0592fc7234bf4643b6127
Diffstat (limited to 'Swift/Controllers/AdHocManager.cpp')
-rw-r--r-- | Swift/Controllers/AdHocManager.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/Swift/Controllers/AdHocManager.cpp b/Swift/Controllers/AdHocManager.cpp index e926138..59e139b 100644 --- a/Swift/Controllers/AdHocManager.cpp +++ b/Swift/Controllers/AdHocManager.cpp @@ -1,4 +1,4 @@ /* - * Copyright (c) 2010-2011 Kevin Smith + * Copyright (c) 2010-2014 Kevin Smith * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. @@ -32,4 +32,12 @@ AdHocManager::AdHocManager(const JID& jid, AdHocCommandWindowFactory* factory, I AdHocManager::~AdHocManager() { uiEventStream_->onUIEvent.disconnect(boost::bind(&AdHocManager::handleUIEvent, this, _1)); + for (size_t i = 0; i < controllers_.size(); ++i) { + controllers_[i]->onDeleting.disconnect(boost::bind(&AdHocManager::removeController, this, controllers_[i])); + } +} + +void AdHocManager::removeController(boost::shared_ptr<AdHocController> controller) { + controller->onDeleting.disconnect(boost::bind(&AdHocManager::removeController, this, controller)); + controllers_.erase(std::find(controllers_.begin(), controllers_.end(), controller)); } @@ -46,5 +54,10 @@ void AdHocManager::setServerDiscoInfo(boost::shared_ptr<DiscoInfo> info) { mainWindow_->setAvailableAdHocCommands(std::vector<DiscoItems::Item>()); } +} +void AdHocManager::setOnline(bool online) { + foreach (boost::shared_ptr<AdHocController> controller, controllers_) { + controller->setOnline(online); + } } @@ -64,5 +77,8 @@ void AdHocManager::handleUIEvent(boost::shared_ptr<UIEvent> event) { boost::shared_ptr<RequestAdHocUIEvent> adHocEvent = boost::dynamic_pointer_cast<RequestAdHocUIEvent>(event); if (adHocEvent) { - factory_->createAdHocCommandWindow(boost::make_shared<OutgoingAdHocCommandSession>(adHocEvent->getCommand().getJID(), adHocEvent->getCommand().getNode(), iqRouter_)); + boost::shared_ptr<OutgoingAdHocCommandSession> command = boost::make_shared<OutgoingAdHocCommandSession>(adHocEvent->getCommand().getJID(), adHocEvent->getCommand().getNode(), iqRouter_); + boost::shared_ptr<AdHocController> controller = boost::make_shared<AdHocController>(factory_, command); + controller->onDeleting.connect(boost::bind(&AdHocManager::removeController, this, controller)); + controllers_.push_back(controller); } } |