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::SaveVerionNo( 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 526 527 SwTableAutoFmt::SwTableAutoFmt( const String& rName ) 528 : aName( rName ), nStrResId( USHRT_MAX ) 529 { 530 bInclFont = sal_True; 531 bInclJustify = sal_True; 532 bInclFrame = sal_True; 533 bInclBackground = sal_True; 534 bInclValueFormat = sal_True; 535 bInclWidthHeight = sal_True; 536 537 memset( aBoxAutoFmt, 0, sizeof( aBoxAutoFmt ) ); 538 } 539 540 541 SwTableAutoFmt::SwTableAutoFmt( const SwTableAutoFmt& rNew ) 542 { 543 for( sal_uInt8 n = 0; n < 16; ++n ) 544 aBoxAutoFmt[ n ] = 0; 545 *this = rNew; 546 } 547 548 SwTableAutoFmt& SwTableAutoFmt::operator=( const SwTableAutoFmt& rNew ) 549 { 550 for( sal_uInt8 n = 0; n < 16; ++n ) 551 { 552 if( aBoxAutoFmt[ n ] ) 553 delete aBoxAutoFmt[ n ]; 554 555 SwBoxAutoFmt* pFmt = rNew.aBoxAutoFmt[ n ]; 556 if( pFmt ) // ist gesetzt -> kopieren 557 aBoxAutoFmt[ n ] = new SwBoxAutoFmt( *pFmt ); 558 else // sonst default 559 aBoxAutoFmt[ n ] = 0; 560 } 561 562 aName = rNew.aName; 563 nStrResId = rNew.nStrResId; 564 bInclFont = rNew.bInclFont; 565 bInclJustify = rNew.bInclJustify; 566 bInclFrame = rNew.bInclFrame; 567 bInclBackground = rNew.bInclBackground; 568 bInclValueFormat = rNew.bInclValueFormat; 569 bInclWidthHeight = rNew.bInclWidthHeight; 570 571 return *this; 572 } 573 574 575 SwTableAutoFmt::~SwTableAutoFmt() 576 { 577 SwBoxAutoFmt** ppFmt = aBoxAutoFmt; 578 for( sal_uInt8 n = 0; n < 16; ++n, ++ppFmt ) 579 if( *ppFmt ) 580 delete *ppFmt; 581 } 582 583 584 void SwTableAutoFmt::SetBoxFmt( const SwBoxAutoFmt& rNew, sal_uInt8 nPos ) 585 { 586 ASSERT( nPos < 16, "falscher Bereich" ); 587 588 SwBoxAutoFmt* pFmt = aBoxAutoFmt[ nPos ]; 589 if( pFmt ) // ist gesetzt -> kopieren 590 *aBoxAutoFmt[ nPos ] = rNew; 591 else // sonst neu setzen 592 aBoxAutoFmt[ nPos ] = new SwBoxAutoFmt( rNew ); 593 } 594 595 596 const SwBoxAutoFmt& SwTableAutoFmt::GetBoxFmt( sal_uInt8 nPos ) const 597 { 598 ASSERT( nPos < 16, "falscher Bereich" ); 599 600 SwBoxAutoFmt* pFmt = aBoxAutoFmt[ nPos ]; 601 if( pFmt ) // ist gesetzt -> kopieren 602 return *pFmt; 603 else // sonst den default returnen 604 { 605 // falls noch nicht vorhanden: 606 if( !pDfltBoxAutoFmt ) 607 pDfltBoxAutoFmt = new SwBoxAutoFmt; 608 return *pDfltBoxAutoFmt; 609 } 610 } 611 612 613 614 SwBoxAutoFmt& SwTableAutoFmt::UpdateFromSet( sal_uInt8 nPos, 615 const SfxItemSet& rSet, 616 UpdateFlags eFlags, 617 SvNumberFormatter* pNFmtr ) 618 { 619 ASSERT( nPos < 16, "falscher Bereich" ); 620 621 SwBoxAutoFmt* pFmt = aBoxAutoFmt[ nPos ]; 622 if( !pFmt ) // ist gesetzt -> kopieren 623 { 624 pFmt = new SwBoxAutoFmt; 625 aBoxAutoFmt[ nPos ] = pFmt; 626 } 627 628 if( UPDATE_CHAR & eFlags ) 629 { 630 pFmt->SetFont( (SvxFontItem&)rSet.Get( RES_CHRATR_FONT ) ); 631 pFmt->SetHeight( (SvxFontHeightItem&)rSet.Get( RES_CHRATR_FONTSIZE ) ); 632 pFmt->SetWeight( (SvxWeightItem&)rSet.Get( RES_CHRATR_WEIGHT ) ); 633 pFmt->SetPosture( (SvxPostureItem&)rSet.Get( RES_CHRATR_POSTURE ) ); 634 pFmt->SetCJKFont( (SvxFontItem&)rSet.Get( RES_CHRATR_CJK_FONT ) ); 635 pFmt->SetCJKHeight( (SvxFontHeightItem&)rSet.Get( RES_CHRATR_CJK_FONTSIZE ) ); 636 pFmt->SetCJKWeight( (SvxWeightItem&)rSet.Get( RES_CHRATR_CJK_WEIGHT ) ); 637 pFmt->SetCJKPosture( (SvxPostureItem&)rSet.Get( RES_CHRATR_CJK_POSTURE ) ); 638 pFmt->SetCTLFont( (SvxFontItem&)rSet.Get( RES_CHRATR_CTL_FONT ) ); 639 pFmt->SetCTLHeight( (SvxFontHeightItem&)rSet.Get( RES_CHRATR_CTL_FONTSIZE ) ); 640 pFmt->SetCTLWeight( (SvxWeightItem&)rSet.Get( RES_CHRATR_CTL_WEIGHT ) ); 641 pFmt->SetCTLPosture( (SvxPostureItem&)rSet.Get( RES_CHRATR_CTL_POSTURE ) ); 642 pFmt->SetUnderline( (SvxUnderlineItem&)rSet.Get( RES_CHRATR_UNDERLINE ) ); 643 pFmt->SetOverline( (SvxOverlineItem&)rSet.Get( RES_CHRATR_OVERLINE ) ); 644 pFmt->SetCrossedOut( (SvxCrossedOutItem&)rSet.Get( RES_CHRATR_CROSSEDOUT ) ); 645 pFmt->SetContour( (SvxContourItem&)rSet.Get( RES_CHRATR_CONTOUR ) ); 646 pFmt->SetShadowed( (SvxShadowedItem&)rSet.Get( RES_CHRATR_SHADOWED ) ); 647 pFmt->SetColor( (SvxColorItem&)rSet.Get( RES_CHRATR_COLOR ) ); 648 pFmt->SetAdjust( (SvxAdjustItem&)rSet.Get( RES_PARATR_ADJUST ) ); 649 } 650 if( UPDATE_BOX & eFlags ) 651 { 652 pFmt->SetBox( (SvxBoxItem&)rSet.Get( RES_BOX ) ); 653 // FIXME - add attribute IDs for the diagonal line items 654 // pFmt->SetTLBR( (SvxLineItem&)rSet.Get( RES_... ) ); 655 // pFmt->SetBLTR( (SvxLineItem&)rSet.Get( RES_... ) ); 656 pFmt->SetBackground( (SvxBrushItem&)rSet.Get( RES_BACKGROUND ) ); 657 658 const SwTblBoxNumFormat* pNumFmtItem; 659 const SvNumberformat* pNumFormat = 0; 660 if( SFX_ITEM_SET == rSet.GetItemState( RES_BOXATR_FORMAT, sal_True, 661 (const SfxPoolItem**)&pNumFmtItem ) && pNFmtr && 662 0 != (pNumFormat = pNFmtr->GetEntry( pNumFmtItem->GetValue() )) ) 663 pFmt->SetValueFormat( ((SvNumberformat*)pNumFormat)->GetFormatstring(), 664 pNumFormat->GetLanguage(), 665 static_cast<LanguageType>(::GetAppLanguage())); 666 else 667 { 668 // defaulten 669 pFmt->SetValueFormat( aEmptyStr, LANGUAGE_SYSTEM, 670 static_cast<LanguageType>(::GetAppLanguage() )); 671 } 672 } 673 // den Rest koennen wir nicht, StarCalc spezifisch 674 675 return *pFmt; 676 } 677 678 679 void SwTableAutoFmt::UpdateToSet( sal_uInt8 nPos, SfxItemSet& rSet, 680 UpdateFlags eFlags, SvNumberFormatter* pNFmtr ) const 681 { 682 const SwBoxAutoFmt& rChg = GetBoxFmt( nPos ); 683 684 if( UPDATE_CHAR & eFlags ) 685 { 686 if( IsFont() ) 687 { 688 rSet.Put( rChg.GetFont() ); 689 rSet.Put( rChg.GetHeight() ); 690 rSet.Put( rChg.GetWeight() ); 691 rSet.Put( rChg.GetPosture() ); 692 // #103065# do not insert empty CJK font 693 const SvxFontItem& rCJKFont = rChg.GetCJKFont(); 694 if( rCJKFont.GetStyleName().Len() ) 695 { 696 rSet.Put( rChg.GetCJKFont() ); 697 rSet.Put( rChg.GetCJKHeight() ); 698 rSet.Put( rChg.GetCJKWeight() ); 699 rSet.Put( rChg.GetCJKPosture() ); 700 } 701 else 702 { 703 rSet.Put( rChg.GetHeight(), RES_CHRATR_CJK_FONTSIZE ); 704 rSet.Put( rChg.GetWeight(), RES_CHRATR_CJK_WEIGHT ); 705 rSet.Put( rChg.GetPosture(), RES_CHRATR_CJK_POSTURE ); 706 } 707 // #103065# do not insert empty CTL font 708 const SvxFontItem& rCTLFont = rChg.GetCTLFont(); 709 if( rCTLFont.GetStyleName().Len() ) 710 { 711 rSet.Put( rChg.GetCTLFont() ); 712 rSet.Put( rChg.GetCTLHeight() ); 713 rSet.Put( rChg.GetCTLWeight() ); 714 rSet.Put( rChg.GetCTLPosture() ); 715 } 716 else 717 { 718 rSet.Put( rChg.GetHeight(), RES_CHRATR_CTL_FONTSIZE ); 719 rSet.Put( rChg.GetWeight(), RES_CHRATR_CTL_WEIGHT ); 720 rSet.Put( rChg.GetPosture(), RES_CHRATR_CTL_POSTURE ); 721 } 722 rSet.Put( rChg.GetUnderline() ); 723 rSet.Put( rChg.GetOverline() ); 724 rSet.Put( rChg.GetCrossedOut() ); 725 rSet.Put( rChg.GetContour() ); 726 rSet.Put( rChg.GetShadowed() ); 727 rSet.Put( rChg.GetColor() ); 728 } 729 if( IsJustify() ) 730 rSet.Put( rChg.GetAdjust() ); 731 } 732 733 if( UPDATE_BOX & eFlags ) 734 { 735 if( IsFrame() ) 736 { 737 rSet.Put( rChg.GetBox() ); 738 // FIXME - uncomment the lines to put the diagonal line items 739 // rSet.Put( rChg.GetTLBR() ); 740 // rSet.Put( rChg.GetBLTR() ); 741 } 742 if( IsBackground() ) 743 rSet.Put( rChg.GetBackground() ); 744 745 if( IsValueFormat() && pNFmtr ) 746 { 747 String sFmt; LanguageType eLng, eSys; 748 rChg.GetValueFormat( sFmt, eLng, eSys ); 749 if( sFmt.Len() ) 750 { 751 short nType; 752 sal_Bool bNew; 753 xub_StrLen nCheckPos; 754 sal_uInt32 nKey = pNFmtr->GetIndexPuttingAndConverting( sFmt, eLng, 755 eSys, nType, bNew, nCheckPos); 756 rSet.Put( SwTblBoxNumFormat( nKey )); 757 } 758 else 759 rSet.ClearItem( RES_BOXATR_FORMAT ); 760 } 761 } 762 763 // den Rest koennen wir nicht, StarCalc spezifisch 764 } 765 766 767 sal_Bool SwTableAutoFmt::Load( SvStream& rStream, const SwAfVersions& rVersions ) 768 { 769 sal_Bool bRet = sal_True; 770 sal_uInt16 nVal = 0; 771 rStream >> nVal; 772 bRet = 0 == rStream.GetError(); 773 774 if( bRet && (nVal == AUTOFORMAT_DATA_ID_X || 775 (AUTOFORMAT_DATA_ID_504 <= nVal && nVal <= AUTOFORMAT_DATA_ID)) ) 776 { 777 sal_Bool b; 778 // --- from 680/dr25 on: #21549# store strings as UTF-8 779 CharSet eCharSet = (nVal >= AUTOFORMAT_ID_680DR25) ? RTL_TEXTENCODING_UTF8 : rStream.GetStreamCharSet(); 780 rStream.ReadByteString( aName, eCharSet ); 781 if( AUTOFORMAT_DATA_ID_552 <= nVal ) 782 { 783 rStream >> nStrResId; 784 sal_uInt16 nId = RID_SVXSTR_TBLAFMT_BEGIN + nStrResId; 785 if( RID_SVXSTR_TBLAFMT_BEGIN <= nId && 786 nId < RID_SVXSTR_TBLAFMT_END ) 787 { 788 aName = SVX_RESSTR( nId ); 789 } 790 else 791 nStrResId = USHRT_MAX; 792 } 793 rStream >> b; bInclFont = b; 794 rStream >> b; bInclJustify = b; 795 rStream >> b; bInclFrame = b; 796 rStream >> b; bInclBackground = b; 797 rStream >> b; bInclValueFormat = b; 798 rStream >> b; bInclWidthHeight = b; 799 800 bRet = 0 == rStream.GetError(); 801 802 for( sal_uInt8 i = 0; i < 16; ++i ) 803 { 804 SwBoxAutoFmt* pFmt = new SwBoxAutoFmt; 805 bRet = pFmt->Load( rStream, rVersions, nVal ); 806 if( bRet ) 807 aBoxAutoFmt[ i ] = pFmt; 808 else 809 { 810 delete pFmt; 811 break; 812 } 813 } 814 } 815 return bRet; 816 } 817 818 #ifdef READ_OLDVERS 819 820 sal_Bool SwTableAutoFmt::LoadOld( SvStream& rStream, sal_uInt16 aLoadVer[] ) 821 { 822 sal_Bool bRet = sal_True; 823 sal_uInt16 nVal = 0; 824 rStream >> nVal; 825 bRet = 0 == rStream.GetError(); 826 827 if( bRet && ( AUTOFORMAT_OLD_DATA_ID == nVal )) 828 { 829 sal_Bool b; 830 rStream.ReadByteString( aName, rStream.GetStreamCharSet() ); 831 rStream >> b; bInclFont = b; 832 rStream >> b; bInclJustify = b; 833 rStream >> b; bInclFrame = b; 834 rStream >> b; bInclBackground = b; 835 bRet = (rStream.GetError() == 0); 836 837 for( int i = 0; i < 16; i++) 838 { 839 SwBoxAutoFmt* pFmt = new SwBoxAutoFmt; 840 bRet = pFmt->LoadOld( rStream, aLoadVer ); 841 if( bRet ) 842 aBoxAutoFmt[ i ] = pFmt; 843 else 844 { 845 delete pFmt; 846 break; 847 } 848 } 849 } 850 return bRet; 851 } 852 #endif 853 854 855 sal_Bool SwTableAutoFmt::Save( SvStream& rStream ) const 856 { 857 sal_uInt16 nVal = AUTOFORMAT_DATA_ID; 858 sal_Bool b; 859 rStream << nVal; 860 // --- from 680/dr25 on: #21549# store strings as UTF-8 861 rStream.WriteByteString( aName, RTL_TEXTENCODING_UTF8 ); 862 rStream << nStrResId; 863 rStream << ( b = bInclFont ); 864 rStream << ( b = bInclJustify ); 865 rStream << ( b = bInclFrame ); 866 rStream << ( b = bInclBackground ); 867 rStream << ( b = bInclValueFormat ); 868 rStream << ( b = bInclWidthHeight ); 869 870 sal_Bool bRet = 0 == rStream.GetError(); 871 872 for( int i = 0; bRet && i < 16; ++i ) 873 { 874 SwBoxAutoFmt* pFmt = aBoxAutoFmt[ i ]; 875 if( !pFmt ) // nicht gesetzt -> default schreiben 876 { 877 // falls noch nicht vorhanden: 878 if( !pDfltBoxAutoFmt ) 879 pDfltBoxAutoFmt = new SwBoxAutoFmt; 880 pFmt = pDfltBoxAutoFmt; 881 } 882 bRet = pFmt->Save( rStream ); 883 } 884 return bRet; 885 } 886 887 888 SwTableAutoFmtTbl::SwTableAutoFmtTbl() 889 { 890 String sNm; 891 SwTableAutoFmt* pNew = new SwTableAutoFmt( 892 SwStyleNameMapper::GetUIName( RES_POOLCOLL_STANDARD, sNm ) ); 893 894 SwBoxAutoFmt aNew; 895 896 sal_uInt8 i; 897 898 Color aColor( COL_BLUE ); 899 SvxBrushItem aBrushItem( aColor, RES_BACKGROUND ); 900 aNew.SetBackground( aBrushItem ); 901 aNew.SetColor( SvxColorItem(Color( COL_WHITE ), RES_CHRATR_COLOR) ); 902 903 for( i = 0; i < 4; ++i ) 904 pNew->SetBoxFmt( aNew, i ); 905 906 // 70% Grau 907 aBrushItem.SetColor( RGB_COLORDATA( 0x4d, 0x4d, 0x4d ) ); 908 aNew.SetBackground( aBrushItem ); 909 for( i = 4; i <= 12; i += 4 ) 910 pNew->SetBoxFmt( aNew, i ); 911 912 // 20% Grau 913 aBrushItem.SetColor( RGB_COLORDATA( 0xcc, 0xcc, 0xcc ) ); 914 aNew.SetBackground( aBrushItem ); 915 aColor.SetColor( COL_BLACK ); 916 aNew.SetColor( SvxColorItem( aColor, RES_CHRATR_COLOR) ); 917 for( i = 7; i <= 15; i += 4 ) 918 pNew->SetBoxFmt( aNew, i ); 919 for( i = 13; i <= 14; ++i ) 920 pNew->SetBoxFmt( aNew, i ); 921 922 aBrushItem.SetColor( Color( COL_WHITE ) ); 923 aNew.SetBackground( aBrushItem ); 924 for( i = 5; i <= 6; ++i ) 925 pNew->SetBoxFmt( aNew, i ); 926 for( i = 9; i <= 10; ++i ) 927 pNew->SetBoxFmt( aNew, i ); 928 929 930 SvxBoxItem aBox( RES_BOX ); 931 aBox.SetDistance( 55 ); 932 SvxBorderLine aLn( &aColor, DEF_LINE_WIDTH_0 ); 933 aBox.SetLine( &aLn, BOX_LINE_LEFT ); 934 aBox.SetLine( &aLn, BOX_LINE_BOTTOM ); 935 936 for( i = 0; i <= 15; ++i ) 937 { 938 aBox.SetLine( i <= 3 ? &aLn : 0, BOX_LINE_TOP ); 939 aBox.SetLine( (3 == ( i & 3 )) ? &aLn : 0, BOX_LINE_RIGHT ); 940 ((SwBoxAutoFmt&)pNew->GetBoxFmt( i )).SetBox( aBox ); 941 } 942 943 Insert( pNew, Count() ); 944 } 945 946 sal_Bool SwTableAutoFmtTbl::Load() 947 { 948 sal_Bool bRet = sal_False; 949 String sNm( String::CreateFromAscii( 950 RTL_CONSTASCII_STRINGPARAM( sAutoTblFmtName ))); 951 SvtPathOptions aOpt; 952 if( aOpt.SearchFile( sNm, SvtPathOptions::PATH_USERCONFIG )) 953 { 954 SfxMedium aStream( sNm, STREAM_STD_READ, sal_True ); 955 bRet = Load( *aStream.GetInStream() ); 956 } 957 else 958 bRet = sal_False; 959 return bRet; 960 } 961 962 sal_Bool SwTableAutoFmtTbl::Save() const 963 { 964 SvtPathOptions aPathOpt; 965 String sNm( aPathOpt.GetUserConfigPath() ); 966 sNm += INET_PATH_TOKEN; 967 sNm.AppendAscii( RTL_CONSTASCII_STRINGPARAM( sAutoTblFmtName )); 968 SfxMedium aStream(sNm, STREAM_STD_WRITE, sal_True ); 969 return Save( *aStream.GetOutStream() ) && aStream.Commit(); 970 } 971 972 sal_Bool SwTableAutoFmtTbl::Load( SvStream& rStream ) 973 { 974 sal_Bool bRet = 0 == rStream.GetError(); 975 if (bRet) 976 { 977 // Achtung hier muss ein allgemeiner Header gelesen werden 978 sal_uInt16 nVal = 0; 979 rStream >> nVal; 980 bRet = 0 == rStream.GetError(); 981 982 if( bRet ) 983 { 984 SwAfVersions aVersions; 985 986 if( nVal == AUTOFORMAT_ID_358 || 987 (AUTOFORMAT_ID_504 <= nVal && nVal <= AUTOFORMAT_ID) ) 988 { 989 sal_uInt16 nFileVers = SOFFICE_FILEFORMAT_40; 990 sal_uInt8 nChrSet, nCnt; 991 long nPos = rStream.Tell(); 992 rStream >> nCnt >> nChrSet; 993 // if( 4 <= nCnt ) 994 // rStream >> nFileVers; 995 if( rStream.Tell() != sal_uLong(nPos + nCnt) ) 996 { 997 ASSERT( !this, "Der Header enthaelt mehr/neuere Daten" ); 998 rStream.Seek( nPos + nCnt ); 999 } 1000 rStream.SetStreamCharSet( (CharSet)nChrSet ); 1001 rStream.SetVersion( nFileVers ); 1002 } 1003 1004 if( nVal == AUTOFORMAT_ID_358 || nVal == AUTOFORMAT_ID_X || 1005 (AUTOFORMAT_ID_504 <= nVal && nVal <= AUTOFORMAT_ID) ) 1006 { 1007 aVersions.Load( rStream, nVal ); // Item-Versionen 1008 1009 SwTableAutoFmt* pNew; 1010 sal_uInt16 nAnz = 0; 1011 rStream >> nAnz; 1012 1013 bRet = 0 == rStream.GetError(); 1014 1015 for( sal_uInt16 i = 0; i < nAnz; ++i ) 1016 { 1017 pNew = new SwTableAutoFmt( aEmptyStr ); 1018 bRet = pNew->Load( rStream, aVersions ); 1019 if( bRet ) 1020 { 1021 Insert( pNew, Count() ); 1022 } 1023 else 1024 { 1025 delete pNew; 1026 break; 1027 } 1028 } 1029 } 1030 #ifdef READ_OLDVERS 1031 else if( AUTOFORMAT_OLD_ID == nVal || AUTOFORMAT_OLD_ID1 == nVal ) 1032 { 1033 SwTableAutoFmt* pNew; 1034 sal_uInt16 nAnz = 0; 1035 rStream >> nAnz; 1036 1037 sal_uInt16 aArr[ 12 ]; 1038 memset( aArr, 0, 12 * sizeof( sal_uInt16 ) ); 1039 if( AUTOFORMAT_OLD_ID1 == nVal ) 1040 for( sal_uInt16 n = 0; n < 12; ++n ) 1041 rStream >> aArr[ n ]; 1042 1043 bRet = 0 == rStream.GetError(); 1044 1045 for( sal_uInt16 i = 0; i < nAnz; ++i ) 1046 { 1047 pNew = new SwTableAutoFmt( aEmptyStr ); 1048 bRet = pNew->LoadOld( rStream, aArr ); 1049 if( bRet ) 1050 { 1051 Insert( pNew, Count() ); 1052 } 1053 else 1054 { 1055 delete pNew; 1056 break; 1057 } 1058 } 1059 } 1060 #endif 1061 } 1062 } 1063 return bRet; 1064 } 1065 1066 1067 sal_Bool SwTableAutoFmtTbl::Save( SvStream& rStream ) const 1068 { 1069 sal_Bool bRet = 0 == rStream.GetError(); 1070 if (bRet) 1071 { 1072 rStream.SetVersion( SOFFICE_FILEFORMAT_40 ); 1073 1074 // Achtung hier muss ein allgemeiner Header gespeichert werden 1075 sal_uInt16 nVal = AUTOFORMAT_ID; 1076 rStream << nVal 1077 << (sal_uInt8)2 // Anzahl von Zeichen des Headers incl. diesem 1078 << (sal_uInt8)GetStoreCharSet( ::gsl_getSystemTextEncoding() ); 1079 // << (sal_uInt8)4 // Anzahl von Zeichen des Headers incl. diesem 1080 // << (sal_uInt8)::GetSystemCharSet() 1081 // << (UNIT16)SOFFICE_FILEFORMAT_NOW; 1082 bRet = 0 == rStream.GetError(); 1083 1084 //----------------------------------------------------------- 1085 // die VersionsNummer fuer alle Attribute schreiben 1086 (*this)[ 0 ]->GetBoxFmt( 0 ).SaveVerionNo( rStream ); 1087 1088 rStream << (sal_uInt16)(Count() - 1); 1089 bRet = 0 == rStream.GetError(); 1090 1091 for( sal_uInt16 i = 1; bRet && i < Count(); ++i ) 1092 { 1093 SwTableAutoFmt* pFmt = (*this)[ i ]; 1094 bRet = pFmt->Save( rStream ); 1095 } 1096 } 1097 rStream.Flush(); 1098 return bRet; 1099 } 1100 1101 1102 1103