tdf#93476 Sort Macro library list after creating/importing a macro
Improved GetMergedLibraryNames: Create only one list and sort it at the
end
Change-Id: Id02aa994fe3b8fcaad115c0e3fcaca56601ee8bf
Reviewed-on: https://gerrit.libreoffice.org/76911
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
index 801be80..9160637 100644
--- a/basctl/source/basicide/basobj2.cxx
+++ b/basctl/source/basicide/basobj2.cxx
@@ -29,6 +29,7 @@
#include <basic/sbmeth.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/string.hxx>
#include <comphelper/sequence.hxx>
#include <framework/documentundoguard.hxx>
#include <sal/log.hxx>
#include <tools/diagnose_ex.h>
@@ -93,55 +94,40 @@ bool IsValidSbxName( const OUString& rName )
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;
// create a list of module library names
std::vector<OUString> aLibList;
if ( xModLibContainer.is() )
{
Sequence< OUString > aModLibNames = xModLibContainer->getElementNames();
sal_Int32 nModLibCount = aModLibNames.getLength();
const OUString* pModLibNames = aModLibNames.getConstArray();
for ( sal_Int32 i = 0 ; i < nModLibCount ; i++ )
aModLibList.push_back( pModLibNames[ i ] );
std::sort(aModLibList.begin(), aModLibList.end(),
[&sort](const OUString& rLHS, const OUString& rRHS) {
return sort.compare(rLHS, rRHS) < 0;
});
aLibList.push_back( pModLibNames[ i ] );
}
// create a sorted list of dialog library names
std::vector<OUString> aDlgLibList;
// create a list of dialog library names
if ( xDlgLibContainer.is() )
{
Sequence< OUString > aDlgLibNames = xDlgLibContainer->getElementNames();
sal_Int32 nDlgLibCount = aDlgLibNames.getLength();
const OUString* pDlgLibNames = aDlgLibNames.getConstArray();
for ( sal_Int32 i = 0 ; i < nDlgLibCount ; i++ )
aDlgLibList.push_back( pDlgLibNames[ i ] );
std::sort(aDlgLibList.begin(), aDlgLibList.end(),
[&sort](const OUString& rLHS, const OUString& rRHS) {
return sort.compare(rLHS, rRHS) < 0;
});
aLibList.push_back( pDlgLibNames[ i ] );
}
// merge both lists
std::vector<OUString> aLibList( aModLibList.size() + aDlgLibList.size() );
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
// sort list
auto const sort = comphelper::string::NaturalStringSorter(
comphelper::getProcessComponentContext(),
Application::GetSettings().GetUILanguageTag().getLocale());
std::sort(aLibList.begin(), aLibList.end(),
[&sort](const OUString& rLHS, const OUString& rRHS) {
return sort.compare(rLHS, rRHS) < 0;
});
// remove duplicates
std::vector<OUString>::iterator aIterEnd = std::unique( aLibList.begin(), aLibList.end() );
aLibList.erase( aIterEnd, aLibList.end() );
// copy to sequence
sal_Int32 nLibCount = aLibList.size();
Sequence< OUString > aSeqLibNames( nLibCount );
for ( sal_Int32 i = 0 ; i < nLibCount ; i++ )
aSeqLibNames.getArray()[ i ] = aLibList[ i ];
return aSeqLibNames;
return comphelper::containerToSequence(aLibList);
}
bool RenameModule (