summaryrefslogtreecommitdiffstats
path: root/framework/inc/macros
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
commit940b4d1848e8c70ab7642901a68594e8016caffc (patch)
treeeb72f344ee6c3d9b80a7ecc079ea79e9fba8676d /framework/inc/macros
parentInitial commit. (diff)
downloadlibreoffice-upstream.tar.xz
libreoffice-upstream.zip
Adding upstream version 1:7.0.4.upstream/1%7.0.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'framework/inc/macros')
-rw-r--r--framework/inc/macros/registration.hxx90
-rw-r--r--framework/inc/macros/xinterface.hxx145
-rw-r--r--framework/inc/macros/xserviceinfo.hxx183
-rw-r--r--framework/inc/macros/xtypeprovider.hxx119
4 files changed, 537 insertions, 0 deletions
diff --git a/framework/inc/macros/registration.hxx b/framework/inc/macros/registration.hxx
new file mode 100644
index 000000000..878bc89c4
--- /dev/null
+++ b/framework/inc/macros/registration.hxx
@@ -0,0 +1,90 @@
+/* -*- 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_FRAMEWORK_INC_MACROS_REGISTRATION_HXX
+#define INCLUDED_FRAMEWORK_INC_MACROS_REGISTRATION_HXX
+
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+
+//namespace framework{
+
+/*_________________________________________________________________________________________________________________
+
+ macros for registration of services
+ Please use follow public macros only!
+
+ IFFACTORY( CLASS ) => use it as parameter for COMPONENT_GETFACTORY( IFFACTORIES )
+ COMPONENTGETFACTORY( LIB, IFFACTORIES ) => use it to define exported function LIB_component_getFactory()
+
+_________________________________________________________________________________________________________________*/
+
+// public
+// use it as parameter for COMPONENT_GETFACTORY( IFFACTORIES )
+
+#define IFFACTORY( CLASS ) \
+ /* If searched name found ... */ \
+ /* You can't add some statements before follow line ... Here can be an ELSE-statement! */ \
+ if ( CLASS::impl_getStaticImplementationName().equalsAscii( pImplementationName ) ) \
+ { \
+ /* ... then create right factory for this service. */ \
+ /* xFactory and xServiceManager are local variables of method which use this macro. */ \
+ xFactory = CLASS::impl_createFactory( xServiceManager ); \
+ }
+
+// public
+// define method to instantiate new services
+
+#define COMPONENTGETFACTORY( LIB, IFFACTORIES ) \
+ extern "C" SAL_DLLPUBLIC_EXPORT void* LIB##_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. */ \
+ css::uno::Reference< css::uno::XInterface > xFactory; \
+ css::uno::Reference< css::lang::XMultiServiceFactory > xServiceManager = static_cast< css::lang::XMultiServiceFactory* >( pServiceManager ); \
+ /* These parameter will expand to */ \
+ /* "IF_NAME_CREATECOMPONENTFACTORY(a) */ \
+ /* else */ \
+ /* ... */ \
+ /* else */ \
+ /* IF_NAME_CREATECOMPONENTFACTORY(z)" */ \
+ IFFACTORIES \
+ /* Factory is valid, if service was found. */ \
+ if ( xFactory.is() ) \
+ { \
+ xFactory->acquire(); \
+ pReturn = xFactory.get(); \
+ } \
+ } \
+ /* Return with result of this operation. */ \
+ return pReturn; \
+ }
+
+//} // namespace framework
+
+#endif // INCLUDED_FRAMEWORK_INC_MACROS_REGISTRATION_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/inc/macros/xinterface.hxx b/framework/inc/macros/xinterface.hxx
new file mode 100644
index 000000000..da070f23a
--- /dev/null
+++ b/framework/inc/macros/xinterface.hxx
@@ -0,0 +1,145 @@
+/* -*- 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_FRAMEWORK_INC_MACROS_XINTERFACE_HXX
+#define INCLUDED_FRAMEWORK_INC_MACROS_XINTERFACE_HXX
+
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Type.hxx>
+#include <cppuhelper/queryinterface.hxx>
+
+namespace framework{
+
+/*_________________________________________________________________________________________________________________
+
+ macros for declaration and definition of XInterface
+ Please use follow public macros only!
+
+ 1) DEFINE_XINTERFACE => use it in header to declare XInterface and his methods
+ 2) DIRECT_INTERFACE( INTERFACE ) => use it as parameter INTERFACEx at 4) if interface not ambiguous
+ 3) DERIVED_INTERFACE( BASEINTERFACE, DERIVEDINTERFACE ) => use it as parameter INTERFACEx at 4) if interface can be ambiguous
+ 4) DECLARE_XINTERFACE_0( CLASS, BASECLASS ) => use it to define implementation of XInterface for 0 additional interface to baseclass
+ DECLARE_XINTERFACE_1( CLASS, BASECLASS, INTERFACE1 ) => use it to define implementation of XInterface for 1 additional interface to baseclass
+ ...
+ DECLARE_XINTERFACE_16( CLASS, BASECLASS, INTERFACE1, ... , INTERFACE16 )
+
+_________________________________________________________________________________________________________________*/
+
+// private
+// implementation of XInterface::acquire()
+// XInterface::release()
+
+#define PRIVATE_DEFINE_XINTERFACE_ACQUIRE_RELEASE( CLASS, BASECLASS ) \
+ void SAL_CALL CLASS::acquire() throw() \
+ { \
+ /* Don't use mutex in methods of XInterface! */ \
+ BASECLASS::acquire(); \
+ } \
+ \
+ void SAL_CALL CLASS::release() throw() \
+ { \
+ /* Don't use mutex in methods of XInterface! */ \
+ BASECLASS::release(); \
+ }
+
+// private
+// complete implementation of XInterface with max. 12 other interfaces!
+
+#define PRIVATE_DEFINE_XINTERFACE( CLASS, BASECLASS, INTERFACES ) \
+ PRIVATE_DEFINE_XINTERFACE_ACQUIRE_RELEASE( CLASS, BASECLASS ) \
+ css::uno::Any SAL_CALL CLASS::queryInterface( const css::uno::Type& aType ) \
+ { \
+ /* Attention: Don't use mutex or guard in this method!!! Is a method of XInterface. */ \
+ /* Ask for my own supported interfaces ... */ \
+ css::uno::Any aReturn ( ::cppu::queryInterface INTERFACES \
+ ); \
+ /* If searched interface not supported by this class ... */ \
+ if ( !aReturn.hasValue() ) \
+ { \
+ /* ... ask baseclass for interfaces! */ \
+ aReturn = BASECLASS::queryInterface( aType ); \
+ } \
+ /* Return result of this search. */ \
+ return aReturn; \
+ }
+
+// private
+// help macros to replace INTERFACES in queryInterface() [see before]
+
+#define PRIVATE_DEFINE_INTERFACE_11( INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11 ) \
+ INTERFACE1, \
+ INTERFACE2, \
+ INTERFACE3, \
+ INTERFACE4, \
+ INTERFACE5, \
+ INTERFACE6, \
+ INTERFACE7, \
+ INTERFACE8, \
+ INTERFACE9, \
+ INTERFACE10, \
+ INTERFACE11
+
+// public
+// help macros for follow XInterface definitions
+
+// Use it as parameter for DEFINE_XINTERFACE_X(), if you CAN use an interface directly in queryInterface()!
+#define DIRECT_INTERFACE( INTERFACE ) \
+ static_cast< INTERFACE* >( this )
+
+// Use it as parameter for DEFINE_XINTERFACE_X(), if you CAN'T use an interface directly in queryInterface()!
+// (zB at ambiguous errors!)
+#define DERIVED_INTERFACE( BASEINTERFACE, DERIVEDINTERFACE ) \
+ static_cast< BASEINTERFACE* >( static_cast< DERIVEDINTERFACE* >( this ) )
+
+// public
+// declaration of XInterface
+
+#define FWK_DECLARE_XINTERFACE \
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& aType ) override; \
+ virtual void SAL_CALL acquire ( ) throw() override; \
+ virtual void SAL_CALL release ( ) throw() override;
+
+// public
+// implementation of XInterface
+
+
+// implementation of XInterface with 11 additional interfaces for queryInterface()
+#define DEFINE_XINTERFACE_11( CLASS, BASECLASS, INTERFACE1, INTERFACE2, INTERFACE3, INTERFACE4, INTERFACE5, INTERFACE6, INTERFACE7, INTERFACE8, INTERFACE9, INTERFACE10, INTERFACE11 ) \
+ PRIVATE_DEFINE_XINTERFACE ( CLASS, \
+ BASECLASS, \
+ ( aType, PRIVATE_DEFINE_INTERFACE_11 ( INTERFACE1 , \
+ INTERFACE2 , \
+ INTERFACE3 , \
+ INTERFACE4 , \
+ INTERFACE5 , \
+ INTERFACE6 , \
+ INTERFACE7 , \
+ INTERFACE8 , \
+ INTERFACE9 , \
+ INTERFACE10 , \
+ INTERFACE11 \
+ ) \
+ ) \
+ )
+
+} // namespace framework
+
+#endif // INCLUDED_FRAMEWORK_INC_MACROS_XINTERFACE_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/inc/macros/xserviceinfo.hxx b/framework/inc/macros/xserviceinfo.hxx
new file mode 100644
index 000000000..9849c5d0e
--- /dev/null
+++ b/framework/inc/macros/xserviceinfo.hxx
@@ -0,0 +1,183 @@
+/* -*- 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_FRAMEWORK_INC_MACROS_XSERVICEINFO_HXX
+#define INCLUDED_FRAMEWORK_INC_MACROS_XSERVICEINFO_HXX
+
+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <cppuhelper/factory.hxx>
+#include <comphelper/processfactory.hxx>
+#include <cppuhelper/supportsservice.hxx>
+#include <rtl/ustring.hxx>
+
+namespace framework{
+
+/*
+ macros for declaration and definition of XServiceInfo
+ Please use follow public macros only!
+
+ 2) DEFINE_XSERVICEINFO_MULTISERVICE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) => use it to define XServiceInfo for multi service mode
+ 3) DEFINE_XSERVICEINFO_ONEINSTANCESERVICE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) => use it to define XServiceInfo for one instance service mode
+ 4) DEFINE_INIT_SERVICE( CLASS ) => use it to implement your own impl_initService() method, which is necessary for initializing object by using his own reference!
+*/
+
+#define PRIVATE_DEFINE_XSERVICEINFO_BASE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ \
+ OUString SAL_CALL CLASS::getImplementationName() \
+ { \
+ return impl_getStaticImplementationName(); \
+ } \
+ \
+ sal_Bool SAL_CALL CLASS::supportsService( const OUString& sServiceName ) \
+ { \
+ return cppu::supportsService(this, sServiceName); \
+ } \
+ \
+ css::uno::Sequence< OUString > SAL_CALL CLASS::getSupportedServiceNames() \
+ { \
+ return impl_getStaticSupportedServiceNames(); \
+ } \
+ \
+ css::uno::Sequence< OUString > CLASS::impl_getStaticSupportedServiceNames() \
+ { \
+ css::uno::Sequence< OUString > seqServiceNames { SERVICENAME }; \
+ return seqServiceNames; \
+ } \
+ \
+ OUString CLASS::impl_getStaticImplementationName() \
+ { \
+ return IMPLEMENTATIONNAME; \
+ }
+
+#define PRIVATE_DEFINE_XSERVICEINFO_OLDSTYLE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_XSERVICEINFO_BASE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ /* Attention: To avoid against wrong ref counts during our own initialize procedure, we must */ \
+ /* use right EXTERNAL handling of them. That's why you should do nothing in your ctor, which could*/ \
+ /* work on your ref count! All other things are allowed. Do work with your own reference - please */ \
+ /* use "impl_initService()" method. */ \
+ css::uno::Reference< css::uno::XInterface > SAL_CALL CLASS::impl_createInstance( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager ) \
+ { \
+ /* create new instance of service */ \
+ CLASS* pClass = new CLASS( xServiceManager ); \
+ /* hold it alive by increasing his ref count!!! */ \
+ css::uno::Reference< css::uno::XInterface > xService( static_cast< XINTERFACECAST* >(pClass), css::uno::UNO_QUERY ); \
+ /* initialize new service instance ... he can use his own refcount ... we hold it! */ \
+ pClass->impl_initService(); \
+ /* return new created service as reference */ \
+ return xService; \
+ }
+
+#define PRIVATE_DEFINE_XSERVICEINFO_NEWSTYLE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_XSERVICEINFO_BASE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ /* Attention: To avoid against wrong ref counts during our own initialize procedure, we must */ \
+ /* use right EXTERNAL handling of them. That's why you should do nothing in your ctor, which could*/ \
+ /* work on your ref count! All other things are allowed. Do work with your own reference - please */ \
+ /* use "impl_initService()" method. */ \
+ css::uno::Reference< css::uno::XInterface > SAL_CALL CLASS::impl_createInstance( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager )\
+ { \
+ /* retrieve component context from the given service manager */ \
+ css::uno::Reference< css::uno::XComponentContext > xComponentContext( \
+ comphelper::getComponentContext( xServiceManager ) ); \
+ /* create new instance of service */ \
+ CLASS* pClass = new CLASS( xComponentContext ); \
+ /* hold it alive by increasing his ref count!!! */ \
+ css::uno::Reference< css::uno::XInterface > xService( static_cast< XINTERFACECAST* >(pClass), css::uno::UNO_QUERY ); \
+ /* initialize new service instance ... he can use his own refcount ... we hold it! */ \
+ pClass->impl_initService(); \
+ /* return new created service as reference */ \
+ return xService; \
+ }
+
+#define PRIVATE_DEFINE_SINGLEFACTORY( CLASS ) \
+ css::uno::Reference< css::lang::XSingleServiceFactory > CLASS::impl_createFactory( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager ) \
+ { \
+ css::uno::Reference< css::lang::XSingleServiceFactory > xReturn ( cppu::createSingleFactory ( xServiceManager , \
+ CLASS::impl_getStaticImplementationName() , \
+ CLASS::impl_createInstance , \
+ CLASS::impl_getStaticSupportedServiceNames() \
+ ) \
+ ); \
+ return xReturn; \
+ }
+
+#define PRIVATE_DEFINE_ONEINSTANCEFACTORY( CLASS ) \
+ css::uno::Reference< css::lang::XSingleServiceFactory > CLASS::impl_createFactory( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager ) \
+ { \
+ css::uno::Reference< css::lang::XSingleServiceFactory > xReturn ( cppu::createOneInstanceFactory ( xServiceManager , \
+ CLASS::impl_getStaticImplementationName() , \
+ CLASS::impl_createInstance , \
+ CLASS::impl_getStaticSupportedServiceNames() \
+ ) \
+ ); \
+ return xReturn; \
+ }
+
+#define DECLARE_XSERVICEINFO_NOFACTORY \
+ /* interface XServiceInfo */ \
+ virtual OUString SAL_CALL getImplementationName ( ) override; \
+ virtual sal_Bool SAL_CALL supportsService ( const OUString& sServiceName ) override; \
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames ( ) override; \
+ /* Helper for XServiceInfo */ \
+ static css::uno::Sequence< OUString > impl_getStaticSupportedServiceNames( ); \
+ static OUString impl_getStaticImplementationName ( ); \
+ /* Helper for initialization of service by using own reference! */ \
+ void impl_initService ( ); \
+
+#define DEFINE_XSERVICEINFO_MULTISERVICE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_XSERVICEINFO_OLDSTYLE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_SINGLEFACTORY( CLASS )
+
+#define DEFINE_XSERVICEINFO_ONEINSTANCESERVICE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_XSERVICEINFO_OLDSTYLE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_ONEINSTANCEFACTORY( CLASS )
+
+#define DEFINE_XSERVICEINFO_MULTISERVICE_2( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_XSERVICEINFO_NEWSTYLE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_SINGLEFACTORY( CLASS )
+
+#define DEFINE_XSERVICEINFO_ONEINSTANCESERVICE_2( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_XSERVICEINFO_NEWSTYLE( CLASS, XINTERFACECAST, SERVICENAME, IMPLEMENTATIONNAME ) \
+ PRIVATE_DEFINE_ONEINSTANCEFACTORY( CLASS )
+
+// public
+// implementation of service initialize!
+// example of using: DEFINE_INIT_SERVICE( MyClassName,
+// {
+// ...
+// Reference< XInterface > xThis( this, UNO_QUERY );
+// myMember* pMember = new myMember( xThis );
+// ...
+// }
+// )
+#define DEFINE_INIT_SERVICE( CLASS, FUNCTIONBODY ) \
+ void CLASS::impl_initService() \
+ { \
+ FUNCTIONBODY \
+ }
+
+} // namespace framework
+
+#endif // INCLUDED_FRAMEWORK_INC_MACROS_XSERVICEINFO_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/inc/macros/xtypeprovider.hxx b/framework/inc/macros/xtypeprovider.hxx
new file mode 100644
index 000000000..27f9a0546
--- /dev/null
+++ b/framework/inc/macros/xtypeprovider.hxx
@@ -0,0 +1,119 @@
+/* -*- 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_FRAMEWORK_INC_MACROS_XTYPEPROVIDER_HXX
+#define INCLUDED_FRAMEWORK_INC_MACROS_XTYPEPROVIDER_HXX
+
+#include <com/sun/star/lang/XTypeProvider.hpp>
+
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/uno/Type.hxx>
+#include <cppuhelper/typeprovider.hxx>
+
+namespace framework{
+
+/*_________________________________________________________________________________________________________________
+
+ macros for declaration and definition of XTypeProvider
+ Please use follow public macros only!
+
+ 1) DEFINE_XTYPEPROVIDER => use it in header to declare XTypeProvider and his methods
+ 2) DECLARE_TYPEPROVIDER_0( CLASS ) => use it to define implementation of XTypeProvider for 0 supported type
+ DECLARE_TYPEPROVIDER_1( CLASS, TYPE1 ) => use it to define implementation of XTypeProvider for 1 supported type
+ ...
+ DECLARE_TYPEPROVIDER_16( CLASS, TYPE1, ... , TYPE16 )
+ 3) DEFINE_XTYPEPROVIDER_1_WITH_BASECLASS( CLASS, BASECLASS, TYPE1 ) => use it to define implementation of XTypeProvider for 1 additional supported type to baseclass
+ ...
+ DEFINE_XTYPEPROVIDER_5_WITH_BASECLASS( CLASS, BASECLASS, TYPE1, ..., TYPE5 )
+
+_________________________________________________________________________________________________________________*/
+
+// private
+// implementation of XTypeProvider::getImplementationId()
+
+#define PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS ) \
+ css::uno::Sequence< sal_Int8 > SAL_CALL CLASS::getImplementationId() \
+ { \
+ return css::uno::Sequence<sal_Int8>(); \
+ }
+
+// private
+// help macros to replace TYPES in getTypes() [see before]
+
+#define PRIVATE_DEFINE_TYPE_11( TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11 ) \
+ cppu::UnoType<TYPE1>::get(), \
+ cppu::UnoType<TYPE2>::get(), \
+ cppu::UnoType<TYPE3>::get(), \
+ cppu::UnoType<TYPE4>::get(), \
+ cppu::UnoType<TYPE5>::get(), \
+ cppu::UnoType<TYPE6>::get(), \
+ cppu::UnoType<TYPE7>::get(), \
+ cppu::UnoType<TYPE8>::get(), \
+ cppu::UnoType<TYPE9>::get(), \
+ cppu::UnoType<TYPE10>::get(), \
+ cppu::UnoType<TYPE11>::get()
+
+// private
+// complete implementation of XTypeProvider with max. 12 interfaces!
+
+#define PRIVATE_DEFINE_XTYPEPROVIDER( CLASS, TYPES ) \
+ PRIVATE_DEFINE_XTYPEPROVIDER_GETIMPLEMENTATIONID( CLASS ) \
+ css::uno::Sequence< css::uno::Type > SAL_CALL CLASS::getTypes() \
+ { \
+ /* Attention: "TYPES" will expand to "(...)"! */ \
+ static cppu::OTypeCollection ourTypeCollection TYPES; \
+ return ourTypeCollection.getTypes(); \
+ }
+
+// public
+// declaration of XTypeProvider
+
+#define FWK_DECLARE_XTYPEPROVIDER \
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes () override;\
+ virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
+
+// public
+// implementation of XTypeProvider
+
+// implementation of XTypeProvider without additional interface for getTypes()
+// XTypeProvider is used as the only one interface automatically.
+
+
+// implementation of XTypeProvider with 11 additional interfaces for getTypes()
+#define DEFINE_XTYPEPROVIDER_11( CLASS, TYPE1, TYPE2, TYPE3, TYPE4, TYPE5, TYPE6, TYPE7, TYPE8, TYPE9, TYPE10, TYPE11 ) \
+ PRIVATE_DEFINE_XTYPEPROVIDER ( CLASS, \
+ (PRIVATE_DEFINE_TYPE_11 ( TYPE1 , \
+ TYPE2 , \
+ TYPE3 , \
+ TYPE4 , \
+ TYPE5 , \
+ TYPE6 , \
+ TYPE7 , \
+ TYPE8 , \
+ TYPE9 , \
+ TYPE10 , \
+ TYPE11 \
+ )) \
+ )
+
+} // namespace framework
+
+#endif // INCLUDED_FRAMEWORK_INC_MACROS_XTYPEPROVIDER_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */