diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-10-10 12:18:13 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-10-10 16:57:12 +0200 |
commit | 3b21fed4b153e3bbf1d47c3073f31a3735538596 (patch) | |
tree | dc9fb83579f454713d8cd44df3d8627bc826e564 /svx | |
parent | ee68b450b75c68b2b129564c799766abba7087c9 (diff) |
optimize adding a block of entries at one time
Change-Id: I9a59154fa445cf3c44ede3ceb1d09f408d906530
Reviewed-on: https://gerrit.libreoffice.org/61618
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/dialog/dlgctrl.cxx | 4 | ||||
-rw-r--r-- | svx/source/dialog/langbox.cxx | 53 |
2 files changed, 38 insertions, 19 deletions
diff --git a/svx/source/dialog/dlgctrl.cxx b/svx/source/dialog/dlgctrl.cxx index 37c647280206..d2f6b9d3e7bc 100644 --- a/svx/source/dialog/dlgctrl.cxx +++ b/svx/source/dialog/dlgctrl.cxx @@ -1060,7 +1060,7 @@ void SvxLineLB::Modify(const XDashEntry& rEntry, sal_Int32 nPos, const BitmapEx& const Size aBmpSize(rBitmap.GetSizePixel()); pVD->SetOutputSizePixel(aBmpSize, false); pVD->DrawBitmapEx(Point(), rBitmap); - m_xControl->insert(nPos, "", rEntry.GetName(), nullptr, pVD); + m_xControl->insert(nPos, rEntry.GetName(), nullptr, nullptr, pVD); } else { @@ -1128,7 +1128,7 @@ void SvxLineEndLB::Modify( const XLineEndEntry& rEntry, sal_Int32 nPos, const Bi const Size aBmpSize(rBitmap.GetSizePixel()); pVD->SetOutputSizePixel(Size(aBmpSize.Width() / 2, aBmpSize.Height()), false); pVD->DrawBitmapEx(Point(-aBmpSize.Width() / 2, 0), rBitmap); - m_xControl->insert(nPos, "", rEntry.GetName(), nullptr, pVD); + m_xControl->insert(nPos, rEntry.GetName(), nullptr, nullptr, pVD); } else { diff --git a/svx/source/dialog/langbox.cxx b/svx/source/dialog/langbox.cxx index 4c22822f5eb8..abac537091ad 100644 --- a/svx/source/dialog/langbox.cxx +++ b/svx/source/dialog/langbox.cxx @@ -530,8 +530,8 @@ void LanguageBox::set_active_id(const LanguageType eLangType) m_xControl->set_active(nAt); } -void LanguageBox::AddLanguages( const std::vector< LanguageType >& rLanguageTypes, - SvxLanguageListFlags nLangList ) +void LanguageBox::AddLanguages(const std::vector< LanguageType >& rLanguageTypes, + SvxLanguageListFlags nLangList, std::vector<weld::ComboBoxEntry>& rEntries) { for ( auto const & nLangType : rLanguageTypes ) { @@ -542,7 +542,11 @@ void LanguageBox::AddLanguages( const std::vector< LanguageType >& rLanguageType { int nAt = ImplTypeToPos(nLang); if (nAt == -1) - InsertLanguage( nLang ); + { + rEntries.push_back(BuildEntry(nLang)); + if (rEntries.back().sString.isEmpty()) + rEntries.pop_back(); + } } } } @@ -556,14 +560,15 @@ void LanguageBox::ImplClear() void LanguageBox::SetLanguageList( SvxLanguageListFlags nLangList, bool bHasLangNone, bool bLangNoneIsLangAll, bool bCheckSpellAvail ) { - ImplClear(); - m_bHasLangNone = bHasLangNone; m_bLangNoneIsLangAll = bLangNoneIsLangAll; m_bWithCheckmark = bCheckSpellAvail; - if ( SvxLanguageListFlags::EMPTY == nLangList ) + if (SvxLanguageListFlags::EMPTY == nLangList) + { + ImplClear(); return; + } bool bAddAvailable = (!(nLangList & SvxLanguageListFlags::ONLY_KNOWN) && ((nLangList & SvxLanguageListFlags::ALL) || @@ -632,7 +637,7 @@ void LanguageBox::SetLanguageList( SvxLanguageListFlags nLangList, nCount = SvtLanguageTable::GetLanguageEntryCount(); } - m_xControl->freeze(); + std::vector<weld::ComboBoxEntry> aEntries; for ( sal_uInt32 i = 0; i < nCount; i++ ) { LanguageType nLangType; @@ -656,22 +661,26 @@ void LanguageBox::SetLanguageList( SvxLanguageListFlags nLangList, lcl_SeqHasLang(aHyphUsedLang, nLangType)) || (bool(nLangList & SvxLanguageListFlags::THES_USED) && lcl_SeqHasLang(aThesUsedLang, nLangType))) ) - InsertLanguage( nLangType ); + { + aEntries.push_back(BuildEntry(nLangType)); + if (aEntries.back().sString.isEmpty()) + aEntries.pop_back(); + } } if (bAddAvailable) { // Spell checkers, hyphenators and thesauri may add language tags // unknown so far. - AddLanguages( aSpellAvailLang, nLangList); - AddLanguages( aHyphAvailLang, nLangList); - AddLanguages( aThesAvailLang, nLangList); + AddLanguages(aSpellAvailLang, nLangList, aEntries); + AddLanguages(aHyphAvailLang, nLangList, aEntries); + AddLanguages(aThesAvailLang, nLangList, aEntries); } if (bHasLangNone) - InsertLanguage( LANGUAGE_NONE ); + aEntries.push_back(BuildEntry(LANGUAGE_NONE)); - m_xControl->thaw(); + m_xControl->insert_vector(aEntries, false); } int LanguageBox::ImplTypeToPos(LanguageType eType) const @@ -681,6 +690,17 @@ int LanguageBox::ImplTypeToPos(LanguageType eType) const void LanguageBox::InsertLanguage(const LanguageType nLangType) { + weld::ComboBoxEntry aEntry = BuildEntry(nLangType); + if (aEntry.sString.isEmpty()) + return; + if (aEntry.sImage.isEmpty()) + m_xControl->append(aEntry.sId, aEntry.sString); + else + m_xControl->append(aEntry.sId, aEntry.sString, aEntry.sImage); +} + +weld::ComboBoxEntry LanguageBox::BuildEntry(const LanguageType nLangType) +{ LanguageType nLang = MsLangId::getReplacementForObsoleteLanguage(nLangType); // For obsolete and to be replaced languages check whether an entry of the // replacement already exists and if so don't add an entry with identical @@ -689,7 +709,7 @@ void LanguageBox::InsertLanguage(const LanguageType nLangType) { int nAt = ImplTypeToPos( nLang ); if (nAt != -1) - return; + return weld::ComboBoxEntry(""); } OUString aStrEntry = SvtLanguageTable::GetLanguageString( nLang ); @@ -721,11 +741,10 @@ void LanguageBox::InsertLanguage(const LanguageType nLangType) bool bFound = m_xSpellUsedLang && lcl_SeqHasLang(*m_xSpellUsedLang, static_cast<sal_uInt16>(nRealLang)); - m_xControl->append(OUString::number(static_cast<sal_uInt16>(nLangType)), aStrEntry, - bFound ? OUString(RID_SVXBMP_CHECKED) : OUString(RID_SVXBMP_NOTCHECKED)); + return weld::ComboBoxEntry(aStrEntry, OUString::number(static_cast<sal_uInt16>(nLangType)), bFound ? OUString(RID_SVXBMP_CHECKED) : OUString(RID_SVXBMP_NOTCHECKED)); } else - m_xControl->append(OUString::number(static_cast<sal_uInt16>(nLangType)), aStrEntry); + return weld::ComboBoxEntry(aStrEntry, OUString::number(static_cast<sal_uInt16>(nLangType))); } IMPL_LINK(LanguageBox, ChangeHdl, weld::ComboBox&, rControl, void) |