summaryrefslogtreecommitdiff
path: root/sc/source/core/tool/autoform.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/core/tool/autoform.cxx')
-rw-r--r--sc/source/core/tool/autoform.cxx1169
1 files changed, 1169 insertions, 0 deletions
diff --git a/sc/source/core/tool/autoform.cxx b/sc/source/core/tool/autoform.cxx
new file mode 100644
index 000000000000..9150255cebf3
--- /dev/null
+++ b/sc/source/core/tool/autoform.cxx
@@ -0,0 +1,1169 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * 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_sc.hxx"
+
+
+
+#define READ_OLDVERS
+
+#include "autoform.hxx"
+
+#include <sfx2/app.hxx>
+#include <sfx2/docfile.hxx>
+#include <unotools/pathoptions.hxx>
+#include <svl/itemset.hxx>
+#include <tools/shl.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/outdev.hxx>
+#include <svx/dialmgr.hxx>
+#include <svx/dialogs.hrc>
+#include <editeng/langitem.hxx>
+#include <tools/urlobj.hxx>
+#include <unotools/transliterationwrapper.hxx>
+#include <tools/tenccvt.hxx>
+
+#include "globstr.hrc"
+#include "document.hxx"
+
+//------------------------------------------------------------------------
+
+const sal_Char *linker_dummy = "";
+
+static const sal_Char sAutoTblFmtName[] = "autotbl.fmt";
+
+// bis SO5PF
+const sal_uInt16 AUTOFORMAT_ID_X = 9501;
+const sal_uInt16 AUTOFORMAT_ID_358 = 9601;
+const sal_uInt16 AUTOFORMAT_DATA_ID_X = 9502;
+
+// ab SO5
+//! in nachfolgenden Versionen muss der Betrag dieser IDs groesser sein
+const sal_uInt16 AUTOFORMAT_ID_504 = 9801;
+const sal_uInt16 AUTOFORMAT_DATA_ID_504 = 9802;
+
+const sal_uInt16 AUTOFORMAT_ID_552 = 9901;
+const sal_uInt16 AUTOFORMAT_DATA_ID_552 = 9902;
+
+// --- from 641 on: CJK and CTL font settings
+const sal_uInt16 AUTOFORMAT_ID_641 = 10001;
+const sal_uInt16 AUTOFORMAT_DATA_ID_641 = 10002;
+
+// --- from 680/dr14 on: diagonal frame lines
+const sal_uInt16 AUTOFORMAT_ID_680DR14 = 10011;
+const sal_uInt16 AUTOFORMAT_DATA_ID_680DR14 = 10012;
+
+// --- from 680/dr25 on: store strings as UTF-8
+const sal_uInt16 AUTOFORMAT_ID_680DR25 = 10021;
+const sal_uInt16 AUTOFORMAT_DATA_ID_680DR25 = 10022;
+
+// --- from DEV300/overline2 on: overline support
+const sal_uInt16 AUTOFORMAT_ID_300OVRLN = 10031;
+const sal_uInt16 AUTOFORMAT_DATA_ID_300OVRLN = 10032;
+
+// aktuelle Version
+const sal_uInt16 AUTOFORMAT_ID = AUTOFORMAT_ID_300OVRLN;
+const sal_uInt16 AUTOFORMAT_DATA_ID = AUTOFORMAT_DATA_ID_300OVRLN;
+
+
+#ifdef READ_OLDVERS
+const sal_uInt16 AUTOFORMAT_OLD_ID_OLD = 4201;
+const sal_uInt16 AUTOFORMAT_OLD_DATA_ID = 4202;
+const sal_uInt16 AUTOFORMAT_OLD_ID_NEW = 4203;
+#endif
+
+
+// Struct mit Versionsnummern der Items
+
+struct ScAfVersions
+{
+public:
+ sal_uInt16 nFontVersion;
+ sal_uInt16 nFontHeightVersion;
+ sal_uInt16 nWeightVersion;
+ sal_uInt16 nPostureVersion;
+ sal_uInt16 nUnderlineVersion;
+ sal_uInt16 nOverlineVersion;
+ sal_uInt16 nCrossedOutVersion;
+ sal_uInt16 nContourVersion;
+ sal_uInt16 nShadowedVersion;
+ sal_uInt16 nColorVersion;
+ sal_uInt16 nBoxVersion;
+ sal_uInt16 nLineVersion;
+ sal_uInt16 nBrushVersion;
+
+ sal_uInt16 nAdjustVersion;
+
+ sal_uInt16 nHorJustifyVersion;
+ sal_uInt16 nVerJustifyVersion;
+ sal_uInt16 nOrientationVersion;
+ sal_uInt16 nMarginVersion;
+ sal_uInt16 nBoolVersion;
+ sal_uInt16 nInt32Version;
+ sal_uInt16 nRotateModeVersion;
+
+ sal_uInt16 nNumFmtVersion;
+
+ ScAfVersions();
+ void Load( SvStream& rStream, sal_uInt16 nVer );
+ static void Write(SvStream& rStream);
+};
+
+ScAfVersions::ScAfVersions() :
+ nFontVersion(0),
+ nFontHeightVersion(0),
+ nWeightVersion(0),
+ nPostureVersion(0),
+ nUnderlineVersion(0),
+ nOverlineVersion(0),
+ nCrossedOutVersion(0),
+ nContourVersion(0),
+ nShadowedVersion(0),
+ nColorVersion(0),
+ nBoxVersion(0),
+ nLineVersion(0),
+ nBrushVersion(0),
+ nAdjustVersion(0),
+ nHorJustifyVersion(0),
+ nVerJustifyVersion(0),
+ nOrientationVersion(0),
+ nMarginVersion(0),
+ nBoolVersion(0),
+ nInt32Version(0),
+ nRotateModeVersion(0),
+ nNumFmtVersion(0)
+{
+}
+
+void ScAfVersions::Load( SvStream& rStream, sal_uInt16 nVer )
+{
+ rStream >> nFontVersion;
+ rStream >> nFontHeightVersion;
+ rStream >> nWeightVersion;
+ rStream >> nPostureVersion;
+ rStream >> nUnderlineVersion;
+ if ( nVer >= AUTOFORMAT_ID_300OVRLN )
+ rStream >> nOverlineVersion;
+ rStream >> nCrossedOutVersion;
+ rStream >> nContourVersion;
+ rStream >> nShadowedVersion;
+ rStream >> nColorVersion;
+ rStream >> nBoxVersion;
+ if ( nVer >= AUTOFORMAT_ID_680DR14 )
+ rStream >> nLineVersion;
+ rStream >> nBrushVersion;
+ rStream >> nAdjustVersion;
+ rStream >> nHorJustifyVersion;
+ rStream >> nVerJustifyVersion;
+ rStream >> nOrientationVersion;
+ rStream >> nMarginVersion;
+ rStream >> nBoolVersion;
+ if ( nVer >= AUTOFORMAT_ID_504 )
+ {
+ rStream >> nInt32Version;
+ rStream >> nRotateModeVersion;
+ }
+ rStream >> nNumFmtVersion;
+}
+
+void ScAfVersions::Write(SvStream& rStream)
+{
+ rStream << SvxFontItem(ATTR_FONT).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxFontHeightItem(240, 100, ATTR_FONT_HEIGHT).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxWeightItem(WEIGHT_NORMAL, ATTR_FONT_WEIGHT).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxPostureItem(ITALIC_NONE, ATTR_FONT_POSTURE).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxUnderlineItem(UNDERLINE_NONE, ATTR_FONT_UNDERLINE).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxOverlineItem(UNDERLINE_NONE, ATTR_FONT_OVERLINE).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxCrossedOutItem(STRIKEOUT_NONE, ATTR_FONT_CROSSEDOUT).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxContourItem(false, ATTR_FONT_CONTOUR).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxShadowedItem(false, ATTR_FONT_SHADOWED).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxColorItem(ATTR_FONT_COLOR).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxBoxItem(ATTR_BORDER).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxLineItem(SID_FRAME_LINESTYLE).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxBrushItem(ATTR_BACKGROUND).GetVersion(SOFFICE_FILEFORMAT_40);
+
+ rStream << SvxAdjustItem(SVX_ADJUST_LEFT, 0).GetVersion(SOFFICE_FILEFORMAT_40);
+
+ rStream << SvxHorJustifyItem(SVX_HOR_JUSTIFY_STANDARD, ATTR_HOR_JUSTIFY).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxVerJustifyItem(SVX_VER_JUSTIFY_STANDARD, ATTR_VER_JUSTIFY).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxOrientationItem(SVX_ORIENTATION_STANDARD, 0).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxMarginItem(ATTR_MARGIN).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SfxBoolItem(ATTR_LINEBREAK).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SfxInt32Item(ATTR_ROTATE_VALUE).GetVersion(SOFFICE_FILEFORMAT_40);
+ rStream << SvxRotateModeItem(SVX_ROTATE_MODE_STANDARD,0).GetVersion(SOFFICE_FILEFORMAT_40);
+
+ rStream << (sal_uInt16)0; // Num-Format
+}
+
+// ---------------------------------------------------------------------------
+
+ScAutoFormatDataField::ScAutoFormatDataField() :
+ aFont( ATTR_FONT ),
+ aHeight( 240, 100, ATTR_FONT_HEIGHT ),
+ aWeight( WEIGHT_NORMAL, ATTR_FONT_WEIGHT ),
+ aPosture( ITALIC_NONE, ATTR_FONT_POSTURE ),
+
+ aCJKFont( ATTR_CJK_FONT ),
+ aCJKHeight( 240, 100, ATTR_CJK_FONT_HEIGHT ),
+ aCJKWeight( WEIGHT_NORMAL, ATTR_CJK_FONT_WEIGHT ),
+ aCJKPosture( ITALIC_NONE, ATTR_CJK_FONT_POSTURE ),
+
+ aCTLFont( ATTR_CTL_FONT ),
+ aCTLHeight( 240, 100, ATTR_CTL_FONT_HEIGHT ),
+ aCTLWeight( WEIGHT_NORMAL, ATTR_CTL_FONT_WEIGHT ),
+ aCTLPosture( ITALIC_NONE, ATTR_CTL_FONT_POSTURE ),
+
+ aUnderline( UNDERLINE_NONE,ATTR_FONT_UNDERLINE ),
+ aOverline( UNDERLINE_NONE,ATTR_FONT_OVERLINE ),
+ aCrossedOut( STRIKEOUT_NONE, ATTR_FONT_CROSSEDOUT ),
+ aContour( false, ATTR_FONT_CONTOUR ),
+ aShadowed( false, ATTR_FONT_SHADOWED ),
+ aColor( ATTR_FONT_COLOR ),
+ aBox( ATTR_BORDER ),
+ aTLBR( ATTR_BORDER_TLBR ),
+ aBLTR( ATTR_BORDER_BLTR ),
+ aBackground( ATTR_BACKGROUND ),
+ aAdjust( SVX_ADJUST_LEFT, 0 ),
+ aHorJustify( SVX_HOR_JUSTIFY_STANDARD, ATTR_HOR_JUSTIFY ),
+ aVerJustify( SVX_VER_JUSTIFY_STANDARD, ATTR_VER_JUSTIFY ),
+ aMargin( ATTR_MARGIN ),
+ aLinebreak( ATTR_LINEBREAK ),
+ aRotateAngle( ATTR_ROTATE_VALUE ),
+ aRotateMode( SVX_ROTATE_MODE_STANDARD, ATTR_ROTATE_MODE )
+{
+}
+
+ScAutoFormatDataField::ScAutoFormatDataField( const ScAutoFormatDataField& rCopy ) :
+ aFont( rCopy.aFont ),
+ aHeight( rCopy.aHeight ),
+ aWeight( rCopy.aWeight ),
+ aPosture( rCopy.aPosture ),
+ aCJKFont( rCopy.aCJKFont ),
+ aCJKHeight( rCopy.aCJKHeight ),
+ aCJKWeight( rCopy.aCJKWeight ),
+ aCJKPosture( rCopy.aCJKPosture ),
+ aCTLFont( rCopy.aCTLFont ),
+ aCTLHeight( rCopy.aCTLHeight ),
+ aCTLWeight( rCopy.aCTLWeight ),
+ aCTLPosture( rCopy.aCTLPosture ),
+ aUnderline( rCopy.aUnderline ),
+ aOverline( rCopy.aOverline ),
+ aCrossedOut( rCopy.aCrossedOut ),
+ aContour( rCopy.aContour ),
+ aShadowed( rCopy.aShadowed ),
+ aColor( rCopy.aColor ),
+ aBox( rCopy.aBox ),
+ aTLBR( rCopy.aTLBR ),
+ aBLTR( rCopy.aBLTR ),
+ aBackground( rCopy.aBackground ),
+ aAdjust( rCopy.aAdjust ),
+ aHorJustify( rCopy.aHorJustify ),
+ aVerJustify( rCopy.aVerJustify ),
+ aStacked( rCopy.aStacked ),
+ aMargin( rCopy.aMargin ),
+ aLinebreak( rCopy.aLinebreak ),
+ aRotateAngle( rCopy.aRotateAngle ),
+ aRotateMode( rCopy.aRotateMode ),
+ aNumFormat( rCopy.aNumFormat )
+{
+}
+
+ScAutoFormatDataField::~ScAutoFormatDataField()
+{
+}
+
+void ScAutoFormatDataField::SetAdjust( const SvxAdjustItem& rAdjust )
+{
+ aAdjust.SetAdjust( rAdjust.GetAdjust() );
+ aAdjust.SetOneWord( rAdjust.GetOneWord() );
+ aAdjust.SetLastBlock( rAdjust.GetLastBlock() );
+}
+
+#define READ( aItem, ItemType, nVers ) \
+ pNew = aItem.Create( rStream, nVers ); \
+ aItem = *(ItemType*)pNew; \
+ delete pNew;
+
+sal_Bool ScAutoFormatDataField::Load( SvStream& rStream, const ScAfVersions& rVersions, sal_uInt16 nVer )
+{
+ SfxPoolItem* pNew;
+ SvxOrientationItem aOrientation( SVX_ORIENTATION_STANDARD, 0 );
+
+ READ( aFont, SvxFontItem, rVersions.nFontVersion)
+ READ( aHeight, SvxFontHeightItem, rVersions.nFontHeightVersion)
+ READ( aWeight, SvxWeightItem, rVersions.nWeightVersion)
+ READ( aPosture, SvxPostureItem, rVersions.nPostureVersion)
+ // --- from 641 on: CJK and CTL font settings
+ if( AUTOFORMAT_DATA_ID_641 <= nVer )
+ {
+ READ( aCJKFont, SvxFontItem, rVersions.nFontVersion)
+ READ( aCJKHeight, SvxFontHeightItem, rVersions.nFontHeightVersion)
+ READ( aCJKWeight, SvxWeightItem, rVersions.nWeightVersion)
+ READ( aCJKPosture, SvxPostureItem, rVersions.nPostureVersion)
+ READ( aCTLFont, SvxFontItem, rVersions.nFontVersion)
+ READ( aCTLHeight, SvxFontHeightItem, rVersions.nFontHeightVersion)
+ READ( aCTLWeight, SvxWeightItem, rVersions.nWeightVersion)
+ READ( aCTLPosture, SvxPostureItem, rVersions.nPostureVersion)
+ }
+ READ( aUnderline, SvxUnderlineItem, rVersions.nUnderlineVersion)
+ if ( nVer >= AUTOFORMAT_DATA_ID_300OVRLN )
+ {
+ READ( aOverline, SvxOverlineItem, rVersions.nOverlineVersion)
+ }
+ READ( aCrossedOut, SvxCrossedOutItem, rVersions.nCrossedOutVersion)
+ READ( aContour, SvxContourItem, rVersions.nContourVersion)
+ READ( aShadowed, SvxShadowedItem, rVersions.nShadowedVersion)
+ READ( aColor, SvxColorItem, rVersions.nColorVersion)
+ READ( aBox, SvxBoxItem, rVersions.nBoxVersion)
+
+ // --- from 680/dr14 on: diagonal frame lines
+ if( AUTOFORMAT_DATA_ID_680DR14 <= nVer )
+ {
+ READ( aTLBR, SvxLineItem, rVersions.nLineVersion)
+ READ( aBLTR, SvxLineItem, rVersions.nLineVersion)
+ }
+
+ READ( aBackground, SvxBrushItem, rVersions.nBrushVersion)
+
+ pNew = aAdjust.Create( rStream, rVersions.nAdjustVersion );
+ SetAdjust( *(SvxAdjustItem*)pNew );
+ delete pNew;
+
+ READ( aHorJustify, SvxHorJustifyItem, rVersions.nHorJustifyVersion)
+ READ( aVerJustify, SvxVerJustifyItem, rVersions.nVerJustifyVersion)
+ READ( aOrientation, SvxOrientationItem, rVersions.nOrientationVersion)
+ READ( aMargin, SvxMarginItem, rVersions.nMarginVersion)
+
+ pNew = aLinebreak.Create( rStream, rVersions.nBoolVersion );
+ SetLinebreak( *(SfxBoolItem*)pNew );
+ delete pNew;
+
+ if ( nVer >= AUTOFORMAT_DATA_ID_504 )
+ {
+ pNew = aRotateAngle.Create( rStream, rVersions.nInt32Version );
+ SetRotateAngle( *(SfxInt32Item*)pNew );
+ delete pNew;
+ pNew = aRotateMode.Create( rStream, rVersions.nRotateModeVersion );
+ SetRotateMode( *(SvxRotateModeItem*)pNew );
+ delete pNew;
+ }
+
+ if( 0 == rVersions.nNumFmtVersion )
+ {
+ // --- from 680/dr25 on: store strings as UTF-8
+ CharSet eCharSet = (nVer >= AUTOFORMAT_ID_680DR25) ? RTL_TEXTENCODING_UTF8 : rStream.GetStreamCharSet();
+ aNumFormat.Load( rStream, eCharSet );
+ }
+
+ // adjust charset in font
+ CharSet eSysSet = gsl_getSystemTextEncoding();
+ CharSet eSrcSet = rStream.GetStreamCharSet();
+ if( eSrcSet != eSysSet && aFont.GetCharSet() == eSrcSet )
+ aFont.SetCharSet(eSysSet);
+
+ aStacked.SetValue( aOrientation.IsStacked() );
+ aRotateAngle.SetValue( aOrientation.GetRotation( aRotateAngle.GetValue() ) );
+
+ return (rStream.GetError() == 0);
+}
+
+#ifdef READ_OLDVERS
+sal_Bool ScAutoFormatDataField::LoadOld( SvStream& rStream, const ScAfVersions& rVersions )
+{
+ SfxPoolItem* pNew;
+ SvxOrientationItem aOrientation( SVX_ORIENTATION_STANDARD, 0 );
+
+ aNumFormat.Load(rStream, rStream.GetStreamCharSet());
+
+ READ( aFont, SvxFontItem, rVersions.nFontVersion)
+ READ( aHeight, SvxFontHeightItem, rVersions.nFontHeightVersion)
+ READ( aWeight, SvxWeightItem, rVersions.nWeightVersion)
+ READ( aPosture, SvxPostureItem, rVersions.nPostureVersion)
+ READ( aUnderline, SvxUnderlineItem, rVersions.nUnderlineVersion)
+ READ( aCrossedOut, SvxCrossedOutItem, rVersions.nCrossedOutVersion)
+ READ( aContour, SvxContourItem, rVersions.nContourVersion)
+ READ( aShadowed, SvxShadowedItem, rVersions.nShadowedVersion)
+ READ( aColor, SvxColorItem, rVersions.nColorVersion)
+ READ( aHorJustify, SvxHorJustifyItem, rVersions.nHorJustifyVersion)
+ READ( aVerJustify, SvxVerJustifyItem, rVersions.nVerJustifyVersion)
+ READ( aOrientation, SvxOrientationItem, rVersions.nOrientationVersion)
+ pNew = aLinebreak.Create( rStream, rVersions.nBoolVersion );
+ SetLinebreak( *(SfxBoolItem*)pNew );
+ delete pNew;
+ READ( aMargin, SvxMarginItem, rVersions.nMarginVersion)
+ READ( aBox, SvxBoxItem, rVersions.nBoxVersion)
+ READ( aBackground, SvxBrushItem, rVersions.nBrushVersion)
+
+ aStacked.SetValue( aOrientation.IsStacked() );
+ aRotateAngle.SetValue( aOrientation.GetRotation( aRotateAngle.GetValue() ) );
+
+ return (rStream.GetError() == 0);
+}
+#endif
+
+sal_Bool ScAutoFormatDataField::Save( SvStream& rStream )
+{
+ SvxOrientationItem aOrientation( aRotateAngle.GetValue(), aStacked.GetValue(), 0 );
+
+ aFont.Store ( rStream, aFont.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aHeight.Store ( rStream, aHeight.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aWeight.Store ( rStream, aWeight.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aPosture.Store ( rStream, aPosture.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ // --- from 641 on: CJK and CTL font settings
+ aCJKFont.Store ( rStream, aCJKFont.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aCJKHeight.Store ( rStream, aCJKHeight.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aCJKWeight.Store ( rStream, aCJKWeight.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aCJKPosture.Store ( rStream, aCJKPosture.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aCTLFont.Store ( rStream, aCTLFont.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aCTLHeight.Store ( rStream, aCTLHeight.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aCTLWeight.Store ( rStream, aCTLWeight.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aCTLPosture.Store ( rStream, aCTLPosture.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+
+ aUnderline.Store ( rStream, aUnderline.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ // --- from DEV300/overline2 on: overline support
+ aOverline.Store ( rStream, aOverline.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aCrossedOut.Store ( rStream, aCrossedOut.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aContour.Store ( rStream, aContour.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aShadowed.Store ( rStream, aShadowed.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aColor.Store ( rStream, aColor.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aBox.Store ( rStream, aBox.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+
+ // --- from 680/dr14 on: diagonal frame lines
+ aTLBR.Store ( rStream, aTLBR.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aBLTR.Store ( rStream, aBLTR.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+
+ aBackground.Store ( rStream, aBackground.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+
+ aAdjust.Store ( rStream, aAdjust.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+
+ aHorJustify.Store ( rStream, aHorJustify.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aVerJustify.Store ( rStream, aVerJustify.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aOrientation.Store ( rStream, aOrientation.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aMargin.Store ( rStream, aMargin.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aLinebreak.Store ( rStream, aLinebreak.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ // Rotation ab SO5
+ aRotateAngle.Store ( rStream, aRotateAngle.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+ aRotateMode.Store ( rStream, aRotateMode.GetVersion( SOFFICE_FILEFORMAT_40 ) );
+
+ // --- from 680/dr25 on: store strings as UTF-8
+ aNumFormat.Save( rStream, RTL_TEXTENCODING_UTF8 );
+
+ return (rStream.GetError() == 0);
+}
+
+
+// ---------------------------------------------------------------------------
+
+ScAutoFormatData::ScAutoFormatData()
+{
+ nStrResId = USHRT_MAX;
+
+ bIncludeValueFormat =
+ bIncludeFont =
+ bIncludeJustify =
+ bIncludeFrame =
+ bIncludeBackground =
+ bIncludeWidthHeight = sal_True;
+
+ ppDataField = new ScAutoFormatDataField*[ 16 ];
+ for( sal_uInt16 nIndex = 0; nIndex < 16; ++nIndex )
+ ppDataField[ nIndex ] = new ScAutoFormatDataField;
+}
+
+ScAutoFormatData::ScAutoFormatData( const ScAutoFormatData& rData ) :
+ ScDataObject(),
+ aName( rData.aName ),
+ nStrResId( rData.nStrResId ),
+ bIncludeFont( rData.bIncludeFont ),
+ bIncludeJustify( rData.bIncludeJustify ),
+ bIncludeFrame( rData.bIncludeFrame ),
+ bIncludeBackground( rData.bIncludeBackground ),
+ bIncludeValueFormat( rData.bIncludeValueFormat ),
+ bIncludeWidthHeight( rData.bIncludeWidthHeight )
+{
+ ppDataField = new ScAutoFormatDataField*[ 16 ];
+ for( sal_uInt16 nIndex = 0; nIndex < 16; ++nIndex )
+ ppDataField[ nIndex ] = new ScAutoFormatDataField( rData.GetField( nIndex ) );
+}
+
+ScAutoFormatData::~ScAutoFormatData()
+{
+ for( sal_uInt16 nIndex = 0; nIndex < 16; ++nIndex )
+ delete ppDataField[ nIndex ];
+ delete[] ppDataField;
+}
+
+ScAutoFormatDataField& ScAutoFormatData::GetField( sal_uInt16 nIndex )
+{
+ DBG_ASSERT( nIndex < 16, "ScAutoFormatData::GetField - illegal index" );
+ DBG_ASSERT( ppDataField && ppDataField[ nIndex ], "ScAutoFormatData::GetField - no data" );
+ return *ppDataField[ nIndex ];
+}
+
+const ScAutoFormatDataField& ScAutoFormatData::GetField( sal_uInt16 nIndex ) const
+{
+ DBG_ASSERT( nIndex < 16, "ScAutoFormatData::GetField - illegal index" );
+ DBG_ASSERT( ppDataField && ppDataField[ nIndex ], "ScAutoFormatData::GetField - no data" );
+ return *ppDataField[ nIndex ];
+}
+
+const SfxPoolItem* ScAutoFormatData::GetItem( sal_uInt16 nIndex, sal_uInt16 nWhich ) const
+{
+ const ScAutoFormatDataField& rField = GetField( nIndex );
+ switch( nWhich )
+ {
+ case ATTR_FONT: return &rField.GetFont();
+ case ATTR_FONT_HEIGHT: return &rField.GetHeight();
+ case ATTR_FONT_WEIGHT: return &rField.GetWeight();
+ case ATTR_FONT_POSTURE: return &rField.GetPosture();
+ case ATTR_CJK_FONT: return &rField.GetCJKFont();
+ case ATTR_CJK_FONT_HEIGHT: return &rField.GetCJKHeight();
+ case ATTR_CJK_FONT_WEIGHT: return &rField.GetCJKWeight();
+ case ATTR_CJK_FONT_POSTURE: return &rField.GetCJKPosture();
+ case ATTR_CTL_FONT: return &rField.GetCTLFont();
+ case ATTR_CTL_FONT_HEIGHT: return &rField.GetCTLHeight();
+ case ATTR_CTL_FONT_WEIGHT: return &rField.GetCTLWeight();
+ case ATTR_CTL_FONT_POSTURE: return &rField.GetCTLPosture();
+ case ATTR_FONT_UNDERLINE: return &rField.GetUnderline();
+ case ATTR_FONT_OVERLINE: return &rField.GetOverline();
+ case ATTR_FONT_CROSSEDOUT: return &rField.GetCrossedOut();
+ case ATTR_FONT_CONTOUR: return &rField.GetContour();
+ case ATTR_FONT_SHADOWED: return &rField.GetShadowed();
+ case ATTR_FONT_COLOR: return &rField.GetColor();
+ case ATTR_BORDER: return &rField.GetBox();
+ case ATTR_BORDER_TLBR: return &rField.GetTLBR();
+ case ATTR_BORDER_BLTR: return &rField.GetBLTR();
+ case ATTR_BACKGROUND: return &rField.GetBackground();
+ case ATTR_HOR_JUSTIFY: return &rField.GetHorJustify();
+ case ATTR_VER_JUSTIFY: return &rField.GetVerJustify();
+ case ATTR_STACKED: return &rField.GetStacked();
+ case ATTR_MARGIN: return &rField.GetMargin();
+ case ATTR_LINEBREAK: return &rField.GetLinebreak();
+ case ATTR_ROTATE_VALUE: return &rField.GetRotateAngle();
+ case ATTR_ROTATE_MODE: return &rField.GetRotateMode();
+ }
+ return NULL;
+}
+
+void ScAutoFormatData::PutItem( sal_uInt16 nIndex, const SfxPoolItem& rItem )
+{
+ ScAutoFormatDataField& rField = GetField( nIndex );
+ switch( rItem.Which() )
+ {
+ case ATTR_FONT: rField.SetFont( (const SvxFontItem&)rItem ); break;
+ case ATTR_FONT_HEIGHT: rField.SetHeight( (const SvxFontHeightItem&)rItem ); break;
+ case ATTR_FONT_WEIGHT: rField.SetWeight( (const SvxWeightItem&)rItem ); break;
+ case ATTR_FONT_POSTURE: rField.SetPosture( (const SvxPostureItem&)rItem ); break;
+ case ATTR_CJK_FONT: rField.SetCJKFont( (const SvxFontItem&)rItem ); break;
+ case ATTR_CJK_FONT_HEIGHT: rField.SetCJKHeight( (const SvxFontHeightItem&)rItem ); break;
+ case ATTR_CJK_FONT_WEIGHT: rField.SetCJKWeight( (const SvxWeightItem&)rItem ); break;
+ case ATTR_CJK_FONT_POSTURE: rField.SetCJKPosture( (const SvxPostureItem&)rItem ); break;
+ case ATTR_CTL_FONT: rField.SetCTLFont( (const SvxFontItem&)rItem ); break;
+ case ATTR_CTL_FONT_HEIGHT: rField.SetCTLHeight( (const SvxFontHeightItem&)rItem ); break;
+ case ATTR_CTL_FONT_WEIGHT: rField.SetCTLWeight( (const SvxWeightItem&)rItem ); break;
+ case ATTR_CTL_FONT_POSTURE: rField.SetCTLPosture( (const SvxPostureItem&)rItem ); break;
+ case ATTR_FONT_UNDERLINE: rField.SetUnderline( (const SvxUnderlineItem&)rItem ); break;
+ case ATTR_FONT_OVERLINE: rField.SetOverline( (const SvxOverlineItem&)rItem ); break;
+ case ATTR_FONT_CROSSEDOUT: rField.SetCrossedOut( (const SvxCrossedOutItem&)rItem ); break;
+ case ATTR_FONT_CONTOUR: rField.SetContour( (const SvxContourItem&)rItem ); break;
+ case ATTR_FONT_SHADOWED: rField.SetShadowed( (const SvxShadowedItem&)rItem ); break;
+ case ATTR_FONT_COLOR: rField.SetColor( (const SvxColorItem&)rItem ); break;
+ case ATTR_BORDER: rField.SetBox( (const SvxBoxItem&)rItem ); break;
+ case ATTR_BORDER_TLBR: rField.SetTLBR( (const SvxLineItem&)rItem ); break;
+ case ATTR_BORDER_BLTR: rField.SetBLTR( (const SvxLineItem&)rItem ); break;
+ case ATTR_BACKGROUND: rField.SetBackground( (const SvxBrushItem&)rItem ); break;
+ case ATTR_HOR_JUSTIFY: rField.SetHorJustify( (const SvxHorJustifyItem&)rItem ); break;
+ case ATTR_VER_JUSTIFY: rField.SetVerJustify( (const SvxVerJustifyItem&)rItem ); break;
+ case ATTR_STACKED: rField.SetStacked( (const SfxBoolItem&)rItem ); break;
+ case ATTR_MARGIN: rField.SetMargin( (const SvxMarginItem&)rItem ); break;
+ case ATTR_LINEBREAK: rField.SetLinebreak( (const SfxBoolItem&)rItem ); break;
+ case ATTR_ROTATE_VALUE: rField.SetRotateAngle( (const SfxInt32Item&)rItem ); break;
+ case ATTR_ROTATE_MODE: rField.SetRotateMode( (const SvxRotateModeItem&)rItem ); break;
+ }
+}
+
+void ScAutoFormatData::CopyItem( sal_uInt16 nToIndex, sal_uInt16 nFromIndex, sal_uInt16 nWhich )
+{
+ const SfxPoolItem* pItem = GetItem( nFromIndex, nWhich );
+ if( pItem )
+ PutItem( nToIndex, *pItem );
+}
+
+const ScNumFormatAbbrev& ScAutoFormatData::GetNumFormat( sal_uInt16 nIndex ) const
+{
+ return GetField( nIndex ).GetNumFormat();
+}
+
+sal_Bool ScAutoFormatData::IsEqualData( sal_uInt16 nIndex1, sal_uInt16 nIndex2 ) const
+{
+ sal_Bool bEqual = sal_True;
+ const ScAutoFormatDataField& rField1 = GetField( nIndex1 );
+ const ScAutoFormatDataField& rField2 = GetField( nIndex2 );
+
+ if( bIncludeValueFormat )
+ {
+ bEqual = bEqual
+ && (rField1.GetNumFormat() == rField2.GetNumFormat());
+ }
+ if( bIncludeFont )
+ {
+ bEqual = bEqual
+ && (rField1.GetFont() == rField2.GetFont())
+ && (rField1.GetHeight() == rField2.GetHeight())
+ && (rField1.GetWeight() == rField2.GetWeight())
+ && (rField1.GetPosture() == rField2.GetPosture())
+ && (rField1.GetCJKFont() == rField2.GetCJKFont())
+ && (rField1.GetCJKHeight() == rField2.GetCJKHeight())
+ && (rField1.GetCJKWeight() == rField2.GetCJKWeight())
+ && (rField1.GetCJKPosture() == rField2.GetCJKPosture())
+ && (rField1.GetCTLFont() == rField2.GetCTLFont())
+ && (rField1.GetCTLHeight() == rField2.GetCTLHeight())
+ && (rField1.GetCTLWeight() == rField2.GetCTLWeight())
+ && (rField1.GetCTLPosture() == rField2.GetCTLPosture())
+ && (rField1.GetUnderline() == rField2.GetUnderline())
+ && (rField1.GetOverline() == rField2.GetOverline())
+ && (rField1.GetCrossedOut() == rField2.GetCrossedOut())
+ && (rField1.GetContour() == rField2.GetContour())
+ && (rField1.GetShadowed() == rField2.GetShadowed())
+ && (rField1.GetColor() == rField2.GetColor());
+ }
+ if( bIncludeJustify )
+ {
+ bEqual = bEqual
+ && (rField1.GetHorJustify() == rField2.GetHorJustify())
+ && (rField1.GetVerJustify() == rField2.GetVerJustify())
+ && (rField1.GetStacked() == rField2.GetStacked())
+ && (rField1.GetLinebreak() == rField2.GetLinebreak())
+ && (rField1.GetMargin() == rField2.GetMargin())
+ && (rField1.GetRotateAngle() == rField2.GetRotateAngle())
+ && (rField1.GetRotateMode() == rField2.GetRotateMode());
+ }
+ if( bIncludeFrame )
+ {
+ bEqual = bEqual
+ && (rField1.GetBox() == rField2.GetBox())
+ && (rField1.GetTLBR() == rField2.GetTLBR())
+ && (rField1.GetBLTR() == rField2.GetBLTR());
+ }
+ if( bIncludeBackground )
+ {
+ bEqual = bEqual
+ && (rField1.GetBackground() == rField2.GetBackground());
+ }
+ return bEqual;
+}
+
+void ScAutoFormatData::FillToItemSet( sal_uInt16 nIndex, SfxItemSet& rItemSet, ScDocument& rDoc ) const
+{
+ const ScAutoFormatDataField& rField = GetField( nIndex );
+
+ if( bIncludeValueFormat )
+ {
+ ScNumFormatAbbrev& rNumFormat = (ScNumFormatAbbrev&)rField.GetNumFormat();
+ SfxUInt32Item aValueFormat( ATTR_VALUE_FORMAT, 0 );
+ aValueFormat.SetValue( rNumFormat.GetFormatIndex( *rDoc.GetFormatTable() ) );
+ rItemSet.Put( aValueFormat );
+ rItemSet.Put( SvxLanguageItem( rNumFormat.GetLanguage(), ATTR_LANGUAGE_FORMAT ) );
+ }
+ if( bIncludeFont )
+ {
+ rItemSet.Put( rField.GetFont() );
+ rItemSet.Put( rField.GetHeight() );
+ rItemSet.Put( rField.GetWeight() );
+ rItemSet.Put( rField.GetPosture() );
+ // do not insert empty CJK font
+ const SvxFontItem& rCJKFont = rField.GetCJKFont();
+ if( rCJKFont.GetStyleName().Len() )
+ {
+ rItemSet.Put( rCJKFont );
+ rItemSet.Put( rField.GetCJKHeight() );
+ rItemSet.Put( rField.GetCJKWeight() );
+ rItemSet.Put( rField.GetCJKPosture() );
+ }
+ else
+ {
+ rItemSet.Put( rField.GetHeight(), ATTR_CJK_FONT_HEIGHT );
+ rItemSet.Put( rField.GetWeight(), ATTR_CJK_FONT_WEIGHT );
+ rItemSet.Put( rField.GetPosture(), ATTR_CJK_FONT_POSTURE );
+ }
+ // do not insert empty CTL font
+ const SvxFontItem& rCTLFont = rField.GetCTLFont();
+ if( rCTLFont.GetStyleName().Len() )
+ {
+ rItemSet.Put( rCTLFont );
+ rItemSet.Put( rField.GetCTLHeight() );
+ rItemSet.Put( rField.GetCTLWeight() );
+ rItemSet.Put( rField.GetCTLPosture() );
+ }
+ else
+ {
+ rItemSet.Put( rField.GetHeight(), ATTR_CTL_FONT_HEIGHT );
+ rItemSet.Put( rField.GetWeight(), ATTR_CTL_FONT_WEIGHT );
+ rItemSet.Put( rField.GetPosture(), ATTR_CTL_FONT_POSTURE );
+ }
+ rItemSet.Put( rField.GetUnderline() );
+ rItemSet.Put( rField.GetOverline() );
+ rItemSet.Put( rField.GetCrossedOut() );
+ rItemSet.Put( rField.GetContour() );
+ rItemSet.Put( rField.GetShadowed() );
+ rItemSet.Put( rField.GetColor() );
+ }
+ if( bIncludeJustify )
+ {
+ rItemSet.Put( rField.GetHorJustify() );
+ rItemSet.Put( rField.GetVerJustify() );
+ rItemSet.Put( rField.GetStacked() );
+ rItemSet.Put( rField.GetLinebreak() );
+ rItemSet.Put( rField.GetMargin() );
+ rItemSet.Put( rField.GetRotateAngle() );
+ rItemSet.Put( rField.GetRotateMode() );
+ }
+ if( bIncludeFrame )
+ {
+ rItemSet.Put( rField.GetBox() );
+ rItemSet.Put( rField.GetTLBR() );
+ rItemSet.Put( rField.GetBLTR() );
+ }
+ if( bIncludeBackground )
+ rItemSet.Put( rField.GetBackground() );
+}
+
+void ScAutoFormatData::GetFromItemSet( sal_uInt16 nIndex, const SfxItemSet& rItemSet, const ScNumFormatAbbrev& rNumFormat )
+{
+ ScAutoFormatDataField& rField = GetField( nIndex );
+
+ rField.SetNumFormat ( rNumFormat);
+ rField.SetFont ( (const SvxFontItem&) rItemSet.Get( ATTR_FONT ) );
+ rField.SetHeight ( (const SvxFontHeightItem&) rItemSet.Get( ATTR_FONT_HEIGHT ) );
+ rField.SetWeight ( (const SvxWeightItem&) rItemSet.Get( ATTR_FONT_WEIGHT ) );
+ rField.SetPosture ( (const SvxPostureItem&) rItemSet.Get( ATTR_FONT_POSTURE ) );
+ rField.SetCJKFont ( (const SvxFontItem&) rItemSet.Get( ATTR_CJK_FONT ) );
+ rField.SetCJKHeight ( (const SvxFontHeightItem&) rItemSet.Get( ATTR_CJK_FONT_HEIGHT ) );
+ rField.SetCJKWeight ( (const SvxWeightItem&) rItemSet.Get( ATTR_CJK_FONT_WEIGHT ) );
+ rField.SetCJKPosture ( (const SvxPostureItem&) rItemSet.Get( ATTR_CJK_FONT_POSTURE ) );
+ rField.SetCTLFont ( (const SvxFontItem&) rItemSet.Get( ATTR_CTL_FONT ) );
+ rField.SetCTLHeight ( (const SvxFontHeightItem&) rItemSet.Get( ATTR_CTL_FONT_HEIGHT ) );
+ rField.SetCTLWeight ( (const SvxWeightItem&) rItemSet.Get( ATTR_CTL_FONT_WEIGHT ) );
+ rField.SetCTLPosture ( (const SvxPostureItem&) rItemSet.Get( ATTR_CTL_FONT_POSTURE ) );
+ rField.SetUnderline ( (const SvxUnderlineItem&) rItemSet.Get( ATTR_FONT_UNDERLINE ) );
+ rField.SetOverline ( (const SvxOverlineItem&) rItemSet.Get( ATTR_FONT_OVERLINE ) );
+ rField.SetCrossedOut ( (const SvxCrossedOutItem&) rItemSet.Get( ATTR_FONT_CROSSEDOUT ) );
+ rField.SetContour ( (const SvxContourItem&) rItemSet.Get( ATTR_FONT_CONTOUR ) );
+ rField.SetShadowed ( (const SvxShadowedItem&) rItemSet.Get( ATTR_FONT_SHADOWED ) );
+ rField.SetColor ( (const SvxColorItem&) rItemSet.Get( ATTR_FONT_COLOR ) );
+ rField.SetTLBR ( (const SvxLineItem&) rItemSet.Get( ATTR_BORDER_TLBR ) );
+ rField.SetBLTR ( (const SvxLineItem&) rItemSet.Get( ATTR_BORDER_BLTR ) );
+ rField.SetHorJustify ( (const SvxHorJustifyItem&) rItemSet.Get( ATTR_HOR_JUSTIFY ) );
+ rField.SetVerJustify ( (const SvxVerJustifyItem&) rItemSet.Get( ATTR_VER_JUSTIFY ) );
+ rField.SetStacked ( (const SfxBoolItem&) rItemSet.Get( ATTR_STACKED ) );
+ rField.SetLinebreak ( (const SfxBoolItem&) rItemSet.Get( ATTR_LINEBREAK ) );
+ rField.SetMargin ( (const SvxMarginItem&) rItemSet.Get( ATTR_MARGIN ) );
+ rField.SetBackground ( (const SvxBrushItem&) rItemSet.Get( ATTR_BACKGROUND ) );
+ rField.SetRotateAngle ( (const SfxInt32Item&) rItemSet.Get( ATTR_ROTATE_VALUE ) );
+ rField.SetRotateMode ( (const SvxRotateModeItem&) rItemSet.Get( ATTR_ROTATE_MODE ) );
+}
+
+sal_Bool ScAutoFormatData::Load( SvStream& rStream, const ScAfVersions& rVersions )
+{
+ sal_Bool bRet = sal_True;
+ sal_uInt16 nVer = 0;
+ rStream >> nVer;
+ bRet = 0 == rStream.GetError();
+ if( bRet && (nVer == AUTOFORMAT_DATA_ID_X ||
+ (AUTOFORMAT_DATA_ID_504 <= nVer && nVer <= AUTOFORMAT_DATA_ID)) )
+ {
+ // --- from 680/dr25 on: store strings as UTF-8
+ CharSet eCharSet = (nVer >= AUTOFORMAT_ID_680DR25) ? RTL_TEXTENCODING_UTF8 : rStream.GetStreamCharSet();
+ rStream.ReadByteString( aName, eCharSet );
+ if( AUTOFORMAT_DATA_ID_552 <= nVer )
+ {
+ rStream >> nStrResId;
+ sal_uInt16 nId = RID_SVXSTR_TBLAFMT_BEGIN + nStrResId;
+ if( RID_SVXSTR_TBLAFMT_BEGIN <= nId &&
+ nId < RID_SVXSTR_TBLAFMT_END )
+ {
+ aName = SVX_RESSTR( nId );
+ }
+ else
+ nStrResId = USHRT_MAX;
+ }
+
+ sal_Bool b;
+ rStream >> b; bIncludeFont = b;
+ rStream >> b; bIncludeJustify = b;
+ rStream >> b; bIncludeFrame = b;
+ rStream >> b; bIncludeBackground = b;
+ rStream >> b; bIncludeValueFormat = b;
+ rStream >> b; bIncludeWidthHeight = b;
+
+ bRet = 0 == rStream.GetError();
+ for( sal_uInt16 i = 0; bRet && i < 16; ++i )
+ bRet = GetField( i ).Load( rStream, rVersions, nVer );
+ }
+ else
+ bRet = false;
+ return bRet;
+}
+
+#ifdef READ_OLDVERS
+sal_Bool ScAutoFormatData::LoadOld( SvStream& rStream, const ScAfVersions& rVersions )
+{
+ sal_Bool bRet = sal_True;
+ sal_uInt16 nVal = 0;
+ rStream >> nVal;
+ bRet = (rStream.GetError() == 0);
+ if (bRet && (nVal == AUTOFORMAT_OLD_DATA_ID))
+ {
+ rStream.ReadByteString( aName, rStream.GetStreamCharSet() );
+ sal_Bool b;
+ rStream >> b; bIncludeFont = b;
+ rStream >> b; bIncludeJustify = b;
+ rStream >> b; bIncludeFrame = b;
+ rStream >> b; bIncludeBackground = b;
+ rStream >> b; bIncludeValueFormat = b;
+ rStream >> b; bIncludeWidthHeight = b;
+
+ bRet = 0 == rStream.GetError();
+ for (sal_uInt16 i=0; bRet && i < 16; i++)
+ bRet = GetField( i ).LoadOld( rStream, rVersions );
+ }
+ else
+ bRet = false;
+ return bRet;
+}
+#endif
+
+sal_Bool ScAutoFormatData::Save(SvStream& rStream)
+{
+ sal_uInt16 nVal = AUTOFORMAT_DATA_ID;
+ sal_Bool b;
+ rStream << nVal;
+ // --- from 680/dr25 on: store strings as UTF-8
+ rStream.WriteByteString( aName, RTL_TEXTENCODING_UTF8 );
+
+ rStream << nStrResId;
+ rStream << ( b = bIncludeFont );
+ rStream << ( b = bIncludeJustify );
+ rStream << ( b = bIncludeFrame );
+ rStream << ( b = bIncludeBackground );
+ rStream << ( b = bIncludeValueFormat );
+ rStream << ( b = bIncludeWidthHeight );
+
+ sal_Bool bRet = 0 == rStream.GetError();
+ for (sal_uInt16 i = 0; bRet && (i < 16); i++)
+ bRet = GetField( i ).Save( rStream );
+
+ return bRet;
+}
+
+//---------------------------------------------------------------------------------------
+//---------------------------------------------------------------------------------------
+
+ScAutoFormat::ScAutoFormat(sal_uInt16 nLim, sal_uInt16 nDel, sal_Bool bDup):
+ ScSortedCollection (nLim, nDel, bDup),
+ bSaveLater (false)
+{
+ // create default autoformat
+ ScAutoFormatData* pData = new ScAutoFormatData;
+ String aName(ScGlobal::GetRscString(STR_STYLENAME_STANDARD));
+ pData->SetName(aName);
+
+ // default font, default height
+ Font aStdFont = OutputDevice::GetDefaultFont(
+ DEFAULTFONT_LATIN_SPREADSHEET, LANGUAGE_ENGLISH_US, DEFAULTFONT_FLAGS_ONLYONE );
+ SvxFontItem aFontItem(
+ aStdFont.GetFamily(), aStdFont.GetName(), aStdFont.GetStyleName(),
+ aStdFont.GetPitch(), aStdFont.GetCharSet(), ATTR_FONT );
+
+ aStdFont = OutputDevice::GetDefaultFont(
+ DEFAULTFONT_CJK_SPREADSHEET, LANGUAGE_ENGLISH_US, DEFAULTFONT_FLAGS_ONLYONE );
+ SvxFontItem aCJKFontItem(
+ aStdFont.GetFamily(), aStdFont.GetName(), aStdFont.GetStyleName(),
+ aStdFont.GetPitch(), aStdFont.GetCharSet(), ATTR_CJK_FONT );
+
+ aStdFont = OutputDevice::GetDefaultFont(
+ DEFAULTFONT_CTL_SPREADSHEET, LANGUAGE_ENGLISH_US, DEFAULTFONT_FLAGS_ONLYONE );
+ SvxFontItem aCTLFontItem(
+ aStdFont.GetFamily(), aStdFont.GetName(), aStdFont.GetStyleName(),
+ aStdFont.GetPitch(), aStdFont.GetCharSet(), ATTR_CTL_FONT );
+
+ SvxFontHeightItem aHeight( 200, 100, ATTR_FONT_HEIGHT ); // 10 pt;
+
+ // black thin border
+ Color aBlack( COL_BLACK );
+ ::editeng::SvxBorderLine aLine( &aBlack, DEF_LINE_WIDTH_0 );
+ SvxBoxItem aBox( ATTR_BORDER );
+ aBox.SetLine(&aLine, BOX_LINE_LEFT);
+ aBox.SetLine(&aLine, BOX_LINE_TOP);
+ aBox.SetLine(&aLine, BOX_LINE_RIGHT);
+ aBox.SetLine(&aLine, BOX_LINE_BOTTOM);
+
+ Color aWhite(COL_WHITE);
+ Color aBlue(COL_BLUE);
+ SvxColorItem aWhiteText( aWhite, ATTR_FONT_COLOR );
+ SvxColorItem aBlackText( aBlack, ATTR_FONT_COLOR );
+ SvxBrushItem aBlueBack( aBlue, ATTR_BACKGROUND );
+ SvxBrushItem aWhiteBack( aWhite, ATTR_BACKGROUND );
+ SvxBrushItem aGray70Back( Color(0x4d, 0x4d, 0x4d), ATTR_BACKGROUND );
+ SvxBrushItem aGray20Back( Color(0xcc, 0xcc, 0xcc), ATTR_BACKGROUND );
+
+ for (sal_uInt16 i=0; i<16; i++)
+ {
+ pData->PutItem( i, aBox );
+ pData->PutItem( i, aFontItem );
+ pData->PutItem( i, aCJKFontItem );
+ pData->PutItem( i, aCTLFontItem );
+ aHeight.SetWhich( ATTR_FONT_HEIGHT );
+ pData->PutItem( i, aHeight );
+ aHeight.SetWhich( ATTR_CJK_FONT_HEIGHT );
+ pData->PutItem( i, aHeight );
+ aHeight.SetWhich( ATTR_CTL_FONT_HEIGHT );
+ pData->PutItem( i, aHeight );
+ if (i<4) // top: white on blue
+ {
+ pData->PutItem( i, aWhiteText );
+ pData->PutItem( i, aBlueBack );
+ }
+ else if ( i%4 == 0 ) // left: white on gray70
+ {
+ pData->PutItem( i, aWhiteText );
+ pData->PutItem( i, aGray70Back );
+ }
+ else if ( i%4 == 3 || i >= 12 ) // right and bottom: black on gray20
+ {
+ pData->PutItem( i, aBlackText );
+ pData->PutItem( i, aGray20Back );
+ }
+ else // center: black on white
+ {
+ pData->PutItem( i, aBlackText );
+ pData->PutItem( i, aWhiteBack );
+ }
+ }
+
+ Insert(pData);
+}
+
+ScAutoFormat::ScAutoFormat(const ScAutoFormat& rAutoFormat) :
+ ScSortedCollection (rAutoFormat),
+ bSaveLater (false)
+{}
+
+ScAutoFormat::~ScAutoFormat()
+{
+ // Bei Aenderungen per StarOne wird nicht sofort gespeichert, sondern zuerst nur
+ // das SaveLater Flag gesetzt. Wenn das Flag noch gesetzt ist, jetzt speichern.
+
+ if (bSaveLater)
+ Save();
+}
+
+void ScAutoFormat::SetSaveLater( sal_Bool bSet )
+{
+ bSaveLater = bSet;
+}
+
+short ScAutoFormat::Compare(ScDataObject* pKey1, ScDataObject* pKey2) const
+{
+ String aStr1;
+ String aStr2;
+ ((ScAutoFormatData*)pKey1)->GetName(aStr1);
+ ((ScAutoFormatData*)pKey2)->GetName(aStr2);
+ String aStrStandard = ScGlobal::GetRscString(STR_STYLENAME_STANDARD);
+ if ( ScGlobal::GetpTransliteration()->isEqual( aStr1, aStrStandard ) )
+ return -1;
+ if ( ScGlobal::GetpTransliteration()->isEqual( aStr2, aStrStandard ) )
+ return 1;
+ return (short) ScGlobal::GetpTransliteration()->compareString( aStr1, aStr2 );
+}
+
+sal_Bool ScAutoFormat::Load()
+{
+ sal_Bool bRet = sal_True;
+
+ INetURLObject aURL;
+ SvtPathOptions aPathOpt;
+ aURL.SetSmartURL( aPathOpt.GetUserConfigPath() );
+ aURL.setFinalSlash();
+ aURL.Append( String( RTL_CONSTASCII_USTRINGPARAM( sAutoTblFmtName ) ) );
+
+ SfxMedium aMedium( aURL.GetMainURL(INetURLObject::NO_DECODE), STREAM_READ, sal_True );
+ SvStream* pStream = aMedium.GetInStream();
+ bRet = (pStream && pStream->GetError() == 0);
+ if (bRet)
+ {
+ SvStream& rStream = *pStream;
+ // Achtung hier muss ein allgemeiner Header gelesen werden
+ sal_uInt16 nVal = 0;
+ rStream >> nVal;
+ bRet = 0 == rStream.GetError();
+
+ ScAfVersions aVersions;
+
+ if (bRet)
+ {
+ if( nVal == AUTOFORMAT_ID_358 ||
+ (AUTOFORMAT_ID_504 <= nVal && nVal <= AUTOFORMAT_ID) )
+ {
+ sal_uInt16 nFileVers = SOFFICE_FILEFORMAT_40;
+ sal_uInt8 nChrSet, nCnt;
+ long nPos = rStream.Tell();
+ rStream >> nCnt >> nChrSet;
+ if( rStream.Tell() != sal_uLong(nPos + nCnt) )
+ {
+ DBG_ERRORFILE( "Der Header enthaelt mehr/neuere Daten" );
+ rStream.Seek( nPos + nCnt );
+ }
+ rStream.SetStreamCharSet( GetSOLoadTextEncoding( nChrSet, nFileVers ) );
+ rStream.SetVersion( nFileVers );
+ }
+
+ if( nVal == AUTOFORMAT_ID_358 || nVal == AUTOFORMAT_ID_X ||
+ (AUTOFORMAT_ID_504 <= nVal && nVal <= AUTOFORMAT_ID) )
+ {
+ aVersions.Load( rStream, nVal ); // Item-Versionen
+
+ ScAutoFormatData* pData;
+ sal_uInt16 nAnz = 0;
+ rStream >> nAnz;
+ bRet = (rStream.GetError() == 0);
+ for (sal_uInt16 i=0; bRet && (i < nAnz); i++)
+ {
+ pData = new ScAutoFormatData();
+ bRet = pData->Load(rStream, aVersions);
+ Insert(pData);
+ }
+ }
+#ifdef READ_OLDVERS
+ else
+ {
+ if( AUTOFORMAT_OLD_ID_NEW == nVal )
+ {
+ // alte Version der Versions laden
+ rStream >> aVersions.nFontVersion;
+ rStream >> aVersions.nFontHeightVersion;
+ rStream >> aVersions.nWeightVersion;
+ rStream >> aVersions.nPostureVersion;
+ rStream >> aVersions.nUnderlineVersion;
+ rStream >> aVersions.nCrossedOutVersion;
+ rStream >> aVersions.nContourVersion;
+ rStream >> aVersions.nShadowedVersion;
+ rStream >> aVersions.nColorVersion;
+ rStream >> aVersions.nHorJustifyVersion;
+ rStream >> aVersions.nVerJustifyVersion;
+ rStream >> aVersions.nOrientationVersion;
+ rStream >> aVersions.nBoolVersion;
+ rStream >> aVersions.nMarginVersion;
+ rStream >> aVersions.nBoxVersion;
+ rStream >> aVersions.nBrushVersion;
+ }
+ if( AUTOFORMAT_OLD_ID_OLD == nVal ||
+ AUTOFORMAT_OLD_ID_NEW == nVal )
+ {
+ ScAutoFormatData* pData;
+ sal_uInt16 nAnz = 0;
+ rStream >> nAnz;
+ bRet = 0 == rStream.GetError();
+ for( sal_uInt16 i=0; bRet && (i < nAnz); ++i )
+ {
+ pData = new ScAutoFormatData();
+ bRet = pData->LoadOld( rStream, aVersions );
+ Insert( pData );
+ }
+ }
+ else
+ bRet = false;
+ }
+#endif
+ }
+ }
+ bSaveLater = false;
+ return bRet;
+}
+
+sal_Bool ScAutoFormat::Save()
+{
+ sal_Bool bRet = sal_True;
+
+ INetURLObject aURL;
+ SvtPathOptions aPathOpt;
+ aURL.SetSmartURL( aPathOpt.GetUserConfigPath() );
+ aURL.setFinalSlash();
+ aURL.Append( String( RTL_CONSTASCII_USTRINGPARAM( sAutoTblFmtName ) ) );
+
+ SfxMedium aMedium( aURL.GetMainURL(INetURLObject::NO_DECODE), STREAM_WRITE, sal_True );
+ SvStream* pStream = aMedium.GetOutStream();
+ bRet = (pStream && pStream->GetError() == 0);
+ if (bRet)
+ {
+ SvStream& rStream = *pStream;
+ rStream.SetVersion( SOFFICE_FILEFORMAT_40 );
+
+ // Achtung hier muss ein allgemeiner Header gespeichert werden
+ sal_uInt16 nVal = AUTOFORMAT_ID;
+ rStream << nVal
+ << (sal_uInt8)2 // Anzahl von Zeichen des Headers incl. diesem
+ << (sal_uInt8)::GetSOStoreTextEncoding(
+ gsl_getSystemTextEncoding(), sal::static_int_cast<sal_uInt16>(rStream.GetVersion()) );
+ ScAfVersions::Write(rStream); // Item-Versionen
+
+ bRet = (rStream.GetError() == 0);
+ //-----------------------------------------------------------
+ rStream << (sal_uInt16)(nCount - 1);
+ bRet = (rStream.GetError() == 0);
+ for (sal_uInt16 i=1; bRet && (i < nCount); i++)
+ bRet = ((ScAutoFormatData*)pItems[i])->Save(rStream);
+ rStream.Flush();
+
+ aMedium.Commit();
+ }
+ bSaveLater = false;
+ return bRet;
+}
+
+sal_uInt16 ScAutoFormat::FindIndexPerName( const String& rName ) const
+{
+ String aName;
+
+ for( sal_uInt16 i=0; i<nCount ; i++ )
+ {
+ ScAutoFormatData* pItem = (ScAutoFormatData*)pItems[i];
+ pItem->GetName( aName );
+
+ if( aName == rName )
+ return i;
+ }
+
+ return 0;
+}
+
+
+
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */