diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2017-07-27 13:59:01 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2017-07-27 15:31:45 +0200 |
commit | 7ed402ba648dd0f3de3b0dadebc13403b2c0a620 (patch) | |
tree | 36bb968a7efeb2f84f4436befe687bfd90f7dac8 | |
parent | 1176ae51154c2298b44427270754d2ee1562a115 (diff) |
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/40483
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r-- | offapi/com/sun/star/text/TextRangeContentProperties.idl | 6 | ||||
-rw-r--r-- | sw/inc/cmdid.h | 1 | ||||
-rw-r--r-- | sw/inc/unoprnms.hxx | 1 | ||||
-rw-r--r-- | sw/qa/extras/uiwriter/data/paragraph-of-text-range.odt | bin | 0 -> 8878 bytes | |||
-rw-r--r-- | sw/qa/extras/uiwriter/uiwriter.cxx | 23 | ||||
-rw-r--r-- | sw/source/core/unocore/unocrsrhelper.cxx | 13 | ||||
-rw-r--r-- | sw/source/core/unocore/unomapproperties.hxx | 1 |
7 files changed, 45 insertions, 0 deletions
diff --git a/offapi/com/sun/star/text/TextRangeContentProperties.idl b/offapi/com/sun/star/text/TextRangeContentProperties.idl index 042b4d5b3736..9daad2e139dc 100644 --- a/offapi/com/sun/star/text/TextRangeContentProperties.idl +++ b/offapi/com/sun/star/text/TextRangeContentProperties.idl @@ -81,6 +81,12 @@ service TextRangeContentProperties [optional, readonly, property] com::sun::star::text::XTextContent NestedTextContent; + /** Paragraph for the start of this range. + + @since LibreOffice 6.0 + */ + [optional, readonly, property] com::sun::star::text::XTextContent TextParagraph; + }; diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h index 29ca700b6f59..4edb28028e82 100644 --- a/sw/inc/cmdid.h +++ b/sw/inc/cmdid.h @@ -514,6 +514,7 @@ #define FN_UNO_FOOTER (FN_EXTRA2 + 38) #define FN_UNO_FOOTER_LEFT (FN_EXTRA2 + 39) #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_API_CALL (FN_EXTRA2 + 60) diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx index c78f08bf5577..ecb8dfbc88a5 100644 --- a/sw/inc/unoprnms.hxx +++ b/sw/inc/unoprnms.hxx @@ -391,6 +391,7 @@ #define UNO_NAME_FOOTER_BODY_DISTANCE "FooterBodyDistance" #define UNO_NAME_FOOTER_IS_DYNAMIC_HEIGHT "FooterIsDynamicHeight" #define UNO_NAME_FOOTER_IS_SHARED "FooterIsShared" +#define UNO_NAME_TEXT_PARAGRAPH "TextParagraph" #define UNO_NAME_FOOTER_HEIGHT "FooterHeight" #define UNO_NAME_FOOTER_IS_ON "FooterIsOn" diff --git a/sw/qa/extras/uiwriter/data/paragraph-of-text-range.odt b/sw/qa/extras/uiwriter/data/paragraph-of-text-range.odt Binary files differnew file mode 100644 index 000000000000..52cdb0be1ff2 --- /dev/null +++ b/sw/qa/extras/uiwriter/data/paragraph-of-text-range.odt diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx index 603df05f0bf0..c0888a007a6f 100644 --- a/sw/qa/extras/uiwriter/uiwriter.cxx +++ b/sw/qa/extras/uiwriter/uiwriter.cxx @@ -261,6 +261,7 @@ public: void testTableInNestedSection(); void testLinesInSectionInTable(); void testLinesMoveBackwardsInSectionInTable(); + void testParagraphOfTextRange(); CPPUNIT_TEST_SUITE(SwUiWriterTest); CPPUNIT_TEST(testReplaceForward); @@ -410,6 +411,7 @@ public: CPPUNIT_TEST(testLinesMoveBackwardsInSectionInTable); #endif CPPUNIT_TEST(testLinesInSectionInTable); + CPPUNIT_TEST(testParagraphOfTextRange); CPPUNIT_TEST_SUITE_END(); private: @@ -5063,6 +5065,27 @@ void SwUiWriterTest::testTableInNestedSection() } #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_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/unocore/unocrsrhelper.cxx b/sw/source/core/unocore/unocrsrhelper.cxx index eec234294340..805d919ea3e7 100644 --- a/sw/source/core/unocore/unocrsrhelper.cxx +++ b/sw/source/core/unocore/unocrsrhelper.cxx @@ -86,6 +86,7 @@ #include <SwNodeNum.hxx> #include <fmtmeta.hxx> #include <txtfld.hxx> +#include <unoparagraph.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -593,6 +594,18 @@ bool getCursorPropertyValue(const SfxItemPropertySimpleEntry& rEntry eNewState = PropertyState_DEFAULT_VALUE; } 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_FOOTNOTE: { diff --git a/sw/source/core/unocore/unomapproperties.hxx b/sw/source/core/unocore/unomapproperties.hxx index 633fd3db3e2e..b9825ff4a8d2 100644 --- a/sw/source/core/unocore/unomapproperties.hxx +++ b/sw/source/core/unocore/unomapproperties.hxx @@ -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_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_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_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}, \ |