[Libreoffice-commits] core.git: desktop/source include/sfx2 include/xmloff sfx2/source xmloff/source

Katarina Behrens Katarina.Behrens at cib.de
Tue Sep 5 14:09:29 UTC 2017


 desktop/source/app/dispatchwatcher.cxx |   26 ++++++++++++++++++++++++--
 desktop/source/app/officeipcthread.cxx |    7 ++++++-
 include/sfx2/docfile.hxx               |    1 +
 include/sfx2/sfxsids.hrc               |    1 +
 include/xmloff/xmlexp.hxx              |    1 +
 sfx2/source/appl/appuno.cxx            |   18 ++++++++++++++++++
 sfx2/source/doc/docfile.cxx            |    6 ++++++
 xmloff/source/core/xmlexp.cxx          |    5 +++++
 8 files changed, 62 insertions(+), 3 deletions(-)

New commits:
commit a897c5ed86c6d8981305bf725e83c76e4e3a36d0
Author: Katarina Behrens <Katarina.Behrens at cib.de>
Date:   Fri Sep 1 00:04:09 2017 +0200

    tdf#109202: pass arg of --convert-images-to to (f)odt filter
    
    Tunelling 1 piece of information through 20 layers of abstraction
    
    Advanced tunelling all the way to sfx2
    
    Exhausted beyond recognition arrived to [Flat]ODF filter
    
    Change-Id: I0597c20c28f5cf8e2c60c4398622b36bda83abd0
    Reviewed-on: https://gerrit.libreoffice.org/41777
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Tested-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/desktop/source/app/dispatchwatcher.cxx b/desktop/source/app/dispatchwatcher.cxx
index 4f31d226b4bf..c33dcaf61c8d 100644
--- a/desktop/source/app/dispatchwatcher.cxx
+++ b/desktop/source/app/dispatchwatcher.cxx
@@ -583,9 +583,12 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest
                             OUString aParam = aDispatchRequest.aPrinterName;
                             sal_Int32 nPathIndex =  aParam.lastIndexOf( ';' );
                             sal_Int32 nFilterIndex = aParam.indexOf( ':' );
+                            sal_Int32 nImgFilterIndex = aParam.lastIndexOf( '|' );
                             if( nPathIndex < nFilterIndex )
                                 nFilterIndex = -1;
-                            OUString aFilterOut=aParam.copy( nPathIndex+1 );
+
+                            OUString aFilterOut;
+                            OUString aImgOut;
                             OUString aFilter;
                             OUString aFilterExt;
                             bool bGuess = false;
@@ -601,6 +604,15 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest
                                 bGuess = true;
                                 aFilterExt = aParam.copy( 0, nPathIndex );
                             }
+
+                            if( nImgFilterIndex >= 0 )
+                            {
+                                aImgOut = aParam.copy( nImgFilterIndex+1 );
+                                aFilterOut = aParam.copy( nPathIndex+1, nImgFilterIndex-nPathIndex-1 );
+                            }
+                            else
+                                aFilterOut = aParam.copy( nPathIndex+1 );
+
                             INetURLObject aOutFilename( aObj );
                             aOutFilename.SetExtension( aFilterExt );
                             FileBase::getFileURLFromSystemPath( aFilterOut, aFilterOut );
@@ -633,7 +645,11 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest
                             else
                             {
                                 sal_Int32 nFilterOptionsIndex = aFilter.indexOf(':');
-                                Sequence<PropertyValue> conversionProperties( 0 < nFilterOptionsIndex ? 3 : 2 );
+                                sal_Int32 nProps = ( 0 < nFilterOptionsIndex ) ? 3 : 2;
+
+                                if ( !aImgOut.isEmpty() )
+                                    nProps +=1;
+                                Sequence<PropertyValue> conversionProperties( nProps );
                                 conversionProperties[0].Name = "Overwrite";
                                 conversionProperties[0].Value <<= true;
 
@@ -650,6 +666,12 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest
                                     conversionProperties[1].Value <<= aFilter;
                                 }
 
+                                if ( !aImgOut.isEmpty() )
+                                {
+                                    conversionProperties[nProps-1].Name = "ImageFilter";
+                                    conversionProperties[nProps-1].Value <<= aImgOut;
+                                }
+
                                 OUString aTempName;
                                 FileBase::getSystemPathFromFileURL(aName, aTempName);
                                 OString aSource8 = OUStringToOString(aTempName, osl_getThreadTextEncoding());
diff --git a/desktop/source/app/officeipcthread.cxx b/desktop/source/app/officeipcthread.cxx
index 4abd35437868..01abf03b9a6f 100644
--- a/desktop/source/app/officeipcthread.cxx
+++ b/desktop/source/app/officeipcthread.cxx
@@ -1291,6 +1291,7 @@ static void AddConversionsToDispatchList(
     const OUString& rPrinterName,
     const OUString& rFactory,
     const OUString& rParamOut,
+    const OUString& rImgOut,
     const bool isTextCat,
     const bool isScriptCat )
 {
@@ -1317,6 +1318,7 @@ static void AddConversionsToDispatchList(
     }
 
     OUString aOutDir( rParamOut.trim() );
+    OUString aImgOut( rImgOut.trim() );
     OUString aPWD;
     if (cwdUrl)
     {
@@ -1341,6 +1343,9 @@ static void AddConversionsToDispatchList(
         aParam += ";" + aPWD;
     }
 
+    if( !rImgOut.trim().isEmpty() )
+        aParam += "|" + aImgOut;
+
     for (std::vector< OUString >::const_iterator i(rRequestList.begin());
          i != rRequestList.end(); ++i)
     {
@@ -1366,7 +1371,7 @@ bool RequestHandler::ExecuteCmdLineRequests(
     AddToDispatchList( aDispatchList, aRequest.aCwdUrl, aRequest.aPrintToList, DispatchWatcher::REQUEST_PRINTTO, aRequest.aPrinterName, aRequest.aModule );
     AddToDispatchList( aDispatchList, aRequest.aCwdUrl, aRequest.aForceOpenList, DispatchWatcher::REQUEST_FORCEOPEN, "", aRequest.aModule );
     AddToDispatchList( aDispatchList, aRequest.aCwdUrl, aRequest.aForceNewList, DispatchWatcher::REQUEST_FORCENEW, "", aRequest.aModule );
-    AddConversionsToDispatchList( aDispatchList, aRequest.aCwdUrl, aRequest.aConversionList, aRequest.aConversionParams, aRequest.aPrinterName, aRequest.aModule, aRequest.aConversionOut, aRequest.bTextCat, aRequest.bScriptCat );
+    AddConversionsToDispatchList( aDispatchList, aRequest.aCwdUrl, aRequest.aConversionList, aRequest.aConversionParams, aRequest.aPrinterName, aRequest.aModule, aRequest.aConversionOut, aRequest.aImageConversionType, aRequest.bTextCat, aRequest.bScriptCat );
     bool bShutdown( false );
 
     if ( pGlobal.is() )
diff --git a/include/sfx2/docfile.hxx b/include/sfx2/docfile.hxx
index fc44f2d9ce86..9fd18fda2782 100644
--- a/include/sfx2/docfile.hxx
+++ b/include/sfx2/docfile.hxx
@@ -202,6 +202,7 @@ public:
     void                SetInCheckIn( bool bInCheckIn );
     bool                IsInCheckIn( );
     bool                IsSkipImages( );
+    OUString            GetConvertImagesFilter();
 
     SAL_DLLPRIVATE bool HasStorage_Impl() const;
 
diff --git a/include/sfx2/sfxsids.hrc b/include/sfx2/sfxsids.hrc
index 6fdd02c4caf6..7ed7e1e0c728 100644
--- a/include/sfx2/sfxsids.hrc
+++ b/include/sfx2/sfxsids.hrc
@@ -102,6 +102,7 @@
 #define SID_SIGNPDF                         (SID_SFX_START + 519)
 #define SID_SAVEACOPY                       (SID_SFX_START + 999)
 #define SID_SAVEACOPYITEM                   (SID_SFX_START + 998)
+#define SID_CONVERT_IMAGES                  (SID_SFX_START + 997)
 #define SID_CLOSING                         (SID_SFX_START +1539)
 #define SID_CLOSEDOC                        (SID_SFX_START + 503)
 #define SID_CLOSEDOCS                       (SID_SFX_START + 595)
diff --git a/include/xmloff/xmlexp.hxx b/include/xmloff/xmlexp.hxx
index e4a390a5ef6a..f981929b3fe7 100644
--- a/include/xmloff/xmlexp.hxx
+++ b/include/xmloff/xmlexp.hxx
@@ -138,6 +138,7 @@ class XMLOFF_DLLPUBLIC SvXMLExport : public cppu::WeakImplHelper<
     OUString     msGraphicObjectProtocol;
     OUString     msEmbeddedObjectProtocol;
     OUString     msFilterName;
+    OUString     msImgFilterName;
     SvXMLNamespaceMap           *mpNamespaceMap;    // the namepspace map
     SvXMLUnitConverter          maUnitConv;        // the unit converter
     SvXMLNumFmtExport           *mpNumExport;
diff --git a/sfx2/source/appl/appuno.cxx b/sfx2/source/appl/appuno.cxx
index 352dbcfb5511..8739f8f656a0 100644
--- a/sfx2/source/appl/appuno.cxx
+++ b/sfx2/source/appl/appuno.cxx
@@ -162,6 +162,7 @@ static char const sEncryptionData[] = "EncryptionData";
 static char const sFailOnWarning[] = "FailOnWarning";
 static char const sDocumentService[] = "DocumentService";
 static char const sFilterProvider[] = "FilterProvider";
+static char const sImageFilter[] = "ImageFilter";
 
 static bool isMediaDescriptor( sal_uInt16 nSlotId )
 {
@@ -733,6 +734,14 @@ void TransformParameters( sal_uInt16 nSlotId, const uno::Sequence<beans::Propert
                 if (bOK)
                     rSet.Put( SfxStringItem( SID_FILE_FILTEROPTIONS, sVal ) );
             }
+            else if ( aName == sImageFilter )
+            {
+                OUString sVal;
+                bool bOK = ((rProp.Value >>= sVal) && !sVal.isEmpty());
+                DBG_ASSERT( bOK, "invalid type or value for FilterFlags" );
+                if (bOK)
+                    rSet.Put( SfxStringItem( SID_CONVERT_IMAGES, sVal ) );
+            }
             else if ( aName == sMacroExecMode )
             {
                 sal_Int16 nVal =-1;
@@ -1055,6 +1064,8 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, uno::Sequence<b
                 nAdditional++;
             if (rSet.HasItem(SID_FILTER_PROVIDER))
                 ++nAdditional;
+            if ( rSet.GetItemState( SID_CONVERT_IMAGES ) == SfxItemState::SET )
+                nAdditional++;
 
             // consider additional arguments
             nProps += nAdditional;
@@ -1196,6 +1207,8 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, uno::Sequence<b
                         continue;
                     if (nId == SID_FILTER_PROVIDER)
                         continue;
+                    if ( nId == SID_CONVERT_IMAGES )
+                        continue;
 
                     // used only internally
                     if ( nId == SID_SAVETO )
@@ -1597,6 +1610,11 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, uno::Sequence<b
             pValue[nActProp].Name = sFilterProvider;
             pValue[nActProp++].Value <<= static_cast<const SfxStringItem*>(pItem)->GetValue();
         }
+        if (rSet.HasItem(SID_CONVERT_IMAGES, &pItem))
+        {
+            pValue[nActProp].Name = sImageFilter;
+            pValue[nActProp++].Value <<= static_cast<const SfxStringItem*>(pItem)->GetValue();
+        }
     }
 
     rArgs = aSequ;
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index 7930427925cf..f37a6c62746d 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -473,6 +473,12 @@ bool SfxMedium::IsSkipImages()
     return pSkipImagesItem && pSkipImagesItem->GetValue() == "SkipImages";
 }
 
+OUString SfxMedium::GetConvertImagesFilter()
+{
+    const SfxStringItem* pConvertItem = GetItemSet()->GetItem<SfxStringItem>(SID_CONVERT_IMAGES);
+    return ( pConvertItem ? pConvertItem->GetValue() : OUString() );
+}
+
 SvStream* SfxMedium::GetInStream()
 {
     if ( pImpl->m_pInStream )
diff --git a/xmloff/source/core/xmlexp.cxx b/xmloff/source/core/xmlexp.cxx
index 874a330882b3..cd8442d08fa1 100644
--- a/xmloff/source/core/xmlexp.cxx
+++ b/xmloff/source/core/xmlexp.cxx
@@ -816,6 +816,11 @@ sal_Bool SAL_CALL SvXMLExport::filter( const uno::Sequence< beans::PropertyValue
                 if (!(rValue >>= mpImpl->maDestShellID))
                     return false;
             }
+            else if( rPropName == "ImageFilter")
+            {
+                if (!(rValue >>= msImgFilterName))
+                    return false;
+            }
         }
 
 


More information about the Libreoffice-commits mailing list