summaryrefslogtreecommitdiff
path: root/svx/source/items/algitem.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/items/algitem.cxx')
-rw-r--r--svx/source/items/algitem.cxx765
1 files changed, 765 insertions, 0 deletions
diff --git a/svx/source/items/algitem.cxx b/svx/source/items/algitem.cxx
new file mode 100644
index 000000000000..183db0e3a722
--- /dev/null
+++ b/svx/source/items/algitem.cxx
@@ -0,0 +1,765 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svx.hxx"
+
+#include <svx/svxitems.hrc>
+
+
+#include <tools/stream.hxx>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/table/CellVertJustify.hpp>
+#include <com/sun/star/table/ShadowLocation.hpp>
+#include <com/sun/star/table/TableBorder.hpp>
+#include <com/sun/star/table/ShadowFormat.hpp>
+#include <com/sun/star/table/CellRangeAddress.hpp>
+#include <com/sun/star/table/CellContentType.hpp>
+#include <com/sun/star/table/TableOrientation.hpp>
+#include <com/sun/star/table/CellHoriJustify.hpp>
+#include <com/sun/star/style/ParagraphAdjust.hpp>
+#include "com/sun/star/style/VerticalAlignment.hpp"
+#include <com/sun/star/util/SortField.hpp>
+#include <com/sun/star/util/SortFieldType.hpp>
+#include <com/sun/star/table/CellOrientation.hpp>
+#include <com/sun/star/table/CellAddress.hpp>
+
+#include <svx/algitem.hxx>
+#include <svx/dialmgr.hxx>
+#include <editeng/itemtype.hxx>
+#include <svx/unomid.hxx>
+
+using namespace ::rtl;
+using namespace ::com::sun::star;
+
+// Konvertierung fuer UNO
+#define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
+#define MM100_TO_TWIP(MM100) ((MM100) >= 0 ? (((MM100)*72L+63L)/127L) : (((MM100)*72L-63L)/127L))
+
+// STATIC DATA -----------------------------------------------------------
+
+//TYPEINIT1_AUTOFACTORY( SvxHorJustifyItem, SfxEnumItem );
+TYPEINIT1_FACTORY( SvxHorJustifyItem, SfxEnumItem, new SvxHorJustifyItem(SVX_HOR_JUSTIFY_STANDARD, 0))
+TYPEINIT1_FACTORY( SvxVerJustifyItem, SfxEnumItem, new SvxVerJustifyItem(SVX_VER_JUSTIFY_STANDARD, 0) );
+TYPEINIT1_FACTORY( SvxOrientationItem, SfxEnumItem, new SvxOrientationItem(SVX_ORIENTATION_STANDARD, 0) );
+TYPEINIT1_FACTORY( SvxMarginItem, SfxPoolItem, new SvxMarginItem(0) );
+
+// class SvxHorJustifyItem -----------------------------------------------
+
+
+SvxHorJustifyItem::SvxHorJustifyItem( const USHORT nId ) :
+ SfxEnumItem( nId, (USHORT)SVX_HOR_JUSTIFY_STANDARD )
+{
+}
+
+SvxHorJustifyItem::SvxHorJustifyItem( const SvxCellHorJustify eJustify,
+ const USHORT nId ) :
+ SfxEnumItem( nId, (USHORT)eJustify )
+{
+}
+
+//------------------------------------------------------------------------
+
+SfxItemPresentation SvxHorJustifyItem::GetPresentation
+(
+ SfxItemPresentation ePres,
+ SfxMapUnit /*eCoreUnit*/,
+ SfxMapUnit /*ePresUnit*/,
+ XubString& rText, const IntlWrapper *) const
+{
+ switch ( ePres )
+ {
+ case SFX_ITEM_PRESENTATION_NONE:
+ rText.Erase();
+ return SFX_ITEM_PRESENTATION_NONE;
+ case SFX_ITEM_PRESENTATION_NAMELESS:
+ case SFX_ITEM_PRESENTATION_COMPLETE:
+ rText = GetValueText( GetValue() );
+ return SFX_ITEM_PRESENTATION_COMPLETE;
+ default: ; //prevent warning
+ }
+ return SFX_ITEM_PRESENTATION_NONE;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool SvxHorJustifyItem::QueryValue( uno::Any& rVal, BYTE nMemberId ) const
+{
+// sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
+ nMemberId &= ~CONVERT_TWIPS;
+ switch ( nMemberId )
+ {
+ case MID_HORJUST_HORJUST:
+ {
+ table::CellHoriJustify eUno = table::CellHoriJustify_STANDARD;
+ switch ( (SvxCellHorJustify)GetValue() )
+ {
+ case SVX_HOR_JUSTIFY_STANDARD: eUno = table::CellHoriJustify_STANDARD; break;
+ case SVX_HOR_JUSTIFY_LEFT: eUno = table::CellHoriJustify_LEFT; break;
+ case SVX_HOR_JUSTIFY_CENTER: eUno = table::CellHoriJustify_CENTER; break;
+ case SVX_HOR_JUSTIFY_RIGHT: eUno = table::CellHoriJustify_RIGHT; break;
+ case SVX_HOR_JUSTIFY_BLOCK: eUno = table::CellHoriJustify_BLOCK; break;
+ case SVX_HOR_JUSTIFY_REPEAT: eUno = table::CellHoriJustify_REPEAT; break;
+ }
+ rVal <<= eUno;
+ }
+ break;
+ case MID_HORJUST_ADJUST:
+ {
+ // ParagraphAdjust values, as in SvxAdjustItem
+ // (same value for ParaAdjust and ParaLastLineAdjust)
+
+ sal_Int16 nAdjust = style::ParagraphAdjust_LEFT;
+ switch ( (SvxCellHorJustify)GetValue() )
+ {
+ // ParagraphAdjust_LEFT is used for STANDARD and REPEAT
+ case SVX_HOR_JUSTIFY_STANDARD:
+ case SVX_HOR_JUSTIFY_REPEAT:
+ case SVX_HOR_JUSTIFY_LEFT: nAdjust = style::ParagraphAdjust_LEFT; break;
+ case SVX_HOR_JUSTIFY_CENTER: nAdjust = style::ParagraphAdjust_CENTER; break;
+ case SVX_HOR_JUSTIFY_RIGHT: nAdjust = style::ParagraphAdjust_RIGHT; break;
+ case SVX_HOR_JUSTIFY_BLOCK: nAdjust = style::ParagraphAdjust_BLOCK; break;
+ }
+ rVal <<= nAdjust; // as sal_Int16
+ }
+ break;
+ }
+ return sal_True;
+}
+
+sal_Bool SvxHorJustifyItem::PutValue( const uno::Any& rVal, BYTE nMemberId )
+{
+// sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
+ nMemberId &= ~CONVERT_TWIPS;
+ switch ( nMemberId )
+ {
+ case MID_HORJUST_HORJUST:
+ {
+ table::CellHoriJustify eUno;
+ if(!(rVal >>= eUno))
+ {
+ sal_Int32 nValue = 0;
+ if(!(rVal >>= nValue))
+ return sal_False;
+ eUno = (table::CellHoriJustify)nValue;
+ }
+ SvxCellHorJustify eSvx = SVX_HOR_JUSTIFY_STANDARD;
+ switch (eUno)
+ {
+ case table::CellHoriJustify_STANDARD: eSvx = SVX_HOR_JUSTIFY_STANDARD; break;
+ case table::CellHoriJustify_LEFT: eSvx = SVX_HOR_JUSTIFY_LEFT; break;
+ case table::CellHoriJustify_CENTER: eSvx = SVX_HOR_JUSTIFY_CENTER; break;
+ case table::CellHoriJustify_RIGHT: eSvx = SVX_HOR_JUSTIFY_RIGHT; break;
+ case table::CellHoriJustify_BLOCK: eSvx = SVX_HOR_JUSTIFY_BLOCK; break;
+ case table::CellHoriJustify_REPEAT: eSvx = SVX_HOR_JUSTIFY_REPEAT; break;
+ default: ; //prevent warning
+ }
+ SetValue( (USHORT)eSvx );
+ }
+ break;
+ case MID_HORJUST_ADJUST:
+ {
+ // property contains ParagraphAdjust values as sal_Int16
+ sal_Int16 nVal = sal_Int16();
+ if(!(rVal >>= nVal))
+ return sal_False;
+
+ SvxCellHorJustify eSvx = SVX_HOR_JUSTIFY_STANDARD;
+ switch (nVal)
+ {
+ // STRETCH is treated as BLOCK
+ case style::ParagraphAdjust_LEFT: eSvx = SVX_HOR_JUSTIFY_LEFT; break;
+ case style::ParagraphAdjust_RIGHT: eSvx = SVX_HOR_JUSTIFY_RIGHT; break;
+ case style::ParagraphAdjust_STRETCH:
+ case style::ParagraphAdjust_BLOCK: eSvx = SVX_HOR_JUSTIFY_BLOCK; break;
+ case style::ParagraphAdjust_CENTER: eSvx = SVX_HOR_JUSTIFY_CENTER; break;
+ }
+ SetValue( (USHORT)eSvx );
+ }
+ }
+ return sal_True;
+}
+
+//------------------------------------------------------------------------
+
+XubString SvxHorJustifyItem::GetValueText( USHORT nVal ) const
+{
+ DBG_ASSERT( nVal <= SVX_HOR_JUSTIFY_REPEAT, "enum overflow!" );
+ return SVX_RESSTR(RID_SVXITEMS_HORJUST_STANDARD + nVal);
+}
+
+//------------------------------------------------------------------------
+
+SfxPoolItem* SvxHorJustifyItem::Clone( SfxItemPool* ) const
+{
+ return new SvxHorJustifyItem( *this );
+}
+
+//------------------------------------------------------------------------
+
+SfxPoolItem* SvxHorJustifyItem::Create( SvStream& rStream, USHORT ) const
+{
+ USHORT nVal;
+ rStream >> nVal;
+ return new SvxHorJustifyItem( (SvxCellHorJustify)nVal, Which() );
+}
+//------------------------------------------------------------------------
+
+USHORT SvxHorJustifyItem::GetValueCount() const
+{
+ return SVX_HOR_JUSTIFY_REPEAT + 1; // letzter Enum-Wert + 1
+}
+
+// class SvxVerJustifyItem -----------------------------------------------
+
+SvxVerJustifyItem::SvxVerJustifyItem( const USHORT nId ) :
+ SfxEnumItem( nId, (USHORT)SVX_VER_JUSTIFY_STANDARD )
+{
+}
+
+SvxVerJustifyItem::SvxVerJustifyItem( const SvxCellVerJustify eJustify,
+ const USHORT nId ) :
+ SfxEnumItem( nId, (USHORT)eJustify )
+{
+}
+
+//------------------------------------------------------------------------
+
+SfxItemPresentation SvxVerJustifyItem::GetPresentation
+(
+ SfxItemPresentation ePres,
+ SfxMapUnit /*eCoreUnit*/,
+ SfxMapUnit /*ePresUnit*/,
+ XubString& rText,
+ const IntlWrapper * ) const
+{
+ switch ( ePres )
+ {
+ case SFX_ITEM_PRESENTATION_NONE:
+ rText.Erase();
+ return SFX_ITEM_PRESENTATION_NONE;
+ case SFX_ITEM_PRESENTATION_NAMELESS:
+ case SFX_ITEM_PRESENTATION_COMPLETE:
+ rText = GetValueText( GetValue() );
+ return SFX_ITEM_PRESENTATION_COMPLETE;
+ default: ; //prevent warning
+ }
+ return SFX_ITEM_PRESENTATION_NONE;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool SvxVerJustifyItem::QueryValue( uno::Any& rVal, BYTE nMemberId ) const
+{
+ nMemberId &= ~CONVERT_TWIPS;
+ switch ( nMemberId )
+ {
+ case MID_HORJUST_ADJUST:
+ {
+ style::VerticalAlignment eUno = style::VerticalAlignment_TOP;
+ switch ( (SvxCellVerJustify)GetValue() )
+ {
+ case SVX_VER_JUSTIFY_TOP: eUno = style::VerticalAlignment_TOP; break;
+ case SVX_VER_JUSTIFY_CENTER: eUno = style::VerticalAlignment_MIDDLE; break;
+ case SVX_VER_JUSTIFY_BOTTOM: eUno = style::VerticalAlignment_BOTTOM; break;
+ default: ; //prevent warning
+ }
+ rVal <<= eUno;
+ break;
+ }
+ default:
+ {
+ table::CellVertJustify eUno = table::CellVertJustify_STANDARD;
+ switch ( (SvxCellVerJustify)GetValue() )
+ {
+ case SVX_VER_JUSTIFY_STANDARD: eUno = table::CellVertJustify_STANDARD; break;
+ case SVX_VER_JUSTIFY_TOP: eUno = table::CellVertJustify_TOP; break;
+ case SVX_VER_JUSTIFY_CENTER: eUno = table::CellVertJustify_CENTER; break;
+ case SVX_VER_JUSTIFY_BOTTOM: eUno = table::CellVertJustify_BOTTOM; break;
+ default: ; //prevent warning
+ }
+ rVal <<= eUno;
+ break;
+ }
+ }
+ return sal_True;
+}
+
+sal_Bool SvxVerJustifyItem::PutValue( const uno::Any& rVal, BYTE nMemberId )
+{
+ nMemberId &= ~CONVERT_TWIPS;
+ switch ( nMemberId )
+ {
+ case MID_HORJUST_ADJUST:
+ {
+ // property contains ParagraphAdjust values as sal_Int16
+ style::VerticalAlignment nVal = style::VerticalAlignment_TOP;
+ if(!(rVal >>= nVal))
+ return sal_False;
+
+ SvxCellVerJustify eSvx = SVX_VER_JUSTIFY_STANDARD;
+ switch (nVal)
+ {
+ case style::VerticalAlignment_TOP: eSvx = SVX_VER_JUSTIFY_TOP; break;
+ case style::VerticalAlignment_MIDDLE: eSvx = SVX_VER_JUSTIFY_CENTER; break;
+ case style::VerticalAlignment_BOTTOM: eSvx = SVX_VER_JUSTIFY_BOTTOM; break;
+ default:;
+ }
+ SetValue( (USHORT)eSvx );
+ break;
+ }
+ default:
+ {
+ table::CellVertJustify eUno;
+ if(!(rVal >>= eUno))
+ {
+ sal_Int32 nValue = 0;
+ if(!(rVal >>= nValue))
+ return sal_False;
+ eUno = (table::CellVertJustify)nValue;
+ }
+
+ SvxCellVerJustify eSvx = SVX_VER_JUSTIFY_STANDARD;
+ switch (eUno)
+ {
+ case table::CellVertJustify_STANDARD: eSvx = SVX_VER_JUSTIFY_STANDARD; break;
+ case table::CellVertJustify_TOP: eSvx = SVX_VER_JUSTIFY_TOP; break;
+ case table::CellVertJustify_CENTER: eSvx = SVX_VER_JUSTIFY_CENTER; break;
+ case table::CellVertJustify_BOTTOM: eSvx = SVX_VER_JUSTIFY_BOTTOM; break;
+ default: ; //prevent warning
+ }
+ SetValue( (USHORT)eSvx );
+ break;
+ }
+ }
+
+ return sal_True;
+}
+
+//------------------------------------------------------------------------
+
+XubString SvxVerJustifyItem::GetValueText( USHORT nVal ) const
+{
+ DBG_ASSERT( nVal <= SVX_VER_JUSTIFY_BOTTOM, "enum overflow!" );
+ return SVX_RESSTR(RID_SVXITEMS_VERJUST_STANDARD + nVal);
+}
+
+//------------------------------------------------------------------------
+
+SfxPoolItem* SvxVerJustifyItem::Clone( SfxItemPool* ) const
+{
+ return new SvxVerJustifyItem( *this );
+}
+
+//------------------------------------------------------------------------
+
+SfxPoolItem* SvxVerJustifyItem::Create( SvStream& rStream, USHORT ) const
+{
+ USHORT nVal;
+ rStream >> nVal;
+ return new SvxVerJustifyItem( (SvxCellVerJustify)nVal, Which() );
+}
+
+//------------------------------------------------------------------------
+
+USHORT SvxVerJustifyItem::GetValueCount() const
+{
+ return SVX_VER_JUSTIFY_BOTTOM + 1; // letzter Enum-Wert + 1
+}
+
+// class SvxOrientationItem ----------------------------------------------
+
+SvxOrientationItem::SvxOrientationItem( const SvxCellOrientation eOrientation,
+ const USHORT nId):
+ SfxEnumItem( nId, (USHORT)eOrientation )
+{
+}
+
+SvxOrientationItem::SvxOrientationItem( INT32 nRotation, BOOL bStacked, const USHORT nId ) :
+ SfxEnumItem( nId )
+{
+ SetFromRotation( nRotation, bStacked );
+}
+
+//------------------------------------------------------------------------
+
+SfxItemPresentation SvxOrientationItem::GetPresentation
+(
+ SfxItemPresentation ePres,
+ SfxMapUnit /*eCoreUnit*/,
+ SfxMapUnit /*ePresUnit*/,
+ XubString& rText, const IntlWrapper * ) const
+{
+ switch ( ePres )
+ {
+ case SFX_ITEM_PRESENTATION_NONE:
+ rText.Erase();
+ return SFX_ITEM_PRESENTATION_NONE;
+ case SFX_ITEM_PRESENTATION_NAMELESS:
+ case SFX_ITEM_PRESENTATION_COMPLETE:
+ rText = GetValueText( GetValue() );
+ return SFX_ITEM_PRESENTATION_COMPLETE;
+ default: ; //prevent warning
+ }
+ return SFX_ITEM_PRESENTATION_NONE;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool SvxOrientationItem::QueryValue( uno::Any& rVal, BYTE /*nMemberId*/ ) const
+{
+ table::CellOrientation eUno = table::CellOrientation_STANDARD;
+ switch ( (SvxCellOrientation)GetValue() )
+ {
+ case SVX_ORIENTATION_STANDARD: eUno = table::CellOrientation_STANDARD; break;
+ case SVX_ORIENTATION_TOPBOTTOM: eUno = table::CellOrientation_TOPBOTTOM; break;
+ case SVX_ORIENTATION_BOTTOMTOP: eUno = table::CellOrientation_BOTTOMTOP; break;
+ case SVX_ORIENTATION_STACKED: eUno = table::CellOrientation_STACKED; break;
+ }
+ rVal <<= eUno;
+ return sal_True;
+}
+
+sal_Bool SvxOrientationItem::PutValue( const uno::Any& rVal, BYTE /*nMemberId*/ )
+{
+ table::CellOrientation eOrient;
+ if(!(rVal >>= eOrient))
+ {
+ sal_Int32 nValue = 0;
+ if(!(rVal >>= nValue))
+ return sal_False;
+ eOrient = (table::CellOrientation)nValue;
+ }
+ SvxCellOrientation eSvx = SVX_ORIENTATION_STANDARD;
+ switch (eOrient)
+ {
+ case table::CellOrientation_STANDARD: eSvx = SVX_ORIENTATION_STANDARD; break;
+ case table::CellOrientation_TOPBOTTOM: eSvx = SVX_ORIENTATION_TOPBOTTOM; break;
+ case table::CellOrientation_BOTTOMTOP: eSvx = SVX_ORIENTATION_BOTTOMTOP; break;
+ case table::CellOrientation_STACKED: eSvx = SVX_ORIENTATION_STACKED; break;
+ default: ; //prevent warning
+ }
+ SetValue( (USHORT)eSvx );
+ return sal_True;
+}
+
+//------------------------------------------------------------------------
+
+XubString SvxOrientationItem::GetValueText( USHORT nVal ) const
+{
+ DBG_ASSERT( nVal <= SVX_ORIENTATION_STACKED, "enum overflow!" );
+ return SVX_RESSTR(RID_SVXITEMS_ORI_STANDARD + nVal);
+}
+
+//------------------------------------------------------------------------
+
+SfxPoolItem* SvxOrientationItem::Clone( SfxItemPool* ) const
+{
+ return new SvxOrientationItem( *this );
+}
+
+//------------------------------------------------------------------------
+
+SfxPoolItem* SvxOrientationItem::Create( SvStream& rStream, USHORT ) const
+{
+ USHORT nVal;
+ rStream >> nVal;
+ return new SvxOrientationItem( (SvxCellOrientation)nVal, Which() );
+}
+
+//------------------------------------------------------------------------
+
+USHORT SvxOrientationItem::GetValueCount() const
+{
+ return SVX_ORIENTATION_STACKED + 1; // letzter Enum-Wert + 1
+}
+
+//------------------------------------------------------------------------
+
+BOOL SvxOrientationItem::IsStacked() const
+{
+ return static_cast< SvxCellOrientation >( GetValue() ) == SVX_ORIENTATION_STACKED;
+}
+
+INT32 SvxOrientationItem::GetRotation( INT32 nStdAngle ) const
+{
+ INT32 nAngle = nStdAngle;
+ switch( static_cast< SvxCellOrientation >( GetValue() ) )
+ {
+ case SVX_ORIENTATION_BOTTOMTOP: nAngle = 9000;
+ case SVX_ORIENTATION_TOPBOTTOM: nAngle = 27000;
+ default: ; //prevent warning
+ }
+ return nAngle;
+}
+
+void SvxOrientationItem::SetFromRotation( INT32 nRotation, BOOL bStacked )
+{
+ if( bStacked )
+ {
+ SetValue( SVX_ORIENTATION_STACKED );
+ }
+ else switch( nRotation )
+ {
+ case 9000: SetValue( SVX_ORIENTATION_BOTTOMTOP ); break;
+ case 27000: SetValue( SVX_ORIENTATION_TOPBOTTOM ); break;
+ default: SetValue( SVX_ORIENTATION_STANDARD );
+ }
+}
+
+// class SvxMarginItem ---------------------------------------------------
+
+SvxMarginItem::SvxMarginItem( const USHORT nId ) :
+
+ SfxPoolItem( nId ),
+
+ nLeftMargin ( 20 ),
+ nTopMargin ( 20 ),
+ nRightMargin ( 20 ),
+ nBottomMargin( 20 )
+{
+}
+
+//------------------------------------------------------------------------
+
+SvxMarginItem::SvxMarginItem( sal_Int16 nLeft,
+ sal_Int16 nTop,
+ sal_Int16 nRight,
+ sal_Int16 nBottom,
+ const USHORT nId ) :
+ SfxPoolItem( nId ),
+
+ nLeftMargin ( nLeft ),
+ nTopMargin ( nTop ),
+ nRightMargin ( nRight ),
+ nBottomMargin( nBottom )
+{
+}
+
+
+//------------------------------------------------------------------------
+
+SvxMarginItem::SvxMarginItem( const SvxMarginItem& rItem ) :
+
+ SfxPoolItem( rItem.Which() )
+{
+ nLeftMargin = rItem.nLeftMargin;
+ nTopMargin = rItem.nTopMargin;
+ nRightMargin = rItem.nRightMargin;
+ nBottomMargin = rItem.nBottomMargin;
+}
+
+//------------------------------------------------------------------------
+
+SfxItemPresentation SvxMarginItem::GetPresentation
+(
+ SfxItemPresentation ePres,
+ SfxMapUnit eCoreUnit,
+ SfxMapUnit ePresUnit,
+ XubString& rText, const IntlWrapper *pIntl
+) const
+{
+#ifndef SVX_LIGHT
+ switch ( ePres )
+ {
+ case SFX_ITEM_PRESENTATION_NONE:
+ rText.Erase();
+ return SFX_ITEM_PRESENTATION_NONE;
+ case SFX_ITEM_PRESENTATION_NAMELESS:
+ {
+ rText = GetMetricText( (long)nLeftMargin, eCoreUnit, ePresUnit, pIntl );
+ rText += cpDelim;
+ rText += GetMetricText( (long)nTopMargin, eCoreUnit, ePresUnit, pIntl );
+ rText += cpDelim;
+ rText += GetMetricText( (long)nRightMargin, eCoreUnit, ePresUnit, pIntl );
+ rText += cpDelim;
+ rText += GetMetricText( (long)nBottomMargin, eCoreUnit, ePresUnit, pIntl );
+ return SFX_ITEM_PRESENTATION_NAMELESS;
+ }
+ case SFX_ITEM_PRESENTATION_COMPLETE:
+ {
+ rText = SVX_RESSTR(RID_SVXITEMS_MARGIN_LEFT);
+ rText += GetMetricText( (long)nLeftMargin, eCoreUnit, ePresUnit, pIntl );
+ rText += SVX_RESSTR(GetMetricId(ePresUnit));
+ rText += cpDelim;
+ rText += SVX_RESSTR(RID_SVXITEMS_MARGIN_TOP);
+ rText += GetMetricText( (long)nTopMargin, eCoreUnit, ePresUnit, pIntl );
+ rText += SVX_RESSTR(GetMetricId(ePresUnit));
+ rText += cpDelim;
+ rText += SVX_RESSTR(RID_SVXITEMS_MARGIN_RIGHT);
+ rText += GetMetricText( (long)nRightMargin, eCoreUnit, ePresUnit, pIntl );
+ rText += SVX_RESSTR(GetMetricId(ePresUnit));
+ rText += cpDelim;
+ rText += SVX_RESSTR(RID_SVXITEMS_MARGIN_BOTTOM);
+ rText += GetMetricText( (long)nBottomMargin, eCoreUnit, ePresUnit, pIntl );
+ rText += SVX_RESSTR(GetMetricId(ePresUnit));
+ return SFX_ITEM_PRESENTATION_COMPLETE;
+ }
+ default: ; //prevent warning
+ }
+#endif
+ return SFX_ITEM_PRESENTATION_NONE;
+}
+
+//------------------------------------------------------------------------
+
+int SvxMarginItem::operator==( const SfxPoolItem& rItem ) const
+{
+ DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
+
+ return ( ( nLeftMargin == ( (SvxMarginItem&)rItem ).nLeftMargin ) &&
+ ( nTopMargin == ( (SvxMarginItem&)rItem ).nTopMargin ) &&
+ ( nRightMargin == ( (SvxMarginItem&)rItem ).nRightMargin ) &&
+ ( nBottomMargin == ( (SvxMarginItem&)rItem ).nBottomMargin ) );
+}
+
+//------------------------------------------------------------------------
+
+SfxPoolItem* SvxMarginItem::Clone( SfxItemPool* ) const
+{
+ return new SvxMarginItem(*this);
+}
+
+//------------------------------------------------------------------------
+
+SfxPoolItem* SvxMarginItem::Create( SvStream& rStream, USHORT ) const
+{
+ sal_Int16 nLeft;
+ sal_Int16 nTop;
+ sal_Int16 nRight;
+ sal_Int16 nBottom;
+ rStream >> nLeft;
+ rStream >> nTop;
+ rStream >> nRight;
+ rStream >> nBottom;
+ return new SvxMarginItem( nLeft, nTop, nRight, nBottom, Which() );
+}
+
+//------------------------------------------------------------------------
+
+SvStream& SvxMarginItem::Store( SvStream &rStream, USHORT /*nItemVersion*/) const
+{
+ rStream << nLeftMargin;
+ rStream << nTopMargin;
+ rStream << nRightMargin;
+ rStream << nBottomMargin;
+ return rStream;
+}
+
+
+//------------------------------------------------------------------------
+
+sal_Bool SvxMarginItem::QueryValue( uno::Any& rVal, BYTE nMemberId ) const
+{
+ sal_Bool bConvert = 0!=(nMemberId&CONVERT_TWIPS);
+ nMemberId &= ~CONVERT_TWIPS;
+ switch ( nMemberId )
+ {
+ // jetzt alles signed
+ case MID_MARGIN_L_MARGIN:
+ rVal <<= (sal_Int32)( bConvert ? TWIP_TO_MM100(nLeftMargin) : nLeftMargin );
+ break;
+ case MID_MARGIN_R_MARGIN:
+ rVal <<= (sal_Int32)( bConvert ? TWIP_TO_MM100(nRightMargin) : nRightMargin );
+ break;
+ case MID_MARGIN_UP_MARGIN:
+ rVal <<= (sal_Int32)( bConvert ? TWIP_TO_MM100(nTopMargin) : nTopMargin );
+ break;
+ case MID_MARGIN_LO_MARGIN:
+ rVal <<= (sal_Int32)( bConvert ? TWIP_TO_MM100(nBottomMargin) : nBottomMargin );
+ break;
+ default:
+ DBG_ERROR("unknown MemberId");
+ return sal_False;
+ }
+ return sal_True;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool SvxMarginItem::PutValue( const uno::Any& rVal, BYTE nMemberId )
+{
+ sal_Bool bConvert = ( ( nMemberId & CONVERT_TWIPS ) != 0 );
+ long nMaxVal = bConvert ? TWIP_TO_MM100(SHRT_MAX) : SHRT_MAX; // Members sind sal_Int16
+ sal_Int32 nVal = 0;
+ if(!(rVal >>= nVal) || (nVal > nMaxVal))
+ return sal_False;
+
+ switch ( nMemberId & ~CONVERT_TWIPS )
+ {
+ case MID_MARGIN_L_MARGIN:
+ nLeftMargin = (sal_Int16)( bConvert ? MM100_TO_TWIP(nVal) : nVal );
+ break;
+ case MID_MARGIN_R_MARGIN:
+ nRightMargin = (sal_Int16)( bConvert ? MM100_TO_TWIP(nVal) : nVal );
+ break;
+ case MID_MARGIN_UP_MARGIN:
+ nTopMargin = (sal_Int16)( bConvert ? MM100_TO_TWIP(nVal) : nVal );
+ break;
+ case MID_MARGIN_LO_MARGIN:
+ nBottomMargin = (sal_Int16)( bConvert ? MM100_TO_TWIP(nVal) : nVal );
+ break;
+ default:
+ DBG_ERROR("unknown MemberId");
+ return sal_False;
+ }
+ return sal_True;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool SvxMarginItem::SetLeftMargin( sal_Int16 nLeft )
+{
+ nLeftMargin = nLeft;
+ return sal_True;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool SvxMarginItem::SetTopMargin( sal_Int16 nTop )
+{
+ nTopMargin = nTop;
+ return sal_True;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool SvxMarginItem::SetRightMargin( sal_Int16 nRight )
+{
+ nRightMargin = nRight;
+ return sal_True;
+}
+
+//------------------------------------------------------------------------
+
+sal_Bool SvxMarginItem::SetBottomMargin( sal_Int16 nBottom )
+{
+ nBottomMargin = nBottom;
+ return sal_True;
+}
+
+