20 #include <config_features.h>
29 #include <osl/file.hxx>
30 #include <osl/thread.hxx>
38 #include <com/sun/star/ucb/ContentCreationException.hpp>
47 #include <svx/svxids.hrc>
56 #include <com/sun/star/sdbc/XResultSet.hpp>
57 #include <com/sun/star/ucb/XContentAccess.hpp>
58 #include <com/sun/star/io/XInputStream.hpp>
68 : m_bDestDirRelative(false)
72 , mnBroadcasterLockCount(0)
75 , bAbortActualize(false)
102 catch (
const css::ucb::ContentCreationException&)
121 if( !pOStm->GetError() )
125 if( !pExistentEntry )
136 pEntry = pExistentEntry;
150 std::unique_ptr<SgaObject> pSgaObj;
158 sal_uInt32 nInventor;
161 pIStm->Seek( pEntry->
nOffset );
162 pIStm->ReadUInt32( nInventor );
166 pIStm->Seek( pEntry->
nOffset );
183 pSgaObj->ImplUpdateURL( pEntry->
aURL );
225 if (
i->aURL == rURL )
235 aURL = pObject->
aURL;
245 sal_uInt32 nNextNumber = 1999;
249 aDir.
Append(
"dragdrop" );
252 aInfoFileURL.
Append(
"sdddndx1" );
261 pIStm->ReadUInt32( nNextNumber );
266 if( nFormat != ConvertDataFormat::Unknown )
270 case ConvertDataFormat::BMP: pExt =
".bmp";
break;
271 case ConvertDataFormat::GIF: pExt =
".gif";
break;
272 case ConvertDataFormat::JPG: pExt =
".jpg";
break;
273 case ConvertDataFormat::MET: pExt =
".met";
break;
274 case ConvertDataFormat::PCT: pExt =
".pct";
break;
275 case ConvertDataFormat::PNG: pExt =
".png";
break;
276 case ConvertDataFormat::SVM: pExt =
".svm";
break;
277 case ConvertDataFormat::TIF: pExt =
".tif";
break;
278 case ConvertDataFormat::WMF: pExt =
".wmf";
break;
279 case ConvertDataFormat::EMF: pExt =
".emf";
break;
292 OUString aFileName(
"gallery/svdraw/dd" );
293 aNewURL =
INetURLObject( aFileName += OUString::number( ++nNextNumber % 99999999 ), INetProtocol::PrivSoffice );
298 if (
p->aURL == aNewURL )
306 OUString aFileName =
"dd" + OUString::number( ++nNextNumber % 999999 );
309 aFileName += OUString( pExt, strlen(pExt), RTL_TEXTENCODING_ASCII_US );
312 aNewURL.
Append( aFileName );
324 pOStm->WriteUInt32( nNextNumber );
370 sal_uInt32 iFoundPos = 0;
371 for (sal_uInt32
n =
aObjectList.size(); iFoundPos <
n; ++iFoundPos)
391 const_cast<SgaObject&
>(rObj).SetTitle( pOldObj->GetTitle() );
394 else if (rObj.
GetTitle() ==
"__<empty>__")
395 const_cast<SgaObject&>(rObj).
SetTitle(
"");
420 rTitle = pGalleryObject->
maTitle;
421 rPath = pGalleryObject->
maPath;
430 pGalleryObject->
maTitle = rTitle;
431 pGalleryObject->
maPath = rPath;
437 std::unique_ptr<GalleryObject> pEntry = std::move(*it);
455 if (nOldPos == nNewPos || nOldPos >=
aObjectList.size())
458 std::unique_ptr<GalleryObject> pEntry = std::move(
aObjectList[nOldPos]);
462 if (nNewPos < nOldPos)
487 for (sal_uInt32
i = 0;
i < nCount;
i++)
493 pProgress->
Update(
i, nCount - 1 );
499 rActualizeLink.
Call( aURL );
519 std::unique_ptr<SgaObject> pNewObj;
542 if( pIStm.
is() && !pIStm->GetError() )
544 pIStm->SetBufferSize( 16384 );
551 pIStm->SetBufferSize( 0 );
560 if( (*it)->mbDelete )
575 DBG_ASSERT( aTmpURL.GetProtocol() != INetProtocol::NotValid,
"invalid URL" );
580 if( pIStm && pTmpStm )
585 std::unique_ptr<SgaObject> pObj;
601 pIStm->Seek( pEntry->
nOffset );
603 pEntry->
nOffset = pTmpStm->Tell();
610 OSL_FAIL(
"File(s) could not be opened" );
627 catch (
const css::ucb::ContentCreationException&)
663 pIStm->ReadUInt16( nVersion );
665 if( nVersion <= 0x00ff )
667 bool bThemeNameFromResource =
false;
668 sal_uInt32 nThemeId = 0;
671 aThemeName = OStringToOUString(aTmpStr, RTL_TEXTENCODING_UTF8);
674 if( nVersion >= 0x0004 )
679 pIStm->ReadUInt32( nCount ).ReadUInt16( nTemp16 );
685 if( pIStm->Tell() >= 520 )
687 sal_uInt32 nId1, nId2;
689 pIStm->SeekRel( -520 );
690 pIStm->ReadUInt32( nId1 ).ReadUInt32( nId2 );
695 std::unique_ptr<VersionCompat> pCompat(
new VersionCompat( *pIStm, StreamMode::READ ));
697 pIStm->ReadUInt32( nThemeId );
699 if( pCompat->GetVersion() >= 2 )
701 pIStm->ReadCharAsBool( bThemeNameFromResource );
708 bReadOnly,
false, nThemeId,
709 bThemeNameFromResource );
724 rBmp = pObj->GetThumbBmp();
746 OUString aFilterDummy;
766 pVDev->SetMapMode(
MapMode( MapUnit::Map100thMM ) );
770 aView.ShowSdrPage(aView.GetModel()->GetPage(0));
772 rGraphic = aView.GetAllMarkedGraphic();
786 rGraphic = pObj->GetThumbBmp();
807 if( rGraphic.
GetType() != GraphicType::NONE )
812 if( aGfxLink.GetDataSize() )
814 switch( aGfxLink.GetType() )
816 case GfxLinkType::EpsBuffer: nExportFormat = ConvertDataFormat::SVM;
break;
817 case GfxLinkType::NativeGif: nExportFormat = ConvertDataFormat::GIF;
break;
821 case GfxLinkType::NativeBmp: nExportFormat = ConvertDataFormat::BMP;
break;
823 case GfxLinkType::NativeJpg: nExportFormat = ConvertDataFormat::JPG;
break;
824 case GfxLinkType::NativePng: nExportFormat = ConvertDataFormat::PNG;
break;
825 case GfxLinkType::NativeTif: nExportFormat = ConvertDataFormat::TIF;
break;
826 case GfxLinkType::NativeWmf: nExportFormat = ConvertDataFormat::WMF;
break;
827 case GfxLinkType::NativeMet: nExportFormat = ConvertDataFormat::MET;
break;
828 case GfxLinkType::NativePct: nExportFormat = ConvertDataFormat::PCT;
break;
829 case GfxLinkType::NativeSvg: nExportFormat = ConvertDataFormat::SVG;
break;
836 if( rGraphic.
GetType() == GraphicType::Bitmap )
839 nExportFormat = ConvertDataFormat::GIF;
841 nExportFormat = ConvertDataFormat::PNG;
844 nExportFormat = ConvertDataFormat::SVM;
854 if( ConvertDataFormat::SVM == nExportFormat )
858 aMtf.
Write( *pOStm );
863 if( aGfxLink.GetDataSize() && aGfxLink.GetData() )
865 pOStm->
WriteBytes(aGfxLink.GetData(), aGfxLink.GetDataSize());
900 if( xIStm.is() && !xIStm->GetError() )
904 xIStm->SetBufferSize( 0 );
923 if( xOStm.is() && !xOStm->GetError() )
939 xOStm->SetBufferSize( 16348 );
941 aCodec.
Write( aMemStm );
943 if( !xOStm->GetError() )
949 xOStm->SetBufferSize( 0 );
972 if( xIStm.is() && !xIStm->GetError() )
976 xIStm->SetBufferSize( 16348 );
1000 xIStm->SetBufferSize( 0 );
1019 if( xOStm.is() && !xOStm->GetError() )
1024 xOStm->SetBufferSize( 16348 );
1025 aCodec.
Write( *rxModelStream );
1027 if( !xOStm->GetError() )
1034 xOStm->SetBufferSize( 0 );
1060 std::unique_ptr<SgaObject> pNewObj;
1071 #if HAVE_FEATURE_AVMEDIA
1084 ::std::vector< INetURLObject > aURLVector;
1090 bool bFolder =
false;
1096 uno::Sequence<OUString> aProps {
"Url" };
1098 uno::Reference< ucb::XContentAccess > xContentAccess( xResultSet, uno::UNO_QUERY );
1099 if( xContentAccess.is() )
1101 while( xResultSet->next() )
1103 aURL.
SetSmartURL( xContentAccess->queryContentIdentifierString() );
1104 aURLVector.push_back( aURL );
1109 aURLVector.push_back( rFileOrDirURL );
1111 catch(
const ucb::ContentCreationException& )
1114 catch(
const uno::RuntimeException& )
1117 catch(
const uno::Exception& )
1121 for(
const auto& rURL : aURLVector )
1122 bRet = bRet ||
InsertURL( rURL, nInsertPos );
1131 if( rxTransferable.is() )
1134 std::unique_ptr<Graphic> pGraphic;
1136 if( aDataHelper.
HasFormat( SotClipboardFormatId::DRAWING ) )
1143 else if( aDataHelper.
HasFormat( SotClipboardFormatId::FILE_LIST ) ||
1144 aDataHelper.
HasFormat( SotClipboardFormatId::SIMPLE_FILE ) )
1148 if( aDataHelper.
HasFormat( SotClipboardFormatId::FILE_LIST ) )
1149 aDataHelper.
GetFileList( SotClipboardFormatId::FILE_LIST, aFileList );
1153 if (aDataHelper.
GetString(SotClipboardFormatId::SIMPLE_FILE, aFile) && !aFile.isEmpty())
1159 const OUString aFile( aFileList.
GetFile(
i ) );
1162 if( aURL.GetProtocol() == INetProtocol::NotValid )
1166 if( osl::FileBase::getFileURLFromSystemPath( aFile, aLocalURL ) == osl::FileBase::E_None )
1170 if( aURL.GetProtocol() != INetProtocol::NotValid )
1179 if( aDataHelper.
HasFormat( SotClipboardFormatId::SVXB ) )
1180 nFormat = SotClipboardFormatId::SVXB;
1181 else if( aDataHelper.
HasFormat( SotClipboardFormatId::GDIMETAFILE ) )
1182 nFormat = SotClipboardFormatId::GDIMETAFILE;
1183 else if( aDataHelper.
HasFormat( SotClipboardFormatId::BITMAP ) )
1184 nFormat = SotClipboardFormatId::BITMAP;
1186 if( nFormat != SotClipboardFormatId::NONE && aDataHelper.
GetGraphic( nFormat, aGraphic ) )
1187 pGraphic.reset(
new Graphic( aGraphic ));
1194 if( aDataHelper.
HasFormat( SotClipboardFormatId::SVIM ) )
1200 if( aDataHelper.
GetImageMap( SotClipboardFormatId::SVIM, aImageMap ) )
1247 for( sal_uInt32
i = 0;
i < nCount;
i++ )
1286 bool aFound = aPath.indexOf(
m_aDestDir) != -1;
1291 SAL_WARN(
"svx",
"failed to replace destdir of '"
1304 const long nReservePos = rOStm.
Tell();
1305 std::unique_ptr<VersionCompat> pCompat(
new VersionCompat( rOStm, StreamMode::WRITE, 2 ));
1312 const long nRest = std::max( 512L - ( static_cast<long>(rOStm.
Tell()) - nReservePos ), 0L );
1316 std::unique_ptr<char[]> pReserve(
new char[ nRest ]);
1317 memset( pReserve.get(), 0, nRest );
1333 if( nVersion >= 0x0004 )
1339 if( nCount <= ( 1 << 14 ) )
1343 sal_uInt32 nId1, nId2;
1352 aObjectList.clear();
1354 for( sal_uInt32
i = 0;
i < nCount;
i++ )
1367 aFileName = OStringToOUString(aTempFileName, osl_getThreadTextEncoding());
1371 aFileName = aFileName.replaceAll(
"\\",
"/" );
1374 if( aFileName[ 0 ] !=
'/' )
1385 if( aFileName[0] !=
'/' )
1398 OUString aDummyURL(
"gallery/svdraw/" );
1399 pObj->aURL =
INetURLObject( aDummyURL += aFileName, INetProtocol::PrivSoffice );
1407 if( ( pObj->aURL.GetProtocol() == INetProtocol::NotValid ) &&
1408 osl::FileBase::getFileURLFromSystemPath( aFileName, aLocalURL ) == osl::FileBase::E_None )
1414 aObjectList.push_back( std::move(pObj) );
1426 std::unique_ptr<VersionCompat> pCompat(
new VersionCompat( rIStm, StreamMode::READ ));
1428 bool bThemeNameFromResource =
false;
1432 if( pCompat->GetVersion() >= 2 )
1437 SetId( nTemp32, bThemeNameFromResource );
SvStream & WriteBool(bool b)
bool GetGraphic(SotClipboardFormatId nFormat, Graphic &rGraphic)
bool InsertObject(const SgaObject &rObj, sal_uInt32 nPos=SAL_MAX_UINT32)
void Update(sal_Int32 nVal, sal_Int32 nMaxVal)
SAL_DLLPRIVATE void CopyToClipboard(vcl::Window *pWindow, sal_uInt32 nPos)
const INetURLObject & GetStrURL() const
SAL_DLLPRIVATE bool IsThemeNameFromResource() const
bool InsertGraphic(const Graphic &rGraphic, sal_uInt32 nInsertPos)
SvStream & WriteUInt16(sal_uInt16 nUInt16)
bool CreateIMapGraphic(const FmFormModel &rModel, Graphic &rGraphic, ImageMap &rImageMap)
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
sal_uInt32 mnBroadcasterLockCount
SvStream & ReadSgaObject(SvStream &rIn, SgaObject &rObj)
static SAL_DLLPRIVATE GalleryThemeEntry * CreateThemeEntry(const INetURLObject &rURL, bool bReadOnly)
SAL_DLLPRIVATE Gallery * GetParent() const
sal_uInt32 mnThemeLockCount
const INetURLObject & GetSdgURL() const
#define SVSTREAM_READ_ERROR
SAL_DLLPRIVATE SvStream & WriteData(SvStream &rOut) const
bool SvxDrawingLayerExport(SdrModel *pModel, const uno::Reference< io::XOutputStream > &xOut, const Reference< lang::XComponent > &xComponent)
css::uno::Any getPropertyValue(const OUString &rPropertyName)
virtual void WriteData(SvStream &rOut, const OUString &rDestDir) const
SAL_DLLPRIVATE bool InsertModelStream(const tools::SvRef< SotStorageStream > &rModelStream, sal_uInt32 nInsertPos)
SvStream & ReadCharAsBool(bool &rBool)
#define STREAM_SEEK_TO_END
void RemoveObject(sal_uInt32 nPos)
sal_uInt64 Seek(sal_uInt64 nPos)
SvStream & WriteSgaObject(SvStream &rOut, const SgaObject &rObj)
SAL_DLLPRIVATE void SetPreviewBitmapExAndStrings(sal_uInt32 nPos, const BitmapEx &rBitmapEx, const Size &rSize, const OUString &rTitle, const OUString &rPath)
FmFormModel * GetModel() const
virtual void InsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
EmbeddedObjectRef * pObject
bool HasFormat(SotClipboardFormatId nFormat) const
void BurnInStyleSheetAttributes()
SAL_DLLPRIVATE void GetPreviewBitmapExAndStrings(sal_uInt32 nPos, BitmapEx &rBitmapEx, Size &rSize, OUString &rTitle, OUString &rPath) const
bool CreateDir(const INetURLObject &rURL)
OString read_uInt16_lenPrefixed_uInt8s_ToOString(SvStream &rStrm)
SAL_DLLPRIVATE bool GetURL(sal_uInt32 nPos, INetURLObject &rURL)
tools::SvRef< SotStorage > aSvDrawStorageRef
SvStream & ReadGalleryTheme(SvStream &rIn, GalleryTheme &rTheme)
static std::unique_ptr< SvStream > CreateStream(const OUString &rFileName, StreamMode eOpenMode, css::uno::Reference< css::awt::XWindow > xParentWin=nullptr)
static SAL_DLLPRIVATE INetURLObject ImplGetURL(const GalleryObject *pObject)
bool CopyTo(SotStorage *pDestStg)
const GDIMetaFile & GetGDIMetaFile() const
SvStream & WriteUInt32(sal_uInt32 nUInt32)
SAL_DLLPRIVATE SvStream & ReadData(SvStream &rIn)
BitmapEx maPreviewBitmapEx
SAL_DLLPRIVATE const INetURLObject & GetStrURL() const
virtual SAL_DLLPRIVATE ~GalleryTheme() override
SAL_DLLPRIVATE void LockBroadcaster()
OUString const & GetTitle() const
const INetURLObject & GetURL() const
SAL_DLLPRIVATE void ImplCreateSvDrawStorage()
SvStream & ReadUInt32(sal_uInt32 &rUInt32)
SAL_DLLPRIVATE void StartDrag(vcl::Window *pWindow, sal_uInt32 nPos)
::std::vector< std::unique_ptr< GalleryObject > > aObjectList
#define TOOLS_WARN_EXCEPTION(area, stream)
SAL_DLLPRIVATE bool InsertFileOrDirURL(const INetURLObject &rFileOrDirURL, sal_uInt32 nInsertPos)
#define ERRCODE_IO_GENERAL
#define DBG_ASSERT(sCon, aError)
GalleryGraphicImportRet GalleryGraphicImport(const INetURLObject &rURL, Graphic &rGraphic, OUString &rFilterName)
SotStorageStream * OpenSotStream(const OUString &rEleName, StreamMode=StreamMode::STD_READWRITE)
bool InsertURL(const INetURLObject &rURL, sal_uInt32 nInsertPos=SAL_MAX_UINT32)
bool Append(OUString const &rTheSegment, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
GraphicType GetType() const
OUString const & GetURL() const
void SetModified(bool bSet)
sal_uInt32 COMPAT_FORMAT(char char1, char char2, char char3, char char4)
void Actualize(const Link< const INetURLObject &, void > &rActualizeLink, GalleryProgress *pProgress=nullptr)
bool GetString(SotClipboardFormatId nFormat, OUString &rStr)
SAL_DLLPRIVATE const tools::SvRef< SotStorage > & GetSvDrawStorage() const
SAL_DLLPRIVATE void ImplWrite()
SAL_DLLPRIVATE bool ChangeObjectPos(sal_uInt32 nOldPos, sal_uInt32 nNewPos)
const SdrPage * GetPage(sal_uInt16 nPgNum) const
std::size_t WriteBytes(const void *pData, std::size_t nSize)
OUString GetFile(size_t nIndex) const
void SetError(ErrCode nErrorCode)
SAL_DLLPRIVATE bool InsertTransferable(const css::uno::Reference< css::datatransfer::XTransferable > &rxTransferable, sal_uInt32 nInsertPos)
SAL_DLLPRIVATE sal_uInt32 GetObjectCount() const
bool GetGraphic(sal_uInt32 nPos, Graphic &rGraphic)
void CopyToClipboard(const css::uno::Reference< css::datatransfer::clipboard::XClipboard > &rClipboard) const
This class represents an embedded or linked bitmap graphic object.
GfxLink GetGfxLink() const
bool KillFile(const INetURLObject &rURL)
void AppendFile(const OUString &rStr)
SAL_DLLPRIVATE bool IsBroadcasterLocked() const
bool GallerySvDrawImport(SvStream &rIStm, SdrModel &rModel)
SvStream & WriteGalleryTheme(SvStream &rOut, const GalleryTheme &rTheme)
bool IsNameFromResource() const
SAL_DLLPRIVATE void ImplBroadcast(sal_uInt32 nUpdatePos)
void AppendUserData(std::unique_ptr< SdrObjUserData > pData)
bool GetSotStorageStream(SotClipboardFormatId nFormat, tools::SvRef< SotStorageStream > &rStreamRef)
bool GetImageMap(SotClipboardFormatId nFormat, ImageMap &rIMap)
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
std::unique_ptr< SgaObject > ImplReadSgaObject(GalleryObject const *pEntry)
bool CopyFile(const INetURLObject &rSrcURL, const INetURLObject &rDstURL)
SAL_DLLPRIVATE bool GetModelStream(sal_uInt32 nPos, tools::SvRef< SotStorageStream > const &rModelStreamRef)
static ErrCode Export(SvStream &rOStm, const Graphic &rGraphic, ConvertDataFormat nFormat)
bool GetModel(sal_uInt32 nPos, SdrModel &rModel)
SAL_DLLPRIVATE const GalleryObject * ImplGetGalleryObject(sal_uInt32 nPos) const
void Broadcast(const SfxHint &rHint)
void StartDrag(vcl::Window *pWindow, sal_Int8 nDragSourceActions)
virtual SgaObjKind GetObjKind() const =0
void SetTitle(const OUString &rTitle)
INetProtocol GetProtocol() const
void SetId(sal_uInt32 nNewId, bool bResetThemeName)
SAL_DLLPRIVATE bool GetThumb(sal_uInt32 nPos, BitmapEx &rBmp)
void Write(SvStream &rStmToWrite)
bool GetFileList(SotClipboardFormatId nFormat, FileList &rFileList)
Reference< XComponentContext > getProcessComponentContext()
SAL_DLLPRIVATE GalleryTheme(Gallery *pGallery, GalleryThemeEntry *pThemeEntry)
SAL_DLLPRIVATE const INetURLObject & GetThmURL() const
SAL_DLLPRIVATE bool ImplWriteSgaObject(const SgaObject &rObj, sal_uInt32 nPos, GalleryObject *pExistentEntry)
static bool IsCoded(SvStream &rStm, sal_uInt32 &rVersion)
SAL_DLLPRIVATE void ImplSetModified(bool bModified)
SAL_DLLPRIVATE void SetId(sal_uInt32 nNewId, bool bResetThemeName)
#define SAL_WARN(area, stream)
OUString GetSvDrawStreamNameFromURL(const INetURLObject &rSvDrawObjURL)
const OUString & GetName() const
SAL_DLLPRIVATE INetURLObject ImplCreateUniqueURL(SgaObjKind eObjKind, ConvertDataFormat nFormat=ConvertDataFormat::Unknown)
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
SAL_DLLPRIVATE bool UnlockTheme()
std::size_t write_uInt16_lenPrefixed_uInt8s_FromOUString(SvStream &rStrm, const OUString &rStr, rtl_TextEncoding eEnc)
bool InsertModel(const FmFormModel &rModel, sal_uInt32 nInsertPos)
const INetURLObject & GetSdvURL() const
static bool FileExists(const INetURLObject &rURL, const OUString &rExt)
bool Remove(const OUString &rEleName)
const OUString & GetThemeName() const
const INetURLObject & GetSdgURL() const
SAL_DLLPRIVATE const INetURLObject & GetSdvURL() const
bool SetSmartURL(OUString const &rTheAbsURIRef, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8, FSysStyle eStyle=FSysStyle::Detect)
bool removeSegment(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true)
std::unique_ptr< SgaObject > AcquireObject(sal_uInt32 nPos)
const INetURLObject & GetThmURL() const