From 5a52abcc97428423885cb144e5380e825e082abb Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 6 Oct 2015 12:29:33 +0200 Subject: [PATCH 185/398] sw: extract lcl_emitSearchResultCallbacks() from SwView::ExecSearch() Change-Id: I9c6b7540bcae85d6529e5cc195a7e86f58ee5713 (cherry picked from commit ca8016c3a317a7ba1f03e117d575fb78a572b4b3) --- sw/source/uibase/uiview/viewsrch.cxx | 88 +++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/sw/source/uibase/uiview/viewsrch.cxx b/sw/source/uibase/uiview/viewsrch.cxx index 570fadeb561a..a22cbdb6528f 100644 --- a/sw/source/uibase/uiview/viewsrch.cxx +++ b/sw/source/uibase/uiview/viewsrch.cxx @@ -102,6 +102,51 @@ static void lcl_addContainerToJson(boost::property_tree::ptree& rTree, const OSt rTree.add_child(rKey.getStr(), aChildren); } +/// Emits LOK callbacks (count, selection) for search results. +static void lcl_emitSearchResultCallbacks(sal_uInt16 nFound, SvxSearchItem* pSearchItem, SwWrtShell* pWrtShell) +{ + OString aPayload = OString::number(nFound) + ";" + pSearchItem->GetSearchString().toUtf8(); + pWrtShell->libreOfficeKitCallback(LOK_CALLBACK_SEARCH_RESULT_COUNT, aPayload.getStr()); + + // Emit a callback also about the selection rectangles, grouped by matches. + if (SwPaM* pPaM = pWrtShell->GetCrsr()) + { + std::vector aMatches; + for (SwPaM& rPaM : pPaM->GetRingContainer()) + { + if (SwShellCrsr* pShellCrsr = dynamic_cast(&rPaM)) + { + std::vector aSelectionRectangles; + pShellCrsr->SwSelPaintRects::Show(&aSelectionRectangles); + std::stringstream ss; + bool bFirst = true; + for (size_t i = 0; i < aSelectionRectangles.size(); ++i) + { + const OString& rSelectionRectangle = aSelectionRectangles[i]; + if (rSelectionRectangle.isEmpty()) + continue; + if (bFirst) + bFirst = false; + else + ss << "; "; + ss << rSelectionRectangle.getStr(); + } + OString sRect = ss.str().c_str(); + aMatches.push_back(sRect); + } + } + boost::property_tree::ptree aTree; + aTree.put("searchString", pSearchItem->GetSearchString().toUtf8().getStr()); + lcl_addContainerToJson(aTree, "searchResultSelection", aMatches); + + std::stringstream aStream; + boost::property_tree::write_json(aStream, aTree); + aPayload = aStream.str().c_str(); + + pWrtShell->libreOfficeKitCallback(LOK_CALLBACK_SEARCH_RESULT_SELECTION, aPayload.getStr()); + } +} + void SwView::ExecSearch(SfxRequest& rReq, bool bNoMessage) { const SfxItemSet* pArgs = rReq.GetArgs(); @@ -241,48 +286,7 @@ void SwView::ExecSearch(SfxRequest& rReq, bool bNoMessage) m_bFound = false; } else if (comphelper::LibreOfficeKit::isActive()) - { - OString aPayload = OString::number(nFound) + ";" + m_pSrchItem->GetSearchString().toUtf8(); - m_pWrtShell->libreOfficeKitCallback(LOK_CALLBACK_SEARCH_RESULT_COUNT, aPayload.getStr()); - - // Emit a callback also about the selection rectangles, grouped by matches. - if (SwPaM* pPaM = m_pWrtShell->GetCrsr()) - { - std::vector aMatches; - for (SwPaM& rPaM : pPaM->GetRingContainer()) - { - if (SwShellCrsr* pShellCrsr = dynamic_cast(&rPaM)) - { - std::vector aSelectionRectangles; - pShellCrsr->SwSelPaintRects::Show(&aSelectionRectangles); - std::stringstream ss; - bool bFirst = true; - for (size_t i = 0; i < aSelectionRectangles.size(); ++i) - { - const OString& rSelectionRectangle = aSelectionRectangles[i]; - if (rSelectionRectangle.isEmpty()) - continue; - if (bFirst) - bFirst = false; - else - ss << "; "; - ss << rSelectionRectangle.getStr(); - } - OString sRect = ss.str().c_str(); - aMatches.push_back(sRect); - } - } - boost::property_tree::ptree aTree; - aTree.put("searchString", m_pSrchItem->GetSearchString().toUtf8().getStr()); - lcl_addContainerToJson(aTree, "searchResultSelection", aMatches); - - std::stringstream aStream; - boost::property_tree::write_json(aStream, aTree); - aPayload = aStream.str().c_str(); - - m_pWrtShell->libreOfficeKitCallback(LOK_CALLBACK_SEARCH_RESULT_SELECTION, aPayload.getStr()); - } - } + lcl_emitSearchResultCallbacks(nFound, m_pSrchItem, m_pWrtShell); rReq.SetReturnValue(SfxBoolItem(nSlot, bRet)); #if HAVE_FEATURE_DESKTOP { -- 2.12.0