diff options
Diffstat (limited to 'dtrans/source/win32/dtobj/DOTransferable.cxx')
-rw-r--r-- | dtrans/source/win32/dtobj/DOTransferable.cxx | 262 |
1 files changed, 131 insertions, 131 deletions
diff --git a/dtrans/source/win32/dtobj/DOTransferable.cxx b/dtrans/source/win32/dtobj/DOTransferable.cxx index 0252ac74b4bf..c6dd59fdb800 100644 --- a/dtrans/source/win32/dtobj/DOTransferable.cxx +++ b/dtrans/source/win32/dtobj/DOTransferable.cxx @@ -47,13 +47,124 @@ namespace const Type CPPUTYPE_OUSTRING = cppu::UnoType<OUString>::get(); inline - sal_Bool isValidFlavor( const DataFlavor& aFlavor ) + bool isValidFlavor( const DataFlavor& aFlavor ) { return ( aFlavor.MimeType.getLength( ) && ( ( aFlavor.DataType == CPPUTYPE_SEQINT8 ) || ( aFlavor.DataType == CPPUTYPE_OUSTRING ) ) ); } +void clipDataToByteStream( CLIPFORMAT cf, STGMEDIUM stgmedium, CDOTransferable::ByteSequence_t& aByteSequence ) +{ + CStgTransferHelper memTransferHelper; + + switch( stgmedium.tymed ) + { + case TYMED_HGLOBAL: + memTransferHelper.init( stgmedium.hGlobal ); + break; + + case TYMED_MFPICT: + memTransferHelper.init( stgmedium.hMetaFilePict ); + break; + + case TYMED_ENHMF: + memTransferHelper.init( stgmedium.hEnhMetaFile ); + break; + + case TYMED_ISTREAM: + //TODO: Has to be implemented + break; + + default: + throw UnsupportedFlavorException( ); + break; + } + + int nMemSize = memTransferHelper.memSize( cf ); + aByteSequence.realloc( nMemSize ); + memTransferHelper.read( aByteSequence.getArray( ), nMemSize ); +} + +inline +OUString byteStreamToOUString( CDOTransferable::ByteSequence_t& aByteStream ) +{ + sal_Int32 nWChars; + sal_Int32 nMemSize = aByteStream.getLength( ); + + // if there is a trailing L"\0" subtract 1 from length + if ( 0 == aByteStream[ aByteStream.getLength( ) - 2 ] && + 0 == aByteStream[ aByteStream.getLength( ) - 1 ] ) + nWChars = static_cast< sal_Int32 >( nMemSize / sizeof( sal_Unicode ) ) - 1; + else + nWChars = static_cast< sal_Int32 >( nMemSize / sizeof( sal_Unicode ) ); + + return OUString( reinterpret_cast< sal_Unicode* >( aByteStream.getArray( ) ), nWChars ); +} + +inline +Any byteStreamToAny( CDOTransferable::ByteSequence_t& aByteStream, const Type& aRequestedDataType ) +{ + Any aAny; + + if ( aRequestedDataType == CPPUTYPE_OUSTRING ) + { + OUString str = byteStreamToOUString( aByteStream ); + aAny = makeAny( str ); + } + else + aAny = makeAny( aByteStream ); + + return aAny; +} + +bool SAL_CALL cmpFullMediaType( + const Reference< XMimeContentType >& xLhs, const Reference< XMimeContentType >& xRhs ) +{ + return xLhs->getFullMediaType().equalsIgnoreAsciiCase( xRhs->getFullMediaType( ) ); +} + +bool SAL_CALL cmpAllContentTypeParameter( + const Reference< XMimeContentType >& xLhs, const Reference< XMimeContentType >& xRhs ) +{ + Sequence< OUString > xLhsFlavors = xLhs->getParameters( ); + Sequence< OUString > xRhsFlavors = xRhs->getParameters( ); + bool bRet = true; + + try + { + if ( xLhsFlavors.getLength( ) == xRhsFlavors.getLength( ) ) + { + OUString pLhs; + OUString pRhs; + + for ( sal_Int32 i = 0; i < xLhsFlavors.getLength( ); i++ ) + { + pLhs = xLhs->getParameterValue( xLhsFlavors[i] ); + pRhs = xRhs->getParameterValue( xLhsFlavors[i] ); + + if ( !pLhs.equalsIgnoreAsciiCase( pRhs ) ) + { + bRet = false; + break; + } + } + } + else + bRet = false; + } + catch( NoSuchElementException& ) + { + bRet = false; + } + catch( IllegalArgumentException& ) + { + bRet = false; + } + + return bRet; +} + } // end namespace Reference< XTransferable > SAL_CALL CDOTransferable::create( const Reference< XComponentContext >& rxContext, @@ -74,7 +185,7 @@ CDOTransferable::CDOTransferable( m_rDataObject( rDataObject ), m_xContext( rxContext ), m_DataFormatTranslator( rxContext ), - m_bUnicodeRegistered( sal_False ), + m_bUnicodeRegistered( false ), m_TxtFormatOnClipboard( CF_INVALID ) { } @@ -101,7 +212,7 @@ Any SAL_CALL CDOTransferable::getTransferData( const DataFlavor& aFlavor ) } catch( UnsupportedFlavorException& ) { - if ( m_DataFormatTranslator.isUnicodeTextFormat( fetc.getClipformat( ) ) && + if ( CDataFormatTranslator::isUnicodeTextFormat( fetc.getClipformat( ) ) && m_bUnicodeRegistered ) { OUString aUnicodeText = synthesizeUnicodeText( ); @@ -153,9 +264,9 @@ sal_Bool SAL_CALL CDOTransferable::isDataFlavorSupported( const DataFlavor& aFla for ( sal_Int32 i = 0; i < m_FlavorList.getLength( ); i++ ) if ( compareDataFlavors( aFlavor, m_FlavorList[i] ) ) - return sal_True; + return true; - return sal_False; + return false; } // the list of dataflavors currently on the clipboard will be initialized @@ -176,7 +287,7 @@ void SAL_CALL CDOTransferable::initFlavorList( ) pEnumFormatEtc->Reset( ); FORMATETC fetc; - while ( S_FALSE != pEnumFormatEtc->Next( 1, &fetc, NULL ) ) + while ( S_FALSE != pEnumFormatEtc->Next( 1, &fetc, nullptr ) ) { // we use locales only to determine the // charset if there is text on the cliboard @@ -187,23 +298,23 @@ void SAL_CALL CDOTransferable::initFlavorList( ) DataFlavor aFlavor = formatEtcToDataFlavor( fetc ); // if text or oemtext is offered we also pretend to have unicode text - if ( m_DataFormatTranslator.isOemOrAnsiTextFormat( fetc.cfFormat ) && + if ( CDataFormatTranslator::isOemOrAnsiTextFormat( fetc.cfFormat ) && !m_bUnicodeRegistered ) { addSupportedFlavor( aFlavor ); m_TxtFormatOnClipboard = fetc.cfFormat; - m_bUnicodeRegistered = sal_True; + m_bUnicodeRegistered = true; // register unicode text as accompany format aFlavor = formatEtcToDataFlavor( - m_DataFormatTranslator.getFormatEtcForClipformat( CF_UNICODETEXT ) ); + CDataFormatTranslator::getFormatEtcForClipformat( CF_UNICODETEXT ) ); addSupportedFlavor( aFlavor ); } else if ( (CF_UNICODETEXT == fetc.cfFormat) && !m_bUnicodeRegistered ) { addSupportedFlavor( aFlavor ); - m_bUnicodeRegistered = sal_True; + m_bUnicodeRegistered = true; } else addSupportedFlavor( aFlavor ); @@ -250,7 +361,7 @@ LCID SAL_CALL CDOTransferable::getLocaleFromClipboard( ) try { - CFormatEtc fetc = m_DataFormatTranslator.getFormatEtcForClipformat( CF_LOCALE ); + CFormatEtc fetc = CDataFormatTranslator::getFormatEtcForClipformat( CF_LOCALE ); ByteSequence_t aLCIDSeq = getClipboardData( fetc ); lcid = *(reinterpret_cast<LCID*>( aLCIDSeq.getArray( ) ) ); @@ -355,7 +466,7 @@ OUString SAL_CALL CDOTransferable::synthesizeUnicodeText( ) if ( CF_TEXT == m_TxtFormatOnClipboard ) { - fetc = m_DataFormatTranslator.getFormatEtcForClipformat( CF_TEXT ); + fetc = CDataFormatTranslator::getFormatEtcForClipformat( CF_TEXT ); aTextSequence = getClipboardData( fetc ); // determine the codepage used for text conversion @@ -363,14 +474,14 @@ OUString SAL_CALL CDOTransferable::synthesizeUnicodeText( ) } else if ( CF_OEMTEXT == m_TxtFormatOnClipboard ) { - fetc = m_DataFormatTranslator.getFormatEtcForClipformat( CF_OEMTEXT ); + fetc = CDataFormatTranslator::getFormatEtcForClipformat( CF_OEMTEXT ); aTextSequence = getClipboardData( fetc ); // determine the codepage used for text conversion cpForTxtCnvt = getWinCPFromLocaleId( lcid, LOCALE_IDEFAULTCODEPAGE ).toInt32( ); } else - OSL_ASSERT( sal_False ); + OSL_ASSERT( false ); CStgTransferHelper stgTransferHelper; @@ -379,79 +490,15 @@ OUString SAL_CALL CDOTransferable::synthesizeUnicodeText( ) reinterpret_cast<char*>( aTextSequence.getArray( ) ), sal::static_int_cast<sal_uInt32>(-1), // Huh ? stgTransferHelper, - sal_False); + false); CRawHGlobalPtr ptrHGlob(stgTransferHelper); - sal_Unicode* pWChar = reinterpret_cast<sal_Unicode*>(ptrHGlob.GetMemPtr()); + sal_Unicode* pWChar = static_cast<sal_Unicode*>(ptrHGlob.GetMemPtr()); return OUString(pWChar); } -void CDOTransferable::clipDataToByteStream( CLIPFORMAT cf, STGMEDIUM stgmedium, ByteSequence_t& aByteSequence ) -{ - CStgTransferHelper memTransferHelper; - - switch( stgmedium.tymed ) - { - case TYMED_HGLOBAL: - memTransferHelper.init( stgmedium.hGlobal ); - break; - - case TYMED_MFPICT: - memTransferHelper.init( stgmedium.hMetaFilePict ); - break; - - case TYMED_ENHMF: - memTransferHelper.init( stgmedium.hEnhMetaFile ); - break; - - case TYMED_ISTREAM: - //TODO: Has to be implemented - break; - - default: - throw UnsupportedFlavorException( ); - break; - } - - int nMemSize = memTransferHelper.memSize( cf ); - aByteSequence.realloc( nMemSize ); - memTransferHelper.read( aByteSequence.getArray( ), nMemSize ); -} - -inline -Any CDOTransferable::byteStreamToAny( ByteSequence_t& aByteStream, const Type& aRequestedDataType ) -{ - Any aAny; - - if ( aRequestedDataType == CPPUTYPE_OUSTRING ) - { - OUString str = byteStreamToOUString( aByteStream ); - aAny = makeAny( str ); - } - else - aAny = makeAny( aByteStream ); - - return aAny; -} - -inline -OUString CDOTransferable::byteStreamToOUString( ByteSequence_t& aByteStream ) -{ - sal_Int32 nWChars; - sal_Int32 nMemSize = aByteStream.getLength( ); - - // if there is a trailing L"\0" subtract 1 from length - if ( 0 == aByteStream[ aByteStream.getLength( ) - 2 ] && - 0 == aByteStream[ aByteStream.getLength( ) - 1 ] ) - nWChars = static_cast< sal_Int32 >( nMemSize / sizeof( sal_Unicode ) ) - 1; - else - nWChars = static_cast< sal_Int32 >( nMemSize / sizeof( sal_Unicode ) ); - - return OUString( reinterpret_cast< sal_Unicode* >( aByteStream.getArray( ) ), nWChars ); -} - -sal_Bool SAL_CALL CDOTransferable::compareDataFlavors( +bool SAL_CALL CDOTransferable::compareDataFlavors( const DataFlavor& lhs, const DataFlavor& rhs ) { if ( !m_rXMimeCntFactory.is( ) ) @@ -459,7 +506,7 @@ sal_Bool SAL_CALL CDOTransferable::compareDataFlavors( m_rXMimeCntFactory = MimeContentTypeFactory::create( m_xContext ); } - sal_Bool bRet = sal_False; + bool bRet = false; try { @@ -474,54 +521,7 @@ sal_Bool SAL_CALL CDOTransferable::compareDataFlavors( catch( IllegalArgumentException& ) { OSL_FAIL( "Invalid content type detected" ); - bRet = sal_False; - } - - return bRet; -} - -sal_Bool SAL_CALL CDOTransferable::cmpFullMediaType( - const Reference< XMimeContentType >& xLhs, const Reference< XMimeContentType >& xRhs ) const -{ - return xLhs->getFullMediaType().equalsIgnoreAsciiCase( xRhs->getFullMediaType( ) ); -} - -sal_Bool SAL_CALL CDOTransferable::cmpAllContentTypeParameter( - const Reference< XMimeContentType >& xLhs, const Reference< XMimeContentType >& xRhs ) const -{ - Sequence< OUString > xLhsFlavors = xLhs->getParameters( ); - Sequence< OUString > xRhsFlavors = xRhs->getParameters( ); - sal_Bool bRet = sal_True; - - try - { - if ( xLhsFlavors.getLength( ) == xRhsFlavors.getLength( ) ) - { - OUString pLhs; - OUString pRhs; - - for ( sal_Int32 i = 0; i < xLhsFlavors.getLength( ); i++ ) - { - pLhs = xLhs->getParameterValue( xLhsFlavors[i] ); - pRhs = xRhs->getParameterValue( xLhsFlavors[i] ); - - if ( !pLhs.equalsIgnoreAsciiCase( pRhs ) ) - { - bRet = sal_False; - break; - } - } - } - else - bRet = sal_False; - } - catch( NoSuchElementException& ) - { - bRet = sal_False; - } - catch( IllegalArgumentException& ) - { - bRet = sal_False; + bRet = false; } return bRet; @@ -532,7 +532,7 @@ css::uno::Any SAL_CALL CDOTransferable::getData( const Sequence< sal_Int8>& aPro { Any retVal; - sal_uInt8 * arProcCaller= (sal_uInt8*)(sal_Int8*) aProcessId.getConstArray(); + sal_Int8 const * arProcCaller= aProcessId.getConstArray(); sal_uInt8 arId[16]; rtl_getGlobalProcessId(arId); if( ! memcmp( arId, arProcCaller,16)) |