1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 27 28 #include <tools/resid.hxx> 29 #include <tools/stream.hxx> 30 #include <tools/shl.hxx> 31 #include <vcl/svapp.hxx> 32 #include <sfx2/docfile.hxx> 33 #include <svl/urihelper.hxx> 34 #include <svl/zforlist.hxx> 35 #include <svl/zformat.hxx> 36 #include <unotools/pathoptions.hxx> 37 #include <sfx2/app.hxx> 38 #include <svx/dialmgr.hxx> 39 #ifndef _SVX_DIALOGS_HRC 40 #include <svx/dialogs.hrc> 41 #endif 42 43 #define READ_OLDVERS // erstmal noch alte Versionen lesen 44 #include <swtypes.hxx> 45 #include <doc.hxx> 46 #include <poolfmt.hxx> 47 #include <tblafmt.hxx> 48 #include <cellatr.hxx> 49 #include <SwStyleNameMapper.hxx> 50 51 // bis SO5PF 52 const sal_uInt16 AUTOFORMAT_ID_X = 9501; 53 const sal_uInt16 AUTOFORMAT_ID_358 = 9601; 54 const sal_uInt16 AUTOFORMAT_DATA_ID_X = 9502; 55 56 // ab SO5 57 //! in nachfolgenden Versionen muss der Betrag dieser IDs groesser sein 58 const sal_uInt16 AUTOFORMAT_ID_504 = 9801; 59 const sal_uInt16 AUTOFORMAT_DATA_ID_504 = 9802; 60 61 const sal_uInt16 AUTOFORMAT_ID_552 = 9901; 62 const sal_uInt16 AUTOFORMAT_DATA_ID_552 = 9902; 63 64 // --- from 641 on: CJK and CTL font settings 65 const sal_uInt16 AUTOFORMAT_ID_641 = 10001; 66 const sal_uInt16 AUTOFORMAT_DATA_ID_641 = 10002; 67 68 // --- from 680/dr14 on: diagonal frame lines 69 const sal_uInt16 AUTOFORMAT_ID_680DR14 = 10011; 70 const sal_uInt16 AUTOFORMAT_DATA_ID_680DR14 = 10012; 71 72 // --- from 680/dr25 on: #21549# store strings as UTF-8 73 const sal_uInt16 AUTOFORMAT_ID_680DR25 = 10021; 74 const sal_uInt16 AUTOFORMAT_DATA_ID_680DR25 = 10022; 75 76 // --- from DEV300/overline2 on: #5991# overline 77 const sal_uInt16 AUTOFORMAT_ID_300OVRLN = 10031; 78 const sal_uInt16 AUTOFORMAT_DATA_ID_300OVRLN = 10032; 79 80 // current version 81 const sal_uInt16 AUTOFORMAT_ID = AUTOFORMAT_ID_300OVRLN; 82 const sal_uInt16 AUTOFORMAT_DATA_ID = AUTOFORMAT_DATA_ID_300OVRLN; 83 84 85 #ifdef READ_OLDVERS 86 const sal_uInt16 AUTOFORMAT_OLD_ID = 8201; 87 const sal_uInt16 AUTOFORMAT_OLD_ID1 = 8301; 88 const sal_uInt16 AUTOFORMAT_OLD_DATA_ID = 8202; 89 #endif 90 91 92 SwBoxAutoFmt* SwTableAutoFmt::pDfltBoxAutoFmt = 0; 93 94 #define sAutoTblFmtName "autotbl.fmt" 95 96 // SwTable Auto-Format-Tabelle 97 SV_IMPL_PTRARR( _SwTableAutoFmtTbl, SwTableAutoFmt* ) 98 99 100 // Struct mit Versionsnummern der Items 101 102 struct SwAfVersions 103 { 104 public: 105 sal_uInt16 nFontVersion; 106 sal_uInt16 nFontHeightVersion; 107 sal_uInt16 nWeightVersion; 108 sal_uInt16 nPostureVersion; 109 sal_uInt16 nUnderlineVersion; 110 sal_uInt16 nOverlineVersion; 111 sal_uInt16 nCrossedOutVersion; 112 sal_uInt16 nContourVersion; 113 sal_uInt16 nShadowedVersion; 114 sal_uInt16 nColorVersion; 115 sal_uInt16 nBoxVersion; 116 sal_uInt16 nLineVersion; 117 sal_uInt16 nBrushVersion; 118 119 sal_uInt16 nAdjustVersion; 120 121 sal_uInt16 nHorJustifyVersion; 122 sal_uInt16 nVerJustifyVersion; 123 sal_uInt16 nOrientationVersion; 124 sal_uInt16 nMarginVersion; 125 sal_uInt16 nBoolVersion; 126 sal_uInt16 nInt32Version; 127 sal_uInt16 nRotateModeVersion; 128 129 sal_uInt16 nNumFmtVersion; 130 131 SwAfVersions(); 132 void Load( SvStream& rStream, sal_uInt16 nVer ); 133 }; 134 135 SwAfVersions::SwAfVersions() : 136 nFontVersion(0), 137 nFontHeightVersion(0), 138 nWeightVersion(0), 139 nPostureVersion(0), 140 nUnderlineVersion(0), 141 nOverlineVersion(0), 142 nCrossedOutVersion(0), 143 nContourVersion(0), 144 nShadowedVersion(0), 145 nColorVersion(0), 146 nBoxVersion(0), 147 nLineVersion(0), 148 nBrushVersion(0), 149 nAdjustVersion(0), 150 nHorJustifyVersion(0), 151 nVerJustifyVersion(0), 152 nOrientationVersion(0), 153 nMarginVersion(0), 154 nBoolVersion(0), 155 nInt32Version(0), 156 nRotateModeVersion(0), 157 nNumFmtVersion(0) 158 { 159 } 160 161 void SwAfVersions::Load( SvStream& rStream, sal_uInt16 nVer ) 162 { 163 rStream >> nFontVersion; 164 rStream >> nFontHeightVersion; 165 rStream >> nWeightVersion; 166 rStream >> nPostureVersion; 167 rStream >> nUnderlineVersion; 168 if ( nVer >= AUTOFORMAT_ID_300OVRLN ) 169 rStream >> nOverlineVersion; 170 rStream >> nCrossedOutVersion; 171 rStream >> nContourVersion; 172 rStream >> nShadowedVersion; 173 rStream >> nColorVersion; 174 rStream >> nBoxVersion; 175 if ( nVer >= AUTOFORMAT_ID_680DR14 ) 176 rStream >> nLineVersion; 177 rStream >> nBrushVersion; 178 rStream >> nAdjustVersion; 179 rStream >> nHorJustifyVersion; 180 rStream >> nVerJustifyVersion; 181 rStream >> nOrientationVersion; 182 rStream >> nMarginVersion; 183 rStream >> nBoolVersion; 184 if ( nVer >= AUTOFORMAT_ID_504 ) 185 { 186 rStream >> nInt32Version; 187 rStream >> nRotateModeVersion; 188 } 189 rStream >> nNumFmtVersion; 190 } 191 192 // --------------------------------------------------------------------------- 193 194 SwBoxAutoFmt::SwBoxAutoFmt() 195 : aFont( *(SvxFontItem*)GetDfltAttr( RES_CHRATR_FONT ) ), 196 aHeight( 240, 100, RES_CHRATR_FONTSIZE ), 197 aWeight( WEIGHT_NORMAL, RES_CHRATR_WEIGHT ), 198 aPosture( ITALIC_NONE, RES_CHRATR_POSTURE ), 199 200 aCJKFont( *(SvxFontItem*)GetDfltAttr( RES_CHRATR_CJK_FONT ) ), 201 aCJKHeight( 240, 100, RES_CHRATR_CJK_FONTSIZE ), 202 aCJKWeight( WEIGHT_NORMAL, RES_CHRATR_CJK_WEIGHT ), 203 aCJKPosture( ITALIC_NONE, RES_CHRATR_CJK_POSTURE ), 204 205 aCTLFont( *(SvxFontItem*)GetDfltAttr( RES_CHRATR_CTL_FONT ) ), 206 aCTLHeight( 240, 100, RES_CHRATR_CTL_FONTSIZE ), 207 aCTLWeight( WEIGHT_NORMAL, RES_CHRATR_CTL_WEIGHT ), 208 aCTLPosture( ITALIC_NONE, RES_CHRATR_CTL_POSTURE ), 209 210 aUnderline( UNDERLINE_NONE, RES_CHRATR_UNDERLINE ), 211 aOverline( UNDERLINE_NONE, RES_CHRATR_OVERLINE ), 212 aCrossedOut( STRIKEOUT_NONE, RES_CHRATR_CROSSEDOUT ), 213 aContour( sal_False, RES_CHRATR_CONTOUR ), 214 aShadowed( sal_False, RES_CHRATR_SHADOWED ), 215 aColor( RES_CHRATR_COLOR ), 216 aBox( RES_BOX ), 217 aTLBR( 0 ), 218 aBLTR( 0 ), 219 aBackground( RES_BACKGROUND ), 220 aAdjust( SVX_ADJUST_LEFT, RES_PARATR_ADJUST ), 221 aHorJustify( SVX_HOR_JUSTIFY_STANDARD, 0), 222 aVerJustify( SVX_VER_JUSTIFY_STANDARD, 0), 223 aStacked( 0 ), 224 aMargin( 0 ), 225 aLinebreak( 0 ), 226 aRotateAngle( 0 ), 227 228 // FIXME - add attribute IDs for the diagonal line items 229 // aTLBR( RES_... ), 230 // aBLTR( RES_... ), 231 aRotateMode( SVX_ROTATE_MODE_STANDARD, 0 ) 232 { 233 eSysLanguage = eNumFmtLanguage = static_cast<LanguageType>(::GetAppLanguage()); 234 aBox.SetDistance( 55 ); 235 } 236 237 238 SwBoxAutoFmt::SwBoxAutoFmt( const SwBoxAutoFmt& rNew ) 239 : aFont( rNew.aFont ), 240 aHeight( rNew.aHeight ), 241 aWeight( rNew.aWeight ), 242 aPosture( rNew.aPosture ), 243 aCJKFont( rNew.aCJKFont ), 244 aCJKHeight( rNew.aCJKHeight ), 245 aCJKWeight( rNew.aCJKWeight ), 246 aCJKPosture( rNew.aCJKPosture ), 247 aCTLFont( rNew.aCTLFont ), 248 aCTLHeight( rNew.aCTLHeight ), 249 aCTLWeight( rNew.aCTLWeight ), 250 aCTLPosture( rNew.aCTLPosture ), 251 aUnderline( rNew.aUnderline ), 252 aOverline( rNew.aOverline ), 253 aCrossedOut( rNew.aCrossedOut ), 254 aContour( rNew.aContour ), 255 aShadowed( rNew.aShadowed ), 256 aColor( rNew.aColor ), 257 aBox( rNew.aBox ), 258 aTLBR( rNew.aTLBR ), 259 aBLTR( rNew.aBLTR ), 260 aBackground( rNew.aBackground ), 261 aAdjust( rNew.aAdjust ), 262 aHorJustify( rNew.aHorJustify ), 263 aVerJustify( rNew.aVerJustify ), 264 aStacked( rNew.aStacked ), 265 aMargin( rNew.aMargin ), 266 aLinebreak( rNew.aLinebreak ), 267 aRotateAngle( rNew.aRotateAngle ), 268 aRotateMode( rNew.aRotateMode ), 269 sNumFmtString( rNew.sNumFmtString ), 270 eSysLanguage( rNew.eSysLanguage ), 271 eNumFmtLanguage( rNew.eNumFmtLanguage ) 272 { 273 } 274 275 276 SwBoxAutoFmt::~SwBoxAutoFmt() 277 { 278 } 279 280 SwBoxAutoFmt& SwBoxAutoFmt::operator=( const SwBoxAutoFmt& rNew ) 281 { 282 aFont = rNew.aFont; 283 aHeight = rNew.aHeight; 284 aWeight = rNew.aWeight; 285 aPosture = rNew.aPosture; 286 aCJKFont = rNew.aCJKFont; 287 aCJKHeight = rNew.aCJKHeight; 288 aCJKWeight = rNew.aCJKWeight; 289 aCJKPosture = rNew.aCJKPosture; 290 aCTLFont = rNew.aCTLFont; 291 aCTLHeight = rNew.aCTLHeight; 292 aCTLWeight = rNew.aCTLWeight; 293 aCTLPosture = rNew.aCTLPosture; 294 aUnderline = rNew.aUnderline; 295 aOverline = rNew.aOverline; 296 aCrossedOut = rNew.aCrossedOut; 297 aContour = rNew.aContour; 298 aShadowed = rNew.aShadowed; 299 aColor = rNew.aColor; 300 SetAdjust( rNew.aAdjust ); 301 aBox = rNew.aBox; 302 aTLBR = rNew.aTLBR; 303 aBLTR = rNew.aBLTR; 304 aBackground = rNew.aBackground; 305 306 aHorJustify = rNew.aHorJustify; 307 aVerJustify = rNew.aVerJustify; 308 aStacked.SetValue( rNew.aStacked.GetValue() ); 309 aMargin = rNew.aMargin; 310 aLinebreak.SetValue( rNew.aLinebreak.GetValue() ); 311 aRotateAngle.SetValue( rNew.aRotateAngle.GetValue() ); 312 aRotateMode.SetValue( rNew.aRotateMode.GetValue() ); 313 314 sNumFmtString = rNew.sNumFmtString; 315 eSysLanguage = rNew.eSysLanguage; 316 eNumFmtLanguage = rNew.eNumFmtLanguage; 317 318 return *this; 319 } 320 321 322 #define READ( aItem, aItemType, nVers )\ 323 pNew = aItem.Create(rStream, nVers ); \ 324 aItem = *(aItemType*)pNew; \ 325 delete pNew; 326 327 sal_Bool SwBoxAutoFmt::Load( SvStream& rStream, const SwAfVersions& rVersions, sal_uInt16 nVer ) 328 { 329 SfxPoolItem* pNew; 330 SvxOrientationItem aOrientation( SVX_ORIENTATION_STANDARD, 0); 331 332 READ( aFont, SvxFontItem , rVersions.nFontVersion) 333 334 if( rStream.GetStreamCharSet() == aFont.GetCharSet() ) 335 aFont.SetCharSet(::gsl_getSystemTextEncoding()); 336 337 READ( aHeight, SvxFontHeightItem , rVersions.nFontHeightVersion) 338 READ( aWeight, SvxWeightItem , rVersions.nWeightVersion) 339 READ( aPosture, SvxPostureItem , rVersions.nPostureVersion) 340 // --- from 641 on: CJK and CTL font settings 341 if( AUTOFORMAT_DATA_ID_641 <= nVer ) 342 { 343 READ( aCJKFont, SvxFontItem , rVersions.nFontVersion) 344 READ( aCJKHeight, SvxFontHeightItem , rVersions.nFontHeightVersion) 345 READ( aCJKWeight, SvxWeightItem , rVersions.nWeightVersion) 346 READ( aCJKPosture, SvxPostureItem , rVersions.nPostureVersion) 347 READ( aCTLFont, SvxFontItem , rVersions.nFontVersion) 348 READ( aCTLHeight, SvxFontHeightItem , rVersions.nFontHeightVersion) 349 READ( aCTLWeight, SvxWeightItem , rVersions.nWeightVersion) 350 READ( aCTLPosture, SvxPostureItem , rVersions.nPostureVersion) 351 } 352 READ( aUnderline, SvxUnderlineItem , rVersions.nUnderlineVersion) 353 if( nVer >= AUTOFORMAT_DATA_ID_300OVRLN ) 354 { 355 READ( aOverline, SvxOverlineItem , rVersions.nOverlineVersion) 356 } 357 READ( aCrossedOut, SvxCrossedOutItem , rVersions.nCrossedOutVersion) 358 READ( aContour, SvxContourItem , rVersions.nContourVersion) 359 READ( aShadowed, SvxShadowedItem , rVersions.nShadowedVersion) 360 READ( aColor, SvxColorItem , rVersions.nColorVersion) 361 362 READ( aBox, SvxBoxItem , rVersions.nBoxVersion) 363 364 // --- from 680/dr14 on: diagonal frame lines 365 if( nVer >= AUTOFORMAT_DATA_ID_680DR14 ) 366 { 367 READ( aTLBR, SvxLineItem, rVersions.nLineVersion) 368 READ( aBLTR, SvxLineItem, rVersions.nLineVersion) 369 } 370 371 READ( aBackground, SvxBrushItem , rVersions.nBrushVersion) 372 373 pNew = aAdjust.Create(rStream, rVersions.nAdjustVersion ); 374 SetAdjust( *(SvxAdjustItem*)pNew ); 375 delete pNew; 376 377 READ( aHorJustify, SvxHorJustifyItem , rVersions.nHorJustifyVersion) 378 READ( aVerJustify, SvxVerJustifyItem , rVersions.nVerJustifyVersion) 379 READ( aOrientation, SvxOrientationItem , rVersions.nOrientationVersion) 380 READ( aMargin, SvxMarginItem , rVersions.nMarginVersion) 381 382 pNew = aLinebreak.Create(rStream, rVersions.nBoolVersion ); 383 aLinebreak.SetValue( ((SfxBoolItem*)pNew)->GetValue() ); 384 delete pNew; 385 386 if ( nVer >= AUTOFORMAT_DATA_ID_504 ) 387 { 388 pNew = aRotateAngle.Create( rStream, rVersions.nInt32Version ); 389 aRotateAngle.SetValue( ((SfxInt32Item*)pNew)->GetValue() ); 390 delete pNew; 391 pNew = aRotateMode.Create( rStream, rVersions.nRotateModeVersion ); 392 aRotateMode.SetValue( ((SvxRotateModeItem*)pNew)->GetValue() ); 393 delete pNew; 394 } 395 396 if( 0 == rVersions.nNumFmtVersion ) 397 { 398 sal_uInt16 eSys, eLge; 399 // --- from 680/dr25 on: #21549# store strings as UTF-8 400 CharSet eCharSet = (nVer >= AUTOFORMAT_ID_680DR25) ? RTL_TEXTENCODING_UTF8 : rStream.GetStreamCharSet(); 401 rStream.ReadByteString( sNumFmtString, eCharSet ) 402 >> eSys >> eLge; 403 eSysLanguage = (LanguageType) eSys; 404 eNumFmtLanguage = (LanguageType) eLge; 405 if ( eSysLanguage == LANGUAGE_SYSTEM ) // von alten Versionen (Calc) 406 eSysLanguage = static_cast<LanguageType>(::GetAppLanguage()); 407 } 408 409 aStacked.SetValue( aOrientation.IsStacked() ); 410 aRotateAngle.SetValue( aOrientation.GetRotation( aRotateAngle.GetValue() ) ); 411 412 return 0 == rStream.GetError(); 413 } 414 415 #ifdef READ_OLDVERS 416 417 sal_Bool SwBoxAutoFmt::LoadOld( SvStream& rStream, sal_uInt16 aLoadVer[] ) 418 { 419 SfxPoolItem* pNew; 420 READ( aFont, SvxFontItem , 0) 421 422 if( rStream.GetStreamCharSet() == aFont.GetCharSet() ) 423 aFont.SetCharSet(::gsl_getSystemTextEncoding()); 424 425 READ( aHeight, SvxFontHeightItem , 1) 426 READ( aWeight, SvxWeightItem , 2) 427 READ( aPosture, SvxPostureItem , 3) 428 READ( aUnderline, SvxUnderlineItem , 4) 429 READ( aCrossedOut, SvxCrossedOutItem , 5) 430 READ( aContour, SvxContourItem , 6) 431 READ( aShadowed, SvxShadowedItem , 7) 432 READ( aColor, SvxColorItem , 8) 433 434 pNew = aAdjust.Create(rStream, aLoadVer[ 9 ] ); 435 SetAdjust( *(SvxAdjustItem*)pNew ); 436 delete pNew; 437 438 READ( aBox, SvxBoxItem , 10) 439 READ( aBackground, SvxBrushItem , 11) 440 441 return 0 == rStream.GetError(); 442 } 443 444 #endif 445 446 447 sal_Bool SwBoxAutoFmt::Save( SvStream& rStream ) const 448 { 449 SvxOrientationItem aOrientation( aRotateAngle.GetValue(), aStacked.GetValue(), 0 ); 450 451 aFont.Store( rStream, aFont.GetVersion(SOFFICE_FILEFORMAT_40) ); 452 aHeight.Store( rStream, aHeight.GetVersion(SOFFICE_FILEFORMAT_40) ); 453 aWeight.Store( rStream, aWeight.GetVersion(SOFFICE_FILEFORMAT_40) ); 454 aPosture.Store( rStream, aPosture.GetVersion(SOFFICE_FILEFORMAT_40) ); 455 aCJKFont.Store( rStream, aCJKFont.GetVersion(SOFFICE_FILEFORMAT_40) ); 456 aCJKHeight.Store( rStream, aCJKHeight.GetVersion(SOFFICE_FILEFORMAT_40) ); 457 aCJKWeight.Store( rStream, aCJKWeight.GetVersion(SOFFICE_FILEFORMAT_40) ); 458 aCJKPosture.Store( rStream, aCJKPosture.GetVersion(SOFFICE_FILEFORMAT_40) ); 459 aCTLFont.Store( rStream, aCTLFont.GetVersion(SOFFICE_FILEFORMAT_40) ); 460 aCTLHeight.Store( rStream, aCTLHeight.GetVersion(SOFFICE_FILEFORMAT_40) ); 461 aCTLWeight.Store( rStream, aCTLWeight.GetVersion(SOFFICE_FILEFORMAT_40) ); 462 aCTLPosture.Store( rStream, aCTLPosture.GetVersion(SOFFICE_FILEFORMAT_40) ); 463 aUnderline.Store( rStream, aUnderline.GetVersion(SOFFICE_FILEFORMAT_40) ); 464 aOverline.Store( rStream, aOverline.GetVersion(SOFFICE_FILEFORMAT_40) ); 465 aCrossedOut.Store( rStream, aCrossedOut.GetVersion(SOFFICE_FILEFORMAT_40) ); 466 aContour.Store( rStream, aContour.GetVersion(SOFFICE_FILEFORMAT_40) ); 467 aShadowed.Store( rStream, aShadowed.GetVersion(SOFFICE_FILEFORMAT_40) ); 468 aColor.Store( rStream, aColor.GetVersion(SOFFICE_FILEFORMAT_40) ); 469 aBox.Store( rStream, aBox.GetVersion(SOFFICE_FILEFORMAT_40) ); 470 aTLBR.Store( rStream, aTLBR.GetVersion(SOFFICE_FILEFORMAT_40) ); 471 aBLTR.Store( rStream, aBLTR.GetVersion(SOFFICE_FILEFORMAT_40) ); 472 aBackground.Store( rStream, aBackground.GetVersion(SOFFICE_FILEFORMAT_40) ); 473 474 aAdjust.Store( rStream, aAdjust.GetVersion(SOFFICE_FILEFORMAT_40) ); 475 476 aHorJustify.Store( rStream, aHorJustify.GetVersion(SOFFICE_FILEFORMAT_40) ); 477 aVerJustify.Store( rStream, aVerJustify.GetVersion(SOFFICE_FILEFORMAT_40) ); 478 aOrientation.Store( rStream, aOrientation.GetVersion(SOFFICE_FILEFORMAT_40) ); 479 aMargin.Store( rStream, aMargin.GetVersion(SOFFICE_FILEFORMAT_40) ); 480 aLinebreak.Store( rStream, aLinebreak.GetVersion(SOFFICE_FILEFORMAT_40) ); 481 // Calc Rotation ab SO5 482 aRotateAngle.Store( rStream, aRotateAngle.GetVersion(SOFFICE_FILEFORMAT_40) ); 483 aRotateMode.Store( rStream, aRotateMode.GetVersion(SOFFICE_FILEFORMAT_40) ); 484 485 // --- from 680/dr25 on: #21549# store strings as UTF-8 486 rStream.WriteByteString( sNumFmtString, RTL_TEXTENCODING_UTF8 ) 487 << (sal_uInt16)eSysLanguage << (sal_uInt16)eNumFmtLanguage; 488 489 return 0 == rStream.GetError(); 490 } 491 492 493 sal_Bool SwBoxAutoFmt::SaveVersionNo( SvStream& rStream ) const 494 { 495 rStream << aFont.GetVersion( SOFFICE_FILEFORMAT_40 ); 496 rStream << aHeight.GetVersion( SOFFICE_FILEFORMAT_40 ); 497 rStream << aWeight.GetVersion( SOFFICE_FILEFORMAT_40 ); 498 rStream << aPosture.GetVersion( SOFFICE_FILEFORMAT_40 ); 499 rStream << aUnderline.GetVersion( SOFFICE_FILEFORMAT_40 ); 500 rStream << aOverline.GetVersion( SOFFICE_FILEFORMAT_40 ); 501 rStream << aCrossedOut.GetVersion( SOFFICE_FILEFORMAT_40 ); 502 rStream << aContour.GetVersion( SOFFICE_FILEFORMAT_40 ); 503 rStream << aShadowed.GetVersion( SOFFICE_FILEFORMAT_40 ); 504 rStream << aColor.GetVersion( SOFFICE_FILEFORMAT_40 ); 505 rStream << aBox.GetVersion( SOFFICE_FILEFORMAT_40 ); 506 rStream << aTLBR.GetVersion( SOFFICE_FILEFORMAT_40 ); 507 rStream << aBackground.GetVersion( SOFFICE_FILEFORMAT_40 ); 508 509 rStream << aAdjust.GetVersion( SOFFICE_FILEFORMAT_40 ); 510 511 rStream << aHorJustify.GetVersion( SOFFICE_FILEFORMAT_40 ); 512 rStream << aVerJustify.GetVersion( SOFFICE_FILEFORMAT_40 ); 513 rStream << SvxOrientationItem(SVX_ORIENTATION_STANDARD, 0).GetVersion( SOFFICE_FILEFORMAT_40 ); 514 rStream << aMargin.GetVersion( SOFFICE_FILEFORMAT_40 ); 515 rStream << aLinebreak.GetVersion( SOFFICE_FILEFORMAT_40 ); 516 rStream << aRotateAngle.GetVersion( SOFFICE_FILEFORMAT_40 ); 517 rStream << aRotateMode.GetVersion( SOFFICE_FILEFORMAT_40 ); 518 519 rStream << (sal_uInt16)0; // NumberFormat 520 521 return 0 == rStream.GetError(); 522 } 523 524 525 SwTableAutoFmt::SwTableAutoFmt( const String& rName ) 526 : aName( rName ), nStrResId( USHRT_MAX ) 527 { 528 bInclFont = sal_True; 529 bInclJustify = sal_True; 530 bInclFrame = sal_True; 531 bInclBackground = sal_True; 532 bInclValueFormat = sal_True; 533 bInclWidthHeight = sal_True; 534 535 memset( aBoxAutoFmt, 0, sizeof( aBoxAutoFmt ) ); 536 } 537 538 539 SwTableAutoFmt::SwTableAutoFmt( const SwTableAutoFmt& rNew ) 540 { 541 for( sal_uInt8 n = 0; n < 16; ++n ) 542 aBoxAutoFmt[ n ] = 0; 543 *this = rNew; 544 } 545 546 SwTableAutoFmt& SwTableAutoFmt::operator=( const SwTableAutoFmt& rNew ) 547 { 548 for( sal_uInt8 n = 0; n < 16; ++n ) 549 { 550 if( aBoxAutoFmt[ n ] ) 551 delete aBoxAutoFmt[ n ]; 552 553 SwBoxAutoFmt* pFmt = rNew.aBoxAutoFmt[ n ]; 554 if( pFmt ) // ist gesetzt -> kopieren 555 aBoxAutoFmt[ n ] = new SwBoxAutoFmt( *pFmt ); 556 else // sonst default 557 aBoxAutoFmt[ n ] = 0; 558 } 559 560 aName = rNew.aName; 561 nStrResId = rNew.nStrResId; 562 bInclFont = rNew.bInclFont; 563 bInclJustify = rNew.bInclJustify; 564 bInclFrame = rNew.bInclFrame; 565 bInclBackground = rNew.bInclBackground; 566 bInclValueFormat = rNew.bInclValueFormat; 567 bInclWidthHeight = rNew.bInclWidthHeight; 568 569 return *this; 570 } 571 572 573 SwTableAutoFmt::~SwTableAutoFmt() 574 { 575 SwBoxAutoFmt** ppFmt = aBoxAutoFmt; 576 for( sal_uInt8 n = 0; n < 16; ++n, ++ppFmt ) 577 if( *ppFmt ) 578 delete *ppFmt; 579 } 580 581 582 void SwTableAutoFmt::SetBoxFmt( const SwBoxAutoFmt& rNew, sal_uInt8 nPos ) 583 { 584 ASSERT( nPos < 16, "falscher Bereich" ); 585 586 SwBoxAutoFmt* pFmt = aBoxAutoFmt[ nPos ]; 587 if( pFmt ) // ist gesetzt -> kopieren 588 *aBoxAutoFmt[ nPos ] = rNew; 589 else // sonst neu setzen 590 aBoxAutoFmt[ nPos ] = new SwBoxAutoFmt( rNew ); 591 } 592 593 594 const SwBoxAutoFmt& SwTableAutoFmt::GetBoxFmt( sal_uInt8 nPos ) const 595 { 596 ASSERT( nPos < 16, "falscher Bereich" ); 597 598 SwBoxAutoFmt* pFmt = aBoxAutoFmt[ nPos ]; 599 if( pFmt ) // ist gesetzt -> kopieren 600 return *pFmt; 601 else // sonst den default returnen 602 { 603 // falls noch nicht vorhanden: 604 if( !pDfltBoxAutoFmt ) 605 pDfltBoxAutoFmt = new SwBoxAutoFmt; 606 return *pDfltBoxAutoFmt; 607 } 608 } 609 610 611 612 SwBoxAutoFmt& SwTableAutoFmt::UpdateFromSet( sal_uInt8 nPos, 613 const SfxItemSet& rSet, 614 UpdateFlags eFlags, 615 SvNumberFormatter* pNFmtr ) 616 { 617 ASSERT( nPos < 16, "falscher Bereich" ); 618 619 SwBoxAutoFmt* pFmt = aBoxAutoFmt[ nPos ]; 620 if( !pFmt ) // ist gesetzt -> kopieren 621 { 622 pFmt = new SwBoxAutoFmt; 623 aBoxAutoFmt[ nPos ] = pFmt; 624 } 625 626 if( UPDATE_CHAR & eFlags ) 627 { 628 pFmt->SetFont( (SvxFontItem&)rSet.Get( RES_CHRATR_FONT ) ); 629 pFmt->SetHeight( (SvxFontHeightItem&)rSet.Get( RES_CHRATR_FONTSIZE ) ); 630 pFmt->SetWeight( (SvxWeightItem&)rSet.Get( RES_CHRATR_WEIGHT ) ); 631 pFmt->SetPosture( (SvxPostureItem&)rSet.Get( RES_CHRATR_POSTURE ) ); 632 pFmt->SetCJKFont( (SvxFontItem&)rSet.Get( RES_CHRATR_CJK_FONT ) ); 633 pFmt->SetCJKHeight( (SvxFontHeightItem&)rSet.Get( RES_CHRATR_CJK_FONTSIZE ) ); 634 pFmt->SetCJKWeight( (SvxWeightItem&)rSet.Get( RES_CHRATR_CJK_WEIGHT ) ); 635 pFmt->SetCJKPosture( (SvxPostureItem&)rSet.Get( RES_CHRATR_CJK_POSTURE ) ); 636 pFmt->SetCTLFont( (SvxFontItem&)rSet.Get( RES_CHRATR_CTL_FONT ) ); 637 pFmt->SetCTLHeight( (SvxFontHeightItem&)rSet.Get( RES_CHRATR_CTL_FONTSIZE ) ); 638 pFmt->SetCTLWeight( (SvxWeightItem&)rSet.Get( RES_CHRATR_CTL_WEIGHT ) ); 639 pFmt->SetCTLPosture( (SvxPostureItem&)rSet.Get( RES_CHRATR_CTL_POSTURE ) ); 640 pFmt->SetUnderline( (SvxUnderlineItem&)rSet.Get( RES_CHRATR_UNDERLINE ) ); 641 pFmt->SetOverline( (SvxOverlineItem&)rSet.Get( RES_CHRATR_OVERLINE ) ); 642 pFmt->SetCrossedOut( (SvxCrossedOutItem&)rSet.Get( RES_CHRATR_CROSSEDOUT ) ); 643 pFmt->SetContour( (SvxContourItem&)rSet.Get( RES_CHRATR_CONTOUR ) ); 644 pFmt->SetShadowed( (SvxShadowedItem&)rSet.Get( RES_CHRATR_SHADOWED ) ); 645 pFmt->SetColor( (SvxColorItem&)rSet.Get( RES_CHRATR_COLOR ) ); 646 pFmt->SetAdjust( (SvxAdjustItem&)rSet.Get( RES_PARATR_ADJUST ) ); 647 } 648 if( UPDATE_BOX & eFlags ) 649 { 650 pFmt->SetBox( (SvxBoxItem&)rSet.Get( RES_BOX ) ); 651 // FIXME - add attribute IDs for the diagonal line items 652 // pFmt->SetTLBR( (SvxLineItem&)rSet.Get( RES_... ) ); 653 // pFmt->SetBLTR( (SvxLineItem&)rSet.Get( RES_... ) ); 654 pFmt->SetBackground( (SvxBrushItem&)rSet.Get( RES_BACKGROUND ) ); 655 656 const SwTblBoxNumFormat* pNumFmtItem; 657 const SvNumberformat* pNumFormat = 0; 658 if( SFX_ITEM_SET == rSet.GetItemState( RES_BOXATR_FORMAT, sal_True, 659 (const SfxPoolItem**)&pNumFmtItem ) && pNFmtr && 660 0 != (pNumFormat = pNFmtr->GetEntry( pNumFmtItem->GetValue() )) ) 661 pFmt->SetValueFormat( ((SvNumberformat*)pNumFormat)->GetFormatstring(), 662 pNumFormat->GetLanguage(), 663 static_cast<LanguageType>(::GetAppLanguage())); 664 else 665 { 666 // defaulten 667 pFmt->SetValueFormat( aEmptyStr, LANGUAGE_SYSTEM, 668 static_cast<LanguageType>(::GetAppLanguage() )); 669 } 670 } 671 // den Rest koennen wir nicht, Calc spezifisch 672 673 return *pFmt; 674 } 675 676 677 void SwTableAutoFmt::UpdateToSet( sal_uInt8 nPos, SfxItemSet& rSet, 678 UpdateFlags eFlags, SvNumberFormatter* pNFmtr ) const 679 { 680 const SwBoxAutoFmt& rChg = GetBoxFmt( nPos ); 681 682 if( UPDATE_CHAR & eFlags ) 683 { 684 if( IsFont() ) 685 { 686 rSet.Put( rChg.GetFont() ); 687 rSet.Put( rChg.GetHeight() ); 688 rSet.Put( rChg.GetWeight() ); 689 rSet.Put( rChg.GetPosture() ); 690 // #103065# do not insert empty CJK font 691 const SvxFontItem& rCJKFont = rChg.GetCJKFont(); 692 if( rCJKFont.GetStyleName().Len() ) 693 { 694 rSet.Put( rChg.GetCJKFont() ); 695 rSet.Put( rChg.GetCJKHeight() ); 696 rSet.Put( rChg.GetCJKWeight() ); 697 rSet.Put( rChg.GetCJKPosture() ); 698 } 699 else 700 { 701 rSet.Put( rChg.GetHeight(), RES_CHRATR_CJK_FONTSIZE ); 702 rSet.Put( rChg.GetWeight(), RES_CHRATR_CJK_WEIGHT ); 703 rSet.Put( rChg.GetPosture(), RES_CHRATR_CJK_POSTURE ); 704 } 705 // #103065# do not insert empty CTL font 706 const SvxFontItem& rCTLFont = rChg.GetCTLFont(); 707 if( rCTLFont.GetStyleName().Len() ) 708 { 709 rSet.Put( rChg.GetCTLFont() ); 710 rSet.Put( rChg.GetCTLHeight() ); 711 rSet.Put( rChg.GetCTLWeight() ); 712 rSet.Put( rChg.GetCTLPosture() ); 713 } 714 else 715 { 716 rSet.Put( rChg.GetHeight(), RES_CHRATR_CTL_FONTSIZE ); 717 rSet.Put( rChg.GetWeight(), RES_CHRATR_CTL_WEIGHT ); 718 rSet.Put( rChg.GetPosture(), RES_CHRATR_CTL_POSTURE ); 719 } 720 rSet.Put( rChg.GetUnderline() ); 721 rSet.Put( rChg.GetOverline() ); 722 rSet.Put( rChg.GetCrossedOut() ); 723 rSet.Put( rChg.GetContour() ); 724 rSet.Put( rChg.GetShadowed() ); 725 rSet.Put( rChg.GetColor() ); 726 } 727 if( IsJustify() ) 728 rSet.Put( rChg.GetAdjust() ); 729 } 730 731 if( UPDATE_BOX & eFlags ) 732 { 733 if( IsFrame() ) 734 { 735 rSet.Put( rChg.GetBox() ); 736 // FIXME - uncomment the lines to put the diagonal line items 737 // rSet.Put( rChg.GetTLBR() ); 738 // rSet.Put( rChg.GetBLTR() ); 739 } 740 if( IsBackground() ) 741 rSet.Put( rChg.GetBackground() ); 742 743 if( IsValueFormat() && pNFmtr ) 744 { 745 String sFmt; LanguageType eLng, eSys; 746 rChg.GetValueFormat( sFmt, eLng, eSys ); 747 if( sFmt.Len() ) 748 { 749 short nType; 750 sal_Bool bNew; 751 xub_StrLen nCheckPos; 752 sal_uInt32 nKey = pNFmtr->GetIndexPuttingAndConverting( sFmt, eLng, 753 eSys, nType, bNew, nCheckPos); 754 rSet.Put( SwTblBoxNumFormat( nKey )); 755 } 756 else 757 rSet.ClearItem( RES_BOXATR_FORMAT ); 758 } 759 } 760 761 // den Rest koennen wir nicht, Calc spezifisch 762 } 763 764 765 sal_Bool SwTableAutoFmt::Load( SvStream& rStream, const SwAfVersions& rVersions ) 766 { 767 sal_Bool bRet = sal_True; 768 sal_uInt16 nVal = 0; 769 rStream >> nVal; 770 bRet = 0 == rStream.GetError(); 771 772 if( bRet && (nVal == AUTOFORMAT_DATA_ID_X || 773 (AUTOFORMAT_DATA_ID_504 <= nVal && nVal <= AUTOFORMAT_DATA_ID)) ) 774 { 775 sal_Bool b; 776 // --- from 680/dr25 on: #21549# store strings as UTF-8 777 CharSet eCharSet = (nVal >= AUTOFORMAT_ID_680DR25) ? RTL_TEXTENCODING_UTF8 : rStream.GetStreamCharSet(); 778 rStream.ReadByteString( aName, eCharSet ); 779 if( AUTOFORMAT_DATA_ID_552 <= nVal ) 780 { 781 rStream >> nStrResId; 782 sal_uInt16 nId = RID_SVXSTR_TBLAFMT_BEGIN + nStrResId; 783 if( RID_SVXSTR_TBLAFMT_BEGIN <= nId && 784 nId < RID_SVXSTR_TBLAFMT_END ) 785 { 786 aName = SVX_RESSTR( nId ); 787 } 788 else 789 nStrResId = USHRT_MAX; 790 } 791 rStream >> b; bInclFont = b; 792 rStream >> b; bInclJustify = b; 793 rStream >> b; bInclFrame = b; 794 rStream >> b; bInclBackground = b; 795 rStream >> b; bInclValueFormat = b; 796 rStream >> b; bInclWidthHeight = b; 797 798 bRet = 0 == rStream.GetError(); 799 800 for( sal_uInt8 i = 0; i < 16; ++i ) 801 { 802 SwBoxAutoFmt* pFmt = new SwBoxAutoFmt; 803 bRet = pFmt->Load( rStream, rVersions, nVal ); 804 if( bRet ) 805 aBoxAutoFmt[ i ] = pFmt; 806 else 807 { 808 delete pFmt; 809 break; 810 } 811 } 812 } 813 return bRet; 814 } 815 816 #ifdef READ_OLDVERS 817 818 sal_Bool SwTableAutoFmt::LoadOld( SvStream& rStream, sal_uInt16 aLoadVer[] ) 819 { 820 sal_Bool bRet = sal_True; 821 sal_uInt16 nVal = 0; 822 rStream >> nVal; 823 bRet = 0 == rStream.GetError(); 824 825 if( bRet && ( AUTOFORMAT_OLD_DATA_ID == nVal )) 826 { 827 sal_Bool b; 828 rStream.ReadByteString( aName, rStream.GetStreamCharSet() ); 829 rStream >> b; bInclFont = b; 830 rStream >> b; bInclJustify = b; 831 rStream >> b; bInclFrame = b; 832 rStream >> b; bInclBackground = b; 833 bRet = (rStream.GetError() == 0); 834 835 for( int i = 0; i < 16; i++) 836 { 837 SwBoxAutoFmt* pFmt = new SwBoxAutoFmt; 838 bRet = pFmt->LoadOld( rStream, aLoadVer ); 839 if( bRet ) 840 aBoxAutoFmt[ i ] = pFmt; 841 else 842 { 843 delete pFmt; 844 break; 845 } 846 } 847 } 848 return bRet; 849 } 850 #endif 851 852 853 sal_Bool SwTableAutoFmt::Save( SvStream& rStream ) const 854 { 855 sal_uInt16 nVal = AUTOFORMAT_DATA_ID; 856 sal_Bool b; 857 rStream << nVal; 858 // --- from 680/dr25 on: #21549# store strings as UTF-8 859 rStream.WriteByteString( aName, RTL_TEXTENCODING_UTF8 ); 860 rStream << nStrResId; 861 rStream << ( b = bInclFont ); 862 rStream << ( b = bInclJustify ); 863 rStream << ( b = bInclFrame ); 864 rStream << ( b = bInclBackground ); 865 rStream << ( b = bInclValueFormat ); 866 rStream << ( b = bInclWidthHeight ); 867 868 sal_Bool bRet = 0 == rStream.GetError(); 869 870 for( int i = 0; bRet && i < 16; ++i ) 871 { 872 SwBoxAutoFmt* pFmt = aBoxAutoFmt[ i ]; 873 if( !pFmt ) // nicht gesetzt -> default schreiben 874 { 875 // falls noch nicht vorhanden: 876 if( !pDfltBoxAutoFmt ) 877 pDfltBoxAutoFmt = new SwBoxAutoFmt; 878 pFmt = pDfltBoxAutoFmt; 879 } 880 bRet = pFmt->Save( rStream ); 881 } 882 return bRet; 883 } 884 885 886 SwTableAutoFmtTbl::SwTableAutoFmtTbl() 887 { 888 String sNm; 889 SwTableAutoFmt* pNew = new SwTableAutoFmt( 890 SwStyleNameMapper::GetUIName( RES_POOLCOLL_STANDARD, sNm ) ); 891 892 SwBoxAutoFmt aNew; 893 894 sal_uInt8 i; 895 896 Color aColor( COL_BLUE ); 897 SvxBrushItem aBrushItem( aColor, RES_BACKGROUND ); 898 aNew.SetBackground( aBrushItem ); 899 aNew.SetColor( SvxColorItem(Color( COL_WHITE ), RES_CHRATR_COLOR) ); 900 901 for( i = 0; i < 4; ++i ) 902 pNew->SetBoxFmt( aNew, i ); 903 904 // 70% Grau 905 aBrushItem.SetColor( RGB_COLORDATA( 0x4d, 0x4d, 0x4d ) ); 906 aNew.SetBackground( aBrushItem ); 907 for( i = 4; i <= 12; i += 4 ) 908 pNew->SetBoxFmt( aNew, i ); 909 910 // 20% Grau 911 aBrushItem.SetColor( RGB_COLORDATA( 0xcc, 0xcc, 0xcc ) ); 912 aNew.SetBackground( aBrushItem ); 913 aColor.SetColor( COL_BLACK ); 914 aNew.SetColor( SvxColorItem( aColor, RES_CHRATR_COLOR) ); 915 for( i = 7; i <= 15; i += 4 ) 916 pNew->SetBoxFmt( aNew, i ); 917 for( i = 13; i <= 14; ++i ) 918 pNew->SetBoxFmt( aNew, i ); 919 920 aBrushItem.SetColor( Color( COL_WHITE ) ); 921 aNew.SetBackground( aBrushItem ); 922 for( i = 5; i <= 6; ++i ) 923 pNew->SetBoxFmt( aNew, i ); 924 for( i = 9; i <= 10; ++i ) 925 pNew->SetBoxFmt( aNew, i ); 926 927 928 SvxBoxItem aBox( RES_BOX ); 929 aBox.SetDistance( 55 ); 930 SvxBorderLine aLn( &aColor, DEF_LINE_WIDTH_0 ); 931 aBox.SetLine( &aLn, BOX_LINE_LEFT ); 932 aBox.SetLine( &aLn, BOX_LINE_BOTTOM ); 933 934 for( i = 0; i <= 15; ++i ) 935 { 936 aBox.SetLine( i <= 3 ? &aLn : 0, BOX_LINE_TOP ); 937 aBox.SetLine( (3 == ( i & 3 )) ? &aLn : 0, BOX_LINE_RIGHT ); 938 ((SwBoxAutoFmt&)pNew->GetBoxFmt( i )).SetBox( aBox ); 939 } 940 941 Insert( pNew, Count() ); 942 } 943 944 sal_Bool SwTableAutoFmtTbl::Load() 945 { 946 sal_Bool bRet = sal_False; 947 String sNm( String::CreateFromAscii( 948 RTL_CONSTASCII_STRINGPARAM( sAutoTblFmtName ))); 949 SvtPathOptions aOpt; 950 if( aOpt.SearchFile( sNm, SvtPathOptions::PATH_USERCONFIG )) 951 { 952 SfxMedium aStream( sNm, STREAM_STD_READ, sal_True ); 953 bRet = Load( *aStream.GetInStream() ); 954 } 955 else 956 bRet = sal_False; 957 return bRet; 958 } 959 960 sal_Bool SwTableAutoFmtTbl::Save() const 961 { 962 SvtPathOptions aPathOpt; 963 String sNm( aPathOpt.GetUserConfigPath() ); 964 sNm += INET_PATH_TOKEN; 965 sNm.AppendAscii( RTL_CONSTASCII_STRINGPARAM( sAutoTblFmtName )); 966 SfxMedium aStream(sNm, STREAM_STD_WRITE, sal_True ); 967 return Save( *aStream.GetOutStream() ) && aStream.Commit(); 968 } 969 970 sal_Bool SwTableAutoFmtTbl::Load( SvStream& rStream ) 971 { 972 sal_Bool bRet = 0 == rStream.GetError(); 973 if (bRet) 974 { 975 // Achtung hier muss ein allgemeiner Header gelesen werden 976 sal_uInt16 nVal = 0; 977 rStream >> nVal; 978 bRet = 0 == rStream.GetError(); 979 980 if( bRet ) 981 { 982 SwAfVersions aVersions; 983 984 if( nVal == AUTOFORMAT_ID_358 || 985 (AUTOFORMAT_ID_504 <= nVal && nVal <= AUTOFORMAT_ID) ) 986 { 987 sal_uInt16 nFileVers = SOFFICE_FILEFORMAT_40; 988 sal_uInt8 nChrSet, nCnt; 989 long nPos = rStream.Tell(); 990 rStream >> nCnt >> nChrSet; 991 // if( 4 <= nCnt ) 992 // rStream >> nFileVers; 993 if( rStream.Tell() != sal_uLong(nPos + nCnt) ) 994 { 995 ASSERT( sal_False, "The header contains more / newer data" ); 996 rStream.Seek( nPos + nCnt ); 997 } 998 rStream.SetStreamCharSet( (CharSet)nChrSet ); 999 rStream.SetVersion( nFileVers ); 1000 } 1001 1002 if( nVal == AUTOFORMAT_ID_358 || nVal == AUTOFORMAT_ID_X || 1003 (AUTOFORMAT_ID_504 <= nVal && nVal <= AUTOFORMAT_ID) ) 1004 { 1005 aVersions.Load( rStream, nVal ); // Item-Versionen 1006 1007 SwTableAutoFmt* pNew; 1008 sal_uInt16 nAnz = 0; 1009 rStream >> nAnz; 1010 1011 bRet = 0 == rStream.GetError(); 1012 1013 for( sal_uInt16 i = 0; i < nAnz; ++i ) 1014 { 1015 pNew = new SwTableAutoFmt( aEmptyStr ); 1016 bRet = pNew->Load( rStream, aVersions ); 1017 if( bRet ) 1018 { 1019 Insert( pNew, Count() ); 1020 } 1021 else 1022 { 1023 delete pNew; 1024 break; 1025 } 1026 } 1027 } 1028 #ifdef READ_OLDVERS 1029 else if( AUTOFORMAT_OLD_ID == nVal || AUTOFORMAT_OLD_ID1 == nVal ) 1030 { 1031 SwTableAutoFmt* pNew; 1032 sal_uInt16 nAnz = 0; 1033 rStream >> nAnz; 1034 1035 sal_uInt16 aArr[ 12 ]; 1036 memset( aArr, 0, 12 * sizeof( sal_uInt16 ) ); 1037 if( AUTOFORMAT_OLD_ID1 == nVal ) 1038 for( sal_uInt16 n = 0; n < 12; ++n ) 1039 rStream >> aArr[ n ]; 1040 1041 bRet = 0 == rStream.GetError(); 1042 1043 for( sal_uInt16 i = 0; i < nAnz; ++i ) 1044 { 1045 pNew = new SwTableAutoFmt( aEmptyStr ); 1046 bRet = pNew->LoadOld( rStream, aArr ); 1047 if( bRet ) 1048 { 1049 Insert( pNew, Count() ); 1050 } 1051 else 1052 { 1053 delete pNew; 1054 break; 1055 } 1056 } 1057 } 1058 #endif 1059 } 1060 } 1061 return bRet; 1062 } 1063 1064 1065 sal_Bool SwTableAutoFmtTbl::Save( SvStream& rStream ) const 1066 { 1067 sal_Bool bRet = 0 == rStream.GetError(); 1068 if (bRet) 1069 { 1070 rStream.SetVersion( SOFFICE_FILEFORMAT_40 ); 1071 1072 // Achtung hier muss ein allgemeiner Header gespeichert werden 1073 sal_uInt16 nVal = AUTOFORMAT_ID; 1074 rStream << nVal 1075 << (sal_uInt8)2 // Anzahl von Zeichen des Headers incl. diesem 1076 << (sal_uInt8)GetStoreCharSet( ::gsl_getSystemTextEncoding() ); 1077 // << (sal_uInt8)4 // Anzahl von Zeichen des Headers incl. diesem 1078 // << (sal_uInt8)::GetSystemCharSet() 1079 // << (UNIT16)SOFFICE_FILEFORMAT_NOW; 1080 bRet = 0 == rStream.GetError(); 1081 1082 //----------------------------------------------------------- 1083 // die VersionsNummer fuer alle Attribute schreiben 1084 (*this)[ 0 ]->GetBoxFmt( 0 ).SaveVersionNo( rStream ); 1085 1086 rStream << (sal_uInt16)(Count() - 1); 1087 bRet = 0 == rStream.GetError(); 1088 1089 for( sal_uInt16 i = 1; bRet && i < Count(); ++i ) 1090 { 1091 SwTableAutoFmt* pFmt = (*this)[ i ]; 1092 bRet = pFmt->Save( rStream ); 1093 } 1094 } 1095 rStream.Flush(); 1096 return bRet; 1097 } 1098