summaryrefslogtreecommitdiff
path: root/xmloff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2022-08-29 13:37:52 +0200
committerMiklos Vajna <vmiklos@collabora.com>2022-08-29 14:24:00 +0200
commite268ac208d22aef687e99a625fc32e2a03a7b873 (patch)
treeecfdd3046861369eb8819ffa33d56b3d6076804b /xmloff
parent8611f6e259b807b4f19c8dc0eab86ca648891ce3 (diff)
xmloff: extract ExportGraphicPreview() from ...
... XMLShapeExport::ImpExportTableShape(), this way XMLShapeExport::ImpExportMediaShape() can reuse it. Both write an XGraphic fallback, just the name template and the format of the export result differ. Change-Id: Ia1217b7bc3363d3fe3fe64f2add69e5072cc08c9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138971 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
Diffstat (limited to 'xmloff')
-rw-r--r--xmloff/source/draw/shapeexport.cxx188
1 files changed, 78 insertions, 110 deletions
diff --git a/xmloff/source/draw/shapeexport.cxx b/xmloff/source/draw/shapeexport.cxx
index 6931c5684642..c44349184770 100644
--- a/xmloff/source/draw/shapeexport.cxx
+++ b/xmloff/source/draw/shapeexport.cxx
@@ -3364,6 +3364,82 @@ lcl_StoreMediaAndGetURL(SvXMLExport & rExport,
}
}
+namespace
+{
+void ExportGraphicPreview(const uno::Reference<graphic::XGraphic>& xGraphic, SvXMLExport& rExport, const std::u16string_view& rPrefix, const std::u16string_view& rExtension, const OUString& rMimeType)
+{
+ const bool bExportEmbedded(rExport.getExportFlags() & SvXMLExportFlags::EMBEDDED);
+
+ if( xGraphic.is() ) try
+ {
+ uno::Reference< uno::XComponentContext > xContext = rExport.getComponentContext();
+
+ uno::Reference< embed::XStorage > xPictureStorage;
+ uno::Reference< embed::XStorage > xStorage;
+ uno::Reference< io::XStream > xPictureStream;
+
+ OUString sPictureName;
+ if( bExportEmbedded )
+ {
+ xPictureStream.set( xContext->getServiceManager()->createInstanceWithContext( "com.sun.star.comp.MemoryStream", xContext), uno::UNO_QUERY_THROW );
+ }
+ else
+ {
+ xStorage.set( rExport.GetTargetStorage(), uno::UNO_SET_THROW );
+
+ xPictureStorage.set( xStorage->openStorageElement( "Pictures" , ::embed::ElementModes::READWRITE ), uno::UNO_SET_THROW );
+
+ sal_Int32 nIndex = 0;
+ do
+ {
+ sPictureName = rPrefix + OUString::number( ++nIndex ) + rExtension;
+ }
+ while( xPictureStorage->hasByName( sPictureName ) );
+
+ xPictureStream.set( xPictureStorage->openStreamElement( sPictureName, ::embed::ElementModes::READWRITE ), uno::UNO_SET_THROW );
+ }
+
+ uno::Reference< graphic::XGraphicProvider > xProvider( graphic::GraphicProvider::create(xContext) );
+ uno::Sequence< beans::PropertyValue > aArgs{
+ comphelper::makePropertyValue("MimeType", rMimeType ),
+ comphelper::makePropertyValue("OutputStream", xPictureStream->getOutputStream())
+ };
+ xProvider->storeGraphic( xGraphic, aArgs );
+
+ if( xPictureStorage.is() )
+ {
+ uno::Reference< embed::XTransactedObject > xTrans( xPictureStorage, uno::UNO_QUERY );
+ if( xTrans.is() )
+ xTrans->commit();
+ }
+
+ if( !bExportEmbedded )
+ {
+ OUString sURL = "Pictures/" + sPictureName;
+ rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, sURL );
+ rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
+ rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_SHOW, XML_EMBED );
+ rExport.AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
+ }
+
+ SvXMLElementExport aElem( rExport, XML_NAMESPACE_DRAW, XML_IMAGE, false, true );
+
+ if( bExportEmbedded )
+ {
+ uno::Reference< io::XSeekableInputStream > xSeekable( xPictureStream, uno::UNO_QUERY_THROW );
+ xSeekable->seek(0);
+
+ XMLBase64Export aBase64Exp( rExport );
+ aBase64Exp.exportOfficeBinaryDataElement( uno::Reference < io::XInputStream >( xPictureStream, uno::UNO_QUERY_THROW ) );
+ }
+ }
+ catch( uno::Exception const & )
+ {
+ DBG_UNHANDLED_EXCEPTION("xmloff.draw");
+ }
+}
+}
+
void XMLShapeExport::ImpExportMediaShape(
const uno::Reference< drawing::XShape >& xShape,
XmlShapeType eShapeType, XMLShapeExportFlags nFeatures, css::awt::Point* pRefPoint)
@@ -3459,48 +3535,7 @@ void XMLShapeExport::ImpExportMediaShape(
if (!aGraphic.IsNone())
{
// The media has a preview, export it.
- uno::Reference<embed::XStorage> xPictureStorage;
- uno::Reference<embed::XStorage> xStorage;
- uno::Reference<io::XStream> xPictureStream;
- OUString sPictureName;
- xStorage.set(GetExport().GetTargetStorage(), uno::UNO_SET_THROW);
- xPictureStorage.set(
- xStorage->openStorageElement("Pictures", embed::ElementModes::READWRITE),
- uno::UNO_SET_THROW);
- sal_Int32 nIndex = 0;
- while (true)
- {
- sPictureName = "MediaPreview" + OUString::number(++nIndex) + ".png";
- if (!xPictureStorage->hasByName(sPictureName))
- {
- break;
- }
- }
-
- xPictureStream.set(
- xPictureStorage->openStreamElement(sPictureName, ::embed::ElementModes::READWRITE),
- uno::UNO_SET_THROW);
-
- uno::Reference<uno::XComponentContext> xContext = GetExport().getComponentContext();
- uno::Reference<graphic::XGraphicProvider> xProvider(
- graphic::GraphicProvider::create(xContext));
- uno::Sequence<beans::PropertyValue> aArgs{
- comphelper::makePropertyValue("MimeType", OUString("image/png")),
- comphelper::makePropertyValue("OutputStream", xPictureStream->getOutputStream())
- };
- xProvider->storeGraphic(xGraphic, aArgs);
- if (xPictureStorage.is())
- {
- uno::Reference<embed::XTransactedObject> xTrans(xPictureStorage, uno::UNO_QUERY);
- if (xTrans.is())
- xTrans->commit();
- }
- OUString sURL = "Pictures/" + sPictureName;
- mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_HREF, sURL);
- mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE);
- mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_SHOW, XML_EMBED);
- mrExport.AddAttribute(XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD);
- SvXMLElementExport aImageElem(GetExport(), XML_NAMESPACE_DRAW, XML_IMAGE, false, true);
+ ExportGraphicPreview(xGraphic, mrExport, u"MediaPreview", u".png", "image/png");
}
}
@@ -5025,7 +5060,6 @@ void XMLShapeExport::ImpExportTableShape( const uno::Reference< drawing::XShape
bIsEmptyPresObj = ImpExportPresentationAttributes( xPropSet, GetXMLToken(XML_TABLE) );
const bool bCreateNewline( (nFeatures & XMLShapeExportFlags::NO_WS) == XMLShapeExportFlags::NONE );
- const bool bExportEmbedded(mrExport.getExportFlags() & SvXMLExportFlags::EMBEDDED);
SvXMLElementExport aElement( mrExport, XML_NAMESPACE_DRAW, XML_FRAME, bCreateNewline, true );
@@ -5069,73 +5103,7 @@ void XMLShapeExport::ImpExportTableShape( const uno::Reference< drawing::XShape
if( !bIsEmptyPresObj )
{
uno::Reference< graphic::XGraphic > xGraphic( xPropSet->getPropertyValue("ReplacementGraphic"), uno::UNO_QUERY );
- if( xGraphic.is() ) try
- {
- uno::Reference< uno::XComponentContext > xContext = GetExport().getComponentContext();
-
- uno::Reference< embed::XStorage > xPictureStorage;
- uno::Reference< embed::XStorage > xStorage;
- uno::Reference< io::XStream > xPictureStream;
-
- OUString sPictureName;
- if( bExportEmbedded )
- {
- xPictureStream.set( xContext->getServiceManager()->createInstanceWithContext( "com.sun.star.comp.MemoryStream", xContext), uno::UNO_QUERY_THROW );
- }
- else
- {
- xStorage.set( GetExport().GetTargetStorage(), uno::UNO_SET_THROW );
-
- xPictureStorage.set( xStorage->openStorageElement( "Pictures" , ::embed::ElementModes::READWRITE ), uno::UNO_SET_THROW );
-
- sal_Int32 nIndex = 0;
- do
- {
- sPictureName = "TablePreview" + OUString::number( ++nIndex ) + ".svm";
- }
- while( xPictureStorage->hasByName( sPictureName ) );
-
- xPictureStream.set( xPictureStorage->openStreamElement( sPictureName, ::embed::ElementModes::READWRITE ), uno::UNO_SET_THROW );
- }
-
- uno::Reference< graphic::XGraphicProvider > xProvider( graphic::GraphicProvider::create(xContext) );
- uno::Sequence< beans::PropertyValue > aArgs{
- comphelper::makePropertyValue("MimeType", OUString( "image/x-vclgraphic" )),
- comphelper::makePropertyValue("OutputStream", xPictureStream->getOutputStream())
- };
- xProvider->storeGraphic( xGraphic, aArgs );
-
- if( xPictureStorage.is() )
- {
- uno::Reference< embed::XTransactedObject > xTrans( xPictureStorage, uno::UNO_QUERY );
- if( xTrans.is() )
- xTrans->commit();
- }
-
- if( !bExportEmbedded )
- {
- OUString sURL = "Pictures/" + sPictureName;
- mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, sURL );
- mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE, XML_SIMPLE );
- mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_SHOW, XML_EMBED );
- mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
- }
-
- SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_DRAW, XML_IMAGE, false, true );
-
- if( bExportEmbedded )
- {
- uno::Reference< io::XSeekableInputStream > xSeekable( xPictureStream, uno::UNO_QUERY_THROW );
- xSeekable->seek(0);
-
- XMLBase64Export aBase64Exp( GetExport() );
- aBase64Exp.exportOfficeBinaryDataElement( uno::Reference < io::XInputStream >( xPictureStream, uno::UNO_QUERY_THROW ) );
- }
- }
- catch( uno::Exception const & )
- {
- DBG_UNHANDLED_EXCEPTION("xmloff.draw");
- }
+ ExportGraphicPreview(xGraphic, mrExport, u"TablePreview", u".svm", "image/x-vclgraphic");
}
ImpExportEvents( xShape );