sd/inc/Outliner.hxx | 5 ++ sd/source/ui/view/Outliner.cxx | 71 ++++++++++++++++++++++++++++------------- 2 files changed, 54 insertions(+), 22 deletions(-)
New commits: commit 32d573cdd13126c13e46b4e3684446e888e8b8e6 Author: Miklos Vajna <[email protected]> Date: Wed Oct 14 11:38:47 2015 +0200 sd tiled rendering: initial search all Change-Id: Icee3a07103fad1bf70637fbf23299f50b7ad838d diff --git a/sd/inc/Outliner.hxx b/sd/inc/Outliner.hxx index cf0a16f..a5bb966 100644 --- a/sd/inc/Outliner.hxx +++ b/sd/inc/Outliner.hxx @@ -350,11 +350,14 @@ private: bool SearchAndReplaceAll(); /** Do search and replace for next match. + @param pSelections + When tiled rendering and not 0, then don't emit LOK events, instead + assume the caller will do so. @return The return value specifies whether the search ended (</sal_True>) or another call to this method is required (</sal_False>). */ - bool SearchAndReplaceOnce(); + bool SearchAndReplaceOnce(std::vector<OString>* pSelections = 0); /** Detect changes of the document or view and react accordingly. Such changes may occur because different calls to diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx index e905284..45de021 100644 --- a/sd/source/ui/view/Outliner.cxx +++ b/sd/source/ui/view/Outliner.cxx @@ -484,7 +484,7 @@ bool Outliner::StartSearchAndReplace (const SvxSearchItem* pSearchItem) Initialize ( ! mpSearchItem->GetBackward()); const SvxSearchCmd nCommand (mpSearchItem->GetCommand()); - if (nCommand == SvxSearchCmd::REPLACE_ALL) + if (nCommand == SvxSearchCmd::FIND_ALL || nCommand == SvxSearchCmd::REPLACE_ALL) bEndOfSearch = SearchAndReplaceAll (); else { @@ -615,11 +615,32 @@ bool Outliner::SearchAndReplaceAll() // Search/replace until the end of the document is reached. bool bFoundMatch; + std::vector<OString> aSelections; do { - bFoundMatch = ! SearchAndReplaceOnce(); + bFoundMatch = ! SearchAndReplaceOnce(&aSelections); } while (bFoundMatch); + + if (mpSearchItem->GetCommand() == SvxSearchCmd::FIND_ALL && pViewShell->GetDoc()->isTiledRendering() && !aSelections.empty()) + { + boost::property_tree::ptree aTree; + aTree.put("searchString", mpSearchItem->GetSearchString().toUtf8().getStr()); + + boost::property_tree::ptree aChildren; + for (const OString& rSelection : aSelections) + { + boost::property_tree::ptree aChild; + aChild.put("", rSelection.getStr()); + aChildren.push_back(std::make_pair("", aChild)); + } + aTree.add_child("searchResultSelection", aChildren); + + std::stringstream aStream; + boost::property_tree::write_json(aStream, aTree); + OString aPayload = aStream.str().c_str(); + pViewShell->GetDoc()->libreOfficeKitCallback(LOK_CALLBACK_SEARCH_RESULT_SELECTION, aPayload.getStr()); + } } RestoreStartPosition (); @@ -628,7 +649,7 @@ bool Outliner::SearchAndReplaceAll() return true; } -bool Outliner::SearchAndReplaceOnce() +bool Outliner::SearchAndReplaceOnce(std::vector<OString>* pSelections) { DetectChange (); @@ -718,30 +739,38 @@ bool Outliner::SearchAndReplaceOnce() if (pViewShell && pViewShell->GetDoc()->isTiledRendering() && mbStringFound) { - // notify LibreOfficeKit about changed page - OString aPayload = OString::number(maCurrentPosition.mnPageIndex); - pViewShell->GetDoc()->libreOfficeKitCallback(LOK_CALLBACK_SET_PART, aPayload.getStr()); - - // also about search result selections std::vector<Rectangle> aLogicRects; pOutlinerView->GetSelectionRectangles(aLogicRects); - boost::property_tree::ptree aTree; - aTree.put("searchString", mpSearchItem->GetSearchString().toUtf8().getStr()); - std::vector<OString> aLogicRectStrings; std::transform(aLogicRects.begin(), aLogicRects.end(), std::back_inserter(aLogicRectStrings), [](const Rectangle& rRectangle) { return rRectangle.toString(); }); OString sRectangles = comphelper::string::join("; ", aLogicRectStrings); - boost::property_tree::ptree aChildren; - boost::property_tree::ptree aChild; - aChild.put("", sRectangles.getStr()); - aChildren.push_back(std::make_pair("", aChild)); - aTree.add_child("searchResultSelection", aChildren); - - std::stringstream aStream; - boost::property_tree::write_json(aStream, aTree); - aPayload = aStream.str().c_str(); - pViewShell->GetDoc()->libreOfficeKitCallback(LOK_CALLBACK_SEARCH_RESULT_SELECTION, aPayload.getStr()); + + if (!pSelections) + { + // notify LibreOfficeKit about changed page + OString aPayload = OString::number(maCurrentPosition.mnPageIndex); + pViewShell->GetDoc()->libreOfficeKitCallback(LOK_CALLBACK_SET_PART, aPayload.getStr()); + + // also about search result selections + boost::property_tree::ptree aTree; + aTree.put("searchString", mpSearchItem->GetSearchString().toUtf8().getStr()); + + boost::property_tree::ptree aChildren; + boost::property_tree::ptree aChild; + aChild.put("", sRectangles.getStr()); + aChildren.push_back(std::make_pair("", aChild)); + aTree.add_child("searchResultSelection", aChildren); + + std::stringstream aStream; + boost::property_tree::write_json(aStream, aTree); + aPayload = aStream.str().c_str(); + pViewShell->GetDoc()->libreOfficeKitCallback(LOK_CALLBACK_SEARCH_RESULT_SELECTION, aPayload.getStr()); + } + else + { + pSelections->push_back(sRectangles); + } } return mbEndOfSearch; _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
