diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-04-23 21:09:16 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-04-27 09:49:25 +0200 |
commit | 1a891f2fadae01aca95157b09d6ea8e223bee1ea (patch) | |
tree | 66d84e59ea881588ddd429cdb14f2e24c69e5cb2 /sc | |
parent | 62f6d6ee8bca918e17ae167582095f4302203bed (diff) |
Related: tdf#130326 allow bulk_insert_for_each to insert under a node
Change-Id: Iad14638a33710ef0b790c702e7eab2283726f2fb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114571
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/cctrl/checklistmenu.cxx | 4 | ||||
-rw-r--r-- | sc/source/ui/navipi/content.cxx | 59 |
2 files changed, 31 insertions, 32 deletions
diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx index 201313f0e41e..55072f5d5f9c 100644 --- a/sc/source/ui/cctrl/checklistmenu.cxx +++ b/sc/source/ui/cctrl/checklistmenu.cxx @@ -802,7 +802,7 @@ IMPL_LINK_NOARG(ScCheckListMenuControl, EdModifyHdl, weld::Entry&, void) size_t nIndex = aShownIndexes[i]; insertMember(*mpChecks, rIter, maMembers[nIndex], true); ++nSelCount; - }, &aFixedWidths); + }, nullptr, &aFixedWidths); } } @@ -1256,7 +1256,7 @@ size_t ScCheckListMenuControl::initMembers(int nMaxMemberWidth) insertMember(*mpChecks, rIter, maMembers[i], maMembers[i].mbVisible); if (maMembers[i].mbVisible) ++nVisMemCount; - }, &aFixedWidths); + }, nullptr, &aFixedWidths); } else { diff --git a/sc/source/ui/navipi/content.cxx b/sc/source/ui/navipi/content.cxx index 6f4d92198934..53b4e413de50 100644 --- a/sc/source/ui/navipi/content.cxx +++ b/sc/source/ui/navipi/content.cxx @@ -879,52 +879,51 @@ void ScContentTree::GetDrawNames( ScContentId nType ) if (!pDoc) return; - // iterate in flat mode for groups - SdrIterMode eIter = ( nType == ScContentId::DRAWING ) ? SdrIterMode::Flat : SdrIterMode::DeepNoGroups; - ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer(); + if (!pDrawLayer) + return; + SfxObjectShell* pShell = pDoc->GetDocumentShell(); - if (!(pDrawLayer && pShell)) + if (!pShell) return; + // iterate in flat mode for groups + SdrIterMode eIter = ( nType == ScContentId::DRAWING ) ? SdrIterMode::Flat : SdrIterMode::DeepNoGroups; + + std::vector<OUString> aNames; SCTAB nTabCount = pDoc->GetTableCount(); - int treeNodeCount = 0; for (SCTAB nTab=0; nTab<nTabCount; nTab++) { SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab)); OSL_ENSURE(pPage,"Page ?"); - if (pPage) + if (!pPage) + continue; + SdrObjListIter aIter(pPage, eIter); + SdrObject* pObject = aIter.Next(); + while (pObject) { - SdrObjListIter aIter( pPage, eIter ); - SdrObject* pObject = aIter.Next(); - while (pObject) + if (IsPartOfType(nType, pObject->GetObjIdentifier())) { - if ( IsPartOfType( nType, pObject->GetObjIdentifier() ) ) + OUString aName = ScDrawLayer::GetVisibleName(pObject); + if (!aName.isEmpty()) + aNames.push_back(aName); + if (aNames.size() > MAX_TREE_NODES) { - OUString aName = ScDrawLayer::GetVisibleName( pObject ); - if (!aName.isEmpty()) - { - weld::TreeIter* pParent = m_aRootNodes[nType].get(); - if (pParent) - { - m_xTreeView->insert(pParent, -1, &aName, nullptr, nullptr, nullptr, false, m_xScratchIter.get()); - m_xTreeView->set_sensitive(*m_xScratchIter, true); - treeNodeCount++; - if (treeNodeCount > MAX_TREE_NODES) - { - SAL_WARN("sc", "too many tree nodes, ignoring the rest"); - return; - } - }//end if parent - else - SAL_WARN("sc", "InsertContent without parent"); - } + SAL_WARN("sc", "too many tree nodes, ignoring the rest"); + break; } - - pObject = aIter.Next(); } + pObject = aIter.Next(); } } + + weld::TreeIter* pParent = m_aRootNodes[nType].get(); + assert(pParent && "InsertContent without parent"); + // insert all of these in one go under pParent + m_xTreeView->bulk_insert_for_each(aNames.size(), [this, &aNames](weld::TreeIter& rIter, int nIndex) { + m_xTreeView->set_text(rIter, aNames[nIndex]); + m_xTreeView->set_sensitive(rIter, true); + }, pParent); } void ScContentTree::GetGraphicNames() |