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_sc.hxx" 26 27 28 29 #include "scitems.hxx" 30 #include <tools/shl.hxx> 31 #include <vcl/outdev.hxx> 32 #include <svl/aeitem.hxx> 33 #include <svl/itemiter.hxx> 34 #include <svx/algitem.hxx> 35 #include <editeng/boxitem.hxx> 36 #include <editeng/bolnitem.hxx> 37 #include <editeng/brshitem.hxx> 38 #include <editeng/charreliefitem.hxx> 39 #include <editeng/cntritem.hxx> 40 #include <editeng/colritem.hxx> 41 #include <editeng/crsditem.hxx> 42 #include <svx/dialmgr.hxx> 43 #include <editeng/emphitem.hxx> 44 #include <editeng/fhgtitem.hxx> 45 #include <editeng/fontitem.hxx> 46 #include <editeng/forbiddenruleitem.hxx> 47 #include <editeng/frmdiritem.hxx> 48 #include <editeng/hngpnctitem.hxx> 49 #include <editeng/itemtype.hxx> 50 #include <editeng/langitem.hxx> 51 #include <editeng/lrspitem.hxx> 52 #include <svx/pageitem.hxx> 53 #include <editeng/pbinitem.hxx> 54 #include <editeng/postitem.hxx> 55 #include <svx/rotmodit.hxx> 56 #include <editeng/scriptspaceitem.hxx> 57 #include <editeng/shaditem.hxx> 58 #include <editeng/shdditem.hxx> 59 #include <editeng/sizeitem.hxx> 60 #include <svx/svxitems.hrc> 61 #include <editeng/udlnitem.hxx> 62 #include <editeng/ulspitem.hxx> 63 #include <editeng/wghtitem.hxx> 64 #include <editeng/wrlmitem.hxx> 65 #include <editeng/xmlcnitm.hxx> 66 67 #include "docpool.hxx" 68 #include "global.hxx" 69 #include "attrib.hxx" 70 #include "patattr.hxx" 71 #include "globstr.hrc" 72 #include "sc.hrc" // Slot-IDs 73 74 75 #define SC_MAX_POOLREF (SFX_ITEMS_OLD_MAXREF - 39) 76 #define SC_SAFE_POOLREF (SC_MAX_POOLREF + 20) 77 78 // STATIC DATA ----------------------------------------------------------- 79 80 sal_uInt16* ScDocumentPool::pVersionMap1 = 0; 81 sal_uInt16* ScDocumentPool::pVersionMap2 = 0; 82 sal_uInt16* ScDocumentPool::pVersionMap3 = 0; 83 sal_uInt16* ScDocumentPool::pVersionMap4 = 0; 84 sal_uInt16* ScDocumentPool::pVersionMap5 = 0; 85 sal_uInt16* ScDocumentPool::pVersionMap6 = 0; 86 sal_uInt16* ScDocumentPool::pVersionMap7 = 0; 87 sal_uInt16* ScDocumentPool::pVersionMap8 = 0; 88 sal_uInt16* ScDocumentPool::pVersionMap9 = 0; 89 sal_uInt16* ScDocumentPool::pVersionMap10 = 0; 90 sal_uInt16* ScDocumentPool::pVersionMap11 = 0; 91 92 // ATTR_FONT_TWOLINES (not used) was changed to ATTR_USERDEF (not saved in binary format) in 641c 93 94 static SfxItemInfo __READONLY_DATA aItemInfos[] = 95 { 96 { SID_ATTR_CHAR_FONT, SFX_ITEM_POOLABLE }, // ATTR_FONT 97 { SID_ATTR_CHAR_FONTHEIGHT, SFX_ITEM_POOLABLE }, // ATTR_FONT_HEIGHT 98 { SID_ATTR_CHAR_WEIGHT, SFX_ITEM_POOLABLE }, // ATTR_FONT_WEIGHT 99 { SID_ATTR_CHAR_POSTURE, SFX_ITEM_POOLABLE }, // ATTR_FONT_POSTURE 100 { SID_ATTR_CHAR_UNDERLINE, SFX_ITEM_POOLABLE }, // ATTR_FONT_UNDERLINE 101 { SID_ATTR_CHAR_OVERLINE, SFX_ITEM_POOLABLE }, // ATTR_FONT_OVERLINE 102 { SID_ATTR_CHAR_STRIKEOUT, SFX_ITEM_POOLABLE }, // ATTR_FONT_CROSSEDOUT 103 { SID_ATTR_CHAR_CONTOUR, SFX_ITEM_POOLABLE }, // ATTR_FONT_CONTOUR 104 { SID_ATTR_CHAR_SHADOWED, SFX_ITEM_POOLABLE }, // ATTR_FONT_SHADOWED 105 { SID_ATTR_CHAR_COLOR, SFX_ITEM_POOLABLE }, // ATTR_FONT_COLOR 106 { SID_ATTR_CHAR_LANGUAGE, SFX_ITEM_POOLABLE }, // ATTR_FONT_LANGUAGE 107 { SID_ATTR_CHAR_CJK_FONT, SFX_ITEM_POOLABLE }, // ATTR_CJK_FONT from 614 108 { SID_ATTR_CHAR_CJK_FONTHEIGHT, SFX_ITEM_POOLABLE }, // ATTR_CJK_FONT_HEIGHT from 614 109 { SID_ATTR_CHAR_CJK_WEIGHT, SFX_ITEM_POOLABLE }, // ATTR_CJK_FONT_WEIGHT from 614 110 { SID_ATTR_CHAR_CJK_POSTURE, SFX_ITEM_POOLABLE }, // ATTR_CJK_FONT_POSTURE from 614 111 { SID_ATTR_CHAR_CJK_LANGUAGE, SFX_ITEM_POOLABLE }, // ATTR_CJK_FONT_LANGUAGE from 614 112 { SID_ATTR_CHAR_CTL_FONT, SFX_ITEM_POOLABLE }, // ATTR_CTL_FONT from 614 113 { SID_ATTR_CHAR_CTL_FONTHEIGHT, SFX_ITEM_POOLABLE }, // ATTR_CTL_FONT_HEIGHT from 614 114 { SID_ATTR_CHAR_CTL_WEIGHT, SFX_ITEM_POOLABLE }, // ATTR_CTL_FONT_WEIGHT from 614 115 { SID_ATTR_CHAR_CTL_POSTURE, SFX_ITEM_POOLABLE }, // ATTR_CTL_FONT_POSTURE from 614 116 { SID_ATTR_CHAR_CTL_LANGUAGE, SFX_ITEM_POOLABLE }, // ATTR_CTL_FONT_LANGUAGE from 614 117 { SID_ATTR_CHAR_EMPHASISMARK, SFX_ITEM_POOLABLE }, // ATTR_FONT_EMPHASISMARK from 614 118 { 0, SFX_ITEM_POOLABLE }, // ATTR_USERDEF from 614 / 641c 119 { SID_ATTR_CHAR_WORDLINEMODE, SFX_ITEM_POOLABLE }, // ATTR_FONT_WORDLINE from 632b 120 { SID_ATTR_CHAR_RELIEF, SFX_ITEM_POOLABLE }, // ATTR_FONT_RELIEF from 632b 121 { SID_ATTR_ALIGN_HYPHENATION, SFX_ITEM_POOLABLE }, // ATTR_HYPHENATE from 632b 122 { 0, SFX_ITEM_POOLABLE }, // ATTR_SCRIPTSPACE from 614d 123 { 0, SFX_ITEM_POOLABLE }, // ATTR_HANGPUNCTUATION from 614d 124 { SID_ATTR_PARA_FORBIDDEN_RULES,SFX_ITEM_POOLABLE }, // ATTR_FORBIDDEN_RULES from 614d 125 { SID_ATTR_ALIGN_HOR_JUSTIFY, SFX_ITEM_POOLABLE }, // ATTR_HOR_JUSTIFY 126 { SID_ATTR_ALIGN_INDENT, SFX_ITEM_POOLABLE }, // ATTR_INDENT ab 350 127 { SID_ATTR_ALIGN_VER_JUSTIFY, SFX_ITEM_POOLABLE }, // ATTR_VER_JUSTIFY 128 { SID_ATTR_ALIGN_STACKED, SFX_ITEM_POOLABLE }, // ATTR_STACKED from 680/dr14 (replaces ATTR_ORIENTATION) 129 { SID_ATTR_ALIGN_DEGREES, SFX_ITEM_POOLABLE }, // ATTR_ROTATE_VALUE ab 367 130 { SID_ATTR_ALIGN_LOCKPOS, SFX_ITEM_POOLABLE }, // ATTR_ROTATE_MODE ab 367 131 { SID_ATTR_ALIGN_ASIANVERTICAL, SFX_ITEM_POOLABLE }, // ATTR_VERTICAL_ASIAN from 642 132 { SID_ATTR_FRAMEDIRECTION, SFX_ITEM_POOLABLE }, // ATTR_WRITINGDIR from 643 133 { SID_ATTR_ALIGN_LINEBREAK, SFX_ITEM_POOLABLE }, // ATTR_LINEBREAK 134 { SID_ATTR_ALIGN_SHRINKTOFIT, SFX_ITEM_POOLABLE }, // ATTR_SHRINKTOFIT from 680/dr14 135 { SID_ATTR_BORDER_DIAG_TLBR, SFX_ITEM_POOLABLE }, // ATTR_BORDER_TLBR from 680/dr14 136 { SID_ATTR_BORDER_DIAG_BLTR, SFX_ITEM_POOLABLE }, // ATTR_BORDER_BLTR from 680/dr14 137 { SID_ATTR_ALIGN_MARGIN, SFX_ITEM_POOLABLE }, // ATTR_MARGIN 138 { 0, SFX_ITEM_POOLABLE }, // ATTR_MERGE 139 { 0, SFX_ITEM_POOLABLE }, // ATTR_MERGE_FLAG 140 { SID_ATTR_NUMBERFORMAT_VALUE, SFX_ITEM_POOLABLE }, // ATTR_VALUE_FORMAT 141 { ATTR_LANGUAGE_FORMAT, SFX_ITEM_POOLABLE }, // ATTR_LANGUAGE_FORMAT ab 329, wird im Dialog mit SID_ATTR_NUMBERFORMAT_VALUE kombiniert 142 { SID_ATTR_BRUSH, SFX_ITEM_POOLABLE }, // ATTR_BACKGROUND 143 { SID_SCATTR_PROTECTION, SFX_ITEM_POOLABLE }, // ATTR_PROTECTION 144 { SID_ATTR_BORDER_OUTER, SFX_ITEM_POOLABLE }, // ATTR_BORDER 145 { SID_ATTR_BORDER_INNER, SFX_ITEM_POOLABLE }, // ATTR_BORDER_INNER 146 { SID_ATTR_BORDER_SHADOW, SFX_ITEM_POOLABLE }, // ATTR_SHADOW 147 { 0, SFX_ITEM_POOLABLE }, // ATTR_VALIDDATA 148 { 0, SFX_ITEM_POOLABLE }, // ATTR_CONDITIONAL 149 { 0, SFX_ITEM_POOLABLE }, // ATTR_PATTERN 150 { SID_ATTR_LRSPACE, SFX_ITEM_POOLABLE }, // ATTR_LRSPACE 151 { SID_ATTR_ULSPACE, SFX_ITEM_POOLABLE }, // ATTR_ULSPACE 152 { SID_ATTR_PAGE, SFX_ITEM_POOLABLE }, // ATTR_PAGE 153 { 0, SFX_ITEM_POOLABLE }, // ATTR_PAGE_PAPERTRAY, seit 303 nur noch dummy 154 { SID_ATTR_PAGE_PAPERBIN, SFX_ITEM_POOLABLE }, // ATTR_PAGE_PAPERBIN 155 { SID_ATTR_PAGE_SIZE, SFX_ITEM_POOLABLE }, // ATTR_PAGE_SIZE 156 { SID_ATTR_PAGE_MAXSIZE, SFX_ITEM_POOLABLE }, // ATTR_PAGE_MAXSIZE 157 { SID_ATTR_PAGE_EXT1, SFX_ITEM_POOLABLE }, // ATTR_PAGE_HORCENTER 158 { SID_ATTR_PAGE_EXT2, SFX_ITEM_POOLABLE }, // ATTR_PAGE_VERCENTER 159 { SID_ATTR_PAGE_ON, SFX_ITEM_POOLABLE }, // ATTR_PAGE_ON 160 { SID_ATTR_PAGE_DYNAMIC, SFX_ITEM_POOLABLE }, // ATTR_PAGE_DYNAMIC 161 { SID_ATTR_PAGE_SHARED, SFX_ITEM_POOLABLE }, // ATTR_PAGE_SHARED 162 { SID_SCATTR_PAGE_NOTES, SFX_ITEM_POOLABLE }, // ATTR_PAGE_NOTES 163 { SID_SCATTR_PAGE_GRID, SFX_ITEM_POOLABLE }, // ATTR_PAGE_GRID 164 { SID_SCATTR_PAGE_HEADERS, SFX_ITEM_POOLABLE }, // ATTR_PAGE_HEADERS 165 { SID_SCATTR_PAGE_CHARTS, SFX_ITEM_POOLABLE }, // ATTR_PAGE_CHARTS 166 { SID_SCATTR_PAGE_OBJECTS, SFX_ITEM_POOLABLE }, // ATTR_PAGE_OBJECTS 167 { SID_SCATTR_PAGE_DRAWINGS, SFX_ITEM_POOLABLE }, // ATTR_PAGE_DRAWINGS 168 { SID_SCATTR_PAGE_TOPDOWN, SFX_ITEM_POOLABLE }, // ATTR_PAGE_TOPDOWN 169 { SID_SCATTR_PAGE_SCALE, SFX_ITEM_POOLABLE }, // ATTR_PAGE_SCALE 170 { SID_SCATTR_PAGE_SCALETOPAGES, SFX_ITEM_POOLABLE }, // ATTR_PAGE_SCALETOPAGES 171 { SID_SCATTR_PAGE_FIRSTPAGENO, SFX_ITEM_POOLABLE }, // ATTR_PAGE_FIRSTPAGENO 172 { SID_SCATTR_PAGE_PRINTAREA, SFX_ITEM_POOLABLE }, // ATTR_PAGE_PRINTAREA 173 { SID_SCATTR_PAGE_REPEATROW, SFX_ITEM_POOLABLE }, // ATTR_PAGE_REPEATROW 174 { SID_SCATTR_PAGE_REPEATCOL, SFX_ITEM_POOLABLE }, // ATTR_PAGE_REPEATCOL 175 { SID_SCATTR_PAGE_PRINTTABLES, SFX_ITEM_POOLABLE }, // ATTR_PAGE_PRINTTABLES 176 { SID_SCATTR_PAGE_HEADERLEFT, SFX_ITEM_POOLABLE }, // ATTR_PAGE_HEADERLEFT 177 { SID_SCATTR_PAGE_FOOTERLEFT, SFX_ITEM_POOLABLE }, // ATTR_PAGE_FOOTERLEFT 178 { SID_SCATTR_PAGE_HEADERRIGHT, SFX_ITEM_POOLABLE }, // ATTR_PAGE_HEADERRIGHT 179 { SID_SCATTR_PAGE_FOOTERRIGHT, SFX_ITEM_POOLABLE }, // ATTR_PAGE_FOOTERRIGHT 180 { SID_ATTR_PAGE_HEADERSET, SFX_ITEM_POOLABLE }, // ATTR_PAGE_HEADERSET 181 { SID_ATTR_PAGE_FOOTERSET, SFX_ITEM_POOLABLE }, // ATTR_PAGE_FOOTERSET 182 { SID_SCATTR_PAGE_FORMULAS, SFX_ITEM_POOLABLE }, // ATTR_PAGE_FORMULAS 183 { SID_SCATTR_PAGE_NULLVALS, SFX_ITEM_POOLABLE }, // ATTR_PAGE_NULLVALS 184 { SID_SCATTR_PAGE_SCALETO, SFX_ITEM_POOLABLE } // ATTR_PAGE_SCALETO 185 }; 186 187 // ----------------------------------------------------------------------- 188 189 ScDocumentPool::ScDocumentPool( SfxItemPool* pSecPool, sal_Bool bLoadRefCounts ) 190 191 : SfxItemPool ( String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("ScDocumentPool")), 192 ATTR_STARTINDEX, ATTR_ENDINDEX, 193 aItemInfos, NULL, bLoadRefCounts ), 194 pSecondary ( pSecPool ) 195 { 196 // latin font from GetDefaultFonts is not used, DEFAULTFONT_LATIN_SPREADSHEET instead 197 Font aStdFont = OutputDevice::GetDefaultFont( DEFAULTFONT_LATIN_SPREADSHEET, LANGUAGE_ENGLISH_US, 198 DEFAULTFONT_FLAGS_ONLYONE ); 199 SvxFontItem* pStdFont = new SvxFontItem( aStdFont.GetFamily(), 200 aStdFont.GetName(), aStdFont.GetStyleName(), 201 aStdFont.GetPitch(), aStdFont.GetCharSet(), 202 ATTR_FONT ); 203 204 SvxFontItem* pCjkFont = new SvxFontItem( ATTR_CJK_FONT ); 205 SvxFontItem* pCtlFont = new SvxFontItem( ATTR_CTL_FONT ); 206 SvxFontItem aDummy( ATTR_FONT ); 207 GetDefaultFonts( aDummy, *pCjkFont, *pCtlFont ); 208 209 SvxBoxInfoItem* pGlobalBorderInnerAttr = new SvxBoxInfoItem( ATTR_BORDER_INNER ); 210 SfxItemSet* pSet = new SfxItemSet( *this, ATTR_PATTERN_START, ATTR_PATTERN_END ); 211 SfxItemSet aSetItemItemSet( *this, 212 ATTR_BACKGROUND, ATTR_BACKGROUND, 213 ATTR_BORDER, ATTR_SHADOW, 214 ATTR_LRSPACE, ATTR_ULSPACE, 215 ATTR_PAGE_SIZE, ATTR_PAGE_SIZE, 216 ATTR_PAGE_ON, ATTR_PAGE_SHARED, 217 0 ); 218 219 pGlobalBorderInnerAttr->SetLine(NULL, BOXINFO_LINE_HORI); 220 pGlobalBorderInnerAttr->SetLine(NULL, BOXINFO_LINE_VERT); 221 pGlobalBorderInnerAttr->SetTable(sal_True); 222 pGlobalBorderInnerAttr->SetDist(sal_True); 223 pGlobalBorderInnerAttr->SetMinDist(sal_False); 224 225 ppPoolDefaults = new SfxPoolItem*[ATTR_ENDINDEX-ATTR_STARTINDEX+1]; 226 227 ppPoolDefaults[ ATTR_FONT - ATTR_STARTINDEX ] = pStdFont; 228 ppPoolDefaults[ ATTR_FONT_HEIGHT - ATTR_STARTINDEX ] = new SvxFontHeightItem( 200, 100, ATTR_FONT_HEIGHT ); // 10 pt; 229 ppPoolDefaults[ ATTR_FONT_WEIGHT - ATTR_STARTINDEX ] = new SvxWeightItem( WEIGHT_NORMAL, ATTR_FONT_WEIGHT ); 230 ppPoolDefaults[ ATTR_FONT_POSTURE - ATTR_STARTINDEX ] = new SvxPostureItem( ITALIC_NONE, ATTR_FONT_POSTURE ); 231 ppPoolDefaults[ ATTR_FONT_UNDERLINE - ATTR_STARTINDEX ] = new SvxUnderlineItem( UNDERLINE_NONE, ATTR_FONT_UNDERLINE ); 232 ppPoolDefaults[ ATTR_FONT_OVERLINE - ATTR_STARTINDEX ] = new SvxOverlineItem( UNDERLINE_NONE, ATTR_FONT_OVERLINE ); 233 ppPoolDefaults[ ATTR_FONT_CROSSEDOUT - ATTR_STARTINDEX ] = new SvxCrossedOutItem( STRIKEOUT_NONE, ATTR_FONT_CROSSEDOUT ); 234 ppPoolDefaults[ ATTR_FONT_CONTOUR - ATTR_STARTINDEX ] = new SvxContourItem( sal_False, ATTR_FONT_CONTOUR ); 235 ppPoolDefaults[ ATTR_FONT_SHADOWED - ATTR_STARTINDEX ] = new SvxShadowedItem( sal_False, ATTR_FONT_SHADOWED ); 236 ppPoolDefaults[ ATTR_FONT_COLOR - ATTR_STARTINDEX ] = new SvxColorItem( Color(COL_AUTO), ATTR_FONT_COLOR ); 237 ppPoolDefaults[ ATTR_FONT_LANGUAGE - ATTR_STARTINDEX ] = new SvxLanguageItem( LanguageType(LANGUAGE_DONTKNOW), ATTR_FONT_LANGUAGE ); 238 ppPoolDefaults[ ATTR_CJK_FONT - ATTR_STARTINDEX ] = pCjkFont; 239 ppPoolDefaults[ ATTR_CJK_FONT_HEIGHT - ATTR_STARTINDEX ] = new SvxFontHeightItem( 200, 100, ATTR_CJK_FONT_HEIGHT ); 240 ppPoolDefaults[ ATTR_CJK_FONT_WEIGHT - ATTR_STARTINDEX ] = new SvxWeightItem( WEIGHT_NORMAL, ATTR_CJK_FONT_WEIGHT ); 241 ppPoolDefaults[ ATTR_CJK_FONT_POSTURE- ATTR_STARTINDEX ] = new SvxPostureItem( ITALIC_NONE, ATTR_CJK_FONT_POSTURE ); 242 ppPoolDefaults[ ATTR_CJK_FONT_LANGUAGE-ATTR_STARTINDEX ] = new SvxLanguageItem( LanguageType(LANGUAGE_DONTKNOW), 243 ATTR_CJK_FONT_LANGUAGE ); 244 ppPoolDefaults[ ATTR_CTL_FONT - ATTR_STARTINDEX ] = pCtlFont; 245 ppPoolDefaults[ ATTR_CTL_FONT_HEIGHT - ATTR_STARTINDEX ] = new SvxFontHeightItem( 200, 100, ATTR_CTL_FONT_HEIGHT ); 246 ppPoolDefaults[ ATTR_CTL_FONT_WEIGHT - ATTR_STARTINDEX ] = new SvxWeightItem( WEIGHT_NORMAL, ATTR_CTL_FONT_WEIGHT ); 247 ppPoolDefaults[ ATTR_CTL_FONT_POSTURE- ATTR_STARTINDEX ] = new SvxPostureItem( ITALIC_NONE, ATTR_CTL_FONT_POSTURE ); 248 ppPoolDefaults[ ATTR_CTL_FONT_LANGUAGE-ATTR_STARTINDEX ] = new SvxLanguageItem( LanguageType(LANGUAGE_DONTKNOW), 249 ATTR_CTL_FONT_LANGUAGE ); 250 ppPoolDefaults[ ATTR_FONT_EMPHASISMARK-ATTR_STARTINDEX ] = new SvxEmphasisMarkItem( EMPHASISMARK_NONE, ATTR_FONT_EMPHASISMARK ); 251 ppPoolDefaults[ ATTR_USERDEF - ATTR_STARTINDEX ] = new SvXMLAttrContainerItem( ATTR_USERDEF ); 252 ppPoolDefaults[ ATTR_FONT_WORDLINE - ATTR_STARTINDEX ] = new SvxWordLineModeItem(sal_False, ATTR_FONT_WORDLINE ); 253 ppPoolDefaults[ ATTR_FONT_RELIEF - ATTR_STARTINDEX ] = new SvxCharReliefItem( RELIEF_NONE, ATTR_FONT_RELIEF ); 254 ppPoolDefaults[ ATTR_HYPHENATE - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_HYPHENATE ); 255 ppPoolDefaults[ ATTR_SCRIPTSPACE - ATTR_STARTINDEX ] = new SvxScriptSpaceItem( sal_False, ATTR_SCRIPTSPACE); 256 ppPoolDefaults[ ATTR_HANGPUNCTUATION - ATTR_STARTINDEX ] = new SvxHangingPunctuationItem( sal_False, ATTR_HANGPUNCTUATION); 257 ppPoolDefaults[ ATTR_FORBIDDEN_RULES - ATTR_STARTINDEX ] = new SvxForbiddenRuleItem( sal_False, ATTR_FORBIDDEN_RULES); 258 ppPoolDefaults[ ATTR_HOR_JUSTIFY - ATTR_STARTINDEX ] = new SvxHorJustifyItem( SVX_HOR_JUSTIFY_STANDARD, ATTR_HOR_JUSTIFY); 259 ppPoolDefaults[ ATTR_INDENT - ATTR_STARTINDEX ] = new SfxUInt16Item( ATTR_INDENT, 0 ); 260 ppPoolDefaults[ ATTR_VER_JUSTIFY - ATTR_STARTINDEX ] = new SvxVerJustifyItem( SVX_VER_JUSTIFY_STANDARD, ATTR_VER_JUSTIFY); 261 ppPoolDefaults[ ATTR_STACKED - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_STACKED, sal_False ); 262 ppPoolDefaults[ ATTR_ROTATE_VALUE - ATTR_STARTINDEX ] = new SfxInt32Item( ATTR_ROTATE_VALUE, 0 ); 263 ppPoolDefaults[ ATTR_ROTATE_MODE - ATTR_STARTINDEX ] = new SvxRotateModeItem( SVX_ROTATE_MODE_BOTTOM, ATTR_ROTATE_MODE ); 264 ppPoolDefaults[ ATTR_VERTICAL_ASIAN - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_VERTICAL_ASIAN ); 265 // The default for the ATTR_WRITINGDIR cell attribute must by FRMDIR_ENVIRONMENT, 266 // so that value is returned when asking for a default cell's attributes. 267 // The value from the page style is set as DefaultHorizontalTextDirection for the EditEngine. 268 ppPoolDefaults[ ATTR_WRITINGDIR - ATTR_STARTINDEX ] = new SvxFrameDirectionItem( FRMDIR_ENVIRONMENT, ATTR_WRITINGDIR ); 269 ppPoolDefaults[ ATTR_LINEBREAK - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_LINEBREAK ); 270 ppPoolDefaults[ ATTR_SHRINKTOFIT - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_SHRINKTOFIT ); 271 ppPoolDefaults[ ATTR_BORDER_TLBR - ATTR_STARTINDEX ] = new SvxLineItem( ATTR_BORDER_TLBR ); 272 ppPoolDefaults[ ATTR_BORDER_BLTR - ATTR_STARTINDEX ] = new SvxLineItem( ATTR_BORDER_BLTR ); 273 ppPoolDefaults[ ATTR_MARGIN - ATTR_STARTINDEX ] = new SvxMarginItem( ATTR_MARGIN ); 274 ppPoolDefaults[ ATTR_MERGE - ATTR_STARTINDEX ] = new ScMergeAttr; 275 ppPoolDefaults[ ATTR_MERGE_FLAG - ATTR_STARTINDEX ] = new ScMergeFlagAttr; 276 ppPoolDefaults[ ATTR_VALUE_FORMAT - ATTR_STARTINDEX ] = new SfxUInt32Item( ATTR_VALUE_FORMAT, 0 ); 277 ppPoolDefaults[ ATTR_LANGUAGE_FORMAT - ATTR_STARTINDEX ] = new SvxLanguageItem( ScGlobal::eLnge, ATTR_LANGUAGE_FORMAT ); 278 ppPoolDefaults[ ATTR_BACKGROUND - ATTR_STARTINDEX ] = new SvxBrushItem( Color(COL_TRANSPARENT), ATTR_BACKGROUND ); 279 ppPoolDefaults[ ATTR_PROTECTION - ATTR_STARTINDEX ] = new ScProtectionAttr; 280 ppPoolDefaults[ ATTR_BORDER - ATTR_STARTINDEX ] = new SvxBoxItem( ATTR_BORDER ); 281 ppPoolDefaults[ ATTR_BORDER_INNER - ATTR_STARTINDEX ] = pGlobalBorderInnerAttr; 282 ppPoolDefaults[ ATTR_SHADOW - ATTR_STARTINDEX ] = new SvxShadowItem( ATTR_SHADOW ); 283 ppPoolDefaults[ ATTR_VALIDDATA - ATTR_STARTINDEX ] = new SfxUInt32Item( ATTR_VALIDDATA, 0 ); 284 ppPoolDefaults[ ATTR_CONDITIONAL - ATTR_STARTINDEX ] = new SfxUInt32Item( ATTR_CONDITIONAL, 0 ); 285 286 // GetRscString funktioniert erst nach ScGlobal::Init, zu erkennen am EmptyBrushItem 287 //! zusaetzliche Methode ScGlobal::IsInit() oder so... 288 //! oder erkennen, ob dies der Secondary-Pool fuer einen MessagePool ist 289 if ( ScGlobal::GetEmptyBrushItem() ) 290 ppPoolDefaults[ ATTR_PATTERN - ATTR_STARTINDEX ] = new ScPatternAttr( pSet, ScGlobal::GetRscString(STR_STYLENAME_STANDARD) ); 291 else 292 ppPoolDefaults[ ATTR_PATTERN - ATTR_STARTINDEX ] = new ScPatternAttr( pSet, 293 String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(STRING_STANDARD)) ); //! without name? 294 295 ppPoolDefaults[ ATTR_LRSPACE - ATTR_STARTINDEX ] = new SvxLRSpaceItem( ATTR_LRSPACE ); 296 ppPoolDefaults[ ATTR_ULSPACE - ATTR_STARTINDEX ] = new SvxULSpaceItem( ATTR_ULSPACE ); 297 ppPoolDefaults[ ATTR_PAGE - ATTR_STARTINDEX ] = new SvxPageItem( ATTR_PAGE ); 298 ppPoolDefaults[ ATTR_PAGE_PAPERTRAY - ATTR_STARTINDEX ] = new SfxAllEnumItem( ATTR_PAGE_PAPERTRAY ); 299 ppPoolDefaults[ ATTR_PAGE_PAPERBIN - ATTR_STARTINDEX ] = new SvxPaperBinItem( ATTR_PAGE_PAPERBIN ); 300 ppPoolDefaults[ ATTR_PAGE_SIZE - ATTR_STARTINDEX ] = new SvxSizeItem( ATTR_PAGE_SIZE ); 301 ppPoolDefaults[ ATTR_PAGE_MAXSIZE - ATTR_STARTINDEX ] = new SvxSizeItem( ATTR_PAGE_MAXSIZE ); 302 ppPoolDefaults[ ATTR_PAGE_HORCENTER - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_HORCENTER ); 303 ppPoolDefaults[ ATTR_PAGE_VERCENTER - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_VERCENTER ); 304 ppPoolDefaults[ ATTR_PAGE_ON - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_ON, sal_True ); 305 ppPoolDefaults[ ATTR_PAGE_DYNAMIC - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_DYNAMIC, sal_True ); 306 ppPoolDefaults[ ATTR_PAGE_SHARED - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_SHARED, sal_True ); 307 ppPoolDefaults[ ATTR_PAGE_NOTES - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_NOTES, sal_False ); 308 ppPoolDefaults[ ATTR_PAGE_GRID - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_GRID, sal_False ); 309 ppPoolDefaults[ ATTR_PAGE_HEADERS - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_HEADERS, sal_False ); 310 ppPoolDefaults[ ATTR_PAGE_CHARTS - ATTR_STARTINDEX ] = new ScViewObjectModeItem( ATTR_PAGE_CHARTS ); 311 ppPoolDefaults[ ATTR_PAGE_OBJECTS - ATTR_STARTINDEX ] = new ScViewObjectModeItem( ATTR_PAGE_OBJECTS ); 312 ppPoolDefaults[ ATTR_PAGE_DRAWINGS - ATTR_STARTINDEX ] = new ScViewObjectModeItem( ATTR_PAGE_DRAWINGS ); 313 ppPoolDefaults[ ATTR_PAGE_TOPDOWN - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_TOPDOWN, sal_True ); 314 ppPoolDefaults[ ATTR_PAGE_SCALE - ATTR_STARTINDEX ] = new SfxUInt16Item( ATTR_PAGE_SCALE, 100 ); 315 ppPoolDefaults[ ATTR_PAGE_SCALETOPAGES-ATTR_STARTINDEX ] = new SfxUInt16Item( ATTR_PAGE_SCALETOPAGES, 1 ); 316 ppPoolDefaults[ ATTR_PAGE_FIRSTPAGENO- ATTR_STARTINDEX ] = new SfxUInt16Item( ATTR_PAGE_FIRSTPAGENO, 1 ); 317 ppPoolDefaults[ ATTR_PAGE_PRINTAREA - ATTR_STARTINDEX ] = new ScRangeItem( ATTR_PAGE_PRINTAREA ); 318 ppPoolDefaults[ ATTR_PAGE_REPEATROW - ATTR_STARTINDEX ] = new ScRangeItem( ATTR_PAGE_REPEATROW ); 319 ppPoolDefaults[ ATTR_PAGE_REPEATCOL - ATTR_STARTINDEX ] = new ScRangeItem( ATTR_PAGE_REPEATCOL ); 320 ppPoolDefaults[ ATTR_PAGE_PRINTTABLES- ATTR_STARTINDEX ] = new ScTableListItem( ATTR_PAGE_PRINTTABLES ); 321 ppPoolDefaults[ ATTR_PAGE_HEADERLEFT - ATTR_STARTINDEX ] = new ScPageHFItem( ATTR_PAGE_HEADERLEFT ); 322 ppPoolDefaults[ ATTR_PAGE_FOOTERLEFT - ATTR_STARTINDEX ] = new ScPageHFItem( ATTR_PAGE_FOOTERLEFT ); 323 ppPoolDefaults[ ATTR_PAGE_HEADERRIGHT- ATTR_STARTINDEX ] = new ScPageHFItem( ATTR_PAGE_HEADERRIGHT ); 324 ppPoolDefaults[ ATTR_PAGE_FOOTERRIGHT- ATTR_STARTINDEX ] = new ScPageHFItem( ATTR_PAGE_FOOTERRIGHT ); 325 ppPoolDefaults[ ATTR_PAGE_HEADERSET - ATTR_STARTINDEX ] = new SvxSetItem( ATTR_PAGE_HEADERSET, aSetItemItemSet ); 326 ppPoolDefaults[ ATTR_PAGE_FOOTERSET - ATTR_STARTINDEX ] = new SvxSetItem( ATTR_PAGE_FOOTERSET, aSetItemItemSet ); 327 ppPoolDefaults[ ATTR_PAGE_FORMULAS - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_FORMULAS, sal_False ); 328 ppPoolDefaults[ ATTR_PAGE_NULLVALS - ATTR_STARTINDEX ] = new SfxBoolItem( ATTR_PAGE_NULLVALS, sal_True ); 329 ppPoolDefaults[ ATTR_PAGE_SCALETO - ATTR_STARTINDEX ] = new ScPageScaleToItem( 1, 1 ); 330 // ppPoolDefaults[ ATTR_ITEM_DOUBLE - ATTR_STARTINDEX ] = new ScDoubleItem( ATTR_ITEM_DOUBLE, 0 ); 331 332 SetDefaults( ppPoolDefaults ); 333 334 if ( pSecondary ) 335 SetSecondaryPool( pSecondary ); 336 337 // ATTR_LANGUAGE_FORMAT ab sv329 eingefuegt, VersionMap in _ScGlobal__Init 338 SetVersionMap( 1, 100, 157, pVersionMap1 ); 339 340 // ATTR_VALIDDATA, ATTR_CONDITIONAL ab 341 341 SetVersionMap( 2, 100, 158, pVersionMap2 ); 342 343 // ATTR_INDENT ab 350 344 SetVersionMap( 3, 100, 160, pVersionMap3 ); 345 346 // ATTR_ROTATE_VALUE, ATTR_ROTATE_MODE ab 367 347 SetVersionMap( 4, 100, 161, pVersionMap4 ); 348 349 // CJK, CTL, EMPHASISMARK, TWOLINES from 614 350 SetVersionMap( 5, 100, 163, pVersionMap5 ); 351 352 // ATTR_SCRIPTSPACE, ATTR_HANGPUNCTUATION, ATTR_FORBIDDEN_RULES from 614d 353 SetVersionMap( 6, 100, 175, pVersionMap6 ); 354 355 // ATTR_FONT_WORDLINE, ATTR_FONT_RELIEF, ATTR_HYPHENATE from 632b 356 SetVersionMap( 7, 100, 178, pVersionMap7 ); 357 358 // ATTR_VERTICAL_ASIAN from 642q 359 SetVersionMap( 8, 100, 181, pVersionMap8 ); 360 361 // ATTR_WRITINGDIR from 643y 362 SetVersionMap( 9, 100, 182, pVersionMap9 ); 363 364 // ATTR_PAGE_SCALETO added in 680/sab008 365 // new version map not required 366 367 // ATTR_SHRINKTOFIT, ATTR_BORDER_TL_BR, ATTR_BORDER_BL_TR added in 680/dr14 368 SetVersionMap( 10, 100, 184, pVersionMap10 ); 369 370 // ATTR_FONT_OVERLINE added in DEV300/overline2 371 SetVersionMap( 11, 100, 187, pVersionMap11 ); 372 } 373 374 __EXPORT ScDocumentPool::~ScDocumentPool() 375 { 376 Delete(); 377 378 for ( sal_uInt16 i=0; i < ATTR_ENDINDEX-ATTR_STARTINDEX+1; i++ ) 379 { 380 SetRefCount( *ppPoolDefaults[i], 0 ); 381 delete ppPoolDefaults[i]; 382 } 383 384 delete[] ppPoolDefaults; 385 SfxItemPool::Free(pSecondary); 386 } 387 388 void ScDocumentPool::InitVersionMaps() 389 { 390 DBG_ASSERT( !pVersionMap1 && !pVersionMap2 && 391 !pVersionMap3 && !pVersionMap4 && 392 !pVersionMap5 && !pVersionMap6 && 393 !pVersionMap7 && !pVersionMap8 && 394 !pVersionMap9 && !pVersionMap10 && 395 !pVersionMap11, "InitVersionMaps call multiple times" ); 396 397 // alte WhichId's mappen 398 // nicht mit ATTR_* zaehlen, falls die sich nochmal aendern 399 400 // erste Map: ATTR_LANGUAGE_FORMAT ab sv329 eingefuegt 401 402 const sal_uInt16 nMap1Start = 100; // alter ATTR_STARTINDEX 403 const sal_uInt16 nMap1End = 157; // alter ATTR_ENDINDEX 404 const sal_uInt16 nMap1Count = nMap1End - nMap1Start + 1; 405 const sal_uInt16 nMap1New = 18; // ATTR_LANGUAGE_FORMAT - ATTR_STARTINDEX 406 pVersionMap1 = new sal_uInt16 [ nMap1Count ]; 407 sal_uInt16 i, j; 408 for ( i=0, j=nMap1Start; i < nMap1New; i++, j++ ) 409 pVersionMap1[i] = j; 410 // ein Eintrag eingefuegt... 411 for ( i=nMap1New, j=nMap1Start+nMap1New+1; i < nMap1Count; i++, j++ ) 412 pVersionMap1[i] = j; 413 414 // zweite Map: ATTR_VALIDDATA und ATTR_CONDITIONAL ab 341 eingefuegt 415 416 const sal_uInt16 nMap2Start = 100; // ATTR_STARTINDEX 417 const sal_uInt16 nMap2End = 158; // ATTR_ENDINDEX 418 const sal_uInt16 nMap2Count = nMap2End - nMap2Start + 1; 419 const sal_uInt16 nMap2New = 24; // ATTR_VALIDDATA - ATTR_STARTINDEX 420 pVersionMap2 = new sal_uInt16 [ nMap2Count ]; 421 for ( i=0, j=nMap2Start; i < nMap2New; i++, j++ ) 422 pVersionMap2[i] = j; 423 // zwei Eintraege eingefuegt... 424 for ( i=nMap2New, j=nMap2Start+nMap2New+2; i < nMap2Count; i++, j++ ) 425 pVersionMap2[i] = j; 426 427 // dritte Map: ATTR_INDENT ab 350 eingefuegt 428 429 const sal_uInt16 nMap3Start = 100; // ATTR_STARTINDEX 430 const sal_uInt16 nMap3End = 160; // ATTR_ENDINDEX 431 const sal_uInt16 nMap3Count = nMap3End - nMap3Start + 1; 432 const sal_uInt16 nMap3New = 11; // ATTR_INDENT - ATTR_STARTINDEX 433 pVersionMap3 = new sal_uInt16 [ nMap3Count ]; 434 for ( i=0, j=nMap3Start; i < nMap3New; i++, j++ ) 435 pVersionMap3[i] = j; 436 // ein Eintrag eingefuegt... 437 for ( i=nMap3New, j=nMap3Start+nMap3New+1; i < nMap3Count; i++, j++ ) 438 pVersionMap3[i] = j; 439 440 // vierte Map: ATTR_ROTATE_VALUE und ATTR_ROTATE_MODE ab 367 eingefuegt 441 442 const sal_uInt16 nMap4Start = 100; // ATTR_STARTINDEX 443 const sal_uInt16 nMap4End = 161; // ATTR_ENDINDEX 444 const sal_uInt16 nMap4Count = nMap4End - nMap4Start + 1; 445 const sal_uInt16 nMap4New = 14; // ATTR_ROTATE_VALUE - ATTR_STARTINDEX 446 pVersionMap4 = new sal_uInt16 [ nMap4Count ]; 447 for ( i=0, j=nMap4Start; i < nMap4New; i++, j++ ) 448 pVersionMap4[i] = j; 449 // zwei Eintraege eingefuegt... 450 for ( i=nMap4New, j=nMap4Start+nMap4New+2; i < nMap4Count; i++, j++ ) 451 pVersionMap4[i] = j; 452 453 // fifth map: CJK..., CTL..., EMPHASISMARK, TWOLINES (12 items) added in 614 454 455 const sal_uInt16 nMap5Start = 100; // ATTR_STARTINDEX 456 const sal_uInt16 nMap5End = 163; // ATTR_ENDINDEX 457 const sal_uInt16 nMap5Count = nMap5End - nMap5Start + 1; 458 const sal_uInt16 nMap5New = 10; // ATTR_CJK_FONT - ATTR_STARTINDEX 459 pVersionMap5 = new sal_uInt16 [ nMap5Count ]; 460 for ( i=0, j=nMap5Start; i < nMap5New; i++, j++ ) 461 pVersionMap5[i] = j; 462 // 12 entries inserted 463 for ( i=nMap5New, j=nMap5Start+nMap5New+12; i < nMap5Count; i++, j++ ) 464 pVersionMap5[i] = j; 465 466 // sixth map: ATTR_SCRIPTSPACE, ATTR_HANGPUNCTUATION, ATTR_FORBIDDEN_RULES added in 614d 467 468 const sal_uInt16 nMap6Start = 100; // ATTR_STARTINDEX 469 const sal_uInt16 nMap6End = 175; // ATTR_ENDINDEX 470 const sal_uInt16 nMap6Count = nMap6End - nMap6Start + 1; 471 const sal_uInt16 nMap6New = 22; // ATTR_SCRIPTSPACE - ATTR_STARTINDEX 472 pVersionMap6 = new sal_uInt16 [ nMap6Count ]; 473 for ( i=0, j=nMap6Start; i < nMap6New; i++, j++ ) 474 pVersionMap6[i] = j; 475 // 3 entries inserted 476 for ( i=nMap6New, j=nMap6Start+nMap6New+3; i < nMap6Count; i++, j++ ) 477 pVersionMap6[i] = j; 478 479 // seventh map: ATTR_FONT_WORDLINE, ATTR_FONT_RELIEF, ATTR_HYPHENATE added in 632b 480 481 const sal_uInt16 nMap7Start = 100; // ATTR_STARTINDEX 482 const sal_uInt16 nMap7End = 178; // ATTR_ENDINDEX 483 const sal_uInt16 nMap7Count = nMap7End - nMap7Start + 1; 484 const sal_uInt16 nMap7New = 22; // ATTR_FONT_WORDLINE - ATTR_STARTINDEX 485 pVersionMap7 = new sal_uInt16 [ nMap7Count ]; 486 for ( i=0, j=nMap7Start; i < nMap7New; i++, j++ ) 487 pVersionMap7[i] = j; 488 // 3 entries inserted 489 for ( i=nMap7New, j=nMap7Start+nMap7New+3; i < nMap7Count; i++, j++ ) 490 pVersionMap7[i] = j; 491 492 // eighth map: ATTR_VERTICAL_ASIAN added in 642q 493 494 const sal_uInt16 nMap8Start = 100; // ATTR_STARTINDEX 495 const sal_uInt16 nMap8End = 181; // ATTR_ENDINDEX 496 const sal_uInt16 nMap8Count = nMap8End - nMap8Start + 1; 497 const sal_uInt16 nMap8New = 34; // ATTR_VERTICAL_ASIAN - ATTR_STARTINDEX 498 pVersionMap8 = new sal_uInt16 [ nMap8Count ]; 499 for ( i=0, j=nMap8Start; i < nMap8New; i++, j++ ) 500 pVersionMap8[i] = j; 501 // 1 entry inserted 502 for ( i=nMap8New, j=nMap8Start+nMap8New+1; i < nMap8Count; i++, j++ ) 503 pVersionMap8[i] = j; 504 505 // 9th map: ATTR_WRITINGDIR added in 643y 506 507 const sal_uInt16 nMap9Start = 100; // ATTR_STARTINDEX 508 const sal_uInt16 nMap9End = 182; // ATTR_ENDINDEX 509 const sal_uInt16 nMap9Count = nMap9End - nMap9Start + 1; 510 const sal_uInt16 nMap9New = 35; // ATTR_WRITINGDIR - ATTR_STARTINDEX 511 pVersionMap9 = new sal_uInt16 [ nMap9Count ]; 512 for ( i=0, j=nMap9Start; i < nMap9New; i++, j++ ) 513 pVersionMap9[i] = j; 514 // 1 entry inserted 515 for ( i=nMap9New, j=nMap9Start+nMap9New+1; i < nMap9Count; i++, j++ ) 516 pVersionMap9[i] = j; 517 518 // ATTR_PAGE_SCALETO added in 680/sab008 519 520 // 10th map: ATTR_SHRINKTOFIT, ATTR_BORDER_TL_BR, ATTR_BORDER_BL_TR added in 680/dr14 521 522 const sal_uInt16 nMap10Start = 100; // ATTR_STARTINDEX 523 const sal_uInt16 nMap10End = 184; // ATTR_ENDINDEX 524 const sal_uInt16 nMap10Count = nMap10End - nMap10Start + 1; 525 const sal_uInt16 nMap10New = 37; // ATTR_SHRINKTOFIT - ATTR_STARTINDEX 526 pVersionMap10 = new sal_uInt16 [ nMap10Count ]; 527 for ( i=0, j=nMap10Start; i < nMap10New; i++, j++ ) 528 pVersionMap10[i] = j; 529 // 3 entries inserted 530 for ( i=nMap10New, j=nMap10Start+nMap10New+3; i < nMap10Count; i++, j++ ) 531 pVersionMap10[i] = j; 532 533 // 11th map: ATTR_FONT_OVERLINE added in DEV300/overline2 534 535 const sal_uInt16 nMap11Start = 100; // ATTR_STARTINDEX 536 const sal_uInt16 nMap11End = 187; // ATTR_ENDINDEX 537 const sal_uInt16 nMap11Count = nMap11End - nMap11Start + 1; 538 const sal_uInt16 nMap11New = 5; // ATTR_FONT_OVERLINE - ATTR_STARTINDEX 539 pVersionMap11 = new sal_uInt16 [ nMap11Count ]; 540 for ( i=0, j=nMap11Start; i < nMap11New; i++, j++ ) 541 pVersionMap11[i] = j; 542 // 1 entry inserted 543 for ( i=nMap11New, j=nMap11Start+nMap11New+1; i < nMap11Count; i++, j++ ) 544 pVersionMap11[i] = j; 545 } 546 547 void ScDocumentPool::DeleteVersionMaps() 548 { 549 DBG_ASSERT( pVersionMap1 && pVersionMap2 && 550 pVersionMap3 && pVersionMap4 && 551 pVersionMap5 && pVersionMap6 && 552 pVersionMap7 && pVersionMap8 && 553 pVersionMap9 && pVersionMap10 && 554 pVersionMap11, "DeleteVersionMaps without maps" ); 555 556 delete[] pVersionMap11; 557 pVersionMap11 = 0; 558 delete[] pVersionMap10; 559 pVersionMap10 = 0; 560 delete[] pVersionMap9; 561 pVersionMap9 = 0; 562 delete[] pVersionMap8; 563 pVersionMap8 = 0; 564 delete[] pVersionMap7; 565 pVersionMap7 = 0; 566 delete[] pVersionMap6; 567 pVersionMap6 = 0; 568 delete[] pVersionMap5; 569 pVersionMap5 = 0; 570 delete[] pVersionMap4; 571 pVersionMap4 = 0; 572 delete[] pVersionMap3; 573 pVersionMap3 = 0; 574 delete[] pVersionMap2; 575 pVersionMap2 = 0; 576 delete[] pVersionMap1; 577 pVersionMap1 = 0; 578 } 579 580 // ---------------------------------------------------------------------------------------- 581 // 582 // Fuer die Pattern-Attribute (SetItems) kann der sal_uInt16 RefCount leicht ueberlaufen 583 // (z.B. 600 ganze Zeilen abwechselnd formatieren). 584 // Darum wird der RefCount bei SC_MAX_POOLREF festgehalten und nicht mehr hoch- oder 585 // heruntergezaehlt. Dieser RefCount wird dann erst beim naechsten Laden neu gezaehlt. 586 // Die Differenz zwischen SC_MAX_POOLREF und SC_SAFE_POOLREF ist ein wenig groesser 587 // als noetig, um zu erkennen, wenn der RefCount aus Versehen doch "normal" veraendert 588 // wird (Assertions). 589 // 590 591 const SfxPoolItem& __EXPORT ScDocumentPool::Put( const SfxPoolItem& rItem, sal_uInt16 nWhich ) 592 { 593 if ( rItem.Which() != ATTR_PATTERN ) // nur Pattern ist special 594 return SfxItemPool::Put( rItem, nWhich ); 595 596 // das Default-Pattern dieses Pools nicht kopieren 597 if (&rItem == ppPoolDefaults[ ATTR_PATTERN - ATTR_STARTINDEX ]) 598 return rItem; 599 600 // ansonsten muss Put immer passieren, weil es ein anderer Pool sein kann 601 const SfxPoolItem& rNew = SfxItemPool::Put( rItem, nWhich ); 602 CheckRef( rNew ); 603 return rNew; 604 } 605 606 void __EXPORT ScDocumentPool::Remove( const SfxPoolItem& rItem ) 607 { 608 if ( rItem.Which() == ATTR_PATTERN ) // nur Pattern ist special 609 { 610 sal_uLong nRef = rItem.GetRefCount(); 611 if ( nRef >= (sal_uLong) SC_MAX_POOLREF && nRef <= (sal_uLong) SFX_ITEMS_OLD_MAXREF ) 612 { 613 if ( nRef != (sal_uLong) SC_SAFE_POOLREF ) 614 { 615 DBG_ERROR("Wer fummelt da an meinen Ref-Counts herum"); 616 SetRefCount( (SfxPoolItem&)rItem, (sal_uLong) SC_SAFE_POOLREF ); 617 } 618 return; // nicht herunterzaehlen 619 } 620 } 621 SfxItemPool::Remove( rItem ); 622 } 623 624 void ScDocumentPool::CheckRef( const SfxPoolItem& rItem ) // static 625 { 626 sal_uLong nRef = rItem.GetRefCount(); 627 if ( nRef >= (sal_uLong) SC_MAX_POOLREF && nRef <= (sal_uLong) SFX_ITEMS_OLD_MAXREF ) 628 { 629 // beim Apply vom Cache wird evtl. um 2 hochgezaehlt (auf MAX+1 oder SAFE+2), 630 // heruntergezaehlt wird nur einzeln (in LoadCompleted) 631 DBG_ASSERT( nRef<=(sal_uLong)SC_MAX_POOLREF+1 || (nRef>=(sal_uLong)SC_SAFE_POOLREF-1 && nRef<=(sal_uLong)SC_SAFE_POOLREF+2), 632 "ScDocumentPool::CheckRef" ); 633 SetRefCount( (SfxPoolItem&)rItem, (sal_uLong) SC_SAFE_POOLREF ); 634 } 635 } 636 637 // ---------------------------------------------------------------------------------------- 638 639 void ScDocumentPool::StyleDeleted( ScStyleSheet* pStyle ) 640 { 641 sal_uInt32 nCount = GetItemCount2(ATTR_PATTERN); 642 for (sal_uInt32 i=0; i<nCount; i++) 643 { 644 ScPatternAttr* pPattern = (ScPatternAttr*)GetItem2(ATTR_PATTERN, i); 645 if ( pPattern && pPattern->GetStyleSheet() == pStyle ) 646 pPattern->StyleToName(); 647 } 648 } 649 650 void ScDocumentPool::CellStyleCreated( const String& rName ) 651 { 652 // If a style was created, don't keep any pattern with its name string in the pool, 653 // because it would compare equal to a pattern with a pointer to the new style. 654 // Calling StyleSheetChanged isn't enough because the pool may still contain items 655 // for undo or clipboard content. 656 657 sal_uInt32 nCount = GetItemCount2(ATTR_PATTERN); 658 for (sal_uInt32 i=0; i<nCount; i++) 659 { 660 ScPatternAttr *const pPattern = 661 const_cast<ScPatternAttr*>( 662 static_cast<ScPatternAttr const*>(GetItem2(ATTR_PATTERN, i))); 663 if ( pPattern && pPattern->GetStyleSheet() == NULL ) 664 { 665 const String* pStyleName = pPattern->GetStyleName(); 666 if ( pStyleName && *pStyleName == rName ) 667 pPattern->UpdateStyleSheet(); // find and store style pointer 668 } 669 } 670 } 671 672 SfxItemPool* __EXPORT ScDocumentPool::Clone() const 673 { 674 return new SfxItemPool (*this, sal_True); 675 } 676 677 SfxItemPresentation lcl_HFPresentation 678 ( 679 const SfxPoolItem& rItem, 680 SfxItemPresentation ePresentation, 681 SfxMapUnit eCoreMetric, 682 SfxMapUnit ePresentationMetric, 683 String& rText, 684 const IntlWrapper* pIntl 685 ) 686 { 687 const SfxItemSet& rSet = ((const SfxSetItem&)rItem).GetItemSet(); 688 const SfxPoolItem* pItem; 689 690 if ( SFX_ITEM_SET == rSet.GetItemState(ATTR_PAGE_ON,sal_False,&pItem) ) 691 { 692 if( sal_False == ((const SfxBoolItem*)pItem)->GetValue() ) 693 return SFX_ITEM_PRESENTATION_NONE; 694 } 695 696 SfxItemIter aIter( rSet ); 697 pItem = aIter.FirstItem(); 698 String aText; 699 String aDel = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM( " + " )); 700 701 while( pItem ) 702 { 703 sal_uInt16 nWhich = pItem->Which(); 704 705 aText.Erase(); 706 707 switch( nWhich ) 708 { 709 case ATTR_PAGE_ON: 710 case ATTR_PAGE_DYNAMIC: 711 case ATTR_PAGE_SHARED: 712 break; 713 714 case ATTR_LRSPACE: 715 { 716 SvxLRSpaceItem& rLRItem = (SvxLRSpaceItem&)*pItem; 717 sal_uInt16 nPropLeftMargin = rLRItem.GetPropLeft(); 718 sal_uInt16 nPropRightMargin = rLRItem.GetPropRight(); 719 sal_uInt16 nLeftMargin, nRightMargin; 720 long nTmp; 721 nTmp = rLRItem.GetLeft(); 722 nLeftMargin = nTmp < 0 ? 0 : sal_uInt16(nTmp); 723 nTmp = rLRItem.GetRight(); 724 nRightMargin = nTmp < 0 ? 0 : sal_uInt16(nTmp); 725 726 aText = EE_RESSTR(RID_SVXITEMS_LRSPACE_LEFT); 727 if ( 100 != nPropLeftMargin ) 728 { 729 aText += String::CreateFromInt32( nPropLeftMargin ); 730 aText += '%'; 731 } 732 else 733 { 734 aText += GetMetricText( (long)nLeftMargin, 735 eCoreMetric, ePresentationMetric, pIntl ); 736 aText += EE_RESSTR(GetMetricId(ePresentationMetric)); 737 } 738 aText += cpDelim; 739 740 // nPropFirstLineOfst haben wir nicht 741 742 aText += EE_RESSTR(RID_SVXITEMS_LRSPACE_RIGHT); 743 if ( 100 != nPropRightMargin ) 744 { 745 aText += String::CreateFromInt32( nPropRightMargin ); 746 aText += '%'; 747 } 748 else 749 { 750 aText += GetMetricText( (long)nRightMargin, 751 eCoreMetric, ePresentationMetric, pIntl ); 752 aText += EE_RESSTR(GetMetricId(ePresentationMetric)); 753 } 754 } 755 break; 756 757 default: 758 if ( !pIntl ) 759 pIntl = ScGlobal::GetScIntlWrapper(); 760 pItem->GetPresentation( ePresentation, eCoreMetric, ePresentationMetric, aText, pIntl ); 761 762 } 763 764 if ( aText.Len() ) 765 { 766 rText += aText; 767 rText += aDel; 768 } 769 770 pItem = aIter.NextItem(); 771 } 772 773 rText.EraseTrailingChars(); 774 rText.EraseTrailingChars( '+' ); 775 rText.EraseTrailingChars(); 776 777 return ePresentation; 778 } 779 780 SfxItemPresentation __EXPORT ScDocumentPool::GetPresentation( 781 const SfxPoolItem& rItem, 782 SfxItemPresentation ePresentation, 783 SfxMapUnit ePresentationMetric, 784 String& rText, 785 const IntlWrapper* pIntl ) const 786 { 787 sal_uInt16 nW = rItem.Which(); 788 String aStrYes ( ScGlobal::GetRscString(STR_YES) ); 789 String aStrNo ( ScGlobal::GetRscString(STR_NO) ); 790 String aStrSep = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(": ")); 791 792 switch( nW ) 793 { 794 case ATTR_PAGE_TOPDOWN: 795 switch ( ePresentation ) 796 { 797 case SFX_ITEM_PRESENTATION_COMPLETE: 798 rText = ScGlobal::GetRscString(STR_SCATTR_PAGE_PRINTDIR); 799 rText += aStrSep; 800 // break; // DURCHFALLEN!!! 801 case SFX_ITEM_PRESENTATION_NAMELESS: 802 rText += ((const SfxBoolItem&)rItem).GetValue() ? 803 ScGlobal::GetRscString(STR_SCATTR_PAGE_TOPDOWN) : 804 ScGlobal::GetRscString(STR_SCATTR_PAGE_LEFTRIGHT) ; 805 break; 806 default: 807 { 808 // added to avoid warnings 809 } 810 } 811 break; 812 813 case ATTR_PAGE_HEADERS: 814 switch ( ePresentation ) 815 { 816 case SFX_ITEM_PRESENTATION_COMPLETE: 817 rText = ScGlobal::GetRscString(STR_SCATTR_PAGE_HEADERS); 818 rText += aStrSep; 819 // break; // DURCHFALLEN!!! 820 case SFX_ITEM_PRESENTATION_NAMELESS: 821 rText += ((const SfxBoolItem&)rItem).GetValue() ? aStrYes : aStrNo ; 822 break; 823 default: 824 { 825 // added to avoid warnings 826 } 827 } 828 break; 829 830 case ATTR_PAGE_NULLVALS: 831 switch ( ePresentation ) 832 { 833 case SFX_ITEM_PRESENTATION_COMPLETE: 834 rText = ScGlobal::GetRscString(STR_SCATTR_PAGE_NULLVALS); 835 rText += aStrSep; 836 // break; // DURCHFALLEN!!! 837 case SFX_ITEM_PRESENTATION_NAMELESS: 838 rText += ((const SfxBoolItem&)rItem).GetValue() ? aStrYes : aStrNo ; 839 break; 840 default: 841 { 842 // added to avoid warnings 843 } 844 } 845 break; 846 847 case ATTR_PAGE_FORMULAS: 848 switch ( ePresentation ) 849 { 850 case SFX_ITEM_PRESENTATION_COMPLETE: 851 rText = ScGlobal::GetRscString(STR_SCATTR_PAGE_FORMULAS); 852 rText += aStrSep; 853 // break; // DURCHFALLEN!!! 854 case SFX_ITEM_PRESENTATION_NAMELESS: 855 rText += ((const SfxBoolItem&)rItem).GetValue() ? aStrYes : aStrNo ; 856 break; 857 default: 858 { 859 // added to avoid warnings 860 } 861 } 862 break; 863 864 case ATTR_PAGE_NOTES: 865 switch ( ePresentation ) 866 { 867 case SFX_ITEM_PRESENTATION_COMPLETE: 868 rText = ScGlobal::GetRscString(STR_SCATTR_PAGE_NOTES); 869 rText += aStrSep; 870 // break; // DURCHFALLEN!!! 871 case SFX_ITEM_PRESENTATION_NAMELESS: 872 rText += ((const SfxBoolItem&)rItem).GetValue() ? aStrYes : aStrNo ; 873 break; 874 default: 875 { 876 // added to avoid warnings 877 } 878 } 879 break; 880 881 case ATTR_PAGE_GRID: 882 switch ( ePresentation ) 883 { 884 case SFX_ITEM_PRESENTATION_COMPLETE: 885 rText = ScGlobal::GetRscString(STR_SCATTR_PAGE_GRID); 886 rText += aStrSep; 887 // break; // DURCHFALLEN!!! 888 case SFX_ITEM_PRESENTATION_NAMELESS: 889 rText += ((const SfxBoolItem&)rItem).GetValue() ? aStrYes : aStrNo ; 890 break; 891 default: 892 { 893 // added to avoid warnings 894 } 895 } 896 break; 897 898 case ATTR_PAGE_SCALETOPAGES: 899 { 900 sal_uInt16 nPagNo = ((const SfxUInt16Item&)rItem).GetValue(); 901 902 if( nPagNo ) 903 { 904 switch ( ePresentation ) 905 { 906 case SFX_ITEM_PRESENTATION_COMPLETE: 907 { 908 rText.Assign( ScGlobal::GetRscString( STR_SCATTR_PAGE_SCALETOPAGES ) ).Append( aStrSep ); 909 } 910 // break; // DURCHFALLEN!!! 911 case SFX_ITEM_PRESENTATION_NAMELESS: 912 { 913 String aPages( ScGlobal::GetRscString( STR_SCATTR_PAGE_SCALE_PAGES ) ); 914 aPages.SearchAndReplaceAscii( "%1", String::CreateFromInt32( nPagNo ) ); 915 rText.Append( aPages ); 916 } 917 break; 918 default: 919 { 920 // added to avoid warnings 921 } 922 } 923 } 924 else 925 { 926 ePresentation = SFX_ITEM_PRESENTATION_NONE; 927 } 928 } 929 break; 930 931 case ATTR_PAGE_FIRSTPAGENO: 932 { 933 sal_uInt16 nPagNo = ((const SfxUInt16Item&)rItem).GetValue(); 934 935 if( nPagNo ) 936 { 937 switch ( ePresentation ) 938 { 939 case SFX_ITEM_PRESENTATION_COMPLETE: 940 rText = ScGlobal::GetRscString(STR_SCATTR_PAGE_FIRSTPAGENO); 941 rText += aStrSep; 942 // break; // DURCHFALLEN!!! 943 case SFX_ITEM_PRESENTATION_NAMELESS: 944 rText += String::CreateFromInt32( nPagNo ); 945 break; 946 default: 947 { 948 // added to avoid warnings 949 } 950 } 951 } 952 else 953 { 954 ePresentation = SFX_ITEM_PRESENTATION_NONE; 955 } 956 } 957 break; 958 959 case ATTR_PAGE_SCALE: 960 { 961 sal_uInt16 nPercent = ((const SfxUInt16Item&)rItem).GetValue(); 962 963 if( nPercent ) 964 { 965 switch ( ePresentation ) 966 { 967 case SFX_ITEM_PRESENTATION_COMPLETE: 968 rText = ScGlobal::GetRscString(STR_SCATTR_PAGE_SCALE); 969 rText += aStrSep; 970 // break; // DURCHFALLEN!!! 971 case SFX_ITEM_PRESENTATION_NAMELESS: 972 rText += String::CreateFromInt32( nPercent ); 973 rText += '%'; 974 break; 975 default: 976 { 977 // added to avoid warnings 978 } 979 } 980 } 981 else 982 { 983 ePresentation = SFX_ITEM_PRESENTATION_NONE; 984 } 985 } 986 break; 987 988 case ATTR_PAGE_HEADERSET: 989 { 990 String aBuffer; 991 992 if( lcl_HFPresentation( rItem, ePresentation, GetMetric( nW ), ePresentationMetric, aBuffer, pIntl ) != SFX_ITEM_PRESENTATION_NONE ) 993 { 994 rText = ScGlobal::GetRscString(STR_HEADER); 995 rText.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " ( " )); 996 rText += aBuffer; 997 rText.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " ) " )); 998 } 999 } 1000 break; 1001 1002 case ATTR_PAGE_FOOTERSET: 1003 { 1004 String aBuffer; 1005 1006 if( lcl_HFPresentation( rItem, ePresentation, GetMetric( nW ), ePresentationMetric, aBuffer, pIntl ) != SFX_ITEM_PRESENTATION_NONE ) 1007 { 1008 rText = ScGlobal::GetRscString(STR_FOOTER); 1009 rText.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " ( " )); 1010 rText += aBuffer; 1011 rText.AppendAscii(RTL_CONSTASCII_STRINGPARAM( " ) " )); 1012 } 1013 } 1014 break; 1015 1016 /* 1017 case ATTR_PAGE_HEADERLEFT: 1018 rText = "SID_SCATTR_PAGE_HEADERLEFT"; 1019 break; 1020 1021 case ATTR_PAGE_FOOTERLEFT: 1022 rText = "SID_SCATTR_PAGE_FOOTERLEFT"; 1023 break; 1024 1025 case ATTR_PAGE_HEADERRIGHT: 1026 rText = "SID_SCATTR_PAGE_HEADERRIGHT"; 1027 break; 1028 1029 case ATTR_PAGE_FOOTERRIGHT: 1030 rText = "SID_SCATTR_PAGE_FOOTERRIGHT"; 1031 break; 1032 */ 1033 1034 default: 1035 if ( !pIntl ) 1036 pIntl = ScGlobal::GetScIntlWrapper(); 1037 ePresentation = rItem.GetPresentation( ePresentation, GetMetric( nW ), ePresentationMetric, rText, pIntl ); 1038 break; 1039 } 1040 1041 return ePresentation; 1042 } 1043 1044 SfxMapUnit __EXPORT ScDocumentPool::GetMetric( sal_uInt16 nWhich ) const 1045 { 1046 // eigene Attribute: Twips, alles andere 1/100 mm 1047 1048 if ( nWhich >= ATTR_STARTINDEX && nWhich <= ATTR_ENDINDEX ) 1049 return SFX_MAPUNIT_TWIP; 1050 else 1051 return SFX_MAPUNIT_100TH_MM; 1052 } 1053 1054 1055 1056 1057 1058