xref: /AOO41X/main/svx/source/unogallery/unogalthemeprovider.cxx (revision f6e50924346d0b8c0b07c91832a97665dd718b0c)
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 
27 #include "unogalthemeprovider.hxx"
28 #include "unogaltheme.hxx"
29 #include "svx/gallery1.hxx"
30 #include <rtl/uuid.h>
31 #include <vos/mutex.hxx>
32 #ifndef _SV_SVAPP_HXX_
33 #include <vcl/svapp.hxx>
34 #endif
35 #include <unotools/pathoptions.hxx>
36 #include <com/sun/star/gallery/XGalleryTheme.hpp>
37 #include <com/sun/star/beans/PropertyValue.hpp>
38 
39 using namespace ::com::sun::star;
40 
41 namespace unogallery {
42 
43 // --------------------
44 // - Helper functions -
45 // --------------------
46 
GalleryThemeProvider_createInstance(const uno::Reference<lang::XMultiServiceFactory> &)47 uno::Reference< uno::XInterface > SAL_CALL GalleryThemeProvider_createInstance(
48     const uno::Reference< lang::XMultiServiceFactory > & )
49     throw( uno::Exception )
50 {
51     return *( new GalleryThemeProvider() );
52 }
53 
54 // -----------------------------------------------------------------------------
55 
GalleryThemeProvider_getSupportedServiceNames()56 uno::Sequence< ::rtl::OUString > SAL_CALL GalleryThemeProvider_getSupportedServiceNames()
57     throw()
58 {
59     return GalleryThemeProvider::getSupportedServiceNames_Static();
60 }
61 
62 // -----------------------------------------------------------------------------
63 
GalleryThemeProvider_getImplementationName()64 ::rtl::OUString SAL_CALL GalleryThemeProvider_getImplementationName()
65     throw()
66 {
67     return GalleryThemeProvider::getImplementationName_Static();
68 }
69 
70 // -----------------
71 // - GalleryThemeProvider -
72 // -----------------
73 
GalleryThemeProvider()74 GalleryThemeProvider::GalleryThemeProvider() :
75     mbHiddenThemes( sal_False )
76 {
77     mpGallery = ::Gallery::GetGalleryInstance();
78 }
79 
80 // ------------------------------------------------------------------------------
81 
~GalleryThemeProvider()82 GalleryThemeProvider::~GalleryThemeProvider()
83 {
84 }
85 
86 // ------------------------------------------------------------------------------
87 
getImplementationName_Static()88 SVX_DLLPUBLIC ::rtl::OUString GalleryThemeProvider::getImplementationName_Static()
89     throw()
90 {
91     return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.gallery.GalleryThemeProvider" ) );
92 }
93 
94 // ------------------------------------------------------------------------------
95 
getSupportedServiceNames_Static()96 SVX_DLLPUBLIC uno::Sequence< ::rtl::OUString > GalleryThemeProvider::getSupportedServiceNames_Static()
97     throw()
98 {
99     uno::Sequence< ::rtl::OUString > aSeq( 1 );
100 
101     aSeq.getArray()[ 0 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.gallery.GalleryThemeProvider" ) );
102 
103     return aSeq;
104 }
105 
106 // ------------------------------------------------------------------------------
107 
getImplementationName()108 ::rtl::OUString SAL_CALL GalleryThemeProvider::getImplementationName()
109     throw( uno::RuntimeException )
110 {
111     return getImplementationName_Static();
112 }
113 
114 // ------------------------------------------------------------------------------
115 
supportsService(const::rtl::OUString & ServiceName)116 sal_Bool SAL_CALL GalleryThemeProvider::supportsService( const ::rtl::OUString& ServiceName )
117     throw( uno::RuntimeException )
118 {
119     uno::Sequence< ::rtl::OUString >    aSNL( getSupportedServiceNames() );
120     const ::rtl::OUString*              pArray = aSNL.getConstArray();
121 
122     for( int i = 0; i < aSNL.getLength(); i++ )
123         if( pArray[i] == ServiceName )
124             return true;
125 
126     return false;
127 }
128 
129 // ------------------------------------------------------------------------------
130 
getSupportedServiceNames()131 uno::Sequence< ::rtl::OUString > SAL_CALL GalleryThemeProvider::getSupportedServiceNames()
132     throw( uno::RuntimeException )
133 {
134     return getSupportedServiceNames_Static();
135 }
136 
137 // ------------------------------------------------------------------------------
138 
getTypes()139 uno::Sequence< uno::Type > SAL_CALL GalleryThemeProvider::getTypes()
140     throw(uno::RuntimeException)
141 {
142     uno::Sequence< uno::Type >  aTypes( 6 );
143     uno::Type*                  pTypes = aTypes.getArray();
144 
145     *pTypes++ = ::getCppuType((const uno::Reference< lang::XServiceInfo>*)0);
146     *pTypes++ = ::getCppuType((const uno::Reference< lang::XTypeProvider>*)0);
147     *pTypes++ = ::getCppuType((const uno::Reference< lang::XInitialization>*)0);
148     *pTypes++ = ::getCppuType((const uno::Reference< container::XElementAccess>*)0);
149     *pTypes++ = ::getCppuType((const uno::Reference< container::XNameAccess>*)0);
150     *pTypes++ = ::getCppuType((const uno::Reference< gallery::XGalleryThemeProvider>*)0);
151 
152     return aTypes;
153 }
154 
155 // ------------------------------------------------------------------------------
156 
getImplementationId()157 uno::Sequence< sal_Int8 > SAL_CALL GalleryThemeProvider::getImplementationId()
158     throw(uno::RuntimeException)
159 {
160     const vos::OGuard                   aGuard( Application::GetSolarMutex() );
161     static uno::Sequence< sal_Int8 >    aId;
162 
163     if( aId.getLength() == 0 )
164     {
165         aId.realloc( 16 );
166         rtl_createUuid( reinterpret_cast< sal_uInt8* >( aId.getArray() ), 0, sal_True );
167     }
168 
169     return aId;
170 }
171 
172 // ------------------------------------------------------------------------------
173 
initialize(const uno::Sequence<uno::Any> & rArguments)174 void SAL_CALL GalleryThemeProvider::initialize( const uno::Sequence< uno::Any >& rArguments )
175     throw ( uno::Exception, uno::RuntimeException )
176 {
177     uno::Sequence< beans::PropertyValue >   aParams;
178     sal_Int32                               i;
179 
180     for( i = 0; i < rArguments.getLength(); ++i )
181     {
182         if( rArguments[ i ] >>= aParams )
183             break;
184     }
185 
186     for( i = 0; i < aParams.getLength(); ++i )
187     {
188         const beans::PropertyValue& rProp = aParams[ i ];
189 
190         if( rProp.Name.equalsAscii( "ProvideHiddenThemes" ) )
191             rProp.Value >>= mbHiddenThemes;
192     }
193 }
194 
195 // ------------------------------------------------------------------------------
196 
getElementType()197 uno::Type SAL_CALL GalleryThemeProvider::getElementType()
198     throw (uno::RuntimeException)
199 {
200     return ::getCppuType( (const uno::Reference< gallery::XGalleryTheme >*) 0);
201 }
202 
203 // ------------------------------------------------------------------------------
204 
hasElements()205 sal_Bool SAL_CALL GalleryThemeProvider::hasElements()
206     throw (uno::RuntimeException)
207 {
208     const ::vos::OGuard aGuard( Application::GetSolarMutex() );
209 
210     return( ( mpGallery != NULL ) && ( mpGallery->GetThemeCount() > 0 ) );
211 }
212 
213 // ------------------------------------------------------------------------------
214 
getByName(const::rtl::OUString & rName)215 uno::Any SAL_CALL GalleryThemeProvider::getByName( const ::rtl::OUString& rName )
216     throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
217 {
218     const ::vos::OGuard aGuard( Application::GetSolarMutex() );
219     uno::Any            aRet;
220 
221     if( !mpGallery || !mpGallery->HasTheme( rName ) )
222     {
223         throw container::NoSuchElementException();
224     }
225     else
226     {
227         aRet = uno::makeAny( uno::Reference< gallery::XGalleryTheme >( new ::unogallery::GalleryTheme( rName ) ) );
228     }
229 
230     return aRet;
231 }
232 
233 // ------------------------------------------------------------------------------
234 
getElementNames()235 uno::Sequence< ::rtl::OUString > SAL_CALL GalleryThemeProvider::getElementNames()
236     throw (uno::RuntimeException)
237 {
238     const ::vos::OGuard                 aGuard( Application::GetSolarMutex() );
239     sal_uInt32                          i = 0, nCount = ( mpGallery ? mpGallery->GetThemeCount() : 0 ), nRealCount = 0;
240     uno::Sequence< ::rtl::OUString >    aSeq( nCount );
241 
242     for( ; i < nCount; ++i )
243     {
244         const GalleryThemeEntry* pEntry = mpGallery->GetThemeInfo( i );
245 
246         if( mbHiddenThemes || !pEntry->IsHidden() )
247             aSeq[ nRealCount++ ] = pEntry->GetThemeName();
248     }
249 
250     aSeq.realloc( nRealCount );
251 
252     return aSeq;
253 }
254 
255 // ------------------------------------------------------------------------------
256 
hasByName(const::rtl::OUString & rName)257 sal_Bool SAL_CALL GalleryThemeProvider::hasByName( const ::rtl::OUString& rName )
258     throw (uno::RuntimeException)
259 {
260     const ::vos::OGuard aGuard( Application::GetSolarMutex() );
261 
262     sal_Bool bRet = sal_False;
263 
264     if( mpGallery && mpGallery->HasTheme( rName ) )
265         bRet = ( mbHiddenThemes || !mpGallery->GetThemeInfo( rName )->IsHidden() );
266 
267     return( bRet );
268 }
269 
270 // ------------------------------------------------------------------------------
271 
insertNewByName(const::rtl::OUString & rThemeName)272 uno::Reference< gallery::XGalleryTheme > SAL_CALL GalleryThemeProvider::insertNewByName( const ::rtl::OUString& rThemeName )
273     throw (container::ElementExistException, uno::RuntimeException)
274 {
275     const ::vos::OGuard                         aGuard( Application::GetSolarMutex() );
276     uno::Reference< gallery::XGalleryTheme >    xRet;
277 
278     if( mpGallery )
279     {
280         if( mpGallery->HasTheme( rThemeName ) )
281         {
282             throw container::ElementExistException();
283         }
284         else if( mpGallery->CreateTheme( rThemeName ) )
285         {
286             xRet = new ::unogallery::GalleryTheme( rThemeName );
287         }
288     }
289 
290     return xRet;
291 }
292 
293 // ------------------------------------------------------------------------------
294 
removeByName(const::rtl::OUString & rName)295 void SAL_CALL GalleryThemeProvider::removeByName( const ::rtl::OUString& rName )
296     throw (container::NoSuchElementException, uno::RuntimeException)
297 {
298     const ::vos::OGuard aGuard( Application::GetSolarMutex() );
299 
300     if( !mpGallery ||
301         !mpGallery->HasTheme( rName ) ||
302         ( !mbHiddenThemes && mpGallery->GetThemeInfo( rName )->IsHidden() ) )
303     {
304         throw container::NoSuchElementException();
305     }
306     else
307     {
308         mpGallery->RemoveTheme( rName );
309     }
310 }
311 
312 }
313