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