sw/inc/strings.hrc              |   22 ++++++++--------
 sw/source/uibase/dbui/dbmgr.cxx |   54 +++++++++++++++++++++-------------------
 2 files changed, 40 insertions(+), 36 deletions(-)

New commits:
commit faa88099d842b83365fa86a661dc56f0031a9b29
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Mon Jul 11 13:59:16 2022 +0300
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Tue Jul 12 07:22:32 2022 +0200

    tdf#149947: simplify filter list creation
    
    Change-Id: Ic44d217a5593cc8694bc2f2f2e19e0c66d3ae9a5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136957
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc
index 130004c6f338..ed06d5b39d42 100644
--- a/sw/inc/strings.hrc
+++ b/sw/inc/strings.hrc
@@ -861,17 +861,17 @@
 
 #define STR_NOTASSIGNED                         NC_("STR_NOTASSIGNED", " not 
yet matched ")
 #define STR_FILTER_ALL                          NC_("STR_FILTER_ALL", "All 
files")
-#define STR_FILTER_ALL_DATA                     NC_("STR_FILTER_ALL_DATA", 
"Address lists(*.*)")
-#define STR_FILTER_SXB                          NC_("STR_FILTER_SXB", 
"%PRODUCTNAME Base (*.odb)")
-#define STR_FILTER_SXC                          NC_("STR_FILTER_SXC", 
"%PRODUCTNAME Calc (*.ods;*.sxc)")
-#define STR_FILTER_SXW                          NC_("STR_FILTER_SXW", 
"%PRODUCTNAME Writer (*.odt;*.sxw)")
-#define STR_FILTER_DBF                          NC_("STR_FILTER_DBF", "dBase 
(*.dbf)")
-#define STR_FILTER_XLS                          NC_("STR_FILTER_XLS", 
"Microsoft Excel (*.xls;*.xlsx)")
-#define STR_FILTER_DOC                          NC_("STR_FILTER_DOC", 
"Microsoft Word (*.doc;*.docx)")
-#define STR_FILTER_TXT                          NC_("STR_FILTER_TXT", "Plain 
text (*.txt)")
-#define STR_FILTER_CSV                          NC_("STR_FILTER_CSV", "Text 
Comma Separated (*.csv)")
-#define STR_FILTER_MDB                          NC_("STR_FILTER_MDB", 
"Microsoft Access (*.mdb;*.mde)")
-#define STR_FILTER_ACCDB                        NC_("STR_FILTER_ACCDB", 
"Microsoft Access 2007 (*.accdb,*.accde)")
+#define STR_FILTER_ALL_DATA                     NC_("STR_FILTER_ALL_DATA", 
"Address lists")
+#define STR_FILTER_SXB                          NC_("STR_FILTER_SXB", 
"%PRODUCTNAME Base")
+#define STR_FILTER_SXC                          NC_("STR_FILTER_SXC", 
"%PRODUCTNAME Calc")
+#define STR_FILTER_SXW                          NC_("STR_FILTER_SXW", 
"%PRODUCTNAME Writer")
+#define STR_FILTER_DBF                          NC_("STR_FILTER_DBF", "dBase")
+#define STR_FILTER_XLS                          NC_("STR_FILTER_XLS", 
"Microsoft Excel")
+#define STR_FILTER_DOC                          NC_("STR_FILTER_DOC", 
"Microsoft Word")
+#define STR_FILTER_TXT                          NC_("STR_FILTER_TXT", "Plain 
text")
+#define STR_FILTER_CSV                          NC_("STR_FILTER_CSV", "Text 
Comma Separated")
+#define STR_FILTER_MDB                          NC_("STR_FILTER_MDB", 
"Microsoft Access")
+#define STR_FILTER_ACCDB                        NC_("STR_FILTER_ACCDB", 
"Microsoft Access 2007")
 #define ST_CONFIGUREMAIL                        NC_("ST_CONFIGUREMAIL", "In 
order to be able to send mail merge documents by email, %PRODUCTNAME requires 
information about the email account to be used.\n\nDo you want to enter email 
account information now?")
 #define ST_FILTERNAME                           NC_("ST_FILTERNAME", 
"%PRODUCTNAME Address List (.csv)")
 
diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx
index 0d526bab42c3..15a1105e47b5 100644
--- a/sw/source/uibase/dbui/dbmgr.cxx
+++ b/sw/source/uibase/dbui/dbmgr.cxx
@@ -2784,40 +2784,44 @@ OUString 
SwDBManager::LoadAndRegisterDataSource(weld::Window* pParent, SwDocShel
 
     OUString sFilterAll(SwResId(STR_FILTER_ALL));
     OUString sFilterAllData(SwResId(STR_FILTER_ALL_DATA));
-    OUString sFilterSXB(SwResId(STR_FILTER_SXB));
-    OUString sFilterSXC(SwResId(STR_FILTER_SXC));
-    OUString sFilterSXW(SwResId(STR_FILTER_SXW));
-    OUString sFilterDBF(SwResId(STR_FILTER_DBF));
-    OUString sFilterXLS(SwResId(STR_FILTER_XLS));
-    OUString sFilterDOC(SwResId(STR_FILTER_DOC));
-    OUString sFilterTXT(SwResId(STR_FILTER_TXT));
-    OUString sFilterCSV(SwResId(STR_FILTER_CSV));
+
+    const std::vector<std::pair<OUString, OUString>> filters{
+        { SwResId(STR_FILTER_SXB), "*.odb" },
+        { SwResId(STR_FILTER_SXC), "*.ods;*.sxc" },
+        { SwResId(STR_FILTER_SXW), "*.odt;*.sxw" },
+        { SwResId(STR_FILTER_DBF), "*.dbf" },
+        { SwResId(STR_FILTER_XLS), "*.xls;*.xlsx" },
+        { SwResId(STR_FILTER_DOC), "*.doc;*.docx" },
+        { SwResId(STR_FILTER_TXT), "*.txt" },
+        { SwResId(STR_FILTER_CSV), "*.csv" },
 #ifdef _WIN32
-    OUString sFilterMDB(SwResId(STR_FILTER_MDB));
-    OUString sFilterACCDB(SwResId(STR_FILTER_ACCDB));
+        { SwResId(STR_FILTER_MDB), "*.mdb;*.mde" },
+        { SwResId(STR_FILTER_ACCDB), "*.accdb;*.accde" },
 #endif
+    };
+
+    OUStringBuffer sAllDataFilter;
+    for (const auto& [name, filter] : filters)
+    {
+        (void)name;
+        if (!sAllDataFilter.isEmpty())
+            sAllDataFilter.append(';');
+        sAllDataFilter.append(filter);
+    }
+
     xFP->appendFilter( sFilterAll, "*" );
-    xFP->appendFilter( sFilterAllData, 
"*.ods;*.sxc;*.odt;*.sxw;*.dbf;*.xls;*.xlsx;*.doc;*.docx;*.txt;*.csv");
-
-    xFP->appendFilter( sFilterSXB, "*.odb" );
-    xFP->appendFilter( sFilterSXC, "*.ods;*.sxc" );
-    xFP->appendFilter( sFilterSXW, "*.odt;*.sxw" );
-    xFP->appendFilter( sFilterDBF, "*.dbf" );
-    xFP->appendFilter( sFilterXLS, "*.xls;*.xlsx" );
-    xFP->appendFilter( sFilterDOC, "*.doc;*.docx" );
-    xFP->appendFilter( sFilterTXT, "*.txt" );
-    xFP->appendFilter( sFilterCSV, "*.csv" );
-#ifdef _WIN32
-    xFP->appendFilter(sFilterMDB, "*.mdb;*.mde");
-    xFP->appendFilter(sFilterACCDB, "*.accdb;*.accde");
-#endif
+    xFP->appendFilter( sFilterAllData, sAllDataFilter.makeStringAndClear());
+
+    // Similar to sfx2::addExtension from sfx2/source/dialog/filtergrouping.cxx
+    for (const auto& [name, filter] : filters)
+        xFP->appendFilter(name + " (" + filter + ")", filter);
 
     xFP->setCurrentFilter( sFilterAll ) ;
     OUString sFind;
     if( ERRCODE_NONE == aDlgHelper.Execute() )
     {
         uno::Reference< beans::XPropertySet > aSettings;
-        const INetURLObject aURL( xFP->getSelectedFiles().getConstArray()[0] );
+        const INetURLObject aURL( xFP->getSelectedFiles()[0] );
         const DBConnURIType type = GetDBunoType( aURL );
 
         if( DBConnURIType::FLAT == type )

Reply via email to