diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-10-14 15:39:07 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-10-14 15:39:07 +0200 |
commit | ad280b67f8fda8f832a6a83bc5665df448c6ad00 (patch) | |
tree | e029285dafeba4276bb66c224ecc734b54367a97 | |
parent | dd1fc2242a64a0b9ae8031a5edc7ecfcde4ec3df (diff) |
LOK: include part numbers in CALLBACK_SEARCH_RESULT_SELECTION payload
Without that, the result in Calc/Impress is ambiguous.
Change-Id: I8dfd8dafc996102ed583688fddd721c7600dc48c
-rw-r--r-- | desktop/qa/desktop_lib/test_desktop_lib.cxx | 8 | ||||
-rw-r--r-- | include/LibreOfficeKit/LibreOfficeKitEnums.h | 14 | ||||
-rw-r--r-- | sc/source/ui/view/viewfun2.cxx | 3 | ||||
-rw-r--r-- | sd/qa/unit/tiledrendering/tiledrendering.cxx | 9 | ||||
-rw-r--r-- | sd/source/ui/view/Outliner.cxx | 6 | ||||
-rw-r--r-- | sw/qa/extras/tiledrendering/tiledrendering.cxx | 8 | ||||
-rw-r--r-- | sw/source/uibase/uiview/viewsrch.cxx | 3 |
7 files changed, 40 insertions, 11 deletions
diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx index 6302ac484a67..28948099b5e3 100644 --- a/desktop/qa/desktop_lib/test_desktop_lib.cxx +++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx @@ -74,6 +74,7 @@ public: uno::Reference<lang::XComponent> mxComponent; OString m_aTextSelection; std::vector<OString> m_aSearchResultSelection; + std::vector<int> m_aSearchResultPart; }; LibLODocument_Impl* DesktopLOKTest::loadDoc(const char* pName, LibreOfficeKitDocumentType eType) @@ -131,7 +132,10 @@ void DesktopLOKTest::callbackImpl(int nType, const char* pPayload) std::stringstream aStream(pPayload); boost::property_tree::read_json(aStream, aTree); for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("searchResultSelection")) - m_aSearchResultSelection.push_back(rValue.second.data().c_str()); + { + m_aSearchResultSelection.push_back(rValue.second.get<std::string>("rectangles").c_str()); + m_aSearchResultPart.push_back(std::atoi(rValue.second.get<std::string>("part").c_str())); + } } break; } @@ -269,6 +273,8 @@ void DesktopLOKTest::testSearchCalc() CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aSelections.size()); // Make sure that we get exactly as many rectangle lists as matches. CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), m_aSearchResultSelection.size()); + // Result is on the first sheet. + CPPUNIT_ASSERT_EQUAL(0, m_aSearchResultPart[0]); closeDoc(); comphelper::LibreOfficeKit::setActive(false); diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h index 0da87699b1b5..459da5d196f4 100644 --- a/include/LibreOfficeKit/LibreOfficeKitEnums.h +++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h @@ -165,14 +165,20 @@ typedef enum * { * "searchString": "...", * "searchResultSelection": [ - * "...", - * "..." + * { + * "part": "...", + * "rectangles": "..." + * }, + * { + * "part": "...", + * "rectangles": "..." + * } * ] * } * * - searchString is the search query - * - searchResultSelection is an array of rectangle list, in - * LOK_CALLBACK_TEXT_SELECTION format. + * - searchResultSelection is an array of part-number and rectangle list + * pairs, in LOK_CALLBACK_SET_PART / LOK_CALLBACK_TEXT_SELECTION format. */ LOK_CALLBACK_SEARCH_RESULT_SELECTION } diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx index b3068230e02d..9f808d0fd16b 100644 --- a/sc/source/ui/view/viewfun2.cxx +++ b/sc/source/ui/view/viewfun2.cxx @@ -1865,7 +1865,8 @@ bool ScViewFunc::SearchAndReplace( const SvxSearchItem* pSearchItem, for (const Rectangle& rLogicRect : aLogicRects) { boost::property_tree::ptree aSelection; - aSelection.put("", rLogicRect.toString().getStr()); + aSelection.put("part", OString::number(nTab).getStr()); + aSelection.put("rectangles", rLogicRect.toString().getStr()); aSelections.push_back(std::make_pair("", aSelection)); } aTree.add_child("searchResultSelection", aSelections); diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx index 1313b0ac2149..4a5c81b7498a 100644 --- a/sd/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx @@ -80,6 +80,7 @@ private: bool m_bFound; sal_Int32 m_nPart; std::vector<OString> m_aSearchResultSelection; + std::vector<int> m_aSearchResultPart; #endif }; @@ -187,11 +188,15 @@ void SdTiledRenderingTest::callbackImpl(int nType, const char* pPayload) case LOK_CALLBACK_SEARCH_RESULT_SELECTION: { m_aSearchResultSelection.clear(); + m_aSearchResultPart.clear(); boost::property_tree::ptree aTree; std::stringstream aStream(pPayload); boost::property_tree::read_json(aStream, aTree); for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("searchResultSelection")) - m_aSearchResultSelection.push_back(rValue.second.data().c_str()); + { + m_aSearchResultSelection.push_back(rValue.second.get<std::string>("rectangles").c_str()); + m_aSearchResultPart.push_back(std::atoi(rValue.second.get<std::string>("part").c_str())); + } } break; } @@ -401,6 +406,8 @@ void SdTiledRenderingTest::testSearch() CPPUNIT_ASSERT_EQUAL(true, m_bFound); // This was 0; should be 1 match for "find". CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), m_aSearchResultSelection.size()); + // Result is on the second slide. + CPPUNIT_ASSERT_EQUAL(1, m_aSearchResultPart[0]); // This should trigger the not-found callback. lcl_search("ccc"); diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx index a18b022d0c10..f51c91f62995 100644 --- a/sd/source/ui/view/Outliner.cxx +++ b/sd/source/ui/view/Outliner.cxx @@ -637,7 +637,8 @@ bool Outliner::SearchAndReplaceAll() for (const SearchSelection& rSelection : aSelections) { boost::property_tree::ptree aChild; - aChild.put("", rSelection.m_aRectangles.getStr()); + aChild.put("part", OString::number(rSelection.m_nPage).getStr()); + aChild.put("rectangles", rSelection.m_aRectangles.getStr()); aChildren.push_back(std::make_pair("", aChild)); } aTree.add_child("searchResultSelection", aChildren); @@ -764,7 +765,8 @@ bool Outliner::SearchAndReplaceOnce(std::vector<SearchSelection>* pSelections) boost::property_tree::ptree aChildren; boost::property_tree::ptree aChild; - aChild.put("", sRectangles.getStr()); + 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); diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx index eb59b62b9208..523c9d2a1757 100644 --- a/sw/qa/extras/tiledrendering/tiledrendering.cxx +++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx @@ -73,6 +73,7 @@ private: OString m_aTextSelection; bool m_bFound; std::vector<OString> m_aSearchResultSelection; + std::vector<int> m_aSearchResultPart; }; SwTiledRenderingTest::SwTiledRenderingTest() @@ -139,7 +140,10 @@ void SwTiledRenderingTest::callbackImpl(int nType, const char* pPayload) std::stringstream aStream(pPayload); boost::property_tree::read_json(aStream, aTree); for (boost::property_tree::ptree::value_type& rValue : aTree.get_child("searchResultSelection")) - m_aSearchResultSelection.push_back(rValue.second.data().c_str()); + { + m_aSearchResultSelection.push_back(rValue.second.get<std::string>("rectangles").c_str()); + m_aSearchResultPart.push_back(std::atoi(rValue.second.get<std::string>("part").c_str())); + } } break; } @@ -478,6 +482,8 @@ void SwTiledRenderingTest::testSearchAll() comphelper::dispatchCommand(".uno:ExecuteSearch", aPropertyValues); // This was 0; should be 2 results in the body text. CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), m_aSearchResultSelection.size()); + // Writer documents are always a single part. + CPPUNIT_ASSERT_EQUAL(0, m_aSearchResultPart[0]); comphelper::LibreOfficeKit::setActive(false); #endif diff --git a/sw/source/uibase/uiview/viewsrch.cxx b/sw/source/uibase/uiview/viewsrch.cxx index e2b73f2c8cd3..92d907694970 100644 --- a/sw/source/uibase/uiview/viewsrch.cxx +++ b/sw/source/uibase/uiview/viewsrch.cxx @@ -96,7 +96,8 @@ static void lcl_addContainerToJson(boost::property_tree::ptree& rTree, const OSt for (const OString& rMatch : rMatches) { boost::property_tree::ptree aChild; - aChild.put("", rMatch.getStr()); + aChild.put("part", "0"); + aChild.put("rectangles", rMatch.getStr()); aChildren.push_back(std::make_pair("", aChild)); } |