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