xref: /AOO41X/main/svx/source/gallery2/galexpl.cxx (revision 3ce09a58b0d6873449cda31e55c66dba2dbc8f7f)
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 <unotools/pathoptions.hxx>
28 #include <sfx2/viewfrm.hxx>
29 #include "svx/gallery1.hxx"
30 #include "svx/galtheme.hxx"
31 #include "svx/galbrws.hxx"
32 #include "svx/gallery.hxx"
33 #include "galobj.hxx"
34 
35 // -----------
36 // - Statics -
37 // -----------
38 
39 static SfxListener aLockListener;
40 
41 // -------------------
42 // - GalleryExplorer -
43 // -------------------
44 
FillThemeList(List & rThemeList)45 sal_Bool GalleryExplorer::FillThemeList( List& rThemeList )
46 {
47     Gallery* pGal = ::Gallery::GetGalleryInstance();
48 
49     if( pGal )
50     {
51         for( sal_uIntPtr i = 0, nCount = pGal->GetThemeCount(); i < nCount; i++ )
52         {
53             const GalleryThemeEntry* pEntry = pGal->GetThemeInfo( i );
54 
55             if( pEntry && !pEntry->IsReadOnly() && !pEntry->IsHidden() )
56                 rThemeList.Insert( new String( pEntry->GetThemeName() ), LIST_APPEND );
57         }
58     }
59 
60     return( rThemeList.Count() > 0 );
61 }
62 
63 // ------------------------------------------------------------------------
64 
FillObjList(const String & rThemeName,List & rObjList)65 sal_Bool GalleryExplorer::FillObjList( const String& rThemeName, List& rObjList )
66 {
67     Gallery* pGal = ::Gallery::GetGalleryInstance();
68 
69     if( pGal )
70     {
71         SfxListener     aListener;
72         GalleryTheme*   pTheme = pGal->AcquireTheme( rThemeName, aListener );
73 
74         if( pTheme )
75         {
76             for( sal_uIntPtr i = 0, nCount = pTheme->GetObjectCount(); i < nCount; i++ )
77                 rObjList.Insert( new String( pTheme->GetObjectURL( i ).GetMainURL( INetURLObject::NO_DECODE ) ), LIST_APPEND );
78 
79             pGal->ReleaseTheme( pTheme, aListener );
80         }
81     }
82 
83     return( rObjList.Count() > 0 );
84 }
85 
86 // ------------------------------------------------------------------------
87 
FillObjList(sal_uIntPtr nThemeId,List & rObjList)88 sal_Bool GalleryExplorer::FillObjList( sal_uIntPtr nThemeId, List& rObjList )
89 {
90     Gallery* pGal = ::Gallery::GetGalleryInstance();
91     return( pGal ? FillObjList( pGal->GetThemeName( nThemeId ), rObjList ) : sal_False );
92 }
93 
94 // ------------------------------------------------------------------------
95 
FillObjListTitle(const sal_uInt32 nThemeId,std::vector<rtl::OUString> & rList)96 sal_Bool GalleryExplorer::FillObjListTitle( const sal_uInt32 nThemeId, std::vector< rtl::OUString >& rList )
97 {
98     Gallery* pGal = ::Gallery::GetGalleryInstance();
99     if( pGal )
100     {
101         SfxListener     aListener;
102         GalleryTheme*   pTheme = pGal->AcquireTheme( pGal->GetThemeName( nThemeId ), aListener );
103 
104         if( pTheme )
105         {
106             for( sal_uIntPtr i = 0, nCount = pTheme->GetObjectCount(); i < nCount; i++ )
107             {
108                 SgaObject*  pObj = pTheme->AcquireObject( i );
109                 if ( pObj )
110                 {
111                     rtl::OUString aTitle( pObj->GetTitle() );
112                     rList.push_back( aTitle );
113                     pTheme->ReleaseObject( pObj );
114                 }
115             }
116             pGal->ReleaseTheme( pTheme, aListener );
117         }
118     }
119     return( rList.size() > 0 );
120 }
121 
122 // ------------------------------------------------------------------------
123 
InsertURL(const String & rThemeName,const String & rURL)124 sal_Bool GalleryExplorer::InsertURL( const String& rThemeName, const String& rURL )
125 {
126     Gallery*    pGal = ::Gallery::GetGalleryInstance();
127     sal_Bool        bRet = sal_False;
128 
129     if( pGal )
130     {
131         SfxListener   aListener;
132         GalleryTheme* pTheme = pGal->AcquireTheme( rThemeName, aListener );
133 
134         if( pTheme )
135         {
136             INetURLObject aURL( rURL );
137             DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
138             bRet = pTheme->InsertURL( aURL );
139             pGal->ReleaseTheme( pTheme, aListener );
140         }
141     }
142 
143     return bRet;
144 }
145 
146 // ------------------------------------------------------------------------
147 
InsertURL(sal_uIntPtr nThemeId,const String & rURL)148 sal_Bool GalleryExplorer::InsertURL( sal_uIntPtr nThemeId, const String& rURL )
149 {
150     Gallery* pGal = ::Gallery::GetGalleryInstance();
151     return( pGal ? InsertURL( pGal->GetThemeName( nThemeId ), rURL ) : sal_False );
152 }
153 
154 // ------------------------------------------------------------------------
155 
GetObjCount(const String & rThemeName)156 sal_uIntPtr GalleryExplorer::GetObjCount( const String& rThemeName )
157 {
158     Gallery*    pGal = ::Gallery::GetGalleryInstance();
159     sal_uIntPtr     nRet = 0;
160 
161     if( pGal )
162     {
163         SfxListener     aListener;
164         GalleryTheme*   pTheme = pGal->AcquireTheme( rThemeName, aListener );
165 
166         if( pTheme )
167         {
168             nRet = pTheme->GetObjectCount();
169             pGal->ReleaseTheme( pTheme, aListener );
170         }
171     }
172 
173     return nRet;
174 }
175 
176 // ------------------------------------------------------------------------
177 
GetObjCount(sal_uIntPtr nThemeId)178 sal_uIntPtr GalleryExplorer::GetObjCount( sal_uIntPtr nThemeId )
179 {
180     Gallery* pGal = ::Gallery::GetGalleryInstance();
181     return( pGal ? GetObjCount( pGal->GetThemeName( nThemeId ) ) : sal_False );
182 }
183 
184 // ------------------------------------------------------------------------
185 
GetGraphicObj(const String & rThemeName,sal_uIntPtr nPos,Graphic * pGraphic,BitmapEx * pThumb,sal_Bool bProgress)186 sal_Bool GalleryExplorer::GetGraphicObj( const String& rThemeName, sal_uIntPtr nPos,
187                                      Graphic* pGraphic, BitmapEx* pThumb,
188                                      sal_Bool bProgress )
189 {
190     Gallery*    pGal = ::Gallery::GetGalleryInstance();
191     sal_Bool        bRet = sal_False;
192 
193     if( pGal )
194     {
195         SfxListener     aListener;
196         GalleryTheme*   pTheme = pGal->AcquireTheme( rThemeName, aListener );
197 
198         if( pTheme )
199         {
200             if( pGraphic )
201                 bRet = bRet || pTheme->GetGraphic( nPos, *pGraphic, bProgress );
202 
203             if( pThumb )
204                 bRet = bRet || pTheme->GetThumb( nPos, *pThumb, bProgress );
205 
206             pGal->ReleaseTheme( pTheme, aListener );
207         }
208     }
209 
210     return bRet;
211 }
212 
213 // ------------------------------------------------------------------------
214 
GetGraphicObj(sal_uIntPtr nThemeId,sal_uIntPtr nPos,Graphic * pGraphic,BitmapEx * pThumb,sal_Bool bProgress)215 sal_Bool GalleryExplorer::GetGraphicObj( sal_uIntPtr nThemeId, sal_uIntPtr nPos,
216                                      Graphic* pGraphic, BitmapEx* pThumb,
217                                      sal_Bool bProgress )
218 {
219     Gallery* pGal = ::Gallery::GetGalleryInstance();
220     return( pGal ? GetGraphicObj( pGal->GetThemeName( nThemeId ), nPos, pGraphic, pThumb, bProgress ) : sal_False );
221 }
222 
223 // ------------------------------------------------------------------------
224 
InsertGraphicObj(const String & rThemeName,const Graphic & rGraphic)225 sal_Bool GalleryExplorer::InsertGraphicObj( const String& rThemeName, const Graphic& rGraphic )
226 {
227     Gallery*    pGal = ::Gallery::GetGalleryInstance();
228     sal_Bool        bRet = sal_False;
229 
230     if( pGal )
231     {
232         SfxListener     aListener;
233         GalleryTheme*   pTheme = pGal->AcquireTheme( rThemeName, aListener );
234 
235         if( pTheme )
236         {
237             bRet = pTheme->InsertGraphic( rGraphic );
238             pGal->ReleaseTheme( pTheme, aListener );
239         }
240     }
241 
242     return bRet;
243 }
244 
245 // ------------------------------------------------------------------------
246 
InsertGraphicObj(sal_uIntPtr nThemeId,const Graphic & rGraphic)247 sal_Bool GalleryExplorer::InsertGraphicObj( sal_uIntPtr nThemeId, const Graphic& rGraphic )
248 {
249     Gallery* pGal = ::Gallery::GetGalleryInstance();
250     return( pGal ? InsertGraphicObj( pGal->GetThemeName( nThemeId ), rGraphic ) : sal_False );
251 }
252 
253 // ------------------------------------------------------------------------
254 
GetSdrObjCount(const String & rThemeName)255 sal_uIntPtr GalleryExplorer::GetSdrObjCount( const String& rThemeName )
256 {
257     Gallery*    pGal = ::Gallery::GetGalleryInstance();
258     sal_uIntPtr     nRet = 0;
259 
260     if( pGal )
261     {
262         SfxListener     aListener;
263         GalleryTheme*   pTheme = pGal->AcquireTheme( rThemeName, aListener );
264 
265         if( pTheme )
266         {
267             for( sal_uIntPtr i = 0, nCount = pTheme->GetObjectCount(); i < nCount; i++ )
268                 if( SGA_OBJ_SVDRAW == pTheme->GetObjectKind( i ) )
269                     nRet++;
270 
271             pGal->ReleaseTheme( pTheme, aListener );
272         }
273     }
274 
275     return nRet;
276 }
277 
278 // ------------------------------------------------------------------------
279 
GetSdrObjCount(sal_uIntPtr nThemeId)280 sal_uIntPtr GalleryExplorer::GetSdrObjCount( sal_uIntPtr nThemeId  )
281 {
282     Gallery* pGal = ::Gallery::GetGalleryInstance();
283     return( pGal ? GetSdrObjCount( pGal->GetThemeName( nThemeId ) ) : sal_False );
284 }
285 
286 // ------------------------------------------------------------------------
287 
GetSdrObj(const String & rThemeName,sal_uIntPtr nSdrModelPos,SdrModel * pModel,BitmapEx * pThumb)288 sal_Bool GalleryExplorer::GetSdrObj( const String& rThemeName, sal_uIntPtr nSdrModelPos,
289                                  SdrModel* pModel, BitmapEx* pThumb )
290 {
291     Gallery*    pGal = ::Gallery::GetGalleryInstance();
292     sal_Bool        bRet = sal_False;
293 
294     if( pGal )
295     {
296         SfxListener     aListener;
297         GalleryTheme*   pTheme = pGal->AcquireTheme( rThemeName, aListener );
298 
299         if( pTheme )
300         {
301             for( sal_uIntPtr i = 0, nCount = pTheme->GetObjectCount(), nActPos = 0; ( i < nCount ) && !bRet; i++ )
302             {
303                 if( SGA_OBJ_SVDRAW == pTheme->GetObjectKind( i ) )
304                 {
305                     if( nActPos++ == nSdrModelPos )
306                     {
307                         if( pModel )
308                             bRet = bRet || pTheme->GetModel( i, *pModel, sal_False );
309 
310                         if( pThumb )
311                             bRet = bRet || pTheme->GetThumb( i, *pThumb );
312                     }
313                 }
314             }
315 
316             pGal->ReleaseTheme( pTheme, aListener );
317         }
318     }
319 
320     return bRet;
321 }
322 
323 // ------------------------------------------------------------------------
324 
GetSdrObj(sal_uIntPtr nThemeId,sal_uIntPtr nSdrModelPos,SdrModel * pModel,BitmapEx * pThumb)325 sal_Bool GalleryExplorer::GetSdrObj( sal_uIntPtr nThemeId, sal_uIntPtr nSdrModelPos,
326                                  SdrModel* pModel, BitmapEx* pThumb )
327 {
328     Gallery* pGal = ::Gallery::GetGalleryInstance();
329     return( pGal ? GetSdrObj( pGal->GetThemeName( nThemeId ), nSdrModelPos, pModel, pThumb ) : sal_False );
330 }
331 
332 // ------------------------------------------------------------------------
333 
InsertSdrObj(const String & rThemeName,FmFormModel & rModel)334 sal_Bool GalleryExplorer::InsertSdrObj( const String& rThemeName, FmFormModel& rModel )
335 {
336     Gallery*    pGal = ::Gallery::GetGalleryInstance();
337     sal_Bool        bRet = sal_False;
338 
339     if( pGal )
340     {
341         SfxListener     aListener;
342         GalleryTheme*   pTheme = pGal->AcquireTheme( rThemeName, aListener );
343 
344         if( pTheme )
345         {
346             bRet = pTheme->InsertModel( rModel );
347             pGal->ReleaseTheme( pTheme, aListener );
348         }
349     }
350 
351     return bRet;
352 }
353 
354 // ------------------------------------------------------------------------
355 
InsertSdrObj(sal_uIntPtr nThemeId,FmFormModel & rModel)356 sal_Bool GalleryExplorer::InsertSdrObj( sal_uIntPtr nThemeId, FmFormModel& rModel )
357 {
358     Gallery* pGal = ::Gallery::GetGalleryInstance();
359     return( pGal ? InsertSdrObj( pGal->GetThemeName( nThemeId ), rModel ) : sal_False );
360 }
361 
362 // -----------------------------------------------------------------------------
363 
BeginLocking(const String & rThemeName)364 sal_Bool GalleryExplorer::BeginLocking( const String& rThemeName )
365 {
366     Gallery*    pGal = ::Gallery::GetGalleryInstance();
367     sal_Bool        bRet = sal_False;
368 
369     if( pGal )
370     {
371         GalleryTheme* pTheme = pGal->AcquireTheme( rThemeName, aLockListener );
372 
373         if( pTheme )
374         {
375             pTheme->LockTheme();
376             bRet = sal_True;
377         }
378     }
379 
380     return bRet;
381 }
382 
383 // -----------------------------------------------------------------------------
384 
BeginLocking(sal_uIntPtr nThemeId)385 sal_Bool GalleryExplorer::BeginLocking( sal_uIntPtr nThemeId )
386 {
387     Gallery* pGal = ::Gallery::GetGalleryInstance();
388     return( pGal ? BeginLocking( pGal->GetThemeName( nThemeId ) ) : sal_False );
389 }
390 
391 // -----------------------------------------------------------------------------
392 
EndLocking(const String & rThemeName)393 sal_Bool GalleryExplorer::EndLocking( const String& rThemeName )
394 {
395     Gallery*    pGal = ::Gallery::GetGalleryInstance();
396     sal_Bool        bRet = sal_False;
397 
398     if( pGal )
399     {
400         SfxListener   aListener;
401         GalleryTheme* pTheme = pGal->AcquireTheme( rThemeName, aListener );
402 
403         if( pTheme )
404         {
405             const sal_Bool bReleaseLockedTheme = pTheme->UnlockTheme();
406 
407             // release acquired theme
408             pGal->ReleaseTheme( pTheme, aListener );
409 
410             if( bReleaseLockedTheme )
411             {
412                 // release locked theme
413                 pGal->ReleaseTheme( pTheme, aLockListener );
414                 bRet = sal_True;
415             }
416         }
417     }
418 
419     return bRet;
420 }
421 
422 // -----------------------------------------------------------------------------
423 
EndLocking(sal_uIntPtr nThemeId)424 sal_Bool GalleryExplorer::EndLocking( sal_uIntPtr nThemeId )
425 {
426     Gallery* pGal = ::Gallery::GetGalleryInstance();
427     return( pGal ? EndLocking( pGal->GetThemeName( nThemeId ) ) : sal_False );
428 }
429 
430 // -----------------------------------------------------------------------------
431 // eof
432