include/svx/svdmrkv.hxx | 6 +- sd/inc/Outliner.hxx | 11 +++ sd/source/ui/view/Outliner.cxx | 121 ++++++++++++++++++++--------------------- svx/source/svdraw/svdmrkv.cxx | 21 +++---- 4 files changed, 83 insertions(+), 76 deletions(-)
New commits: commit a61e93f28596059baacf0a057ac78fa60343b58a Author: Tomaž Vajngerl <[email protected]> AuthorDate: Wed May 27 14:07:10 2020 +0200 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Wed May 27 14:07:10 2020 +0200 sd: move LOK search result logic to it's own method Change-Id: I67cbe4d3d63bffdab72c09b3a956f67806588348 diff --git a/sd/inc/Outliner.hxx b/sd/inc/Outliner.hxx index 8e175983f249..79c54c032a03 100644 --- a/sd/inc/Outliner.hxx +++ b/sd/inc/Outliner.hxx @@ -46,6 +46,7 @@ struct SearchSelection { /// 0-based index of the page that has the selection. int m_nPage; + /** * List of selection rectangles in twips -- multiple rectangles only in * case the selection spans over more layout lines. @@ -359,6 +360,10 @@ private: */ bool SearchAndReplaceOnce(std::vector<::sd::SearchSelection>* pSelections = nullptr); + void sendLOKSearchResultCallback(std::shared_ptr<sd::ViewShell>& pViewShell, + OutlinerView* pOutlinerView, + std::vector<sd::SearchSelection>* pSelections); + /** Detect changes of the document or view and react accordingly. Such changes may occur because different calls to <member>SearchAndReplace()</member> there usually is user diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx index e7f676f43e4e..6e982f3d25f7 100644 --- a/sd/source/ui/view/Outliner.cxx +++ b/sd/source/ui/view/Outliner.cxx @@ -673,6 +673,66 @@ bool SdOutliner::SearchAndReplaceAll() return bRet; } +void SdOutliner::sendLOKSearchResultCallback(std::shared_ptr<sd::ViewShell> & pViewShell, + OutlinerView* pOutlinerView, + std::vector<sd::SearchSelection>* pSelections) +{ + std::vector<::tools::Rectangle> aLogicRects; + pOutlinerView->GetSelectionRectangles(aLogicRects); + + // convert to twips if in 100thmm (seems as if LibreOfficeKit is based on twips?). Do this + // here where we have the only place needing this, *not* in ImpEditView::GetSelectionRectangles + // which makes that method unusable for others + if (pOutlinerView->GetWindow() && MapUnit::Map100thMM == pOutlinerView->GetWindow()->GetMapMode().GetMapUnit()) + { + for (tools::Rectangle& rRectangle : aLogicRects) + { + rRectangle = OutputDevice::LogicToLogic(rRectangle, MapMode(MapUnit::Map100thMM), MapMode(MapUnit::MapTwip)); + } + } + + std::vector<OString> aLogicRectStrings; + std::transform(aLogicRects.begin(), aLogicRects.end(), std::back_inserter(aLogicRectStrings), + [](const ::tools::Rectangle& rRectangle) + { + return rRectangle.toString(); + }); + + OString sRectangles = comphelper::string::join("; ", aLogicRectStrings); + + if (!pSelections) + { + // notify LibreOfficeKit about changed page + OString aPayload = OString::number(maCurrentPosition.mnPageIndex); + SfxViewShell& rSfxViewShell = pViewShell->GetViewShellBase(); + rSfxViewShell.libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload.getStr()); + + // also about search result selections + boost::property_tree::ptree aTree; + aTree.put("searchString", mpSearchItem->GetSearchString().toUtf8().getStr()); + aTree.put("highlightAll", false); + + boost::property_tree::ptree aChildren; + boost::property_tree::ptree aChild; + aChild.put("part", OString::number(maCurrentPosition.mnPageIndex).getStr()); + aChild.put("rectangles", 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(); + rSfxViewShell.libreOfficeKitViewCallback(LOK_CALLBACK_SEARCH_RESULT_SELECTION, aPayload.getStr()); + } + else + { + sd::SearchSelection aSelection(maCurrentPosition.mnPageIndex, sRectangles); + bool bDuplicate = !pSelections->empty() && pSelections->back() == aSelection; + if (!bDuplicate) + pSelections->push_back(aSelection); + } +} + bool SdOutliner::SearchAndReplaceOnce(std::vector<sd::SearchSelection>* pSelections) { DetectChange (); @@ -764,55 +824,7 @@ bool SdOutliner::SearchAndReplaceOnce(std::vector<sd::SearchSelection>* pSelecti if (pViewShell && comphelper::LibreOfficeKit::isActive() && mbStringFound) { - std::vector<::tools::Rectangle> aLogicRects; - pOutlinerView->GetSelectionRectangles(aLogicRects); - - // convert to twips if in 100thmm (seems as if LibreOfficeKit is based on twips?). Do this - // here where we have the only place needing this, *not* in ImpEditView::GetSelectionRectangles - // which makes that method unusable for others - if (pOutlinerView->GetWindow() && MapUnit::Map100thMM == pOutlinerView->GetWindow()->GetMapMode().GetMapUnit()) - { - for (tools::Rectangle& rRectangle : aLogicRects) - { - rRectangle = OutputDevice::LogicToLogic(rRectangle, MapMode(MapUnit::Map100thMM), MapMode(MapUnit::MapTwip)); - } - } - - std::vector<OString> aLogicRectStrings; - std::transform(aLogicRects.begin(), aLogicRects.end(), std::back_inserter(aLogicRectStrings), [](const ::tools::Rectangle& rRectangle) { return rRectangle.toString(); }); - OString sRectangles = comphelper::string::join("; ", aLogicRectStrings); - - if (!pSelections) - { - // notify LibreOfficeKit about changed page - OString aPayload = OString::number(maCurrentPosition.mnPageIndex); - SfxViewShell& rSfxViewShell = pViewShell->GetViewShellBase(); - rSfxViewShell.libreOfficeKitViewCallback(LOK_CALLBACK_SET_PART, aPayload.getStr()); - - // also about search result selections - boost::property_tree::ptree aTree; - aTree.put("searchString", mpSearchItem->GetSearchString().toUtf8().getStr()); - aTree.put("highlightAll", false); - - boost::property_tree::ptree aChildren; - boost::property_tree::ptree aChild; - aChild.put("part", OString::number(maCurrentPosition.mnPageIndex).getStr()); - aChild.put("rectangles", 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(); - rSfxViewShell.libreOfficeKitViewCallback(LOK_CALLBACK_SEARCH_RESULT_SELECTION, aPayload.getStr()); - } - else - { - sd::SearchSelection aSelection(maCurrentPosition.mnPageIndex, sRectangles); - bool bDuplicate = !pSelections->empty() && pSelections->back() == aSelection; - if (!bDuplicate) - pSelections->push_back(aSelection); - } + sendLOKSearchResultCallback(pViewShell, pOutlinerView, pSelections); } return mbEndOfSearch; commit 0878b13610a41b1e7cbc9f3b4226b05f48259439 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Wed May 27 13:58:00 2020 +0200 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Wed May 27 13:58:00 2020 +0200 sd: move SearchSelection constr. to the header file Change-Id: I068c1e2643e2aafeb838a2bfa1433a2495323f2f diff --git a/sd/inc/Outliner.hxx b/sd/inc/Outliner.hxx index c95786577b62..8e175983f249 100644 --- a/sd/inc/Outliner.hxx +++ b/sd/inc/Outliner.hxx @@ -52,7 +52,11 @@ struct SearchSelection */ OString m_aRectangles; - SearchSelection(int nPage, const OString& rRectangles); + SearchSelection(int nPage, const OString& rRectangles) + : m_nPage(nPage) + , m_aRectangles(rRectangles) + { + } bool operator==(const SearchSelection& rOther) const { diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx index e67d823e9a11..e7f676f43e4e 100644 --- a/sd/source/ui/view/Outliner.cxx +++ b/sd/source/ui/view/Outliner.cxx @@ -66,17 +66,6 @@ using namespace ::com::sun::star::linguistic2; class SfxStyleSheetPool; -namespace sd { - -SearchSelection::SearchSelection(int nPage, const OString& rRectangles) - : m_nPage(nPage), - m_aRectangles(rRectangles) -{ -} - -} // end of namespace sd - - class SdOutliner::Implementation { public: commit bc0b4627b45eb7c3f699423dc75896bff7644290 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Wed May 27 12:54:54 2020 +0200 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Wed May 27 12:54:54 2020 +0200 svx: convert ImplMarkingOverlay and friends to use unique_ptr Change-Id: I19ba9e93f2804fded237b760a28f3ce62e4b2c5f diff --git a/include/svx/svdmrkv.hxx b/include/svx/svdmrkv.hxx index 49d39f06fb8d..9ccf77ef2784 100644 --- a/include/svx/svdmrkv.hxx +++ b/include/svx/svdmrkv.hxx @@ -90,9 +90,9 @@ class SVXCORE_DLLPUBLIC SdrMarkView : public SdrSnapView friend class SdrPageView; // #114409#-3 Migrate selections - ImplMarkingOverlay* mpMarkObjOverlay; - ImplMarkingOverlay* mpMarkPointsOverlay; - ImplMarkingOverlay* mpMarkGluePointsOverlay; + std::unique_ptr<ImplMarkingOverlay> mpMarkObjOverlay; + std::unique_ptr<ImplMarkingOverlay> mpMarkPointsOverlay; + std::unique_ptr<ImplMarkingOverlay> mpMarkGluePointsOverlay; protected: SdrObject* mpMarkedObj; // If not just one object ( i.e. More than one object ) is marked. diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx index 3e28a3956391..99a5bcdfefc8 100644 --- a/svx/source/svdraw/svdmrkv.cxx +++ b/svx/source/svdraw/svdmrkv.cxx @@ -354,10 +354,10 @@ void SdrMarkView::BegMarkObj(const Point& rPnt, bool bUnmark) { BrkAction(); - DBG_ASSERT(nullptr == mpMarkObjOverlay, "SdrMarkView::BegMarkObj: There exists a mpMarkObjOverlay (!)"); + DBG_ASSERT(!mpMarkObjOverlay, "SdrMarkView::BegMarkObj: There exists a mpMarkObjOverlay (!)"); basegfx::B2DPoint aStartPos(rPnt.X(), rPnt.Y()); - mpMarkObjOverlay = new ImplMarkingOverlay(*this, aStartPos, bUnmark); + mpMarkObjOverlay.reset(new ImplMarkingOverlay(*this, aStartPos, bUnmark)); maDragStat.Reset(rPnt); maDragStat.NextPoint(); @@ -401,8 +401,7 @@ void SdrMarkView::BrkMarkObj() if(IsMarkObj()) { DBG_ASSERT(mpMarkObjOverlay, "SdrSnapView::MovSetPageOrg: no ImplPageOriginOverlay (!)"); - delete mpMarkObjOverlay; - mpMarkObjOverlay = nullptr; + mpMarkObjOverlay.reset(); } } @@ -413,9 +412,9 @@ bool SdrMarkView::BegMarkPoints(const Point& rPnt, bool bUnmark) { BrkAction(); - DBG_ASSERT(nullptr == mpMarkPointsOverlay, "SdrMarkView::BegMarkObj: There exists a mpMarkPointsOverlay (!)"); + DBG_ASSERT(!mpMarkPointsOverlay, "SdrMarkView::BegMarkObj: There exists a mpMarkPointsOverlay (!)"); basegfx::B2DPoint aStartPos(rPnt.X(), rPnt.Y()); - mpMarkPointsOverlay = new ImplMarkingOverlay(*this, aStartPos, bUnmark); + mpMarkPointsOverlay.reset(new ImplMarkingOverlay(*this, aStartPos, bUnmark)); maDragStat.Reset(rPnt); maDragStat.NextPoint(); @@ -466,8 +465,7 @@ void SdrMarkView::BrkMarkPoints() if(IsMarkPoints()) { DBG_ASSERT(mpMarkPointsOverlay, "SdrSnapView::MovSetPageOrg: no ImplPageOriginOverlay (!)"); - delete mpMarkPointsOverlay; - mpMarkPointsOverlay = nullptr; + mpMarkPointsOverlay.reset(); } } @@ -478,10 +476,10 @@ bool SdrMarkView::BegMarkGluePoints(const Point& rPnt, bool bUnmark) { BrkAction(); - DBG_ASSERT(nullptr == mpMarkGluePointsOverlay, "SdrMarkView::BegMarkObj: There exists a mpMarkGluePointsOverlay (!)"); + DBG_ASSERT(!mpMarkGluePointsOverlay, "SdrMarkView::BegMarkObj: There exists a mpMarkGluePointsOverlay (!)"); basegfx::B2DPoint aStartPos(rPnt.X(), rPnt.Y()); - mpMarkGluePointsOverlay = new ImplMarkingOverlay(*this, aStartPos, bUnmark); + mpMarkGluePointsOverlay.reset(new ImplMarkingOverlay(*this, aStartPos, bUnmark)); maDragStat.Reset(rPnt); maDragStat.NextPoint(); maDragStat.SetMinMove(mnMinMovLog); @@ -525,8 +523,7 @@ void SdrMarkView::BrkMarkGluePoints() if(IsMarkGluePoints()) { DBG_ASSERT(mpMarkGluePointsOverlay, "SdrSnapView::MovSetPageOrg: no ImplPageOriginOverlay (!)"); - delete mpMarkGluePointsOverlay; - mpMarkGluePointsOverlay = nullptr; + mpMarkGluePointsOverlay.reset(); } } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
