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