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 #ifndef _DOCSTYLE_HXX 24 #define _DOCSTYLE_HXX 25 26 #include <rtl/ref.hxx> 27 28 #ifndef _SVSTDARR_HXX 29 #define _SVSTDARR_STRINGSDTOR 30 #include <svl/svstdarr.hxx> 31 #endif 32 #include <svl/style.hxx> 33 #include <svl/itemset.hxx> 34 #include "swdllapi.h" 35 36 class SwDoc; 37 class SwDocStyleSheetPool; 38 class SwPageDesc; 39 class SwCharFmt; 40 class SwTxtFmtColl; 41 class SwFrmFmt; 42 class SwNumRule; 43 44 /*-------------------------------------------------------------------- 45 Beschreibung: Lokale Hilfsklasse 46 --------------------------------------------------------------------*/ 47 class SwPoolFmtList : public SvStringsDtor 48 { 49 public: 50 SwPoolFmtList() {} 51 void Append( char cChar, const String& rStr ); 52 void Erase(); 53 }; 54 55 56 /*-------------------------------------------------------------------- 57 Beschreibung: temp. StyleSheet 58 --------------------------------------------------------------------*/ 59 class SW_DLLPUBLIC SwDocStyleSheet : public SfxStyleSheetBase 60 { 61 friend class SwDocStyleSheetPool; 62 friend class SwStyleSheetIterator; 63 64 SwCharFmt* pCharFmt; 65 SwTxtFmtColl* pColl; 66 SwFrmFmt* pFrmFmt; 67 const SwPageDesc* pDesc; 68 const SwNumRule* pNumRule; 69 70 SwDoc& rDoc; 71 SfxItemSet aCoreSet; 72 73 sal_Bool bPhysical; 74 75 76 // leere Huelse zum richtigen StyleSheet (Core) machen 77 SW_DLLPRIVATE void Create(); 78 79 // den StyleSheet mit Daten fuellen 80 enum FillStyleType { 81 FillOnlyName, 82 FillAllInfo, 83 FillPhysical 84 }; 85 86 SW_DLLPRIVATE sal_Bool FillStyleSheet( FillStyleType eFType ); 87 88 protected: 89 virtual ~SwDocStyleSheet(); 90 91 public: 92 SwDocStyleSheet( SwDoc& rDoc, 93 const String& rName, 94 SwDocStyleSheetPool& rPool, 95 SfxStyleFamily eFam, 96 sal_uInt16 nMask); 97 98 SwDocStyleSheet( const SwDocStyleSheet& ); 99 100 void Reset(); 101 102 void SetMask(sal_uInt16 nMsk) { nMask = nMsk; } 103 void SetFamily(SfxStyleFamily eFam) { nFamily = eFam; } 104 105 sal_Bool IsPhysical() const { return bPhysical; } 106 void SetPhysical(sal_Bool bPhys); 107 108 // --> OD 2008-02-11 #newlistlevelattrs# 109 // add optional parameter <bResetIndentAttrsAtParagraphStyle>, default value sal_False, 110 // which indicates that the indent attributes at a paragraph style should 111 // be reset in case that a list style is applied to the paragraph style and 112 // no indent attributes are applied. 113 void SetItemSet( const SfxItemSet& rSet, 114 const bool bResetIndentAttrsAtParagraphStyle = false ); 115 // <-- 116 117 virtual SfxItemSet& GetItemSet(); 118 // --> OD 2008-02-12 #newlistlevelattrs# 119 // new method for paragraph styles to merge indent attributes of applied list 120 // style into the given item set, if the list style indent attributes are applicable. 121 void MergeIndentAttrsOfListStyle( SfxItemSet& rSet ); 122 // <-- 123 virtual const String& GetParent() const; 124 virtual const String& GetFollow() const; 125 126 virtual sal_uLong GetHelpId( String& rFile ); 127 virtual void SetHelpId( const String& r, sal_uLong nId ); 128 129 // Vorbelegen der member ohne physikalischen Zugriff 130 // wird vom StyleSheetPool benutzt 131 // 132 void PresetName(const String& rName) { aName = rName; } 133 void PresetNameAndFamily(const String& rName); 134 void PresetParent(const String& rName){ aParent = rName; } 135 void PresetFollow(const String& rName){ aFollow = rName; } 136 137 virtual sal_Bool SetName( const String& rStr); 138 virtual sal_Bool SetParent( const String& rStr); 139 virtual sal_Bool SetFollow( const String& rStr); 140 141 virtual sal_Bool HasFollowSupport() const; 142 virtual sal_Bool HasParentSupport() const; 143 virtual sal_Bool HasClearParentSupport() const; 144 virtual String GetDescription(); 145 virtual String GetDescription(SfxMapUnit eUnit); 146 147 SwCharFmt* GetCharFmt(); 148 SwTxtFmtColl* GetCollection(); 149 SwFrmFmt* GetFrmFmt(); 150 const SwPageDesc* GetPageDesc(); 151 const SwNumRule* GetNumRule(); 152 void SetNumRule(const SwNumRule& rRule); 153 154 virtual sal_Bool IsUsed() const; 155 }; 156 157 /*-------------------------------------------------------------------- 158 Beschreibung: Iterator fuer den Pool 159 --------------------------------------------------------------------*/ 160 161 class SwStyleSheetIterator : public SfxStyleSheetIterator, public SfxListener 162 { 163 rtl::Reference< SwDocStyleSheet > mxIterSheet; 164 rtl::Reference< SwDocStyleSheet > mxStyleSheet; 165 SwPoolFmtList aLst; 166 sal_uInt16 nLastPos; 167 sal_Bool bFirstCalled; 168 169 void AppendStyleList(const SvStringsDtor& rLst, 170 sal_Bool bUsed, 171 sal_uInt16 nSection, 172 char cType); 173 174 public: 175 SwStyleSheetIterator( SwDocStyleSheetPool* pBase, 176 SfxStyleFamily eFam, sal_uInt16 n=0xFFFF ); 177 virtual ~SwStyleSheetIterator(); 178 179 virtual sal_uInt16 Count(); 180 virtual SfxStyleSheetBase *operator[](sal_uInt16 nIdx); 181 virtual SfxStyleSheetBase* First(); 182 virtual SfxStyleSheetBase* Next(); 183 virtual SfxStyleSheetBase* Find(const UniString& rStr); 184 185 virtual void Notify( SfxBroadcaster&, const SfxHint& ); 186 }; 187 188 /*-------------------------------------------------------------------- 189 Beschreibung: Pool fuer 190 --------------------------------------------------------------------*/ 191 192 class SwDocStyleSheetPool : public SfxStyleSheetBasePool 193 { 194 rtl::Reference< SwDocStyleSheet > mxStyleSheet; 195 SwDoc& rDoc; 196 sal_Bool bOrganizer : 1; // sal_True: fuer den Organizer 197 198 199 virtual SfxStyleSheetBase* Create( const String&, SfxStyleFamily, sal_uInt16 nMask); 200 virtual SfxStyleSheetBase* Create( const SfxStyleSheetBase& ); 201 202 using SfxStyleSheetBasePool::Find; 203 204 public: 205 SwDocStyleSheetPool( SwDoc&, sal_Bool bOrganizer = sal_False ); 206 207 virtual void Replace( SfxStyleSheetBase& rSource, 208 SfxStyleSheetBase& rTarget ); 209 virtual SfxStyleSheetBase& Make(const String&, SfxStyleFamily, sal_uInt16 nMask, sal_uInt16 nPos = 0xffff); 210 211 virtual SfxStyleSheetBase* Find( const String&, SfxStyleFamily eFam, 212 sal_uInt16 n=0xFFFF ); 213 214 virtual sal_Bool SetParent( SfxStyleFamily eFam, const String &rStyle, 215 const String &rParent ); 216 217 virtual void Remove( SfxStyleSheetBase* pStyle); 218 219 void SetOrganizerMode( sal_Bool bMode ) { bOrganizer = bMode; } 220 sal_Bool IsOrganizerMode() const { return bOrganizer; } 221 222 virtual SfxStyleSheetIterator* CreateIterator( SfxStyleFamily, 223 sal_uInt16 nMask ); 224 225 SwDoc& GetDoc() const { return rDoc; } 226 227 void dispose(); 228 229 virtual void SAL_CALL acquire( ) throw (); 230 virtual void SAL_CALL release( ) throw (); 231 232 protected: 233 virtual ~SwDocStyleSheetPool(); 234 235 //Fuer die daemlicheren Compiler 236 private: 237 SwDocStyleSheetPool( const SwDocStyleSheetPool& ); 238 }; 239 240 241 #endif 242