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