/************************************************************** * * 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 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "precompiled_sd.hxx" #include "BasicToolBarFactory.hxx" #include "ViewTabBar.hxx" #include "framework/FrameworkHelper.hxx" #include #include #include "DrawController.hxx" 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 { namespace framework { Reference SAL_CALL BasicToolBarFactory_createInstance ( const Reference& rxContext) { return static_cast(new BasicToolBarFactory(rxContext)); } ::rtl::OUString BasicToolBarFactory_getImplementationName (void) throw(RuntimeException) { return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Draw.framework.BasicToolBarFactory")); } Sequence SAL_CALL BasicToolBarFactory_getSupportedServiceNames (void) throw (RuntimeException) { static const ::rtl::OUString sServiceName( ::rtl::OUString::createFromAscii("com.sun.star.drawing.framework.BasicToolBarFactory")); return Sequence(&sServiceName, 1); } //===== BasicToolBarFactory =================================================== BasicToolBarFactory::BasicToolBarFactory ( const Reference& rxContext) : BasicToolBarFactoryInterfaceBase(m_aMutex), mxConfigurationController(), mxController(), mpViewShellBase(NULL) { (void)rxContext; } BasicToolBarFactory::~BasicToolBarFactory (void) { } void SAL_CALL BasicToolBarFactory::disposing (void) { Shutdown(); } void BasicToolBarFactory::Shutdown (void) { mpViewShellBase = NULL; Reference xComponent (mxConfigurationController, UNO_QUERY); if (xComponent.is()) xComponent->removeEventListener(static_cast(this)); if (mxConfigurationController.is()) { mxConfigurationController->removeResourceFactoryForReference(this); mxConfigurationController = NULL; } } //----- XInitialization ------------------------------------------------------- void SAL_CALL BasicToolBarFactory::initialize (const Sequence& aArguments) throw (Exception, RuntimeException) { if (aArguments.getLength() > 0) { try { // Get the XController from the first argument. mxController = Reference(aArguments[0], UNO_QUERY_THROW); // Tunnel through the controller to obtain a ViewShellBase. Reference xTunnel (mxController, UNO_QUERY_THROW); ::sd::DrawController* pController = reinterpret_cast( xTunnel->getSomething(sd::DrawController::getUnoTunnelId())); if (pController != NULL) mpViewShellBase = pController->GetViewShellBase(); ::comphelper::MediaDescriptor aDescriptor (mxController->getModel()->getArgs()); if ( ! aDescriptor.getUnpackedValueOrDefault( ::comphelper::MediaDescriptor::PROP_PREVIEW(), sal_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 = NULL; } } catch (RuntimeException&) { Shutdown(); throw; } } } //----- lang::XEventListener -------------------------------------------------- void SAL_CALL BasicToolBarFactory::disposing ( const lang::EventObject& rEventObject) throw (RuntimeException) { if (rEventObject.Source == mxConfigurationController) mxConfigurationController = NULL; } //===== XPaneFactory ========================================================== Reference SAL_CALL BasicToolBarFactory::createResource ( const Reference& rxToolBarId) throw (RuntimeException, IllegalArgumentException, WrappedTargetException) { ThrowIfDisposed(); Reference xToolBar; if (rxToolBarId->getResourceURL().equals(FrameworkHelper::msViewTabBarURL)) { xToolBar = new ViewTabBar(rxToolBarId, mxController); } else throw lang::IllegalArgumentException(); return xToolBar; } void SAL_CALL BasicToolBarFactory::releaseResource ( const Reference& rxToolBar) throw (RuntimeException) { ThrowIfDisposed(); Reference xComponent (rxToolBar, UNO_QUERY); if (xComponent.is()) xComponent->dispose(); } void BasicToolBarFactory::ThrowIfDisposed (void) const throw (lang::DisposedException) { if (rBHelper.bDisposed || rBHelper.bInDispose) { throw lang::DisposedException ( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "BasicToolBarFactory object has already been disposed")), const_cast(static_cast(this))); } } } } // end of namespace sd::framework