20#include <com/sun/star/embed/XEmbeddedObject.hpp>
21#include <com/sun/star/embed/XEmbedPersist.hpp>
22#include <com/sun/star/embed/NoVisualAreaSizeException.hpp>
23#include <com/sun/star/datatransfer/XTransferable.hpp>
24#include <com/sun/star/embed/Aspects.hpp>
25#include <osl/diagnose.h>
74 AddFormat( SotClipboardFormatId::EMBED_SOURCE );
75 AddFormat( SotClipboardFormatId::OBJECTDESCRIPTOR );
76 AddFormat( SotClipboardFormatId::GDIMETAFILE );
77 AddFormat( SotClipboardFormatId::BITMAP );
92 if( nFormat == SotClipboardFormatId::OBJECTDESCRIPTOR )
98 else if( nFormat == SotClipboardFormatId::EMBED_SOURCE )
105 uno::Reference < embed::XEmbedPersist > xPers(
m_xObj, uno::UNO_QUERY );
109 OUString
aName(
"Dummy" );
111 bool bDeleteStream =
false;
112 uno::Sequence < beans::PropertyValue > aEmpty;
115 {
"DestinationShellID",
uno::Any(rDestDoc) }
117 xPers->storeToEntry(xStg,
aName, aEmpty, aObjArgs);
118 if ( xStg->isStreamElement(
aName ) )
120 uno::Reference < io::XStream > xStm = xStg->cloneStreamElement(
aName );
122 bDeleteStream =
true;
126 pStream = aTmp.
GetStream( StreamMode::STD_READWRITE );
128 xStg->openStorageElement(
aName, embed::ElementModes::READ )->copyToStorage( xStor );
131 const sal_uInt32 nLen = pStream->
TellEnd();
132 css::uno::Sequence< sal_Int8 >
aSeq( nLen );
139 bRet =
aSeq.hasElements();
150 catch ( uno::Exception& )
154 else if ( nFormat == SotClipboardFormatId::GDIMETAFILE &&
m_oGraphic )
161 aWriter.
Write( aMetaFile );
163 aAny <<= uno::Sequence< sal_Int8 >(
static_cast< const sal_Int8*
>( aMemStm.
GetData() ),
168 else if ( ( nFormat == SotClipboardFormatId::BITMAP || nFormat == SotClipboardFormatId::PNG ) &&
m_oGraphic )
174 uno::Reference< datatransfer::XTransferable > xTransferable(
m_xObj->getComponent(), uno::UNO_QUERY );
175 if ( xTransferable.is() )
177 uno::Any aAny = xTransferable->getTransferData( rFlavor );
184 catch( uno::Exception& )
200 const css::uno::Reference< css::embed::XEmbeddedObject >& xObj,
205 css::datatransfer::DataFlavor aFlavor;
209 rDesc.
maTypeName = aFlavor.HumanPresentableName;
214 rDesc.
mnViewAspect = sal::static_int_cast<sal_uInt16>( nAspect );
217 MapMode aMapMode( MapUnit::Map100thMM );
218 if ( nAspect == embed::Aspects::MSOLE_ICON )
226 aSize =
Size( 2500, 2500 );
232 awt::Size aSz = xObj->getVisualAreaSize( rDesc.
mnViewAspect );
233 aSize =
Size( aSz.Width, aSz.Height );
235 catch( embed::NoVisualAreaSizeException& )
237 OSL_FAIL(
"Can not get visual area size!" );
238 aSize =
Size( 5000, 5000 );
MapMode GetPrefMapMode() const
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
static bool GetFormatDataFlavor(SotClipboardFormatId nFormat, css::datatransfer::DataFlavor &rFlavor)
static SotClipboardFormatId GetFormat(const css::datatransfer::DataFlavor &rFlavor)
static void FillTransferableObjectDescriptor(TransferableObjectDescriptor &rDesc, const css::uno::Reference< css::embed::XEmbeddedObject > &xObj, const Graphic *pGraphic, sal_Int64 nAspect)
virtual void AddSupportedFormats() override
css::uno::Reference< css::embed::XEmbeddedObject > m_xObj
virtual void ObjectReleased() override
virtual bool GetData(const css::datatransfer::DataFlavor &rFlavor, const OUString &rDestDoc) override
virtual ~SvEmbedTransferHelper() override
void SetParentShellID(const OUString &rShellID)
SvEmbedTransferHelper(const css::uno::Reference< css::embed::XEmbeddedObject > &xObj, const Graphic *pGraphic, sal_Int64 nAspect)
std::optional< Graphic > m_oGraphic
virtual sal_uInt64 TellEnd() override
virtual sal_uInt64 TellEnd()
void SetVersion(sal_Int32 n)
sal_uInt64 Seek(sal_uInt64 nPos)
std::size_t ReadBytes(void *pData, std::size_t nSize)
SvStream & Write(const GDIMetaFile &rMetaFile)
bool SetTransferableObjectDescriptor(const TransferableObjectDescriptor &rDesc)
bool SetAny(const css::uno::Any &rAny)
bool SetBitmapEx(const BitmapEx &rBitmap, const css::datatransfer::DataFlavor &rFlavor)
bool HasFormat(SotClipboardFormatId nFormat)
void PrepareOLE(const TransferableObjectDescriptor &rObjDesc)
void AddFormat(SotClipboardFormatId nFormat)
static MapUnit UnoEmbed2VCLMapUnit(sal_Int32 nUnoEmbedMapUnit)
static css::uno::Reference< css::embed::XStorage > GetStorageFromStream(const css::uno::Reference< css::io::XStream > &xStream, sal_Int32 nStorageMode=css::embed::ElementModes::READWRITE, const css::uno::Reference< css::uno::XComponentContext > &rxContext=css::uno::Reference< css::uno::XComponentContext >())
static css::uno::Reference< css::embed::XStorage > GetTemporaryStorage(const css::uno::Reference< css::uno::XComponentContext > &rxContext=css::uno::Reference< css::uno::XComponentContext >())
static bool TryRunningState(const css::uno::Reference< css::embed::XEmbeddedObject > &)
SvStream * GetStream(StreamMode eMode)
static std::unique_ptr< SvStream > CreateStream(const OUString &rFileName, StreamMode eOpenMode, css::uno::Reference< css::awt::XWindow > xParentWin=nullptr)
Sequence< sal_Int8 > aSeq
css::uno::Sequence< css::beans::PropertyValue > InitPropertySequence(::std::initializer_list< ::std::pair< OUString, css::uno::Any > > vInit)
#define STREAM_SEEK_TO_BEGIN