summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorJustin Luth <jluth@mail.com>2024-08-29 17:44:20 -0400
committerJustin Luth <jluth@mail.com>2024-09-04 14:32:46 +0200
commit309aded3145f8ecec9e9af61a3c64804258f8336 (patch)
treedb75aab379e70cdffe868ec4d44ed27008e31e3f /sw
parentf2d096099a220e4caa2d532a5230785cbdb91eed (diff)
NFC prep for tdf#143899: move TextBoxIsFramePr into SwTextBoxHelper
Now that writerfilter is part of sw, this helper function can be moved into a generic location so it can be used elsewhere. It will be needed for a layout exception, where floating tables and framePr frames are laid out differently from all other floating objects thanks to some new Microsoft inconsistencies. Change-Id: Ibb30a8831426b9dfd3e86ed082ecef22476fe018 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172620 Tested-by: Jenkins Reviewed-by: Justin Luth <jluth@mail.com>
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/textboxhelper.hxx3
-rw-r--r--sw/source/core/doc/textboxhelper.cxx26
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx29
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.hxx1
4 files changed, 31 insertions, 28 deletions
diff --git a/sw/inc/textboxhelper.hxx b/sw/inc/textboxhelper.hxx
index 4afd6fa9960c..a43777c2e519 100644
--- a/sw/inc/textboxhelper.hxx
+++ b/sw/inc/textboxhelper.hxx
@@ -187,6 +187,9 @@ public:
// Compares the anchor of the first and second given formats, and decides whether sync needed.
static bool isAnchorSyncNeeded(const SwFrameFormat* pFirst, const SwFrameFormat* pSecond);
+
+ /// Was the textbox created from a Microsoft import by a paragraph frame property (framePr)
+ static bool TextBoxIsFramePr(const SwFrameFormat& rFrameFormat);
};
/// Textboxes are basically textframe + shape pairs. This means one shape has one frame.
diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx
index 8e10623b445d..ebb380ae6d39 100644
--- a/sw/source/core/doc/textboxhelper.cxx
+++ b/sw/source/core/doc/textboxhelper.cxx
@@ -1723,6 +1723,32 @@ bool SwTextBoxHelper::isAnchorSyncNeeded(const SwFrameFormat* pFirst, const SwFr
return false;
}
+bool SwTextBoxHelper::TextBoxIsFramePr(const SwFrameFormat& rFrameFormat)
+{
+ SdrObject* pSdrObj = const_cast<SdrObject*>(rFrameFormat.FindRealSdrObject());
+ if (!pSdrObj)
+ return false;
+
+ uno::Reference<beans::XPropertySet> xPropertySet(pSdrObj->getUnoShape(), uno::UNO_QUERY);
+ if (!xPropertySet.is())
+ return false;
+
+ uno::Reference<beans::XPropertySetInfo> xPropSetInfo(xPropertySet->getPropertySetInfo());
+ if (!xPropSetInfo.is() || !xPropSetInfo->hasPropertyByName(u"FrameInteropGrabBag"_ustr))
+ return false;
+
+ bool bRet = false;
+ uno::Sequence<beans::PropertyValue> propList;
+ xPropertySet->getPropertyValue(u"FrameInteropGrabBag"_ustr) >>= propList;
+ auto pProp = std::find_if(
+ std::cbegin(propList), std::cend(propList),
+ [](const beans::PropertyValue& rProp) { return rProp.Name == "ParaFrameProperties"; });
+ if (pProp != std::cend(propList))
+ pProp->Value >>= bRet;
+
+ return bRet;
+}
+
SwTextBoxNode::SwTextBoxNode(SwFrameFormat* pOwnerShape)
{
assert(pOwnerShape);
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 2a684a266f84..e3b2d9869b4e 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1100,31 +1100,6 @@ void DocxAttributeOutput::PopulateFrameProperties(const SwFrameFormat* pFrameFor
m_pSerializer->singleElementNS( XML_w, XML_framePr, attrList );
}
-bool DocxAttributeOutput::TextBoxIsFramePr(const SwFrameFormat& rFrameFormat)
-{
- SdrObject* pSdrObj = const_cast<SdrObject*>(rFrameFormat.FindRealSdrObject());
- if (!pSdrObj)
- return false;
-
- uno::Reference<beans::XPropertySet> xPropertySet(pSdrObj->getUnoShape(), uno::UNO_QUERY);
- if (!xPropertySet.is())
- return false;
-
- uno::Reference<beans::XPropertySetInfo> xPropSetInfo(xPropertySet->getPropertySetInfo());
- if (!xPropSetInfo.is() || !xPropSetInfo->hasPropertyByName(u"FrameInteropGrabBag"_ustr))
- return false;
-
- bool bRet = false;
- uno::Sequence<beans::PropertyValue> propList;
- xPropertySet->getPropertyValue(u"FrameInteropGrabBag"_ustr) >>= propList;
- auto pProp = std::find_if(std::cbegin(propList), std::cend(propList),
- [](const beans::PropertyValue& rProp) { return rProp.Name == "ParaFrameProperties"; });
- if (pProp != std::cend(propList))
- pProp->Value >>= bRet;
-
- return bRet;
-}
-
void DocxAttributeOutput::EndParagraph( const ww8::WW8TableNodeInfoInner::Pointer_t& pTextNodeInfoInner )
{
// write the paragraph properties + the run, already in the correct order
@@ -1148,7 +1123,7 @@ void DocxAttributeOutput::EndParagraph( const ww8::WW8TableNodeInfoInner::Pointe
ww8::Frame aFrame = m_aFramesOfParagraph.top()[nIndex];
const SwFrameFormat& rFrameFormat = aFrame.GetFrameFormat();
- if (!m_bWritingHeaderFooter && TextBoxIsFramePr(rFrameFormat))
+ if (!m_bWritingHeaderFooter && SwTextBoxHelper::TextBoxIsFramePr(rFrameFormat))
{
std::shared_ptr<ww8::Frame> pFramePr = std::make_shared<ww8::Frame>(aFrame);
aFramePrTextbox.push_back(pFramePr);
@@ -1666,7 +1641,7 @@ void DocxAttributeOutput::EndParagraphProperties(const SfxItemSet& rParagraphMar
if (!m_bWritingHeaderFooter && m_aFramePr.Frame())
{
const SwFrameFormat& rFrameFormat = m_aFramePr.Frame()->GetFrameFormat();
- assert(TextBoxIsFramePr(rFrameFormat) && "by definition, because Frame()");
+ assert(SwTextBoxHelper::TextBoxIsFramePr(rFrameFormat) && "by definition, because Frame()");
const Size aSize = m_aFramePr.Frame()->GetSize();
PopulateFrameProperties(&rFrameFormat, aSize);
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 8fc216f973b5..1dd29a81dbe8 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -505,7 +505,6 @@ private:
void EndTable();
void SyncNodelessCells(ww8::WW8TableNodeInfoInner::Pointer_t const & pInner, sal_Int32 nCell, sal_uInt32 nRow);
void PopulateFrameProperties(const SwFrameFormat* pFrameFormat, const Size& rSize);
- static bool TextBoxIsFramePr(const SwFrameFormat& rFrameFormat);
/// End cell, row, and even the entire table if necessary.
void FinishTableRowCell( ww8::WW8TableNodeInfoInner::Pointer_t const & pInner, bool bForceEmptyParagraph = false );