[Libreoffice-commits] core.git: sfx2/inc sfx2/source sfx2/uiconfig

Juan A. Suarez Romero jasuarez at igalia.com
Mon Apr 13 02:08:28 PDT 2015


 sfx2/inc/guisaveas.hxx              |    1 
 sfx2/source/dialog/alienwarn.cxx    |   10 ++++++-
 sfx2/source/doc/guisaveas.cxx       |   49 +++++++++++++++++++++++++++---------
 sfx2/source/inc/alienwarn.hxx       |    3 +-
 sfx2/uiconfig/ui/alienwarndialog.ui |    4 +-
 5 files changed, 51 insertions(+), 16 deletions(-)

New commits:
commit e904e6ad4876c095ab5ee7bd40540635c520c9de
Author: Juan A. Suarez Romero <jasuarez at igalia.com>
Date:   Mon Dec 15 19:13:24 2014 +0100

    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 at libreoffice.org>
    Reviewed-by: Jacobo Aragunde PĂ©rez <jaragunde at igalia.com>

diff --git a/sfx2/inc/guisaveas.hxx b/sfx2/inc/guisaveas.hxx
index 0c2aa90..19bfb51 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 d1dc6ea..e6c8234 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 c757869..1251942 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 8609f68..f2f4552 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 d83a47f..d7b49b8 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>


More information about the Libreoffice-commits mailing list