sc/source/ui/dialogs/searchresults.cxx | 55 ++++++++++++++++++++++++++------- sc/source/ui/inc/searchresults.hxx | 2 - sc/source/ui/view/viewfun2.cxx | 3 + 3 files changed, 47 insertions(+), 13 deletions(-)
New commits: commit 4f719263ae8dc44eabfba4654f9dbed92a9c5360 Author: Eike Rathke <er...@redhat.com> Date: Thu Jul 28 00:43:03 2016 +0200 display the SearchAll() and ReplaceAll() results for notes, tdf#65334 related Change-Id: Ib9ff40b26526efdf242db2ef1804e54611f16b0e diff --git a/sc/source/ui/dialogs/searchresults.cxx b/sc/source/ui/dialogs/searchresults.cxx index 225fb2f..c6e7470 100644 --- a/sc/source/ui/dialogs/searchresults.cxx +++ b/sc/source/ui/dialogs/searchresults.cxx @@ -50,24 +50,57 @@ void SearchResultsDlg::dispose() ModelessDialog::dispose(); } -void SearchResultsDlg::FillResults( ScDocument* pDoc, const ScRangeList &rMatchedRanges ) +void SearchResultsDlg::FillResults( ScDocument* pDoc, const ScRangeList &rMatchedRanges, bool bCellNotes ) { mpList->Clear(); mpList->SetUpdateMode(false); std::vector<OUString> aTabNames = pDoc->GetAllTableNames(); SCTAB nTabCount = aTabNames.size(); - for (size_t i = 0, n = rMatchedRanges.size(); i < n; ++i) + if (bCellNotes) { - ScCellIterator aIter(pDoc, *rMatchedRanges[i]); - for (bool bHas = aIter.first(); bHas; bHas = aIter.next()) + for (size_t i = 0, n = rMatchedRanges.size(); i < n; ++i) { - ScAddress aPos = aIter.GetPos(); - if (aPos.Tab() >= nTabCount) - // Out-of-bound sheet index. - continue; - - OUString aPosStr = aPos.Format(ScRefFlags::ADDR_ABS, nullptr, pDoc->GetAddressConvention()); - mpList->InsertEntry(aTabNames[aPos.Tab()] + "\t" + aPosStr + "\t" + pDoc->GetString(aPos)); + /* TODO: a CellNotes iterator would come handy and migt speed + * things up a little, though we only loop through the + * search/replace result positions here. */ + ScRange aRange( *rMatchedRanges[i] ); + // Bear in mind that mostly the range is one address position + // or a column or a row joined. + ScAddress aPos( aRange.aStart ); + for ( ; aPos.Tab() <= aRange.aEnd.Tab(); aPos.IncTab()) + { + if (aPos.Tab() >= nTabCount) + break; // can this even happen? we just searched on existing sheets ... + for (aPos.SetCol( aRange.aStart.Col()); aPos.Col() <= aRange.aEnd.Col(); aPos.IncCol()) + { + for (aPos.SetRow( aRange.aStart.Row()); aPos.Row() <= aRange.aEnd.Row(); aPos.IncRow()) + { + const ScPostIt* pNote = pDoc->GetNote( aPos); + if (pNote) + { + OUString aPosStr = aPos.Format(ScRefFlags::ADDR_ABS, nullptr, pDoc->GetAddressConvention()); + mpList->InsertEntry(aTabNames[aPos.Tab()] + "\t" + aPosStr + "\t" + pNote->GetText()); + } + } + } + } + } + } + else + { + for (size_t i = 0, n = rMatchedRanges.size(); i < n; ++i) + { + ScCellIterator aIter(pDoc, *rMatchedRanges[i]); + for (bool bHas = aIter.first(); bHas; bHas = aIter.next()) + { + ScAddress aPos = aIter.GetPos(); + if (aPos.Tab() >= nTabCount) + // Out-of-bound sheet index. + continue; + + OUString aPosStr = aPos.Format(ScRefFlags::ADDR_ABS, nullptr, pDoc->GetAddressConvention()); + mpList->InsertEntry(aTabNames[aPos.Tab()] + "\t" + aPosStr + "\t" + pDoc->GetString(aPos)); + } } } mpList->SetUpdateMode(true); diff --git a/sc/source/ui/inc/searchresults.hxx b/sc/source/ui/inc/searchresults.hxx index 8143c48..776a23f 100644 --- a/sc/source/ui/inc/searchresults.hxx +++ b/sc/source/ui/inc/searchresults.hxx @@ -32,7 +32,7 @@ public: virtual ~SearchResultsDlg(); virtual void dispose() override; - void FillResults( ScDocument* pDoc, const ScRangeList& rMatchedRanges ); + void FillResults( ScDocument* pDoc, const ScRangeList& rMatchedRanges, bool bCellNotes ); virtual bool Close() override; }; diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx index 6a7a7e8..c6e2a94 100644 --- a/sc/source/ui/view/viewfun2.cxx +++ b/sc/source/ui/view/viewfun2.cxx @@ -1748,7 +1748,8 @@ bool ScViewFunc::SearchAndReplace( const SvxSearchItem* pSearchItem, { sc::SearchResultsDlg* pDlg = static_cast<sc::SearchResultsDlg*>(pWnd->GetWindow()); if (pDlg) - pDlg->FillResults(&rDoc, aMatchedRanges); + pDlg->FillResults(&rDoc, aMatchedRanges, + pSearchItem->GetCellType() == SvxSearchCellType::NOTE); } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits