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
[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;
};
......
......@@ -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)
......
......@@ -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"
......
......@@ -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();
......
......@@ -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:
{
......
......@@ -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}, \
......
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