diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-06-25 11:05:16 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-06-27 08:47:45 +0200 |
commit | 99c1e17acde773c517071776ca5d871edb09edcb (patch) | |
tree | df9084fab6a5d34fd234b7c183c04860e50747da /cui/source/options/optdict.cxx | |
parent | 240429f38db2ba4348f8d3abde1b227116555e69 (diff) |
tdf#109269 very slow loading of user-defined dictionary word list
this is about 10x faster for me
Reviewed-on: https://gerrit.libreoffice.org/56378
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
(cherry picked from commit a07bb28d3199542c0b90884a947c2bac02bad07d)
Change-Id: I1d308c78dbdd04beaa432b546ba3b89bd617d57e
Reviewed-on: https://gerrit.libreoffice.org/56385
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
(cherry picked from commit a054308741ebae0b65a425be1ab30d3b9e1af871)
Reviewed-on: https://gerrit.libreoffice.org/56452
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'cui/source/options/optdict.cxx')
-rw-r--r-- | cui/source/options/optdict.cxx | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/cui/source/options/optdict.cxx b/cui/source/options/optdict.cxx index 8b23f40c5445..8b2dde4e4520 100644 --- a/cui/source/options/optdict.cxx +++ b/cui/source/options/optdict.cxx @@ -480,10 +480,8 @@ void SvxEditDictionaryDialog::ShowWords_Impl( sal_uInt16 nId ) EnterWait(); - OUString aStr; - - pWordED->SetText(aStr); - pReplaceED->SetText(aStr); + pWordED->SetText(OUString()); + pReplaceED->SetText(OUString()); bool bIsNegative = xDic->getDictionaryType() != DictionaryType_POSITIVE; bool bLangNone = LanguageTag( @@ -536,17 +534,34 @@ void SvxEditDictionaryDialog::ShowWords_Impl( sal_uInt16 nId ) Sequence< Reference< XDictionaryEntry > > aEntries( xDic->getEntries() ); const Reference< XDictionaryEntry > *pEntry = aEntries.getConstArray(); sal_Int32 nCount = aEntries.getLength(); - + std::vector<OUString> aSortedDicEntries; + aSortedDicEntries.reserve(nCount); for (sal_Int32 i = 0; i < nCount; i++) { - aStr = pEntry[i]->getDictionaryWord(); - sal_uLong nPos = GetLBInsertPos( aStr ); + OUString aStr = pEntry[i]->getDictionaryWord(); if(!pEntry[i]->getReplacementText().isEmpty()) { aStr += "\t" + pEntry[i]->getReplacementText(); } - pWordsLB->InsertEntry(aStr, nullptr, false, nPos == TREELIST_ENTRY_NOTFOUND ? TREELIST_APPEND : nPos); + aSortedDicEntries.push_back(aStr); + } + + IntlWrapper aIntlWrapper(SvtSysLocale().GetUILanguageTag()); + const CollatorWrapper* pCollator = aIntlWrapper.getCollator(); + std::sort(aSortedDicEntries.begin(), aSortedDicEntries.end(), + [&] (OUString const & lhs, OUString const & rhs) + { + sal_Int32 nCmpRes = pCollator-> + compareString( getNormDicEntry_Impl(lhs), getNormDicEntry_Impl( rhs ) ); + return nCmpRes < 0; + }); + + pWordsLB->SetUpdateMode(false); // speed up insert + for (OUString const & rStr : aSortedDicEntries) + { + pWordsLB->InsertEntry(rStr, nullptr, false, TREELIST_APPEND); } + pWordsLB->SetUpdateMode(true); if (pWordsLB->GetEntryCount()) { |