diff options
Diffstat (limited to 'svtools/source/misc/transfer2.cxx')
-rw-r--r-- | svtools/source/misc/transfer2.cxx | 622 |
1 files changed, 0 insertions, 622 deletions
diff --git a/svtools/source/misc/transfer2.cxx b/svtools/source/misc/transfer2.cxx deleted file mode 100644 index 192fd70a19..0000000000 --- a/svtools/source/misc/transfer2.cxx +++ /dev/null @@ -1,622 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_svtools.hxx" -#include <osl/mutex.hxx> -#include <tools/debug.hxx> -#include <tools/urlobj.hxx> -#include <unotools/ucbstreamhelper.hxx> -#include <sot/exchange.hxx> -#include <sot/storage.hxx> -#include <vcl/bitmap.hxx> -#include <vcl/gdimtf.hxx> -#include <vcl/graph.hxx> -#include <vcl/svapp.hxx> -#include <vcl/window.hxx> -#include <comphelper/processfactory.hxx> -#include <com/sun/star/datatransfer/dnd/XDropTargetDragContext.hpp> -#include "svl/urlbmk.hxx" -#include <svtools/inetimg.hxx> -#include <svtools/imap.hxx> -#include <svtools/transfer.hxx> - -// -------------- -// - Namespaces - -// -------------- - -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::io; -using namespace ::com::sun::star::datatransfer; -using namespace ::com::sun::star::datatransfer::clipboard; -using namespace ::com::sun::star::datatransfer::dnd; - -// ----------------------------------------- -// - DragSourceHelper::DragGestureListener - -// ----------------------------------------- - -DragSourceHelper::DragGestureListener::DragGestureListener( DragSourceHelper& rDragSourceHelper ) : - mrParent( rDragSourceHelper ) -{ -} - -// ----------------------------------------------------------------------------- - -DragSourceHelper::DragGestureListener::~DragGestureListener() -{ -} - -// ----------------------------------------------------------------------------- - -void SAL_CALL DragSourceHelper::DragGestureListener::disposing( const EventObject& ) throw( RuntimeException ) -{ -} - -// ----------------------------------------------------------------------------- - -void SAL_CALL DragSourceHelper::DragGestureListener::dragGestureRecognized( const DragGestureEvent& rDGE ) throw( RuntimeException ) -{ - const SolarMutexGuard aGuard; - - const Point aPtPixel( rDGE.DragOriginX, rDGE.DragOriginY ); - mrParent.StartDrag( rDGE.DragAction, aPtPixel ); -} - -// -------------------- -// - DragSourceHelper - -// -------------------- - -DragSourceHelper::DragSourceHelper( Window* pWindow ) : - mxDragGestureRecognizer( pWindow->GetDragGestureRecognizer() ) -{ - if( mxDragGestureRecognizer.is() ) - { - mxDragGestureListener = new DragSourceHelper::DragGestureListener( *this ); - mxDragGestureRecognizer->addDragGestureListener( mxDragGestureListener ); - } -} - -// ----------------------------------------------------------------------------- - -DragSourceHelper::~DragSourceHelper() -{ - if( mxDragGestureRecognizer.is() ) - mxDragGestureRecognizer->removeDragGestureListener( mxDragGestureListener ); -} - -// ----------------------------------------------------------------------------- - -void DragSourceHelper::StartDrag( sal_Int8, const Point& ) -{ -} - -// ---------------------------------------- -// - DropTargetHelper::DropTargetListener - -// ---------------------------------------- - -DropTargetHelper::DropTargetListener::DropTargetListener( DropTargetHelper& rDropTargetHelper ) : - mrParent( rDropTargetHelper ), - mpLastDragOverEvent( NULL ) -{ -} - -// ----------------------------------------------------------------------------- - -DropTargetHelper::DropTargetListener::~DropTargetListener() -{ - delete mpLastDragOverEvent; -} - -// ----------------------------------------------------------------------------- - -void SAL_CALL DropTargetHelper::DropTargetListener::disposing( const EventObject& ) throw( RuntimeException ) -{ -} - -// ----------------------------------------------------------------------------- - -void SAL_CALL DropTargetHelper::DropTargetListener::drop( const DropTargetDropEvent& rDTDE ) throw( RuntimeException ) -{ - const SolarMutexGuard aGuard; - - try - { - AcceptDropEvent aAcceptEvent; - ExecuteDropEvent aExecuteEvt( rDTDE.DropAction & ~DNDConstants::ACTION_DEFAULT, Point( rDTDE.LocationX, rDTDE.LocationY ), rDTDE ); - sal_Int8 nRet = DNDConstants::ACTION_NONE; - - aExecuteEvt.mbDefault = ( ( rDTDE.DropAction & DNDConstants::ACTION_DEFAULT ) != 0 ); - - // in case of a default action, call ::AcceptDrop first and use the returned - // accepted action as the execute action in the call to ::ExecuteDrop - aAcceptEvent.mnAction = aExecuteEvt.mnAction; - aAcceptEvent.maPosPixel = aExecuteEvt.maPosPixel; - (DropTargetEvent&)( aAcceptEvent.maDragEvent ) = (DropTargetEvent&) rDTDE; - ( (DropTargetDragEvent&)( aAcceptEvent.maDragEvent ) ).DropAction = rDTDE.DropAction; - ( (DropTargetDragEvent&)( aAcceptEvent.maDragEvent ) ).LocationX = rDTDE.LocationX; - ( (DropTargetDragEvent&)( aAcceptEvent.maDragEvent ) ).LocationY = rDTDE.LocationY; - ( (DropTargetDragEvent&)( aAcceptEvent.maDragEvent ) ).SourceActions = rDTDE.SourceActions; - aAcceptEvent.mbLeaving = sal_False; - aAcceptEvent.mbDefault = aExecuteEvt.mbDefault; - - nRet = mrParent.AcceptDrop( aAcceptEvent ); - - if( DNDConstants::ACTION_NONE != nRet ) - { - rDTDE.Context->acceptDrop( nRet ); - - if( aExecuteEvt.mbDefault ) - aExecuteEvt.mnAction = nRet; - - nRet = mrParent.ExecuteDrop( aExecuteEvt ); - } - - rDTDE.Context->dropComplete( DNDConstants::ACTION_NONE != nRet ); - - if( mpLastDragOverEvent ) - { - delete mpLastDragOverEvent; - mpLastDragOverEvent = NULL; - } - } - catch( const ::com::sun::star::uno::Exception& ) - { - } -} - -// ----------------------------------------------------------------------------- - -void SAL_CALL DropTargetHelper::DropTargetListener::dragEnter( const DropTargetDragEnterEvent& rDTDEE ) throw( RuntimeException ) -{ - const SolarMutexGuard aGuard; - - try - { - mrParent.ImplBeginDrag( rDTDEE.SupportedDataFlavors ); - } - catch( const ::com::sun::star::uno::Exception& ) - { - } - - dragOver( rDTDEE ); -} - -// ----------------------------------------------------------------------------- - -void SAL_CALL DropTargetHelper::DropTargetListener::dragOver( const DropTargetDragEvent& rDTDE ) throw( RuntimeException ) -{ - const SolarMutexGuard aGuard; - - try - { - if( mpLastDragOverEvent ) - delete mpLastDragOverEvent; - - mpLastDragOverEvent = new AcceptDropEvent( rDTDE.DropAction & ~DNDConstants::ACTION_DEFAULT, Point( rDTDE.LocationX, rDTDE.LocationY ), rDTDE ); - mpLastDragOverEvent->mbDefault = ( ( rDTDE.DropAction & DNDConstants::ACTION_DEFAULT ) != 0 ); - - const sal_Int8 nRet = mrParent.AcceptDrop( *mpLastDragOverEvent ); - - if( DNDConstants::ACTION_NONE == nRet ) - rDTDE.Context->rejectDrag(); - else - rDTDE.Context->acceptDrag( nRet ); - } - catch( const ::com::sun::star::uno::Exception& ) - { - } -} - -// ----------------------------------------------------------------------------- - -void SAL_CALL DropTargetHelper::DropTargetListener::dragExit( const DropTargetEvent& ) throw( RuntimeException ) -{ - const SolarMutexGuard aGuard; - - try - { - if( mpLastDragOverEvent ) - { - mpLastDragOverEvent->mbLeaving = sal_True; - mrParent.AcceptDrop( *mpLastDragOverEvent ); - delete mpLastDragOverEvent; - mpLastDragOverEvent = NULL; - } - - mrParent.ImplEndDrag(); - } - catch( const ::com::sun::star::uno::Exception& ) - { - } -} - - -// ----------------------------------------------------------------------------- - -void SAL_CALL DropTargetHelper::DropTargetListener::dropActionChanged( const DropTargetDragEvent& ) throw( RuntimeException ) -{ -} - -// -------------------- -// - DropTargetHelper - -// -------------------- - -DropTargetHelper::DropTargetHelper( Window* pWindow ) : - mxDropTarget( pWindow->GetDropTarget() ), - mpFormats( new DataFlavorExVector ) -{ - ImplConstruct(); -} - -// ----------------------------------------------------------------------------- - -DropTargetHelper::DropTargetHelper( const Reference< XDropTarget >& rxDropTarget ) : - mxDropTarget( rxDropTarget ), - mpFormats( new DataFlavorExVector ) -{ - ImplConstruct(); -} - -// ----------------------------------------------------------------------------- - -DropTargetHelper::~DropTargetHelper() -{ - if( mxDropTarget.is() ) - mxDropTarget->removeDropTargetListener( mxDropTargetListener ); - - delete mpFormats; -} - -// ----------------------------------------------------------------------------- - -void DropTargetHelper::ImplConstruct() -{ - if( mxDropTarget.is() ) - { - mxDropTargetListener = new DropTargetHelper::DropTargetListener( *this ); - mxDropTarget->addDropTargetListener( mxDropTargetListener ); - mxDropTarget->setActive( sal_True ); - } -} - -// ----------------------------------------------------------------------------- - -void DropTargetHelper::ImplBeginDrag( const Sequence< DataFlavor >& rSupportedDataFlavors ) -{ - mpFormats->clear(); - TransferableDataHelper::FillDataFlavorExVector( rSupportedDataFlavors, *mpFormats ); -} - -// ----------------------------------------------------------------------------- - -void DropTargetHelper::ImplEndDrag() -{ - mpFormats->clear(); -} - -// ----------------------------------------------------------------------------- - -sal_Int8 DropTargetHelper::AcceptDrop( const AcceptDropEvent& ) -{ - return( DNDConstants::ACTION_NONE ); -} - -// ----------------------------------------------------------------------------- - -sal_Int8 DropTargetHelper::ExecuteDrop( const ExecuteDropEvent& ) -{ - return( DNDConstants::ACTION_NONE ); -} - -// ----------------------------------------------------------------------------- - -sal_Bool DropTargetHelper::IsDropFormatSupported( SotFormatStringId nFormat ) -{ - DataFlavorExVector::iterator aIter( mpFormats->begin() ), aEnd( mpFormats->end() ); - sal_Bool bRet = sal_False; - - while( aIter != aEnd ) - { - if( nFormat == (*aIter++).mnSotId ) - { - bRet = sal_True; - aIter = aEnd; - } - } - - return bRet; -} - -// ----------------------------------------------------------------------------- - -sal_Bool DropTargetHelper::IsDropFormatSupported( const DataFlavor& rFlavor ) -{ - DataFlavorExVector::iterator aIter( mpFormats->begin() ), aEnd( mpFormats->end() ); - sal_Bool bRet = sal_False; - - while( aIter != aEnd ) - { - if( TransferableDataHelper::IsEqual( rFlavor, *aIter++ ) ) - { - bRet = sal_True; - aIter = aEnd; - } - } - - return bRet; -} - -// ----------------------------------------------------------------------------- -// TransferDataContainer -// ----------------------------------------------------------------------------- - -struct TDataCntnrEntry_Impl -{ - ::com::sun::star::uno::Any aAny; - SotFormatStringId nId; -}; - -// ----------------------------------------------------------------------------- - -typedef ::std::list< TDataCntnrEntry_Impl > TDataCntnrEntryList; - -// ----------------------------------------------------------------------------- - -struct TransferDataContainer_Impl -{ - TDataCntnrEntryList aFmtList; - Link aFinshedLnk; - INetBookmark* pBookmk; - Graphic* pGrf; - - TransferDataContainer_Impl() - : pBookmk( 0 ), pGrf( 0 ) - { - } - - ~TransferDataContainer_Impl() - { - delete pBookmk; - delete pGrf; - } -}; - -// ----------------------------------------------------------------------------- - -TransferDataContainer::TransferDataContainer() - : pImpl( new TransferDataContainer_Impl ) -{ -} - -// ----------------------------------------------------------------------------- - -TransferDataContainer::~TransferDataContainer() -{ - delete pImpl; -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::AddSupportedFormats() -{ -} - -// ----------------------------------------------------------------------------- - -sal_Bool TransferDataContainer::GetData( const - ::com::sun::star::datatransfer::DataFlavor& rFlavor ) -{ - TDataCntnrEntryList::iterator aIter( pImpl->aFmtList.begin() ), - aEnd( pImpl->aFmtList.end() ); - sal_Bool bFnd = sal_False; - sal_uLong nFmtId = SotExchange::GetFormat( rFlavor ); - - // test first the list - for( ; aIter != aEnd; ++aIter ) - { - TDataCntnrEntry_Impl& rEntry = (TDataCntnrEntry_Impl&)*aIter; - if( nFmtId == rEntry.nId ) - { - bFnd = SetAny( rEntry.aAny, rFlavor ); - break; - } - } - - // test second the bookmark pointer - if( !bFnd ) - switch( nFmtId ) - { - case SOT_FORMAT_STRING: - case SOT_FORMATSTR_ID_SOLK: - case SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK: - case SOT_FORMATSTR_ID_FILECONTENT: - case SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR: - case SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR: - if( pImpl->pBookmk ) - bFnd = SetINetBookmark( *pImpl->pBookmk, rFlavor ); - break; - - case SOT_FORMATSTR_ID_SVXB: - case SOT_FORMAT_BITMAP: - case SOT_FORMAT_GDIMETAFILE: - if( pImpl->pGrf ) - bFnd = SetGraphic( *pImpl->pGrf, rFlavor ); - break; - } - - return bFnd; -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::CopyINetBookmark( const INetBookmark& rBkmk ) -{ - if( !pImpl->pBookmk ) - pImpl->pBookmk = new INetBookmark( rBkmk ); - else - *pImpl->pBookmk = rBkmk; - - AddFormat( SOT_FORMAT_STRING ); - AddFormat( SOT_FORMATSTR_ID_SOLK ); - AddFormat( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ); - AddFormat( SOT_FORMATSTR_ID_FILECONTENT ); - AddFormat( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR ); - AddFormat( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR ); -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::CopyAnyData( sal_uLong nFormatId, - const sal_Char* pData, sal_uLong nLen ) -{ - if( nLen ) - { - TDataCntnrEntry_Impl aEntry; - aEntry.nId = nFormatId; - - Sequence< sal_Int8 > aSeq( nLen ); - memcpy( aSeq.getArray(), pData, nLen ); - aEntry.aAny <<= aSeq; - pImpl->aFmtList.push_back( aEntry ); - AddFormat( nFormatId ); - } -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::CopyByteString( sal_uLong nFormatId, - const ByteString& rStr ) -{ - CopyAnyData( nFormatId, rStr.GetBuffer(), rStr.Len() ); -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::CopyINetImage( const INetImage& rINtImg ) -{ - SvMemoryStream aMemStm( 1024, 1024 ); - aMemStm.SetVersion( SOFFICE_FILEFORMAT_50 ); - rINtImg.Write( aMemStm, SOT_FORMATSTR_ID_INET_IMAGE ); - CopyAnyData( SOT_FORMATSTR_ID_INET_IMAGE, (sal_Char*)aMemStm.GetData(), - aMemStm.Seek( STREAM_SEEK_TO_END ) ); -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::CopyImageMap( const ImageMap& rImgMap ) -{ - SvMemoryStream aMemStm( 8192, 8192 ); - aMemStm.SetVersion( SOFFICE_FILEFORMAT_50 ); - rImgMap.Write( aMemStm, String() ); - CopyAnyData( SOT_FORMATSTR_ID_SVIM, (sal_Char*)aMemStm.GetData(), - aMemStm.Seek( STREAM_SEEK_TO_END ) ); -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::CopyGraphic( const Graphic& rGrf ) -{ - GraphicType nType = rGrf.GetType(); - if( GRAPHIC_NONE != nType ) - { - if( !pImpl->pGrf ) - pImpl->pGrf = new Graphic( rGrf ); - else - *pImpl->pGrf = rGrf; - - AddFormat( SOT_FORMATSTR_ID_SVXB ); - if( GRAPHIC_BITMAP == nType ) - AddFormat( SOT_FORMAT_BITMAP ); - else if( GRAPHIC_GDIMETAFILE == nType ) - AddFormat( SOT_FORMAT_GDIMETAFILE ); - } -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::CopyString( sal_uInt16 nFmt, const String& rStr ) -{ - if( rStr.Len() ) - { - TDataCntnrEntry_Impl aEntry; - aEntry.nId = nFmt; - rtl::OUString aStr( rStr ); - aEntry.aAny <<= aStr; - pImpl->aFmtList.push_back( aEntry ); - AddFormat( aEntry.nId ); - } -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::CopyString( const String& rStr ) -{ - CopyString( SOT_FORMAT_STRING, rStr ); -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::CopyAny( sal_uInt16 nFmt, - const ::com::sun::star::uno::Any& rAny ) -{ - TDataCntnrEntry_Impl aEntry; - aEntry.nId = nFmt; - aEntry.aAny = rAny; - pImpl->aFmtList.push_back( aEntry ); - AddFormat( aEntry.nId ); -} - -// ----------------------------------------------------------------------------- - -sal_Bool TransferDataContainer::HasAnyData() const -{ - return pImpl->aFmtList.begin() != pImpl->aFmtList.end() || - 0 != pImpl->pBookmk; -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::StartDrag( - Window* pWindow, sal_Int8 nDragSourceActions, - const Link& rLnk, sal_Int32 nDragPointer, sal_Int32 nDragImage ) -{ - pImpl->aFinshedLnk = rLnk; - TransferableHelper::StartDrag( pWindow, nDragSourceActions, - nDragPointer, nDragImage ); -} - -// ----------------------------------------------------------------------------- - -void TransferDataContainer::DragFinished( sal_Int8 nDropAction ) -{ - if( pImpl->aFinshedLnk.IsSet() ) - pImpl->aFinshedLnk.Call( &nDropAction ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |