diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-07-16 09:17:21 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-07-16 13:35:37 +0200 |
commit | c2b0e016e246c6a70a7c41c1088cda6cf122e1b7 (patch) | |
tree | 020a78b369a8f66fdb7fc49dd34b9c412d871db3 /sd/source/ui | |
parent | 72fecbbc81bf375e2a5617db5c6e88a8a3bacb26 (diff) |
loplugin:mergeclasses merge ResourceManager into SlideSorterModule
Change-Id: If78dc81e41180e7449b389e36223ee78d6ac91ec
Reviewed-on: https://gerrit.libreoffice.org/57486
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sd/source/ui')
-rw-r--r-- | sd/source/ui/framework/module/ResourceManager.cxx | 235 | ||||
-rw-r--r-- | sd/source/ui/framework/module/ResourceManager.hxx | 99 | ||||
-rw-r--r-- | sd/source/ui/framework/module/SlideSorterModule.cxx | 169 | ||||
-rw-r--r-- | sd/source/ui/framework/module/SlideSorterModule.hxx | 51 |
4 files changed, 211 insertions, 343 deletions
diff --git a/sd/source/ui/framework/module/ResourceManager.cxx b/sd/source/ui/framework/module/ResourceManager.cxx deleted file mode 100644 index fc8d0961f030..000000000000 --- a/sd/source/ui/framework/module/ResourceManager.cxx +++ /dev/null @@ -1,235 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include "ResourceManager.hxx" - -#include <framework/FrameworkHelper.hxx> -#include <framework/ConfigurationController.hxx> -#include <com/sun/star/drawing/framework/XControllerManager.hpp> - -#include <set> - -using namespace css; -using namespace css::uno; -using namespace css::drawing::framework; - -using ::sd::framework::FrameworkHelper; - -namespace { - static const sal_Int32 ResourceActivationRequestEvent = 0; - static const sal_Int32 ResourceDeactivationRequestEvent = 1; -} - -namespace sd { namespace framework { - -class ResourceManager::MainViewContainer - : public ::std::set<OUString> -{ -public: - MainViewContainer() {} -}; - -//===== ResourceManager ======================================================= - -ResourceManager::ResourceManager ( - const Reference<frame::XController>& rxController, - const Reference<XResourceId>& rxResourceId) - : ResourceManagerInterfaceBase(MutexOwner::maMutex), - mxConfigurationController(), - mpActiveMainViewContainer(new MainViewContainer()), - mxResourceId(rxResourceId), - mxMainViewAnchorId(FrameworkHelper::CreateResourceId( - FrameworkHelper::msCenterPaneURL)), - msCurrentMainViewURL() -{ - Reference<XControllerManager> xControllerManager (rxController, UNO_QUERY); - if (xControllerManager.is()) - { - mxConfigurationController = xControllerManager->getConfigurationController(); - - if (mxConfigurationController.is()) - { - uno::Reference<lang::XComponent> const xComppnent( - mxConfigurationController, UNO_QUERY_THROW); - xComppnent->addEventListener(this); - mxConfigurationController->addConfigurationChangeListener( - this, - FrameworkHelper::msResourceActivationRequestEvent, - makeAny(ResourceActivationRequestEvent)); - mxConfigurationController->addConfigurationChangeListener( - this, - FrameworkHelper::msResourceDeactivationRequestEvent, - makeAny(ResourceDeactivationRequestEvent)); - } - } -} - -ResourceManager::~ResourceManager() -{ -} - -void ResourceManager::AddActiveMainView ( - const OUString& rsMainViewURL) -{ - mpActiveMainViewContainer->insert(rsMainViewURL); -} - -bool ResourceManager::IsResourceActive ( - const OUString& rsMainViewURL) -{ - return (mpActiveMainViewContainer->find(rsMainViewURL) != mpActiveMainViewContainer->end()); -} - -void ResourceManager::SaveResourceState() -{ -} - -void SAL_CALL ResourceManager::disposing() -{ - if (mxConfigurationController.is()) - { - mxConfigurationController->removeConfigurationChangeListener(this); - mxConfigurationController = nullptr; - } -} - -void SAL_CALL ResourceManager::notifyConfigurationChange ( - const ConfigurationChangeEvent& rEvent) -{ - OSL_ASSERT(rEvent.ResourceId.is()); - - sal_Int32 nEventType = 0; - rEvent.UserData >>= nEventType; - switch (nEventType) - { - case ResourceActivationRequestEvent: - if (rEvent.ResourceId->isBoundToURL( - FrameworkHelper::msCenterPaneURL, - AnchorBindingMode_DIRECT)) - { - // A resource directly bound to the center pane has been - // requested. - if (rEvent.ResourceId->getResourceTypePrefix() == - FrameworkHelper::msViewURLPrefix) - { - // The requested resource is a view. Show or hide the - // resource managed by this ResourceManager accordingly. - HandleMainViewSwitch( - rEvent.ResourceId->getResourceURL(), - true); - } - } - else if (rEvent.ResourceId->compareTo(mxResourceId) == 0) - { - // The resource managed by this ResourceManager has been - // explicitly been requested (maybe by us). Remember this - // setting. - HandleResourceRequest(true, rEvent.Configuration); - } - break; - - case ResourceDeactivationRequestEvent: - if (rEvent.ResourceId->compareTo(mxMainViewAnchorId) == 0) - { - HandleMainViewSwitch( - OUString(), - false); - } - else if (rEvent.ResourceId->compareTo(mxResourceId) == 0) - { - // The resource managed by this ResourceManager has been - // explicitly been requested to be hidden (maybe by us). - // Remember this setting. - HandleResourceRequest(false, rEvent.Configuration); - } - break; - } -} - -void ResourceManager::HandleMainViewSwitch ( - const OUString& rsViewURL, - const bool bIsActivated) -{ - if (bIsActivated) - msCurrentMainViewURL = rsViewURL; - else - msCurrentMainViewURL.clear(); - - if (mxConfigurationController.is()) - { - ConfigurationController::Lock aLock (mxConfigurationController); - - if (mpActiveMainViewContainer->find(msCurrentMainViewURL) - != mpActiveMainViewContainer->end()) - { - // Activate resource. - mxConfigurationController->requestResourceActivation( - mxResourceId->getAnchor(), - ResourceActivationMode_ADD); - mxConfigurationController->requestResourceActivation( - mxResourceId, - ResourceActivationMode_REPLACE); - } - else - { - mxConfigurationController->requestResourceDeactivation(mxResourceId); - } - } -} - -void ResourceManager::HandleResourceRequest( - bool bActivation, - const Reference<XConfiguration>& rxConfiguration) -{ - Sequence<Reference<XResourceId> > aCenterViews = rxConfiguration->getResources( - FrameworkHelper::CreateResourceId(FrameworkHelper::msCenterPaneURL), - FrameworkHelper::msViewURLPrefix, - AnchorBindingMode_DIRECT); - if (aCenterViews.getLength() == 1) - { - if (bActivation) - { - mpActiveMainViewContainer->insert(aCenterViews[0]->getResourceURL()); - } - else - { - MainViewContainer::iterator iElement ( - mpActiveMainViewContainer->find(aCenterViews[0]->getResourceURL())); - if (iElement != mpActiveMainViewContainer->end()) - mpActiveMainViewContainer->erase(iElement); - } - } -} - -void SAL_CALL ResourceManager::disposing ( - const lang::EventObject& rEvent) -{ - if (mxConfigurationController.is() - && rEvent.Source == mxConfigurationController) - { - SaveResourceState(); - // Without the configuration controller this class can do nothing. - mxConfigurationController = nullptr; - dispose(); - } -} - -} } // end of namespace sd::framework - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/framework/module/ResourceManager.hxx b/sd/source/ui/framework/module/ResourceManager.hxx deleted file mode 100644 index 8c0c14773a21..000000000000 --- a/sd/source/ui/framework/module/ResourceManager.hxx +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef INCLUDED_SD_SOURCE_UI_FRAMEWORK_MODULE_RESOURCEMANAGER_HXX -#define INCLUDED_SD_SOURCE_UI_FRAMEWORK_MODULE_RESOURCEMANAGER_HXX - -#include <MutexOwner.hxx> -#include <com/sun/star/drawing/framework/XConfigurationChangeListener.hpp> -#include <com/sun/star/drawing/framework/XConfigurationController.hpp> -#include <com/sun/star/frame/XController.hpp> -#include <cppuhelper/compbase.hxx> -#include <memory> - -namespace sd { namespace framework { - -typedef ::cppu::WeakComponentImplHelper < - css::drawing::framework::XConfigurationChangeListener - > ResourceManagerInterfaceBase; - -/** Manage the activation state of one resource depending on the view in the - center pane. The ResourceManager remembers in which configuration to - activate and in which to deactivate the resource. When the resource is - deactivated or activated manually by the user then the ResourceManager - detects this and remembers it for the future. -*/ -class ResourceManager - : private sd::MutexOwner, - public ResourceManagerInterfaceBase -{ -public: - ResourceManager ( - const css::uno::Reference<css::frame::XController>& rxController, - const css::uno::Reference<css::drawing::framework::XResourceId>& rxResourceId); - virtual ~ResourceManager() override; - - /** Remember the given URL as one of a center pane view for which to - activate the resource managed by the called object. - */ - void AddActiveMainView (const OUString& rsMainViewURL); - bool IsResourceActive (const OUString& rsMainViewURL); - virtual void SaveResourceState(); - - virtual void SAL_CALL disposing() override; - - // XConfigurationChangeListener - - virtual void SAL_CALL notifyConfigurationChange ( - const css::drawing::framework::ConfigurationChangeEvent& rEvent) override; - - // XEventListener - - virtual void SAL_CALL disposing ( - const css::lang::EventObject& rEvent) override; - -protected: - css::uno::Reference<css::drawing::framework::XConfigurationController> - mxConfigurationController; - -private: - class MainViewContainer; - std::unique_ptr<MainViewContainer> mpActiveMainViewContainer; - - /// The resource managed by this class. - css::uno::Reference<css::drawing::framework::XResourceId> mxResourceId; - - /// The anchor of the main view. - css::uno::Reference<css::drawing::framework::XResourceId> mxMainViewAnchorId; - - OUString msCurrentMainViewURL; - - void HandleMainViewSwitch ( - const OUString& rsViewURL, - const bool bIsActivated); - void HandleResourceRequest( - bool bActivation, - const css::uno::Reference<css::drawing::framework::XConfiguration>& rxConfiguration); -}; - -} } // end of namespace sd::framework - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/framework/module/SlideSorterModule.cxx b/sd/source/ui/framework/module/SlideSorterModule.cxx index 68020f5ee39e..5eca32192f00 100644 --- a/sd/source/ui/framework/module/SlideSorterModule.cxx +++ b/sd/source/ui/framework/module/SlideSorterModule.cxx @@ -20,8 +20,10 @@ #include "SlideSorterModule.hxx" #include <framework/FrameworkHelper.hxx> +#include <framework/ConfigurationController.hxx> #include <com/sun/star/drawing/framework/XTabBar.hpp> #include <com/sun/star/drawing/framework/TabBarButton.hpp> +#include <com/sun/star/drawing/framework/XControllerManager.hpp> #include <strings.hrc> #include <sdresid.hxx> @@ -33,6 +35,11 @@ using namespace ::com::sun::star::drawing::framework; using ::sd::framework::FrameworkHelper; +namespace { + static const sal_Int32 ResourceActivationRequestEvent = 0; + static const sal_Int32 ResourceDeactivationRequestEvent = 1; +} + namespace sd { namespace framework { //===== SlideSorterModule ================================================== @@ -40,13 +47,36 @@ namespace sd { namespace framework { SlideSorterModule::SlideSorterModule ( const Reference<frame::XController>& rxController, const OUString& rsLeftPaneURL) - : ResourceManager(rxController, - FrameworkHelper::CreateResourceId(FrameworkHelper::msSlideSorterURL, rsLeftPaneURL)), + : SlideSorterModuleBase(MutexOwner::maMutex), + mxConfigurationController(), + mxResourceId(FrameworkHelper::CreateResourceId(FrameworkHelper::msSlideSorterURL, rsLeftPaneURL)), + mxMainViewAnchorId(FrameworkHelper::CreateResourceId(FrameworkHelper::msCenterPaneURL)), + msCurrentMainViewURL(), mxViewTabBarId(FrameworkHelper::CreateResourceId( FrameworkHelper::msViewTabBarURL, FrameworkHelper::msCenterPaneURL)), mxControllerManager(rxController,UNO_QUERY) { + Reference<XControllerManager> xControllerManager (rxController, UNO_QUERY); + if (xControllerManager.is()) + { + mxConfigurationController = xControllerManager->getConfigurationController(); + + if (mxConfigurationController.is()) + { + uno::Reference<lang::XComponent> const xComppnent( + mxConfigurationController, UNO_QUERY_THROW); + xComppnent->addEventListener(this); + mxConfigurationController->addConfigurationChangeListener( + this, + FrameworkHelper::msResourceActivationRequestEvent, + makeAny(ResourceActivationRequestEvent)); + mxConfigurationController->addConfigurationChangeListener( + this, + FrameworkHelper::msResourceDeactivationRequestEvent, + makeAny(ResourceDeactivationRequestEvent)); + } + } if (mxConfigurationController.is()) { UpdateViewTabBar(nullptr); @@ -106,10 +136,55 @@ void SAL_CALL SlideSorterModule::notifyConfigurationChange ( // has changed. UpdateViewTabBar(nullptr); } + return; } - else + + OSL_ASSERT(rEvent.ResourceId.is()); + sal_Int32 nEventType = 0; + rEvent.UserData >>= nEventType; + switch (nEventType) { - ResourceManager::notifyConfigurationChange(rEvent); + case ResourceActivationRequestEvent: + if (rEvent.ResourceId->isBoundToURL( + FrameworkHelper::msCenterPaneURL, + AnchorBindingMode_DIRECT)) + { + // A resource directly bound to the center pane has been + // requested. + if (rEvent.ResourceId->getResourceTypePrefix() == + FrameworkHelper::msViewURLPrefix) + { + // The requested resource is a view. Show or hide the + // resource managed by this ResourceManager accordingly. + HandleMainViewSwitch( + rEvent.ResourceId->getResourceURL(), + true); + } + } + else if (rEvent.ResourceId->compareTo(mxResourceId) == 0) + { + // The resource managed by this ResourceManager has been + // explicitly been requested (maybe by us). Remember this + // setting. + HandleResourceRequest(true, rEvent.Configuration); + } + break; + + case ResourceDeactivationRequestEvent: + if (rEvent.ResourceId->compareTo(mxMainViewAnchorId) == 0) + { + HandleMainViewSwitch( + OUString(), + false); + } + else if (rEvent.ResourceId->compareTo(mxResourceId) == 0) + { + // The resource managed by this ResourceManager has been + // explicitly been requested to be hidden (maybe by us). + // Remember this setting. + HandleResourceRequest(false, rEvent.Configuration); + } + break; } } @@ -145,6 +220,92 @@ void SlideSorterModule::UpdateViewTabBar (const Reference<XTabBar>& rxTabBar) } } +void SlideSorterModule::AddActiveMainView ( + const OUString& rsMainViewURL) +{ + maActiveMainViewContainer.insert(rsMainViewURL); +} + +bool SlideSorterModule::IsResourceActive ( + const OUString& rsMainViewURL) +{ + return (maActiveMainViewContainer.find(rsMainViewURL) != maActiveMainViewContainer.end()); +} + +void SAL_CALL SlideSorterModule::disposing() +{ + if (mxConfigurationController.is()) + { + mxConfigurationController->removeConfigurationChangeListener(this); + mxConfigurationController = nullptr; + } +} + +void SlideSorterModule::HandleMainViewSwitch ( + const OUString& rsViewURL, + const bool bIsActivated) +{ + if (bIsActivated) + msCurrentMainViewURL = rsViewURL; + else + msCurrentMainViewURL.clear(); + + if (mxConfigurationController.is()) + { + ConfigurationController::Lock aLock (mxConfigurationController); + + if (maActiveMainViewContainer.find(msCurrentMainViewURL) + != maActiveMainViewContainer.end()) + { + // Activate resource. + mxConfigurationController->requestResourceActivation( + mxResourceId->getAnchor(), + ResourceActivationMode_ADD); + mxConfigurationController->requestResourceActivation( + mxResourceId, + ResourceActivationMode_REPLACE); + } + else + { + mxConfigurationController->requestResourceDeactivation(mxResourceId); + } + } +} + +void SlideSorterModule::HandleResourceRequest( + bool bActivation, + const Reference<XConfiguration>& rxConfiguration) +{ + Sequence<Reference<XResourceId> > aCenterViews = rxConfiguration->getResources( + FrameworkHelper::CreateResourceId(FrameworkHelper::msCenterPaneURL), + FrameworkHelper::msViewURLPrefix, + AnchorBindingMode_DIRECT); + if (aCenterViews.getLength() == 1) + { + if (bActivation) + { + maActiveMainViewContainer.insert(aCenterViews[0]->getResourceURL()); + } + else + { + maActiveMainViewContainer.erase(aCenterViews[0]->getResourceURL()); + } + } +} + +void SAL_CALL SlideSorterModule::disposing ( + const lang::EventObject& rEvent) +{ + if (mxConfigurationController.is() + && rEvent.Source == mxConfigurationController) + { + SaveResourceState(); + // Without the configuration controller this class can do nothing. + mxConfigurationController = nullptr; + dispose(); + } +} + } } // end of namespace sd::framework /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/framework/module/SlideSorterModule.hxx b/sd/source/ui/framework/module/SlideSorterModule.hxx index 3b0eb9f709a9..c5431ad17ad7 100644 --- a/sd/source/ui/framework/module/SlideSorterModule.hxx +++ b/sd/source/ui/framework/module/SlideSorterModule.hxx @@ -20,18 +20,34 @@ #ifndef INCLUDED_SD_SOURCE_UI_FRAMEWORK_MODULE_SLIDESORTERMODULE_HXX #define INCLUDED_SD_SOURCE_UI_FRAMEWORK_MODULE_SLIDESORTERMODULE_HXX -#include "ResourceManager.hxx" - +#include <MutexOwner.hxx> +#include <com/sun/star/drawing/framework/XConfigurationChangeListener.hpp> +#include <com/sun/star/drawing/framework/XConfigurationController.hpp> +#include <com/sun/star/frame/XController.hpp> #include <com/sun/star/drawing/framework/XControllerManager.hpp> #include <com/sun/star/drawing/framework/XTabBar.hpp> +#include <cppuhelper/compbase.hxx> +#include <memory> +#include <set> namespace sd { namespace framework { +typedef ::cppu::WeakComponentImplHelper < + css::drawing::framework::XConfigurationChangeListener + > SlideSorterModuleBase; + /** This module is responsible for showing the slide sorter bar and the slide sorter view in the center pane. + + Manage the activation state of one resource depending on the view in the + center pane. The ResourceManager remembers in which configuration to + activate and in which to deactivate the resource. When the resource is + deactivated or activated manually by the user then the ResourceManager + detects this and remembers it for the future. */ class SlideSorterModule - : public ResourceManager + : private sd::MutexOwner, + public SlideSorterModuleBase { public: SlideSorterModule ( @@ -39,16 +55,41 @@ public: const OUString& rsLeftPaneURL); virtual ~SlideSorterModule() override; - virtual void SaveResourceState() override; - // XConfigurationChangeListener + /** Remember the given URL as one of a center pane view for which to + activate the resource managed by the called object. + */ + void AddActiveMainView (const OUString& rsMainViewURL); + bool IsResourceActive (const OUString& rsMainViewURL); + virtual void SaveResourceState(); + virtual void SAL_CALL disposing() override; + + // XConfigurationChangeListener virtual void SAL_CALL notifyConfigurationChange ( const css::drawing::framework::ConfigurationChangeEvent& rEvent) override; + // XEventListener + virtual void SAL_CALL disposing ( + const css::lang::EventObject& rEvent) override; + private: + css::uno::Reference<css::drawing::framework::XConfigurationController> + mxConfigurationController; + ::std::set<OUString> maActiveMainViewContainer; + /// The resource managed by this class. + css::uno::Reference<css::drawing::framework::XResourceId> mxResourceId; + /// The anchor of the main view. + css::uno::Reference<css::drawing::framework::XResourceId> mxMainViewAnchorId; + OUString msCurrentMainViewURL; css::uno::Reference<css::drawing::framework::XResourceId> mxViewTabBarId; css::uno::Reference<css::drawing::framework::XControllerManager> mxControllerManager; + void HandleMainViewSwitch ( + const OUString& rsViewURL, + const bool bIsActivated); + void HandleResourceRequest( + bool bActivation, + const css::uno::Reference<css::drawing::framework::XConfiguration>& rxConfiguration); void UpdateViewTabBar ( const css::uno::Reference<css::drawing::framework::XTabBar>& rxViewTabBar); }; |