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

Generated by: LCOV version 1.10