1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir //______________________________________________________________________________________________________________
29*cdf0e10cSrcweir //	includes of other projects
30*cdf0e10cSrcweir //______________________________________________________________________________________________________________
31*cdf0e10cSrcweir 
32*cdf0e10cSrcweir #include <cppuhelper/factory.hxx>
33*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
34*cdf0e10cSrcweir #include <com/sun/star/lang/XSingleServiceFactory.hpp>
35*cdf0e10cSrcweir #include <com/sun/star/registry/XRegistryKey.hpp>
36*cdf0e10cSrcweir #include <com/sun/star/container/XSet.hpp>
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir #include <stdio.h>
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir //______________________________________________________________________________________________________________
41*cdf0e10cSrcweir //	includes of my own project
42*cdf0e10cSrcweir //______________________________________________________________________________________________________________
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir //=============================================================================
45*cdf0e10cSrcweir //  Add new include line to use new services.
46*cdf0e10cSrcweir //=============================================================================
47*cdf0e10cSrcweir #include "framecontrol.hxx"
48*cdf0e10cSrcweir #include "progressbar.hxx"
49*cdf0e10cSrcweir #include "progressmonitor.hxx"
50*cdf0e10cSrcweir #include "statusindicator.hxx"
51*cdf0e10cSrcweir //=============================================================================
52*cdf0e10cSrcweir 
53*cdf0e10cSrcweir //______________________________________________________________________________________________________________
54*cdf0e10cSrcweir //	defines
55*cdf0e10cSrcweir //______________________________________________________________________________________________________________
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir // If you will debug macros of this file ... you must define follow constant!
58*cdf0e10cSrcweir // Ths switch on another macro AS_DBG_OUT(...), which will print text to "stdout".
59*cdf0e10cSrcweir 
60*cdf0e10cSrcweir //#define AS_DBG_SWITCH
61*cdf0e10cSrcweir 
62*cdf0e10cSrcweir //______________________________________________________________________________________________________________
63*cdf0e10cSrcweir //	namespaces
64*cdf0e10cSrcweir //______________________________________________________________________________________________________________
65*cdf0e10cSrcweir 
66*cdf0e10cSrcweir using namespace ::rtl											;
67*cdf0e10cSrcweir using namespace ::cppu											;
68*cdf0e10cSrcweir using namespace ::unocontrols									;
69*cdf0e10cSrcweir using namespace ::com::sun::star::uno							;
70*cdf0e10cSrcweir using namespace ::com::sun::star::container						;
71*cdf0e10cSrcweir using namespace ::com::sun::star::lang							;
72*cdf0e10cSrcweir using namespace ::com::sun::star::registry						;
73*cdf0e10cSrcweir 
74*cdf0e10cSrcweir //______________________________________________________________________________________________________________
75*cdf0e10cSrcweir //	macros
76*cdf0e10cSrcweir //______________________________________________________________________________________________________________
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir //******************************************************************************************************************************
79*cdf0e10cSrcweir // See AS_DBG_SWITCH below !!!
80*cdf0e10cSrcweir #ifdef AS_DBG_SWITCH
81*cdf0e10cSrcweir 	#define AS_DBG_OUT(OUTPUT)	printf( OUTPUT );
82*cdf0e10cSrcweir #else
83*cdf0e10cSrcweir 	#define AS_DBG_OUT(OUTPUT)
84*cdf0e10cSrcweir #endif
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir //******************************************************************************************************************************
87*cdf0e10cSrcweir #define	CREATEINSTANCE(CLASS)																												\
88*cdf0e10cSrcweir 																																			\
89*cdf0e10cSrcweir 	static Reference< XInterface > SAL_CALL CLASS##_createInstance ( const Reference< XMultiServiceFactory >& rServiceManager ) throw ( Exception )	\
90*cdf0e10cSrcweir 	{																																		\
91*cdf0e10cSrcweir 		AS_DBG_OUT ( "\tCREATEINSTANCE():\tOK\n" )																							\
92*cdf0e10cSrcweir 		return Reference< XInterface >( *(OWeakObject*)(new CLASS( rServiceManager )) );													\
93*cdf0e10cSrcweir 	}
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir //******************************************************************************************************************************
96*cdf0e10cSrcweir #define	CREATEFACTORY_ONEINSTANCE(CLASS)																				\
97*cdf0e10cSrcweir 																														\
98*cdf0e10cSrcweir 	AS_DBG_OUT ( "\tCREATEFACTORY_ONEINSTANCE():\t[start]\n" )															\
99*cdf0e10cSrcweir 	/* Create right factory ... */																						\
100*cdf0e10cSrcweir 	xFactory = Reference< XSingleServiceFactory >																		\
101*cdf0e10cSrcweir 					(																									\
102*cdf0e10cSrcweir 						cppu::createOneInstanceFactory	(	xServiceManager										,		\
103*cdf0e10cSrcweir 															CLASS::impl_getStaticImplementationName		()	,		\
104*cdf0e10cSrcweir 															CLASS##_createInstance								,		\
105*cdf0e10cSrcweir 															CLASS::impl_getStaticSupportedServiceNames	()	)		\
106*cdf0e10cSrcweir 					) ;																									\
107*cdf0e10cSrcweir 	AS_DBG_OUT ( "\tCREATEFACTORY_ONEINSTANCE():\t[end]\n" )
108*cdf0e10cSrcweir 
109*cdf0e10cSrcweir //******************************************************************************************************************************
110*cdf0e10cSrcweir #define	CREATEFACTORY_SINGLE(CLASS)																						\
111*cdf0e10cSrcweir 																														\
112*cdf0e10cSrcweir 	AS_DBG_OUT ( "\tCREATEFACTORY_SINGLE():\t[start]\n" )																\
113*cdf0e10cSrcweir 	/* Create right factory ... */																						\
114*cdf0e10cSrcweir 	xFactory = Reference< XSingleServiceFactory >																		\
115*cdf0e10cSrcweir 					(																									\
116*cdf0e10cSrcweir 						cppu::createSingleFactory	(	xServiceManager										,			\
117*cdf0e10cSrcweir 														CLASS::impl_getStaticImplementationName		()	,			\
118*cdf0e10cSrcweir 														CLASS##_createInstance								,			\
119*cdf0e10cSrcweir 														CLASS::impl_getStaticSupportedServiceNames	()	)			\
120*cdf0e10cSrcweir 					) ;																									\
121*cdf0e10cSrcweir 	AS_DBG_OUT ( "\tCREATEFACTORY_SINGLE():\t[end]\n" )
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir //******************************************************************************************************************************
124*cdf0e10cSrcweir #define	IF_NAME_CREATECOMPONENTFACTORY_ONEINSTANCE(CLASS)																\
125*cdf0e10cSrcweir 																														\
126*cdf0e10cSrcweir 	if ( CLASS::impl_getStaticImplementationName().equals( OUString::createFromAscii( pImplementationName ) ) )		\
127*cdf0e10cSrcweir 	{																													\
128*cdf0e10cSrcweir 		AS_DBG_OUT ( "\tIF_NAME_CREATECOMPONENTFACTORY_ONEINSTANCE():\timplementationname found\n" )					\
129*cdf0e10cSrcweir 		CREATEFACTORY_ONEINSTANCE ( CLASS )																			\
130*cdf0e10cSrcweir 	}
131*cdf0e10cSrcweir 
132*cdf0e10cSrcweir //******************************************************************************************************************************
133*cdf0e10cSrcweir #define	IF_NAME_CREATECOMPONENTFACTORY_SINGLE(CLASS)																	\
134*cdf0e10cSrcweir 																														\
135*cdf0e10cSrcweir 	if ( CLASS::impl_getStaticImplementationName().equals( OUString::createFromAscii( pImplementationName ) ) )		\
136*cdf0e10cSrcweir 	{																													\
137*cdf0e10cSrcweir 		AS_DBG_OUT ( "\tIF_NAME_CREATECOMPONENTFACTORY_SINGLE():\timplementationname found\n" )							\
138*cdf0e10cSrcweir 		CREATEFACTORY_SINGLE ( CLASS )																				\
139*cdf0e10cSrcweir 	}
140*cdf0e10cSrcweir 
141*cdf0e10cSrcweir //______________________________________________________________________________________________________________
142*cdf0e10cSrcweir //	declare functions to create a new instance of service
143*cdf0e10cSrcweir //______________________________________________________________________________________________________________
144*cdf0e10cSrcweir 
145*cdf0e10cSrcweir //=============================================================================
146*cdf0e10cSrcweir //  Add new macro line to use new services.
147*cdf0e10cSrcweir //
148*cdf0e10cSrcweir //	!!! ATTENTION !!!
149*cdf0e10cSrcweir //		Write no ";" at end of line! (see macro)
150*cdf0e10cSrcweir //=============================================================================
151*cdf0e10cSrcweir CREATEINSTANCE	( FrameControl		)
152*cdf0e10cSrcweir CREATEINSTANCE	( ProgressBar		)
153*cdf0e10cSrcweir CREATEINSTANCE	( ProgressMonitor	)
154*cdf0e10cSrcweir CREATEINSTANCE	( StatusIndicator	)
155*cdf0e10cSrcweir //=============================================================================
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir //______________________________________________________________________________________________________________
158*cdf0e10cSrcweir //	return environment
159*cdf0e10cSrcweir //______________________________________________________________________________________________________________
160*cdf0e10cSrcweir 
161*cdf0e10cSrcweir extern "C" void SAL_CALL component_getImplementationEnvironment(	const	sal_Char**			ppEnvironmentTypeName	,
162*cdf0e10cSrcweir 																			uno_Environment**	/*ppEnvironment*/			)
163*cdf0e10cSrcweir {
164*cdf0e10cSrcweir 	*ppEnvironmentTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ;
165*cdf0e10cSrcweir }
166*cdf0e10cSrcweir 
167*cdf0e10cSrcweir //______________________________________________________________________________________________________________
168*cdf0e10cSrcweir //	create right component factory
169*cdf0e10cSrcweir //______________________________________________________________________________________________________________
170*cdf0e10cSrcweir 
171*cdf0e10cSrcweir extern "C" void* SAL_CALL component_getFactory(	const	sal_Char*	pImplementationName	,
172*cdf0e10cSrcweir 														void*		pServiceManager		,
173*cdf0e10cSrcweir 														void*		/*pRegistryKey*/		)
174*cdf0e10cSrcweir {
175*cdf0e10cSrcweir 	AS_DBG_OUT( "component_getFactory():\t[start]\n" )
176*cdf0e10cSrcweir 
177*cdf0e10cSrcweir 	// Set default return value for this operation - if it failed.
178*cdf0e10cSrcweir 	void* pReturn = NULL ;
179*cdf0e10cSrcweir 
180*cdf0e10cSrcweir 	if	(
181*cdf0e10cSrcweir 			( pImplementationName	!=	NULL ) &&
182*cdf0e10cSrcweir 			( pServiceManager		!=	NULL )
183*cdf0e10cSrcweir 		)
184*cdf0e10cSrcweir 	{
185*cdf0e10cSrcweir 		AS_DBG_OUT( "component_getFactory():\t\t... enter scope - pointer are valid\n" )
186*cdf0e10cSrcweir 
187*cdf0e10cSrcweir 		// Define variables which are used in following macros.
188*cdf0e10cSrcweir 		Reference< XSingleServiceFactory >	xFactory																		;
189*cdf0e10cSrcweir 		Reference< XMultiServiceFactory >	xServiceManager( reinterpret_cast< XMultiServiceFactory* >( pServiceManager ) )	;
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir 		//=============================================================================
192*cdf0e10cSrcweir 		//  Add new macro line to handle new service.
193*cdf0e10cSrcweir 		//
194*cdf0e10cSrcweir 		//	!!! ATTENTION !!!
195*cdf0e10cSrcweir 		//		Write no ";" at end of line and dont forget "else" ! (see macro)
196*cdf0e10cSrcweir 		//=============================================================================
197*cdf0e10cSrcweir 		IF_NAME_CREATECOMPONENTFACTORY_SINGLE( FrameControl		)
198*cdf0e10cSrcweir 		else
199*cdf0e10cSrcweir 		IF_NAME_CREATECOMPONENTFACTORY_SINGLE( ProgressBar		)
200*cdf0e10cSrcweir 		else
201*cdf0e10cSrcweir 		IF_NAME_CREATECOMPONENTFACTORY_SINGLE( ProgressMonitor	)
202*cdf0e10cSrcweir 		else
203*cdf0e10cSrcweir 		IF_NAME_CREATECOMPONENTFACTORY_SINGLE( StatusIndicator	)
204*cdf0e10cSrcweir 		//=============================================================================
205*cdf0e10cSrcweir 
206*cdf0e10cSrcweir 		// Factory is valid - service was found.
207*cdf0e10cSrcweir 		if ( xFactory.is() )
208*cdf0e10cSrcweir 		{
209*cdf0e10cSrcweir 			AS_DBG_OUT( "component_getFactory():\t\t\t... xFactory valid - service was found\n" )
210*cdf0e10cSrcweir 
211*cdf0e10cSrcweir 			xFactory->acquire();
212*cdf0e10cSrcweir 			pReturn = xFactory.get();
213*cdf0e10cSrcweir 		}
214*cdf0e10cSrcweir 
215*cdf0e10cSrcweir 		AS_DBG_OUT( "component_getFactory():\t\t... leave scope\n" )
216*cdf0e10cSrcweir 	}
217*cdf0e10cSrcweir 
218*cdf0e10cSrcweir 	AS_DBG_OUT ( "component_getFactory():\t[end]\n" )
219*cdf0e10cSrcweir 
220*cdf0e10cSrcweir 	// Return with result of this operation.
221*cdf0e10cSrcweir 	return pReturn ;
222*cdf0e10cSrcweir }
223