xref: /trunk/main/sd/source/ui/unoidl/facreg.cxx (revision 5b190011)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26 #include <com/sun/star/registry/XRegistryKey.hpp>
27 
28 #include "sddll.hxx"
29 
30 #include <cppuhelper/factory.hxx>
31 #include <uno/lbnames.h>
32 #include <sfx2/sfxmodelfactory.hxx>
33 #include "osl/diagnose.h"
34 #include "sal/types.h"
35 
36 #ifndef INCLUDED_STRING_H
37 #include <string.h>
38 #define INCLUDED_STRING_H
39 #endif
40 #include <comphelper/stl_types.hxx>
41 #include <hash_map>
42 #include <boost/shared_ptr.hpp>
43 
44 using namespace rtl;
45 using namespace com::sun::star;
46 
47 
48 // Forward declarations of the factories.
49 
50 extern uno::Reference< uno::XInterface > SAL_CALL SdDrawingDocument_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory, const sal_uInt64 _nCreationFlags );
51 extern OUString SdDrawingDocument_getImplementationName() throw( uno::RuntimeException );
52 extern uno::Sequence< OUString > SAL_CALL SdDrawingDocument_getSupportedServiceNames() throw( uno::RuntimeException );
53 
54 extern uno::Reference< uno::XInterface > SAL_CALL SdPresentationDocument_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory, const sal_uInt64 _nCreationFlags );
55 extern OUString SdPresentationDocument_getImplementationName() throw( uno::RuntimeException );
56 extern uno::Sequence< OUString > SAL_CALL SdPresentationDocument_getSupportedServiceNames() throw( uno::RuntimeException );
57 
58 extern uno::Reference< uno::XInterface > SAL_CALL SdHtmlOptionsDialog_CreateInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
59 extern OUString SdHtmlOptionsDialog_getImplementationName() throw( uno::RuntimeException );
60 extern uno::Sequence< OUString > SAL_CALL SdHtmlOptionsDialog_getSupportedServiceNames() throw( uno::RuntimeException );
61 
62 extern uno::Reference< uno::XInterface > SAL_CALL SdUnoModule_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
63 extern OUString SdUnoModule_getImplementationName() throw( uno::RuntimeException );
64 extern uno::Sequence< OUString > SAL_CALL SdUnoModule_getSupportedServiceNames() throw( uno::RuntimeException );
65 
66 namespace sd
67 {
68 extern uno::Reference< uno::XInterface > SAL_CALL RandomNode_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
69 extern OUString RandomNode__getImplementationName() throw( uno::RuntimeException );
70 extern uno::Sequence< OUString > SAL_CALL RandomNode_getSupportedServiceNames() throw( uno::RuntimeException );
71 
72 extern uno::Reference< uno::XInterface > SAL_CALL SlideLayoutController_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
73 extern OUString SlideLayoutController_getImplementationName() throw( uno::RuntimeException );
74 extern uno::Sequence< OUString >  SlideLayoutController_getSupportedServiceNames() throw( uno::RuntimeException );
75 
76 extern uno::Reference< uno::XInterface > SAL_CALL InsertSlideController_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory );
77 extern OUString InsertSlideController_getImplementationName() throw( uno::RuntimeException );
78 extern uno::Sequence< OUString >  InsertSlideController_getSupportedServiceNames() throw( uno::RuntimeException );
79 }
80 
81 namespace sd { namespace framework {
82 
83 extern uno::Reference<uno::XInterface> SAL_CALL Configuration_createInstance(
84     const uno::Reference<uno::XComponentContext>& rxContext)
85     throw(uno::Exception);
86 extern OUString Configuration_getImplementationName(void) throw (uno::RuntimeException);
87 extern uno::Sequence<OUString> SAL_CALL Configuration_getSupportedServiceNames (void)
88     throw (uno::RuntimeException);
89 
90 extern uno::Reference<uno::XInterface> SAL_CALL ConfigurationController_createInstance(
91     const uno::Reference<uno::XComponentContext>& rxContext)
92     throw(uno::Exception);
93 extern OUString ConfigurationController_getImplementationName(void) throw (uno::RuntimeException);
94 extern uno::Sequence<OUString> SAL_CALL ConfigurationController_getSupportedServiceNames (void)
95     throw (uno::RuntimeException);
96 
97 extern uno::Reference<uno::XInterface> SAL_CALL ModuleController_createInstance(
98     const uno::Reference<uno::XComponentContext>& rxContext)
99     throw(uno::Exception);
100 extern OUString ModuleController_getImplementationName(void) throw (uno::RuntimeException);
101 extern uno::Sequence<OUString> SAL_CALL ModuleController_getSupportedServiceNames (void)
102     throw (uno::RuntimeException);
103 
104 extern uno::Reference<uno::XInterface> SAL_CALL BasicPaneFactory_createInstance(
105     const uno::Reference<uno::XComponentContext>& rxContext)
106     throw(uno::Exception);
107 extern OUString BasicPaneFactory_getImplementationName(void) throw (uno::RuntimeException);
108 extern uno::Sequence<OUString> SAL_CALL BasicPaneFactory_getSupportedServiceNames (void)
109     throw (uno::RuntimeException);
110 
111 extern uno::Reference<uno::XInterface> SAL_CALL BasicToolBarFactory_createInstance(
112     const uno::Reference<uno::XComponentContext>& rxContext)
113     throw(uno::Exception);
114 extern OUString BasicToolBarFactory_getImplementationName(void) throw (uno::RuntimeException);
115 extern uno::Sequence<OUString> SAL_CALL BasicToolBarFactory_getSupportedServiceNames (void)
116     throw (uno::RuntimeException);
117 
118 extern uno::Reference<uno::XInterface> SAL_CALL BasicViewFactory_createInstance(
119     const uno::Reference<uno::XComponentContext>& rxContext)
120     throw(uno::Exception);
121 extern OUString BasicViewFactory_getImplementationName(void) throw (uno::RuntimeException);
122 extern uno::Sequence<OUString> SAL_CALL BasicViewFactory_getSupportedServiceNames (void)
123     throw (uno::RuntimeException);
124 
125 extern uno::Reference<uno::XInterface> SAL_CALL TaskPanelFactory_createInstance(
126     const uno::Reference<uno::XComponentContext>& rxContext)
127     throw(uno::Exception);
128 extern OUString TaskPanelFactory_getImplementationName(void) throw (uno::RuntimeException);
129 extern uno::Sequence<OUString> SAL_CALL TaskPanelFactory_getSupportedServiceNames (void)
130     throw (uno::RuntimeException);
131 
132 extern uno::Reference<uno::XInterface> SAL_CALL ResourceId_createInstance(
133     const uno::Reference<uno::XComponentContext>& rxContext)
134     throw(uno::Exception);
135 extern OUString ResourceId_getImplementationName(void) throw (uno::RuntimeException);
136 extern uno::Sequence<OUString> SAL_CALL ResourceId_getSupportedServiceNames (void)
137     throw (uno::RuntimeException);
138 
139 extern uno::Reference<uno::XInterface> SAL_CALL PresentationFactoryProvider_createInstance(
140     const uno::Reference<uno::XComponentContext>& rxContext)
141     throw(uno::Exception);
142 extern OUString PresentationFactoryProvider_getImplementationName(void)
143     throw (uno::RuntimeException);
144 extern uno::Sequence<OUString> SAL_CALL PresentationFactoryProvider_getSupportedServiceNames (void)
145     throw (uno::RuntimeException);
146 } }
147 
148 
149 namespace sd { namespace toolpanel {
150 
151 extern uno::Reference<uno::XInterface> SAL_CALL ToolPanelFactory_createInstance(
152     const uno::Reference<uno::XComponentContext>& rxContext)
153     throw(uno::Exception);
154 extern OUString ToolPanelFactory_getImplementationName(void) throw (uno::RuntimeException);
155 extern uno::Sequence<OUString> SAL_CALL ToolPanelFactory_getSupportedServiceNames (void)
156     throw (uno::RuntimeException);
157 
158 } }
159 
160 namespace sd { namespace presenter {
161 extern uno::Reference<uno::XInterface> SAL_CALL SlideRenderer_createInstance(
162     const uno::Reference<uno::XComponentContext>& rxContext)
163     throw(uno::Exception);
164 extern OUString SlideRenderer_getImplementationName(void)
165     throw (uno::RuntimeException);
166 extern uno::Sequence<OUString> SAL_CALL SlideRenderer_getSupportedServiceNames (void)
167     throw (uno::RuntimeException);
168 
169 extern uno::Reference<uno::XInterface> SAL_CALL PresenterCanvas_createInstance(
170     const uno::Reference<uno::XComponentContext>& rxContext)
171     throw(uno::Exception);
172 extern OUString PresenterCanvas_getImplementationName(void)
173     throw (uno::RuntimeException);
174 extern uno::Sequence<OUString> SAL_CALL PresenterCanvas_getSupportedServiceNames (void)
175     throw (uno::RuntimeException);
176 
177 extern uno::Reference<uno::XInterface> SAL_CALL PresenterTextViewService_createInstance(
178     const uno::Reference<uno::XComponentContext>& rxContext)
179     throw(uno::Exception);
180 extern OUString PresenterTextViewService_getImplementationName(void)
181     throw (uno::RuntimeException);
182 extern uno::Sequence<OUString> SAL_CALL PresenterTextViewService_getSupportedServiceNames (void)
183     throw (uno::RuntimeException);
184 
185 extern uno::Reference<uno::XInterface> SAL_CALL PresenterHelperService_createInstance(
186     const uno::Reference<uno::XComponentContext>& rxContext)
187     throw(uno::Exception);
188 extern OUString PresenterHelperService_getImplementationName(void)
189     throw (uno::RuntimeException);
190 extern uno::Sequence<OUString> SAL_CALL PresenterHelperService_getSupportedServiceNames (void)
191     throw (uno::RuntimeException);
192 
193 extern uno::Reference<uno::XInterface> SAL_CALL PresenterPreviewCache_createInstance(
194     const uno::Reference<uno::XComponentContext>& rxContext)
195     throw(uno::Exception);
196 extern OUString PresenterPreviewCache_getImplementationName(void)
197     throw (uno::RuntimeException);
198 extern uno::Sequence<OUString> SAL_CALL PresenterPreviewCache_getSupportedServiceNames (void)
199     throw (uno::RuntimeException);
200 } }
201 
202 
203 namespace sd { namespace slidesorter {
204 extern uno::Reference<uno::XInterface> SAL_CALL SlideSorterService_createInstance(
205     const uno::Reference<uno::XComponentContext>& rxContext)
206     throw(uno::Exception);
207 extern OUString SlideSorterService_getImplementationName(void)
208     throw (uno::RuntimeException);
209 extern uno::Sequence<OUString> SAL_CALL SlideSorterService_getSupportedServiceNames (void)
210     throw (uno::RuntimeException);
211 } }
212 
213 using namespace ::sd;
214 using namespace ::sd::framework;
215 using namespace ::sd::presenter;
216 using namespace ::sd::slidesorter;
217 using namespace ::sd::toolpanel;
218 
219 
220 
221 
222 // ----------------------------------------------------------------------------
223 // Declaration and initialization of a map from service names to locally
224 // unique factory identifiers.
225 
226 enum FactoryId
227 {
228     SdDrawingDocumentFactoryId,
229     SdPresentationDocumentFactoryId,
230     SdHtmlOptionsDialogFactoryId,
231     SdUnoModuleFactoryId,
232     RandomNodeFactoryId,
233 
234     ConfigurationFactoryId,
235     ConfigurationControllerFactoryId,
236     ModuleControllerFactoryId,
237     BasicPaneFactoryFactoryId,
238     BasicToolBarFactoryFactoryId,
239     BasicViewFactoryFactoryId,
240     TaskPanelFactoryFactoryId,
241     ToolPanelFactoryFactoryId,
242     ResourceIdFactoryId,
243     PresentationFactoryProviderFactoryId,
244     SlideRendererFactoryId,
245     PresenterCanvasFactoryId,
246     PresenterTextViewServiceFactoryId,
247     PresenterHelperServiceFactoryId,
248     PresenterPreviewCacheFactoryId,
249     SlideSorterServiceFactoryId,
250 	SlideLayoutControllerFactoryId,
251 	InsertSlideControllerFactoryId,
252 };
253 typedef ::std::hash_map<OUString, FactoryId, comphelper::UStringHash, comphelper::UStringEqual> FactoryMap;
254 
255 
256 namespace {
257 static ::boost::shared_ptr<FactoryMap> spFactoryMap;
258 ::boost::shared_ptr<FactoryMap> GetFactoryMap (void)
259 {
260     if (spFactoryMap.get() == NULL)
261     {
262         spFactoryMap.reset(new FactoryMap);
263         (*spFactoryMap)[SdDrawingDocument_getImplementationName()] = SdDrawingDocumentFactoryId;
264         (*spFactoryMap)[SdPresentationDocument_getImplementationName()] = SdPresentationDocumentFactoryId;
265         (*spFactoryMap)[SdHtmlOptionsDialog_getImplementationName()] = SdHtmlOptionsDialogFactoryId;
266         (*spFactoryMap)[SdUnoModule_getImplementationName()] = SdUnoModuleFactoryId;
267         (*spFactoryMap)[RandomNode__getImplementationName()] = RandomNodeFactoryId;
268         (*spFactoryMap)[Configuration_getImplementationName()] = ConfigurationFactoryId;
269         (*spFactoryMap)[ConfigurationController_getImplementationName()] = ConfigurationControllerFactoryId;
270         (*spFactoryMap)[ModuleController_getImplementationName()] = ModuleControllerFactoryId;
271         (*spFactoryMap)[BasicPaneFactory_getImplementationName()] = BasicPaneFactoryFactoryId;
272         (*spFactoryMap)[BasicToolBarFactory_getImplementationName()] = BasicToolBarFactoryFactoryId;
273         (*spFactoryMap)[BasicViewFactory_getImplementationName()] = BasicViewFactoryFactoryId;
274         (*spFactoryMap)[TaskPanelFactory_getImplementationName()] = TaskPanelFactoryFactoryId;
275         (*spFactoryMap)[ToolPanelFactory_getImplementationName()] = ToolPanelFactoryFactoryId;
276         (*spFactoryMap)[ResourceId_getImplementationName()] = ResourceIdFactoryId;
277         (*spFactoryMap)[PresentationFactoryProvider_getImplementationName()] = PresentationFactoryProviderFactoryId;
278         (*spFactoryMap)[SlideRenderer_getImplementationName()] = SlideRendererFactoryId;
279         (*spFactoryMap)[PresenterCanvas_getImplementationName()] = PresenterCanvasFactoryId;
280         (*spFactoryMap)[PresenterTextViewService_getImplementationName()] = PresenterTextViewServiceFactoryId;
281         (*spFactoryMap)[PresenterHelperService_getImplementationName()] = PresenterHelperServiceFactoryId;
282         (*spFactoryMap)[PresenterPreviewCache_getImplementationName()] = PresenterPreviewCacheFactoryId;
283         (*spFactoryMap)[SlideSorterService_getImplementationName()] = SlideSorterServiceFactoryId;
284 		(*spFactoryMap)[SlideLayoutController_getImplementationName()] = SlideLayoutControllerFactoryId;
285 		(*spFactoryMap)[InsertSlideController_getImplementationName()] = InsertSlideControllerFactoryId;
286     }
287     return spFactoryMap;
288 };
289 } // end of anonymous namespace
290 
291 
292 extern "C"
293 {
294 
295 SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment(
296 	const sal_Char  ** ppEnvTypeName,
297 	uno_Environment **  )
298 {
299 	*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
300 }
301 
302 SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
303 	const sal_Char * pImplName,
304 	void           * pServiceManager,
305 	void           *  )
306 {
307     void * pRet = 0;
308 
309 	if( pServiceManager )
310 	{
311 		uno::Reference< lang::XMultiServiceFactory > xMSF( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ) );
312 
313 		uno::Reference<lang::XSingleServiceFactory> xFactory;
314         uno::Reference<lang::XSingleComponentFactory> xComponentFactory;
315 
316         ::boost::shared_ptr<FactoryMap> pFactoryMap (GetFactoryMap());
317         OUString sImplementationName (OUString::createFromAscii(pImplName));
318         FactoryMap::const_iterator iFactory (pFactoryMap->find(sImplementationName));
319         if (iFactory != pFactoryMap->end())
320         {
321             switch (iFactory->second)
322             {
323                 case SdHtmlOptionsDialogFactoryId:
324                     xFactory = ::cppu::createSingleFactory(
325                         xMSF,
326                         SdHtmlOptionsDialog_getImplementationName(),
327                         SdHtmlOptionsDialog_CreateInstance,
328                         SdHtmlOptionsDialog_getSupportedServiceNames());
329                     break;
330 
331                 case SdDrawingDocumentFactoryId:
332                     xFactory = ::sfx2::createSfxModelFactory(
333                         xMSF,
334                         SdDrawingDocument_getImplementationName(),
335                         SdDrawingDocument_createInstance,
336                         SdDrawingDocument_getSupportedServiceNames());
337                     break;
338 
339                 case SdPresentationDocumentFactoryId:
340                     xFactory = ::sfx2::createSfxModelFactory(
341                         xMSF,
342                         SdPresentationDocument_getImplementationName(),
343                         SdPresentationDocument_createInstance,
344                         SdPresentationDocument_getSupportedServiceNames());
345                     break;
346 
347                 case SdUnoModuleFactoryId:
348                     xFactory = ::cppu::createSingleFactory(
349                         xMSF,
350                         SdUnoModule_getImplementationName(),
351                         SdUnoModule_createInstance,
352                         SdUnoModule_getSupportedServiceNames());
353                     break;
354 
355                 case RandomNodeFactoryId:
356                     xFactory = ::cppu::createSingleFactory(
357                         xMSF,
358                         sd::RandomNode__getImplementationName(),
359                         sd::RandomNode_createInstance,
360                         sd::RandomNode_getSupportedServiceNames());
361                     break;
362 
363                 case ConfigurationFactoryId:
364                     xComponentFactory = ::cppu::createSingleComponentFactory(
365                         sd::framework::Configuration_createInstance,
366                         sd::framework::Configuration_getImplementationName(),
367                         sd::framework::Configuration_getSupportedServiceNames());
368                     break;
369 
370                 case ConfigurationControllerFactoryId:
371                     xComponentFactory = ::cppu::createSingleComponentFactory(
372                         sd::framework::ConfigurationController_createInstance,
373                         sd::framework::ConfigurationController_getImplementationName(),
374                         sd::framework::ConfigurationController_getSupportedServiceNames());
375                     break;
376 
377                 case ModuleControllerFactoryId:
378                     xComponentFactory = ::cppu::createSingleComponentFactory(
379                         sd::framework::ModuleController_createInstance,
380                         sd::framework::ModuleController_getImplementationName(),
381                         sd::framework::ModuleController_getSupportedServiceNames());
382                     break;
383 
384                 case BasicPaneFactoryFactoryId:
385                     xComponentFactory = ::cppu::createSingleComponentFactory(
386                         sd::framework::BasicPaneFactory_createInstance,
387                         sd::framework::BasicPaneFactory_getImplementationName(),
388                         sd::framework::BasicPaneFactory_getSupportedServiceNames());
389                     break;
390 
391                 case BasicToolBarFactoryFactoryId:
392                     xComponentFactory = ::cppu::createSingleComponentFactory(
393                         sd::framework::BasicToolBarFactory_createInstance,
394                         sd::framework::BasicToolBarFactory_getImplementationName(),
395                         sd::framework::BasicToolBarFactory_getSupportedServiceNames());
396                     break;
397 
398                 case BasicViewFactoryFactoryId:
399                     xComponentFactory = ::cppu::createSingleComponentFactory(
400                         sd::framework::BasicViewFactory_createInstance,
401                         sd::framework::BasicViewFactory_getImplementationName(),
402                         sd::framework::BasicViewFactory_getSupportedServiceNames());
403                     break;
404 
405                 case TaskPanelFactoryFactoryId:
406                     xComponentFactory = ::cppu::createSingleComponentFactory(
407                         sd::framework::TaskPanelFactory_createInstance,
408                         sd::framework::TaskPanelFactory_getImplementationName(),
409                         sd::framework::TaskPanelFactory_getSupportedServiceNames());
410                     break;
411 
412                 case ToolPanelFactoryFactoryId:
413                     xComponentFactory = ::cppu::createSingleComponentFactory(
414                         sd::toolpanel::ToolPanelFactory_createInstance,
415                         sd::toolpanel::ToolPanelFactory_getImplementationName(),
416                         sd::toolpanel::ToolPanelFactory_getSupportedServiceNames());
417                     break;
418 
419                 case ResourceIdFactoryId:
420                     xComponentFactory = ::cppu::createSingleComponentFactory(
421                         sd::framework::ResourceId_createInstance,
422                         sd::framework::ResourceId_getImplementationName(),
423                         sd::framework::ResourceId_getSupportedServiceNames());
424                     break;
425 
426                 case PresentationFactoryProviderFactoryId:
427                     xComponentFactory = ::cppu::createSingleComponentFactory(
428                         sd::framework::PresentationFactoryProvider_createInstance,
429                         sd::framework::PresentationFactoryProvider_getImplementationName(),
430                         sd::framework::PresentationFactoryProvider_getSupportedServiceNames());
431                     break;
432 
433                 case SlideRendererFactoryId:
434                     xComponentFactory = ::cppu::createSingleComponentFactory(
435                         sd::presenter::SlideRenderer_createInstance,
436                         sd::presenter::SlideRenderer_getImplementationName(),
437                         sd::presenter::SlideRenderer_getSupportedServiceNames());
438                     break;
439 
440                 case PresenterCanvasFactoryId:
441                     xComponentFactory = ::cppu::createSingleComponentFactory(
442                         sd::presenter::PresenterCanvas_createInstance,
443                         sd::presenter::PresenterCanvas_getImplementationName(),
444                         sd::presenter::PresenterCanvas_getSupportedServiceNames());
445                     break;
446 
447                 case PresenterTextViewServiceFactoryId:
448                     xComponentFactory = ::cppu::createSingleComponentFactory(
449                         sd::presenter::PresenterTextViewService_createInstance,
450                         sd::presenter::PresenterTextViewService_getImplementationName(),
451                         sd::presenter::PresenterTextViewService_getSupportedServiceNames());
452                     break;
453 
454                 case PresenterHelperServiceFactoryId:
455                     xComponentFactory = ::cppu::createSingleComponentFactory(
456                         sd::presenter::PresenterHelperService_createInstance,
457                         sd::presenter::PresenterHelperService_getImplementationName(),
458                         sd::presenter::PresenterHelperService_getSupportedServiceNames());
459                     break;
460 
461                 case PresenterPreviewCacheFactoryId:
462                     xComponentFactory = ::cppu::createSingleComponentFactory(
463                         sd::presenter::PresenterPreviewCache_createInstance,
464                         sd::presenter::PresenterPreviewCache_getImplementationName(),
465                         sd::presenter::PresenterPreviewCache_getSupportedServiceNames());
466                     break;
467 
468                 case SlideSorterServiceFactoryId:
469                     xComponentFactory = ::cppu::createSingleComponentFactory(
470                         sd::slidesorter::SlideSorterService_createInstance,
471                         sd::slidesorter::SlideSorterService_getImplementationName(),
472                         sd::slidesorter::SlideSorterService_getSupportedServiceNames());
473                     break;
474 
475 				case SlideLayoutControllerFactoryId:
476 					xFactory = ::cppu::createSingleFactory(
477                         xMSF,
478 						sd::SlideLayoutController_getImplementationName(),
479 						sd::SlideLayoutController_createInstance,
480 						sd::SlideLayoutController_getSupportedServiceNames());
481 					break;
482 
483 				case InsertSlideControllerFactoryId:
484 					xFactory = ::cppu::createSingleFactory(
485                         xMSF,
486 						sd::InsertSlideController_getImplementationName(),
487 						sd::InsertSlideController_createInstance,
488 						sd::InsertSlideController_getSupportedServiceNames());
489                 default:
490                     break;
491             }
492             if (xComponentFactory.is())
493             {
494                 xComponentFactory->acquire();
495                 pRet = xComponentFactory.get();
496             }
497             else if (xFactory.is())
498             {
499                 xFactory->acquire();
500                 pRet = xFactory.get();
501             }
502         }
503     }
504 
505     if (pRet != NULL)
506         SdDLL::Init();
507 	return pRet;
508 }
509 
510 } // end of extern "C"
511