LCOV - code coverage report
Current view: top level - svx/source/gallery2 - galtheme.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 771 0.0 %
Date: 2014-04-14 Functions: 0 52 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             : 
      24             : #include <comphelper/processfactory.hxx>
      25             : #include <tools/urlobj.hxx>
      26             : #include <tools/vcompat.hxx>
      27             : #include <unotools/streamwrap.hxx>
      28             : #include <unotools/ucbstreamhelper.hxx>
      29             : #include <unotools/tempfile.hxx>
      30             : #include <unotools/localfilehelper.hxx>
      31             : #include <ucbhelper/content.hxx>
      32             : #include <sot/storage.hxx>
      33             : #include <sot/formats.hxx>
      34             : #include <sot/filelist.hxx>
      35             : #include <vcl/virdev.hxx>
      36             : #include <vcl/cvtgrf.hxx>
      37             : #include <svl/itempool.hxx>
      38             : #include <sfx2/docfile.hxx>
      39             : #include <avmedia/mediawindow.hxx>
      40             : #include <svx/svdograf.hxx>
      41             : #include <svx/fmpage.hxx>
      42             : #include "codec.hxx"
      43             : #include <svx/unomodel.hxx>
      44             : #include <svx/fmmodel.hxx>
      45             : #include <svx/fmview.hxx>
      46             : #include "svx/galmisc.hxx"
      47             : #include "svx/galtheme.hxx"
      48             : #include <com/sun/star/sdbc/XResultSet.hpp>
      49             : #include <com/sun/star/ucb/XContentAccess.hpp>
      50             : #include <com/sun/star/io/XInputStream.hpp>
      51             : #include "galobj.hxx"
      52             : #include <svx/gallery1.hxx>
      53             : #include "galtheme.hrc"
      54             : #include <vcl/lstbox.hxx>
      55             : #include "gallerydrawmodel.hxx"
      56             : 
      57             : using namespace ::rtl;
      58             : using namespace ::com::sun::star;
      59             : 
      60             : // - SgaTheme -
      61             : 
      62             : 
      63           0 : GalleryTheme::GalleryTheme( Gallery* pGallery, GalleryThemeEntry* pThemeEntry )
      64             :     : m_bDestDirRelative(false)
      65             :     , pParent(pGallery)
      66             :     , pThm(pThemeEntry)
      67             :     , mnThemeLockCount(0)
      68             :     , mnBroadcasterLockCount(0)
      69             :     , nDragPos(0)
      70             :     , bDragging(false)
      71           0 :     , bAbortActualize(false)
      72             : {
      73           0 :     ImplCreateSvDrawStorage();
      74           0 : }
      75             : 
      76           0 : GalleryTheme::~GalleryTheme()
      77             : {
      78           0 :     ImplWrite();
      79             : 
      80           0 :     for ( size_t i = 0, n = aObjectList.size(); i < n; ++i )
      81             :     {
      82           0 :         GalleryObject* pEntry = aObjectList[ i ];
      83           0 :         Broadcast( GalleryHint( GALLERY_HINT_CLOSE_OBJECT, GetName(), reinterpret_cast< sal_uIntPtr >( pEntry ) ) );
      84           0 :         Broadcast( GalleryHint( GALLERY_HINT_OBJECT_REMOVED, GetName(), reinterpret_cast< sal_uIntPtr >( pEntry ) ) );
      85           0 :         delete pEntry;
      86             :     }
      87           0 :     aObjectList.clear();
      88             : 
      89           0 : }
      90             : 
      91           0 : void GalleryTheme::ImplCreateSvDrawStorage()
      92             : {
      93           0 :     aSvDrawStorageRef = new SvStorage( false, GetSdvURL().GetMainURL( INetURLObject::NO_DECODE ), pThm->IsReadOnly() ? STREAM_READ : STREAM_STD_READWRITE );
      94             :     // #i50423# ReadOnly may not been set though the file can't be written (because of security reasons)
      95           0 :     if ( ( aSvDrawStorageRef->GetError() != ERRCODE_NONE ) && !pThm->IsReadOnly() )
      96           0 :         aSvDrawStorageRef = new SvStorage( false, GetSdvURL().GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ );
      97           0 : }
      98             : 
      99           0 : bool GalleryTheme::ImplWriteSgaObject( const SgaObject& rObj, size_t nPos, GalleryObject* pExistentEntry )
     100             : {
     101           0 :     SvStream*   pOStm = ::utl::UcbStreamHelper::CreateStream( GetSdgURL().GetMainURL( INetURLObject::NO_DECODE ), STREAM_WRITE );
     102           0 :     bool        bRet = false;
     103             : 
     104           0 :     if( pOStm )
     105             :     {
     106           0 :         const sal_uInt32 nOffset = pOStm->Seek( STREAM_SEEK_TO_END );
     107             : 
     108           0 :         rObj.WriteData( *pOStm, m_aDestDir );
     109             : 
     110           0 :         if( !pOStm->GetError() )
     111             :         {
     112             :             GalleryObject* pEntry;
     113             : 
     114           0 :             if( !pExistentEntry )
     115             :             {
     116           0 :                 pEntry = new GalleryObject;
     117           0 :                 if ( nPos < aObjectList.size() )
     118             :                 {
     119           0 :                     GalleryObjectList::iterator it = aObjectList.begin();
     120           0 :                     ::std::advance( it, nPos );
     121           0 :                     aObjectList.insert( it, pEntry );
     122             :                 }
     123             :                 else
     124           0 :                     aObjectList.push_back( pEntry );
     125             :             }
     126             :             else
     127           0 :                 pEntry = pExistentEntry;
     128             : 
     129           0 :             pEntry->aURL = rObj.GetURL();
     130           0 :             pEntry->nOffset = nOffset;
     131           0 :             pEntry->eObjKind = rObj.GetObjKind();
     132           0 :             bRet = true;
     133             :         }
     134             : 
     135           0 :         delete pOStm;
     136             :     }
     137             : 
     138           0 :     return bRet;
     139             : }
     140             : 
     141           0 : SgaObject* GalleryTheme::ImplReadSgaObject( GalleryObject* pEntry )
     142             : {
     143           0 :     SgaObject* pSgaObj = NULL;
     144             : 
     145           0 :     if( pEntry )
     146             :     {
     147           0 :         SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( GetSdgURL().GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ );
     148             : 
     149           0 :         if( pIStm )
     150             :         {
     151             :             sal_uInt32 nInventor;
     152             : 
     153             :             // Check to ensure that the file is a valid SGA file
     154           0 :             pIStm->Seek( pEntry->nOffset );
     155           0 :             pIStm->ReadUInt32( nInventor );
     156             : 
     157           0 :             if( nInventor == COMPAT_FORMAT( 'S', 'G', 'A', '3' ) )
     158             :             {
     159           0 :                 pIStm->Seek( pEntry->nOffset );
     160             : 
     161           0 :                 switch( pEntry->eObjKind )
     162             :                 {
     163           0 :                     case( SGA_OBJ_BMP ):    pSgaObj = new SgaObjectBmp(); break;
     164           0 :                     case( SGA_OBJ_ANIM ):   pSgaObj = new SgaObjectAnim(); break;
     165           0 :                     case( SGA_OBJ_INET ):   pSgaObj = new SgaObjectINet(); break;
     166           0 :                     case( SGA_OBJ_SVDRAW ): pSgaObj = new SgaObjectSvDraw(); break;
     167           0 :                     case( SGA_OBJ_SOUND ):  pSgaObj = new SgaObjectSound(); break;
     168             : 
     169             :                     default:
     170           0 :                     break;
     171             :                 }
     172             : 
     173           0 :                 if( pSgaObj )
     174             :                 {
     175           0 :                     ReadSgaObject( *pIStm, *pSgaObj );
     176           0 :                     pSgaObj->ImplUpdateURL( pEntry->aURL );
     177             :                 }
     178             :             }
     179             : 
     180           0 :             delete pIStm;
     181             :         }
     182             :     }
     183             : 
     184           0 :     return pSgaObj;
     185             : }
     186             : 
     187           0 : void GalleryTheme::ImplWrite()
     188             : {
     189           0 :     if( IsModified() )
     190             :     {
     191           0 :         INetURLObject aPathURL( GetThmURL() );
     192             : 
     193           0 :         aPathURL.removeSegment();
     194           0 :         aPathURL.removeFinalSlash();
     195             : 
     196             :         DBG_ASSERT( aPathURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
     197             : 
     198           0 :         if( FileExists( aPathURL ) || CreateDir( aPathURL ) )
     199             :         {
     200             : #ifdef UNX
     201           0 :             SvStream* pOStm = ::utl::UcbStreamHelper::CreateStream( GetThmURL().GetMainURL( INetURLObject::NO_DECODE ), STREAM_WRITE | STREAM_COPY_ON_SYMLINK | STREAM_TRUNC );
     202             : #else
     203             :             SvStream* pOStm = ::utl::UcbStreamHelper::CreateStream( GetThmURL().GetMainURL( INetURLObject::NO_DECODE ), STREAM_WRITE | STREAM_TRUNC );
     204             : #endif
     205             : 
     206           0 :             if( pOStm )
     207             :             {
     208           0 :                 WriteGalleryTheme( *pOStm, *this );
     209           0 :                 delete pOStm;
     210             :             }
     211             : 
     212           0 :             ImplSetModified( false );
     213           0 :         }
     214             :     }
     215           0 : }
     216             : 
     217           0 : const GalleryObject* GalleryTheme::ImplGetGalleryObject( const INetURLObject& rURL )
     218             : {
     219           0 :     for ( size_t i = 0, n = aObjectList.size(); i < n; ++i )
     220           0 :         if ( aObjectList[ i ]->aURL == rURL )
     221           0 :             return aObjectList[ i ];
     222           0 :     return NULL;
     223             : }
     224             : 
     225           0 : INetURLObject GalleryTheme::ImplGetURL( const GalleryObject* pObject ) const
     226             : {
     227           0 :     INetURLObject aURL;
     228             : 
     229           0 :     if( pObject )
     230           0 :         aURL = pObject->aURL;
     231             : 
     232           0 :     return aURL;
     233             : }
     234             : 
     235           0 : INetURLObject GalleryTheme::ImplCreateUniqueURL( SgaObjKind eObjKind, sal_uIntPtr nFormat )
     236             : {
     237           0 :     INetURLObject   aDir( GetParent()->GetUserURL() );
     238           0 :     INetURLObject   aInfoFileURL( GetParent()->GetUserURL() );
     239           0 :     INetURLObject   aNewURL;
     240           0 :     sal_uInt32      nNextNumber = 1999;
     241           0 :     sal_Char const* pExt = NULL;
     242             :     sal_Bool            bExists;
     243             : 
     244           0 :     aDir.Append( OUString("dragdrop") );
     245           0 :     CreateDir( aDir );
     246             : 
     247           0 :     aInfoFileURL.Append( OUString("sdddndx1") );
     248             : 
     249             :     // read next possible number
     250           0 :     if( FileExists( aInfoFileURL ) )
     251             :     {
     252           0 :         SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( aInfoFileURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ );
     253             : 
     254           0 :         if( pIStm )
     255             :         {
     256           0 :             pIStm->ReadUInt32( nNextNumber );
     257           0 :             delete pIStm;
     258             :         }
     259             :     }
     260             : 
     261             :     // create extension
     262           0 :     if( nFormat )
     263             :     {
     264           0 :         switch( nFormat )
     265             :         {
     266           0 :             case( CVT_BMP ): pExt = ".bmp"; break;
     267           0 :             case( CVT_GIF ): pExt = ".gif"; break;
     268           0 :             case( CVT_JPG ): pExt = ".jpg"; break;
     269           0 :             case( CVT_MET ): pExt = ".met"; break;
     270           0 :             case( CVT_PCT ): pExt = ".pct"; break;
     271           0 :             case( CVT_PNG ): pExt = ".png"; break;
     272           0 :             case( CVT_SVM ): pExt = ".svm"; break;
     273           0 :             case( CVT_TIF ): pExt = ".tif"; break;
     274           0 :             case( CVT_WMF ): pExt = ".wmf"; break;
     275           0 :             case( CVT_EMF ): pExt = ".emf"; break;
     276             : 
     277             :             default:
     278           0 :                 pExt = ".grf";
     279           0 :             break;
     280             :         }
     281             :     }
     282             : 
     283           0 :     do
     284             :     {
     285             :         // get URL
     286           0 :         if( SGA_OBJ_SVDRAW == eObjKind )
     287             :         {
     288           0 :             OUString aFileName( "gallery/svdraw/dd" );
     289           0 :             aNewURL = INetURLObject( aFileName += OUString::number( ++nNextNumber % 99999999 ), INET_PROT_PRIV_SOFFICE );
     290             : 
     291           0 :             bExists = sal_False;
     292             : 
     293           0 :             for ( size_t i = 0, n = aObjectList.size(); i < n; ++i )
     294           0 :                 if ( aObjectList[ i ]->aURL == aNewURL )
     295             :                 {
     296           0 :                     bExists = sal_True;
     297           0 :                     break;
     298           0 :                 }
     299             :         }
     300             :         else
     301             :         {
     302           0 :             OUString aFileName( "dd" );
     303             : 
     304           0 :             aFileName += OUString::number( ++nNextNumber % 999999 );
     305             : 
     306           0 :             if (pExt)
     307           0 :                 aFileName += OUString( pExt, strlen(pExt), RTL_TEXTENCODING_ASCII_US );
     308             : 
     309           0 :             aNewURL = aDir;
     310           0 :             aNewURL.Append( aFileName );
     311             : 
     312           0 :             bExists = FileExists( aNewURL );
     313             :         }
     314             :     }
     315             :     while( bExists );
     316             : 
     317             :     // write updated number
     318           0 :     SvStream* pOStm = ::utl::UcbStreamHelper::CreateStream( aInfoFileURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_WRITE );
     319             : 
     320           0 :     if( pOStm )
     321             :     {
     322           0 :         pOStm->WriteUInt32( nNextNumber );
     323           0 :         delete pOStm;
     324             :     }
     325             : 
     326           0 :     return aNewURL;
     327             : }
     328             : 
     329           0 : void GalleryTheme::ImplBroadcast( sal_uIntPtr nUpdatePos )
     330             : {
     331           0 :     if( !IsBroadcasterLocked() )
     332             :     {
     333           0 :         if( GetObjectCount() && ( nUpdatePos >= GetObjectCount() ) )
     334           0 :             nUpdatePos = GetObjectCount() - 1;
     335             : 
     336           0 :         Broadcast( GalleryHint( GALLERY_HINT_THEME_UPDATEVIEW, GetName(), nUpdatePos ) );
     337             :     }
     338           0 : }
     339             : 
     340           0 : bool GalleryTheme::UnlockTheme()
     341             : {
     342             :     DBG_ASSERT( mnThemeLockCount, "Theme is not locked" );
     343             : 
     344           0 :     bool bRet = false;
     345             : 
     346           0 :     if( mnThemeLockCount )
     347             :     {
     348           0 :         --mnThemeLockCount;
     349           0 :         bRet = true;
     350             :     }
     351             : 
     352           0 :     return bRet;
     353             : }
     354             : 
     355           0 : void GalleryTheme::UnlockBroadcaster( sal_uIntPtr nUpdatePos )
     356             : {
     357             :     DBG_ASSERT( mnBroadcasterLockCount, "Broadcaster is not locked" );
     358             : 
     359           0 :     if( mnBroadcasterLockCount && !--mnBroadcasterLockCount )
     360           0 :         ImplBroadcast( nUpdatePos );
     361           0 : }
     362             : 
     363           0 : bool GalleryTheme::InsertObject( const SgaObject& rObj, sal_uIntPtr nInsertPos )
     364             : {
     365           0 :     if (!rObj.IsValid())
     366           0 :         return false;
     367             : 
     368           0 :     GalleryObject* pFoundEntry = NULL;
     369           0 :     size_t iFoundPos = 0;
     370           0 :     for (size_t n = aObjectList.size(); iFoundPos < n; ++iFoundPos)
     371             :     {
     372           0 :         if (aObjectList[ iFoundPos ]->aURL == rObj.GetURL())
     373             :         {
     374           0 :             pFoundEntry = aObjectList[ iFoundPos ];
     375           0 :             break;
     376             :         }
     377             :     }
     378             : 
     379           0 :     if (pFoundEntry)
     380             :     {
     381           0 :         GalleryObject aNewEntry;
     382             : 
     383             :         // update title of new object if necessary
     384           0 :         if (rObj.GetTitle().isEmpty())
     385             :         {
     386           0 :             SgaObject* pOldObj = ImplReadSgaObject(pFoundEntry);
     387             : 
     388           0 :             if (pOldObj)
     389             :             {
     390           0 :                 ((SgaObject&) rObj).SetTitle( pOldObj->GetTitle() );
     391           0 :                 delete pOldObj;
     392             :             }
     393             :         }
     394           0 :         else if (rObj.GetTitle() == "__<empty>__")
     395           0 :             ((SgaObject&) rObj).SetTitle("");
     396             : 
     397           0 :         ImplWriteSgaObject(rObj, nInsertPos, &aNewEntry);
     398           0 :         pFoundEntry->nOffset = aNewEntry.nOffset;
     399             :     }
     400             :     else
     401           0 :         ImplWriteSgaObject(rObj, nInsertPos, NULL);
     402             : 
     403           0 :     ImplSetModified(true);
     404           0 :     ImplBroadcast(pFoundEntry? iFoundPos: nInsertPos);
     405             : 
     406           0 :     return true;
     407             : }
     408             : 
     409           0 : SgaObject* GalleryTheme::AcquireObject( size_t nPos )
     410             : {
     411           0 :     return ImplReadSgaObject( aObjectList[ nPos ] );
     412             : }
     413             : 
     414           0 : void GalleryTheme::GetPreviewBitmapExAndStrings(sal_uIntPtr nPos, BitmapEx& rBitmapEx, Size& rSize, OUString& rTitle, OUString& rPath) const
     415             : {
     416           0 :     const GalleryObject* pGalleryObject = nPos < aObjectList.size() ? aObjectList[ nPos ] : NULL;
     417             : 
     418           0 :     if(pGalleryObject)
     419             :     {
     420           0 :         rBitmapEx = pGalleryObject->maPreviewBitmapEx;
     421           0 :         rSize = pGalleryObject->maPreparedSize;
     422           0 :         rTitle = pGalleryObject->maTitle;
     423           0 :         rPath = pGalleryObject->maPath;
     424             :     }
     425             :     else
     426             :     {
     427             :         OSL_ENSURE(false, "OOps, no GalleryObject at this index (!)");
     428             :     }
     429           0 : }
     430             : 
     431           0 : void GalleryTheme::SetPreviewBitmapExAndStrings(sal_uIntPtr nPos, const BitmapEx& rBitmapEx, const Size& rSize, const OUString& rTitle, const OUString& rPath)
     432             : {
     433           0 :     GalleryObject* pGalleryObject = nPos < aObjectList.size() ? aObjectList[ nPos ] : NULL;
     434             : 
     435           0 :     if(pGalleryObject)
     436             :     {
     437           0 :         pGalleryObject->maPreviewBitmapEx = rBitmapEx;
     438           0 :         pGalleryObject->maPreparedSize = rSize;
     439           0 :         pGalleryObject->maTitle = rTitle;
     440           0 :         pGalleryObject->maPath = rPath;
     441             :     }
     442             :     else
     443             :     {
     444             :         OSL_ENSURE(false, "OOps, no GalleryObject at this index (!)");
     445             :     }
     446           0 : }
     447             : 
     448           0 : void GalleryTheme::ReleaseObject( SgaObject* pObject )
     449             : {
     450           0 :     delete pObject;
     451           0 : }
     452             : 
     453           0 : bool GalleryTheme::RemoveObject( size_t nPos )
     454             : {
     455           0 :     GalleryObject* pEntry = NULL;
     456           0 :     if ( nPos < aObjectList.size() )
     457             :     {
     458           0 :         GalleryObjectList::iterator it = aObjectList.begin();
     459           0 :         ::std::advance( it, nPos );
     460           0 :         pEntry = *it;
     461           0 :         aObjectList.erase( it );
     462             :     }
     463             : 
     464           0 :     if( aObjectList.empty() )
     465           0 :         KillFile( GetSdgURL() );
     466             : 
     467           0 :     if( pEntry )
     468             :     {
     469           0 :         if( SGA_OBJ_SVDRAW == pEntry->eObjKind )
     470           0 :             aSvDrawStorageRef->Remove( pEntry->aURL.GetMainURL( INetURLObject::NO_DECODE ) );
     471             : 
     472           0 :         Broadcast( GalleryHint( GALLERY_HINT_CLOSE_OBJECT, GetName(), reinterpret_cast< sal_uIntPtr >( pEntry ) ) );
     473           0 :         Broadcast( GalleryHint( GALLERY_HINT_OBJECT_REMOVED, GetName(), reinterpret_cast< sal_uIntPtr >( pEntry ) ) );
     474           0 :         delete pEntry;
     475             : 
     476           0 :         ImplSetModified( true );
     477           0 :         ImplBroadcast( nPos );
     478             :     }
     479             : 
     480           0 :     return( pEntry != NULL );
     481             : }
     482             : 
     483           0 : bool GalleryTheme::ChangeObjectPos( size_t nOldPos, size_t nNewPos )
     484             : {
     485           0 :     if (nOldPos == nNewPos || nOldPos >= aObjectList.size())
     486           0 :         return false;
     487             : 
     488           0 :     GalleryObject* pEntry = aObjectList[nOldPos];
     489             : 
     490           0 :     GalleryObjectList::iterator it = aObjectList.begin();
     491           0 :     ::std::advance(it, nNewPos);
     492           0 :     aObjectList.insert(it, pEntry);
     493             : 
     494           0 :     if (nNewPos < nOldPos)
     495           0 :         nOldPos++;
     496             : 
     497           0 :     it = aObjectList.begin();
     498           0 :     ::std::advance(it, nOldPos);
     499           0 :     aObjectList.erase(it);
     500             : 
     501           0 :     ImplSetModified(true);
     502           0 :     ImplBroadcast((nNewPos < nOldPos)? nNewPos: (nNewPos - 1));
     503             : 
     504           0 :     return true;
     505             : }
     506             : 
     507           0 : void GalleryTheme::Actualize( const Link& rActualizeLink, GalleryProgress* pProgress )
     508             : {
     509           0 :     if( !IsReadOnly() )
     510             :     {
     511           0 :         Graphic         aGraphic;
     512           0 :         OUString        aFormat;
     513             :         GalleryObject*  pEntry;
     514           0 :         const size_t    nCount = aObjectList.size();
     515             : 
     516           0 :         LockBroadcaster();
     517           0 :         bAbortActualize = false;
     518             : 
     519             :         // reset delete flag
     520           0 :         for (size_t i = 0; i < nCount; i++)
     521           0 :             aObjectList[ i ]->mbDelete = false;
     522             : 
     523           0 :         for(size_t i = 0; ( i < nCount ) && !bAbortActualize; i++)
     524             :         {
     525           0 :             if( pProgress )
     526           0 :                 pProgress->Update( i, nCount - 1 );
     527             : 
     528           0 :             pEntry = aObjectList[ i ];
     529             : 
     530           0 :             const INetURLObject aURL( pEntry->aURL );
     531             : 
     532           0 :             rActualizeLink.Call( (void*) &aURL );
     533             : 
     534             :             // SvDraw objects will be updated later
     535           0 :             if( pEntry->eObjKind != SGA_OBJ_SVDRAW )
     536             :             {
     537             :                 // Still a function should be implemented,
     538             :                 // which assigns files to the relevant entry.
     539             :                 // insert graphics as graphic objects into the gallery
     540           0 :                 if( pEntry->eObjKind == SGA_OBJ_SOUND )
     541             :                 {
     542           0 :                     SgaObjectSound aObjSound( aURL );
     543           0 :                     if( !InsertObject( aObjSound ) )
     544           0 :                         pEntry->mbDelete = true;
     545             :                 }
     546             :                 else
     547             :                 {
     548           0 :                     aGraphic.Clear();
     549             : 
     550           0 :                     if ( GalleryGraphicImport( aURL, aGraphic, aFormat ) )
     551             :                     {
     552             :                         SgaObject* pNewObj;
     553             : 
     554           0 :                         if ( SGA_OBJ_INET == pEntry->eObjKind )
     555           0 :                             pNewObj = (SgaObject*) new SgaObjectINet( aGraphic, aURL, aFormat );
     556           0 :                         else if ( aGraphic.IsAnimated() )
     557           0 :                             pNewObj = (SgaObject*) new SgaObjectAnim( aGraphic, aURL, aFormat );
     558             :                         else
     559           0 :                             pNewObj = (SgaObject*) new SgaObjectBmp( aGraphic, aURL, aFormat );
     560             : 
     561           0 :                         if( !InsertObject( *pNewObj ) )
     562           0 :                             pEntry->mbDelete = true;
     563             : 
     564           0 :                         delete pNewObj;
     565             :                     }
     566             :                     else
     567           0 :                         pEntry->mbDelete = true; // set delete flag
     568             :                 }
     569             :             }
     570             :             else
     571             :             {
     572           0 :                 if ( aSvDrawStorageRef.Is() )
     573             :                 {
     574           0 :                     const OUString        aStmName( GetSvDrawStreamNameFromURL( pEntry->aURL ) );
     575           0 :                     SvStorageStreamRef  pIStm = aSvDrawStorageRef->OpenSotStream( aStmName, STREAM_READ );
     576             : 
     577           0 :                     if( pIStm && !pIStm->GetError() )
     578             :                     {
     579           0 :                         pIStm->SetBufferSize( 16384 );
     580             : 
     581           0 :                         SgaObjectSvDraw aNewObj( *pIStm, pEntry->aURL );
     582             : 
     583           0 :                         if( !InsertObject( aNewObj ) )
     584           0 :                             pEntry->mbDelete = true;
     585             : 
     586           0 :                         pIStm->SetBufferSize( 0L );
     587           0 :                     }
     588             :                 }
     589             :             }
     590           0 :         }
     591             : 
     592             :         // remove all entries with set flag
     593           0 :         for ( size_t i = 0; i < aObjectList.size(); )
     594             :         {
     595           0 :             pEntry = aObjectList[ i ];
     596           0 :             if( pEntry->mbDelete )
     597             :             {
     598           0 :                 Broadcast( GalleryHint( GALLERY_HINT_CLOSE_OBJECT, GetName(), reinterpret_cast< sal_uIntPtr >( pEntry ) ) );
     599           0 :                 Broadcast( GalleryHint( GALLERY_HINT_OBJECT_REMOVED, GetName(), reinterpret_cast< sal_uLong >( pEntry ) ) );
     600           0 :                 GalleryObjectList::iterator it = aObjectList.begin();
     601           0 :                 ::std::advance( it, i );
     602           0 :                 aObjectList.erase( it );
     603           0 :                 delete pEntry;
     604             :             }
     605           0 :             else ++i;
     606             :         }
     607             : 
     608             :         // update theme
     609           0 :         ::utl::TempFile aTmp;
     610           0 :         INetURLObject   aInURL( GetSdgURL() );
     611           0 :         INetURLObject   aTmpURL( aTmp.GetURL() );
     612             : 
     613             :         DBG_ASSERT( aInURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
     614             :         DBG_ASSERT( aTmpURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
     615             : 
     616           0 :         SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( aInURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ );
     617           0 :         SvStream* pTmpStm = ::utl::UcbStreamHelper::CreateStream( aTmpURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_WRITE | STREAM_TRUNC );
     618             : 
     619           0 :         if( pIStm && pTmpStm )
     620             :         {
     621           0 :             for ( size_t i = 0, n = aObjectList.size(); i < n; ++i )
     622             :             {
     623           0 :                 pEntry = aObjectList[ i ];
     624             :                 SgaObject* pObj;
     625             : 
     626           0 :                 switch( pEntry->eObjKind )
     627             :                 {
     628           0 :                     case( SGA_OBJ_BMP ):    pObj = new SgaObjectBmp();      break;
     629           0 :                     case( SGA_OBJ_ANIM ):   pObj = new SgaObjectAnim();     break;
     630           0 :                     case( SGA_OBJ_INET ):   pObj = new SgaObjectINet();     break;
     631           0 :                     case( SGA_OBJ_SVDRAW ): pObj = new SgaObjectSvDraw();   break;
     632           0 :                     case (SGA_OBJ_SOUND):   pObj = new SgaObjectSound();    break;
     633             : 
     634             :                     default:
     635           0 :                         pObj = NULL;
     636           0 :                     break;
     637             :                 }
     638             : 
     639           0 :                 if( pObj )
     640             :                 {
     641           0 :                     pIStm->Seek( pEntry->nOffset );
     642           0 :                     ReadSgaObject( *pIStm, *pObj);
     643           0 :                     pEntry->nOffset = pTmpStm->Tell();
     644           0 :                     WriteSgaObject( *pTmpStm, *pObj );
     645           0 :                     delete pObj;
     646             :                 }
     647             :             }
     648             :         }
     649             :         else
     650             :         {
     651             :             OSL_FAIL( "File(s) could not be opened" );
     652             :         }
     653             : 
     654           0 :         delete pIStm;
     655           0 :         delete pTmpStm;
     656             : 
     657           0 :         CopyFile( aTmpURL, aInURL );
     658           0 :         KillFile( aTmpURL );
     659             : 
     660           0 :         sal_uIntPtr nStorErr = 0;
     661             : 
     662             :         {
     663           0 :             SvStorageRef aTempStorageRef( new SvStorage( false, aTmpURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_STD_READWRITE ) );
     664           0 :             aSvDrawStorageRef->CopyTo( aTempStorageRef );
     665           0 :             nStorErr = aSvDrawStorageRef->GetError();
     666             :         }
     667             : 
     668           0 :         if( !nStorErr )
     669             :         {
     670           0 :             aSvDrawStorageRef.Clear();
     671           0 :             CopyFile( aTmpURL, GetSdvURL() );
     672           0 :             ImplCreateSvDrawStorage();
     673             :         }
     674             : 
     675           0 :         KillFile( aTmpURL );
     676           0 :         ImplSetModified( true );
     677           0 :         ImplWrite();
     678           0 :         UnlockBroadcaster();
     679             :     }
     680           0 : }
     681             : 
     682           0 : GalleryThemeEntry* GalleryTheme::CreateThemeEntry( const INetURLObject& rURL, bool bReadOnly )
     683             : {
     684             :     DBG_ASSERT( rURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
     685             : 
     686           0 :     GalleryThemeEntry*  pRet = NULL;
     687             : 
     688           0 :     if( FileExists( rURL ) )
     689             :     {
     690           0 :         SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( rURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ );
     691             : 
     692           0 :         if( pIStm )
     693             :         {
     694           0 :             OUString        aThemeName;
     695             :             sal_uInt16      nVersion;
     696           0 :             sal_Bool        bThemeNameFromResource = sal_False;
     697             : 
     698           0 :             pIStm->ReadUInt16( nVersion );
     699             : 
     700           0 :             if( nVersion <= 0x00ff )
     701             :             {
     702           0 :                 sal_uInt32      nThemeId = 0;
     703             : 
     704           0 :                 OString aTmpStr = read_uInt16_lenPrefixed_uInt8s_ToOString(*pIStm);
     705           0 :                 aThemeName = OStringToOUString(aTmpStr, RTL_TEXTENCODING_UTF8);
     706             : 
     707             :                 // execute a charakter conversion
     708           0 :                 if( nVersion >= 0x0004 )
     709             :                 {
     710             :                     sal_uInt32  nCount;
     711             :                     sal_uInt16  nTemp16;
     712             : 
     713           0 :                     pIStm->ReadUInt32( nCount ).ReadUInt16( nTemp16 );
     714           0 :                     pIStm->Seek( STREAM_SEEK_TO_END );
     715             : 
     716             :                     // check whether there is a newer version;
     717             :                     // therefore jump back by 520Bytes (8 bytes ID + 512Bytes reserve buffer)
     718             :                     // if this is at all possible.
     719           0 :                     if( pIStm->Tell() >= 520 )
     720             :                     {
     721             :                         sal_uInt32 nId1, nId2;
     722             : 
     723           0 :                         pIStm->SeekRel( -520 );
     724           0 :                         pIStm->ReadUInt32( nId1 ).ReadUInt32( nId2 );
     725             : 
     726           0 :                         if( nId1 == COMPAT_FORMAT( 'G', 'A', 'L', 'R' ) &&
     727           0 :                             nId2 == COMPAT_FORMAT( 'E', 'S', 'R', 'V' ) )
     728             :                         {
     729           0 :                             VersionCompat* pCompat = new VersionCompat( *pIStm, STREAM_READ );
     730             : 
     731           0 :                             pIStm->ReadUInt32( nThemeId );
     732             : 
     733           0 :                             if( pCompat->GetVersion() >= 2 )
     734             :                             {
     735           0 :                                 pIStm->ReadUChar( bThemeNameFromResource );
     736             :                             }
     737             : 
     738           0 :                             delete pCompat;
     739             :                         }
     740             :                     }
     741             :                 }
     742             : 
     743           0 :                 INetURLObject aPathURL( rURL );
     744             :                 pRet = new GalleryThemeEntry( false, aPathURL, aThemeName,
     745             :                                               bReadOnly, false, nThemeId,
     746           0 :                                               bThemeNameFromResource );
     747             :             }
     748             : 
     749           0 :             delete pIStm;
     750             :         }
     751             :     }
     752             : 
     753           0 :     return pRet;
     754             : }
     755             : 
     756           0 : bool GalleryTheme::GetThumb( sal_uIntPtr nPos, BitmapEx& rBmp, bool )
     757             : {
     758           0 :     SgaObject*  pObj = AcquireObject( nPos );
     759           0 :     bool        bRet = false;
     760             : 
     761           0 :     if( pObj )
     762             :     {
     763           0 :         rBmp = pObj->GetThumbBmp();
     764           0 :         ReleaseObject( pObj );
     765           0 :         bRet = true;
     766             :     }
     767             : 
     768           0 :     return bRet;
     769             : }
     770             : 
     771           0 : bool GalleryTheme::GetGraphic( sal_uIntPtr nPos, Graphic& rGraphic, bool bProgress )
     772             : {
     773           0 :     const GalleryObject*    pObject = ImplGetGalleryObject( nPos );
     774           0 :     bool                    bRet = false;
     775             : 
     776           0 :     if( pObject )
     777             :     {
     778           0 :         const INetURLObject aURL( ImplGetURL( pObject ) );
     779             : 
     780           0 :         switch( pObject->eObjKind )
     781             :         {
     782             :             case( SGA_OBJ_BMP ):
     783             :             case( SGA_OBJ_ANIM ):
     784             :             case( SGA_OBJ_INET ):
     785             :             {
     786           0 :                 OUString aFilterDummy;
     787           0 :                 bRet = ( GalleryGraphicImport( aURL, rGraphic, aFilterDummy, bProgress ) != SGA_IMPORT_NONE );
     788             :             }
     789           0 :             break;
     790             : 
     791             :             case( SGA_OBJ_SVDRAW ):
     792             :             {
     793           0 :                 SvxGalleryDrawModel aModel;
     794             : 
     795           0 :                 if( aModel.GetModel() )
     796             :                 {
     797           0 :                     if( GetModel( nPos, *aModel.GetModel(), bProgress ) )
     798             :                     {
     799           0 :                         ImageMap aIMap;
     800             : 
     801           0 :                         if( CreateIMapGraphic( *aModel.GetModel(), rGraphic, aIMap ) )
     802           0 :                             bRet = true;
     803             :                         else
     804             :                         {
     805           0 :                             VirtualDevice aVDev;
     806           0 :                             aVDev.SetMapMode( MapMode( MAP_100TH_MM ) );
     807           0 :                             FmFormView aView( aModel.GetModel(), &aVDev );
     808             : 
     809           0 :                             aView.hideMarkHandles();
     810           0 :                             aView.ShowSdrPage(aView.GetModel()->GetPage(0));
     811           0 :                             aView.MarkAll();
     812           0 :                             rGraphic = aView.GetAllMarkedGraphic();
     813           0 :                             bRet = true;
     814           0 :                         }
     815             :                     }
     816           0 :                 }
     817             :             }
     818           0 :             break;
     819             : 
     820             :             case( SGA_OBJ_SOUND ):
     821             :             {
     822           0 :                 SgaObject* pObj = AcquireObject( nPos );
     823             : 
     824           0 :                 if( pObj )
     825             :                 {
     826           0 :                     rGraphic = pObj->GetThumbBmp();
     827             :                     //Bitmap aBmp( pObj->GetThumbBmp() );
     828             :                     //aBmp.Replace( COL_LIGHTMAGENTA, COL_WHITE );
     829             :                     //rGraphic = aBmp;
     830           0 :                     ReleaseObject( pObj );
     831           0 :                     bRet = true;
     832             :                 }
     833             :             }
     834           0 :             break;
     835             : 
     836             :             default:
     837           0 :             break;
     838           0 :         }
     839             :     }
     840             : 
     841           0 :     return bRet;
     842             : }
     843             : 
     844           0 : bool GalleryTheme::InsertGraphic( const Graphic& rGraphic, sal_uIntPtr nInsertPos )
     845             : {
     846           0 :     bool bRet = false;
     847             : 
     848           0 :     if( rGraphic.GetType() != GRAPHIC_NONE )
     849             :     {
     850           0 :         sal_uIntPtr           nExportFormat = CVT_UNKNOWN;
     851           0 :         const GfxLink   aGfxLink( ( (Graphic&) rGraphic ).GetLink() );
     852             : 
     853           0 :         if( aGfxLink.GetDataSize() )
     854             :         {
     855           0 :             switch( aGfxLink.GetType() )
     856             :             {
     857           0 :                 case( GFX_LINK_TYPE_EPS_BUFFER ): nExportFormat = CVT_SVM; break;
     858           0 :                 case( GFX_LINK_TYPE_NATIVE_GIF ): nExportFormat = CVT_GIF; break;
     859             : 
     860             :                 // #i15508# added BMP type
     861             :                 // could not find/trigger a call to this, but should do no harm
     862           0 :                 case( GFX_LINK_TYPE_NATIVE_BMP ): nExportFormat = CVT_BMP; break;
     863             : 
     864           0 :                 case( GFX_LINK_TYPE_NATIVE_JPG ): nExportFormat = CVT_JPG; break;
     865           0 :                 case( GFX_LINK_TYPE_NATIVE_PNG ): nExportFormat = CVT_PNG; break;
     866           0 :                 case( GFX_LINK_TYPE_NATIVE_TIF ): nExportFormat = CVT_TIF; break;
     867           0 :                 case( GFX_LINK_TYPE_NATIVE_WMF ): nExportFormat = CVT_WMF; break;
     868           0 :                 case( GFX_LINK_TYPE_NATIVE_MET ): nExportFormat = CVT_MET; break;
     869           0 :                 case( GFX_LINK_TYPE_NATIVE_PCT ): nExportFormat = CVT_PCT; break;
     870           0 :                 case( GFX_LINK_TYPE_NATIVE_SVG ): nExportFormat = CVT_SVG; break;
     871             :                 default:
     872           0 :                     break;
     873             :             }
     874             :         }
     875             :         else
     876             :         {
     877           0 :             if( rGraphic.GetType() == GRAPHIC_BITMAP )
     878             :             {
     879           0 :                 if( rGraphic.IsAnimated() )
     880           0 :                     nExportFormat = CVT_GIF;
     881             :                 else
     882           0 :                     nExportFormat = CVT_PNG;
     883             :             }
     884             :             else
     885           0 :                 nExportFormat = CVT_SVM;
     886             :         }
     887             : 
     888           0 :         const INetURLObject aURL( ImplCreateUniqueURL( SGA_OBJ_BMP, nExportFormat ) );
     889           0 :         SvStream*           pOStm = ::utl::UcbStreamHelper::CreateStream( aURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_WRITE | STREAM_TRUNC );
     890             : 
     891           0 :         if( pOStm )
     892             :         {
     893           0 :             pOStm->SetVersion( SOFFICE_FILEFORMAT_50 );
     894             : 
     895           0 :             if( CVT_SVM == nExportFormat )
     896             :             {
     897           0 :                 GDIMetaFile aMtf( rGraphic.GetGDIMetaFile() );
     898             : 
     899           0 :                 aMtf.Write( *pOStm );
     900           0 :                 bRet = ( pOStm->GetError() == ERRCODE_NONE );
     901             :             }
     902             :             else
     903             :             {
     904           0 :                 if( aGfxLink.GetDataSize() && aGfxLink.GetData() )
     905             :                 {
     906           0 :                     pOStm->Write( aGfxLink.GetData(), aGfxLink.GetDataSize() );
     907           0 :                     bRet = ( pOStm->GetError() == ERRCODE_NONE );
     908             :                 }
     909             :                 else
     910           0 :                     bRet = ( GraphicConverter::Export( *pOStm, rGraphic, nExportFormat ) == ERRCODE_NONE );
     911             :             }
     912             : 
     913           0 :             delete pOStm;
     914             :         }
     915             : 
     916           0 :         if( bRet )
     917             :         {
     918           0 :             const SgaObjectBmp aObjBmp( aURL );
     919           0 :             InsertObject( aObjBmp, nInsertPos );
     920           0 :         }
     921             :     }
     922             : 
     923           0 :     return bRet;
     924             : }
     925             : 
     926           0 : bool GalleryTheme::GetModel( sal_uIntPtr nPos, SdrModel& rModel, bool )
     927             : {
     928           0 :     const GalleryObject*    pObject = ImplGetGalleryObject( nPos );
     929           0 :     bool                    bRet = false;
     930             : 
     931           0 :     if( pObject && ( SGA_OBJ_SVDRAW == pObject->eObjKind ) )
     932             :     {
     933           0 :         const INetURLObject aURL( ImplGetURL( pObject ) );
     934           0 :         SvStorageRef        xStor( GetSvDrawStorage() );
     935             : 
     936           0 :         if( xStor.Is() )
     937             :         {
     938           0 :             const OUString        aStmName( GetSvDrawStreamNameFromURL( aURL ) );
     939           0 :             SvStorageStreamRef  xIStm( xStor->OpenSotStream( aStmName, STREAM_READ ) );
     940             : 
     941           0 :             if( xIStm.Is() && !xIStm->GetError() )
     942             :             {
     943           0 :                 xIStm->SetBufferSize( STREAMBUF_SIZE );
     944           0 :                 bRet = GallerySvDrawImport( *xIStm, rModel );
     945           0 :                 xIStm->SetBufferSize( 0L );
     946           0 :             }
     947           0 :         }
     948             :     }
     949             : 
     950           0 :     return bRet;
     951             : }
     952             : 
     953           0 : bool GalleryTheme::InsertModel( const FmFormModel& rModel, sal_uIntPtr nInsertPos )
     954             : {
     955           0 :     INetURLObject   aURL( ImplCreateUniqueURL( SGA_OBJ_SVDRAW ) );
     956           0 :     SvStorageRef    xStor( GetSvDrawStorage() );
     957           0 :     bool            bRet = false;
     958             : 
     959           0 :     if( xStor.Is() )
     960             :     {
     961           0 :         const OUString        aStmName( GetSvDrawStreamNameFromURL( aURL ) );
     962           0 :         SvStorageStreamRef  xOStm( xStor->OpenSotStream( aStmName, STREAM_WRITE | STREAM_TRUNC ) );
     963             : 
     964           0 :         if( xOStm.Is() && !xOStm->GetError() )
     965             :         {
     966           0 :             SvMemoryStream  aMemStm( 65535, 65535 );
     967           0 :             FmFormModel*    pFormModel = (FmFormModel*) &rModel;
     968             : 
     969           0 :             pFormModel->BurnInStyleSheetAttributes();
     970             : 
     971             :             {
     972           0 :                 uno::Reference< io::XOutputStream > xDocOut( new utl::OOutputStreamWrapper( aMemStm ) );
     973             : 
     974           0 :                 if( xDocOut.is() )
     975           0 :                     SvxDrawingLayerExport( pFormModel, xDocOut );
     976             :             }
     977             : 
     978           0 :             aMemStm.Seek( 0 );
     979             : 
     980           0 :             xOStm->SetBufferSize( 16348 );
     981           0 :             GalleryCodec aCodec( *xOStm );
     982           0 :             aCodec.Write( aMemStm );
     983             : 
     984           0 :             if( !xOStm->GetError() )
     985             :             {
     986           0 :                 SgaObjectSvDraw aObjSvDraw( rModel, aURL );
     987           0 :                 bRet = InsertObject( aObjSvDraw, nInsertPos );
     988             :             }
     989             : 
     990           0 :             xOStm->SetBufferSize( 0L );
     991           0 :             xOStm->Commit();
     992           0 :         }
     993             :     }
     994             : 
     995           0 :     return bRet;
     996             : }
     997             : 
     998           0 : bool GalleryTheme::GetModelStream( sal_uIntPtr nPos, SotStorageStreamRef& rxModelStream, bool )
     999             : {
    1000           0 :     const GalleryObject*    pObject = ImplGetGalleryObject( nPos );
    1001           0 :     bool                    bRet = false;
    1002             : 
    1003           0 :     if( pObject && ( SGA_OBJ_SVDRAW == pObject->eObjKind ) )
    1004             :     {
    1005           0 :         const INetURLObject aURL( ImplGetURL( pObject ) );
    1006           0 :         SvStorageRef        xStor( GetSvDrawStorage() );
    1007             : 
    1008           0 :         if( xStor.Is() )
    1009             :         {
    1010           0 :             const OUString        aStmName( GetSvDrawStreamNameFromURL( aURL ) );
    1011           0 :             SvStorageStreamRef  xIStm( xStor->OpenSotStream( aStmName, STREAM_READ ) );
    1012             : 
    1013           0 :             if( xIStm.Is() && !xIStm->GetError() )
    1014             :             {
    1015           0 :                 sal_uInt32 nVersion = 0;
    1016             : 
    1017           0 :                 xIStm->SetBufferSize( 16348 );
    1018             : 
    1019           0 :                 if( GalleryCodec::IsCoded( *xIStm, nVersion ) )
    1020             :                 {
    1021           0 :                     SvxGalleryDrawModel aModel;
    1022             : 
    1023           0 :                     if( aModel.GetModel() )
    1024             :                     {
    1025           0 :                         if( GallerySvDrawImport( *xIStm, *aModel.GetModel() ) )
    1026             :                         {
    1027           0 :                             aModel.GetModel()->BurnInStyleSheetAttributes();
    1028             : 
    1029             :                             {
    1030           0 :                                 uno::Reference< io::XOutputStream > xDocOut( new utl::OOutputStreamWrapper( *rxModelStream ) );
    1031             : 
    1032           0 :                                 if( SvxDrawingLayerExport( aModel.GetModel(), xDocOut ) )
    1033           0 :                                     rxModelStream->Commit();
    1034             :                             }
    1035             :                         }
    1036             : 
    1037           0 :                         bRet = ( rxModelStream->GetError() == ERRCODE_NONE );
    1038           0 :                     }
    1039             :                 }
    1040             : 
    1041           0 :                 xIStm->SetBufferSize( 0 );
    1042           0 :             }
    1043           0 :         }
    1044             :     }
    1045             : 
    1046           0 :     return bRet;
    1047             : }
    1048             : 
    1049           0 : bool GalleryTheme::InsertModelStream( const SotStorageStreamRef& rxModelStream, sal_uIntPtr nInsertPos )
    1050             : {
    1051           0 :     INetURLObject   aURL( ImplCreateUniqueURL( SGA_OBJ_SVDRAW ) );
    1052           0 :     SvStorageRef    xStor( GetSvDrawStorage() );
    1053           0 :     bool            bRet = false;
    1054             : 
    1055           0 :     if( xStor.Is() )
    1056             :     {
    1057           0 :         const OUString        aStmName( GetSvDrawStreamNameFromURL( aURL ) );
    1058           0 :         SvStorageStreamRef  xOStm( xStor->OpenSotStream( aStmName, STREAM_WRITE | STREAM_TRUNC ) );
    1059             : 
    1060           0 :         if( xOStm.Is() && !xOStm->GetError() )
    1061             :         {
    1062           0 :             GalleryCodec    aCodec( *xOStm );
    1063           0 :             SvMemoryStream  aMemStm( 65535, 65535 );
    1064             : 
    1065           0 :             xOStm->SetBufferSize( 16348 );
    1066           0 :             aCodec.Write( *rxModelStream );
    1067             : 
    1068           0 :             if( !xOStm->GetError() )
    1069             :             {
    1070           0 :                 xOStm->Seek( 0 );
    1071           0 :                 SgaObjectSvDraw aObjSvDraw( *xOStm, aURL );
    1072           0 :                 bRet = InsertObject( aObjSvDraw, nInsertPos );
    1073             :             }
    1074             : 
    1075           0 :             xOStm->SetBufferSize( 0L );
    1076           0 :             xOStm->Commit();
    1077           0 :         }
    1078             :     }
    1079             : 
    1080           0 :     return bRet;
    1081             : }
    1082             : 
    1083           0 : bool GalleryTheme::GetURL( sal_uIntPtr nPos, INetURLObject& rURL, bool )
    1084             : {
    1085           0 :     const GalleryObject*    pObject = ImplGetGalleryObject( nPos );
    1086           0 :     bool                    bRet = false;
    1087             : 
    1088           0 :     if( pObject )
    1089             :     {
    1090           0 :         rURL = INetURLObject( ImplGetURL( pObject ) );
    1091           0 :         bRet = true;
    1092             :     }
    1093             : 
    1094           0 :     return bRet;
    1095             : }
    1096             : 
    1097           0 : bool GalleryTheme::InsertURL( const INetURLObject& rURL, sal_uIntPtr nInsertPos )
    1098             : {
    1099           0 :     Graphic         aGraphic;
    1100           0 :     OUString        aFormat;
    1101           0 :     SgaObject*      pNewObj = NULL;
    1102           0 :     const sal_uInt16    nImportRet = GalleryGraphicImport( rURL, aGraphic, aFormat );
    1103           0 :     bool            bRet = false;
    1104             : 
    1105           0 :     if( nImportRet != SGA_IMPORT_NONE )
    1106             :     {
    1107           0 :         if ( SGA_IMPORT_INET == nImportRet )
    1108           0 :             pNewObj = (SgaObject*) new SgaObjectINet( aGraphic, rURL, aFormat );
    1109           0 :         else if ( aGraphic.IsAnimated() )
    1110           0 :             pNewObj = (SgaObject*) new SgaObjectAnim( aGraphic, rURL, aFormat );
    1111             :         else
    1112           0 :             pNewObj = (SgaObject*) new SgaObjectBmp( aGraphic, rURL, aFormat );
    1113             :     }
    1114           0 :     else if( ::avmedia::MediaWindow::isMediaURL( rURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ), ""/*TODO?*/ ) )
    1115           0 :         pNewObj = (SgaObject*) new SgaObjectSound( rURL );
    1116             : 
    1117           0 :     if( pNewObj && InsertObject( *pNewObj, nInsertPos ) )
    1118           0 :         bRet = true;
    1119             : 
    1120           0 :     delete pNewObj;
    1121             : 
    1122           0 :     return bRet;
    1123             : }
    1124             : 
    1125           0 : bool GalleryTheme::InsertFileOrDirURL( const INetURLObject& rFileOrDirURL, sal_uIntPtr nInsertPos )
    1126             : {
    1127           0 :     INetURLObject                   aURL;
    1128           0 :     ::std::vector< INetURLObject >  aURLVector;
    1129           0 :     bool                            bRet = false;
    1130             : 
    1131             :     try
    1132             :     {
    1133           0 :         ::ucbhelper::Content         aCnt( rFileOrDirURL.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment >(), comphelper::getProcessComponentContext() );
    1134           0 :         sal_Bool        bFolder = false;
    1135             : 
    1136           0 :         aCnt.getPropertyValue("IsFolder") >>= bFolder;
    1137             : 
    1138           0 :         if( bFolder )
    1139             :         {
    1140           0 :             uno::Sequence< OUString > aProps( 1 );
    1141           0 :             aProps[ 0 ] = "Url";
    1142           0 :             uno::Reference< sdbc::XResultSet > xResultSet( aCnt.createCursor( aProps, ::ucbhelper::INCLUDE_DOCUMENTS_ONLY ) );
    1143           0 :             uno::Reference< ucb::XContentAccess > xContentAccess( xResultSet, uno::UNO_QUERY );
    1144           0 :             if( xContentAccess.is() )
    1145             :             {
    1146           0 :                 while( xResultSet->next() )
    1147             :                 {
    1148           0 :                     aURL.SetSmartURL( xContentAccess->queryContentIdentifierString() );
    1149           0 :                     aURLVector.push_back( aURL );
    1150             :                 }
    1151           0 :             }
    1152             :         }
    1153             :         else
    1154           0 :             aURLVector.push_back( rFileOrDirURL );
    1155             :     }
    1156           0 :     catch( const ucb::ContentCreationException& )
    1157             :     {
    1158             :     }
    1159           0 :     catch( const uno::RuntimeException& )
    1160             :     {
    1161             :     }
    1162           0 :     catch( const uno::Exception& )
    1163             :     {
    1164             :     }
    1165             : 
    1166           0 :     ::std::vector< INetURLObject >::const_iterator aIter( aURLVector.begin() ), aEnd( aURLVector.end() );
    1167             : 
    1168           0 :     while( aIter != aEnd )
    1169           0 :         bRet = bRet || InsertURL( *aIter++, nInsertPos );
    1170             : 
    1171           0 :     return bRet;
    1172             : }
    1173             : 
    1174           0 : bool GalleryTheme::InsertTransferable( const uno::Reference< datatransfer::XTransferable >& rxTransferable, sal_uIntPtr nInsertPos )
    1175             : {
    1176           0 :     bool bRet = false;
    1177             : 
    1178           0 :     if( rxTransferable.is() )
    1179             :     {
    1180           0 :         TransferableDataHelper  aDataHelper( rxTransferable );
    1181           0 :         Graphic*                pGraphic = NULL;
    1182             : 
    1183           0 :         if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_DRAWING ) )
    1184             :         {
    1185           0 :             SotStorageStreamRef xModelStm;
    1186             : 
    1187           0 :             if( aDataHelper.GetSotStorageStream( SOT_FORMATSTR_ID_DRAWING, xModelStm ) )
    1188           0 :                 bRet = InsertModelStream( xModelStm, nInsertPos );
    1189             :         }
    1190           0 :         else if( aDataHelper.HasFormat( SOT_FORMAT_FILE_LIST ) ||
    1191           0 :                  aDataHelper.HasFormat( FORMAT_FILE ) )
    1192             :         {
    1193           0 :             FileList aFileList;
    1194             : 
    1195           0 :             if( aDataHelper.HasFormat( SOT_FORMAT_FILE_LIST ) )
    1196           0 :                 aDataHelper.GetFileList( SOT_FORMAT_FILE_LIST, aFileList );
    1197             :             else
    1198             :             {
    1199           0 :                 OUString aFile;
    1200             : 
    1201           0 :                 aDataHelper.GetString( FORMAT_FILE, aFile );
    1202             : 
    1203           0 :                 if( !aFile.isEmpty() )
    1204           0 :                     aFileList.AppendFile( aFile );
    1205             :             }
    1206             : 
    1207           0 :             for( sal_uInt32 i = 0, nCount = aFileList.Count(); i < nCount; ++i )
    1208             :             {
    1209           0 :                 const OUString  aFile( aFileList.GetFile( i ) );
    1210           0 :                 INetURLObject   aURL( aFile );
    1211             : 
    1212           0 :                 if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
    1213             :                 {
    1214           0 :                     OUString aLocalURL;
    1215             : 
    1216           0 :                     if( ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aFile, aLocalURL ) )
    1217           0 :                         aURL = INetURLObject( aLocalURL );
    1218             :                 }
    1219             : 
    1220           0 :                 if( aURL.GetProtocol() != INET_PROT_NOT_VALID )
    1221           0 :                     bRet = InsertFileOrDirURL( aURL, nInsertPos );
    1222           0 :             }
    1223             :         }
    1224             :         else
    1225             :         {
    1226           0 :             Graphic aGraphic;
    1227           0 :             sal_uIntPtr nFormat = 0;
    1228             : 
    1229           0 :             if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_SVXB ) )
    1230           0 :                 nFormat = SOT_FORMATSTR_ID_SVXB;
    1231           0 :             else if( aDataHelper.HasFormat( FORMAT_GDIMETAFILE ) )
    1232           0 :                 nFormat = FORMAT_GDIMETAFILE;
    1233           0 :             else if( aDataHelper.HasFormat( FORMAT_BITMAP ) )
    1234           0 :                 nFormat = FORMAT_BITMAP;
    1235             : 
    1236           0 :             if( nFormat && aDataHelper.GetGraphic( nFormat, aGraphic ) )
    1237           0 :                 pGraphic = new Graphic( aGraphic );
    1238             :         }
    1239             : 
    1240           0 :         if( pGraphic )
    1241             :         {
    1242           0 :             bRet = false;
    1243             : 
    1244           0 :             if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_SVIM ) )
    1245             :             {
    1246             : 
    1247           0 :                 ImageMap aImageMap;
    1248             : 
    1249             :                 // according to KA we don't need a BaseURL here
    1250           0 :                 if( aDataHelper.GetImageMap( SOT_FORMATSTR_ID_SVIM, aImageMap ) )
    1251             :                 {
    1252           0 :                     SvxGalleryDrawModel aModel;
    1253             : 
    1254           0 :                     if( aModel.GetModel() )
    1255             :                     {
    1256           0 :                         SgaUserDataFactory  aFactory;
    1257             : 
    1258           0 :                         SdrPage*    pPage = aModel.GetModel()->GetPage(0);
    1259           0 :                         SdrGrafObj* pGrafObj = new SdrGrafObj( *pGraphic );
    1260             : 
    1261           0 :                         pGrafObj->AppendUserData( new SgaIMapInfo( aImageMap ) );
    1262           0 :                         pPage->InsertObject( pGrafObj );
    1263           0 :                         bRet = InsertModel( *aModel.GetModel(), nInsertPos );
    1264           0 :                     }
    1265           0 :                 }
    1266             :             }
    1267             : 
    1268           0 :             if( !bRet )
    1269           0 :                 bRet = InsertGraphic( *pGraphic, nInsertPos );
    1270             : 
    1271           0 :             delete pGraphic;
    1272           0 :         }
    1273             :     }
    1274             : 
    1275           0 :     return bRet;
    1276             : }
    1277             : 
    1278           0 : void GalleryTheme::CopyToClipboard( Window* pWindow, sal_uIntPtr nPos )
    1279             : {
    1280           0 :     GalleryTransferable* pTransferable = new GalleryTransferable( this, nPos, false );
    1281           0 :     pTransferable->CopyToClipboard( pWindow );
    1282           0 : }
    1283             : 
    1284           0 : void GalleryTheme::StartDrag( Window* pWindow, sal_uIntPtr nPos )
    1285             : {
    1286           0 :     GalleryTransferable* pTransferable = new GalleryTransferable( this, nPos, true );
    1287           0 :     pTransferable->StartDrag( pWindow, DND_ACTION_COPY | DND_ACTION_LINK );
    1288           0 : }
    1289             : 
    1290           0 : SvStream& GalleryTheme::WriteData( SvStream& rOStm ) const
    1291             : {
    1292           0 :     const INetURLObject aRelURL1( GetParent()->GetRelativeURL() );
    1293           0 :     const INetURLObject aRelURL2( GetParent()->GetUserURL() );
    1294           0 :     sal_uInt32          nCount = GetObjectCount();
    1295             :     sal_Bool                bRel;
    1296             : 
    1297           0 :     rOStm.WriteUInt16( (sal_uInt16) 0x0004 );
    1298           0 :     write_uInt16_lenPrefixed_uInt8s_FromOUString(rOStm, GetRealName(), RTL_TEXTENCODING_UTF8);
    1299           0 :     rOStm.WriteUInt32( nCount ).WriteUInt16( (sal_uInt16) osl_getThreadTextEncoding() );
    1300             : 
    1301           0 :     for( sal_uInt32 i = 0; i < nCount; i++ )
    1302             :     {
    1303           0 :         const GalleryObject* pObj = ImplGetGalleryObject( i );
    1304           0 :         OUString               aPath;
    1305             : 
    1306           0 :         if( SGA_OBJ_SVDRAW == pObj->eObjKind )
    1307             :         {
    1308           0 :             aPath = GetSvDrawStreamNameFromURL( pObj->aURL );
    1309           0 :             bRel = sal_False;
    1310             :         }
    1311             :         else
    1312             :         {
    1313           0 :             aPath = pObj->aURL.GetMainURL( INetURLObject::NO_DECODE );
    1314           0 :             aPath = aPath.copy( 0, std::min(aRelURL1.GetMainURL( INetURLObject::NO_DECODE ).getLength(), aPath.getLength()) );
    1315           0 :             bRel = aPath == aRelURL1.GetMainURL( INetURLObject::NO_DECODE );
    1316             : 
    1317           0 :             if( bRel && ( pObj->aURL.GetMainURL( INetURLObject::NO_DECODE ).getLength() > ( aRelURL1.GetMainURL( INetURLObject::NO_DECODE ).getLength() + 1 ) ) )
    1318             :             {
    1319           0 :                 aPath = pObj->aURL.GetMainURL( INetURLObject::NO_DECODE );
    1320           0 :                 aPath = aPath.copy( std::min(aRelURL1.GetMainURL( INetURLObject::NO_DECODE ).getLength(), aPath.getLength()) );
    1321             :             }
    1322             :             else
    1323             :             {
    1324           0 :                 aPath = pObj->aURL.GetMainURL( INetURLObject::NO_DECODE );
    1325           0 :                 aPath = aPath.copy( 0, std::min(aRelURL2.GetMainURL( INetURLObject::NO_DECODE ).getLength(), aPath.getLength()) );
    1326           0 :                 bRel = aPath == aRelURL2.GetMainURL( INetURLObject::NO_DECODE );
    1327             : 
    1328           0 :                 if( bRel && ( pObj->aURL.GetMainURL( INetURLObject::NO_DECODE ).getLength() > ( aRelURL2.GetMainURL( INetURLObject::NO_DECODE ).getLength() + 1 ) ) )
    1329             :                 {
    1330           0 :                     aPath = pObj->aURL.GetMainURL( INetURLObject::NO_DECODE );
    1331           0 :                     aPath = aPath.copy( std::min(aRelURL2.GetMainURL( INetURLObject::NO_DECODE ).getLength(), aPath.getLength()) );
    1332             :                 }
    1333             :                 else
    1334           0 :                     aPath = pObj->aURL.GetMainURL( INetURLObject::NO_DECODE );
    1335             :             }
    1336             :         }
    1337             : 
    1338           0 :         if ( !m_aDestDir.isEmpty() )
    1339             :         {
    1340           0 :             bool aFound = aPath.indexOf(m_aDestDir) != -1;
    1341           0 :             aPath = aPath.replaceFirst(m_aDestDir, "");
    1342           0 :             if ( aFound )
    1343           0 :                 bRel = m_bDestDirRelative;
    1344             :             else
    1345             :                 SAL_WARN( "svx", "failed to replace destdir of '"
    1346             :                           << m_aDestDir << "' in '" << aPath << "'");
    1347             :         }
    1348             : 
    1349           0 :         rOStm.WriteUChar( bRel );
    1350           0 :         write_uInt16_lenPrefixed_uInt8s_FromOUString(rOStm, aPath, RTL_TEXTENCODING_UTF8);
    1351           0 :         rOStm.WriteUInt32( pObj->nOffset ).WriteUInt16( (sal_uInt16) pObj->eObjKind );
    1352           0 :     }
    1353             : 
    1354             :     // more recently, a 512-byte reserve buffer is written,
    1355             :     // to recognize them two sal_uIntPtr-Ids will be written.
    1356           0 :     rOStm.WriteUInt32( COMPAT_FORMAT( 'G', 'A', 'L', 'R' ) ).WriteUInt32( COMPAT_FORMAT( 'E', 'S', 'R', 'V' ) );
    1357             : 
    1358           0 :     const long      nReservePos = rOStm.Tell();
    1359           0 :     VersionCompat*  pCompat = new VersionCompat( rOStm, STREAM_WRITE, 2 );
    1360             : 
    1361           0 :     rOStm.WriteUInt32( (sal_uInt32) GetId() ).WriteUChar( IsThemeNameFromResource() ); // From version 2 and up
    1362             : 
    1363           0 :     delete pCompat;
    1364             : 
    1365             :     // Fill the rest of the buffer.
    1366           0 :     const long  nRest = std::max( 512L - ( (long) rOStm.Tell() - nReservePos ), 0L );
    1367             : 
    1368           0 :     if( nRest )
    1369             :     {
    1370           0 :         char* pReserve = new char[ nRest ];
    1371           0 :         memset( pReserve, 0, nRest );
    1372           0 :         rOStm.Write( pReserve, nRest );
    1373           0 :         delete[] pReserve;
    1374             :     }
    1375             : 
    1376           0 :     return rOStm;
    1377             : }
    1378             : 
    1379           0 : SvStream& GalleryTheme::ReadData( SvStream& rIStm )
    1380             : {
    1381             :     sal_uInt32          nCount;
    1382             :     sal_uInt16          nVersion;
    1383           0 :     OUString            aThemeName;
    1384             :     rtl_TextEncoding    nTextEncoding;
    1385             : 
    1386           0 :     rIStm.ReadUInt16( nVersion );
    1387           0 :     OString aTmpStr = read_uInt16_lenPrefixed_uInt8s_ToOString(rIStm);
    1388           0 :     rIStm.ReadUInt32( nCount );
    1389             : 
    1390           0 :     if( nVersion >= 0x0004 )
    1391             :     {
    1392             :         sal_uInt16 nTmp16;
    1393           0 :         rIStm.ReadUInt16( nTmp16 );
    1394           0 :         nTextEncoding = (rtl_TextEncoding) nTmp16;
    1395             :     }
    1396             :     else
    1397           0 :         nTextEncoding = RTL_TEXTENCODING_UTF8;
    1398             : 
    1399           0 :     aThemeName = OStringToOUString(aTmpStr, nTextEncoding);
    1400             : 
    1401           0 :     if( nCount <= ( 1L << 14 ) )
    1402             :     {
    1403             :         GalleryObject*  pObj;
    1404           0 :         INetURLObject   aRelURL1( GetParent()->GetRelativeURL() );
    1405           0 :         INetURLObject   aRelURL2( GetParent()->GetUserURL() );
    1406             :         sal_uInt32      nId1, nId2;
    1407             :         sal_Bool            bRel;
    1408             : 
    1409           0 :         for( size_t i = 0, n = aObjectList.size(); i < n; ++i )
    1410             :         {
    1411           0 :             pObj = aObjectList[ i ];
    1412           0 :             Broadcast( GalleryHint( GALLERY_HINT_CLOSE_OBJECT, GetName(), reinterpret_cast< sal_uIntPtr >( pObj ) ) );
    1413           0 :             Broadcast( GalleryHint( GALLERY_HINT_OBJECT_REMOVED, GetName(), reinterpret_cast< sal_uIntPtr >( pObj ) ) );
    1414           0 :             delete pObj;
    1415             :         }
    1416           0 :         aObjectList.clear();
    1417             : 
    1418           0 :         for( sal_uInt32 i = 0; i < nCount; i++ )
    1419             :         {
    1420           0 :             pObj = new GalleryObject;
    1421             : 
    1422           0 :             OUString    aFileName;
    1423           0 :             OUString    aPath;
    1424             :             sal_uInt16  nTemp;
    1425             : 
    1426           0 :             rIStm.ReadUChar( bRel );
    1427           0 :             OString aTempFileName = read_uInt16_lenPrefixed_uInt8s_ToOString(rIStm);
    1428           0 :             rIStm.ReadUInt32( pObj->nOffset );
    1429           0 :             rIStm.ReadUInt16( nTemp ); pObj->eObjKind = (SgaObjKind) nTemp;
    1430             : 
    1431           0 :             aFileName = OStringToOUString(aTempFileName, osl_getThreadTextEncoding());
    1432             : 
    1433           0 :             if( bRel )
    1434             :             {
    1435           0 :                 aFileName = aFileName.replaceAll( "\\", "/" );
    1436           0 :                 aPath = aRelURL1.GetMainURL( INetURLObject::NO_DECODE );
    1437             : 
    1438           0 :                 if( aFileName[ 0 ] != '/' )
    1439           0 :                         aPath += "/";
    1440             : 
    1441           0 :                 aPath += aFileName;
    1442             : 
    1443           0 :                 pObj->aURL = INetURLObject( aPath );
    1444             : 
    1445           0 :                 if( !FileExists( pObj->aURL ) )
    1446             :                 {
    1447           0 :                     aPath = aRelURL2.GetMainURL( INetURLObject::NO_DECODE );
    1448             : 
    1449           0 :                     if( aFileName[0] != '/' )
    1450           0 :                         aPath += "/";
    1451             : 
    1452           0 :                     aPath += aFileName;
    1453             : 
    1454             :                     // assign this URL, even in the case it is not valid (#94482)
    1455           0 :                     pObj->aURL = INetURLObject( aPath );
    1456             :                 }
    1457             :             }
    1458             :             else
    1459             :             {
    1460           0 :                 if( SGA_OBJ_SVDRAW == pObj->eObjKind )
    1461             :                 {
    1462           0 :                     const static OUString aBaseURLStr( "gallery/svdraw/" );
    1463             : 
    1464           0 :                     OUString aDummyURL( aBaseURLStr );
    1465           0 :                     pObj->aURL = INetURLObject( aDummyURL += aFileName, INET_PROT_PRIV_SOFFICE );
    1466             :                 }
    1467             :                 else
    1468             :                 {
    1469           0 :                     OUString aLocalURL;
    1470             : 
    1471           0 :                     pObj->aURL = INetURLObject( aFileName );
    1472             : 
    1473           0 :                     if( ( pObj->aURL.GetProtocol() == INET_PROT_NOT_VALID ) &&
    1474           0 :                         ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aFileName, aLocalURL ) )
    1475             :                     {
    1476           0 :                         pObj->aURL = INetURLObject( aLocalURL );
    1477           0 :                     }
    1478             :                 }
    1479             :             }
    1480           0 :             aObjectList.push_back( pObj );
    1481           0 :         }
    1482             : 
    1483           0 :         rIStm.ReadUInt32( nId1 ).ReadUInt32( nId2 );
    1484             : 
    1485             :         // In newer versions a 512 byte reserve buffer is located at the end,
    1486             :         // the data is located at the beginning of this buffer and are clamped
    1487             :         // by a VersionCompat.
    1488           0 :         if( !rIStm.IsEof() &&
    1489           0 :             nId1 == COMPAT_FORMAT( 'G', 'A', 'L', 'R' ) &&
    1490           0 :             nId2 == COMPAT_FORMAT( 'E', 'S', 'R', 'V' ) )
    1491             :         {
    1492           0 :             VersionCompat*  pCompat = new VersionCompat( rIStm, STREAM_READ );
    1493             :             sal_uInt32      nTemp32;
    1494           0 :             sal_Bool            bThemeNameFromResource = sal_False;
    1495             : 
    1496           0 :             rIStm.ReadUInt32( nTemp32 );
    1497             : 
    1498           0 :             if( pCompat->GetVersion() >= 2 )
    1499             :             {
    1500           0 :                 rIStm.ReadUChar( bThemeNameFromResource );
    1501             :             }
    1502             : 
    1503           0 :             SetId( nTemp32, bThemeNameFromResource );
    1504           0 :             delete pCompat;
    1505           0 :         }
    1506             :     }
    1507             :     else
    1508           0 :         rIStm.SetError( SVSTREAM_READ_ERROR );
    1509             : 
    1510           0 :     ImplSetModified( false );
    1511             : 
    1512           0 :     return rIStm;
    1513             : }
    1514             : 
    1515           0 : SvStream& WriteGalleryTheme( SvStream& rOut, const GalleryTheme& rTheme )
    1516             : {
    1517           0 :     return rTheme.WriteData( rOut );
    1518             : }
    1519             : 
    1520           0 : SvStream& ReadGalleryTheme( SvStream& rIn, GalleryTheme& rTheme )
    1521             : {
    1522           0 :     return rTheme.ReadData( rIn );
    1523             : }
    1524             : 
    1525           0 : void GalleryTheme::ImplSetModified( bool bModified )
    1526             : {
    1527           0 :     pThm->SetModified(bModified);
    1528           0 : }
    1529             : 
    1530           0 : const OUString& GalleryTheme::GetRealName() const { return pThm->GetThemeName(); }
    1531           0 : const INetURLObject& GalleryTheme::GetThmURL() const { return pThm->GetThmURL(); }
    1532           0 : const INetURLObject& GalleryTheme::GetSdgURL() const { return pThm->GetSdgURL(); }
    1533           0 : const INetURLObject& GalleryTheme::GetSdvURL() const { return pThm->GetSdvURL(); }
    1534           0 : sal_uInt32 GalleryTheme::GetId() const { return pThm->GetId(); }
    1535           0 : void GalleryTheme::SetId( sal_uInt32 nNewId, bool bResetThemeName ) { pThm->SetId( nNewId, bResetThemeName ); }
    1536           0 : bool GalleryTheme::IsThemeNameFromResource() const { return pThm->IsNameFromResource(); }
    1537           0 : bool GalleryTheme::IsReadOnly() const { return pThm->IsReadOnly(); }
    1538           0 : bool GalleryTheme::IsDefault() const { return pThm->IsDefault(); }
    1539           0 : bool GalleryTheme::IsModified() const { return pThm->IsModified(); }
    1540           0 : const OUString& GalleryTheme::GetName() const { return pThm->GetThemeName(); }
    1541             : 
    1542           0 : void GalleryTheme::InsertAllThemes( ListBox& rListBox )
    1543             : {
    1544           0 :     for( sal_uInt16 i = RID_GALLERYSTR_THEME_FIRST; i <= RID_GALLERYSTR_THEME_LAST; i++ )
    1545           0 :         rListBox.InsertEntry(GAL_RESSTR(i));
    1546           0 : }
    1547             : 
    1548             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10