diff options
-rw-r--r-- | include/sfx2/sfxmodelfactory.hxx | 12 | ||||
-rw-r--r-- | sfx2/source/doc/sfxmodelfactory.cxx | 28 | ||||
-rwxr-xr-x | solenv/bin/native-code.py | 13 | ||||
-rw-r--r-- | starmath/Library_sm.mk | 1 | ||||
-rw-r--r-- | starmath/source/register.cxx | 72 | ||||
-rw-r--r-- | starmath/source/register.hxx | 37 | ||||
-rw-r--r-- | starmath/source/unodoc.cxx | 26 | ||||
-rw-r--r-- | starmath/util/sm.component | 5 |
8 files changed, 64 insertions, 130 deletions
diff --git a/include/sfx2/sfxmodelfactory.hxx b/include/sfx2/sfxmodelfactory.hxx index 1010fc0e3453..1096eca788b1 100644 --- a/include/sfx2/sfxmodelfactory.hxx +++ b/include/sfx2/sfxmodelfactory.hxx @@ -24,10 +24,12 @@ #include <com/sun/star/uno/Reference.hxx> #include <o3tl/typed_flags_set.hxx> +#include <functional> namespace com::sun::star::lang { class XMultiServiceFactory; } namespace com::sun::star::lang { class XSingleServiceFactory; } namespace com::sun::star::uno { class XInterface; } +namespace com::sun::star::uno { class XComponentContext; } namespace com::sun::star::uno { template <class E> class Sequence; } enum class SfxModelFlags @@ -68,6 +70,16 @@ namespace sfx2 const css::uno::Sequence< OUString >& _rServiceNames ); + /** + * Intended to be called from UNO constructor functions + * This evaluates certain creation arguments (passed to createInstanceWithArguments) + * and passes them to the factory function of the derived class. + */ + css::uno::Reference<css::uno::XInterface> + SFX2_DLLPUBLIC createSfxModelInstance( + const css::uno::Sequence<css::uno::Any> & rxArgs, + std::function<css::uno::Reference<css::uno::XInterface>( SfxModelFlags )> creationFunc + ); } // namespace sfx2 diff --git a/sfx2/source/doc/sfxmodelfactory.cxx b/sfx2/source/doc/sfxmodelfactory.cxx index 354df9db5450..fbb1b24382de 100644 --- a/sfx2/source/doc/sfxmodelfactory.cxx +++ b/sfx2/source/doc/sfxmodelfactory.cxx @@ -23,6 +23,8 @@ #include <com/sun/star/beans/NamedValue.hpp> #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/lang/XSingleServiceFactory.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> #include <comphelper/namedvaluecollection.hxx> #include <cppuhelper/implbase.hxx> @@ -79,6 +81,10 @@ namespace sfx2 virtual Reference< XInterface > SAL_CALL createInstance( ) override; virtual Reference< XInterface > SAL_CALL createInstanceWithArguments( const Sequence< Any >& aArguments ) override; + static css::uno::Reference<css::uno::XInterface> create( + const css::uno::Sequence<css::uno::Any> & rxArgs, + std::function<css::uno::Reference<css::uno::XInterface>(SfxModelFlags)> creationFunc); + // XServiceInfo virtual OUString SAL_CALL getImplementationName( ) override; virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; @@ -142,7 +148,18 @@ namespace sfx2 } - Reference< XInterface > SAL_CALL SfxModelFactory::createInstanceWithArguments( const Sequence< Any >& _rArguments ) + Reference< XInterface > SAL_CALL SfxModelFactory::createInstanceWithArguments( const Sequence< Any >& _rArguments ) + { + return create(_rArguments, + [&](SfxModelFlags _nCreationFlags) + { + return m_pComponentFactoryFunc(m_xServiceFactory, _nCreationFlags).get(); + }); + } + + css::uno::Reference<css::uno::XInterface> SfxModelFactory::create( + const css::uno::Sequence<css::uno::Any> & _rArguments, + std::function<css::uno::Reference<css::uno::XInterface>(SfxModelFlags)> creationFunc) { ::comphelper::NamedValueCollection aArgs( _rArguments ); const bool bEmbeddedObject = aArgs.getOrDefault( "EmbeddedObject", false ); @@ -154,7 +171,7 @@ namespace sfx2 | ( bScriptSupport ? SfxModelFlags::NONE : SfxModelFlags::DISABLE_EMBEDDED_SCRIPTS ) | ( bDocRecoverySupport ? SfxModelFlags::NONE : SfxModelFlags::DISABLE_DOCUMENT_RECOVERY ); - Reference< XInterface > xInstance( (*m_pComponentFactoryFunc)( m_xServiceFactory, nCreationFlags ) ); + Reference< XInterface > xInstance( creationFunc(nCreationFlags ) ); // to mimic the behaviour of the default factory's createInstanceWithArguments, we initialize // the object with the given arguments, stripped by the three special ones @@ -194,6 +211,13 @@ namespace sfx2 return m_aServiceNames; } + css::uno::Reference<css::uno::XInterface> createSfxModelInstance( + const css::uno::Sequence<css::uno::Any> & rxArgs, + std::function<css::uno::Reference<css::uno::XInterface>(SfxModelFlags)> creationFunc) + { + return SfxModelFactory::create(rxArgs, creationFunc); + } + Reference< XSingleServiceFactory > createSfxModelFactory( const Reference< XMultiServiceFactory >& _rxServiceFactory, const OUString& _rImplementationName, const SfxModelFactoryFunc _pComponentFactoryFunc, const Sequence< OUString >& _rServiceNames ) diff --git a/solenv/bin/native-code.py b/solenv/bin/native-code.py index fe98b0032674..b7176dfd93cd 100755 --- a/solenv/bin/native-code.py +++ b/solenv/bin/native-code.py @@ -21,7 +21,6 @@ import xml.etree.ElementTree as ET core_factory_list = [ ("libi18npoollo.a", "i18npool_component_getFactory"), - ("libsmlo.a", "sm_component_getFactory"), ("libucb1.a", "ucb_component_getFactory"), ("libvcllo.a", "vcl_component_getFactory"), ("libsvtlo.a", "svt_component_getFactory"), @@ -280,6 +279,18 @@ core_constructor_list = [ "com_sun_star_comp_uri_UriReferenceFactory_get_implementation", "com_sun_star_comp_uri_UriSchemeParser_vndDOTsunDOTstarDOTexpand_get_implementation", "com_sun_star_comp_uri_UriSchemeParser_vndDOTsunDOTstarDOTscript_get_implementation", +# starmath/util/sm.component + "Math_FormulaDocument_get_implementation", + "Math_XMLContentExporter_get_implementation", + "Math_XMLExporter_get_implementation", + "Math_XMLImporter_get_implementation", + "Math_XMLMetaExporter_get_implementation", + "Math_XMLOasisMetaExporter_get_implementation", + "Math_XMLOasisMetaImporter_get_implementation", + "Math_XMLOasisSettingsExporter_get_implementation", + "Math_XMLOasisSettingsImporter_get_implementation", + "Math_XMLSettingsExporter_get_implementation", + "com_sun_star_comp_Math_MathTypeFilter_get_implementation", # svl/source/fsstor/fsstorage.component "svl_FSStorageFactory_get_implementation", # svtools/util/svt.component diff --git a/starmath/Library_sm.mk b/starmath/Library_sm.mk index d4b22f4d6623..33fb7525bba0 100644 --- a/starmath/Library_sm.mk +++ b/starmath/Library_sm.mk @@ -84,7 +84,6 @@ $(eval $(call gb_Library_add_exception_objects,sm,\ starmath/source/rtfexport \ starmath/source/parse \ starmath/source/rect \ - starmath/source/register \ starmath/source/smdll \ starmath/source/smmod \ starmath/source/symbol \ diff --git a/starmath/source/register.cxx b/starmath/source/register.cxx deleted file mode 100644 index 89f7c2dd325a..000000000000 --- a/starmath/source/register.cxx +++ /dev/null @@ -1,72 +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 <rtl/ustring.hxx> - -#include <sfx2/sfxmodelfactory.hxx> - -#include <com/sun/star/lang/XSingleServiceFactory.hpp> - -#include "register.hxx" - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; - -extern "C" { - -SAL_DLLPUBLIC_EXPORT void* sm_component_getFactory( const char* pImplementationName, - void* pServiceManager, - void* /*pRegistryKey*/ ) -{ - // Set default return value for this operation - if it failed. - void* pReturn = nullptr ; - - if ( - ( pImplementationName != nullptr ) && - ( pServiceManager != nullptr ) - ) - { - // Define variables which are used in following macros. - Reference< XSingleServiceFactory > xFactory ; - Reference< XMultiServiceFactory > xServiceManager( static_cast< XMultiServiceFactory* >( pServiceManager ) ) ; - - if (SmDocument_getImplementationName().equalsAscii(pImplementationName)) - { - xFactory = ::sfx2::createSfxModelFactory( xServiceManager, - SmDocument_getImplementationName(), - SmDocument_createInstance, - SmDocument_getSupportedServiceNames() ); - } - - // Factory is valid - service was found. - if ( xFactory.is() ) - { - xFactory->acquire(); - pReturn = xFactory.get(); - } - } - - // Return with result of this operation. - return pReturn ; -} -} // extern "C" - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/starmath/source/register.hxx b/starmath/source/register.hxx deleted file mode 100644 index be875fbeccb0..000000000000 --- a/starmath/source/register.hxx +++ /dev/null @@ -1,37 +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_STARMATH_SOURCE_REGISTER_HXX -#define INCLUDED_STARMATH_SOURCE_REGISTER_HXX - -#include <sal/config.h> -#include <sfx2/sfxmodelfactory.hxx> - -//Math document -css::uno::Sequence< OUString > - SmDocument_getSupportedServiceNames() throw(); -OUString - SmDocument_getImplementationName() throw(); -/// @throws css::uno::Exception -css::uno::Reference< css::uno::XInterface > - SmDocument_createInstance(const css::uno::Reference< css::lang::XMultiServiceFactory > & rSMgr, SfxModelFlags _nCreationFlags); - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/starmath/source/unodoc.cxx b/starmath/source/unodoc.cxx index ac7a364390de..32c9692edd0d 100644 --- a/starmath/source/unodoc.cxx +++ b/starmath/source/unodoc.cxx @@ -19,7 +19,6 @@ #include <sfx2/sfxmodelfactory.hxx> -#include "register.hxx" #include <smdll.hxx> #include <document.hxx> #include <com/sun/star/frame/XModel.hpp> @@ -27,23 +26,20 @@ using namespace ::com::sun::star; -OUString SmDocument_getImplementationName() throw() -{ - return "com.sun.star.comp.Math.FormulaDocument"; -} - -uno::Sequence< OUString > SmDocument_getSupportedServiceNames() throw() -{ - return uno::Sequence<OUString>{ "com.sun.star.formula.FormulaProperties" }; -} - -uno::Reference< uno::XInterface > SmDocument_createInstance( - const uno::Reference< lang::XMultiServiceFactory > & /*rSMgr*/, SfxModelFlags _nCreationFlags ) +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* +Math_FormulaDocument_get_implementation( + css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any> const& args) { SolarMutexGuard aGuard; SmGlobals::ensure(); - SfxObjectShell* pShell = new SmDocShell( _nCreationFlags ); - return uno::Reference< uno::XInterface >( pShell->GetModel() ); + css::uno::Reference<css::uno::XInterface> xInterface = sfx2::createSfxModelInstance(args, + [&](SfxModelFlags _nCreationFlags) + { + SfxObjectShell* pShell = new SmDocShell( _nCreationFlags ); + return pShell->GetModel(); + }); + xInterface->acquire(); + return xInterface.get(); } diff --git a/starmath/util/sm.component b/starmath/util/sm.component index 775b41100a97..4f354df4acb0 100644 --- a/starmath/util/sm.component +++ b/starmath/util/sm.component @@ -18,8 +18,9 @@ --> <component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@" - prefix="sm" xmlns="http://openoffice.org/2010/uno-components"> - <implementation name="com.sun.star.comp.Math.FormulaDocument"> + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.comp.Math.FormulaDocument" + constructor="Math_FormulaDocument_get_implementation"> <service name="com.sun.star.formula.FormulaProperties"/> </implementation> <implementation name="com.sun.star.comp.Math.XMLContentExporter" |