sw/inc/textboxhelper.hxx | 2 ++ sw/inc/unomid.h | 1 + sw/inc/unoprnms.hxx | 1 + sw/source/core/doc/textboxhelper.cxx | 30 ++++++++++++++++++++++++++++++ sw/source/core/unocore/unodraw.cxx | 10 ++++++++++ sw/source/core/unocore/unomap.cxx | 3 +++ 6 files changed, 47 insertions(+)
New commits: commit db6f15ab21c7292c895a0042dc13072649dbfc9c Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Fri Jun 13 19:37:37 2014 +0200 SwXShape: add ChainName UNO property Shapes may not have a unique name, but TextFrames always have. So in order to be able to link shapes with textboxes, provide a ChainName property that's the name of the underlying TextFrame. This kills two birds with one stone: - we can have a unique name for each shape - the names can be used for TextFrame linking, as they are valid TextFrame names Change-Id: Ie96f267d392d9fe5388c5eacff9b873f1639054c diff --git a/sw/inc/textboxhelper.hxx b/sw/inc/textboxhelper.hxx index 50024e1..665f82a 100644 --- a/sw/inc/textboxhelper.hxx +++ b/sw/inc/textboxhelper.hxx @@ -54,6 +54,8 @@ public: static void syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 nMemberID, const css::uno::Any& rValue); /// Does the same, but works on properties which lack an sw-specific WID / MemberID. static void syncProperty(SwFrmFmt* pShape, const OUString& rPropertyName, const css::uno::Any& rValue); + /// Get a property of the underlying TextFrame. + static void getProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 nMemberID, css::uno::Any& rValue); /// If we have an associated TextFrame, then return that. static SwFrmFmt* findTextBox(SwFrmFmt* pShape); diff --git a/sw/inc/unomid.h b/sw/inc/unomid.h index 11d14c9..9d514a2 100644 --- a/sw/inc/unomid.h +++ b/sw/inc/unomid.h @@ -56,6 +56,7 @@ #define MID_CHAIN_PREVNAME 0 #define MID_CHAIN_NEXTNAME 1 +#define MID_CHAIN_NAME 2 #define MID_LINENUMBER_COUNT 0 #define MID_LINENUMBER_STARTVALUE 1 diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx index bed1254..9f0267e 100644 --- a/sw/inc/unoprnms.hxx +++ b/sw/inc/unoprnms.hxx @@ -266,6 +266,7 @@ #define UNO_NAME_BREAK_TYPE "BreakType" #define UNO_NAME_CHAIN_NEXT_NAME "ChainNextName" #define UNO_NAME_CHAIN_PREV_NAME "ChainPrevName" +#define UNO_NAME_CHAIN_NAME "ChainName" #define UNO_NAME_CHAPTER_FORMAT "ChapterFormat" #define UNO_NAME_CLIENT_MAP "ClientMap" #define UNO_NAME_CONDITION "Condition" diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index accd912..5ddfbe0 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -63,6 +63,9 @@ void SwTextBoxHelper::create(SwFrmFmt* pShape) xPropertySet->setPropertyValue(UNO_NAME_SIZE_TYPE, uno::makeAny(text::SizeType::FIX)); + uno::Reference<container::XNamed> xNamed(xTextFrame, uno::UNO_QUERY); + xNamed->setName(pShape->GetDoc()->GetUniqueFrameName()); + // Link its text range to the original shape. uno::Reference<text::XTextRange> xTextBox(xTextFrame, uno::UNO_QUERY_THROW); SwUnoInternalPaM aInternalPaM(*pShape->GetDoc()); @@ -274,6 +277,22 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, const OUString& rPropertyNa } } +void SwTextBoxHelper::getProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 nMemberId, css::uno::Any& rValue) +{ + if (!pShape) + return; + + nMemberId &= ~CONVERT_TWIPS; + + if (SwFrmFmt* pFmt = findTextBox(pShape)) + { + if (nWID == RES_CHAIN && nMemberId == MID_CHAIN_NAME) + { + rValue = uno::makeAny(pFmt->GetName()); + } + } +} + void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 nMemberId, const css::uno::Any& rValue) { // No shape yet? Then nothing to do, initial properties are set by create(). diff --git a/sw/source/core/unocore/unodraw.cxx b/sw/source/core/unocore/unodraw.cxx index ed62fd7..afbf447 100644 --- a/sw/source/core/unocore/unodraw.cxx +++ b/sw/source/core/unocore/unodraw.cxx @@ -1540,6 +1540,11 @@ uno::Any SwXShape::getPropertyValue(const OUString& rPropertyName) bool bValue = SwTextBoxHelper::findTextBox(pFmt); aRet <<= bValue; } + else if (pEntry->nWID == RES_CHAIN) + { + if (pEntry->nMemberId == MID_CHAIN_NAME) + SwTextBoxHelper::getProperty(pFmt, pEntry->nWID, pEntry->nMemberId, aRet); + } // #i28749# else if ( FN_SHAPE_TRANSFORMATION_IN_HORI_L2R == pEntry->nWID ) { diff --git a/sw/source/core/unocore/unomap.cxx b/sw/source/core/unocore/unomap.cxx index d213286..9464e49 100644 --- a/sw/source/core/unocore/unomap.cxx +++ b/sw/source/core/unocore/unomap.cxx @@ -1398,6 +1398,7 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s { OUString(UNO_NAME_TEXT_BOX), FN_TEXT_BOX, cppu::UnoType<bool>::get(), PROPERTY_NONE, 0}, { OUString(UNO_NAME_CHAIN_NEXT_NAME), RES_CHAIN, cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID ,MID_CHAIN_NEXTNAME}, { OUString(UNO_NAME_CHAIN_PREV_NAME), RES_CHAIN, cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID ,MID_CHAIN_PREVNAME}, + { OUString(UNO_NAME_CHAIN_NAME), RES_CHAIN, cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID ,MID_CHAIN_NAME }, { OUString(), 0, css::uno::Type(), 0, 0 } }; aMapEntriesArr[nPropertyId] = aShapeMap_Impl; commit 599643ec944dd3cad37a65e99d443e2010c8a36f Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Fri Jun 13 18:52:38 2014 +0200 SwXShape: add ChainNext/PrevName UNO property At the moment it's only possible to set this property, and it only sets the same property of the underlying textbox, if there is any. Change-Id: I9f168f69a8e92a1b26f21e653a05c97e2e32297c diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx index 06bc0e0..accd912 100644 --- a/sw/source/core/doc/textboxhelper.cxx +++ b/sw/source/core/doc/textboxhelper.cxx @@ -351,6 +351,17 @@ void SwTextBoxHelper::syncProperty(SwFrmFmt* pShape, sal_uInt16 nWID, sal_uInt8 } } break; + case RES_CHAIN: + switch (nMemberId) + { + case MID_CHAIN_PREVNAME: + aPropertyName = UNO_NAME_CHAIN_PREV_NAME; + break; + case MID_CHAIN_NEXTNAME: + aPropertyName = UNO_NAME_CHAIN_NEXT_NAME; + break; + } + break; } if (!aPropertyName.isEmpty()) diff --git a/sw/source/core/unocore/unodraw.cxx b/sw/source/core/unocore/unodraw.cxx index 19d24f5..ed62fd7 100644 --- a/sw/source/core/unocore/unodraw.cxx +++ b/sw/source/core/unocore/unodraw.cxx @@ -1201,6 +1201,11 @@ void SwXShape::setPropertyValue(const OUString& rPropertyName, const uno::Any& a SwTextBoxHelper::destroy(pFmt); } + else if (pEntry->nWID == RES_CHAIN) + { + if (pEntry->nMemberId == MID_CHAIN_NEXTNAME || pEntry->nMemberId == MID_CHAIN_PREVNAME) + SwTextBoxHelper::syncProperty(pFmt, pEntry->nWID, pEntry->nMemberId, aValue); + } // #i28749# else if ( FN_SHAPE_POSITION_LAYOUT_DIR == pEntry->nWID ) { diff --git a/sw/source/core/unocore/unomap.cxx b/sw/source/core/unocore/unomap.cxx index 6a26b9d..d213286 100644 --- a/sw/source/core/unocore/unomap.cxx +++ b/sw/source/core/unocore/unomap.cxx @@ -1396,6 +1396,8 @@ const SfxItemPropertyMapEntry* SwUnoPropertyMapProvider::GetPropertyMapEntries(s { OUString(UNO_NAME_RELATIVE_WIDTH), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get() , PROPERTY_NONE, MID_FRMSIZE_REL_WIDTH }, { OUString(UNO_NAME_RELATIVE_WIDTH_RELATION), RES_FRM_SIZE, cppu::UnoType<sal_Int16>::get(), PROPERTY_NONE, MID_FRMSIZE_REL_WIDTH_RELATION }, { OUString(UNO_NAME_TEXT_BOX), FN_TEXT_BOX, cppu::UnoType<bool>::get(), PROPERTY_NONE, 0}, + { OUString(UNO_NAME_CHAIN_NEXT_NAME), RES_CHAIN, cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID ,MID_CHAIN_NEXTNAME}, + { OUString(UNO_NAME_CHAIN_PREV_NAME), RES_CHAIN, cppu::UnoType<OUString>::get(), PropertyAttribute::MAYBEVOID ,MID_CHAIN_PREVNAME}, { OUString(), 0, css::uno::Type(), 0, 0 } }; aMapEntriesArr[nPropertyId] = aShapeMap_Impl; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits