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_cui.hxx"
26
27 #include <algorithm>
28 #include <ucbhelper/content.hxx>
29 #include <vos/mutex.hxx>
30 #include <vcl/svapp.hxx>
31 #include <vcl/msgbox.hxx>
32 #include <avmedia/mediawindow.hxx>
33 #include <unotools/pathoptions.hxx>
34 #include <sfx2/opengrf.hxx>
35 #include <svtools/filter.hxx>
36 #include <svx/gallery1.hxx>
37 #include <svx/galtheme.hxx>
38 #include "cuigaldlg.hxx"
39 #include "helpid.hrc"
40 #include <unotools/syslocale.hxx>
41 #include <cppuhelper/implbase1.hxx>
42 #include <com/sun/star/uno/Reference.hxx>
43 #include <com/sun/star/lang/XInitialization.hpp>
44 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
45 #include <comphelper/processfactory.hxx>
46 #include <com/sun/star/sdbc/XResultSet.hpp>
47 #include <com/sun/star/sdbc/XRow.hpp>
48 #include <com/sun/star/ucb/XContentAccess.hpp>
49 #include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
50 #include <sfx2/sfxuno.hxx>
51 #include "dialmgr.hxx"
52 #include "gallery.hrc"
53 #include <svx/dialogs.hrc>
54 #include <svx/dialmgr.hxx>
55
56
57 // --------------
58 // - Namespaces -
59 // --------------
60
61 using namespace ::ucbhelper;
62 using namespace ::rtl;
63 using namespace ::cppu;
64 using namespace ::com::sun::star::lang;
65 using namespace ::com::sun::star::sdbc;
66 using namespace ::com::sun::star::ucb;
67 using namespace ::com::sun::star::ui::dialogs;
68 using namespace ::com::sun::star::uno;
69
70
71 // -----------
72 // - Defines -
73 // -----------
74
75 #define MAXPATH 1024
76
77 // ----------------
78 // - SearchThread -
79 // ----------------
80
SearchThread(SearchProgress * pProgess,TPGalleryThemeProperties * pBrowser,const INetURLObject & rStartURL)81 SearchThread::SearchThread( SearchProgress* pProgess,
82 TPGalleryThemeProperties* pBrowser,
83 const INetURLObject& rStartURL ) :
84 mpProgress ( pProgess ),
85 mpBrowser ( pBrowser ),
86 maStartURL ( rStartURL )
87 {
88 }
89
90 // ------------------------------------------------------------------------
91
~SearchThread()92 SearchThread::~SearchThread()
93 {
94 }
95
96 // ------------------------------------------------------------------------
97
run()98 void SAL_CALL SearchThread::run()
99 {
100 const String aFileType( mpBrowser->aCbbFileType.GetText() );
101
102 if( aFileType.Len() )
103 {
104 const sal_uInt16 nFileNumber = mpBrowser->aCbbFileType.GetEntryPos( aFileType );
105 sal_uInt16 nBeginFormat, nEndFormat;
106 ::std::vector< String > aFormats;
107
108 if( !nFileNumber || ( nFileNumber >= mpBrowser->aCbbFileType.GetEntryCount() ) )
109 {
110 nBeginFormat = 1;
111 nEndFormat = mpBrowser->aCbbFileType.GetEntryCount() - 1;
112 }
113 else
114 nBeginFormat = nEndFormat = nFileNumber;
115
116 for( sal_uInt16 i = nBeginFormat; i <= nEndFormat; ++i )
117 aFormats.push_back( ( (FilterEntry*) mpBrowser->aFilterEntryList.GetObject( i ) )->aFilterName.ToLowerAscii() );
118
119 ImplSearch( maStartURL, aFormats, mpBrowser->bSearchRecursive );
120 }
121 }
122
123 // ------------------------------------------------------------------------
124
onTerminated()125 void SAL_CALL SearchThread::onTerminated()
126 {
127 Application::PostUserEvent( LINK( mpProgress, SearchProgress, CleanUpHdl ) );
128 }
129
130 // ------------------------------------------------------------------------
131
ImplSearch(const INetURLObject & rStartURL,const::std::vector<String> & rFormats,sal_Bool bRecursive)132 void SearchThread::ImplSearch( const INetURLObject& rStartURL,
133 const ::std::vector< String >& rFormats,
134 sal_Bool bRecursive )
135 {
136 {
137 ::vos::OGuard aGuard( Application::GetSolarMutex() );
138
139 mpProgress->SetDirectory( rStartURL );
140 mpProgress->Sync();
141 }
142
143 try
144 {
145 ::com::sun::star::uno::Reference< XCommandEnvironment > xEnv;
146 Content aCnt( rStartURL.GetMainURL( INetURLObject::NO_DECODE ), xEnv );
147 Sequence< OUString > aProps( 2 );
148
149 aProps.getArray()[ 0 ] = OUString::createFromAscii( "IsFolder" );
150 aProps.getArray()[ 1 ] = OUString::createFromAscii( "IsDocument" );
151 ::com::sun::star::uno::Reference< XResultSet > xResultSet(
152 aCnt.createCursor( aProps, INCLUDE_FOLDERS_AND_DOCUMENTS ) );
153
154 if( xResultSet.is() )
155 {
156 ::com::sun::star::uno::Reference< XContentAccess > xContentAccess( xResultSet, UNO_QUERY_THROW );
157 ::com::sun::star::uno::Reference< XRow > xRow( xResultSet, UNO_QUERY_THROW );
158
159 while( xResultSet->next() && schedule() )
160 {
161 INetURLObject aFoundURL( xContentAccess->queryContentIdentifierString() );
162 DBG_ASSERT( aFoundURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
163
164 sal_Bool bFolder = xRow->getBoolean( 1 ); // property "IsFolder"
165 if ( xRow->wasNull() )
166 bFolder = sal_False;
167
168 if( bRecursive && bFolder )
169 ImplSearch( aFoundURL, rFormats, sal_True );
170 else
171 {
172 sal_Bool bDocument = xRow->getBoolean( 2 ); // property "IsDocument"
173 if ( xRow->wasNull() )
174 bDocument = sal_False;
175
176 if( bDocument )
177 {
178 GraphicDescriptor aDesc( aFoundURL );
179 String aFileName;
180
181 if( ( aDesc.Detect() &&
182 ::std::find( rFormats.begin(),
183 rFormats.end(),
184 aDesc.GetImportFormatShortName(
185 aDesc.GetFileFormat() ).ToLowerAscii() )
186 != rFormats.end() ) ||
187 ::std::find( rFormats.begin(),
188 rFormats.end(),
189 String(aFoundURL.GetExtension().toAsciiLowerCase()) )
190 != rFormats.end() )
191 {
192 ::vos::OGuard aGuard( Application::GetSolarMutex() );
193
194 mpBrowser->aFoundList.Insert(
195 new String( aFoundURL.GetMainURL( INetURLObject::NO_DECODE ) ),
196 LIST_APPEND );
197 mpBrowser->aLbxFound.InsertEntry(
198 GetReducedString( aFoundURL, 50 ),
199 (sal_uInt16) mpBrowser->aFoundList.Count() - 1 );
200 }
201 }
202 }
203 }
204 }
205 }
206 catch( const ContentCreationException& )
207 {
208 }
209 catch( const ::com::sun::star::uno::RuntimeException& )
210 {
211 }
212 catch( const ::com::sun::star::uno::Exception& )
213 {
214 }
215 }
216
217 // ------------------
218 // - SearchProgress -
219 // ------------------
220
SearchProgress(Window * pParent,const INetURLObject & rStartURL)221 SearchProgress::SearchProgress( Window* pParent, const INetURLObject& rStartURL ) :
222 ModalDialog ( pParent, CUI_RES(RID_SVXDLG_GALLERY_SEARCH_PROGRESS ) ),
223 aFtSearchDir ( this, CUI_RES( FT_SEARCH_DIR ) ),
224 aFLSearchDir ( this, CUI_RES( FL_SEARCH_DIR ) ),
225 aFtSearchType ( this, CUI_RES( FT_SEARCH_TYPE ) ),
226 aFLSearchType ( this, CUI_RES( FL_SEARCH_TYPE ) ),
227 aBtnCancel ( this, CUI_RES( BTN_CANCEL ) ),
228 maSearchThread ( this, (TPGalleryThemeProperties*) pParent, rStartURL )
229 {
230 FreeResource();
231 aBtnCancel.SetClickHdl( LINK( this, SearchProgress, ClickCancelBtn ) );
232 }
233
234 // ------------------------------------------------------------------------
235
Terminate()236 void SearchProgress::Terminate()
237 {
238 maSearchThread.terminate();
239 }
240
241 // ------------------------------------------------------------------------
242
IMPL_LINK(SearchProgress,ClickCancelBtn,void *,EMPTYARG)243 IMPL_LINK( SearchProgress, ClickCancelBtn, void*, EMPTYARG )
244 {
245 Terminate();
246 return 0L;
247 }
248
249 // ------------------------------------------------------------------------
250
IMPL_LINK(SearchProgress,CleanUpHdl,void *,EMPTYARG)251 IMPL_LINK( SearchProgress, CleanUpHdl, void*, EMPTYARG )
252 {
253 EndDialog( RET_OK );
254 delete this;
255 return 0L;
256 }
257
258 // ------------------------------------------------------------------------
259
Execute()260 short SearchProgress::Execute()
261 {
262 DBG_ERROR( "SearchProgress cannot be executed via Dialog::Execute!\n"
263 "It creates a thread that will call back to VCL apartment => deadlock!\n"
264 "Use Dialog::StartExecuteModal to execute the dialog!" );
265 return RET_CANCEL;
266 }
267
268 // ------------------------------------------------------------------------
269
StartExecuteModal(const Link & rEndDialogHdl)270 void SearchProgress::StartExecuteModal( const Link& rEndDialogHdl )
271 {
272 maSearchThread.create();
273 ModalDialog::StartExecuteModal( rEndDialogHdl );
274 }
275
276 // --------------
277 // - TakeThread -
278 // --------------
279
TakeThread(TakeProgress * pProgess,TPGalleryThemeProperties * pBrowser,List & rTakenList)280 TakeThread::TakeThread( TakeProgress* pProgess, TPGalleryThemeProperties* pBrowser, List& rTakenList ) :
281 mpProgress ( pProgess ),
282 mpBrowser ( pBrowser ),
283 mrTakenList ( rTakenList )
284 {
285 }
286
287 // ------------------------------------------------------------------------
288
~TakeThread()289 TakeThread::~TakeThread()
290 {
291 }
292
293 // ------------------------------------------------------------------------
294
run()295 void SAL_CALL TakeThread::run()
296 {
297 String aName;
298 INetURLObject aURL;
299 sal_uInt16 nEntries;
300 GalleryTheme* pThm = mpBrowser->GetXChgData()->pTheme;
301 sal_uInt16 nPos;
302 GalleryProgress* pStatusProgress;
303
304 {
305 ::vos::OGuard aGuard( Application::GetSolarMutex() );
306 pStatusProgress = new GalleryProgress;
307 nEntries = mpBrowser->bTakeAll ? mpBrowser->aLbxFound.GetEntryCount() : mpBrowser->aLbxFound.GetSelectEntryCount();
308 pThm->LockBroadcaster();
309 }
310
311 for( sal_uInt16 i = 0; i < nEntries && schedule(); i++ )
312 {
313 // kompletten Filenamen aus FoundList holen
314 if( mpBrowser->bTakeAll )
315 aURL = INetURLObject(*mpBrowser->aFoundList.GetObject( nPos = i ));
316 else
317 aURL = INetURLObject(*mpBrowser->aFoundList.GetObject( nPos = mpBrowser->aLbxFound.GetSelectEntryPos( i ) ));
318
319 // Position in Taken-Liste uebernehmen
320 mrTakenList.Insert( (void*) (sal_uLong)nPos, LIST_APPEND );
321
322 {
323 ::vos::OGuard aGuard( Application::GetSolarMutex() );
324
325 mpProgress->SetFile( aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) );
326 pStatusProgress->Update( i, nEntries - 1 );
327 mpProgress->Sync();
328 pThm->InsertURL( aURL );
329 }
330 }
331
332 {
333 ::vos::OGuard aGuard( Application::GetSolarMutex() );
334
335 pThm->UnlockBroadcaster();
336 delete pStatusProgress;
337 }
338 }
339
340 // ------------------------------------------------------------------------
341
onTerminated()342 void SAL_CALL TakeThread::onTerminated()
343 {
344 Application::PostUserEvent( LINK( mpProgress, TakeProgress, CleanUpHdl ) );
345 }
346
347 // ----------------
348 // - TakeProgress -
349 // ----------------
350
TakeProgress(Window * pWindow)351 TakeProgress::TakeProgress( Window* pWindow ) :
352 ModalDialog ( pWindow, CUI_RES( RID_SVXDLG_GALLERY_TAKE_PROGRESS ) ),
353 aFtTakeFile ( this, CUI_RES( FT_TAKE_FILE ) ),
354 aFLTakeProgress( this, CUI_RES( FL_TAKE_PROGRESS ) ),
355 aBtnCancel ( this, CUI_RES( BTN_CANCEL ) ),
356 maTakeThread ( this, (TPGalleryThemeProperties*) pWindow, maTakenList )
357
358 {
359 FreeResource();
360 aBtnCancel.SetClickHdl( LINK( this, TakeProgress, ClickCancelBtn ) );
361 }
362
363 // ------------------------------------------------------------------------
364
365
Terminate()366 void TakeProgress::Terminate()
367 {
368 maTakeThread.terminate();
369 }
370
371 // ------------------------------------------------------------------------
372
IMPL_LINK(TakeProgress,ClickCancelBtn,void *,EMPTYARG)373 IMPL_LINK( TakeProgress, ClickCancelBtn, void*, EMPTYARG )
374 {
375 Terminate();
376 return 0L;
377 }
378
379 // ------------------------------------------------------------------------
380
IMPL_LINK(TakeProgress,CleanUpHdl,void *,EMPTYARG)381 IMPL_LINK( TakeProgress, CleanUpHdl, void*, EMPTYARG )
382 {
383 TPGalleryThemeProperties* mpBrowser = (TPGalleryThemeProperties*) GetParent();
384 ::std::bit_vector aRemoveEntries( mpBrowser->aFoundList.Count(), false );
385 ::std::vector< String > aRemainingVector;
386 sal_uInt32 i, nCount;
387
388 GetParent()->EnterWait();
389 mpBrowser->aLbxFound.SetUpdateMode( sal_False );
390 mpBrowser->aLbxFound.SetNoSelection();
391
392 // mark all taken positions in aRemoveEntries
393 for( i = 0UL, nCount = maTakenList.Count(); i < nCount; ++i )
394 aRemoveEntries[ (sal_uLong) maTakenList.GetObject( i ) ] = true;
395
396 maTakenList.Clear();
397
398 // refill found list
399 for( i = 0, nCount = aRemoveEntries.size(); i < nCount; ++i )
400 if( !aRemoveEntries[ i ] )
401 aRemainingVector.push_back( *mpBrowser->aFoundList.GetObject( i ) );
402
403 for( String* pStr = mpBrowser->aFoundList.First(); pStr; pStr = mpBrowser->aFoundList.Next() )
404 delete pStr;
405
406 mpBrowser->aFoundList.Clear();
407
408 for( i = 0, nCount = aRemainingVector.size(); i < nCount; ++i )
409 mpBrowser->aFoundList.Insert( new String( aRemainingVector[ i ] ), LIST_APPEND );
410
411 aRemainingVector.clear();
412
413 // refill list box
414 for( i = 0, nCount = aRemoveEntries.size(); i < nCount; ++i )
415 if( !aRemoveEntries[ i ] )
416 aRemainingVector.push_back( mpBrowser->aLbxFound.GetEntry( (sal_uInt16) i ) );
417
418 mpBrowser->aLbxFound.Clear();
419
420 for( i = 0, nCount = aRemainingVector.size(); i < nCount; ++i )
421 mpBrowser->aLbxFound.InsertEntry( aRemainingVector[ i ] );
422
423 aRemainingVector.clear();
424
425 mpBrowser->aLbxFound.SetUpdateMode( sal_True );
426 mpBrowser->SelectFoundHdl( NULL );
427 GetParent()->LeaveWait();
428
429 EndDialog( RET_OK );
430 delete this;
431 return 0L;
432 }
433
434 // ------------------------------------------------------------------------
435
Execute()436 short TakeProgress::Execute()
437 {
438 DBG_ERROR( "TakeProgress cannot be executed via Dialog::Execute!\n"
439 "It creates a thread that will call back to VCL apartment => deadlock!\n"
440 "Use Dialog::StartExecuteModal to execute the dialog!" );
441 return RET_CANCEL;
442 }
443
444 // ------------------------------------------------------------------------
445
StartExecuteModal(const Link & rEndDialogHdl)446 void TakeProgress::StartExecuteModal( const Link& rEndDialogHdl )
447 {
448 maTakeThread.create();
449 ModalDialog::StartExecuteModal( rEndDialogHdl );
450 }
451
452 // ---------------------
453 // - ActualizeProgress -
454 // ---------------------
455
ActualizeProgress(Window * pWindow,GalleryTheme * pThm)456 ActualizeProgress::ActualizeProgress( Window* pWindow, GalleryTheme* pThm ) :
457 ModalDialog ( pWindow, CUI_RES( RID_SVXDLG_GALLERY_ACTUALIZE_PROGRESS ) ),
458 aFtActualizeFile ( this, CUI_RES( FT_ACTUALIZE_FILE ) ),
459 aFLActualizeProgress ( this, CUI_RES( FL_ACTUALIZE_PROGRESS ) ),
460 aBtnCancel ( this, CUI_RES( BTN_CANCEL ) ),
461 pTheme ( pThm )
462 {
463 FreeResource();
464 aBtnCancel.SetClickHdl( LINK( this, ActualizeProgress, ClickCancelBtn ) );
465 }
466
467 // ------------------------------------------------------------------------
468
Execute()469 short ActualizeProgress::Execute()
470 {
471 short nRet;
472
473 pTimer = new Timer;
474
475 if ( pTimer )
476 {
477 pTimer->SetTimeoutHdl( LINK( this, ActualizeProgress, TimeoutHdl ) );
478 pTimer->SetTimeout( 500 );
479 pTimer->Start();
480 }
481
482 nRet = ModalDialog::Execute();
483
484 return nRet;
485 }
486
487 // ------------------------------------------------------------------------
488
IMPL_LINK(ActualizeProgress,ClickCancelBtn,void *,EMPTYARG)489 IMPL_LINK( ActualizeProgress, ClickCancelBtn, void*, EMPTYARG )
490 {
491 pTheme->AbortActualize();
492 EndDialog( RET_OK );
493
494 return 0L;
495 }
496
497 // ------------------------------------------------------------------------
498
IMPL_LINK(ActualizeProgress,TimeoutHdl,Timer *,_pTimer)499 IMPL_LINK( ActualizeProgress, TimeoutHdl, Timer*, _pTimer )
500 {
501 if ( _pTimer )
502 {
503 _pTimer->Stop();
504 delete _pTimer;
505 }
506
507 pTheme->Actualize( LINK( this, ActualizeProgress, ActualizeHdl ), &aStatusProgress );
508 ClickCancelBtn( NULL );
509
510 return 0;
511 }
512
513 // ------------------------------------------------------------------------
514
IMPL_LINK(ActualizeProgress,ActualizeHdl,INetURLObject *,pURL)515 IMPL_LINK( ActualizeProgress, ActualizeHdl, INetURLObject*, pURL )
516 {
517 for( long i = 0; i < 128; i++ )
518 Application::Reschedule();
519
520 Flush();
521 Sync();
522
523 if( pURL )
524 {
525 aFtActualizeFile.SetText( GetReducedString( *pURL, 30 ) );
526 aFtActualizeFile.Flush();
527 aFtActualizeFile.Sync();
528 }
529
530 return 0;
531 }
532
533 // ---------------
534 // - TitleDialog -
535 // ---------------
536
TitleDialog(Window * pParent,const String & rOldTitle)537 TitleDialog::TitleDialog( Window* pParent, const String& rOldTitle ) :
538 ModalDialog ( pParent, CUI_RES( RID_SVXDLG_GALLERY_TITLE ) ),
539 maOk ( this, CUI_RES( BTN_OK ) ),
540 maCancel ( this, CUI_RES( BTN_CANCEL ) ),
541 maHelp ( this, CUI_RES( BTN_HELP ) ),
542 maFL ( this, CUI_RES( FL_TITLE ) ),
543 maEdit ( this, CUI_RES( EDT_TITLE ) )
544 {
545 FreeResource();
546 maEdit.SetText( rOldTitle );
547 maEdit.GrabFocus();
548 }
549
550 // -------------------
551 // - GalleryIdDialog -
552 // -------------------
553
GalleryIdDialog(Window * pParent,GalleryTheme * _pThm)554 GalleryIdDialog::GalleryIdDialog( Window* pParent, GalleryTheme* _pThm ) :
555 ModalDialog ( pParent, CUI_RES( RID_SVXDLG_GALLERY_THEMEID ) ),
556 aBtnOk ( this, CUI_RES( BTN_OK ) ),
557 aBtnCancel ( this, CUI_RES( BTN_CANCEL ) ),
558 aFLId ( this, CUI_RES( FL_ID ) ),
559 aLbResName ( this, CUI_RES( LB_RESNAME ) ),
560 pThm ( _pThm )
561 {
562 FreeResource();
563
564 aLbResName.InsertEntry( String( RTL_CONSTASCII_USTRINGPARAM( "!!! No Id !!!" ) ) );
565
566 GalleryTheme::InsertAllThemes( aLbResName );
567
568 aLbResName.SelectEntryPos( (sal_uInt16) pThm->GetId() );
569 aLbResName.GrabFocus();
570
571 aBtnOk.SetClickHdl( LINK( this, GalleryIdDialog, ClickOkHdl ) );
572 }
573
574 // -----------------------------------------------------------------------------
575
IMPL_LINK(GalleryIdDialog,ClickOkHdl,void *,EMPTYARG)576 IMPL_LINK( GalleryIdDialog, ClickOkHdl, void*, EMPTYARG )
577 {
578 Gallery* pGal = pThm->GetParent();
579 const sal_uLong nId = GetId();
580 sal_Bool bDifferentThemeExists = sal_False;
581
582 for( sal_uLong i = 0, nCount = pGal->GetThemeCount(); i < nCount && !bDifferentThemeExists; i++ )
583 {
584 const GalleryThemeEntry* pInfo = pGal->GetThemeInfo( i );
585
586 if( ( pInfo->GetId() == nId ) && ( pInfo->GetThemeName() != pThm->GetName() ) )
587 {
588 String aStr( CUI_RES( RID_SVXSTR_GALLERY_ID_EXISTS ) );
589
590 aStr += String( RTL_CONSTASCII_USTRINGPARAM( " (" ) );
591 aStr += pInfo->GetThemeName();
592 aStr += ')';
593
594 InfoBox aBox( this, aStr );
595 aBox.Execute();
596 aLbResName.GrabFocus();
597 bDifferentThemeExists = sal_True;
598 }
599 }
600
601 if( !bDifferentThemeExists )
602 EndDialog( RET_OK );
603
604 return 0L;
605 }
606
607
608 // --------------------------
609 // - GalleryThemeProperties -
610 // --------------------------
611
GalleryThemeProperties(Window * pParent,ExchangeData * _pData,SfxItemSet * pItemSet)612 GalleryThemeProperties::GalleryThemeProperties( Window* pParent, ExchangeData* _pData, SfxItemSet* pItemSet ) :
613 SfxTabDialog ( pParent, CUI_RES( RID_SVXTABDLG_GALLERYTHEME ), pItemSet ),
614 pData ( _pData )
615 {
616 FreeResource();
617
618 AddTabPage( RID_SVXTABPAGE_GALLERY_GENERAL, TPGalleryThemeGeneral::Create, 0 );
619 AddTabPage( RID_SVXTABPAGE_GALLERYTHEME_FILES, TPGalleryThemeProperties::Create, 0 );
620
621 if( pData->pTheme->IsReadOnly() )
622 RemoveTabPage( RID_SVXTABPAGE_GALLERYTHEME_FILES );
623
624 String aText( GetText() );
625
626 aText += pData->pTheme->GetName();
627
628 if( pData->pTheme->IsReadOnly() )
629 aText += String( CUI_RES( RID_SVXSTR_GALLERY_READONLY ) );
630
631 SetText( aText );
632 }
633
634 // ------------------------------------------------------------------------
635
PageCreated(sal_uInt16 nId,SfxTabPage & rPage)636 void GalleryThemeProperties::PageCreated( sal_uInt16 nId, SfxTabPage &rPage )
637 {
638 if( RID_SVXTABPAGE_GALLERY_GENERAL == nId )
639 ( (TPGalleryThemeGeneral&) rPage ).SetXChgData( pData );
640 else
641 ( (TPGalleryThemeProperties&) rPage ).SetXChgData( pData );
642 }
643
644 // -------------------------
645 // - TPGalleryThemeGeneral -
646 // -------------------------
647
TPGalleryThemeGeneral(Window * pParent,const SfxItemSet & rSet)648 TPGalleryThemeGeneral::TPGalleryThemeGeneral( Window* pParent, const SfxItemSet& rSet ) :
649 SfxTabPage ( pParent, CUI_RES( RID_SVXTABPAGE_GALLERY_GENERAL ), rSet ),
650 aFiMSImage ( this, CUI_RES( FI_MS_IMAGE ) ),
651 aEdtMSName ( this, CUI_RES( EDT_MS_NAME ) ),
652 aFlMSGeneralFirst ( this, CUI_RES( FL_MS_GENERAL_FIRST ) ),
653 aFtMSType ( this, CUI_RES( FT_MS_TYPE ) ),
654 aFtMSShowType ( this, CUI_RES( FT_MS_SHOW_TYPE ) ),
655 aFtMSPath ( this, CUI_RES( FT_MS_PATH ) ),
656 aFtMSShowPath ( this, CUI_RES( FT_MS_SHOW_PATH ) ),
657 aFtMSContent ( this, CUI_RES( FT_MS_CONTENT ) ),
658 aFtMSShowContent ( this, CUI_RES( FT_MS_SHOW_CONTENT ) ),
659 aFlMSGeneralSecond ( this, CUI_RES( FL_MS_GENERAL_SECOND ) ),
660 aFtMSChangeDate ( this, CUI_RES( FT_MS_CHANGEDATE ) ),
661 aFtMSShowChangeDate ( this, CUI_RES( FT_MS_SHOW_CHANGEDATE ) )
662 {
663 FreeResource();
664
665 String aAccName(SVX_RES(RID_SVXSTR_GALLERY_THEMENAME));
666 aEdtMSName.SetAccessibleName(aAccName);
667 aFiMSImage.SetAccessibleName(aAccName);
668 aEdtMSName.SetAccessibleRelationLabeledBy( &aFiMSImage );
669 }
670
671 // ------------------------------------------------------------------------
672
SetXChgData(ExchangeData * _pData)673 void TPGalleryThemeGeneral::SetXChgData( ExchangeData* _pData )
674 {
675 pData = _pData;
676
677 GalleryTheme* pThm = pData->pTheme;
678 String aOutStr( String::CreateFromInt32( pThm->GetObjectCount() ) );
679 String aObjStr( CUI_RES( RID_SVXSTR_GALLERYPROPS_OBJECT ) );
680 String aAccess;
681 String aType( SVX_RES( RID_SVXSTR_GALLERYPROPS_GALTHEME ) );
682 sal_Bool bReadOnly = pThm->IsReadOnly() && !pThm->IsImported();
683
684 aEdtMSName.SetHelpId( HID_GALLERY_EDIT_MSNAME );
685 aEdtMSName.SetText( pThm->GetName() );
686 aEdtMSName.SetReadOnly( bReadOnly );
687
688 if( bReadOnly )
689 aEdtMSName.Disable();
690 else
691 aEdtMSName.Enable();
692
693 if( pThm->IsReadOnly() )
694 aType += String( CUI_RES( RID_SVXSTR_GALLERY_READONLY ) );
695
696 aFtMSShowType.SetText( aType );
697 aFtMSShowPath.SetText( pThm->GetSdgURL().GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) );
698
699 // Ein- oder Mehrzahl?
700 if ( 1 == pThm->GetObjectCount() )
701 aObjStr = aObjStr.GetToken( 0 );
702 else
703 aObjStr = aObjStr.GetToken( 1 );
704
705 aOutStr += ' ';
706 aOutStr += aObjStr;
707
708 aFtMSShowContent.SetText( aOutStr );
709
710 // get locale wrapper (singleton)
711 const LocaleDataWrapper& aLocaleData = SvtSysLocale().GetLocaleData();
712
713 // ChangeDate/Time
714 aAccess = aLocaleData.getDate( pData->aThemeChangeDate );
715 aAccess += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
716 aAccess += aLocaleData.getTime( pData->aThemeChangeTime );
717 aFtMSShowChangeDate.SetText( aAccess );
718
719 // Image setzen
720 sal_uInt16 nId;
721
722 if( pThm->IsImported() )
723 nId = RID_SVXBMP_THEME_IMPORTED_BIG;
724 else if( pThm->IsReadOnly() )
725 nId = RID_SVXBMP_THEME_READONLY_BIG;
726 else if( pThm->IsDefault() )
727 nId = RID_SVXBMP_THEME_DEFAULT_BIG;
728 else
729 nId = RID_SVXBMP_THEME_NORMAL_BIG;
730
731 aFiMSImage.SetImage( Image( Bitmap( CUI_RES( nId ) ), COL_LIGHTMAGENTA ) );
732 }
733
734 // ------------------------------------------------------------------------
735
FillItemSet(SfxItemSet &)736 sal_Bool TPGalleryThemeGeneral::FillItemSet( SfxItemSet& /*rSet*/ )
737 {
738 pData->aEditedTitle = aEdtMSName.GetText();
739 return sal_True;
740 }
741
742 // ------------------------------------------------------------------------
743
Create(Window * pParent,const SfxItemSet & rSet)744 SfxTabPage* TPGalleryThemeGeneral::Create( Window* pParent, const SfxItemSet& rSet )
745 {
746 return new TPGalleryThemeGeneral( pParent, rSet );
747 }
748
749 // ----------------------------
750 // - TPGalleryThemeProperties -
751 // ----------------------------
752
TPGalleryThemeProperties(Window * pWindow,const SfxItemSet & rSet)753 TPGalleryThemeProperties::TPGalleryThemeProperties( Window* pWindow, const SfxItemSet& rSet ) :
754 SfxTabPage ( pWindow, CUI_RES( RID_SVXTABPAGE_GALLERYTHEME_FILES ), rSet ),
755 aFtFileType ( this, CUI_RES(FT_FILETYPE ) ),
756 aCbbFileType ( this, CUI_RES(CBB_FILETYPE ) ),
757 aLbxFound ( this, CUI_RES(LBX_FOUND ) ),
758 aBtnSearch ( this, CUI_RES(BTN_SEARCH ) ),
759 aBtnTake ( this, CUI_RES(BTN_TAKE ) ),
760 aBtnTakeAll ( this, CUI_RES(BTN_TAKEALL ) ),
761 aCbxPreview ( this, CUI_RES(CBX_PREVIEW ) ),
762 aWndPreview ( this, CUI_RES( WND_BRSPRV ) ),
763 nCurFilterPos (0),
764 nFirstExtFilterPos (0),
765 bEntriesFound (sal_False),
766 bInputAllowed (sal_True),
767 bSearchRecursive (sal_False),
768 xDialogListener ( new ::svt::DialogClosedListener() )
769 {
770 FreeResource();
771
772 xDialogListener->SetDialogClosedLink( LINK( this, TPGalleryThemeProperties, DialogClosedHdl ) );
773 aLbxFound.SetAccessibleName(String(SVX_RES(RID_SVXSTR_GALLERY_FILESFOUND)));
774 aWndPreview.SetAccessibleName(aCbxPreview.GetText());
775 aLbxFound.SetAccessibleRelationLabeledBy(&aLbxFound);
776 }
777
778 // ------------------------------------------------------------------------
779
SetXChgData(ExchangeData * _pData)780 void TPGalleryThemeProperties::SetXChgData( ExchangeData* _pData )
781 {
782 pData = _pData;
783
784 aPreviewTimer.SetTimeoutHdl( LINK( this, TPGalleryThemeProperties, PreviewTimerHdl ) );
785 aPreviewTimer.SetTimeout( 500 );
786 aBtnSearch.SetClickHdl(LINK(this, TPGalleryThemeProperties, ClickSearchHdl));
787 aBtnTake.SetClickHdl(LINK(this, TPGalleryThemeProperties, ClickTakeHdl));
788 aBtnTakeAll.SetClickHdl(LINK(this, TPGalleryThemeProperties, ClickTakeAllHdl));
789 aCbxPreview.SetClickHdl(LINK(this, TPGalleryThemeProperties, ClickPreviewHdl));
790 aCbbFileType.SetSelectHdl(LINK(this, TPGalleryThemeProperties, SelectFileTypeHdl));
791 aCbbFileType.EnableDDAutoWidth( sal_False );
792 aLbxFound.SetDoubleClickHdl(LINK(this, TPGalleryThemeProperties, DClickFoundHdl));
793 aLbxFound.SetSelectHdl(LINK(this, TPGalleryThemeProperties, SelectFoundHdl));
794 aLbxFound.InsertEntry(String(CUI_RES(RID_SVXSTR_GALLERY_NOFILES)));
795 aLbxFound.Show();
796
797 FillFilterList();
798
799 aBtnTake.Enable();
800 aBtnTakeAll.Disable();
801 aCbxPreview.Disable();
802 }
803
804 // ------------------------------------------------------------------------
805
StartSearchFiles(const String & _rFolderURL,short _nDlgResult)806 void TPGalleryThemeProperties::StartSearchFiles( const String& _rFolderURL, short _nDlgResult )
807 {
808 if ( RET_OK == _nDlgResult )
809 {
810 aURL = INetURLObject( _rFolderURL );
811 bSearchRecursive = sal_True; // UI choice no longer possible, windows file picker allows no user controls
812 SearchFiles();
813 }
814
815 nCurFilterPos = aCbbFileType.GetEntryPos( aCbbFileType.GetText() );
816 }
817
818 // ------------------------------------------------------------------------
819
~TPGalleryThemeProperties()820 TPGalleryThemeProperties::~TPGalleryThemeProperties()
821 {
822 xMediaPlayer.clear();
823 xDialogListener.clear();
824
825 for( String* pStr = aFoundList.First(); pStr; pStr = aFoundList.Next() )
826 delete pStr;
827
828 for( void* pEntry = aFilterEntryList.First(); pEntry; pEntry = aFilterEntryList.Next() )
829 delete (FilterEntry*) pEntry;
830 }
831
832 // ------------------------------------------------------------------------
833
Create(Window * pParent,const SfxItemSet & rSet)834 SfxTabPage* TPGalleryThemeProperties::Create( Window* pParent, const SfxItemSet& rSet )
835 {
836 return new TPGalleryThemeProperties( pParent, rSet );
837 }
838
839 // ------------------------------------------------------------------------
840
addExtension(const::rtl::OUString & _rDisplayText,const::rtl::OUString & _rExtension)841 ::rtl::OUString TPGalleryThemeProperties::addExtension( const ::rtl::OUString& _rDisplayText, const ::rtl::OUString& _rExtension )
842 {
843 ::rtl::OUString sAllFilter( RTL_CONSTASCII_USTRINGPARAM( "(*.*)" ) );
844 ::rtl::OUString sOpenBracket( RTL_CONSTASCII_USTRINGPARAM( " (" ) );
845 ::rtl::OUString sCloseBracket( RTL_CONSTASCII_USTRINGPARAM( ")" ) );
846 ::rtl::OUString sRet = _rDisplayText;
847
848 if ( sRet.indexOf( sAllFilter ) == -1 )
849 {
850 String sExt = _rExtension;
851 sRet += sOpenBracket;
852 sRet += sExt;
853 sRet += sCloseBracket;
854 }
855 return sRet;
856 }
857
858 // ------------------------------------------------------------------------
859
FillFilterList()860 void TPGalleryThemeProperties::FillFilterList()
861 {
862 GraphicFilter* pFilter = GraphicFilter::GetGraphicFilter();
863 String aExt;
864 String aName;
865 FilterEntry* pFilterEntry;
866 FilterEntry* pTestEntry;
867 sal_uInt16 i, nKeyCount;
868 sal_Bool bInList;
869
870 // graphic filters
871 for( i = 0, nKeyCount = pFilter->GetImportFormatCount(); i < nKeyCount; i++ )
872 {
873 aExt = pFilter->GetImportFormatShortName( i );
874 aName = pFilter->GetImportFormatName( i );
875 pTestEntry = (FilterEntry*) aFilterEntryList.First();
876 bInList = sal_False;
877
878 String aExtensions;
879 int j = 0;
880 String sWildcard;
881 while( sal_True )
882 {
883 sWildcard = pFilter->GetImportWildcard( i, j++ );
884 if ( !sWildcard.Len() )
885 break;
886 if ( aExtensions.Search( sWildcard ) == STRING_NOTFOUND )
887 {
888 if ( aExtensions.Len() )
889 aExtensions += sal_Unicode(';');
890 aExtensions += sWildcard;
891 }
892 }
893 aName = addExtension( aName, aExtensions );
894
895 while( pTestEntry )
896 {
897 if ( pTestEntry->aFilterName == aExt )
898 {
899 bInList = sal_True;
900 break;
901 }
902 pTestEntry = (FilterEntry*) aFilterEntryList.Next();
903 }
904 if ( !bInList )
905 {
906 pFilterEntry = new FilterEntry;
907 pFilterEntry->aFilterName = aExt;
908 aFilterEntryList.Insert( pFilterEntry, aCbbFileType.InsertEntry( aName ) );
909 }
910 }
911
912 // media filters
913 static const ::rtl::OUString aWildcard( RTL_CONSTASCII_USTRINGPARAM( "*." ) );
914 ::avmedia::FilterNameVector aFilters;
915 const ::rtl::OUString aSeparator( RTL_CONSTASCII_USTRINGPARAM( ";" ) );
916 ::rtl::OUString aAllTypes;
917
918 ::avmedia::MediaWindow::getMediaFilters( aFilters );
919
920 for( unsigned long l = 0; l < aFilters.size(); ++l )
921 {
922 for( sal_Int32 nIndex = 0; nIndex >= 0; )
923 {
924 ::rtl::OUString aFilterWildcard( aWildcard );
925
926 pFilterEntry = new FilterEntry;
927 pFilterEntry->aFilterName = aFilters[ l ].second.getToken( 0, ';', nIndex );
928 nFirstExtFilterPos = aCbbFileType.InsertEntry( addExtension( aFilters[ l ].first,
929 aFilterWildcard += pFilterEntry->aFilterName ) );
930 aFilterEntryList.Insert( pFilterEntry, nFirstExtFilterPos );
931 }
932 }
933
934 // 'All' filters
935 String aExtensions;
936
937 // graphic filters
938 for ( i = 0; i < nKeyCount; ++i )
939 {
940 int j = 0;
941 String sWildcard;
942 while( sal_True )
943 {
944 sWildcard = pFilter->GetImportWildcard( i, j++ );
945 if ( !sWildcard.Len() )
946 break;
947 if ( aExtensions.Search( sWildcard ) == STRING_NOTFOUND )
948 {
949 if ( aExtensions.Len() )
950 aExtensions += sal_Unicode( ';' );
951
952 aExtensions += sWildcard;
953 }
954 }
955 }
956
957 // media filters
958 for( unsigned long k = 0; k < aFilters.size(); ++k )
959 {
960 for( sal_Int32 nIndex = 0; nIndex >= 0; )
961 {
962 if ( aExtensions.Len() )
963 aExtensions += sal_Unicode( ';' );
964 ( aExtensions += String( aWildcard ) ) += String( aFilters[ k ].second.getToken( 0, ';', nIndex ) );
965 }
966 }
967
968 #if defined(WNT)
969 if ( aExtensions.Len() > 240 )
970 aExtensions = DEFINE_CONST_UNICODE( "*.*" );
971 #endif
972
973 pFilterEntry = new FilterEntry;
974 pFilterEntry->aFilterName = String( CUI_RES( RID_SVXSTR_GALLERY_ALLFILES ) );
975 pFilterEntry->aFilterName = addExtension( pFilterEntry->aFilterName, aExtensions );
976 aFilterEntryList.Insert(pFilterEntry, aCbbFileType. InsertEntry( pFilterEntry->aFilterName, 0 ) );
977
978 aCbbFileType.SetText( pFilterEntry->aFilterName );
979 }
980
981 // ------------------------------------------------------------------------
982
IMPL_LINK(TPGalleryThemeProperties,SelectFileTypeHdl,void *,EMPTYARG)983 IMPL_LINK( TPGalleryThemeProperties, SelectFileTypeHdl, void *, EMPTYARG )
984 {
985 String aText( aCbbFileType.GetText() );
986
987 if( bInputAllowed && ( aLastFilterName != aText ) )
988 {
989 aLastFilterName = aText;
990
991 if( QueryBox( this, WB_YES_NO, String( CUI_RES( RID_SVXSTR_GALLERY_SEARCH ) ) ).Execute() == RET_YES )
992 SearchFiles();
993 }
994
995 return 0L;
996 }
997
998 // ------------------------------------------------------------------------
999
SearchFiles()1000 void TPGalleryThemeProperties::SearchFiles()
1001 {
1002 SearchProgress* pProgress = new SearchProgress( this, aURL );
1003
1004 for( String* pStr = aFoundList.First(); pStr; pStr = aFoundList.Next() )
1005 delete pStr;
1006
1007 aFoundList.Clear();
1008 aLbxFound.Clear();
1009
1010 pProgress->SetFileType( aCbbFileType.GetText() );
1011 pProgress->SetDirectory( rtl::OUString() );
1012 pProgress->Update();
1013
1014 pProgress->StartExecuteModal( LINK( this, TPGalleryThemeProperties, EndSearchProgressHdl ) );
1015 }
1016
1017 // ------------------------------------------------------------------------
1018
IMPL_LINK(TPGalleryThemeProperties,ClickCloseBrowserHdl,void *,EMPTYARG)1019 IMPL_LINK( TPGalleryThemeProperties, ClickCloseBrowserHdl, void *, EMPTYARG )
1020 {
1021 if( bInputAllowed )
1022 aPreviewTimer.Stop();
1023
1024 return 0L;
1025 }
1026
1027 // ------------------------------------------------------------------------
1028
IMPL_LINK(TPGalleryThemeProperties,ClickSearchHdl,void *,EMPTYARG)1029 IMPL_LINK( TPGalleryThemeProperties, ClickSearchHdl, void *, EMPTYARG )
1030 {
1031 if( bInputAllowed )
1032 {
1033 try
1034 {
1035 // setup folder picker
1036 ::com::sun::star::uno::Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() );
1037 if( xMgr.is() )
1038 {
1039 xFolderPicker = ::com::sun::star::uno::Reference< XFolderPicker >(
1040 xMgr->createInstance( OUString::createFromAscii( "com.sun.star.ui.dialogs.FolderPicker" )), UNO_QUERY );
1041
1042 if ( xFolderPicker.is() )
1043 {
1044 String aDlgPathName( SvtPathOptions().GetGraphicPath() );
1045 xFolderPicker->setDisplayDirectory(aDlgPathName);
1046
1047 aPreviewTimer.Stop();
1048
1049 ::com::sun::star::uno::Reference< XAsynchronousExecutableDialog > xAsyncDlg( xFolderPicker, UNO_QUERY );
1050 if ( xAsyncDlg.is() )
1051 xAsyncDlg->startExecuteModal( xDialogListener.get() );
1052 else
1053 {
1054 if( xFolderPicker->execute() == RET_OK )
1055 {
1056 aURL = INetURLObject( xFolderPicker->getDirectory() );
1057 bSearchRecursive = sal_True; // UI choice no longer possible, windows file picker allows no user controls
1058 SearchFiles();
1059 }
1060
1061 nCurFilterPos = aCbbFileType.GetEntryPos( aCbbFileType.GetText() );
1062 }
1063 }
1064 }
1065 }
1066 catch(IllegalArgumentException)
1067 {
1068 #ifdef DBG_UTIL
1069 DBG_ERROR( "Folder picker failed with illegal arguments" );
1070 #endif
1071 }
1072 }
1073
1074 return 0L;
1075 }
1076
1077 // ------------------------------------------------------------------------
1078
TakeFiles()1079 void TPGalleryThemeProperties::TakeFiles()
1080 {
1081 if( aLbxFound.GetSelectEntryCount() || ( bTakeAll && bEntriesFound ) )
1082 {
1083 TakeProgress* pTakeProgress = new TakeProgress( this );
1084 pTakeProgress->Update();
1085
1086 pTakeProgress->StartExecuteModal(
1087 Link() /* no postprocessing needed, pTakeProgress
1088 will be deleted in TakeProgress::CleanupHdl */ );
1089 }
1090 }
1091
1092 // ------------------------------------------------------------------------
1093
IMPL_LINK(TPGalleryThemeProperties,ClickPreviewHdl,void *,EMPTYARG)1094 IMPL_LINK( TPGalleryThemeProperties, ClickPreviewHdl, void *, EMPTYARG )
1095 {
1096 if ( bInputAllowed )
1097 {
1098 aPreviewTimer.Stop();
1099 aPreviewString.Erase();
1100
1101 if( !aCbxPreview.IsChecked() )
1102 {
1103 xMediaPlayer.clear();
1104 aWndPreview.SetGraphic( Graphic() );
1105 aWndPreview.Invalidate();
1106 }
1107 else
1108 DoPreview();
1109 }
1110
1111 return 0;
1112 }
1113
1114 // ------------------------------------------------------------------------
1115
DoPreview()1116 void TPGalleryThemeProperties::DoPreview()
1117 {
1118 String aString( aLbxFound.GetSelectEntry() );
1119
1120 if( aString != aPreviewString )
1121 {
1122 INetURLObject _aURL( *aFoundList.GetObject( aLbxFound.GetEntryPos( aString ) ) );
1123 bInputAllowed = sal_False;
1124
1125 if ( !aWndPreview.SetGraphic( _aURL ) )
1126 {
1127 GetParent()->LeaveWait();
1128 ErrorHandler::HandleError( ERRCODE_IO_NOTEXISTSPATH );
1129 GetParent()->EnterWait();
1130 }
1131 else if( ::avmedia::MediaWindow::isMediaURL( _aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) ) )
1132 {
1133 xMediaPlayer = ::avmedia::MediaWindow::createPlayer( _aURL.GetMainURL( INetURLObject::NO_DECODE ) );
1134 if( xMediaPlayer.is() )
1135 xMediaPlayer->start();
1136 }
1137
1138 bInputAllowed = sal_True;
1139 aPreviewString = aString;
1140 }
1141 }
1142
1143 // ------------------------------------------------------------------------
1144
IMPL_LINK(TPGalleryThemeProperties,ClickTakeHdl,void *,EMPTYARG)1145 IMPL_LINK( TPGalleryThemeProperties, ClickTakeHdl, void*, EMPTYARG )
1146 {
1147 if( bInputAllowed )
1148 {
1149 aPreviewTimer.Stop();
1150
1151 if( !aLbxFound.GetSelectEntryCount() || !bEntriesFound )
1152 {
1153 SvxOpenGraphicDialog aDlg(String( RTL_CONSTASCII_USTRINGPARAM( "Gallery" ) ) );
1154 aDlg.EnableLink(sal_False);
1155 aDlg.AsLink(sal_False);
1156
1157 if( !aDlg.Execute() )
1158 pData->pTheme->InsertURL( INetURLObject( aDlg.GetPath() ) );
1159 }
1160 else
1161 {
1162 bTakeAll = sal_False;
1163 TakeFiles();
1164 }
1165 }
1166
1167 return 0L;
1168 }
1169
1170 // ------------------------------------------------------------------------
1171
IMPL_LINK(TPGalleryThemeProperties,ClickTakeAllHdl,void *,EMPTYARG)1172 IMPL_LINK( TPGalleryThemeProperties, ClickTakeAllHdl, void *, EMPTYARG )
1173 {
1174 if( bInputAllowed )
1175 {
1176 aPreviewTimer.Stop();
1177 bTakeAll = sal_True;
1178 TakeFiles();
1179 }
1180
1181 return 0L;
1182 }
1183
1184 // ------------------------------------------------------------------------
1185
IMPL_LINK(TPGalleryThemeProperties,SelectFoundHdl,void *,EMPTYARG)1186 IMPL_LINK( TPGalleryThemeProperties, SelectFoundHdl, void *, EMPTYARG )
1187 {
1188 if( bInputAllowed )
1189 {
1190 sal_Bool bPreviewPossible = sal_False;
1191
1192 aPreviewTimer.Stop();
1193
1194 if( bEntriesFound )
1195 {
1196 if( aLbxFound.GetSelectEntryCount() == 1 )
1197 {
1198 aCbxPreview.Enable();
1199 bPreviewPossible = sal_True;
1200 }
1201 else
1202 aCbxPreview.Disable();
1203
1204 if( aFoundList.Count() )
1205 aBtnTakeAll.Enable();
1206 else
1207 aBtnTakeAll.Disable();
1208 }
1209
1210 if( bPreviewPossible && aCbxPreview.IsChecked() )
1211 aPreviewTimer.Start();
1212 }
1213
1214 return 0;
1215 }
1216
1217 // ------------------------------------------------------------------------
1218
IMPL_LINK(TPGalleryThemeProperties,DClickFoundHdl,void *,EMPTYARG)1219 IMPL_LINK( TPGalleryThemeProperties, DClickFoundHdl, void *, EMPTYARG )
1220 {
1221 if( bInputAllowed )
1222 {
1223 aPreviewTimer.Stop();
1224
1225 return (aLbxFound.GetSelectEntryCount() == 1 && bEntriesFound) ?
1226 ClickTakeHdl(NULL) : 0;
1227 }
1228 else
1229 return 0;
1230 }
1231
1232 // ------------------------------------------------------------------------
1233
IMPL_LINK(TPGalleryThemeProperties,PreviewTimerHdl,void *,EMPTYARG)1234 IMPL_LINK( TPGalleryThemeProperties, PreviewTimerHdl, void *, EMPTYARG )
1235 {
1236 aPreviewTimer.Stop();
1237 DoPreview();
1238 return 0L;
1239 }
1240
1241 // ------------------------------------------------------------------------
1242
IMPL_LINK(TPGalleryThemeProperties,EndSearchProgressHdl,SearchProgress *,EMPTYARG)1243 IMPL_LINK( TPGalleryThemeProperties, EndSearchProgressHdl, SearchProgress *, EMPTYARG )
1244 {
1245 if( aFoundList.Count() )
1246 {
1247 aLbxFound.SelectEntryPos( 0 );
1248 aBtnTakeAll.Enable();
1249 aCbxPreview.Enable();
1250 bEntriesFound = sal_True;
1251 }
1252 else
1253 {
1254 aLbxFound.InsertEntry( String( CUI_RES( RID_SVXSTR_GALLERY_NOFILES ) ) );
1255 aBtnTakeAll.Disable();
1256 aCbxPreview.Disable();
1257 bEntriesFound = sal_False;
1258 }
1259 return 0L;
1260 }
1261
1262 // ------------------------------------------------------------------------
1263
IMPL_LINK(TPGalleryThemeProperties,DialogClosedHdl,::com::sun::star::ui::dialogs::DialogClosedEvent *,pEvt)1264 IMPL_LINK( TPGalleryThemeProperties, DialogClosedHdl, ::com::sun::star::ui::dialogs::DialogClosedEvent*, pEvt )
1265 {
1266 DBG_ASSERT( xFolderPicker.is() == sal_True, "TPGalleryThemeProperties::DialogClosedHdl(): no folder picker" );
1267
1268 String sURL = String( xFolderPicker->getDirectory() );
1269 StartSearchFiles( sURL, pEvt->DialogResult );
1270
1271 return 0L;
1272 }
1273
1274