Kaydet (Commit) 7ed402ba authored tarafından Miklos Vajna's avatar Miklos Vajna

sw: add new TextParagraph property to XTextRange

A text range represents a selection or cursor position, so similar to
sections or tables, it makes sense to expose the containing paragraph as
well. This new property does exactly that.

Change-Id: If92a3b5e61f13c7c14ca52bc8593a2b286a596cc
Reviewed-on: https://gerrit.libreoffice.org/40483Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMiklos Vajna <vmiklos@collabora.co.uk>
üst 1176ae51
...@@ -81,6 +81,12 @@ service TextRangeContentProperties ...@@ -81,6 +81,12 @@ service TextRangeContentProperties
[optional, readonly, property] com::sun::star::text::XTextContent [optional, readonly, property] com::sun::star::text::XTextContent
NestedTextContent; NestedTextContent;
/** Paragraph for the start of this range.
@since LibreOffice 6.0
*/
[optional, readonly, property] com::sun::star::text::XTextContent TextParagraph;
}; };
......
...@@ -514,6 +514,7 @@ ...@@ -514,6 +514,7 @@
#define FN_UNO_FOOTER (FN_EXTRA2 + 38) #define FN_UNO_FOOTER (FN_EXTRA2 + 38)
#define FN_UNO_FOOTER_LEFT (FN_EXTRA2 + 39) #define FN_UNO_FOOTER_LEFT (FN_EXTRA2 + 39)
#define FN_UNO_FOOTER_RIGHT (FN_EXTRA2 + 40) #define FN_UNO_FOOTER_RIGHT (FN_EXTRA2 + 40)
#define FN_UNO_TEXT_PARAGRAPH (FN_EXTRA2 + 41)
#define FN_UNO_FOLLOW_STYLE (FN_EXTRA2 + 59) #define FN_UNO_FOLLOW_STYLE (FN_EXTRA2 + 59)
#define FN_API_CALL (FN_EXTRA2 + 60) #define FN_API_CALL (FN_EXTRA2 + 60)
......
...@@ -391,6 +391,7 @@ ...@@ -391,6 +391,7 @@
#define UNO_NAME_FOOTER_BODY_DISTANCE "FooterBodyDistance" #define UNO_NAME_FOOTER_BODY_DISTANCE "FooterBodyDistance"
#define UNO_NAME_FOOTER_IS_DYNAMIC_HEIGHT "FooterIsDynamicHeight" #define UNO_NAME_FOOTER_IS_DYNAMIC_HEIGHT "FooterIsDynamicHeight"
#define UNO_NAME_FOOTER_IS_SHARED "FooterIsShared" #define UNO_NAME_FOOTER_IS_SHARED "FooterIsShared"
#define UNO_NAME_TEXT_PARAGRAPH "TextParagraph"
#define UNO_NAME_FOOTER_HEIGHT "FooterHeight" #define UNO_NAME_FOOTER_HEIGHT "FooterHeight"
#define UNO_NAME_FOOTER_IS_ON "FooterIsOn" #define UNO_NAME_FOOTER_IS_ON "FooterIsOn"
......
...@@ -261,6 +261,7 @@ public: ...@@ -261,6 +261,7 @@ public:
void testTableInNestedSection(); void testTableInNestedSection();
void testLinesInSectionInTable(); void testLinesInSectionInTable();
void testLinesMoveBackwardsInSectionInTable(); void testLinesMoveBackwardsInSectionInTable();
void testParagraphOfTextRange();
CPPUNIT_TEST_SUITE(SwUiWriterTest); CPPUNIT_TEST_SUITE(SwUiWriterTest);
CPPUNIT_TEST(testReplaceForward); CPPUNIT_TEST(testReplaceForward);
...@@ -410,6 +411,7 @@ public: ...@@ -410,6 +411,7 @@ public:
CPPUNIT_TEST(testLinesMoveBackwardsInSectionInTable); CPPUNIT_TEST(testLinesMoveBackwardsInSectionInTable);
#endif #endif
CPPUNIT_TEST(testLinesInSectionInTable); CPPUNIT_TEST(testLinesInSectionInTable);
CPPUNIT_TEST(testParagraphOfTextRange);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
private: private:
...@@ -5063,6 +5065,27 @@ void SwUiWriterTest::testTableInNestedSection() ...@@ -5063,6 +5065,27 @@ void SwUiWriterTest::testTableInNestedSection()
} }
#endif #endif
void SwUiWriterTest::testParagraphOfTextRange()
{
SwDoc* pDoc = createDoc("paragraph-of-text-range.odt");
// Enter the table.
SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
pWrtShell->Down(/*bSelect=*/false);
CPPUNIT_ASSERT(pWrtShell->IsCursorInTable());
// Enter the section.
pWrtShell->Down(/*bSelect=*/false);
CPPUNIT_ASSERT(pWrtShell->IsDirectlyInSection());
// Assert that we get the right paragraph object.
uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
uno::Reference<text::XTextViewCursorSupplier> xController(xModel->getCurrentController(), uno::UNO_QUERY);
uno::Reference<text::XTextRange> xViewCursor(xController->getViewCursor(), uno::UNO_QUERY);
// This failed as there were no TextParagraph property.
auto xParagraph = getProperty< uno::Reference<text::XTextRange> >(xViewCursor->getStart(), "TextParagraph");
CPPUNIT_ASSERT_EQUAL(OUString("In section"), xParagraph->getString());
}
CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest); CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest);
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
...@@ -86,6 +86,7 @@ ...@@ -86,6 +86,7 @@
#include <SwNodeNum.hxx> #include <SwNodeNum.hxx>
#include <fmtmeta.hxx> #include <fmtmeta.hxx>
#include <txtfld.hxx> #include <txtfld.hxx>
#include <unoparagraph.hxx>
using namespace ::com::sun::star; using namespace ::com::sun::star;
using namespace ::com::sun::star::uno; using namespace ::com::sun::star::uno;
...@@ -593,6 +594,18 @@ bool getCursorPropertyValue(const SfxItemPropertySimpleEntry& rEntry ...@@ -593,6 +594,18 @@ bool getCursorPropertyValue(const SfxItemPropertySimpleEntry& rEntry
eNewState = PropertyState_DEFAULT_VALUE; eNewState = PropertyState_DEFAULT_VALUE;
} }
break; break;
case FN_UNO_TEXT_PARAGRAPH:
{
SwTextNode* pTextNode = rPam.GetPoint()->nNode.GetNode().GetTextNode();
if (pTextNode)
{
uno::Reference<text::XTextContent> xParagraph = SwXParagraph::CreateXParagraph(*pTextNode->GetDoc(), pTextNode);
*pAny <<= xParagraph;
}
else
eNewState = PropertyState_DEFAULT_VALUE;
}
break;
case FN_UNO_ENDNOTE: case FN_UNO_ENDNOTE:
case FN_UNO_FOOTNOTE: case FN_UNO_FOOTNOTE:
{ {
......
...@@ -88,6 +88,7 @@ ...@@ -88,6 +88,7 @@
{ OUString(UNO_NAME_CELL), FN_UNO_CELL, cppu::UnoType<css::table::XCell>::get(), PropertyAttribute::MAYBEVOID|PropertyAttribute::READONLY ,0 }, \ { OUString(UNO_NAME_CELL), FN_UNO_CELL, cppu::UnoType<css::table::XCell>::get(), PropertyAttribute::MAYBEVOID|PropertyAttribute::READONLY ,0 }, \
{ OUString(UNO_NAME_TEXT_FRAME), FN_UNO_TEXT_FRAME, cppu::UnoType<css::text::XTextFrame>::get(), PropertyAttribute::MAYBEVOID|PropertyAttribute::READONLY ,0 }, \ { OUString(UNO_NAME_TEXT_FRAME), FN_UNO_TEXT_FRAME, cppu::UnoType<css::text::XTextFrame>::get(), PropertyAttribute::MAYBEVOID|PropertyAttribute::READONLY ,0 }, \
{ OUString(UNO_NAME_TEXT_SECTION), FN_UNO_TEXT_SECTION, cppu::UnoType<css::text::XTextSection>::get(), PropertyAttribute::MAYBEVOID|PropertyAttribute::READONLY ,0 }, \ { OUString(UNO_NAME_TEXT_SECTION), FN_UNO_TEXT_SECTION, cppu::UnoType<css::text::XTextSection>::get(), PropertyAttribute::MAYBEVOID|PropertyAttribute::READONLY ,0 }, \
{ OUString(UNO_NAME_TEXT_PARAGRAPH), FN_UNO_TEXT_PARAGRAPH, cppu::UnoType<css::text::XTextContent>::get(), PropertyAttribute::MAYBEVOID|PropertyAttribute::READONLY ,0 }, \
{ OUString(UNO_NAME_PARA_CHAPTER_NUMBERING_LEVEL), FN_UNO_PARA_CHAPTER_NUMBERING_LEVEL,cppu::UnoType<sal_Int8>::get(), PROPERTY_NONE, 0}, \ { OUString(UNO_NAME_PARA_CHAPTER_NUMBERING_LEVEL), FN_UNO_PARA_CHAPTER_NUMBERING_LEVEL,cppu::UnoType<sal_Int8>::get(), PROPERTY_NONE, 0}, \
{ OUString(UNO_NAME_PARA_CONDITIONAL_STYLE_NAME), FN_UNO_PARA_CONDITIONAL_STYLE_NAME, cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY, 0}, \ { OUString(UNO_NAME_PARA_CONDITIONAL_STYLE_NAME), FN_UNO_PARA_CONDITIONAL_STYLE_NAME, cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY, 0}, \
{ OUString(UNO_NAME_LIST_ID), FN_UNO_LIST_ID, cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID, 0}, \ { OUString(UNO_NAME_LIST_ID), FN_UNO_LIST_ID, cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID, 0}, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment