xref: /trunk/main/UnoControls/source/base/registercontrols.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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