[Libreoffice-commits] core.git: sd/inc sd/source
Miklos Vajna
vmiklos at collabora.co.uk
Wed Oct 14 02:39:30 PDT 2015
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 <vmiklos at collabora.co.uk>
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;
More information about the Libreoffice-commits
mailing list