[Libreoffice-commits] core.git: offapi/com sw/inc sw/qa sw/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Thu Sep 19 11:42:36 UTC 2019


 offapi/com/sun/star/text/BaseFrameProperties.idl |    5 ++++
 offapi/com/sun/star/text/Shape.idl               |    5 ++++
 sw/inc/unomid.h                                  |    1 
 sw/inc/unoprnms.hxx                              |    1 
 sw/qa/extras/unowriter/unowriter.cxx             |   26 +++++++++++++++++++++++
 sw/source/core/attr/fmtwrapinfluenceonobjpos.cxx |   25 +++++++++++++++++++---
 sw/source/core/unocore/unoframe.cxx              |    9 ++++++-
 sw/source/core/unocore/unomap.cxx                |    1 
 sw/source/core/unocore/unomap1.cxx               |    1 
 sw/source/core/unocore/unomapproperties.hxx      |    1 
 10 files changed, 70 insertions(+), 5 deletions(-)

New commits:
commit ab825c665c1ee509769bdaf0ae95fc111a357fc6
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Thu Sep 19 10:58:59 2019 +0200
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Thu Sep 19 13:41:50 2019 +0200

    Related: tdf#124600 sw anchored object allow overlap: add UNO API
    
    And fix the pool item's operator==() that forgot to take allow-overlap
    into account.
    
    Change-Id: I34ec29eed95d821cfccebbb15675e0f576b6454d
    Reviewed-on: https://gerrit.libreoffice.org/79115
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    Tested-by: Jenkins

diff --git a/offapi/com/sun/star/text/BaseFrameProperties.idl b/offapi/com/sun/star/text/BaseFrameProperties.idl
index 4f62845fe6ba..bffa5ddf4770 100644
--- a/offapi/com/sun/star/text/BaseFrameProperties.idl
+++ b/offapi/com/sun/star/text/BaseFrameProperties.idl
@@ -367,6 +367,11 @@ published service BaseFrameProperties
         @since LibreOffice 6.1
     */
     [optional, property] com::sun::star::graphic::XGraphic BackGraphic;
+
+    /** This defines if the frame is allowed to overlap with other anchored objects.
+        @since LibreOffice 6.4
+    */
+    [optional, property] boolean AllowOverlap;
 };
 
 
diff --git a/offapi/com/sun/star/text/Shape.idl b/offapi/com/sun/star/text/Shape.idl
index 9315b01751de..7e8ba75a23fc 100644
--- a/offapi/com/sun/star/text/Shape.idl
+++ b/offapi/com/sun/star/text/Shape.idl
@@ -187,6 +187,11 @@ published service Shape
         @since OOo 2.0
     */
     [optional, readonly, property] com::sun::star::awt::Point EndPositionInHoriL2R;
+
+    /** This defines if the shape is allowed to overlap with other anchored objects.
+        @since LibreOffice 6.4
+    */
+    [optional, property] boolean AllowOverlap;
 };
 
 
diff --git a/sw/inc/unomid.h b/sw/inc/unomid.h
index 06e84c99acb1..0a312a70624a 100644
--- a/sw/inc/unomid.h
+++ b/sw/inc/unomid.h
@@ -146,6 +146,7 @@
 
 // SwFormatWrapInfluenceOnObjPos
 #define MID_WRAP_INFLUENCE      0
+#define MID_ALLOW_OVERLAP       1
 
 // SwFormatFollowTextFlow
 #define MID_FOLLOW_TEXT_FLOW    0
diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx
index 69fadbe60c5f..a6246f9d2d36 100644
--- a/sw/inc/unoprnms.hxx
+++ b/sw/inc/unoprnms.hxx
@@ -869,6 +869,7 @@
 #define UNO_NAME_TABLE_LAST_ROW_START_COLUMN "LastRowStartColumn"
 
 #define UNO_NAME_RESOLVED "Resolved"
+#define UNO_NAME_ALLOW_OVERLAP "AllowOverlap"
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/unowriter/unowriter.cxx b/sw/qa/extras/unowriter/unowriter.cxx
index ffb57d836f48..e16562372bc3 100644
--- a/sw/qa/extras/unowriter/unowriter.cxx
+++ b/sw/qa/extras/unowriter/unowriter.cxx
@@ -644,6 +644,32 @@ CPPUNIT_TEST_FIXTURE(SwUnoWriter, testXTextCursor_setPropertyValues)
                          getProperty<OUString>(xCursorProps, "CharStyleName"));
 }
 
+CPPUNIT_TEST_FIXTURE(SwUnoWriter, testShapeAllowOverlap)
+{
+    // Test the AllowOverlap frame/shape property.
+
+    // Create a new document and insert a rectangle.
+    loadURL("private:factory/swriter", nullptr);
+    uno::Reference<lang::XMultiServiceFactory> xDocument(mxComponent, uno::UNO_QUERY);
+    awt::Point aPoint(1000, 1000);
+    awt::Size aSize(10000, 10000);
+    uno::Reference<drawing::XShape> xShape(
+        xDocument->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+    xShape->setPosition(aPoint);
+    xShape->setSize(aSize);
+    uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xDocument, uno::UNO_QUERY);
+    xDrawPageSupplier->getDrawPage()->add(xShape);
+
+    // The property is on by default, turn it off & verify.
+    uno::Reference<beans::XPropertySet> xShapeProperties(xShape, uno::UNO_QUERY);
+    xShapeProperties->setPropertyValue("AllowOverlap", uno::makeAny(false));
+    CPPUNIT_ASSERT(!getProperty<bool>(xShapeProperties, "AllowOverlap"));
+
+    // Turn it back to on & verify.
+    xShapeProperties->setPropertyValue("AllowOverlap", uno::makeAny(true));
+    CPPUNIT_ASSERT(getProperty<bool>(xShapeProperties, "AllowOverlap"));
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/attr/fmtwrapinfluenceonobjpos.cxx b/sw/source/core/attr/fmtwrapinfluenceonobjpos.cxx
index 0a1ef3221e94..a593416407c3 100644
--- a/sw/source/core/attr/fmtwrapinfluenceonobjpos.cxx
+++ b/sw/source/core/attr/fmtwrapinfluenceonobjpos.cxx
@@ -21,6 +21,7 @@
 #include <unomid.h>
 #include <osl/diagnose.h>
 #include <libxml/xmlwriter.h>
+#include <sal/log.hxx>
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -39,9 +40,10 @@ SwFormatWrapInfluenceOnObjPos::~SwFormatWrapInfluenceOnObjPos()
 bool SwFormatWrapInfluenceOnObjPos::operator==( const SfxPoolItem& rAttr ) const
 {
     assert(SfxPoolItem::operator==(rAttr));
-    return ( mnWrapInfluenceOnPosition ==
-                    static_cast<const SwFormatWrapInfluenceOnObjPos&>(rAttr).
-                                                GetWrapInfluenceOnObjPos() );
+    const SwFormatWrapInfluenceOnObjPos& rAttribute
+        = static_cast<const SwFormatWrapInfluenceOnObjPos&>(rAttr);
+    return (mnWrapInfluenceOnPosition == rAttribute.GetWrapInfluenceOnObjPos()
+            && mbAllowOverlap == rAttribute.mbAllowOverlap);
 }
 
 SfxPoolItem* SwFormatWrapInfluenceOnObjPos::Clone( SfxItemPool * ) const
@@ -57,6 +59,10 @@ bool SwFormatWrapInfluenceOnObjPos::QueryValue( Any& rVal, sal_uInt8 nMemberId )
     {
         rVal <<= GetWrapInfluenceOnObjPos();
     }
+    else if( nMemberId == MID_ALLOW_OVERLAP )
+    {
+        rVal <<= GetAllowOverlap();
+    }
     else
     {
         OSL_FAIL( "<SwFormatWrapInfluenceOnObjPos::QueryValue()> - unknown MemberId" );
@@ -87,6 +93,19 @@ bool SwFormatWrapInfluenceOnObjPos::PutValue( const Any& rVal, sal_uInt8 nMember
             OSL_FAIL( "<SwFormatWrapInfluenceOnObjPos::PutValue(..)> - invalid attribute value" );
         }
     }
+    else if( nMemberId == MID_ALLOW_OVERLAP )
+    {
+        bool bAllowOverlap = true;
+        if (rVal >>= bAllowOverlap)
+        {
+            SetAllowOverlap(bAllowOverlap);
+            bRet = true;
+        }
+        else
+        {
+            SAL_WARN("sw.core", "SwFormatWrapInfluenceOnObjPos::PutValue: invalid AllowOverlap type");
+        }
+    }
     else
     {
         OSL_FAIL( "<SwFormatWrapInfluenceOnObjPos::PutValue(..)> - unknown MemberId" );
diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx
index aa978f2962ea..b9fe6fb8deba 100644
--- a/sw/source/core/unocore/unoframe.cxx
+++ b/sw/source/core/unocore/unoframe.cxx
@@ -942,10 +942,15 @@ bool BaseFrameProperties_Impl::FillBaseProperties(SfxItemSet& rToSet, const SfxI
     // #i28701# - RES_WRAP_INFLUENCE_ON_OBJPOS
     const ::uno::Any* pWrapInfluenceOnObjPos = nullptr;
     GetProperty(RES_WRAP_INFLUENCE_ON_OBJPOS, MID_WRAP_INFLUENCE, pWrapInfluenceOnObjPos);
-    if ( pWrapInfluenceOnObjPos )
+    const ::uno::Any* pAllowOverlap = nullptr;
+    GetProperty(RES_WRAP_INFLUENCE_ON_OBJPOS, MID_ALLOW_OVERLAP, pAllowOverlap);
+    if ( pWrapInfluenceOnObjPos || pAllowOverlap )
     {
         SwFormatWrapInfluenceOnObjPos aFormatWrapInfluenceOnObjPos;
-        aFormatWrapInfluenceOnObjPos.PutValue( *pWrapInfluenceOnObjPos, MID_WRAP_INFLUENCE );
+        if (pWrapInfluenceOnObjPos)
+            aFormatWrapInfluenceOnObjPos.PutValue( *pWrapInfluenceOnObjPos, MID_WRAP_INFLUENCE );
+        if (pAllowOverlap)
+            aFormatWrapInfluenceOnObjPos.PutValue( *pAllowOverlap, MID_ALLOW_OVERLAP );
         rToSet.Put(aFormatWrapInfluenceOnObjPos);
     }
 
diff --git a/sw/source/core/unocore/unomap.cxx b/sw/source/core/unocore/unomap.cxx
index 5bc4c3f5871a..bce1731dc993 100644
--- a/sw/source/core/unocore/unomap.cxx
+++ b/sw/source/core/unocore/unomap.cxx
@@ -311,6 +311,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s
                     { OUString(UNO_NAME_IS_LAYOUT_IN_CELL), RES_FOLLOW_TEXT_FLOW,     cppu::UnoType<bool>::get(), PROPERTY_NONE, MID_FTF_LAYOUT_IN_CELL},
                     // #i28701#
                     { OUString(UNO_NAME_WRAP_INFLUENCE_ON_POSITION), RES_WRAP_INFLUENCE_ON_OBJPOS, cppu::UnoType<sal_Int8>::get(), PROPERTY_NONE, MID_WRAP_INFLUENCE},
+                    { OUString(UNO_NAME_ALLOW_OVERLAP), RES_WRAP_INFLUENCE_ON_OBJPOS, cppu::UnoType<bool>::get(), PROPERTY_NONE, MID_ALLOW_OVERLAP},
                     // #i28749#
                     { OUString(UNO_NAME_TRANSFORMATION_IN_HORI_L2R),
                                     FN_SHAPE_TRANSFORMATION_IN_HORI_L2R,
diff --git a/sw/source/core/unocore/unomap1.cxx b/sw/source/core/unocore/unomap1.cxx
index 1cc12a5cb170..13fb8f6df1dd 100644
--- a/sw/source/core/unocore/unomap1.cxx
+++ b/sw/source/core/unocore/unomap1.cxx
@@ -459,6 +459,7 @@ const SfxItemPropertyMapEntry*  SwUnoPropertyMapProvider::GetFrameStylePropertyM
         { OUString(UNO_NAME_IS_LAYOUT_IN_CELL), RES_FOLLOW_TEXT_FLOW,     cppu::UnoType<bool>::get(), PROPERTY_NONE, MID_FTF_LAYOUT_IN_CELL},
         // #i28701#
         { OUString(UNO_NAME_WRAP_INFLUENCE_ON_POSITION), RES_WRAP_INFLUENCE_ON_OBJPOS, cppu::UnoType<sal_Int8>::get(), PROPERTY_NONE, MID_WRAP_INFLUENCE},
+        { OUString(UNO_NAME_ALLOW_OVERLAP), RES_WRAP_INFLUENCE_ON_OBJPOS, cppu::UnoType<bool>::get(), PROPERTY_NONE, MID_ALLOW_OVERLAP},
         { OUString(UNO_NAME_WRITING_MODE), RES_FRAMEDIR, cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, 0 },
         { OUString(UNO_NAME_HIDDEN), FN_UNO_HIDDEN,     cppu::UnoType<bool>::get(), PROPERTY_NONE, 0},
         { OUString(UNO_NAME_TEXT_VERT_ADJUST), RES_TEXT_VERT_ADJUST, cppu::UnoType<css::drawing::TextVerticalAdjust>::get(), PROPERTY_NONE ,0},
diff --git a/sw/source/core/unocore/unomapproperties.hxx b/sw/source/core/unocore/unomapproperties.hxx
index c3a7c0c22fb0..6f772eed1acd 100644
--- a/sw/source/core/unocore/unomapproperties.hxx
+++ b/sw/source/core/unocore/unomapproperties.hxx
@@ -325,6 +325,7 @@
     { OUString(UNO_NAME_IS_LAYOUT_IN_CELL), RES_FOLLOW_TEXT_FLOW,     cppu::UnoType<bool>::get(), PROPERTY_NONE, MID_FTF_LAYOUT_IN_CELL}, \
     { OUString(UNO_NAME_PARENT_TEXT), FN_UNO_PARENT_TEXT, cppu::UnoType<text::XText>::get(), PropertyAttribute::MAYBEVOID | PropertyAttribute::READONLY, 0 }, \
     { OUString(UNO_NAME_WRAP_INFLUENCE_ON_POSITION), RES_WRAP_INFLUENCE_ON_OBJPOS, cppu::UnoType<sal_Int8>::get(), PROPERTY_NONE, MID_WRAP_INFLUENCE}, \
+    { OUString(UNO_NAME_ALLOW_OVERLAP), RES_WRAP_INFLUENCE_ON_OBJPOS, cppu::UnoType<bool>::get(), PROPERTY_NONE, MID_ALLOW_OVERLAP}, \
     { OUString(UNO_NAME_TITLE), FN_UNO_TITLE, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0}, \
     { OUString(UNO_NAME_DESCRIPTION), FN_UNO_DESCRIPTION, cppu::UnoType<OUString>::get(), PROPERTY_NONE, 0}, \
     { OUString(UNO_NAME_LAYOUT_SIZE), WID_LAYOUT_SIZE, cppu::UnoType<css::awt::Size>::get(), PropertyAttribute::MAYBEVOID | PropertyAttribute::READONLY, 0 }, \


More information about the Libreoffice-commits mailing list