summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-10-14 15:39:07 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-10-14 15:39:07 +0200
commitad280b67f8fda8f832a6a83bc5665df448c6ad00 (patch)
treee029285dafeba4276bb66c224ecc734b54367a97
parentdd1fc2242a64a0b9ae8031a5edc7ecfcde4ec3df (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.cxx8
-rw-r--r--include/LibreOfficeKit/LibreOfficeKitEnums.h14
-rw-r--r--sc/source/ui/view/viewfun2.cxx3
-rw-r--r--sd/qa/unit/tiledrendering/tiledrendering.cxx9
-rw-r--r--sd/source/ui/view/Outliner.cxx6
-rw-r--r--sw/qa/extras/tiledrendering/tiledrendering.cxx8
-rw-r--r--sw/source/uibase/uiview/viewsrch.cxx3
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));
}