Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <vcl/svapp.hxx>
30 : : #include "scitems.hxx"
31 : : #include <svx/algitem.hxx>
32 : : #include <editeng/brshitem.hxx>
33 : : #include <editeng/editobj.hxx>
34 : : #include <editeng/scripttypeitem.hxx>
35 : : #include <svl/srchitem.hxx>
36 : : #include <editeng/langitem.hxx>
37 : : #include <sfx2/docfile.hxx>
38 : : #include <sfx2/dispatch.hxx>
39 : : #include <sfx2/objsh.hxx>
40 : : #include <sfx2/viewfrm.hxx>
41 : : #include <sfx2/viewsh.hxx>
42 : : #include <svl/stritem.hxx>
43 : : #include <svl/zforlist.hxx>
44 : : #include <svl/zformat.hxx>
45 : : #include <vcl/image.hxx>
46 : : #include <vcl/virdev.hxx>
47 : : #include <sal/macros.h>
48 : : #include <tools/rcid.h>
49 : : #include <unotools/charclass.hxx>
50 : : #include <stdlib.h>
51 : : #include <time.h>
52 : : #include <ctype.h>
53 : : #include <numeric>
54 : :
55 : :
56 : : #include <i18npool/mslangid.hxx>
57 : : #include <com/sun/star/lang/Locale.hpp>
58 : : #include <comphelper/processfactory.hxx>
59 : : #include <unotools/calendarwrapper.hxx>
60 : : #include <unotools/collatorwrapper.hxx>
61 : : #include <com/sun/star/i18n/CollatorOptions.hpp>
62 : : #include <unotools/intlwrapper.hxx>
63 : : #include <unotools/syslocale.hxx>
64 : : #include <unotools/transliterationwrapper.hxx>
65 : :
66 : : #include "global.hxx"
67 : : #include "scresid.hxx"
68 : : #include "autoform.hxx"
69 : : #include "document.hxx"
70 : : #include "patattr.hxx"
71 : : #include "addincol.hxx"
72 : : #include "adiasync.hxx"
73 : : #include "userlist.hxx"
74 : : #include "interpre.hxx"
75 : : #include "strload.hxx"
76 : : #include "docpool.hxx"
77 : : #include "unitconv.hxx"
78 : : #include "compiler.hxx"
79 : : #include "parclass.hxx"
80 : : #include "funcdesc.hxx"
81 : : #include "globstr.hrc"
82 : : #include "scfuncs.hrc"
83 : : #include "sc.hrc"
84 : : #include "scmod.hxx"
85 : : #include "appoptio.hxx"
86 : :
87 : : // -----------------------------------------------------------------------
88 : :
89 : : using ::rtl::OUString;
90 : : using ::rtl::OUStringBuffer;
91 : :
92 : : ScDocShellRef* ScGlobal::pDrawClipDocShellRef = NULL;
93 : : SvxSearchItem* ScGlobal::pSearchItem = NULL;
94 : : ScAutoFormat* ScGlobal::pAutoFormat = NULL;
95 : : FuncCollection* ScGlobal::pFuncCollection = NULL;
96 : : ScUnoAddInCollection* ScGlobal::pAddInCollection = NULL;
97 : : ScUserList* ScGlobal::pUserList = NULL;
98 : : String** ScGlobal::ppRscString = NULL;
99 : : LanguageType ScGlobal::eLnge = LANGUAGE_SYSTEM;
100 : : ::com::sun::star::lang::Locale* ScGlobal::pLocale = NULL;
101 : : SvtSysLocale* ScGlobal::pSysLocale = NULL;
102 : : const CharClass* ScGlobal::pCharClass = NULL;
103 : : const LocaleDataWrapper* ScGlobal::pLocaleData = NULL;
104 : : CalendarWrapper* ScGlobal::pCalendar = NULL;
105 : : CollatorWrapper* ScGlobal::pCollator = NULL;
106 : : CollatorWrapper* ScGlobal::pCaseCollator = NULL;
107 : : ::utl::TransliterationWrapper* ScGlobal::pTransliteration = NULL;
108 : : ::utl::TransliterationWrapper* ScGlobal::pCaseTransliteration = NULL;
109 : 51 : ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XOrdinalSuffix> ScGlobal::xOrdinalSuffix = NULL;
110 : : IntlWrapper* ScGlobal::pScIntlWrapper = NULL;
111 : : sal_Unicode ScGlobal::cListDelimiter = ',';
112 : : String* ScGlobal::pEmptyString = NULL;
113 : : ::rtl::OUString* ScGlobal::pEmptyOUString = NULL;
114 : : String* ScGlobal::pStrClipDocName = NULL;
115 : :
116 : : SvxBrushItem* ScGlobal::pEmptyBrushItem = NULL;
117 : : SvxBrushItem* ScGlobal::pButtonBrushItem = NULL;
118 : : SvxBrushItem* ScGlobal::pEmbeddedBrushItem = NULL;
119 : : SvxBrushItem* ScGlobal::pProtectedBrushItem = NULL;
120 : :
121 : : ImageList* ScGlobal::pOutlineBitmaps = NULL;
122 : :
123 : : ScFunctionList* ScGlobal::pStarCalcFunctionList = NULL;
124 : : ScFunctionMgr* ScGlobal::pStarCalcFunctionMgr = NULL;
125 : :
126 : : ScUnitConverter* ScGlobal::pUnitConverter = NULL;
127 : : SvNumberFormatter* ScGlobal::pEnglishFormatter = NULL;
128 : :
129 : : double ScGlobal::nScreenPPTX = 96.0;
130 : : double ScGlobal::nScreenPPTY = 96.0;
131 : :
132 : : sal_uInt16 ScGlobal::nDefFontHeight = 225;
133 : : sal_uInt16 ScGlobal::nStdRowHeight = 256;
134 : :
135 : : long ScGlobal::nLastRowHeightExtra = 0;
136 : : long ScGlobal::nLastColWidthExtra = STD_EXTRA_WIDTH;
137 : :
138 : : static sal_uInt16 nPPTZoom = 0; // ScreenZoom used to determine nScreenPPTX/Y
139 : :
140 : :
141 : : class SfxViewShell;
142 : : SfxViewShell* pScActiveViewShell = NULL; //! als Member !!!!!
143 : : sal_uInt16 nScClickMouseModifier = 0; //! dito
144 : : sal_uInt16 nScFillModeMouseModifier = 0; //! dito
145 : :
146 : : // Hack: ScGlobal::GetUserList() muss InitAppOptions in der UI aufrufen,
147 : : // damit UserList aus Cfg geladen wird
148 : :
149 : : void global_InitAppOptions();
150 : :
151 : : //========================================================================
152 : : //
153 : : // statische Funktionen
154 : : //
155 : : //========================================================================
156 : :
157 : 3112088 : sal_Bool ScGlobal::HasAttrChanged( const SfxItemSet& rNewAttrs,
158 : : const SfxItemSet& rOldAttrs,
159 : : const sal_uInt16 nWhich )
160 : : {
161 : 3112088 : sal_Bool bInvalidate = false;
162 : 3112088 : const SfxItemState eNewState = rNewAttrs.GetItemState( nWhich );
163 : 3112088 : const SfxItemState eOldState = rOldAttrs.GetItemState( nWhich );
164 : :
165 : : //----------------------------------------------------------
166 : :
167 [ + + ]: 3112088 : if ( eNewState == eOldState )
168 : : {
169 : : // beide Items gesetzt
170 : : // PoolItems, d.h. Pointer-Vergleich zulaessig
171 [ + + ]: 3107253 : if ( SFX_ITEM_SET == eOldState )
172 : 1057695 : bInvalidate = (&rNewAttrs.Get( nWhich ) != &rOldAttrs.Get( nWhich ));
173 : : }
174 : : else
175 : : {
176 : : // ein Default-Item dabei
177 : : // PoolItems, d.h. Item-Vergleich noetig
178 : :
179 : : const SfxPoolItem& rOldItem = ( SFX_ITEM_SET == eOldState )
180 : 556 : ? rOldAttrs.Get( nWhich )
181 [ + + ]: 4835 : : rOldAttrs.GetPool()->GetDefaultItem( nWhich );
182 : :
183 : : const SfxPoolItem& rNewItem = ( SFX_ITEM_SET == eNewState )
184 : 4279 : ? rNewAttrs.Get( nWhich )
185 [ + + ]: 4835 : : rNewAttrs.GetPool()->GetDefaultItem( nWhich );
186 : :
187 : 4835 : bInvalidate = sal::static_int_cast<sal_Bool>(rNewItem != rOldItem);
188 : : }
189 : :
190 : 3112088 : return bInvalidate;
191 : : }
192 : :
193 : 257 : sal_uLong ScGlobal::GetStandardFormat( SvNumberFormatter& rFormatter,
194 : : sal_uLong nFormat, short nType )
195 : : {
196 : 257 : const SvNumberformat* pFormat = rFormatter.GetEntry( nFormat );
197 [ + - ]: 257 : if ( pFormat )
198 : 257 : return rFormatter.GetStandardFormat( nFormat, nType, pFormat->GetLanguage() );
199 : 257 : return rFormatter.GetStandardFormat( nType, eLnge );
200 : : }
201 : :
202 : 1512 : sal_uLong ScGlobal::GetStandardFormat( double fNumber, SvNumberFormatter& rFormatter,
203 : : sal_uLong nFormat, short nType )
204 : : {
205 : 1512 : const SvNumberformat* pFormat = rFormatter.GetEntry( nFormat );
206 [ + - ]: 1512 : if ( pFormat )
207 : : return rFormatter.GetStandardFormat( fNumber, nFormat, nType,
208 : 1512 : pFormat->GetLanguage() );
209 : 1512 : return rFormatter.GetStandardFormat( nType, eLnge );
210 : : }
211 : :
212 : :
213 : 51 : SvNumberFormatter* ScGlobal::GetEnglishFormatter()
214 : : {
215 [ + + ]: 51 : if ( !pEnglishFormatter )
216 : : {
217 : : pEnglishFormatter = new SvNumberFormatter(
218 [ + - ][ + - ]: 1 : ::comphelper::getProcessServiceFactory(), LANGUAGE_ENGLISH_US );
219 : 1 : pEnglishFormatter->SetEvalDateFormat( NF_EVALDATEFORMAT_INTL_FORMAT );
220 : : }
221 : 51 : return pEnglishFormatter;
222 : : }
223 : :
224 : :
225 : : //------------------------------------------------------------------------
226 : :
227 : 133943 : sal_Bool ScGlobal::CheckWidthInvalidate( bool& bNumFormatChanged,
228 : : const SfxItemSet& rNewAttrs,
229 : : const SfxItemSet& rOldAttrs )
230 : : {
231 : : // Ueberpruefen, ob Attributaenderungen in rNewAttrs gegnueber
232 : : // rOldAttrs die Textbreite an einer Zelle ungueltig machen
233 : :
234 : : bNumFormatChanged =
235 : 133943 : HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_VALUE_FORMAT );
236 : : return ( bNumFormatChanged
237 : 132114 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_LANGUAGE_FORMAT )
238 : 132114 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_FONT )
239 : 131659 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_CJK_FONT )
240 : 131238 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_CTL_FONT )
241 : 130975 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_FONT_HEIGHT )
242 : 130934 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_CJK_FONT_HEIGHT )
243 : 130856 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_CTL_FONT_HEIGHT )
244 : 130793 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_FONT_WEIGHT )
245 : 128816 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_CJK_FONT_WEIGHT )
246 : 128778 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_CTL_FONT_WEIGHT )
247 : 128741 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_FONT_POSTURE )
248 : 128700 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_CJK_FONT_POSTURE )
249 : 128662 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_CTL_FONT_POSTURE )
250 : 128625 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_FONT_UNDERLINE )
251 : 128514 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_FONT_OVERLINE )
252 : 128460 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_FONT_CROSSEDOUT )
253 : 128381 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_FONT_CONTOUR )
254 : 128346 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_FONT_SHADOWED )
255 : 128311 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_STACKED )
256 : 128311 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_ROTATE_VALUE )
257 : 128279 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_ROTATE_MODE )
258 : 128279 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_LINEBREAK )
259 : 128259 : || HasAttrChanged( rNewAttrs, rOldAttrs, ATTR_MARGIN )
260 [ + + + - : 3112088 : );
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
- + + + -
+ + + + ]
261 : : }
262 : :
263 : 0 : const SvxSearchItem& ScGlobal::GetSearchItem()
264 : : {
265 [ # # ]: 0 : if (!pSearchItem)
266 : : {
267 [ # # ]: 0 : pSearchItem = new SvxSearchItem( SID_SEARCH_ITEM );
268 : 0 : pSearchItem->SetAppFlag( SVX_SEARCHAPP_CALC );
269 : : }
270 : 0 : return *pSearchItem;
271 : : }
272 : :
273 : 0 : void ScGlobal::SetSearchItem( const SvxSearchItem& rNew )
274 : : {
275 : : // Hier waere ein Zuweisungsoperator ganz nett:
276 [ # # ]: 0 : delete pSearchItem;
277 : 0 : pSearchItem = (SvxSearchItem*)rNew.Clone();
278 : :
279 : 0 : pSearchItem->SetWhich( SID_SEARCH_ITEM );
280 : 0 : pSearchItem->SetAppFlag( SVX_SEARCHAPP_CALC );
281 : 0 : }
282 : :
283 : 0 : void ScGlobal::ClearAutoFormat()
284 : : {
285 [ # # ]: 0 : if (pAutoFormat!=NULL)
286 : : {
287 [ # # ]: 0 : delete pAutoFormat;
288 : 0 : pAutoFormat=NULL;
289 : : }
290 : 0 : }
291 : :
292 : 25 : ScAutoFormat* ScGlobal::GetAutoFormat()
293 : : {
294 : 25 : return pAutoFormat;
295 : : }
296 : :
297 : 432 : ScAutoFormat* ScGlobal::GetOrCreateAutoFormat()
298 : : {
299 [ + + ]: 432 : if ( !pAutoFormat )
300 : : {
301 [ + - ]: 1 : pAutoFormat = new ScAutoFormat;
302 : 1 : pAutoFormat->Load();
303 : : }
304 : :
305 : 432 : return pAutoFormat;
306 : : }
307 : :
308 : 2297 : FuncCollection* ScGlobal::GetFuncCollection()
309 : : {
310 [ + + ]: 2297 : if (!pFuncCollection)
311 [ + - ]: 13 : pFuncCollection = new FuncCollection();
312 : 2297 : return pFuncCollection;
313 : : }
314 : :
315 : 2326 : ScUnoAddInCollection* ScGlobal::GetAddInCollection()
316 : : {
317 [ + + ]: 2326 : if (!pAddInCollection)
318 [ + - ]: 24 : pAddInCollection = new ScUnoAddInCollection();
319 : 2326 : return pAddInCollection;
320 : : }
321 : :
322 : 14 : ScUserList* ScGlobal::GetUserList()
323 : : {
324 : : // Hack: Cfg-Item an der App ggF. laden
325 : :
326 : 14 : global_InitAppOptions();
327 : :
328 [ - + ]: 14 : if (!pUserList)
329 [ # # ]: 0 : pUserList = new ScUserList();
330 : 14 : return pUserList;
331 : : }
332 : :
333 : 51 : void ScGlobal::SetUserList( const ScUserList* pNewList )
334 : : {
335 [ + - ]: 51 : if ( pNewList )
336 : : {
337 [ + - ]: 51 : if ( !pUserList )
338 [ + - ]: 51 : pUserList = new ScUserList( *pNewList );
339 : : else
340 : 0 : *pUserList = *pNewList;
341 : : }
342 : : else
343 : : {
344 [ # # ]: 0 : delete pUserList;
345 : 0 : pUserList = NULL;
346 : : }
347 : 51 : }
348 : :
349 : 31034 : const String& ScGlobal::GetRscString( sal_uInt16 nIndex )
350 : : {
351 : : OSL_ENSURE( nIndex < STR_COUNT, "ScGlobal::GetRscString - invalid string index");
352 [ + + ]: 31034 : if( !ppRscString[ nIndex ] )
353 : : {
354 : 966 : OpCode eOp = ocNone;
355 : : // Map former globstr.src strings moved to compiler.src
356 [ - - + - : 966 : switch (nIndex)
- + + + ]
357 : : {
358 : : case STR_NULL_ERROR:
359 : 0 : eOp = ocErrNull;
360 : 0 : break;
361 : : case STR_DIV_ZERO:
362 : 0 : eOp = ocErrDivZero;
363 : 0 : break;
364 : : case STR_NO_VALUE:
365 : 3 : eOp = ocErrValue;
366 : 3 : break;
367 : : case STR_NOREF_STR:
368 : 0 : eOp = ocErrRef;
369 : 0 : break;
370 : : case STR_NO_NAME_REF:
371 : 0 : eOp = ocErrName;
372 : 0 : break;
373 : : case STR_NUM_ERROR:
374 : 1 : eOp = ocErrNum;
375 : 1 : break;
376 : : case STR_NV_STR:
377 : 6 : eOp = ocErrNA;
378 : 6 : break;
379 : : default:
380 : : ; // nothing
381 : : }
382 [ + + ]: 966 : if (eOp != ocNone)
383 : 10 : ppRscString[ nIndex ] = new String(
384 [ + - ]: 10 : ScCompiler::GetNativeSymbol( eOp));
385 : : else
386 : 956 : ppRscString[ nIndex ] = new String(
387 [ + - ][ + - ]: 956 : ScRscStrLoader( RID_GLOBSTR, nIndex ).GetString());
388 : : }
389 : 31034 : return *ppRscString[ nIndex ];
390 : : }
391 : :
392 : 190 : String ScGlobal::GetErrorString(sal_uInt16 nErrNumber)
393 : : {
394 : 190 : String sResStr;
395 [ + + - - : 190 : switch (nErrNumber)
- + - - +
+ ]
396 : : {
397 : 36 : case NOTAVAILABLE : nErrNumber = STR_NV_STR; break;
398 : 24 : case errNoRef : nErrNumber = STR_NO_REF_TABLE; break;
399 : 0 : case errNoName : nErrNumber = STR_NO_NAME_REF; break;
400 : 0 : case errNoAddin : nErrNumber = STR_NO_ADDIN; break;
401 : 0 : case errNoMacro : nErrNumber = STR_NO_MACRO; break;
402 : : case errDoubleRef :
403 : 12 : case errNoValue : nErrNumber = STR_NO_VALUE; break;
404 : 0 : case errNoCode : nErrNumber = STR_NULL_ERROR; break;
405 : 0 : case errDivisionByZero : nErrNumber = STR_DIV_ZERO; break;
406 : 81 : case errIllegalFPOperation : nErrNumber = STR_NUM_ERROR; break;
407 : :
408 [ + - ][ + - ]: 37 : default : sResStr = GetRscString(STR_ERROR_STR);
409 [ + - ][ + - ]: 37 : sResStr += String::CreateFromInt32( nErrNumber );
[ + - ]
410 : 37 : nErrNumber = 0;
411 : 37 : break;
412 : : }
413 [ + + ]: 190 : if( nErrNumber )
414 [ + - ][ + - ]: 153 : sResStr = GetRscString( nErrNumber );
415 : 190 : return sResStr;
416 : : }
417 : :
418 : 0 : String ScGlobal::GetLongErrorString(sal_uInt16 nErrNumber)
419 : : {
420 [ # # # # : 0 : switch (nErrNumber)
# # # # #
# # # # #
# # # # #
# # # #
# ]
421 : : {
422 : : case 0:
423 : 0 : break;
424 : : case 1:
425 : : case errIllegalArgument:
426 : 0 : nErrNumber = STR_LONG_ERR_ILL_ARG;
427 : 0 : break;
428 : : case 2:
429 : : case 3:
430 : : case 4:
431 : : case 5:
432 : : case errIllegalFPOperation:
433 : 0 : nErrNumber = STR_LONG_ERR_ILL_FPO;
434 : 0 : break;
435 : : case errIllegalChar:
436 : 0 : nErrNumber = STR_LONG_ERR_ILL_CHAR;
437 : 0 : break;
438 : : case errIllegalParameter:
439 : 0 : nErrNumber = STR_LONG_ERR_ILL_PAR;
440 : 0 : break;
441 : : case errSeparator:
442 : 0 : nErrNumber = STR_LONG_ERR_ILL_SEP;
443 : 0 : break;
444 : : case errPair:
445 : : case errPairExpected:
446 : 0 : nErrNumber = STR_LONG_ERR_PAIR;
447 : 0 : break;
448 : : case errOperatorExpected:
449 : 0 : nErrNumber = STR_LONG_ERR_OP_EXP;
450 : 0 : break;
451 : : case errVariableExpected:
452 : : case errParameterExpected:
453 : 0 : nErrNumber = STR_LONG_ERR_VAR_EXP;
454 : 0 : break;
455 : : case errCodeOverflow:
456 : 0 : nErrNumber = STR_LONG_ERR_CODE_OVF;
457 : 0 : break;
458 : : case errStringOverflow:
459 : 0 : nErrNumber = STR_LONG_ERR_STR_OVF;
460 : 0 : break;
461 : : case errStackOverflow:
462 : : case errInterpOverflow:
463 : 0 : nErrNumber = STR_LONG_ERR_STACK_OVF;
464 : 0 : break;
465 : : case errIllegalJump:
466 : : case errUnknownState:
467 : : case errUnknownVariable:
468 : : case errUnknownOpCode:
469 : : case errUnknownStackVariable:
470 : : case errUnknownToken:
471 : : case errNoCode:
472 : : case errDoubleRef:
473 : 0 : nErrNumber = STR_LONG_ERR_SYNTAX;
474 : 0 : break;
475 : : case errCircularReference:
476 : 0 : nErrNumber = STR_LONG_ERR_CIRC_REF;
477 : 0 : break;
478 : : case errNoConvergence:
479 : 0 : nErrNumber = STR_LONG_ERR_NO_CONV;
480 : 0 : break;
481 : : case errNoRef:
482 : 0 : nErrNumber = STR_LONG_ERR_NO_REF;
483 : 0 : break;
484 : : case errNoName:
485 : 0 : nErrNumber = STR_LONG_ERR_NO_NAME;
486 : 0 : break;
487 : : case errNoAddin:
488 : 0 : nErrNumber = STR_LONG_ERR_NO_ADDIN;
489 : 0 : break;
490 : : case errNoMacro:
491 : 0 : nErrNumber = STR_LONG_ERR_NO_MACRO;
492 : 0 : break;
493 : : case errDivisionByZero:
494 : 0 : nErrNumber = STR_LONG_ERR_DIV_ZERO;
495 : 0 : break;
496 : : case errNestedArray:
497 : 0 : nErrNumber = STR_ERR_LONG_NESTED_ARRAY;
498 : 0 : break;
499 : : case errNoValue:
500 : 0 : nErrNumber = STR_LONG_ERR_NO_VALUE;
501 : 0 : break;
502 : : case NOTAVAILABLE:
503 : 0 : nErrNumber = STR_LONG_ERR_NV;
504 : 0 : break;
505 : : default:
506 : 0 : nErrNumber = STR_ERROR_STR;
507 : 0 : break;
508 : : }
509 : 0 : String aRes( GetRscString( nErrNumber ) );
510 : 0 : return aRes;
511 : : }
512 : :
513 : 0 : SvxBrushItem* ScGlobal::GetButtonBrushItem()
514 : : {
515 : 0 : pButtonBrushItem->SetColor( Application::GetSettings().GetStyleSettings().GetFaceColor() );
516 : 0 : return pButtonBrushItem;
517 : : }
518 : :
519 : 61677 : const String& ScGlobal::GetEmptyString()
520 : : {
521 : 61677 : return *pEmptyString;
522 : : }
523 : :
524 : 2292 : const ::rtl::OUString& ScGlobal::GetEmptyOUString()
525 : : {
526 : 2292 : return *pEmptyOUString;
527 : : }
528 : :
529 : 2 : ImageList* ScGlobal::GetOutlineSymbols()
530 : : {
531 : 2 : ImageList*& rpImageList = pOutlineBitmaps;
532 [ + + ]: 2 : if( !rpImageList )
533 [ + - ][ + - ]: 1 : rpImageList = new ImageList( ScResId( RID_OUTLINEBITMAPS ) );
534 : 2 : return rpImageList;
535 : : }
536 : :
537 : 51 : void ScGlobal::Init()
538 : : {
539 [ + - ]: 51 : pEmptyString = new String;
540 : 51 : pEmptyOUString = new ::rtl::OUString;
541 : :
542 : : // Die Default-Sprache fuer Zahlenformate (ScGlobal::eLnge)
543 : : // muss immer LANGUAGE_SYSTEM sein
544 : : //! Dann kann auch die Variable raus
545 : 51 : eLnge = LANGUAGE_SYSTEM;
546 : :
547 : : //! Wenn Sortierung etc. von der Sprache der installierten Offfice-Version
548 : : //! abhaengen sollen, hier "Application::GetSettings().GetUILanguage()"
549 [ + - ]: 51 : pSysLocale = new SvtSysLocale;
550 : 51 : pCharClass = pSysLocale->GetCharClassPtr();
551 : 51 : pLocaleData = pSysLocale->GetLocaleDataPtr();
552 : :
553 : 51 : ppRscString = new String *[ STR_COUNT ];
554 [ + + ]: 24378 : for( sal_uInt16 nC = 0 ; nC < STR_COUNT ; nC++ ) ppRscString[ nC ] = NULL;
555 : :
556 [ + - ][ + - ]: 51 : pEmptyBrushItem = new SvxBrushItem( Color( COL_TRANSPARENT ), ATTR_BACKGROUND );
557 [ + - ][ + - ]: 51 : pButtonBrushItem = new SvxBrushItem( Color(), ATTR_BACKGROUND );
558 [ + - ][ + - ]: 51 : pEmbeddedBrushItem = new SvxBrushItem( Color( COL_LIGHTCYAN ), ATTR_BACKGROUND );
559 [ + - ][ + - ]: 51 : pProtectedBrushItem = new SvxBrushItem( Color( COL_LIGHTGRAY ), ATTR_BACKGROUND );
560 : :
561 : 51 : UpdatePPT(NULL);
562 : : //ScCompiler::InitSymbolsNative();
563 : : // ScParameterClassification _after_ Compiler, needs function resources if
564 : : // arguments are to be merged in, which in turn need strings of function
565 : : // names from the compiler.
566 : 51 : ScParameterClassification::Init();
567 : 51 : srand( (unsigned) time( NULL ) ); // Random Seed Init fuer Interpreter
568 : :
569 : 51 : InitAddIns();
570 : :
571 [ + - ][ + - ]: 51 : pStrClipDocName = new String( ScResId( SCSTR_NONAME ) );
572 : 51 : *pStrClipDocName += '1';
573 : :
574 : : // ScDocumentPool::InitVersionMaps() ist schon vorher gerufen worden
575 : 51 : }
576 : :
577 : 51 : void ScGlobal::UpdatePPT( OutputDevice* pDev )
578 : : {
579 : 51 : sal_uInt16 nCurrentZoom = Application::GetSettings().GetStyleSettings().GetScreenZoom();
580 [ + - ]: 51 : if ( nCurrentZoom != nPPTZoom )
581 : : {
582 : : // Screen PPT values must be updated when ScreenZoom has changed.
583 : : // If called from Window::DataChanged, the window is passed as pDev,
584 : : // to make sure LogicToPixel uses a device which already uses the new zoom.
585 : : // For the initial settings, NULL is passed and GetDefaultDevice used.
586 : :
587 [ + - ]: 51 : if ( !pDev )
588 [ + - ]: 51 : pDev = Application::GetDefaultDevice();
589 [ + - ][ + - ]: 51 : Point aPix1000 = pDev->LogicToPixel( Point(1000,1000), MAP_TWIP );
[ + - ]
590 : 51 : nScreenPPTX = aPix1000.X() / 1000.0;
591 : 51 : nScreenPPTY = aPix1000.Y() / 1000.0;
592 : 51 : nPPTZoom = nCurrentZoom;
593 : : }
594 : 51 : }
595 : :
596 : 0 : const String& ScGlobal::GetClipDocName()
597 : : {
598 : 0 : return *pStrClipDocName;
599 : : }
600 : :
601 : 0 : void ScGlobal::SetClipDocName( const String& rNew )
602 : : {
603 : 0 : *pStrClipDocName = rNew;
604 : 0 : }
605 : :
606 : :
607 : 51 : void ScGlobal::InitTextHeight(SfxItemPool* pPool)
608 : : {
609 [ + - ]: 51 : if (!pPool)
610 : : {
611 : : OSL_FAIL("kein Pool bei ScGlobal::InitTextHeight");
612 : : return;
613 : : }
614 : :
615 [ + - ]: 51 : const ScPatternAttr* pPattern = (const ScPatternAttr*)&pPool->GetDefaultItem(ATTR_PATTERN);
616 [ + - ]: 51 : if (!pPattern)
617 : : {
618 : : OSL_FAIL("kein Default-Pattern bei ScGlobal::InitTextHeight");
619 : : return;
620 : : }
621 : :
622 [ + - ]: 51 : OutputDevice* pDefaultDev = Application::GetDefaultDevice();
623 [ + - ]: 51 : VirtualDevice aVirtWindow( *pDefaultDev );
624 [ + - ][ + - ]: 51 : aVirtWindow.SetMapMode(MAP_PIXEL);
[ + - ]
625 [ + - ]: 51 : Font aDefFont;
626 [ + - ]: 51 : pPattern->GetFont(aDefFont, SC_AUTOCOL_BLACK, &aVirtWindow); // font color doesn't matter here
627 [ + - ]: 51 : aVirtWindow.SetFont(aDefFont);
628 : : sal_uInt16 nTest = static_cast<sal_uInt16>(
629 [ + - ][ + - ]: 51 : aVirtWindow.PixelToLogic(Size(0, aVirtWindow.GetTextHeight()), MAP_TWIP).Height());
[ + - ][ + - ]
630 : :
631 [ - + ]: 51 : if (nTest > nDefFontHeight)
632 : 0 : nDefFontHeight = nTest;
633 : :
634 [ + - ]: 51 : const SvxMarginItem* pMargin = (const SvxMarginItem*)&pPattern->GetItem(ATTR_MARGIN);
635 : :
636 : : nTest = static_cast<sal_uInt16>(
637 : 51 : nDefFontHeight + pMargin->GetTopMargin() + pMargin->GetBottomMargin() - STD_ROWHEIGHT_DIFF);
638 : :
639 [ - + ]: 51 : if (nTest > nStdRowHeight)
640 [ + - ][ + - ]: 51 : nStdRowHeight = nTest;
641 : : }
642 : :
643 : 18 : void ScGlobal::Clear()
644 : : {
645 : : // asyncs _vor_ ExitExternalFunc zerstoeren!
646 [ - + ]: 18 : for( ScAddInAsyncs::iterator it = theAddInAsyncTbl.begin(); it != theAddInAsyncTbl.end(); ++it )
647 : : {
648 [ # # ][ # # ]: 0 : delete *it;
649 : : }
650 : 18 : theAddInAsyncTbl.clear();
651 : 18 : ExitExternalFunc();
652 [ + + ]: 18 : DELETEZ(pAutoFormat);
653 [ - + ]: 18 : DELETEZ(pSearchItem);
654 [ + + ]: 18 : DELETEZ(pFuncCollection);
655 [ + + ]: 18 : DELETEZ(pAddInCollection);
656 [ + - ]: 18 : DELETEZ(pUserList);
657 : :
658 [ + + ]: 8604 : for( sal_uInt16 nC = 0 ; nC < STR_COUNT ; nC++ )
659 [ + - ][ + + ]: 8586 : if( ppRscString ) delete ppRscString[ nC ];
660 [ + - ]: 18 : delete[] ppRscString;
661 : 18 : ppRscString = NULL;
662 : :
663 [ - + ]: 18 : DELETEZ(pStarCalcFunctionList); // vor ResMgr zerstoeren!
664 [ - + ]: 18 : DELETEZ(pStarCalcFunctionMgr);
665 : 18 : ScParameterClassification::Exit();
666 : 18 : ScCompiler::DeInit();
667 : 18 : ScInterpreter::GlobalExit(); // statischen Stack loeschen
668 : :
669 [ + - ]: 18 : DELETEZ(pEmptyBrushItem);
670 [ + - ]: 18 : DELETEZ(pButtonBrushItem);
671 [ + - ]: 18 : DELETEZ(pEmbeddedBrushItem);
672 [ + - ]: 18 : DELETEZ(pProtectedBrushItem);
673 [ + + ]: 18 : DELETEZ(pOutlineBitmaps);
674 [ + + ]: 18 : DELETEZ(pEnglishFormatter);
675 [ - + ]: 18 : DELETEZ(pCaseTransliteration);
676 [ + + ]: 18 : DELETEZ(pTransliteration);
677 [ - + ]: 18 : DELETEZ(pCaseCollator);
678 [ + + ]: 18 : DELETEZ(pCollator);
679 [ - + ]: 18 : DELETEZ(pCalendar);
680 : : //! do NOT delete pCharClass since it is a pointer to the single SvtSysLocale instance
681 : 18 : pCharClass = NULL;
682 : : //! do NOT delete pLocaleData since it is a pointer to the single SvtSysLocale instance
683 : 18 : pLocaleData = NULL;
684 [ + - ]: 18 : DELETEZ(pSysLocale);
685 [ + - ]: 18 : DELETEZ(pLocale);
686 [ - + ]: 18 : DELETEZ(pScIntlWrapper);
687 [ + - ]: 18 : DELETEZ(pStrClipDocName);
688 : :
689 [ - + ]: 18 : DELETEZ(pUnitConverter);
690 : :
691 : 18 : ScDocumentPool::DeleteVersionMaps();
692 : :
693 [ + - ]: 18 : DELETEZ(pEmptyString);
694 [ + - ]: 18 : DELETEZ(pEmptyOUString);
695 : 18 : }
696 : :
697 : : //------------------------------------------------------------------------
698 : :
699 : 0 : CharSet ScGlobal::GetCharsetValue( const String& rCharSet )
700 : : {
701 : : // new TextEncoding values
702 [ # # ]: 0 : if ( CharClass::isAsciiNumeric( rCharSet ) )
703 : : {
704 : 0 : sal_Int32 nVal = rCharSet.ToInt32();
705 [ # # ][ # # ]: 0 : if ( !nVal || nVal == RTL_TEXTENCODING_DONTKNOW )
706 : 0 : return osl_getThreadTextEncoding();
707 : 0 : return (CharSet) nVal;
708 : : }
709 : : // old CharSet values for compatibility
710 [ # # ]: 0 : else if (rCharSet.EqualsIgnoreCaseAscii("ANSI") ) return RTL_TEXTENCODING_MS_1252;
711 [ # # ]: 0 : else if (rCharSet.EqualsIgnoreCaseAscii("MAC") ) return RTL_TEXTENCODING_APPLE_ROMAN;
712 [ # # ]: 0 : else if (rCharSet.EqualsIgnoreCaseAscii("IBMPC") ) return RTL_TEXTENCODING_IBM_850;
713 [ # # ]: 0 : else if (rCharSet.EqualsIgnoreCaseAscii("IBMPC_437")) return RTL_TEXTENCODING_IBM_437;
714 [ # # ]: 0 : else if (rCharSet.EqualsIgnoreCaseAscii("IBMPC_850")) return RTL_TEXTENCODING_IBM_850;
715 [ # # ]: 0 : else if (rCharSet.EqualsIgnoreCaseAscii("IBMPC_860")) return RTL_TEXTENCODING_IBM_860;
716 [ # # ]: 0 : else if (rCharSet.EqualsIgnoreCaseAscii("IBMPC_861")) return RTL_TEXTENCODING_IBM_861;
717 [ # # ]: 0 : else if (rCharSet.EqualsIgnoreCaseAscii("IBMPC_863")) return RTL_TEXTENCODING_IBM_863;
718 [ # # ]: 0 : else if (rCharSet.EqualsIgnoreCaseAscii("IBMPC_865")) return RTL_TEXTENCODING_IBM_865;
719 : 0 : else return osl_getThreadTextEncoding();
720 : : }
721 : :
722 : : //------------------------------------------------------------------------
723 : :
724 : 0 : String ScGlobal::GetCharsetString( CharSet eVal )
725 : : {
726 : : const sal_Char* pChar;
727 [ # # # # : 0 : switch ( eVal )
# # # # #
# ]
728 : : {
729 : : // old CharSet strings for compatibility
730 : 0 : case RTL_TEXTENCODING_MS_1252: pChar = "ANSI"; break;
731 : 0 : case RTL_TEXTENCODING_APPLE_ROMAN: pChar = "MAC"; break;
732 : : // IBMPC == IBMPC_850
733 : 0 : case RTL_TEXTENCODING_IBM_437: pChar = "IBMPC_437"; break;
734 : 0 : case RTL_TEXTENCODING_IBM_850: pChar = "IBMPC_850"; break;
735 : 0 : case RTL_TEXTENCODING_IBM_860: pChar = "IBMPC_860"; break;
736 : 0 : case RTL_TEXTENCODING_IBM_861: pChar = "IBMPC_861"; break;
737 : 0 : case RTL_TEXTENCODING_IBM_863: pChar = "IBMPC_863"; break;
738 : 0 : case RTL_TEXTENCODING_IBM_865: pChar = "IBMPC_865"; break;
739 : 0 : case RTL_TEXTENCODING_DONTKNOW: pChar = "SYSTEM"; break;
740 : : // new string of TextEncoding value
741 : : default:
742 : 0 : return String::CreateFromInt32( eVal );
743 : : }
744 [ # # ]: 0 : return rtl::OUString::createFromAscii(pChar);
745 : : }
746 : :
747 : : //------------------------------------------------------------------------
748 : :
749 : 0 : bool ScGlobal::HasStarCalcFunctionList()
750 : : {
751 : 0 : return ( pStarCalcFunctionList != NULL );
752 : : }
753 : :
754 : 812 : ScFunctionList* ScGlobal::GetStarCalcFunctionList()
755 : : {
756 [ + + ]: 812 : if ( !pStarCalcFunctionList )
757 [ + - ]: 5 : pStarCalcFunctionList = new ScFunctionList;
758 : :
759 : 812 : return pStarCalcFunctionList;
760 : : }
761 : :
762 : : //------------------------------------------------------------------------
763 : :
764 : 3 : ScFunctionMgr* ScGlobal::GetStarCalcFunctionMgr()
765 : : {
766 [ + - ]: 3 : if ( !pStarCalcFunctionMgr )
767 [ + - ]: 3 : pStarCalcFunctionMgr = new ScFunctionMgr;
768 : :
769 : 3 : return pStarCalcFunctionMgr;
770 : : }
771 : :
772 : 412 : void ScGlobal::ResetFunctionList()
773 : : {
774 : : // FunctionMgr has pointers into FunctionList, must also be updated
775 : :
776 [ + + ]: 412 : DELETEZ( pStarCalcFunctionMgr );
777 [ + + ]: 412 : DELETEZ( pStarCalcFunctionList );
778 : 412 : }
779 : :
780 : : //------------------------------------------------------------------------
781 : :
782 : 0 : ScUnitConverter* ScGlobal::GetUnitConverter()
783 : : {
784 [ # # ]: 0 : if ( !pUnitConverter )
785 [ # # ]: 0 : pUnitConverter = new ScUnitConverter;
786 : :
787 : 0 : return pUnitConverter;
788 : : }
789 : :
790 : :
791 : : //------------------------------------------------------------------------
792 : :
793 : 15210 : const sal_Unicode* ScGlobal::UnicodeStrChr( const sal_Unicode* pStr,
794 : : sal_Unicode c )
795 : : {
796 [ - + ]: 15210 : if ( !pStr )
797 : 0 : return NULL;
798 [ + + ]: 28302 : while ( *pStr )
799 : : {
800 [ + + ]: 17058 : if ( *pStr == c )
801 : 3966 : return pStr;
802 : 13092 : pStr++;
803 : : }
804 : 15210 : return NULL;
805 : : }
806 : :
807 : : // ----------------------------------------------------------------------------
808 : :
809 : 0 : void ScGlobal::AddToken( String& rTokenList, const String& rToken, sal_Unicode cSep, xub_StrLen nSepCount, bool bForceSep )
810 : : {
811 [ # # ][ # # ]: 0 : if( bForceSep || (rToken.Len() && rTokenList.Len()) )
[ # # ][ # # ]
812 : 0 : rTokenList.Expand( rTokenList.Len() + nSepCount, cSep );
813 : 0 : rTokenList.Append( rToken );
814 : 0 : }
815 : :
816 : 0 : bool ScGlobal::IsQuoted( const String& rString, sal_Unicode cQuote )
817 : : {
818 [ # # ][ # # ]: 0 : return (rString.Len() >= 2) && (rString.GetChar( 0 ) == cQuote) && (rString.GetChar( rString.Len() - 1 ) == cQuote);
[ # # ]
819 : : }
820 : :
821 : 0 : void ScGlobal::AddQuotes( String& rString, sal_Unicode cQuote, bool bEscapeEmbedded )
822 : : {
823 [ # # ]: 0 : if (bEscapeEmbedded)
824 : : {
825 : : sal_Unicode pQ[3];
826 : 0 : pQ[0] = pQ[1] = cQuote;
827 : 0 : pQ[2] = 0;
828 : 0 : rtl::OUString aQuotes( pQ );
829 [ # # ][ # # ]: 0 : rString.SearchAndReplaceAll( rtl::OUString(cQuote), aQuotes);
[ # # ][ # # ]
[ # # ]
830 : : }
831 : 0 : rString.Insert( cQuote, 0 ).Append( cQuote );
832 : 0 : }
833 : :
834 : 0 : void ScGlobal::EraseQuotes( String& rString, sal_Unicode cQuote, bool bUnescapeEmbedded )
835 : : {
836 [ # # ]: 0 : if ( IsQuoted( rString, cQuote ) )
837 : : {
838 : 0 : rString.Erase( rString.Len() - 1 ).Erase( 0, 1 );
839 [ # # ]: 0 : if (bUnescapeEmbedded)
840 : : {
841 : : sal_Unicode pQ[3];
842 : 0 : pQ[0] = pQ[1] = cQuote;
843 : 0 : pQ[2] = 0;
844 : 0 : rtl::OUString aQuotes( pQ );
845 [ # # ][ # # ]: 0 : rString.SearchAndReplaceAll( aQuotes, rtl::OUString(cQuote));
[ # # ][ # # ]
[ # # ]
846 : : }
847 : : }
848 : 0 : }
849 : :
850 : 4582 : xub_StrLen ScGlobal::FindUnquoted( const String& rString, sal_Unicode cChar, xub_StrLen nStart, sal_Unicode cQuote )
851 : : {
852 : 4582 : const sal_Unicode* const pStart = rString.GetBuffer();
853 : 4582 : const sal_Unicode* const pStop = pStart + rString.Len();
854 : 4582 : const sal_Unicode* p = pStart + nStart;
855 : 4582 : bool bQuoted = false;
856 [ + + ]: 27272 : while (p < pStop)
857 : : {
858 [ + + ][ + + ]: 24665 : if (*p == cChar && !bQuoted)
859 : 1975 : return sal::static_int_cast< xub_StrLen >( p - pStart );
860 [ + + ]: 22690 : else if (*p == cQuote)
861 : : {
862 [ + + ]: 40 : if (!bQuoted)
863 : 20 : bQuoted = true;
864 [ + - ][ - + ]: 20 : else if (p < pStop-1 && *(p+1) == cQuote)
865 : 0 : ++p;
866 : : else
867 : 40 : bQuoted = false;
868 : : }
869 : 22690 : ++p;
870 : : }
871 : 4582 : return STRING_NOTFOUND;
872 : : }
873 : :
874 : 7681 : const sal_Unicode* ScGlobal::FindUnquoted( const sal_Unicode* pString, sal_Unicode cChar, sal_Unicode cQuote )
875 : : {
876 : 7681 : const sal_Unicode* p = pString;
877 : 7681 : bool bQuoted = false;
878 [ + + ]: 49221 : while (*p)
879 : : {
880 [ + + ][ + - ]: 45706 : if (*p == cChar && !bQuoted)
881 : 4166 : return p;
882 [ + + ]: 41540 : else if (*p == cQuote)
883 : : {
884 [ + + ]: 24 : if (!bQuoted)
885 : 12 : bQuoted = true;
886 [ - + ]: 12 : else if (*(p+1) == cQuote)
887 : 0 : ++p;
888 : : else
889 : 12 : bQuoted = false;
890 : : }
891 : 41540 : ++p;
892 : : }
893 : 7681 : return NULL;
894 : : }
895 : :
896 : : //------------------------------------------------------------------------
897 : :
898 : 7976 : sal_Bool ScGlobal::EETextObjEqual( const EditTextObject* pObj1,
899 : : const EditTextObject* pObj2 )
900 : : {
901 [ + + ]: 7976 : if ( pObj1 == pObj2 ) // both empty or the same object
902 : 1202 : return sal_True;
903 : :
904 [ + + ][ + + ]: 6774 : if ( pObj1 && pObj2 )
905 : : {
906 : : // first test for equal text content
907 [ + - ]: 3176 : sal_uInt16 nParCount = pObj1->GetParagraphCount();
908 [ + - ][ + + ]: 3176 : if ( nParCount != pObj2->GetParagraphCount() )
909 : 2 : return false;
910 [ + + ]: 4977 : for (sal_uInt16 nPar=0; nPar<nParCount; nPar++)
911 [ + - ][ + - ]: 3174 : if ( pObj1->GetText(nPar) != pObj2->GetText(nPar) )
[ + - ][ + - ]
[ + - ][ + + ]
912 : 1371 : return false;
913 : :
914 [ + - ]: 1803 : SvMemoryStream aStream1;
915 [ + - ]: 1803 : SvMemoryStream aStream2;
916 [ + - ]: 1803 : pObj1->Store( aStream1 );
917 [ + - ]: 1803 : pObj2->Store( aStream2 );
918 : 1803 : sal_uLong nSize = aStream1.Tell();
919 [ + + ]: 1803 : if ( aStream2.Tell() == nSize )
920 [ + - ][ + - ]: 1689 : if ( !memcmp( aStream1.GetData(), aStream2.GetData(), (sal_uInt16) nSize ) )
[ + + ]
921 [ + - ][ + + ]: 3176 : return sal_True;
[ + - ][ + + ]
922 : : }
923 : :
924 : 7976 : return false;
925 : : }
926 : :
927 : 0 : void ScGlobal::OpenURL( const String& rURL, const String& rTarget )
928 : : {
929 : : // OpenURL wird immer ueber irgendwelche Umwege durch Mausklicks im GridWindow
930 : : // aufgerufen, darum stimmen pScActiveViewShell und nScClickMouseModifier.
931 : :
932 [ # # ]: 0 : SfxStringItem aUrl( SID_FILE_NAME, rURL );
933 [ # # ]: 0 : SfxStringItem aTarget( SID_TARGETNAME, rTarget );
934 : :
935 [ # # ]: 0 : if ( nScClickMouseModifier & KEY_MOD1 ) // control-click -> into new window
936 [ # # ][ # # ]: 0 : aTarget.SetValue(rtl::OUString("_blank"));
[ # # ]
937 : :
938 : 0 : SfxViewFrame* pFrame = NULL;
939 [ # # ]: 0 : String aReferName;
940 [ # # ]: 0 : if ( pScActiveViewShell )
941 : : {
942 : 0 : pFrame = pScActiveViewShell->GetViewFrame();
943 [ # # ]: 0 : SfxMedium* pMed = pFrame->GetObjectShell()->GetMedium();
944 [ # # ]: 0 : if (pMed)
945 [ # # ][ # # ]: 0 : aReferName = pMed->GetName();
946 : : }
947 : :
948 [ # # ]: 0 : SfxFrameItem aFrm( SID_DOCFRAME, pFrame );
949 [ # # ]: 0 : SfxStringItem aReferer( SID_REFERER, aReferName );
950 : :
951 [ # # ]: 0 : SfxBoolItem aNewView( SID_OPEN_NEW_VIEW, false );
952 [ # # ]: 0 : SfxBoolItem aBrowsing( SID_BROWSE, sal_True );
953 : :
954 : : // kein SID_SILENT mehr
955 : :
956 [ # # ]: 0 : SfxViewFrame* pViewFrm = SfxViewFrame::Current();
957 [ # # ]: 0 : if (pViewFrm)
958 : : pViewFrm->GetDispatcher()->Execute( SID_OPENDOC,
959 : : SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD,
960 : : &aUrl, &aTarget,
961 : : &aFrm, &aReferer,
962 : : &aNewView, &aBrowsing,
963 [ # # ][ # # ]: 0 : 0L );
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
964 : 0 : }
965 : :
966 : : //------------------------------------------------------------------------
967 : :
968 : 1495 : sal_Bool ScGlobal::IsSystemRTL()
969 : : {
970 : 1495 : return MsLangId::isRightToLeft( Application::GetSettings().GetLanguage() );
971 : : }
972 : :
973 : 1844334 : sal_uInt8 ScGlobal::GetDefaultScriptType()
974 : : {
975 : : // Used when text contains only WEAK characters.
976 : : // Script type of office language is used then (same as GetEditDefaultLanguage,
977 : : // to get consistent behavior of text in simple cells and EditEngine,
978 : : // also same as GetAppLanguage() in Writer)
979 : :
980 : 1844334 : return (sal_uInt8) SvtLanguageOptions::GetScriptTypeOfLanguage( Application::GetSettings().GetLanguage() );
981 : : }
982 : :
983 : 7149 : LanguageType ScGlobal::GetEditDefaultLanguage()
984 : : {
985 : : // used for EditEngine::SetDefaultLanguage
986 : :
987 : 7149 : return Application::GetSettings().GetLanguage();
988 : : }
989 : :
990 : 0 : sal_uInt16 ScGlobal::GetScriptedWhichID( sal_uInt8 nScriptType, sal_uInt16 nWhich )
991 : : {
992 [ # # ]: 0 : switch ( nScriptType )
993 : : {
994 : : case SCRIPTTYPE_LATIN:
995 : : case SCRIPTTYPE_ASIAN:
996 : : case SCRIPTTYPE_COMPLEX:
997 : 0 : break; // take exact matches
998 : : default: // prefer one, first COMPLEX, then ASIAN
999 [ # # ]: 0 : if ( nScriptType & SCRIPTTYPE_COMPLEX )
1000 : 0 : nScriptType = SCRIPTTYPE_COMPLEX;
1001 [ # # ]: 0 : else if ( nScriptType & SCRIPTTYPE_ASIAN )
1002 : 0 : nScriptType = SCRIPTTYPE_ASIAN;
1003 : : }
1004 [ # # # ]: 0 : switch ( nScriptType )
1005 : : {
1006 : : case SCRIPTTYPE_COMPLEX:
1007 : : {
1008 [ # # # # : 0 : switch ( nWhich )
# ]
1009 : : {
1010 : : case ATTR_FONT:
1011 : : case ATTR_CJK_FONT:
1012 : 0 : nWhich = ATTR_CTL_FONT;
1013 : 0 : break;
1014 : : case ATTR_FONT_HEIGHT:
1015 : : case ATTR_CJK_FONT_HEIGHT:
1016 : 0 : nWhich = ATTR_CTL_FONT_HEIGHT;
1017 : 0 : break;
1018 : : case ATTR_FONT_WEIGHT:
1019 : : case ATTR_CJK_FONT_WEIGHT:
1020 : 0 : nWhich = ATTR_CTL_FONT_WEIGHT;
1021 : 0 : break;
1022 : : case ATTR_FONT_POSTURE:
1023 : : case ATTR_CJK_FONT_POSTURE:
1024 : 0 : nWhich = ATTR_CTL_FONT_POSTURE;
1025 : 0 : break;
1026 : : }
1027 : : }
1028 : 0 : break;
1029 : : case SCRIPTTYPE_ASIAN:
1030 : : {
1031 [ # # # # : 0 : switch ( nWhich )
# ]
1032 : : {
1033 : : case ATTR_FONT:
1034 : : case ATTR_CTL_FONT:
1035 : 0 : nWhich = ATTR_CJK_FONT;
1036 : 0 : break;
1037 : : case ATTR_FONT_HEIGHT:
1038 : : case ATTR_CTL_FONT_HEIGHT:
1039 : 0 : nWhich = ATTR_CJK_FONT_HEIGHT;
1040 : 0 : break;
1041 : : case ATTR_FONT_WEIGHT:
1042 : : case ATTR_CTL_FONT_WEIGHT:
1043 : 0 : nWhich = ATTR_CJK_FONT_WEIGHT;
1044 : 0 : break;
1045 : : case ATTR_FONT_POSTURE:
1046 : : case ATTR_CTL_FONT_POSTURE:
1047 : 0 : nWhich = ATTR_CJK_FONT_POSTURE;
1048 : 0 : break;
1049 : : }
1050 : : }
1051 : 0 : break;
1052 : : default:
1053 : : {
1054 [ # # # # : 0 : switch ( nWhich )
# ]
1055 : : {
1056 : : case ATTR_CTL_FONT:
1057 : : case ATTR_CJK_FONT:
1058 : 0 : nWhich = ATTR_FONT;
1059 : 0 : break;
1060 : : case ATTR_CTL_FONT_HEIGHT:
1061 : : case ATTR_CJK_FONT_HEIGHT:
1062 : 0 : nWhich = ATTR_FONT_HEIGHT;
1063 : 0 : break;
1064 : : case ATTR_CTL_FONT_WEIGHT:
1065 : : case ATTR_CJK_FONT_WEIGHT:
1066 : 0 : nWhich = ATTR_FONT_WEIGHT;
1067 : 0 : break;
1068 : : case ATTR_CTL_FONT_POSTURE:
1069 : : case ATTR_CJK_FONT_POSTURE:
1070 : 0 : nWhich = ATTR_FONT_POSTURE;
1071 : 0 : break;
1072 : : }
1073 : : }
1074 : : }
1075 : 0 : return nWhich;
1076 : : }
1077 : :
1078 : : //------------------------------------------------------------------------
1079 : :
1080 : 507 : void ScGlobal::AddLanguage( SfxItemSet& rSet, SvNumberFormatter& rFormatter )
1081 : : {
1082 : : OSL_ENSURE( rSet.GetItemState( ATTR_LANGUAGE_FORMAT, false ) == SFX_ITEM_DEFAULT,
1083 : : "ScGlobal::AddLanguage - language already added");
1084 : :
1085 : : const SfxPoolItem* pHardItem;
1086 [ + - ][ + - ]: 507 : if ( rSet.GetItemState( ATTR_VALUE_FORMAT, false, &pHardItem ) == SFX_ITEM_SET )
1087 : : {
1088 : : const SvNumberformat* pHardFormat = rFormatter.GetEntry(
1089 [ + - ]: 507 : ((const SfxUInt32Item*)pHardItem)->GetValue() );
1090 : :
1091 : 507 : sal_uLong nParentFmt = 0; // pool default
1092 : 507 : const SfxItemSet* pParent = rSet.GetParent();
1093 [ - + ]: 507 : if ( pParent )
1094 [ # # ]: 0 : nParentFmt = ((const SfxUInt32Item&)pParent->Get( ATTR_VALUE_FORMAT )).GetValue();
1095 [ + - ]: 507 : const SvNumberformat* pParFormat = rFormatter.GetEntry( nParentFmt );
1096 : :
1097 [ + - ]: 1014 : if ( pHardFormat && pParFormat &&
[ + - - + ]
[ - + ]
1098 : 507 : (pHardFormat->GetLanguage() != pParFormat->GetLanguage()) )
1099 [ # # ][ # # ]: 0 : rSet.Put( SvxLanguageItem( pHardFormat->GetLanguage(), ATTR_LANGUAGE_FORMAT ) );
[ # # ]
1100 : : }
1101 : 507 : }
1102 : :
1103 : :
1104 : : //--------------------------------------------------------------------
1105 : :
1106 : :
1107 : :
1108 : : //------------------------------------------------------------------------
1109 : :
1110 : 4764 : utl::TransliterationWrapper* ScGlobal::GetpTransliteration()
1111 : : {
1112 [ + + ]: 4764 : if ( !pTransliteration )
1113 : : {
1114 : 34 : const LanguageType eOfficeLanguage = Application::GetSettings().GetLanguage();
1115 : : pTransliteration = new ::utl::TransliterationWrapper(
1116 [ + - ][ + - ]: 34 : ::comphelper::getProcessServiceFactory(), SC_TRANSLITERATION_IGNORECASE );
1117 : 34 : pTransliteration->loadModuleIfNeeded( eOfficeLanguage );
1118 : : }
1119 : : OSL_ENSURE(
1120 : : pTransliteration,
1121 : : "ScGlobal::GetpTransliteration() called before ScGlobal::Init()");
1122 : 4764 : return pTransliteration;
1123 : : }
1124 : :
1125 : 548 : const LocaleDataWrapper* ScGlobal::GetpLocaleData()
1126 : : {
1127 : : OSL_ENSURE(
1128 : : pLocaleData,
1129 : : "ScGlobal::GetpLocaleData() called before ScGlobal::Init()");
1130 : 548 : return pLocaleData;
1131 : : }
1132 : 78 : CalendarWrapper* ScGlobal::GetCalendar()
1133 : : {
1134 [ + + ]: 78 : if ( !pCalendar )
1135 : : {
1136 [ + - ][ + - ]: 3 : pCalendar = new CalendarWrapper( ::comphelper::getProcessServiceFactory() );
1137 : 3 : pCalendar->loadDefaultCalendar( *GetLocale() );
1138 : : }
1139 : 78 : return pCalendar;
1140 : : }
1141 : 2697 : CollatorWrapper* ScGlobal::GetCollator()
1142 : : {
1143 [ + + ]: 2697 : if ( !pCollator )
1144 : : {
1145 [ + - ][ + - ]: 15 : pCollator = new CollatorWrapper( ::comphelper::getProcessServiceFactory() );
1146 : 15 : pCollator->loadDefaultCollator( *GetLocale(), SC_COLLATOR_IGNORES );
1147 : : }
1148 : 2697 : return pCollator;
1149 : : }
1150 : 8523 : CollatorWrapper* ScGlobal::GetCaseCollator()
1151 : : {
1152 [ + + ]: 8523 : if ( !pCaseCollator )
1153 : : {
1154 [ + - ][ + - ]: 6 : pCaseCollator = new CollatorWrapper( ::comphelper::getProcessServiceFactory() );
1155 : 6 : pCaseCollator->loadDefaultCollator( *GetLocale(), 0 );
1156 : : }
1157 : 8523 : return pCaseCollator;
1158 : : }
1159 : 0 : ::utl::TransliterationWrapper* ScGlobal::GetCaseTransliteration()
1160 : : {
1161 [ # # ]: 0 : if ( !pCaseTransliteration )
1162 : : {
1163 : 0 : const LanguageType eOfficeLanguage = Application::GetSettings().GetLanguage();
1164 [ # # ][ # # ]: 0 : pCaseTransliteration = new ::utl::TransliterationWrapper(::comphelper::getProcessServiceFactory(), SC_TRANSLITERATION_CASESENSE );
1165 : 0 : pCaseTransliteration->loadModuleIfNeeded( eOfficeLanguage );
1166 : : }
1167 : 0 : return pCaseTransliteration;
1168 : : }
1169 : 0 : IntlWrapper* ScGlobal::GetScIntlWrapper()
1170 : : {
1171 [ # # ]: 0 : if ( !pScIntlWrapper )
1172 : : {
1173 [ # # ][ # # ]: 0 : pScIntlWrapper = new IntlWrapper( ::comphelper::getProcessServiceFactory(), *GetLocale() );
[ # # ]
1174 : : }
1175 : 0 : return pScIntlWrapper;
1176 : : }
1177 : 196 : ::com::sun::star::lang::Locale* ScGlobal::GetLocale()
1178 : : {
1179 [ + + ]: 196 : if ( !pLocale )
1180 : : {
1181 : 51 : pLocale = new ::com::sun::star::lang::Locale( Application::GetSettings().GetLocale());
1182 : : }
1183 : 196 : return pLocale;
1184 [ + - ][ + - ]: 153 : }
1185 : :
1186 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|