/* -*- 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 "BasicToolBarFactory.hxx" #include #include #include #include #include #include #include using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::drawing::framework; namespace sd::framework { //===== BasicToolBarFactory =================================================== BasicToolBarFactory::BasicToolBarFactory () { } BasicToolBarFactory::~BasicToolBarFactory() { } void BasicToolBarFactory::disposing(std::unique_lock&) { Shutdown(); } void BasicToolBarFactory::Shutdown() { Reference xComponent (mxConfigurationController, UNO_QUERY); if (xComponent.is()) xComponent->removeEventListener(static_cast(this)); if (mxConfigurationController.is()) { mxConfigurationController->removeResourceFactoryForReference(this); mxConfigurationController = nullptr; } } //----- XInitialization ------------------------------------------------------- void SAL_CALL BasicToolBarFactory::initialize (const Sequence& aArguments) { if (!aArguments.hasElements()) return; try { // Get the XController from the first argument. mxController.set(aArguments[0], UNO_QUERY_THROW); utl::MediaDescriptor aDescriptor (mxController->getModel()->getArgs()); if ( ! aDescriptor.getUnpackedValueOrDefault( utl::MediaDescriptor::PROP_PREVIEW, false)) { // Register the factory for its supported tool bars. Reference xControllerManager(mxController, UNO_QUERY_THROW); mxConfigurationController = xControllerManager->getConfigurationController(); if (mxConfigurationController.is()) { mxConfigurationController->addResourceFactory( FrameworkHelper::msViewTabBarURL, this); } Reference xComponent (mxConfigurationController, UNO_QUERY); if (xComponent.is()) xComponent->addEventListener(static_cast(this)); } else { // The view shell is in preview mode and thus does not need // the view tab bar. mxConfigurationController = nullptr; } } catch (RuntimeException&) { Shutdown(); throw; } } //----- lang::XEventListener -------------------------------------------------- void SAL_CALL BasicToolBarFactory::disposing ( const lang::EventObject& rEventObject) { if (rEventObject.Source == mxConfigurationController) mxConfigurationController = nullptr; } //===== XPaneFactory ========================================================== Reference SAL_CALL BasicToolBarFactory::createResource ( const Reference& rxToolBarId) { ThrowIfDisposed(); if (rxToolBarId->getResourceURL() != FrameworkHelper::msViewTabBarURL) throw lang::IllegalArgumentException(); Reference xToolBar = new ViewTabBar(rxToolBarId, mxController); return xToolBar; } void SAL_CALL BasicToolBarFactory::releaseResource ( const Reference& rxToolBar) { ThrowIfDisposed(); Reference xComponent (rxToolBar, UNO_QUERY); if (xComponent.is()) xComponent->dispose(); } void BasicToolBarFactory::ThrowIfDisposed() const { if (m_bDisposed) { throw lang::DisposedException ("BasicToolBarFactory object has already been disposed", const_cast(static_cast(this))); } } } // end of namespace sd::framework extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* com_sun_star_comp_Draw_framework_BasicToolBarFactory_get_implementation(css::uno::XComponentContext*, css::uno::Sequence const &) { return cppu::acquire(new sd::framework::BasicToolBarFactory); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */