LCOV - code coverage report
Current view: top level - usr/local/src/libreoffice/sc/source/core/data - global.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 342 548 62.4 %
Date: 2013-07-09 Functions: 44 58 75.9 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10