Hello,

I would like to inform everyone that I attached my purposed patch that fixes the bug 39168 in our bug report page, since it causes an already mentioned problem in the overwriting dialog's popup I don't consider it as something stable, but as in the recent days there were arguments about the patch I wouldn't like to improve it anymore, or maybe in case if you could put it finally into the main branch and could consider it as a commit. Here I also attach the purposed patch and I am waiting for your reviews.

Thanks,

Gabor
>From 9949add108630b613ec36bf3185bf293ebc7940b Mon Sep 17 00:00:00 2001
From: Gabor Jenei <[email protected]>
Date: Mon, 8 Aug 2011 11:30:51 +0200
Subject: [PATCH] purposed patch for bug 39168

---
 desktop/source/deployment/gui/dp_gui_dialog.src |    2 +-
 sfx2/source/dialog/filedlghelper.cxx            |   11 +--
 sfx2/source/doc/guisaveas.cxx                   |  102 +++++++++++++++++++---
 3 files changed, 94 insertions(+), 21 deletions(-)

diff --git a/desktop/source/deployment/gui/dp_gui_dialog.src 
b/desktop/source/deployment/gui/dp_gui_dialog.src
index 12b6acb..28962fc 100644
--- a/desktop/source/deployment/gui/dp_gui_dialog.src
+++ b/desktop/source/deployment/gui/dp_gui_dialog.src
@@ -1,4 +1,4 @@
-/*************************************************************************
+/*************************************************************************
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
diff --git a/sfx2/source/dialog/filedlghelper.cxx 
b/sfx2/source/dialog/filedlghelper.cxx
index 996e181..32cf0a1 100644
--- a/sfx2/source/dialog/filedlghelper.cxx
+++ b/sfx2/source/dialog/filedlghelper.cxx
@@ -1655,12 +1655,12 @@ OUString FileDialogHelper_Impl::getPath() const
 {
     OUString aPath;
 
-    if ( mxFileDlg.is() )
+    if ( mxFileDlg.is() ){
         aPath = mxFileDlg->getDisplayDirectory();
-
-    if ( !aPath.getLength() )
+    }
+    if ( !aPath.getLength() ){
         aPath = maPath;
-
+    }
     return aPath;
 }
 
@@ -2496,9 +2496,8 @@ void FileDialogHelper::SetTitle( const String& rNewTitle )
 String FileDialogHelper::GetPath() const
 {
     OUString aPath;
-
     if ( mpImp->mlLastURLs.size() > 0)
-        return mpImp->mlLastURLs[0];
+        aPath=mpImp->mlLastURLs[0];
 
     if ( mpImp->mxFileDlg.is() )
     {
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx
index 783d623..f09c2a4 100644
--- a/sfx2/source/doc/guisaveas.cxx
+++ b/sfx2/source/doc/guisaveas.cxx
@@ -77,6 +77,7 @@
 #include <vcl/msgbox.hxx>
 #include <vcl/window.hxx>
 #include <toolkit/awt/vclxwindow.hxx>
+#include <svtools/FilterConfigItem.hxx>
 
 #include <sfx2/sfxsids.hrc>
 #include <doc.hrc>
@@ -95,18 +96,18 @@
 #define DOCPROPSNUM 17
 
 // flags that specify requested operation
-#define EXPORT_REQUESTED                       1
-#define PDFEXPORT_REQUESTED                    2
-#define PDFDIRECTEXPORT_REQUESTED      4
-#define WIDEEXPORT_REQUESTED           8
-#define SAVE_REQUESTED                         16
-#define SAVEAS_REQUESTED                       32
+#define EXPORT_REQUESTED                        1
+#define PDFEXPORT_REQUESTED                     2
+#define PDFDIRECTEXPORT_REQUESTED       4
+#define WIDEEXPORT_REQUESTED            8
+#define SAVE_REQUESTED                          16
+#define SAVEAS_REQUESTED                        32
 
 // possible statuses of save operation
-#define STATUS_NO_ACTION                       0
-#define STATUS_SAVE                                    1
-#define STATUS_SAVEAS                          2
-#define STATUS_SAVEAS_STANDARDNAME     3
+#define STATUS_NO_ACTION                        0
+#define STATUS_SAVE                                     1
+#define STATUS_SAVEAS                           2
+#define STATUS_SAVEAS_STANDARDNAME      3
 
 const ::rtl::OUString 
aFilterNameString(RTL_CONSTASCII_USTRINGPARAM("FilterName"));
 const ::rtl::OUString 
aFilterOptionsString(RTL_CONSTASCII_USTRINGPARAM("FilterOptions"));
@@ -1013,7 +1014,37 @@ sal_Bool ModelData_Impl::OutputFileDialog( sal_Int8 
nStoreMode,
     GetMediaDescr() << aPropsFromDialog;
 
     // get the path from the dialog
-    INetURLObject aURL( pFileDlg->GetPath() );
+    String aPath(pFileDlg->GetPath());
+    //we need to convert extension in case of PDFExport and IsAddStream is true
+    FilterConfigItem 
aCfgItem(String(RTL_CONSTASCII_USTRINGPARAM("Office.Common/Filter/PDF/Export/")));
+    sal_Bool 
bAddStream=aCfgItem.ReadBool(String(RTL_CONSTASCII_USTRINGPARAM("IsAddStream")),sal_False);
+    if(bAddStream==sal_True){
+        //get the begining of extension: len-3
+        xub_StrLen nIndex=aPath.Len()-3;
+        //modify extension to od*.pdf according to the filter type
+        
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("writer_pdf_Export"))){
+            aPath.Replace(nIndex,3,String::CreateFromAscii("odt"));
+            aPath+=String::CreateFromAscii(".pdf");
+        }
+        
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("calc_pdf_Export"))){
+            aPath.Replace(nIndex,3,String::CreateFromAscii("ods"));
+            aPath+=String::CreateFromAscii(".pdf");
+        }
+        
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("impress_pdf_Export"))){
+            aPath.Replace(nIndex,3,String::CreateFromAscii("odp"));
+            aPath+=String::CreateFromAscii(".pdf");
+        }
+        
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("draw_pdf_Export"))){
+            aPath.Replace(nIndex,3,String::CreateFromAscii("odg"));
+            aPath+=String::CreateFromAscii(".pdf");
+        }
+        
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("math_pdf_Export"))){
+            aPath.Replace(nIndex,3,String::CreateFromAscii("odf"));
+            aPath+=String::CreateFromAscii(".pdf");
+        }
+    }
+
+    INetURLObject aURL( aPath );
     // the path should be provided outside since it might be used for further 
calls to the dialog
     aSuggestedName = aURL.GetName( INetURLObject::DECODE_WITH_CHARSET );
        aSuggestedDir = pFileDlg->GetDisplayDirectory();
@@ -1492,7 +1523,7 @@ sal_Bool SfxStoringHelper::GUIStoreModel( const 
uno::Reference< frame::XModel >&
         if ( aStdDirIter != aModelData.GetMediaDescr().end() )
             aStdDirIter->second >>= sStandardDir;
 
-        ::com::sun::star::uno::Sequence< ::rtl::OUString >     aBlackList;
+        ::com::sun::star::uno::Sequence< ::rtl::OUString >      aBlackList;
 
         ::comphelper::SequenceAsHashMap::const_iterator aBlackListIter =
             aModelData.GetMediaDescr().find( 
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BlackList")) );
@@ -1580,11 +1611,54 @@ sal_Bool SfxStoringHelper::GUIStoreModel( const 
uno::Reference< frame::XModel >&
     if( !( nStoreMode & PDFEXPORT_REQUESTED ) && !bFilterFlagsSet
         && ( ( nStoreMode & EXPORT_REQUESTED ) || bUseFilterOptions ) )
     {
+        FilterConfigItem 
aCfgItem(String(RTL_CONSTASCII_USTRINGPARAM("Office.Common/Filter/PDF/Export/")));
         // execute filter options dialog
-        if ( aModelData.ExecuteFilterDialog_Impl( aFilterName ) )
+
+        sal_Bool 
bOldAddStream=aCfgItem.ReadBool(String(RTL_CONSTASCII_USTRINGPARAM("IsAddStream")),sal_False);
+        if ( aModelData.ExecuteFilterDialog_Impl( aFilterName ) ){
             bDialogUsed = sal_True;
+        }
+        //has bAddStream just changed?
+        FilterConfigItem 
aCfgItem2(String(RTL_CONSTASCII_USTRINGPARAM("Office.Common/Filter/PDF/Export/")));
+        sal_Bool 
bAddStream=aCfgItem2.ReadBool(String(RTL_CONSTASCII_USTRINGPARAM("IsAddStream")),sal_False);
+        if(bAddStream==sal_True && bOldAddStream!=sal_True){ //AddStream has 
just been set
+            ::rtl::OUString aPath(aURL.GetURLPath());
+            //the index of .pdf extension
+            sal_Int32 nIndex=aPath.getLength()-3;
+            ::rtl::OUString aNewPath;
+            
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("writer_pdf_Export"))){
+                
aNewPath=aPath.replaceAt(nIndex,3,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("odt")));
+                aNewPath+=::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".pdf"));
+            }
+            
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("calc_pdf_Export"))){
+                
aNewPath=aPath.replaceAt(nIndex,3,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ods")));
+                aNewPath+=::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".pdf"));
+            }
+            
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("impress_pdf_Export"))){
+                
aNewPath=aPath.replaceAt(nIndex,3,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("odp")));
+                aNewPath+=::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".pdf"));
+            }
+            
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("draw_pdf_Export"))){
+                
aNewPath=aPath.replaceAt(nIndex,3,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("odg")));
+                aNewPath+=::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".pdf"));
+            }
+            
if(aFilterName==::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("math_pdf_Export"))){
+                
aNewPath=aPath.replaceAt(nIndex,3,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("odf")));
+                aNewPath+=::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".pdf"));
+            }
+            //is it an existing path?
+            bool bExists=false;
+            aURL.SetURLPath(aNewPath);
+        }
+        if(bAddStream==sal_False && bOldAddStream==sal_True){ //need to remove 
the added .od*
+            ::rtl::OUString aPath(aURL.GetURLPath());
+            //the index of the begining of .od*.pdf 7 chars were inserted
+            sal_Int32 nIndex=aPath.getLength()-7;
+            ::rtl::OUString aNewPath=aPath.copy(0,nIndex);
+            aNewPath+=::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("pdf"));
+            aURL.SetURLPath(aNewPath);
+        }
     }
-
     // so the arguments will not change any more and can be stored to the main 
location
     aArgsSequence = aModelData.GetMediaDescr().getAsConstPropertyValueList();
 
-- 
1.7.2.5

_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to