include/oox/core/xmlfilterbase.hxx | 6 +++++ include/svx/dialogs.hrc | 3 +- oox/source/core/xmlfilterbase.cxx | 8 ++++++- oox/source/drawingml/graphicshapecontext.cxx | 5 ++++ oox/source/ppt/pptimport.cxx | 28 ++++++++++++++++++++++++++- svx/source/stbctrls/stbctrls.src | 6 +++++ 6 files changed, 53 insertions(+), 3 deletions(-)
New commits: commit 3687612a93813449cfc68ce5ece3b785560b2e58 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Fri Feb 3 08:35:59 2017 +0100 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. (cherry picked from commit ae828495be9c2ac5fdb4c1747ed7bdd51e5d87a7) Conflicts: include/svx/dialogs.hrc oox/source/core/xmlfilterbase.cxx Change-Id: I2bfeeedcaa244f08d8a0c208167e79d7bb697e6d Reviewed-on: https://gerrit.libreoffice.org/33873 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/include/oox/core/xmlfilterbase.hxx b/include/oox/core/xmlfilterbase.hxx index c118c22..1c03a2b 100644 --- a/include/oox/core/xmlfilterbase.hxx +++ b/include/oox/core/xmlfilterbase.hxx @@ -235,6 +235,10 @@ public: bool isMSO2007Document() const; + /// Signal that an MSO 2007-created SmartArt was found, need to warn the + /// user about it. + void setMissingExtDrawing(); + void checkDocumentProperties( const css::uno::Reference<css::document::XDocumentProperties>& xDocProps); @@ -258,6 +262,8 @@ private: sal_Int32 mnRelId; sal_Int32 mnMaxDocId; bool mbMSO2007; +protected: + bool mbMissingExtDrawing; }; } // namespace core diff --git a/include/svx/dialogs.hrc b/include/svx/dialogs.hrc index 5c9b5e4..c8f74ac 100644 --- a/include/svx/dialogs.hrc +++ b/include/svx/dialogs.hrc @@ -997,9 +997,10 @@ #define RID_SVXSTR_ERR_REPEAT_PASSWD (SVX_OOO_BUILD_START + 8) // 1238 #define RID_SVXBMP_ZOOM_PAGE (SVX_OOO_BUILD_START + 9) // 1239 #define RID_SVXSTR_FIT_SLIDE (SVX_OOO_BUILD_START + 10) // 1240 +#define RID_SVXSTR_WARN_MISSING_SMARTART (SVX_OOO_BUILD_START + 11) // 1241 // sidebar-related resources -#define RID_SVX_SIDEBAR_BEGIN (RID_SVX_START + 1241) +#define RID_SVX_SIDEBAR_BEGIN (RID_SVX_START + 1242) #define IMG_SPACE3 (RID_SVX_SIDEBAR_BEGIN + 0) #define IMG_INDENT_HANG (RID_SVX_SIDEBAR_BEGIN + 1) #define IMG_NONE_ICON (RID_SVX_SIDEBAR_BEGIN + 21) diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx index 2019f31..4584306 100644 --- a/oox/source/core/xmlfilterbase.cxx +++ b/oox/source/core/xmlfilterbase.cxx @@ -197,7 +197,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; +} + } // namespace core } // namespace oox diff --git a/oox/source/drawingml/graphicshapecontext.cxx b/oox/source/drawingml/graphicshapecontext.cxx index 73c2fdc..b58bf56 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 9a606e6..7242e09 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" @@ -90,7 +97,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; } diff --git a/svx/source/stbctrls/stbctrls.src b/svx/source/stbctrls/stbctrls.src index 0337f77..2be3e63 100644 --- a/svx/source/stbctrls/stbctrls.src +++ b/svx/source/stbctrls/stbctrls.src @@ -119,6 +119,12 @@ String RID_SVXSTR_DOC_LOAD String RID_SVXSTR_FIT_SLIDE { Text [ en-US ] = "Fit slide to current window."; +} +; + +String RID_SVXSTR_WARN_MISSING_SMARTART +{ + Text [ en-US ] = "Could not load all SmartArts. Saving in Microsoft Office 2010 or later would avoid this issue."; }; String RID_SVXSTR_ZOOMTOOL_HINT
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits