summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2017-02-03 08:35:59 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-02-03 08:24:32 +0000
commitae828495be9c2ac5fdb4c1747ed7bdd51e5d87a7 (patch)
tree117d286696eb2260f81beb707cd1ae54e5b39166 /oox
parent2c1ae441892da3a40cde3a7a796e97cbe9f1da2a (diff)
tdf#105707 PPTX import: warn when SmartArt is missing DrawingML fallback
By the time DiagramGraphicDataContext::onCreateContext() completes, we know if there will be a DrawingML fallback for the SmartArt (called ExtDrawing in the code) or not. Warn about this case once at the end of the import when in interactive mode. Headless mode silently ignores the warning as expected. Change-Id: I2bfeeedcaa244f08d8a0c208167e79d7bb697e6d Reviewed-on: https://gerrit.libreoffice.org/33866 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/core/xmlfilterbase.cxx8
-rw-r--r--oox/source/drawingml/graphicshapecontext.cxx5
-rw-r--r--oox/source/ppt/pptimport.cxx28
3 files changed, 39 insertions, 2 deletions
diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx
index 5c5d5d80d083..5e4ae8e65bfc 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -199,7 +199,8 @@ XmlFilterBase::XmlFilterBase( const Reference< XComponentContext >& rxContext )
mxImpl( new XmlFilterBaseImpl( rxContext ) ),
mnRelId( 1 ),
mnMaxDocId( 0 ),
- mbMSO2007(false)
+ mbMSO2007(false),
+ mbMissingExtDrawing(false)
{
}
@@ -908,6 +909,11 @@ bool XmlFilterBase::isMSO2007Document() const
return mbMSO2007;
}
+void XmlFilterBase::setMissingExtDrawing()
+{
+ mbMissingExtDrawing = true;
+}
+
OUString XmlFilterBase::getNamespaceURL(sal_Int32 nNSID) const
{
auto itr = mxImpl->mrNamespaceMap.maTransitionalNamespaceMap.find(nNSID);
diff --git a/oox/source/drawingml/graphicshapecontext.cxx b/oox/source/drawingml/graphicshapecontext.cxx
index 201a989fd383..90d481869502 100644
--- a/oox/source/drawingml/graphicshapecontext.cxx
+++ b/oox/source/drawingml/graphicshapecontext.cxx
@@ -271,6 +271,11 @@ ContextHandlerRef DiagramGraphicDataContext::onCreateContext( ::sal_Int32 aEleme
<< "," << mpShapePtr->getSize().Width
<< "," << mpShapePtr->getSize().Height
<<")");
+
+ // No DrawingML fallback, need to warn the user at the end.
+ if (mpShapePtr->getExtDrawings().empty())
+ getFilter().setMissingExtDrawing();
+
break;
}
default:
diff --git a/oox/source/ppt/pptimport.cxx b/oox/source/ppt/pptimport.cxx
index 414a149adcdb..043d01412069 100644
--- a/oox/source/ppt/pptimport.cxx
+++ b/oox/source/ppt/pptimport.cxx
@@ -22,6 +22,13 @@
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <osl/diagnose.h>
+#include <vcl/msgbox.hxx>
+#include <vcl/svapp.hxx>
+#include <svtools/sfxecode.hxx>
+#include <svtools/ehdl.hxx>
+#include <svtools/svtools.hrc>
+#include <tools/urlobj.hxx>
+#include <svx/dialogs.hrc>
#include "oox/ppt/pptimport.hxx"
#include "oox/drawingml/chart/chartconverter.hxx"
#include "oox/dump/pptxdumper.hxx"
@@ -91,7 +98,26 @@ bool PowerPointImport::importDocument()
OUString aFragmentPath = getFragmentPathFromFirstTypeFromOfficeDoc( "officeDocument" );
FragmentHandlerRef xPresentationFragmentHandler( new PresentationFragmentHandler( *this, aFragmentPath ) );
maTableStyleListPath = xPresentationFragmentHandler->getFragmentPathFromFirstTypeFromOfficeDoc( "tableStyles" );
- return importFragment( xPresentationFragmentHandler );
+ bool bRet = importFragment(xPresentationFragmentHandler);
+
+ if (mbMissingExtDrawing)
+ {
+ // Construct a warning message.
+ INetURLObject aURL(getFileUrl());
+ SfxErrorContext aContext(ERRCTX_SFX_OPENDOC, aURL.getName(INetURLObject::LAST_SEGMENT), nullptr, RID_ERRCTX);
+ OUString aWarning;
+ aContext.GetString(ERRCODE_WARNING_MASK, aWarning);
+ aWarning += ":\n";
+ static ResMgr* pResMgr = ResMgr::CreateResMgr("svx", Application::GetSettings().GetUILanguageTag());
+ aWarning += ResId(RID_SVXSTR_WARN_MISSING_SMARTART, *pResMgr).toString();
+
+ // Show it.
+ WinBits eBits = WB_OK | WB_DEF_OK;
+ ScopedVclPtrInstance<WarningBox> pBox(nullptr, eBits, aWarning);
+ pBox->Execute();
+ }
+
+ return bRet;
}