diff options
author | Armin Le Grand <alg@apache.org> | 2012-01-17 16:54:04 +0000 |
---|---|---|
committer | Armin Le Grand <alg@apache.org> | 2012-01-17 16:54:04 +0000 |
commit | 2a0cd925bebb0c7d3513db311b185a04f259b68d (patch) | |
tree | 8d1ed154b241a9823c54b76ed091ecb6b6935a9d /svx/source/xoutdev | |
parent | 63480c993d8e2fb0929d3c39f621aae9443faa04 (diff) |
linecap: Reintegrating finished LineCap feature, kudos to Regina Henschel for doing the basic implementation and offering it under apache license
Notes
Notes:
merged as: 44cfc7cb6533d827fd2d6e586d92c61d7d7f7a70
Diffstat (limited to 'svx/source/xoutdev')
-rw-r--r-- | svx/source/xoutdev/xattr2.cxx | 145 | ||||
-rw-r--r-- | svx/source/xoutdev/xpool.cxx | 1 |
2 files changed, 146 insertions, 0 deletions
diff --git a/svx/source/xoutdev/xattr2.cxx b/svx/source/xoutdev/xattr2.cxx index 28b22f08e6e0..33ac5abb2835 100644 --- a/svx/source/xoutdev/xattr2.cxx +++ b/svx/source/xoutdev/xattr2.cxx @@ -28,6 +28,7 @@ #include <com/sun/star/drawing/LineJoint.hpp> +#include <com/sun/star/drawing/LineCap.hpp> #include <com/sun/star/uno/Any.hxx> #include <svx/dialogs.hrc> @@ -309,6 +310,150 @@ sal_uInt16 XLineJointItem::GetValueCount() const return 5; } +//----------------------- +// class XLineCapItem - +//----------------------- + +TYPEINIT1_AUTOFACTORY(XLineCapItem, SfxEnumItem); + +// ----------------------------------------------------------------------------- + +XLineCapItem::XLineCapItem(com::sun::star::drawing::LineCap eLineCap) +: SfxEnumItem(XATTR_LINECAP, sal::static_int_cast< sal_uInt16 >(eLineCap)) +{ +} + +// ----------------------------------------------------------------------------- + +XLineCapItem::XLineCapItem( SvStream& rIn ) +: SfxEnumItem(XATTR_LINECAP, rIn) +{ +} + +// ----------------------------------------------------------------------------- + +sal_uInt16 XLineCapItem::GetVersion( sal_uInt16 /*nFileFormatVersion*/) const +{ + return 1; +} + +// ----------------------------------------------------------------------------- + +SfxPoolItem* XLineCapItem::Create( SvStream& rIn, sal_uInt16 nVer ) const +{ + XLineCapItem* pRet = new XLineCapItem( rIn ); + + if(nVer < 1) + pRet->SetValue(com::sun::star::drawing::LineCap_BUTT); + + return pRet; +} + +// ----------------------------------------------------------------------------- + +SfxPoolItem* XLineCapItem::Clone(SfxItemPool* /*pPool*/) const +{ + return new XLineCapItem( *this ); +} + +// ----------------------------------------------------------------------------- + +SfxItemPresentation XLineCapItem::GetPresentation( SfxItemPresentation ePres, SfxMapUnit /*eCoreUnit*/, + SfxMapUnit /*ePresUnit*/, XubString& rText, const IntlWrapper*) const +{ + rText.Erase(); + + switch( ePres ) + { + case SFX_ITEM_PRESENTATION_NONE: return ePres; + + case SFX_ITEM_PRESENTATION_COMPLETE: + case SFX_ITEM_PRESENTATION_NAMELESS: + { + sal_uInt16 nId = 0; + + switch( GetValue() ) + { + default: /*com::sun::star::drawing::LineCap_BUTT*/ + nId = RID_SVXSTR_LINECAP_BUTT; + break; + + case(com::sun::star::drawing::LineCap_ROUND): + nId = RID_SVXSTR_LINECAP_ROUND; + break; + + case(com::sun::star::drawing::LineCap_SQUARE): + nId = RID_SVXSTR_LINECAP_SQUARE; + break; + } + + if( nId ) + rText = SVX_RESSTR( nId ); + + return ePres; + } + default: + return SFX_ITEM_PRESENTATION_NONE; + } +} + +// ----------------------------------------------------------------------------- + +sal_Bool XLineCapItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) const +{ + const com::sun::star::drawing::LineCap eCap(GetValue()); + rVal <<= eCap; + return true; +} + +// ----------------------------------------------------------------------------- + +sal_Bool XLineCapItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/) +{ + com::sun::star::drawing::LineCap eUnoCap; + + if(!(rVal >>= eUnoCap)) + { + // also try an int (for Basic) + sal_Int32 nLJ(0); + + if(!(rVal >>= nLJ)) + { + return false; + } + + eUnoCap = (com::sun::star::drawing::LineCap)nLJ; + } + + OSL_ENSURE(com::sun::star::drawing::LineCap_BUTT == eUnoCap + || com::sun::star::drawing::LineCap_ROUND == eUnoCap + || com::sun::star::drawing::LineCap_SQUARE == eUnoCap, "Unknown enum value in XATTR_LINECAP (!)"); + + SetValue(sal::static_int_cast< sal_uInt16 >(eUnoCap)); + + return true; +} + +// ----------------------------------------------------------------------------- + +sal_uInt16 XLineCapItem::GetValueCount() const +{ + // don't forget to update the api interface also + return 3; +} + +// ----------------------------------------------------------------------------- + +com::sun::star::drawing::LineCap XLineCapItem::GetValue() const +{ + const com::sun::star::drawing::LineCap eRetval((com::sun::star::drawing::LineCap)SfxEnumItem::GetValue()); + OSL_ENSURE(com::sun::star::drawing::LineCap_BUTT == eRetval + || com::sun::star::drawing::LineCap_ROUND == eRetval + || com::sun::star::drawing::LineCap_SQUARE == eRetval, "Unknown enum value in XATTR_LINECAP (!)"); + + return (com::sun::star::drawing::LineCap)SfxEnumItem::GetValue(); +} + //------------------------------ // class XFillTransparenceItem //------------------------------ diff --git a/svx/source/xoutdev/xpool.cxx b/svx/source/xoutdev/xpool.cxx index ab3de0a3659e..f1c8ac9f1ed5 100644 --- a/svx/source/xoutdev/xpool.cxx +++ b/svx/source/xoutdev/xpool.cxx @@ -87,6 +87,7 @@ XOutdevItemPool::XOutdevItemPool( mppLocalPoolDefaults[XATTR_LINEENDCENTER -XATTR_START] = new XLineEndCenterItem; mppLocalPoolDefaults[XATTR_LINETRANSPARENCE -XATTR_START] = new XLineTransparenceItem; mppLocalPoolDefaults[XATTR_LINEJOINT -XATTR_START] = new XLineJointItem; + mppLocalPoolDefaults[XATTR_LINECAP -XATTR_START] = new XLineCapItem; mppLocalPoolDefaults[XATTR_FILLSTYLE -XATTR_START] = new XFillStyleItem; mppLocalPoolDefaults[XATTR_FILLCOLOR -XATTR_START] = new XFillColorItem (aNullStr,aNullFillCol); mppLocalPoolDefaults[XATTR_FILLGRADIENT -XATTR_START] = new XFillGradientItem(this,aNullGrad); |