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_svx.hxx"
26 #include <unotools/pathoptions.hxx>
27 #include <com/sun/star/lang/XServiceInfo.hpp>
28 #include <com/sun/star/container/XNameContainer.hpp>
29 #include <cppuhelper/implbase2.hxx>
30
31 #include "../customshapes/EnhancedCustomShapeEngine.hxx"
32
33 #include <svx/xtable.hxx>
34 #include "svx/unoshcol.hxx"
35 #include "recoveryui.hxx"
36 #include "svx/xmlgrhlp.hxx"
37 #include "tbunocontroller.hxx"
38 #include "tbunosearchcontrollers.hxx"
39
40 using namespace ::com::sun::star;
41 using namespace ::rtl;
42 using namespace ::cppu;
43
44 class SvxUnoColorTable : public WeakImplHelper2< container::XNameContainer, lang::XServiceInfo >
45 {
46 private:
47 XColorListSharedPtr maTable;
48
49 public:
50 SvxUnoColorTable() throw();
51 virtual ~SvxUnoColorTable() throw();
52
53 // XServiceInfo
54 virtual OUString SAL_CALL getImplementationName( ) throw( uno::RuntimeException );
55 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw( uno::RuntimeException);
56 virtual uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw( uno::RuntimeException);
57
getImplementationName_Static()58 static OUString getImplementationName_Static() throw()
59 {
60 return OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.SvxUnoColorTable"));
61 }
62
63 static uno::Sequence< OUString > getSupportedServiceNames_Static(void) throw();
64
65 // XNameContainer
66 virtual void SAL_CALL insertByName( const OUString& aName, const uno::Any& aElement ) throw( lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, uno::RuntimeException);
67 virtual void SAL_CALL removeByName( const OUString& Name ) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException);
68
69 // XNameReplace
70 virtual void SAL_CALL replaceByName( const OUString& aName, const uno::Any& aElement ) throw( lang::IllegalArgumentException, container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException);
71
72 // XNameAccess
73 virtual uno::Any SAL_CALL getByName( const OUString& aName ) throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException);
74
75 virtual uno::Sequence< OUString > SAL_CALL getElementNames( ) throw( uno::RuntimeException);
76
77 virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) throw( uno::RuntimeException);
78
79 // XElementAccess
80 virtual uno::Type SAL_CALL getElementType( ) throw( uno::RuntimeException);
81 virtual sal_Bool SAL_CALL hasElements( ) throw( uno::RuntimeException);
82 };
83
SvxUnoColorTable()84 SvxUnoColorTable::SvxUnoColorTable() throw()
85 : maTable(XPropertyListFactory::CreateSharedXColorList(SvtPathOptions().GetPalettePath()))
86 {
87 }
88
~SvxUnoColorTable()89 SvxUnoColorTable::~SvxUnoColorTable() throw()
90 {
91 }
92
supportsService(const OUString & ServiceName)93 sal_Bool SAL_CALL SvxUnoColorTable::supportsService( const OUString& ServiceName ) throw(uno::RuntimeException)
94 {
95 uno::Sequence< OUString > aSNL( getSupportedServiceNames() );
96 const OUString * pArray = aSNL.getConstArray();
97
98 for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
99 if( pArray[i] == ServiceName )
100 return sal_True;
101
102 return sal_False;
103 }
104
getImplementationName()105 OUString SAL_CALL SvxUnoColorTable::getImplementationName() throw( uno::RuntimeException )
106 {
107 return OUString( RTL_CONSTASCII_USTRINGPARAM("SvxUnoColorTable") );
108 }
109
getSupportedServiceNames()110 uno::Sequence< OUString > SAL_CALL SvxUnoColorTable::getSupportedServiceNames( )
111 throw( uno::RuntimeException )
112 {
113 return getSupportedServiceNames_Static();
114 }
115
getSupportedServiceNames_Static(void)116 uno::Sequence< OUString > SvxUnoColorTable::getSupportedServiceNames_Static(void) throw()
117 {
118 uno::Sequence< OUString > aSNS( 1 );
119 aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.ColorTable" ));
120 return aSNS;
121 }
122
123 // XNameContainer
insertByName(const OUString & aName,const uno::Any & aElement)124 void SAL_CALL SvxUnoColorTable::insertByName( const OUString& aName, const uno::Any& aElement )
125 throw( lang::IllegalArgumentException, container::ElementExistException, lang::WrappedTargetException, uno::RuntimeException )
126 {
127 if( hasByName( aName ) )
128 throw container::ElementExistException();
129
130 sal_Int32 nColor = 0;
131 if( !(aElement >>= nColor) )
132 throw lang::IllegalArgumentException();
133
134 XColorEntry* pEntry = new XColorEntry( Color( (ColorData)nColor ), aName );
135 maTable->Insert( pEntry, maTable->Count() );
136 }
137
removeByName(const OUString & Name)138 void SAL_CALL SvxUnoColorTable::removeByName( const OUString& Name )
139 throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
140 {
141 long nIndex = maTable->GetIndex(Name);
142 if( nIndex == -1 )
143 throw container::NoSuchElementException();
144
145 maTable->Remove( nIndex );
146 }
147
148 // XNameReplace
replaceByName(const OUString & aName,const uno::Any & aElement)149 void SAL_CALL SvxUnoColorTable::replaceByName( const OUString& aName, const uno::Any& aElement )
150 throw( lang::IllegalArgumentException, container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException )
151 {
152 sal_Int32 nColor = 0;
153 if( !(aElement >>= nColor) )
154 throw lang::IllegalArgumentException();
155
156 long nIndex = maTable->GetIndex(aName);
157 if( nIndex == -1 )
158 throw container::NoSuchElementException();
159
160 XColorEntry* pEntry = new XColorEntry( Color( (ColorData)nColor ), aName );
161 delete maTable->Replace( pEntry, nIndex );
162 }
163
164 // XNameAccess
getByName(const OUString & aName)165 uno::Any SAL_CALL SvxUnoColorTable::getByName( const OUString& aName )
166 throw( container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
167 {
168 long nIndex = maTable->GetIndex(aName);
169 if( nIndex == -1 )
170 throw container::NoSuchElementException();
171
172 XColorEntry* pEntry = maTable->GetColor( nIndex );
173 return uno::Any( (sal_Int32) pEntry->GetColor().GetRGBColor() );
174 }
175
getElementNames()176 uno::Sequence< OUString > SAL_CALL SvxUnoColorTable::getElementNames( )
177 throw( uno::RuntimeException )
178 {
179 const long nCount = maTable->Count();
180
181 uno::Sequence< OUString > aSeq( nCount );
182 OUString* pStrings = aSeq.getArray();
183
184 for( long nIndex = 0; nIndex < nCount; nIndex++ )
185 {
186 XColorEntry* pEntry = maTable->GetColor( (long)nIndex );
187 pStrings[nIndex] = pEntry->GetName();
188 }
189
190 return aSeq;
191 }
192
hasByName(const OUString & aName)193 sal_Bool SAL_CALL SvxUnoColorTable::hasByName( const OUString& aName )
194 throw( uno::RuntimeException )
195 {
196 long nIndex = maTable->GetIndex( aName );
197 return nIndex != -1;
198 }
199
200 // XElementAccess
getElementType()201 uno::Type SAL_CALL SvxUnoColorTable::getElementType( )
202 throw( uno::RuntimeException )
203 {
204 return ::getCppuType((const sal_Int32*)0);
205 }
206
hasElements()207 sal_Bool SAL_CALL SvxUnoColorTable::hasElements( )
208 throw( uno::RuntimeException )
209 {
210 return maTable->Count() != 0;
211 }
212
213 /**
214 * Create a colortable
215 */
SvxUnoColorTable_createInstance(const uno::Reference<lang::XMultiServiceFactory> &)216 uno::Reference< uno::XInterface > SAL_CALL SvxUnoColorTable_createInstance(const uno::Reference< lang::XMultiServiceFactory > & ) throw(uno::Exception)
217 {
218 return *new SvxUnoColorTable();
219 }
create_EnhancedCustomShapeEngine(const uno::Reference<lang::XMultiServiceFactory> & rxFact)220 uno::Reference< uno::XInterface > SAL_CALL create_EnhancedCustomShapeEngine( const uno::Reference< lang::XMultiServiceFactory >& rxFact ) throw(uno::Exception)
221 {
222 return *new EnhancedCustomShapeEngine( rxFact );
223 }
224
225 //
226 // export this service
227 //
228
229 #include "UnoGraphicExporter.hxx"
230 #include "unogalthemeprovider.hxx"
231 #include <com/sun/star/registry/XRegistryKey.hpp>
232 #include "sal/types.h"
233 #include "osl/diagnose.h"
234 #include "cppuhelper/factory.hxx"
235 #include "uno/lbnames.h"
236 #include <svx/sdr/primitive2d/primitiveFactory2d.hxx>
237 #include "sidebar/PanelFactory.hxx"
238
239
240 /*
241 namespace svx
242 {
243 extern OUString SAL_CALL ExtrusionDepthController_getImplementationName();
244 extern uno::Reference< uno::XInterface > SAL_CALL ExtrusionDepthController_createInstance(const uno::Reference< lang::XMultiServiceFactory > &) throw( uno::RuntimeException );
245 extern uno::Sequence< OUString > SAL_CALL ExtrusionDepthController_getSupportedServiceNames() throw( uno::RuntimeException );
246 }
247 */
248
249 extern "C"
250 {
251
component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName,uno_Environment **)252 SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment (
253 const sal_Char ** ppEnvTypeName, uno_Environment ** )
254 {
255 *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
256 }
257
component_getFactory(const sal_Char * pImplName,void * pServiceManager,void *)258 SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory (
259 const sal_Char * pImplName, void * pServiceManager, void * )
260 {
261 void * pRet = 0;
262 if( pServiceManager )
263 {
264 uno::Reference< lang::XSingleServiceFactory > xFactory;
265
266 if( rtl_str_compare( pImplName, "com.sun.star.drawing.SvxUnoColorTable" ) == 0 )
267 {
268 xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
269 SvxUnoColorTable::getImplementationName_Static(),
270 SvxUnoColorTable_createInstance,
271 SvxUnoColorTable::getSupportedServiceNames_Static() );
272 }
273 else if ( rtl_str_compare( pImplName, "com.sun.star.drawing.EnhancedCustomShapeEngine" ) == 0 )
274 {
275 xFactory = createSingleFactory( reinterpret_cast< NMSP_LANG::XMultiServiceFactory* >( pServiceManager ),
276 EnhancedCustomShapeEngine_getImplementationName(),
277 create_EnhancedCustomShapeEngine,
278 EnhancedCustomShapeEngine_getSupportedServiceNames() );
279 }
280 else if( rtl_str_compare( pImplName, "com.sun.star.drawing.SvxShapeCollection" ) == 0 )
281 {
282 xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
283 SvxShapeCollection::getImplementationName_Static(),
284 SvxShapeCollection_createInstance,
285 SvxShapeCollection::getSupportedServiceNames_Static() );
286 }
287 else if( svx::RecoveryUI::st_getImplementationName().equalsAscii( pImplName ) )
288 {
289 xFactory = ::cppu::createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
290 svx::RecoveryUI::st_getImplementationName(),
291 svx::RecoveryUI::st_createInstance,
292 svx::RecoveryUI::st_getSupportedServiceNames() );
293 }
294 else if( svx::GraphicExporter_getImplementationName().equalsAscii( pImplName ) )
295 {
296 xFactory = ::cppu::createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
297 svx::GraphicExporter_getImplementationName(),
298 svx::GraphicExporter_createInstance,
299 svx::GraphicExporter_getSupportedServiceNames() );
300 }
301 else if ( svx::FontHeightToolBoxControl::getImplementationName_Static().equalsAscii( pImplName ) )
302 {
303 xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
304 svx::FontHeightToolBoxControl::getImplementationName_Static(),
305 svx::FontHeightToolBoxControl_createInstance,
306 svx::FontHeightToolBoxControl::getSupportedServiceNames_Static() );
307 }
308 else if ( svx::FindTextToolbarController::getImplementationName_Static().equalsAscii( pImplName ) )
309 {
310 xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
311 svx::FindTextToolbarController::getImplementationName_Static(),
312 svx::FindTextToolbarController_createInstance,
313 svx::FindTextToolbarController::getSupportedServiceNames_Static() );
314 }
315 else if ( svx::DownSearchToolboxController::getImplementationName_Static().equalsAscii( pImplName ) )
316 {
317 xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
318 svx::DownSearchToolboxController::getImplementationName_Static(),
319 svx::DownSearchToolboxController_createInstance,
320 svx::DownSearchToolboxController::getSupportedServiceNames_Static() );
321 }
322 else if ( svx::UpSearchToolboxController::getImplementationName_Static().equalsAscii( pImplName ) )
323 {
324 xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
325 svx::UpSearchToolboxController::getImplementationName_Static(),
326 svx::UpSearchToolboxController_createInstance,
327 svx::UpSearchToolboxController::getSupportedServiceNames_Static() );
328 }
329 else if ( svx::FindbarDispatcher::getImplementationName_Static().equalsAscii( pImplName ) )
330 {
331 xFactory = createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
332 svx::FindbarDispatcher::getImplementationName_Static(),
333 svx::FindbarDispatcher_createInstance,
334 svx::FindbarDispatcher::getSupportedServiceNames_Static() );
335 }
336 else if( ::unogallery::GalleryThemeProvider_getImplementationName().equalsAscii( pImplName ) )
337 {
338 xFactory = ::cppu::createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
339 ::unogallery::GalleryThemeProvider_getImplementationName(),
340 ::unogallery::GalleryThemeProvider_createInstance,
341 ::unogallery::GalleryThemeProvider_getSupportedServiceNames() );
342 }
343 else if( drawinglayer::primitive2d::PrimitiveFactory2D::getImplementationName_Static().equalsAscii( pImplName ) )
344 {
345 // XPrimitiveFactory2D
346 xFactory = ::cppu::createSingleFactory( reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
347 drawinglayer::primitive2d::PrimitiveFactory2D::getImplementationName_Static(),
348 drawinglayer::primitive2d::XPrimitiveFactory2DProvider_createInstance,
349 drawinglayer::primitive2d::PrimitiveFactory2D::getSupportedServiceNames_Static() );
350 }
351 else if( ::svx::SvXMLGraphicImportHelper_getImplementationName().equalsAscii( pImplName ) )
352 {
353 xFactory = ::cppu::createSingleFactory(
354 reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
355 ::svx::SvXMLGraphicImportHelper_getImplementationName(),
356 ::svx::SvXMLGraphicImportHelper_createInstance,
357 ::svx::SvXMLGraphicImportHelper_getSupportedServiceNames() );
358 }
359 else if( ::svx::SvXMLGraphicExportHelper_getImplementationName().equalsAscii( pImplName ) )
360 {
361 xFactory = ::cppu::createSingleFactory(
362 reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ),
363 ::svx::SvXMLGraphicExportHelper_getImplementationName(),
364 ::svx::SvXMLGraphicExportHelper_createInstance,
365 ::svx::SvXMLGraphicExportHelper_getSupportedServiceNames() );
366 }
367 else if (::svx::sidebar::PanelFactory::getImplementationName().equalsAscii(pImplName))
368 {
369 xFactory = ::cppu::createSingleFactory(
370 reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager),
371 ::svx::sidebar::PanelFactory::getImplementationName(),
372 ::svx::sidebar::PanelFactory::createInstance,
373 ::svx::sidebar::PanelFactory::getSupportedServiceNames());
374 }
375
376 if( xFactory.is())
377 {
378 xFactory->acquire();
379 pRet = xFactory.get();
380 }
381 }
382
383 return pRet;
384 }
385
386 }
387