1*efeef26fSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*efeef26fSAndrew Rist * distributed with this work for additional information 6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance 9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*efeef26fSAndrew Rist * software distributed under the License is distributed on an 15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the 17*efeef26fSAndrew Rist * specific language governing permissions and limitations 18*efeef26fSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*efeef26fSAndrew Rist *************************************************************/ 21*efeef26fSAndrew Rist 22*efeef26fSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_sw.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir 28cdf0e10cSrcweir 29cdf0e10cSrcweir 30cdf0e10cSrcweir #include <hintids.hxx> 31cdf0e10cSrcweir #include <svl/urihelper.hxx> 32cdf0e10cSrcweir #include <unotools/pathoptions.hxx> 33cdf0e10cSrcweir #include <tools/stream.hxx> 34cdf0e10cSrcweir #ifndef _SFX_INIMGR_HXX 35cdf0e10cSrcweir #endif 36cdf0e10cSrcweir #include <sfx2/docfile.hxx> 37cdf0e10cSrcweir #include <svl/itemiter.hxx> 38cdf0e10cSrcweir #include <editeng/brshitem.hxx> 39cdf0e10cSrcweir 40cdf0e10cSrcweir 41cdf0e10cSrcweir #include <tools/resid.hxx> 42cdf0e10cSrcweir #include <fmtornt.hxx> 43cdf0e10cSrcweir #include <swtypes.hxx> // Leerstring 44cdf0e10cSrcweir #include <wrtsh.hxx> 45cdf0e10cSrcweir #include <uinums.hxx> 46cdf0e10cSrcweir #include <poolfmt.hxx> 47cdf0e10cSrcweir #include <charfmt.hxx> 48cdf0e10cSrcweir #include <frmatr.hxx> 49cdf0e10cSrcweir 50cdf0e10cSrcweir #include <unomid.h> 51cdf0e10cSrcweir 52cdf0e10cSrcweir using namespace ::com::sun::star; 53cdf0e10cSrcweir 54cdf0e10cSrcweir 55cdf0e10cSrcweir #define VERSION_30B ((sal_uInt16)250) 56cdf0e10cSrcweir #define VERSION_31B ((sal_uInt16)326) 57cdf0e10cSrcweir #define VERSION_40A ((sal_uInt16)364) 58cdf0e10cSrcweir #define VERSION_50A ((sal_uInt16)373) 59cdf0e10cSrcweir #define VERSION_53A ((sal_uInt16)596) 60cdf0e10cSrcweir #define ACT_NUM_VERSION VERSION_53A 61cdf0e10cSrcweir 62cdf0e10cSrcweir #define NUMRULE_FILENAME "numrule.cfg" 63cdf0e10cSrcweir #define CHAPTER_FILENAME "chapter.cfg" 64cdf0e10cSrcweir 65cdf0e10cSrcweir /*------------------------------------------------------------------------ 66cdf0e10cSrcweir Beschreibung: Ops. zum Laden / Speichern 67cdf0e10cSrcweir ------------------------------------------------------------------------*/ 68cdf0e10cSrcweir 69cdf0e10cSrcweir 70cdf0e10cSrcweir SV_IMPL_PTRARR( _SwNumFmtsAttrs, SfxPoolItem* ) 71cdf0e10cSrcweir 72cdf0e10cSrcweir 73cdf0e10cSrcweir // SwNumRulesWithName ---------------------------------------------------- 74cdf0e10cSrcweir // PUBLIC METHODES ------------------------------------------------------- 75cdf0e10cSrcweir /*------------------------------------------------------------------------ 76cdf0e10cSrcweir Beschreibung: Speichern einer Regel 77cdf0e10cSrcweir Parameter: rCopy -- die zu speichernde Regel 78cdf0e10cSrcweir nIdx -- Position, an der die Regel zu speichern ist. 79cdf0e10cSrcweir Eine alte Regel an dieser Position wird ueberschrieben. 80cdf0e10cSrcweir ------------------------------------------------------------------------*/ 81cdf0e10cSrcweir 82cdf0e10cSrcweir SwBaseNumRules::SwBaseNumRules( const String& rFileName ) 83cdf0e10cSrcweir : 84cdf0e10cSrcweir sFileName( rFileName ), 85cdf0e10cSrcweir nVersion(0), 86cdf0e10cSrcweir bModified( sal_False ) 87cdf0e10cSrcweir { 88cdf0e10cSrcweir Init(); 89cdf0e10cSrcweir } 90cdf0e10cSrcweir 91cdf0e10cSrcweir /*-----------------26.06.97 08.30------------------- 92cdf0e10cSrcweir 93cdf0e10cSrcweir --------------------------------------------------*/ 94cdf0e10cSrcweir SwBaseNumRules::~SwBaseNumRules() 95cdf0e10cSrcweir { 96cdf0e10cSrcweir if( bModified ) 97cdf0e10cSrcweir { 98cdf0e10cSrcweir SvtPathOptions aPathOpt; 99cdf0e10cSrcweir String sNm( aPathOpt.GetUserConfigPath() ); 100cdf0e10cSrcweir sNm += INET_PATH_TOKEN; 101cdf0e10cSrcweir sNm += sFileName; 102cdf0e10cSrcweir INetURLObject aTempObj(sNm); 103cdf0e10cSrcweir sNm = aTempObj.GetFull(); 104cdf0e10cSrcweir SfxMedium aStrm( sNm, STREAM_WRITE | STREAM_TRUNC | 105cdf0e10cSrcweir STREAM_SHARE_DENYALL, sal_True ); 106cdf0e10cSrcweir Store( *aStrm.GetOutStream() ); 107cdf0e10cSrcweir } 108cdf0e10cSrcweir 109cdf0e10cSrcweir for( sal_uInt16 i = 0; i < nMaxRules; ++i ) 110cdf0e10cSrcweir delete pNumRules[i]; 111cdf0e10cSrcweir } 112cdf0e10cSrcweir 113cdf0e10cSrcweir /*------------------------------------------------------------------------ 114cdf0e10cSrcweir Beschreibung: 115cdf0e10cSrcweir ------------------------------------------------------------------------*/ 116cdf0e10cSrcweir void SwBaseNumRules::Init() 117cdf0e10cSrcweir { 118cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nMaxRules; ++i ) 119cdf0e10cSrcweir pNumRules[i] = 0; 120cdf0e10cSrcweir 121cdf0e10cSrcweir String sNm( sFileName ); 122cdf0e10cSrcweir SvtPathOptions aOpt; 123cdf0e10cSrcweir if( aOpt.SearchFile( sNm, SvtPathOptions::PATH_USERCONFIG )) 124cdf0e10cSrcweir { 125cdf0e10cSrcweir SfxMedium aStrm( sNm, STREAM_STD_READ, sal_True ); 126cdf0e10cSrcweir Load( *aStrm.GetInStream() ); 127cdf0e10cSrcweir } 128cdf0e10cSrcweir } 129cdf0e10cSrcweir 130cdf0e10cSrcweir /*-----------------26.06.97 08.30------------------- 131cdf0e10cSrcweir 132cdf0e10cSrcweir --------------------------------------------------*/ 133cdf0e10cSrcweir 134cdf0e10cSrcweir void SwBaseNumRules::ApplyNumRules(const SwNumRulesWithName &rCopy, sal_uInt16 nIdx) 135cdf0e10cSrcweir { 136cdf0e10cSrcweir ASSERT(nIdx < nMaxRules, Array der NumRules ueberindiziert.); 137cdf0e10cSrcweir if( !pNumRules[nIdx] ) 138cdf0e10cSrcweir pNumRules[nIdx] = new SwNumRulesWithName( rCopy ); 139cdf0e10cSrcweir else 140cdf0e10cSrcweir *pNumRules[nIdx] = rCopy; 141cdf0e10cSrcweir } 142cdf0e10cSrcweir 143cdf0e10cSrcweir // PROTECTED METHODES ---------------------------------------------------- 144cdf0e10cSrcweir /*------------------------------------------------------------------------ 145cdf0e10cSrcweir Beschreibung: Speichern 146cdf0e10cSrcweir ------------------------------------------------------------------------*/ 147cdf0e10cSrcweir 148cdf0e10cSrcweir sal_Bool /**/ SwBaseNumRules::Store(SvStream &rStream) 149cdf0e10cSrcweir { 150cdf0e10cSrcweir rStream << ACT_NUM_VERSION; 151cdf0e10cSrcweir // Schreiben, welche Positionen durch eine Regel belegt sind 152cdf0e10cSrcweir // Anschliessend Schreiben der einzelnen Rules 153cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nMaxRules; ++i) 154cdf0e10cSrcweir { 155cdf0e10cSrcweir if(pNumRules[i]) 156cdf0e10cSrcweir { 157cdf0e10cSrcweir rStream << (unsigned char) sal_True; 158cdf0e10cSrcweir pNumRules[i]->Store( rStream ); 159cdf0e10cSrcweir } 160cdf0e10cSrcweir else 161cdf0e10cSrcweir rStream << (unsigned char) sal_False; 162cdf0e10cSrcweir } 163cdf0e10cSrcweir return sal_True; 164cdf0e10cSrcweir } 165cdf0e10cSrcweir 166cdf0e10cSrcweir 167cdf0e10cSrcweir 168cdf0e10cSrcweir /*------------------------------------------------------------------------ 169cdf0e10cSrcweir Beschreibung: Speichern / Laden 170cdf0e10cSrcweir ------------------------------------------------------------------------*/ 171cdf0e10cSrcweir 172cdf0e10cSrcweir 173cdf0e10cSrcweir int SwBaseNumRules::Load(SvStream &rStream) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir int rc = 0; 176cdf0e10cSrcweir 177cdf0e10cSrcweir rStream >> nVersion; 178cdf0e10cSrcweir 179cdf0e10cSrcweir // wegen eines kleinen aber schweren Fehlers schreibt die PreFinal die 180cdf0e10cSrcweir // gleiche VERSION_40A wie das SP2 #55402# 181cdf0e10cSrcweir if(VERSION_40A == nVersion) 182cdf0e10cSrcweir { 183cdf0e10cSrcweir DBG_ERROR("Version 364 ist nicht eindeutig #55402#"); 184cdf0e10cSrcweir } 185cdf0e10cSrcweir else if( VERSION_30B == nVersion || VERSION_31B == nVersion || 186cdf0e10cSrcweir ACT_NUM_VERSION >= nVersion ) 187cdf0e10cSrcweir { 188cdf0e10cSrcweir unsigned char bRule = sal_False; 189cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nMaxRules; ++i) 190cdf0e10cSrcweir { 191cdf0e10cSrcweir rStream >> bRule; 192cdf0e10cSrcweir if(bRule) 193cdf0e10cSrcweir pNumRules[i] = new SwNumRulesWithName( rStream, nVersion ); 194cdf0e10cSrcweir } 195cdf0e10cSrcweir } 196cdf0e10cSrcweir else 197cdf0e10cSrcweir { 198cdf0e10cSrcweir rc = 1; 199cdf0e10cSrcweir } 200cdf0e10cSrcweir 201cdf0e10cSrcweir return rc; 202cdf0e10cSrcweir } 203cdf0e10cSrcweir 204cdf0e10cSrcweir /*-----------------26.06.97 08.34------------------- 205cdf0e10cSrcweir 206cdf0e10cSrcweir --------------------------------------------------*/ 207cdf0e10cSrcweir 208cdf0e10cSrcweir /*------------------------------------------------------------------------*/ 209cdf0e10cSrcweir 210cdf0e10cSrcweir 211cdf0e10cSrcweir SwChapterNumRules::SwChapterNumRules() : 212cdf0e10cSrcweir SwBaseNumRules(C2S(CHAPTER_FILENAME)) 213cdf0e10cSrcweir { 214cdf0e10cSrcweir } 215cdf0e10cSrcweir 216cdf0e10cSrcweir /*------------------------------------------------------------------------*/ 217cdf0e10cSrcweir 218cdf0e10cSrcweir SwChapterNumRules::~SwChapterNumRules() 219cdf0e10cSrcweir { 220cdf0e10cSrcweir } 221cdf0e10cSrcweir 222cdf0e10cSrcweir /*-----------------26.06.97 08.23------------------- 223cdf0e10cSrcweir 224cdf0e10cSrcweir --------------------------------------------------*/ 225cdf0e10cSrcweir void SwChapterNumRules::ApplyNumRules(const SwNumRulesWithName &rCopy, sal_uInt16 nIdx) 226cdf0e10cSrcweir { 227cdf0e10cSrcweir bModified = sal_True; 228cdf0e10cSrcweir SwBaseNumRules::ApplyNumRules(rCopy, nIdx); 229cdf0e10cSrcweir } 230cdf0e10cSrcweir 231cdf0e10cSrcweir /*------------------------------------------------------------------------*/ 232cdf0e10cSrcweir 233cdf0e10cSrcweir SwNumRulesWithName::SwNumRulesWithName( const SwNumRule &rCopy, 234cdf0e10cSrcweir const String &rName ) 235cdf0e10cSrcweir : aName(rName) 236cdf0e10cSrcweir { 237cdf0e10cSrcweir for( sal_uInt16 n = 0; n < MAXLEVEL; ++n ) 238cdf0e10cSrcweir { 239cdf0e10cSrcweir const SwNumFmt* pFmt = rCopy.GetNumFmt( n ); 240cdf0e10cSrcweir if( pFmt ) 241cdf0e10cSrcweir aFmts[ n ] = new _SwNumFmtGlobal( *pFmt ); 242cdf0e10cSrcweir else 243cdf0e10cSrcweir aFmts[ n ] = 0; 244cdf0e10cSrcweir } 245cdf0e10cSrcweir } 246cdf0e10cSrcweir 247cdf0e10cSrcweir /*------------------------------------------------------------------------ 248cdf0e10cSrcweir Beschreibung: 249cdf0e10cSrcweir ------------------------------------------------------------------------*/ 250cdf0e10cSrcweir SwNumRulesWithName::SwNumRulesWithName( const SwNumRulesWithName& rCopy ) 251cdf0e10cSrcweir { 252cdf0e10cSrcweir memset( aFmts, 0, sizeof( aFmts )); 253cdf0e10cSrcweir *this = rCopy; 254cdf0e10cSrcweir } 255cdf0e10cSrcweir 256cdf0e10cSrcweir 257cdf0e10cSrcweir /*------------------------------------------------------------------------ 258cdf0e10cSrcweir Beschreibung: 259cdf0e10cSrcweir ------------------------------------------------------------------------*/ 260cdf0e10cSrcweir SwNumRulesWithName::~SwNumRulesWithName() 261cdf0e10cSrcweir { 262cdf0e10cSrcweir for( int n = 0; n < MAXLEVEL; ++n ) 263cdf0e10cSrcweir delete aFmts[ n ]; 264cdf0e10cSrcweir } 265cdf0e10cSrcweir 266cdf0e10cSrcweir /*------------------------------------------------------------------------ 267cdf0e10cSrcweir Beschreibung: 268cdf0e10cSrcweir ------------------------------------------------------------------------*/ 269cdf0e10cSrcweir const SwNumRulesWithName& SwNumRulesWithName::operator=(const SwNumRulesWithName &rCopy) 270cdf0e10cSrcweir { 271cdf0e10cSrcweir if( this != &rCopy ) 272cdf0e10cSrcweir { 273cdf0e10cSrcweir aName = rCopy.aName; 274cdf0e10cSrcweir for( int n = 0; n < MAXLEVEL; ++n ) 275cdf0e10cSrcweir { 276cdf0e10cSrcweir delete aFmts[ n ]; 277cdf0e10cSrcweir 278cdf0e10cSrcweir _SwNumFmtGlobal* pFmt = rCopy.aFmts[ n ]; 279cdf0e10cSrcweir if( pFmt ) 280cdf0e10cSrcweir aFmts[ n ] = new _SwNumFmtGlobal( *pFmt ); 281cdf0e10cSrcweir else 282cdf0e10cSrcweir aFmts[ n ] = 0; 283cdf0e10cSrcweir } 284cdf0e10cSrcweir } 285cdf0e10cSrcweir return *this; 286cdf0e10cSrcweir } 287cdf0e10cSrcweir 288cdf0e10cSrcweir /*------------------------------------------------------------------------ 289cdf0e10cSrcweir Beschreibung: 290cdf0e10cSrcweir ------------------------------------------------------------------------*/ 291cdf0e10cSrcweir SwNumRulesWithName::SwNumRulesWithName( SvStream &rStream, sal_uInt16 nVersion ) 292cdf0e10cSrcweir { 293cdf0e10cSrcweir CharSet eEncoding = gsl_getSystemTextEncoding(); 294cdf0e10cSrcweir rStream.ReadByteString(aName, eEncoding); 295cdf0e10cSrcweir 296cdf0e10cSrcweir char c; 297cdf0e10cSrcweir for(sal_uInt16 n = 0; n < MAXLEVEL; ++n ) 298cdf0e10cSrcweir { 299cdf0e10cSrcweir if( VERSION_30B == nVersion ) 300cdf0e10cSrcweir c = 1; 301cdf0e10cSrcweir // wegen eines kleinen aber schweren Fehlers schreibt die PreFinal die 302cdf0e10cSrcweir // gleiche VERSION_40A wie das SP2 #55402# 303cdf0e10cSrcweir else if(nVersion < VERSION_40A && n > 5) 304cdf0e10cSrcweir // else if(nVersion < VERSION_50A && n > 5) 305cdf0e10cSrcweir c = 0; 306cdf0e10cSrcweir else 307cdf0e10cSrcweir rStream >> c; 308cdf0e10cSrcweir 309cdf0e10cSrcweir if( c ) 310cdf0e10cSrcweir aFmts[ n ] = new _SwNumFmtGlobal( rStream, nVersion ); 311cdf0e10cSrcweir else 312cdf0e10cSrcweir aFmts[ n ] = 0; 313cdf0e10cSrcweir } 314cdf0e10cSrcweir } 315cdf0e10cSrcweir 316cdf0e10cSrcweir /*------------------------------------------------------------------------ 317cdf0e10cSrcweir Beschreibung: 318cdf0e10cSrcweir ------------------------------------------------------------------------*/ 319cdf0e10cSrcweir 320cdf0e10cSrcweir void SwNumRulesWithName::MakeNumRule( SwWrtShell& rSh, SwNumRule& rChg ) const 321cdf0e10cSrcweir { 322cdf0e10cSrcweir // --> OD 2008-02-11 #newlistlevelattrs# 323cdf0e10cSrcweir // --> OD 2008-06-06 #i89178# 324cdf0e10cSrcweir rChg = SwNumRule( aName, numfunc::GetDefaultPositionAndSpaceMode() ); 325cdf0e10cSrcweir // <-- 326cdf0e10cSrcweir rChg.SetAutoRule( sal_False ); 327cdf0e10cSrcweir _SwNumFmtGlobal* pFmt; 328cdf0e10cSrcweir for( sal_uInt16 n = 0; n < MAXLEVEL; ++n ) 329cdf0e10cSrcweir if( 0 != ( pFmt = aFmts[ n ] ) ) 330cdf0e10cSrcweir { 331cdf0e10cSrcweir SwNumFmt aNew; 332cdf0e10cSrcweir pFmt->ChgNumFmt( rSh, aNew ); 333cdf0e10cSrcweir rChg.Set( n, aNew ); 334cdf0e10cSrcweir } 335cdf0e10cSrcweir } 336cdf0e10cSrcweir 337cdf0e10cSrcweir /*------------------------------------------------------------------------ 338cdf0e10cSrcweir Beschreibung: 339cdf0e10cSrcweir ------------------------------------------------------------------------*/ 340cdf0e10cSrcweir void SwNumRulesWithName::Store( SvStream &rStream ) 341cdf0e10cSrcweir { 342cdf0e10cSrcweir CharSet eEncoding = gsl_getSystemTextEncoding(); 343cdf0e10cSrcweir rStream.WriteByteString(aName, eEncoding); 344cdf0e10cSrcweir 345cdf0e10cSrcweir for( sal_uInt16 n = 0; n < MAXLEVEL; ++n ) 346cdf0e10cSrcweir { 347cdf0e10cSrcweir _SwNumFmtGlobal* pFmt = aFmts[ n ]; 348cdf0e10cSrcweir if( pFmt ) 349cdf0e10cSrcweir { 350cdf0e10cSrcweir rStream << (char)1; 351cdf0e10cSrcweir pFmt->Store( rStream ); 352cdf0e10cSrcweir } 353cdf0e10cSrcweir else 354cdf0e10cSrcweir rStream << (char)0; 355cdf0e10cSrcweir } 356cdf0e10cSrcweir } 357cdf0e10cSrcweir /*------------------------------------------------------------------------ 358cdf0e10cSrcweir Beschreibung: 359cdf0e10cSrcweir ------------------------------------------------------------------------*/ 360cdf0e10cSrcweir 361cdf0e10cSrcweir 362cdf0e10cSrcweir SwNumRulesWithName::_SwNumFmtGlobal::_SwNumFmtGlobal( const SwNumFmt& rFmt ) 363cdf0e10cSrcweir : aFmt( rFmt ), nCharPoolId( USHRT_MAX ) 364cdf0e10cSrcweir { 365cdf0e10cSrcweir // relative Abstaende ????? 366cdf0e10cSrcweir 367cdf0e10cSrcweir SwCharFmt* pFmt = rFmt.GetCharFmt(); 368cdf0e10cSrcweir if( pFmt ) 369cdf0e10cSrcweir { 370cdf0e10cSrcweir sCharFmtName = pFmt->GetName(); 371cdf0e10cSrcweir nCharPoolId = pFmt->GetPoolFmtId(); 372cdf0e10cSrcweir if( pFmt->GetAttrSet().Count() ) 373cdf0e10cSrcweir { 374cdf0e10cSrcweir SfxItemIter aIter( pFmt->GetAttrSet() ); 375cdf0e10cSrcweir const SfxPoolItem *pCurr = aIter.GetCurItem(); 376cdf0e10cSrcweir while( sal_True ) 377cdf0e10cSrcweir { 378cdf0e10cSrcweir aItems.Insert( pCurr->Clone(), aItems.Count() ); 379cdf0e10cSrcweir if( aIter.IsAtEnd() ) 380cdf0e10cSrcweir break; 381cdf0e10cSrcweir pCurr = aIter.NextItem(); 382cdf0e10cSrcweir } 383cdf0e10cSrcweir } 384cdf0e10cSrcweir 385cdf0e10cSrcweir aFmt.SetCharFmt( 0 ); 386cdf0e10cSrcweir } 387cdf0e10cSrcweir } 388cdf0e10cSrcweir 389cdf0e10cSrcweir /*------------------------------------------------------------------------ 390cdf0e10cSrcweir Beschreibung: 391cdf0e10cSrcweir ------------------------------------------------------------------------*/ 392cdf0e10cSrcweir 393cdf0e10cSrcweir SwNumRulesWithName::_SwNumFmtGlobal::_SwNumFmtGlobal( const _SwNumFmtGlobal& rFmt ) 394cdf0e10cSrcweir : 395cdf0e10cSrcweir aFmt( rFmt.aFmt ), 396cdf0e10cSrcweir sCharFmtName( rFmt.sCharFmtName ), 397cdf0e10cSrcweir nCharPoolId( rFmt.nCharPoolId ) 398cdf0e10cSrcweir { 399cdf0e10cSrcweir for( sal_uInt16 n = rFmt.aItems.Count(); n; ) 400cdf0e10cSrcweir aItems.Insert( rFmt.aItems[ --n ]->Clone(), aItems.Count() ); 401cdf0e10cSrcweir } 402cdf0e10cSrcweir 403cdf0e10cSrcweir /*------------------------------------------------------------------------ 404cdf0e10cSrcweir Beschreibung: 405cdf0e10cSrcweir ------------------------------------------------------------------------*/ 406cdf0e10cSrcweir 407cdf0e10cSrcweir SwNumRulesWithName::_SwNumFmtGlobal::_SwNumFmtGlobal( SvStream& rStream, 408cdf0e10cSrcweir sal_uInt16 nVersion ) 409cdf0e10cSrcweir : nCharPoolId( USHRT_MAX ) 410cdf0e10cSrcweir { 411cdf0e10cSrcweir CharSet eEncoding = gsl_getSystemTextEncoding(); 412cdf0e10cSrcweir { 413cdf0e10cSrcweir sal_uInt16 nUS; 414cdf0e10cSrcweir sal_Char cChar; 415cdf0e10cSrcweir short nShort; 416cdf0e10cSrcweir sal_Bool bFlag; 417cdf0e10cSrcweir String sStr; 418cdf0e10cSrcweir 419cdf0e10cSrcweir rStream >> nUS; aFmt.SetNumberingType((sal_Int16)nUS ); 420cdf0e10cSrcweir if( VERSION_53A > nVersion ) 421cdf0e10cSrcweir { 422cdf0e10cSrcweir rStream >> cChar; aFmt.SetBulletChar( cChar ); 423cdf0e10cSrcweir } 424cdf0e10cSrcweir else 425cdf0e10cSrcweir { 426cdf0e10cSrcweir rStream >> nUS; aFmt.SetBulletChar( nUS ); 427cdf0e10cSrcweir } 428cdf0e10cSrcweir 429cdf0e10cSrcweir rStream >> bFlag; aFmt.SetIncludeUpperLevels( bFlag ); 430cdf0e10cSrcweir 431cdf0e10cSrcweir if( VERSION_30B == nVersion ) 432cdf0e10cSrcweir { 433cdf0e10cSrcweir long nL; 434cdf0e10cSrcweir rStream >> cChar; aFmt.SetStart( (sal_uInt16)cChar ); 435cdf0e10cSrcweir 436cdf0e10cSrcweir rStream.ReadByteString(sStr, eEncoding); 437cdf0e10cSrcweir aFmt.SetPrefix( sStr ); 438cdf0e10cSrcweir rStream.ReadByteString(sStr, eEncoding); 439cdf0e10cSrcweir aFmt.SetSuffix( sStr ); 440cdf0e10cSrcweir rStream >> nUS; aFmt.SetNumAdjust( SvxAdjust( nUS ) ); 441cdf0e10cSrcweir rStream >> nL; aFmt.SetLSpace( lNumIndent ); 442cdf0e10cSrcweir rStream >> nL; aFmt.SetFirstLineOffset( (short)nL ); 443cdf0e10cSrcweir } 444cdf0e10cSrcweir else // alter StartWert war ein Byte 445cdf0e10cSrcweir { 446cdf0e10cSrcweir rStream >> nUS; aFmt.SetStart( nUS ); 447cdf0e10cSrcweir rStream.ReadByteString(sStr, eEncoding); 448cdf0e10cSrcweir aFmt.SetPrefix( sStr ); 449cdf0e10cSrcweir rStream.ReadByteString(sStr, eEncoding); 450cdf0e10cSrcweir aFmt.SetSuffix( sStr ); 451cdf0e10cSrcweir rStream >> nUS; aFmt.SetNumAdjust( SvxAdjust( nUS ) ); 452cdf0e10cSrcweir rStream >> nUS; aFmt.SetAbsLSpace( nUS ); 453cdf0e10cSrcweir rStream >> nShort; aFmt.SetFirstLineOffset( nShort ); 454cdf0e10cSrcweir rStream >> nUS; aFmt.SetCharTextDistance( nUS ); 455cdf0e10cSrcweir rStream >> nShort; aFmt.SetLSpace( nShort ); 456cdf0e10cSrcweir rStream >> bFlag; 457cdf0e10cSrcweir } 458cdf0e10cSrcweir 459cdf0e10cSrcweir sal_uInt16 nFamily; 460cdf0e10cSrcweir sal_uInt16 nCharSet; 461cdf0e10cSrcweir short nWidth; 462cdf0e10cSrcweir short nHeight; 463cdf0e10cSrcweir sal_uInt16 nPitch; 464cdf0e10cSrcweir String aName; 465cdf0e10cSrcweir 466cdf0e10cSrcweir rStream.ReadByteString(aName, eEncoding); 467cdf0e10cSrcweir rStream >> nFamily >> nCharSet >> nWidth >> nHeight >> nPitch; 468cdf0e10cSrcweir 469cdf0e10cSrcweir if( aName.Len() ) 470cdf0e10cSrcweir { 471cdf0e10cSrcweir Font aFont( nFamily, Size( nWidth, nHeight ) ); 472cdf0e10cSrcweir aFont.SetName( aName ); 473cdf0e10cSrcweir aFont.SetCharSet( (CharSet)nCharSet ); 474cdf0e10cSrcweir aFont.SetPitch( (FontPitch)nPitch ); 475cdf0e10cSrcweir 476cdf0e10cSrcweir aFmt.SetBulletFont( &aFont ); 477cdf0e10cSrcweir } 478cdf0e10cSrcweir else 479cdf0e10cSrcweir nCharSet = RTL_TEXTENCODING_SYMBOL; 480cdf0e10cSrcweir 481cdf0e10cSrcweir if( VERSION_53A > nVersion ) 482cdf0e10cSrcweir aFmt.SetBulletChar( ByteString::ConvertToUnicode( 483cdf0e10cSrcweir sal_Char(aFmt.GetBulletChar()), nCharSet )); 484cdf0e10cSrcweir } 485cdf0e10cSrcweir 486cdf0e10cSrcweir if( VERSION_30B != nVersion ) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir sal_uInt16 nItemCount; 489cdf0e10cSrcweir rStream >> nCharPoolId; 490cdf0e10cSrcweir rStream.ReadByteString(sCharFmtName, eEncoding); 491cdf0e10cSrcweir rStream >> nItemCount; 492cdf0e10cSrcweir 493cdf0e10cSrcweir while( nItemCount-- ) 494cdf0e10cSrcweir { 495cdf0e10cSrcweir sal_uInt16 nWhich, nVers; 496cdf0e10cSrcweir rStream >> nWhich >> nVers; 497cdf0e10cSrcweir aItems.Insert( GetDfltAttr( nWhich )->Create( rStream, nVers ), 498cdf0e10cSrcweir aItems.Count() ); 499cdf0e10cSrcweir } 500cdf0e10cSrcweir } 501cdf0e10cSrcweir 502cdf0e10cSrcweir if( VERSION_40A == nVersion && SVX_NUM_BITMAP == aFmt.GetNumberingType() ) 503cdf0e10cSrcweir { 504cdf0e10cSrcweir sal_uInt8 cF; 505cdf0e10cSrcweir Size aSz; 506cdf0e10cSrcweir 507cdf0e10cSrcweir rStream >> aSz.Width() >> aSz.Height(); 508cdf0e10cSrcweir 509cdf0e10cSrcweir rStream >> cF; 510cdf0e10cSrcweir if( cF ) 511cdf0e10cSrcweir { 512cdf0e10cSrcweir SvxBrushItem* pBrush = 0; 513cdf0e10cSrcweir SwFmtVertOrient* pVOrient = 0; 514cdf0e10cSrcweir sal_uInt16 nVer; 515cdf0e10cSrcweir 516cdf0e10cSrcweir if( cF & 1 ) 517cdf0e10cSrcweir { 518cdf0e10cSrcweir rStream >> nVer; 519cdf0e10cSrcweir pBrush = (SvxBrushItem*)GetDfltAttr( RES_BACKGROUND ) 520cdf0e10cSrcweir ->Create( rStream, nVer ); 521cdf0e10cSrcweir } 522cdf0e10cSrcweir 523cdf0e10cSrcweir if( cF & 2 ) 524cdf0e10cSrcweir { 525cdf0e10cSrcweir rStream >> nVer; 526cdf0e10cSrcweir pVOrient = (SwFmtVertOrient*)GetDfltAttr( RES_VERT_ORIENT ) 527cdf0e10cSrcweir ->Create( rStream, nVer ); 528cdf0e10cSrcweir } 529cdf0e10cSrcweir sal_Int16 eOrient = text::VertOrientation::NONE; 530cdf0e10cSrcweir if(pVOrient) 531cdf0e10cSrcweir eOrient = (sal_Int16)pVOrient->GetVertOrient(); 532cdf0e10cSrcweir aFmt.SetGraphicBrush( pBrush, &aSz, pVOrient ? &eOrient : 0 ); 533cdf0e10cSrcweir } 534cdf0e10cSrcweir } 535cdf0e10cSrcweir } 536cdf0e10cSrcweir 537cdf0e10cSrcweir 538cdf0e10cSrcweir /*------------------------------------------------------------------------ 539cdf0e10cSrcweir Beschreibung: 540cdf0e10cSrcweir ------------------------------------------------------------------------*/ 541cdf0e10cSrcweir 542cdf0e10cSrcweir SwNumRulesWithName::_SwNumFmtGlobal::~_SwNumFmtGlobal() 543cdf0e10cSrcweir { 544cdf0e10cSrcweir } 545cdf0e10cSrcweir /*------------------------------------------------------------------------ 546cdf0e10cSrcweir Beschreibung: 547cdf0e10cSrcweir ------------------------------------------------------------------------*/ 548cdf0e10cSrcweir 549cdf0e10cSrcweir 550cdf0e10cSrcweir void SwNumRulesWithName::_SwNumFmtGlobal::Store( SvStream& rStream ) 551cdf0e10cSrcweir { 552cdf0e10cSrcweir CharSet eEncoding = gsl_getSystemTextEncoding(); 553cdf0e10cSrcweir { 554cdf0e10cSrcweir String aName; 555cdf0e10cSrcweir sal_uInt16 nFamily = FAMILY_DONTKNOW, nCharSet = 0, nPitch = 0; 556cdf0e10cSrcweir short nWidth = 0, nHeight = 0; 557cdf0e10cSrcweir 558cdf0e10cSrcweir const Font* pFnt = aFmt.GetBulletFont(); 559cdf0e10cSrcweir if( pFnt ) 560cdf0e10cSrcweir { 561cdf0e10cSrcweir aName = pFnt->GetName(); 562cdf0e10cSrcweir nFamily = (sal_uInt16)pFnt->GetFamily(); 563cdf0e10cSrcweir nCharSet = (sal_uInt16)pFnt->GetCharSet(); 564cdf0e10cSrcweir nWidth = (short)pFnt->GetSize().Width(); 565cdf0e10cSrcweir nHeight = (short)pFnt->GetSize().Height(); 566cdf0e10cSrcweir nPitch = (sal_uInt16)pFnt->GetPitch(); 567cdf0e10cSrcweir } 568cdf0e10cSrcweir 569cdf0e10cSrcweir rStream << sal_uInt16(aFmt.GetNumberingType()) 570cdf0e10cSrcweir << aFmt.GetBulletChar() 571cdf0e10cSrcweir << (aFmt.GetIncludeUpperLevels() > 0) 572cdf0e10cSrcweir << aFmt.GetStart(); 573cdf0e10cSrcweir rStream.WriteByteString( aFmt.GetPrefix(), eEncoding ); 574cdf0e10cSrcweir rStream.WriteByteString( aFmt.GetSuffix(), eEncoding ); 575cdf0e10cSrcweir rStream << sal_uInt16( aFmt.GetNumAdjust() ) 576cdf0e10cSrcweir << aFmt.GetAbsLSpace() 577cdf0e10cSrcweir << aFmt.GetFirstLineOffset() 578cdf0e10cSrcweir << aFmt.GetCharTextDistance() 579cdf0e10cSrcweir << aFmt.GetLSpace() 580cdf0e10cSrcweir << sal_False;//aFmt.IsRelLSpace(); 581cdf0e10cSrcweir rStream.WriteByteString( aName, eEncoding ); 582cdf0e10cSrcweir rStream << nFamily 583cdf0e10cSrcweir << nCharSet 584cdf0e10cSrcweir << nWidth 585cdf0e10cSrcweir << nHeight 586cdf0e10cSrcweir << nPitch; 587cdf0e10cSrcweir } 588cdf0e10cSrcweir rStream << nCharPoolId; 589cdf0e10cSrcweir rStream.WriteByteString( sCharFmtName, eEncoding ); 590cdf0e10cSrcweir rStream << aItems.Count(); 591cdf0e10cSrcweir 592cdf0e10cSrcweir for( sal_uInt16 n = aItems.Count(); n; ) 593cdf0e10cSrcweir { 594cdf0e10cSrcweir SfxPoolItem* pItem = aItems[ --n ]; 595cdf0e10cSrcweir sal_uInt16 nIVers = pItem->GetVersion( SOFFICE_FILEFORMAT_50 ); 596cdf0e10cSrcweir ASSERT( nIVers != USHRT_MAX, 597cdf0e10cSrcweir "Was'n das: Item-Version USHRT_MAX in der aktuellen Version" ); 598cdf0e10cSrcweir rStream << pItem->Which() 599cdf0e10cSrcweir << nIVers; 600cdf0e10cSrcweir pItem->Store( rStream, nIVers ); 601cdf0e10cSrcweir } 602cdf0e10cSrcweir 603cdf0e10cSrcweir // Erweiterungen fuer Version 40A 604cdf0e10cSrcweir 605cdf0e10cSrcweir if( SVX_NUM_BITMAP == aFmt.GetNumberingType() ) 606cdf0e10cSrcweir { 607cdf0e10cSrcweir rStream << (sal_Int32)aFmt.GetGraphicSize().Width() 608cdf0e10cSrcweir << (sal_Int32)aFmt.GetGraphicSize().Height(); 609cdf0e10cSrcweir sal_uInt8 cFlg = ( 0 != aFmt.GetBrush() ? 1 : 0 ) + 610cdf0e10cSrcweir ( 0 != aFmt.GetGraphicOrientation() ? 2 : 0 ); 611cdf0e10cSrcweir rStream << cFlg; 612cdf0e10cSrcweir 613cdf0e10cSrcweir if( aFmt.GetBrush() ) 614cdf0e10cSrcweir { 615cdf0e10cSrcweir sal_uInt16 nVersion = aFmt.GetBrush()->GetVersion( SOFFICE_FILEFORMAT_50 ); 616cdf0e10cSrcweir rStream << nVersion; 617cdf0e10cSrcweir aFmt.GetBrush()->Store( rStream, nVersion ); 618cdf0e10cSrcweir } 619cdf0e10cSrcweir if( aFmt.GetGraphicOrientation() ) 620cdf0e10cSrcweir { 621cdf0e10cSrcweir sal_uInt16 nVersion = aFmt.GetGraphicOrientation()->GetVersion( SOFFICE_FILEFORMAT_50 ); 622cdf0e10cSrcweir rStream << nVersion; 623cdf0e10cSrcweir aFmt.GetGraphicOrientation()->Store( rStream, nVersion ); 624cdf0e10cSrcweir } 625cdf0e10cSrcweir } 626cdf0e10cSrcweir } 627cdf0e10cSrcweir 628cdf0e10cSrcweir /*------------------------------------------------------------------------ 629cdf0e10cSrcweir Beschreibung: 630cdf0e10cSrcweir ------------------------------------------------------------------------*/ 631cdf0e10cSrcweir 632cdf0e10cSrcweir void SwNumRulesWithName::_SwNumFmtGlobal::ChgNumFmt( SwWrtShell& rSh, 633cdf0e10cSrcweir SwNumFmt& rNew ) const 634cdf0e10cSrcweir { 635cdf0e10cSrcweir SwCharFmt* pFmt = 0; 636cdf0e10cSrcweir if( sCharFmtName.Len() ) 637cdf0e10cSrcweir { 638cdf0e10cSrcweir // suche erstmal ueber den Namen 639cdf0e10cSrcweir sal_uInt16 nArrLen = rSh.GetCharFmtCount(); 640cdf0e10cSrcweir for( sal_uInt16 i = 1; i < nArrLen; ++i ) 641cdf0e10cSrcweir { 642cdf0e10cSrcweir pFmt = &rSh.GetCharFmt( i ); 643cdf0e10cSrcweir if( COMPARE_EQUAL == pFmt->GetName().CompareTo( sCharFmtName )) 644cdf0e10cSrcweir // ist vorhanden, also belasse die Attribute wie sie sind! 645cdf0e10cSrcweir break; 646cdf0e10cSrcweir pFmt = 0; 647cdf0e10cSrcweir } 648cdf0e10cSrcweir 649cdf0e10cSrcweir if( !pFmt ) 650cdf0e10cSrcweir { 651cdf0e10cSrcweir if( IsPoolUserFmt( nCharPoolId ) ) 652cdf0e10cSrcweir { 653cdf0e10cSrcweir pFmt = rSh.MakeCharFmt( sCharFmtName ); 654cdf0e10cSrcweir pFmt->SetAuto( sal_False ); 655cdf0e10cSrcweir } 656cdf0e10cSrcweir else 657cdf0e10cSrcweir pFmt = rSh.GetCharFmtFromPool( nCharPoolId ); 658cdf0e10cSrcweir 659cdf0e10cSrcweir if( !pFmt->GetDepends() ) // Attribute setzen 660cdf0e10cSrcweir for( sal_uInt16 n = aItems.Count(); n; ) 661cdf0e10cSrcweir pFmt->SetFmtAttr( *aItems[ --n ] ); 662cdf0e10cSrcweir } 663cdf0e10cSrcweir } 664cdf0e10cSrcweir ((SwNumFmt&)aFmt).SetCharFmt( pFmt ); 665cdf0e10cSrcweir rNew = aFmt; 666cdf0e10cSrcweir if( pFmt ) 667cdf0e10cSrcweir ((SwNumFmt&)aFmt).SetCharFmt( 0 ); 668cdf0e10cSrcweir } 669cdf0e10cSrcweir 670