INTEGRATION: CWS impress85 (1.87.112); FILE MERGED

2006/02/10 17:04:06 sj 1.87.112.1: #i58428# added audio export
This commit is contained in:
Rüdiger Timm 2006-03-06 08:03:32 +00:00
parent a90e12b227
commit 6f10ee6e56

View file

@ -4,9 +4,9 @@
*
* $RCSfile: epptso.cxx,v $
*
* $Revision: 1.89 $
* $Revision: 1.90 $
*
* last change: $Author: rt $ $Date: 2006-02-09 14:05:31 $
* last change: $Author: rt $ $Date: 2006-03-06 09:03:32 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
@ -367,188 +367,6 @@ void GroupTable::SkipCurrentGroup()
// ---------------------------------------------------------------------------------------------
SoundEntry::SoundEntry( const String& rString ) :
aSoundURL( rString ),
nFileSize( 0 )
{
try
{
::ucb::Content aCnt( aSoundURL,
::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >() );
sal_Int64 nVal;
::cppu::convertPropertyValue( nVal, aCnt.getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Size" ) ) ) );
nFileSize = (sal_uInt32)nVal;
}
catch( ::com::sun::star::uno::Exception& )
{
}
};
String SoundEntry::ImplGetName() const
{
INetURLObject aTmp( aSoundURL );
return aTmp.GetName();
}
String SoundEntry::ImplGetExtension() const
{
INetURLObject aTmp( aSoundURL );
String aExtension( aTmp.GetExtension() );
if ( aExtension.Len() )
aExtension.Insert( (sal_Unicode)'.', 0 );
return aExtension;
}
sal_Bool SoundEntry::IsSameURL( const String& rURL ) const
{
return ( rURL == aSoundURL );
}
sal_uInt32 SoundEntry::GetSize( sal_uInt32 nId ) const
{
String aName( ImplGetName() );
String aExtension( ImplGetExtension() );
sal_uInt32 nSize = 8; // SoundContainer Header
if ( aName.Len() ) // String Atom ( instance 0 - name of sound )
nSize += aName.Len() * 2 + 8;
if ( aExtension.Len() ) // String Atom ( instance 1 - extension of sound )
nSize += aExtension.Len() * 2 + 8;
String aId( String::CreateFromInt32( nId ) ); // String Atom ( instance 2 - reference id )
nSize += 2 * aId.Len() + 8;
nSize += nFileSize + 8; // SoundData Atom
return nSize;
}
void SoundEntry::Write( SvStream& rSt, sal_uInt32 nId )
{
try
{
::ucb::Content aCnt( aSoundURL,
::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >() );
// create SoundContainer
rSt << (sal_uInt32)( ( EPP_Sound << 16 ) | 0xf ) << (sal_uInt32)( GetSize( nId ) - 8 );
String aSoundName( ImplGetName() );
sal_uInt16 i, nSoundNameLen = aSoundName.Len();
if ( nSoundNameLen )
{
// name of sound ( instance 0 )
rSt << (sal_uInt32)( EPP_CString << 16 ) << (sal_uInt32)( nSoundNameLen * 2 );
for ( i = 0; i < nSoundNameLen; i++ )
rSt << aSoundName.GetChar( i );
}
String aExtension( ImplGetExtension() );
sal_uInt32 nExtensionLen = aExtension.Len();
if ( nExtensionLen )
{
// extension of sound ( instance 1 )
rSt << (sal_uInt32)( ( EPP_CString << 16 ) | 16 ) << (sal_uInt32)( nExtensionLen * 2 );
for ( i = 0; i < nExtensionLen; i++ )
rSt << aExtension.GetChar( i );
}
// id of sound ( instance 2 )
String aId( String::CreateFromInt32( nId ) );
sal_uInt32 nIdLen = aId.Len();
rSt << (sal_uInt32)( ( EPP_CString << 16 ) | 32 ) << (sal_uInt32)( nIdLen * 2 );
for ( i = 0; i < nIdLen; i++ )
rSt << aId.GetChar( i );
rSt << (sal_uInt32)( EPP_SoundData << 16 ) << (sal_uInt32)( nFileSize );
sal_uInt32 nBytesLeft = nFileSize;
SvStream* pSourceFile = ::utl::UcbStreamHelper::CreateStream( aSoundURL, STREAM_READ );
if ( pSourceFile )
{
sal_uInt8* pBuf = new sal_uInt8[ 0x10000 ]; // 64 kB Buffer
while ( nBytesLeft )
{
sal_uInt32 nToDo = ( nBytesLeft > 0x10000 ) ? 0x10000 : nBytesLeft;
pSourceFile->Read( pBuf, nToDo );
rSt.Write( pBuf, nToDo );
nBytesLeft -= nToDo;
}
delete pSourceFile;
delete[] pBuf;
}
}
catch( ::com::sun::star::uno::Exception& )
{
}
}
SoundCollection::~SoundCollection()
{
for( void* pPtr = List::First(); pPtr; pPtr = List::Next() )
delete (SoundEntry*)pPtr;
}
sal_uInt32 SoundCollection::GetId( const String& rString )
{
sal_uInt32 nSoundId = 0;
if( rString.Len() )
{
const sal_uInt32 nCount = Count();
for( ; nSoundId < nCount; nSoundId++ )
if( ImplGetByIndex( nSoundId )->IsSameURL( rString ) )
break;
if ( nSoundId++ == nCount )
{
SoundEntry* pEntry = new SoundEntry( rString );
if ( pEntry->GetFileSize() )
List::Insert( pEntry, LIST_APPEND );
else
{
nSoundId = 0; // only insert sounds that are accessible
delete pEntry;
}
}
}
return nSoundId;
}
const SoundEntry* SoundCollection::ImplGetByIndex( sal_uInt32 nIndex ) const
{
return (SoundEntry*)List::GetObject( nIndex );
}
sal_uInt32 SoundCollection::GetSize() const
{
sal_uInt32 nSize = 0;
sal_uInt32 i, nCount = Count();
if ( nCount )
{
nSize += 8 + 12; // size of SoundCollectionContainerHeader + SoundCollAtom
for ( i = 0; i < nCount; i++ )
nSize += ImplGetByIndex( i )->GetSize( i + 1 );
}
return nSize;
}
void SoundCollection::Write( SvStream& rSt )
{
sal_uInt32 i, nCount = Count();
if ( nCount )
{
// create SoundCollection Container
rSt << (sal_uInt16)0xf << (sal_uInt16)EPP_SoundCollection << (sal_uInt32)( GetSize() - 8 );
// create SoundCollAtom ( reference to the next free SoundId );
rSt << (sal_uInt32)( EPP_SoundCollAtom << 16 ) << (sal_uInt32)4 << nCount;
for ( i = 0; i < nCount; i++ )
((SoundEntry*)List::GetObject( i ))->Write( rSt, i + 1 );
}
}
// ---------------------------------------------------------------------------------------------
FontCollectionEntry::~FontCollectionEntry()
{
}