summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan A. Suarez Romero <jasuarez@igalia.com>2014-12-15 19:13:24 +0100
committerJacobo Aragunde Pérez <jaragunde@igalia.com>2015-04-13 09:08:05 +0000
commite904e6ad4876c095ab5ee7bd40540635c520c9de (patch)
treeed4b74b785cf4e8d83ae5b91eb73359f3d3f2783
parent3618909684a892d912482844b81606bca4e0c29c (diff)
tdf#90478: Show the right default format when saving
When saving a file that is not in ODF format (the default format), there is a dialog asking if should keep the original format or rather use ODF. But the default format can be changed to a different one than ODF. And the dialog will still assume the ODF is the default one. This commit fixes the wording in the dialog to use the the default format instead of hard-coded ODF. In order to keep the text simple, instead of using the long name for the default format, it uses the proper file extension. So if for example changes from ODF to Microsoft Word 97 default format, and saving a non-Word document, the dialog will ask user if document should be saved in default DOC format. Change-Id: I0b259af9eca61161ec8a3d7e72d4722b5afdf4b4 Reviewed-on: https://gerrit.libreoffice.org/15170 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Jacobo Aragunde Pérez <jaragunde@igalia.com>
-rw-r--r--sfx2/inc/guisaveas.hxx1
-rw-r--r--sfx2/source/dialog/alienwarn.cxx10
-rw-r--r--sfx2/source/doc/guisaveas.cxx49
-rw-r--r--sfx2/source/inc/alienwarn.hxx3
-rw-r--r--sfx2/uiconfig/ui/alienwarndialog.ui4
5 files changed, 51 insertions, 16 deletions
diff --git a/sfx2/inc/guisaveas.hxx b/sfx2/inc/guisaveas.hxx
index 0c2aa9048746..19bfb51ff5e3 100644
--- a/sfx2/inc/guisaveas.hxx
+++ b/sfx2/inc/guisaveas.hxx
@@ -80,6 +80,7 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& xModel,
const OUString& aOldUIName,
const OUString& aDefUIName,
+ const OUString& aDefExtension,
bool bCanProceedFurther );
static vcl::Window* GetModelWindow( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& xModel );
diff --git a/sfx2/source/dialog/alienwarn.cxx b/sfx2/source/dialog/alienwarn.cxx
index d1dc6ea1c136..e6c8234964b5 100644
--- a/sfx2/source/dialog/alienwarn.cxx
+++ b/sfx2/source/dialog/alienwarn.cxx
@@ -25,7 +25,7 @@
#include <vcl/msgbox.hxx>
#include "alienwarn.hxx"
-SfxAlienWarningDialog::SfxAlienWarningDialog(vcl::Window* pParent, const OUString& _rFormatName)
+SfxAlienWarningDialog::SfxAlienWarningDialog(vcl::Window* pParent, const OUString& _rFormatName, const OUString& _rDefaultExtension)
: MessageDialog(pParent, "AlienWarnDialog", "sfx/ui/alienwarndialog.ui")
{
get(m_pWarningOnBox, "ask");
@@ -34,6 +34,9 @@ SfxAlienWarningDialog::SfxAlienWarningDialog(vcl::Window* pParent, const OUStrin
m_pWarningOnBox->set_margin_left(QueryBox::GetStandardImage().GetSizePixel().Width() + 12);
get(m_pKeepCurrentBtn, "save");
+ get(m_pUseDefaultFormatBtn, "cancel");
+
+ OUString aExtension = _rDefaultExtension.toAsciiUpperCase();
// replace formatname (text)
OUString sInfoText = get_primary_text();
@@ -45,6 +48,11 @@ SfxAlienWarningDialog::SfxAlienWarningDialog(vcl::Window* pParent, const OUStrin
sInfoText = sInfoText.replaceAll( "%FORMATNAME", _rFormatName );
m_pKeepCurrentBtn->SetText( sInfoText );
+ // replace defaultextension (button)
+ sInfoText = m_pUseDefaultFormatBtn->GetText();
+ sInfoText = sInfoText.replaceAll( "%DEFAULTEXTENSION", aExtension );
+ m_pUseDefaultFormatBtn->SetText( sInfoText );
+
// load value of "warning on" checkbox from save options
m_pWarningOnBox->Check( SvtSaveOptions().IsWarnAlienFormat() );
}
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx
index c75786910d38..12519424e271 100644
--- a/sfx2/source/doc/guisaveas.cxx
+++ b/sfx2/source/doc/guisaveas.cxx
@@ -317,6 +317,7 @@ public:
bool ShowDocumentInfoDialog();
+ OUString GetRecommendedExtension( const OUString& aTypeName );
OUString GetRecommendedDir( const OUString& aSuggestedDir );
OUString GetRecommendedName( const OUString& aSuggestedName,
const OUString& aTypeName );
@@ -791,6 +792,10 @@ sal_Int8 ModelData_Impl::CheckFilter( const OUString& aFilterName )
OUString aPreusedFilterName = GetDocProps().getUnpackedValueOrDefault(
OUString("PreusedFilterName"),
OUString() );
+
+ OUString aDefType = aDefFiltPropsHM.getUnpackedValueOrDefault( "Type", OUString() );
+ OUString aDefExtension = GetRecommendedExtension( aDefType );
+
if ( !aPreusedFilterName.equals( aFilterName ) && !aUIName.equals( aDefUIName ) )
{
// is it possible to get these names from somewhere and not just
@@ -828,7 +833,7 @@ sal_Int8 ModelData_Impl::CheckFilter( const OUString& aFilterName )
return STATUS_SAVEAS;
}
}
- if ( !SfxStoringHelper::WarnUnacceptableFormat( GetModel(), aUIName, aDefUIName, true ) )
+ if ( !SfxStoringHelper::WarnUnacceptableFormat( GetModel(), aUIName, aDefUIName, aDefExtension, true ) )
return STATUS_SAVEAS_STANDARDNAME;
}
}
@@ -1216,6 +1221,32 @@ bool ModelData_Impl::ShowDocumentInfoDialog()
}
+OUString ModelData_Impl::GetRecommendedExtension( const OUString& aTypeName )
+{
+ if ( aTypeName.isEmpty() )
+ return OUString();
+
+ uno::Reference< container::XNameAccess > xTypeDetection = uno::Reference< container::XNameAccess >(
+ comphelper::getProcessServiceFactory()->createInstance("com.sun.star.document.TypeDetection"),
+ uno::UNO_QUERY );
+ if ( xTypeDetection.is() )
+ {
+ uno::Sequence< beans::PropertyValue > aTypeNameProps;
+ if ( ( xTypeDetection->getByName( aTypeName ) >>= aTypeNameProps ) && aTypeNameProps.getLength() )
+ {
+ ::comphelper::SequenceAsHashMap aTypeNamePropsHM( aTypeNameProps );
+ uno::Sequence< OUString > aExtensions = aTypeNamePropsHM.getUnpackedValueOrDefault(
+ OUString("Extensions"),
+ ::uno::Sequence< OUString >() );
+ if ( aExtensions.getLength() )
+ return aExtensions[0];
+ }
+ }
+
+ return OUString();
+}
+
+
OUString ModelData_Impl::GetRecommendedDir( const OUString& aSuggestedDir )
{
OUString aRecommendedDir;
@@ -1283,16 +1314,9 @@ OUString ModelData_Impl::GetRecommendedName( const OUString& aSuggestedName, con
INetURLObject aObj( "c:/" + aRecommendedName, INetProtocol::File,
INetURLObject::ENCODE_ALL, RTL_TEXTENCODING_UTF8, INetURLObject::FSYS_DOS );
- uno::Sequence< beans::PropertyValue > aTypeNameProps;
- if ( ( xTypeDetection->getByName( aTypeName ) >>= aTypeNameProps ) && aTypeNameProps.getLength() )
- {
- ::comphelper::SequenceAsHashMap aTypeNamePropsHM( aTypeNameProps );
- uno::Sequence< OUString > aExtensions = aTypeNamePropsHM.getUnpackedValueOrDefault(
- OUString("Extensions"),
- ::uno::Sequence< OUString >() );
- if ( aExtensions.getLength() )
- aObj.SetExtension( aExtensions[0] );
- }
+ OUString aExtension = GetRecommendedExtension( aTypeName );
+ if ( !aExtension.isEmpty() )
+ aObj.SetExtension( aExtension );
aRecommendedName = aObj.GetName( INetURLObject::DECODE_WITH_CHARSET, RTL_TEXTENCODING_UTF8 );
}
@@ -1850,13 +1874,14 @@ void SfxStoringHelper::SetDocInfoState(
bool SfxStoringHelper::WarnUnacceptableFormat( const uno::Reference< frame::XModel >& xModel,
const OUString& aOldUIName,
const OUString& /*aDefUIName*/,
+ const OUString& aDefExtension,
bool /*bCanProceedFurther*/ )
{
if ( !SvtSaveOptions().IsWarnAlienFormat() )
return true;
vcl::Window* pWin = SfxStoringHelper::GetModelWindow( xModel );
- SfxAlienWarningDialog aDlg( pWin, aOldUIName );
+ SfxAlienWarningDialog aDlg( pWin, aOldUIName, aDefExtension );
return aDlg.Execute() == RET_OK;
}
diff --git a/sfx2/source/inc/alienwarn.hxx b/sfx2/source/inc/alienwarn.hxx
index 8609f68ce861..f2f455211432 100644
--- a/sfx2/source/inc/alienwarn.hxx
+++ b/sfx2/source/inc/alienwarn.hxx
@@ -26,10 +26,11 @@ class SfxAlienWarningDialog : public MessageDialog
{
private:
PushButton* m_pKeepCurrentBtn;
+ PushButton* m_pUseDefaultFormatBtn;
CheckBox* m_pWarningOnBox;
public:
- SfxAlienWarningDialog(vcl::Window* pParent, const OUString& _rFormatName);
+ SfxAlienWarningDialog(vcl::Window* pParent, const OUString& _rFormatName, const OUString& _rDefaultExtension);
virtual ~SfxAlienWarningDialog();
};
diff --git a/sfx2/uiconfig/ui/alienwarndialog.ui b/sfx2/uiconfig/ui/alienwarndialog.ui
index d83a47f45a97..d7b49b8d5cbd 100644
--- a/sfx2/uiconfig/ui/alienwarndialog.ui
+++ b/sfx2/uiconfig/ui/alienwarndialog.ui
@@ -24,7 +24,7 @@
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="cancel">
- <property name="label" translatable="yes">Use _ODF Format</property>
+ <property name="label" translatable="yes">Use %DEFAULTEXTENSION _Format</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -65,7 +65,7 @@
</child>
<child>
<object class="GtkCheckButton" id="ask">
- <property name="label" translatable="yes">_Ask when not saving in ODF format</property>
+ <property name="label" translatable="yes">_Ask when not saving in ODF or default format</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>