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:
parent
a90e12b227
commit
6f10ee6e56
1 changed files with 2 additions and 184 deletions
|
@ -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()
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue