LCOV - code coverage report
Current view: top level - cui/source/dialogs - cuigaldlg.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 632 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 95 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.11