1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 //______________________________________________________________________________________________________________
25 //	includes of other projects
26 //______________________________________________________________________________________________________________
27 
28 #include <cppuhelper/factory.hxx>
29 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
30 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
31 #include <com/sun/star/registry/XRegistryKey.hpp>
32 #include <com/sun/star/container/XSet.hpp>
33 
34 #include <stdio.h>
35 
36 //______________________________________________________________________________________________________________
37 //	includes of my own project
38 //______________________________________________________________________________________________________________
39 
40 //=============================================================================
41 //  Add new include line to use new services.
42 //=============================================================================
43 #include "framecontrol.hxx"
44 #include "progressbar.hxx"
45 #include "progressmonitor.hxx"
46 #include "statusindicator.hxx"
47 //=============================================================================
48 
49 //______________________________________________________________________________________________________________
50 //	defines
51 //______________________________________________________________________________________________________________
52 
53 // If you will debug macros of this file ... you must define follow constant!
54 // This switch on another macro AS_DBG_OUT(...), which will print text to "stdout".
55 
56 //#define AS_DBG_SWITCH
57 
58 //______________________________________________________________________________________________________________
59 //	namespaces
60 //______________________________________________________________________________________________________________
61 
62 using namespace ::rtl											;
63 using namespace ::cppu											;
64 using namespace ::unocontrols									;
65 using namespace ::com::sun::star::uno							;
66 using namespace ::com::sun::star::container						;
67 using namespace ::com::sun::star::lang							;
68 using namespace ::com::sun::star::registry						;
69 
70 //______________________________________________________________________________________________________________
71 //	macros
72 //______________________________________________________________________________________________________________
73 
74 //******************************************************************************************************************************
75 // See AS_DBG_SWITCH below !!!
76 #ifdef AS_DBG_SWITCH
77 	#define AS_DBG_OUT(OUTPUT)	printf( OUTPUT );
78 #else
79 	#define AS_DBG_OUT(OUTPUT)
80 #endif
81 
82 //******************************************************************************************************************************
83 #define	CREATEINSTANCE(CLASS)																												\
84 																																			\
85 	static Reference< XInterface > SAL_CALL CLASS##_createInstance ( const Reference< XMultiServiceFactory >& rServiceManager ) throw ( Exception )	\
86 	{																																		\
87 		AS_DBG_OUT ( "\tCREATEINSTANCE():\tOK\n" )																							\
88 		return Reference< XInterface >( *(OWeakObject*)(new CLASS( rServiceManager )) );													\
89 	}
90 
91 //******************************************************************************************************************************
92 #define	CREATEFACTORY_ONEINSTANCE(CLASS)																				\
93 																														\
94 	AS_DBG_OUT ( "\tCREATEFACTORY_ONEINSTANCE():\t[start]\n" )															\
95 	/* Create right factory ... */																						\
96 	xFactory = Reference< XSingleServiceFactory >																		\
97 					(																									\
98 						cppu::createOneInstanceFactory	(	xServiceManager										,		\
99 															CLASS::impl_getStaticImplementationName		()	,		\
100 															CLASS##_createInstance								,		\
101 															CLASS::impl_getStaticSupportedServiceNames	()	)		\
102 					) ;																									\
103 	AS_DBG_OUT ( "\tCREATEFACTORY_ONEINSTANCE():\t[end]\n" )
104 
105 //******************************************************************************************************************************
106 #define	CREATEFACTORY_SINGLE(CLASS)																						\
107 																														\
108 	AS_DBG_OUT ( "\tCREATEFACTORY_SINGLE():\t[start]\n" )																\
109 	/* Create right factory ... */																						\
110 	xFactory = Reference< XSingleServiceFactory >																		\
111 					(																									\
112 						cppu::createSingleFactory	(	xServiceManager										,			\
113 														CLASS::impl_getStaticImplementationName		()	,			\
114 														CLASS##_createInstance								,			\
115 														CLASS::impl_getStaticSupportedServiceNames	()	)			\
116 					) ;																									\
117 	AS_DBG_OUT ( "\tCREATEFACTORY_SINGLE():\t[end]\n" )
118 
119 //******************************************************************************************************************************
120 #define	IF_NAME_CREATECOMPONENTFACTORY_ONEINSTANCE(CLASS)																\
121 																														\
122 	if ( CLASS::impl_getStaticImplementationName().equals( OUString::createFromAscii( pImplementationName ) ) )		\
123 	{																													\
124 		AS_DBG_OUT ( "\tIF_NAME_CREATECOMPONENTFACTORY_ONEINSTANCE():\timplementationname found\n" )					\
125 		CREATEFACTORY_ONEINSTANCE ( CLASS )																			\
126 	}
127 
128 //******************************************************************************************************************************
129 #define	IF_NAME_CREATECOMPONENTFACTORY_SINGLE(CLASS)																	\
130 																														\
131 	if ( CLASS::impl_getStaticImplementationName().equals( OUString::createFromAscii( pImplementationName ) ) )		\
132 	{																													\
133 		AS_DBG_OUT ( "\tIF_NAME_CREATECOMPONENTFACTORY_SINGLE():\timplementationname found\n" )							\
134 		CREATEFACTORY_SINGLE ( CLASS )																				\
135 	}
136 
137 //______________________________________________________________________________________________________________
138 //	declare functions to create a new instance of service
139 //______________________________________________________________________________________________________________
140 
141 //=============================================================================
142 //  Add new macro line to use new services.
143 //
144 //	!!! ATTENTION !!!
145 //		Write no ";" at end of line! (see macro)
146 //=============================================================================
147 CREATEINSTANCE	( FrameControl		)
148 CREATEINSTANCE	( ProgressBar		)
149 CREATEINSTANCE	( ProgressMonitor	)
150 CREATEINSTANCE	( StatusIndicator	)
151 //=============================================================================
152 
153 //______________________________________________________________________________________________________________
154 //	return environment
155 //______________________________________________________________________________________________________________
156 
157 extern "C" void SAL_CALL component_getImplementationEnvironment(	const	sal_Char**			ppEnvironmentTypeName	,
158 																			uno_Environment**	/*ppEnvironment*/			)
159 {
160 	*ppEnvironmentTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ;
161 }
162 
163 //______________________________________________________________________________________________________________
164 //	create right component factory
165 //______________________________________________________________________________________________________________
166 
167 extern "C" void* SAL_CALL component_getFactory(	const	sal_Char*	pImplementationName	,
168 														void*		pServiceManager		,
169 														void*		/*pRegistryKey*/		)
170 {
171 	AS_DBG_OUT( "component_getFactory():\t[start]\n" )
172 
173 	// Set default return value for this operation - if it failed.
174 	void* pReturn = NULL ;
175 
176 	if	(
177 			( pImplementationName	!=	NULL ) &&
178 			( pServiceManager		!=	NULL )
179 		)
180 	{
181 		AS_DBG_OUT( "component_getFactory():\t\t... enter scope - pointer are valid\n" )
182 
183 		// Define variables which are used in following macros.
184 		Reference< XSingleServiceFactory >	xFactory																		;
185 		Reference< XMultiServiceFactory >	xServiceManager( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) )	;
186 
187 		//=============================================================================
188 		//  Add new macro line to handle new service.
189 		//
190 		//	!!! ATTENTION !!!
191 		//		Write no ";" at end of line and dont forget "else" ! (see macro)
192 		//=============================================================================
193 		IF_NAME_CREATECOMPONENTFACTORY_SINGLE( FrameControl		)
194 		else
195 		IF_NAME_CREATECOMPONENTFACTORY_SINGLE( ProgressBar		)
196 		else
197 		IF_NAME_CREATECOMPONENTFACTORY_SINGLE( ProgressMonitor	)
198 		else
199 		IF_NAME_CREATECOMPONENTFACTORY_SINGLE( StatusIndicator	)
200 		//=============================================================================
201 
202 		// Factory is valid - service was found.
203 		if ( xFactory.is() )
204 		{
205 			AS_DBG_OUT( "component_getFactory():\t\t\t... xFactory valid - service was found\n" )
206 
207 			xFactory->acquire();
208 			pReturn = xFactory.get();
209 		}
210 
211 		AS_DBG_OUT( "component_getFactory():\t\t... leave scope\n" )
212 	}
213 
214 	AS_DBG_OUT ( "component_getFactory():\t[end]\n" )
215 
216 	// Return with result of this operation.
217 	return pReturn ;
218 }
219