summaryrefslogtreecommitdiff
path: root/cui
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2018-06-25 11:05:16 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2018-06-27 08:47:45 +0200
commit99c1e17acde773c517071776ca5d871edb09edcb (patch)
treedf9084fab6a5d34fd234b7c183c04860e50747da /cui
parent240429f38db2ba4348f8d3abde1b227116555e69 (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')
-rw-r--r--cui/source/options/optdict.cxx31
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())
{