include/sfx2/docinsert.hxx           |    9 +++++++--
 include/sfx2/filedlghelper.hxx       |    6 ++++--
 sc/source/ui/docshell/docsh4.cxx     |    5 ++++-
 sfx2/inc/filedlghelper.hrc           |    2 ++
 sfx2/source/dialog/filedlghelper.cxx |   17 +++++++++++++++--
 sfx2/source/dialog/filedlghelper.src |   10 ++++++++++
 sfx2/source/doc/docinsert.cxx        |   32 ++++++++++++++++++++++++++++----
 starmath/source/view.cxx             |    2 +-
 sw/source/uibase/inc/uivwimp.hxx     |    6 +++++-
 sw/source/uibase/uiview/uivwimp.cxx  |   21 +++++++++++++++++++--
 sw/source/uibase/uiview/view2.cxx    |    3 ++-
 sw/source/uibase/utlui/glbltree.cxx  |    2 +-
 12 files changed, 98 insertions(+), 17 deletions(-)

New commits:
commit e2d3e936ab03274696f235c9d74e247380070f6f
Author: Matteo Casalin <matteo.casa...@yahoo.com>
Date:   Thu Mar 16 18:09:20 2017 +0100

    tdf#95992 "Edit" > "Compare Document..." opens dialog that is...
    
    misnamed "Insert"
    
    Issue is that the caption of the dialog is handled by generic code,
    which was not designed with comparison in mind. This fix extends the
    captions that can be used by such generic codes, without modifying
    the underlaying architecture.
    Letting callers directly provide caption text might be more versatile,
    though.
    
    The fix is extended to:
    * Writer Merge functionality
    * Calc Compare/Merge functionalities
    which use the same dialog (and thus were also displaying "Insert").
    
    Change-Id: I452b37bf7d0024924c87316cd47572c09b373b65
    Reviewed-on: https://gerrit.libreoffice.org/35285
    Reviewed-by: Michael Stahl <mst...@redhat.com>
    Tested-by: Michael Stahl <mst...@redhat.com>

diff --git a/include/sfx2/docinsert.hxx b/include/sfx2/docinsert.hxx
index 4f47a79bd896..13f210de5b7f 100644
--- a/include/sfx2/docinsert.hxx
+++ b/include/sfx2/docinsert.hxx
@@ -53,8 +53,13 @@ private:
     DECL_LINK(DialogClosedHdl, sfx2::FileDialogHelper*, void);
 
 public:
-    DocumentInserter(const OUString& rFactory,
-                     bool const bEnableMultiSelection = false);
+    enum class Mode {
+        Insert,
+        InsertMulti,
+        Compare,
+        Merge
+    };
+    DocumentInserter(const OUString& rFactory, const Mode mode = Mode::Insert);
     ~DocumentInserter();
 
     void                    StartExecuteModal( const 
Link<sfx2::FileDialogHelper*,void>& _rDialogClosedLink );
diff --git a/include/sfx2/filedlghelper.hxx b/include/sfx2/filedlghelper.hxx
index 28159ec0cb45..f2f8ed6356d3 100644
--- a/include/sfx2/filedlghelper.hxx
+++ b/include/sfx2/filedlghelper.hxx
@@ -67,10 +67,12 @@ enum class FileDialogFlags {
     MultiSelection    = 0x08,
     Graphic           = 0x10,    // register graphic formats
     /// Sign existing PDF.
-    SignPDF           = 0x20
+    SignPDF           = 0x20,
+    InsertCompare     = 0x40,    /// Special insertion ("Compare" caption)
+    InsertMerge       = 0x80,    /// Special insertion ("Merge" caption)
 };
 namespace o3tl {
-    template<> struct typed_flags<FileDialogFlags> : 
is_typed_flags<FileDialogFlags, 0x3f> {};
+    template<> struct typed_flags<FileDialogFlags> : 
is_typed_flags<FileDialogFlags, 0xFF> {};
 }
 
 #define FILEDIALOG_FILTER_ALL   "*.*"
diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx
index 5e986635b820..135034c784e7 100644
--- a/sc/source/ui/docshell/docsh4.cxx
+++ b/sc/source/ui/docshell/docsh4.cxx
@@ -722,13 +722,16 @@ void ScDocShell::Execute( SfxRequest& rReq )
                 }
                 else
                 {
+                    const sfx2::DocumentInserter::Mode mode { 
nSlot==SID_DOCUMENT_COMPARE
+                        ? sfx2::DocumentInserter::Mode::Compare
+                        : sfx2::DocumentInserter::Mode::Merge};
                     // start file dialog asynchronous
                     pImpl->bIgnoreLostRedliningWarning = true;
                     delete pImpl->pRequest;
                     pImpl->pRequest = new SfxRequest( rReq );
                     delete pImpl->pDocInserter;
                     pImpl->pDocInserter = new ::sfx2::DocumentInserter(
-                        ScDocShell::Factory().GetFactoryName(), false );
+                        ScDocShell::Factory().GetFactoryName(), mode );
                     pImpl->pDocInserter->StartExecuteModal( LINK( this, 
ScDocShell, DialogClosedHdl ) );
                     return ;
                 }
diff --git a/sfx2/inc/filedlghelper.hrc b/sfx2/inc/filedlghelper.hrc
index e63c9955b282..86cf4d56eecd 100644
--- a/sfx2/inc/filedlghelper.hrc
+++ b/sfx2/inc/filedlghelper.hrc
@@ -23,6 +23,8 @@
 #include <sfx2/sfx.hrc>
 
 #define STR_PB_SAVEACOPY            (RID_SFX_EXPLORER_START + 65)
+#define STR_PB_COMPAREDOC           (RID_SFX_EXPLORER_START + 66)
+#define STR_PB_MERGEDOC             (RID_SFX_EXPLORER_START + 67)
 
 #endif
 
diff --git a/sfx2/source/dialog/filedlghelper.cxx 
b/sfx2/source/dialog/filedlghelper.cxx
index 75f6c16ca182..5782802cf201 100644
--- a/sfx2/source/dialog/filedlghelper.cxx
+++ b/sfx2/source/dialog/filedlghelper.cxx
@@ -887,7 +887,9 @@ FileDialogHelper_Impl::FileDialogHelper_Impl(
     mbHasPreview            = false;
     mbShowPreview           = false;
     mbDeleteMatcher         = false;
-    mbInsert                = bool(nFlags & FileDialogFlags::Insert);
+    mbInsert                = bool(nFlags & (FileDialogFlags::Insert|
+                                             FileDialogFlags::InsertCompare|
+                                             FileDialogFlags::InsertMerge));
     mbExport                = bool(nFlags & FileDialogFlags::Export);
     mbIsSaveDlg             = false;
     mbPwdCheckBoxState      = false;
@@ -1106,7 +1108,18 @@ FileDialogHelper_Impl::FileDialogHelper_Impl(
     // the "insert file" dialog needs another title
     if ( mbInsert )
     {
-        mxFileDlg->setTitle( SfxResId( STR_SFX_EXPLORERFILE_INSERT 
).toString() );
+        if ( nFlags & FileDialogFlags::InsertCompare )
+        {
+            mxFileDlg->setTitle( SfxResId( STR_PB_COMPAREDOC ).toString() );
+        }
+        else if ( nFlags & FileDialogFlags::InsertMerge )
+        {
+            mxFileDlg->setTitle( SfxResId( STR_PB_MERGEDOC ).toString() );
+        }
+        else
+        {
+            mxFileDlg->setTitle( SfxResId( STR_SFX_EXPLORERFILE_INSERT 
).toString() );
+        }
         uno::Reference < XFilePickerControlAccess > xExtDlg( mxFileDlg, 
UNO_QUERY );
         if ( xExtDlg.is() )
         {
diff --git a/sfx2/source/dialog/filedlghelper.src 
b/sfx2/source/dialog/filedlghelper.src
index a8bb9888600b..1e777e20353a 100644
--- a/sfx2/source/dialog/filedlghelper.src
+++ b/sfx2/source/dialog/filedlghelper.src
@@ -50,6 +50,16 @@ String STR_PB_SAVEACOPY
     Text [ en-US ] = "Save a Copy" ;
 };
 
+String STR_PB_COMPAREDOC
+{
+    Text [ en-US ] = "Compare to" ;
+};
+
+String STR_PB_MERGEDOC
+{
+    Text [ en-US ] = "Merge with" ;
+};
+
 //******************************************************************** EOF
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/doc/docinsert.cxx b/sfx2/source/doc/docinsert.cxx
index 6288d5ce765c..29cd9ee68808 100644
--- a/sfx2/source/doc/docinsert.cxx
+++ b/sfx2/source/doc/docinsert.cxx
@@ -46,15 +46,39 @@ using namespace ::com::sun::star::lang;
 using namespace ::com::sun::star::ui::dialogs;
 using namespace ::com::sun::star::uno;
 
+namespace
+{
+
+FileDialogFlags lcl_map_mode_to_flags(const sfx2::DocumentInserter::Mode mode)
+{
+    FileDialogFlags f {FileDialogFlags::NONE};
+    switch (mode)
+    {
+        case sfx2::DocumentInserter::Mode::Insert:
+            f = FileDialogFlags::Insert;
+            break;
+        case sfx2::DocumentInserter::Mode::InsertMulti:
+            f = FileDialogFlags::Insert|FileDialogFlags::MultiSelection;
+            break;
+        case sfx2::DocumentInserter::Mode::Compare:
+            f = FileDialogFlags::InsertCompare;
+            break;
+        case sfx2::DocumentInserter::Mode::Merge:
+            f = FileDialogFlags::InsertMerge;
+            break;
+    }
+    return f;
+}
+
+}
+
 namespace sfx2 {
 
 DocumentInserter::DocumentInserter(
-    const OUString& rFactory, bool const bEnableMultiSelection) :
+    const OUString& rFactory, const Mode mode) :
 
       m_sDocFactory             ( rFactory )
-    , m_nDlgFlags               ( (bEnableMultiSelection)
-                                    ? 
(FileDialogFlags::Insert|FileDialogFlags::MultiSelection)
-                                    : FileDialogFlags::Insert )
+    , m_nDlgFlags               ( lcl_map_mode_to_flags(mode) )
     , m_nError                  ( ERRCODE_NONE )
     , m_pFileDlg                ( nullptr )
     , m_pItemSet                ( nullptr )
diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index 50a1a5f7b616..82c1082e38ea 100644
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -1597,7 +1597,7 @@ void SmViewShell::Execute(SfxRequest& rReq)
         {
             mpImpl->pRequest.reset(new SfxRequest( rReq ));
             mpImpl->pDocInserter.reset(new ::sfx2::DocumentInserter(
-                              GetDoc()->GetFactory().GetFactoryName(), false 
));
+                              GetDoc()->GetFactory().GetFactoryName()));
             mpImpl->pDocInserter->StartExecuteModal( LINK( this, SmViewShell, 
DialogClosedHdl ) );
             break;
         }
diff --git a/sw/source/uibase/inc/uivwimp.hxx b/sw/source/uibase/inc/uivwimp.hxx
index 68c3707be574..411e95e2e228 100644
--- a/sw/source/uibase/inc/uivwimp.hxx
+++ b/sw/source/uibase/inc/uivwimp.hxx
@@ -156,7 +156,11 @@ public:
                                 return m_bEditingPositionSet;
                             }
 
-    void                    StartDocumentInserter( const OUString& rFactory, 
const Link<sfx2::FileDialogHelper*,void>& rEndDialogHdl );
+    void                    StartDocumentInserter(
+                                const OUString& rFactory,
+                                const Link<sfx2::FileDialogHelper*,void>& 
rEndDialogHdl,
+                                const sal_uInt16 nSlotId
+                            );
     SfxMedium*              CreateMedium();
     void                    InitRequest( const SfxRequest& rRequest );
 
diff --git a/sw/source/uibase/uiview/uivwimp.cxx 
b/sw/source/uibase/uiview/uivwimp.cxx
index b1ff6e0794c6..6c7288e5521d 100644
--- a/sw/source/uibase/uiview/uivwimp.cxx
+++ b/sw/source/uibase/uiview/uivwimp.cxx
@@ -230,10 +230,27 @@ void SwView_Impl::AddTransferable(SwTransferable& 
rTransferable)
     rTransferable.m_refCount--;
 }
 
-void SwView_Impl::StartDocumentInserter( const OUString& rFactory, const 
Link<sfx2::FileDialogHelper*,void>& rEndDialogHdl )
+void SwView_Impl::StartDocumentInserter(
+    const OUString& rFactory,
+    const Link<sfx2::FileDialogHelper*,void>& rEndDialogHdl,
+    const sal_uInt16 nSlotId
+)
 {
+    sfx2::DocumentInserter::Mode mode {sfx2::DocumentInserter::Mode::Insert};
+    switch( nSlotId )
+    {
+        case SID_DOCUMENT_MERGE:
+            mode = sfx2::DocumentInserter::Mode::Merge;
+            break;
+        case SID_DOCUMENT_COMPARE:
+            mode = sfx2::DocumentInserter::Mode::Compare;
+            break;
+        default:
+            break;
+    }
+
     delete m_pDocInserter;
-    m_pDocInserter = new ::sfx2::DocumentInserter( rFactory );
+    m_pDocInserter = new ::sfx2::DocumentInserter( rFactory, mode );
     m_pDocInserter->StartExecuteModal( rEndDialogHdl );
 }
 
diff --git a/sw/source/uibase/uiview/view2.cxx 
b/sw/source/uibase/uiview/view2.cxx
index bfcad89a6729..63dd947d3da3 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -2116,7 +2116,8 @@ long SwView::InsertDoc( sal_uInt16 nSlotId, const 
OUString& rFileName, const OUS
     {
         m_pViewImpl->StartDocumentInserter(
             pDocSh->GetFactory().GetFactoryName(),
-            LINK( this, SwView, DialogClosedHdl )
+            LINK( this, SwView, DialogClosedHdl ),
+            nSlotId
         );
         return -1;
     }
diff --git a/sw/source/uibase/utlui/glbltree.cxx 
b/sw/source/uibase/utlui/glbltree.cxx
index 74402e468e7f..0cbeb28bba74 100644
--- a/sw/source/uibase/utlui/glbltree.cxx
+++ b/sw/source/uibase/utlui/glbltree.cxx
@@ -706,7 +706,7 @@ void SwGlobalTree::InsertRegion( const SwGlblDocContent* 
pCont, const OUString*
     if ( !pFileName )
     {
         delete pDocInserter;
-        pDocInserter = new ::sfx2::DocumentInserter( "swriter", true );
+        pDocInserter = new ::sfx2::DocumentInserter( "swriter", 
sfx2::DocumentInserter::Mode::InsertMulti );
         pDocInserter->StartExecuteModal( LINK( this, SwGlobalTree, 
DialogClosedHdl ) );
     }
     else if ( !pFileName->isEmpty() )
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to