tdf#93476 Sort Macro library list after creating/importing a macro

Moved sorting to inline functions, so the sorter is created only once

Change-Id: I5f06e8d94d2b93f8856cacfd42257f62b84d6e73
Reviewed-on: https://gerrit.libreoffice.org/76867
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/basctl/source/basicide/basobj2.cxx b/basctl/source/basicide/basobj2.cxx
old mode 100644
new mode 100755
index 4131f7a..801be80
--- a/basctl/source/basicide/basobj2.cxx
+++ b/basctl/source/basicide/basobj2.cxx
@@ -91,17 +91,12 @@ bool IsValidSbxName( const OUString& rName )
    return true;
}

static bool StringCompareLessThan( const OUString& rStr1, const OUString& rStr2 )
{
    auto const sort = comphelper::string::NaturalStringSorter(
        comphelper::getProcessComponentContext(),
        Application::GetSettings().GetUILanguageTag().getLocale());
    return sort.compare(rStr1, rStr2) < 0;
}

Sequence< OUString > GetMergedLibraryNames( const Reference< script::XLibraryContainer >& xModLibContainer, const Reference< script::XLibraryContainer >& xDlgLibContainer )
{
    // create a sorted list of module library names
    auto const sort = comphelper::string::NaturalStringSorter(
        comphelper::getProcessComponentContext(),
        Application::GetSettings().GetUILanguageTag().getLocale());
    std::vector<OUString> aModLibList;
    if ( xModLibContainer.is() )
    {
@@ -110,7 +105,10 @@ Sequence< OUString > GetMergedLibraryNames( const Reference< script::XLibraryCon
        const OUString* pModLibNames = aModLibNames.getConstArray();
        for ( sal_Int32 i = 0 ; i < nModLibCount ; i++ )
            aModLibList.push_back( pModLibNames[ i ] );
        std::sort( aModLibList.begin() , aModLibList.end() , StringCompareLessThan );
        std::sort(aModLibList.begin(), aModLibList.end(),
                  [&sort](const OUString& rLHS, const OUString& rRHS) {
                      return sort.compare(rLHS, rRHS) < 0;
                  });
    }

    // create a sorted list of dialog library names
@@ -122,12 +120,18 @@ Sequence< OUString > GetMergedLibraryNames( const Reference< script::XLibraryCon
        const OUString* pDlgLibNames = aDlgLibNames.getConstArray();
        for ( sal_Int32 i = 0 ; i < nDlgLibCount ; i++ )
            aDlgLibList.push_back( pDlgLibNames[ i ] );
        std::sort( aDlgLibList.begin() , aDlgLibList.end() , StringCompareLessThan );
        std::sort(aDlgLibList.begin(), aDlgLibList.end(),
                  [&sort](const OUString& rLHS, const OUString& rRHS) {
                      return sort.compare(rLHS, rRHS) < 0;
                  });
    }

    // merge both lists
    std::vector<OUString> aLibList( aModLibList.size() + aDlgLibList.size() );
    std::merge( aModLibList.begin(), aModLibList.end(), aDlgLibList.begin(), aDlgLibList.end(), aLibList.begin(), StringCompareLessThan );
    std::merge(aModLibList.begin(), aModLibList.end(), aDlgLibList.begin(), aDlgLibList.end(),
               aLibList.begin(), [&sort](const OUString& rLHS, const OUString& rRHS) {
                   return sort.compare(rLHS, rRHS) < 0;
               });
    std::vector<OUString>::iterator aIterEnd = std::unique( aLibList.begin(), aLibList.end() );  // move unique elements to the front
    aLibList.erase( aIterEnd, aLibList.end() ); // remove duplicates

diff --git a/basctl/source/basicide/scriptdocument.cxx b/basctl/source/basicide/scriptdocument.cxx
old mode 100644
new mode 100755
index 3146da2b..2ecc4a2
--- a/basctl/source/basicide/scriptdocument.cxx
+++ b/basctl/source/basicide/scriptdocument.cxx
@@ -116,14 +116,6 @@ namespace basctl

    namespace
    {
        bool StringCompareLessThan( const OUString& lhs, const OUString& rhs )
        {
            auto const sort = comphelper::string::NaturalStringSorter(
                comphelper::getProcessComponentContext(),
                Application::GetSettings().GetUILanguageTag().getLocale());
            return sort.compare(lhs, rhs) < 0;
        }

        class FilterDocuments : public docs::IDocumentDescriptorFilter
        {
        public:
@@ -1138,11 +1130,13 @@ namespace basctl
        // sort document list by doc title?
        if ( _eListType == DocumentsSorted )
        {
            std::sort( aScriptDocs.begin(), aScriptDocs.end(),
                []( const ScriptDocument& lhs, const ScriptDocument& rhs )
            {
                return StringCompareLessThan( lhs.getTitle(), rhs.getTitle() );
            });
            auto const sort = comphelper::string::NaturalStringSorter(
                comphelper::getProcessComponentContext(),
                Application::GetSettings().GetUILanguageTag().getLocale());
            std::sort(aScriptDocs.begin(), aScriptDocs.end(),
                      [&sort](const ScriptDocument& rLHS, const ScriptDocument& rRHS) {
                          return sort.compare(rLHS.getTitle(), rRHS.getTitle()) < 0;
                      });
        }

        return aScriptDocs;
@@ -1222,8 +1216,13 @@ namespace basctl
        }

        // sort
        std::sort( aModuleNames.begin(), aModuleNames.end(), StringCompareLessThan );

        auto const sort = comphelper::string::NaturalStringSorter(
            comphelper::getProcessComponentContext(),
            Application::GetSettings().GetUILanguageTag().getLocale());
        std::sort(aModuleNames.begin(), aModuleNames.end(),
                  [&sort](const OUString& rLHS, const OUString& rRHS) {
                      return sort.compare(rLHS, rRHS) < 0;
                  });
        return aModuleNames;
    }