From 9949add108630b613ec36bf3185bf293ebc7940b Mon Sep 17 00:00:00 2001 From: Gabor Jenei 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 #include #include +#include #include #include @@ -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