LCOV - code coverage report
Current view: top level - libreoffice/sc/source/ui/docshell - docsh6.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 42 223 18.8 %
Date: 2012-12-27 Functions: 7 17 41.2 %
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 "scitems.hxx"
      21             : 
      22             : #include <svx/pageitem.hxx>
      23             : #include <sfx2/linkmgr.hxx>
      24             : 
      25             : #include "docsh.hxx"
      26             : 
      27             : #include "stlsheet.hxx"
      28             : #include "stlpool.hxx"
      29             : #include "global.hxx"
      30             : #include "viewdata.hxx"
      31             : #include "tabvwsh.hxx"
      32             : #include "tablink.hxx"
      33             : #include "globstr.hrc"
      34             : #include "scmod.hxx"
      35             : #include "compiler.hxx"
      36             : #include "interpre.hxx"
      37             : #include "calcconfig.hxx"
      38             : 
      39             : #include <vcl/msgbox.hxx>
      40             : 
      41             : #include <com/sun/star/beans/XPropertySet.hpp>
      42             : #include <com/sun/star/container/XNameAccess.hpp>
      43             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      44             : #include <com/sun/star/util/XChangesBatch.hpp>
      45             : 
      46             : using ::com::sun::star::beans::XPropertySet;
      47             : using ::com::sun::star::lang::XMultiServiceFactory;
      48             : using ::com::sun::star::container::XNameAccess;
      49             : using ::com::sun::star::util::XChangesBatch;
      50             : using ::com::sun::star::uno::Any;
      51             : using ::com::sun::star::uno::Exception;
      52             : using ::com::sun::star::uno::Reference;
      53             : using ::com::sun::star::uno::Sequence;
      54             : using ::com::sun::star::uno::UNO_QUERY_THROW;
      55             : using ::rtl::OUString;
      56             : 
      57             : namespace {
      58             : 
      59             : struct ScStylePair
      60             : {
      61             :     SfxStyleSheetBase *pSource;
      62             :     SfxStyleSheetBase *pDest;
      63             : };
      64             : 
      65             : }
      66             : 
      67             : // STATIC DATA -----------------------------------------------------------
      68             : 
      69             : //----------------------------------------------------------------------
      70             : 
      71             : //
      72             : //  Ole
      73             : //
      74             : 
      75          50 : void ScDocShell::SetVisArea( const Rectangle & rVisArea )
      76             : {
      77             :     //  with the SnapVisArea call in SetVisAreaOrSize, it's safe to always
      78             :     //  use both the size and position of the VisArea
      79          50 :     SetVisAreaOrSize( rVisArea, sal_True );
      80          50 : }
      81             : 
      82           0 : static void lcl_SetTopRight( Rectangle& rRect, const Point& rPos )
      83             : {
      84           0 :     Size aSize = rRect.GetSize();
      85           0 :     rRect.Right() = rPos.X();
      86           0 :     rRect.Left() = rPos.X() - aSize.Width() + 1;
      87           0 :     rRect.Top() = rPos.Y();
      88           0 :     rRect.Bottom() = rPos.Y() + aSize.Height() - 1;
      89           0 : }
      90             : 
      91          99 : void ScDocShell::SetVisAreaOrSize( const Rectangle& rVisArea, sal_Bool bModifyStart )
      92             : {
      93          99 :     sal_Bool bNegativePage = aDocument.IsNegativePage( aDocument.GetVisibleTab() );
      94             : 
      95          99 :     Rectangle aArea = rVisArea;
      96          99 :     if (bModifyStart)
      97             :     {
      98             :         // when loading, don't check for negative values, because the sheet orientation
      99             :         // might be set later
     100          99 :         if ( !aDocument.IsImportingXML() )
     101             :         {
     102          77 :             if ( ( bNegativePage ? (aArea.Right() > 0) : (aArea.Left() < 0) ) || aArea.Top() < 0 )
     103             :             {
     104             :                 //  VisArea start position can't be negative.
     105             :                 //  Move the VisArea, otherwise only the upper left position would
     106             :                 //  be changed in SnapVisArea, and the size would be wrong.
     107             : 
     108           0 :                 Point aNewPos( 0, Max( aArea.Top(), (long) 0 ) );
     109           0 :                 if ( bNegativePage )
     110             :                 {
     111           0 :                     aNewPos.X() = Min( aArea.Right(), (long) 0 );
     112           0 :                     lcl_SetTopRight( aArea, aNewPos );
     113             :                 }
     114             :                 else
     115             :                 {
     116           0 :                     aNewPos.X() = Max( aArea.Left(), (long) 0 );
     117           0 :                     aArea.SetPos( aNewPos );
     118             :                 }
     119             :             }
     120             :         }
     121             :     }
     122             :     else
     123             :     {
     124           0 :         Rectangle aOldVisArea = SfxObjectShell::GetVisArea();
     125           0 :         if ( bNegativePage )
     126           0 :             lcl_SetTopRight( aArea, aOldVisArea.TopRight() );
     127             :         else
     128           0 :             aArea.SetPos( aOldVisArea.TopLeft() );
     129             :     }
     130             : 
     131             :     //      hier Position anpassen!
     132             : 
     133             :     //  when loading an ole object, the VisArea is set from the document's
     134             :     //  view settings and must be used as-is (document content may not be complete yet).
     135          99 :     if ( !aDocument.IsImportingXML() )
     136          77 :         aDocument.SnapVisArea( aArea );
     137             : 
     138             :     //TODO/LATER: it's unclear which IPEnv is used here
     139             :     /*
     140             :     SvInPlaceEnvironment* pEnv = GetIPEnv();
     141             :     if (pEnv)
     142             :     {
     143             :         Window* pWin = pEnv->GetEditWin();
     144             :         pEnv->MakeScale( aArea.GetSize(), MAP_100TH_MM,
     145             :                             pWin->LogicToPixel( aArea.GetSize() ) );
     146             :     } */
     147             : 
     148             :     //TODO/LATER: formerly in SvInplaceObject
     149          99 :     SfxObjectShell::SetVisArea( aArea );
     150             : 
     151          99 :     if (bIsInplace)                     // Zoom in der InPlace View einstellen
     152             :     {
     153          96 :         ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell();
     154          96 :         if (pViewSh)
     155             :         {
     156           0 :             if (pViewSh->GetViewData()->GetDocShell() == this)
     157           0 :                 pViewSh->UpdateOleZoom();
     158             :         }
     159             :     }
     160             : 
     161          99 :     if (aDocument.IsEmbedded())
     162             :     {
     163           0 :         ScRange aOld;
     164           0 :         aDocument.GetEmbedded( aOld);
     165           0 :         aDocument.SetEmbedded( aArea );
     166           0 :         ScRange aNew;
     167           0 :         aDocument.GetEmbedded( aNew);
     168           0 :         if (aOld != aNew)
     169           0 :             PostPaint(0,0,0,MAXCOL,MAXROW,MAXTAB,PAINT_GRID);
     170             : 
     171             :         //TODO/LATER: currently not implemented
     172             :         //ViewChanged( ASPECT_CONTENT );          // auch im Container anzeigen
     173             :     }
     174          99 : }
     175             : 
     176           0 : sal_Bool ScDocShell::IsOle()
     177             : {
     178           0 :     return (GetCreateMode() == SFX_CREATE_MODE_EMBEDDED);
     179             : }
     180             : 
     181           0 : void ScDocShell::UpdateOle( const ScViewData* pViewData, sal_Bool bSnapSize )
     182             : {
     183             :     //  wenn's gar nicht Ole ist, kann man sich die Berechnungen sparen
     184             :     //  (VisArea wird dann beim Save wieder zurueckgesetzt)
     185             : 
     186           0 :     if (GetCreateMode() == SFX_CREATE_MODE_STANDARD)
     187           0 :         return;
     188             : 
     189             :     OSL_ENSURE(pViewData,"pViewData==0 bei ScDocShell::UpdateOle");
     190             : 
     191           0 :     Rectangle aOldArea = SfxObjectShell::GetVisArea();
     192           0 :     Rectangle aNewArea = aOldArea;
     193             : 
     194           0 :     sal_Bool bEmbedded = aDocument.IsEmbedded();
     195           0 :     if (bEmbedded)
     196           0 :         aNewArea = aDocument.GetEmbeddedRect();
     197             :     else
     198             :     {
     199           0 :         SCTAB nTab = pViewData->GetTabNo();
     200           0 :         if ( nTab != aDocument.GetVisibleTab() )
     201           0 :             aDocument.SetVisibleTab( nTab );
     202             : 
     203           0 :         sal_Bool bNegativePage = aDocument.IsNegativePage( nTab );
     204           0 :         SCCOL nX = pViewData->GetPosX(SC_SPLIT_LEFT);
     205           0 :         SCROW nY = pViewData->GetPosY(SC_SPLIT_BOTTOM);
     206           0 :         Rectangle aMMRect = aDocument.GetMMRect( nX,nY, nX,nY, nTab );
     207           0 :         if (bNegativePage)
     208           0 :             lcl_SetTopRight( aNewArea, aMMRect.TopRight() );
     209             :         else
     210           0 :             aNewArea.SetPos( aMMRect.TopLeft() );
     211           0 :         if (bSnapSize)
     212           0 :             aDocument.SnapVisArea(aNewArea);            // uses the new VisibleTab
     213             :     }
     214             : 
     215           0 :     if (aNewArea != aOldArea)
     216           0 :         SetVisAreaOrSize( aNewArea, true ); // hier muss auch der Start angepasst werden
     217             : }
     218             : 
     219             : //
     220             : //  Style-Krempel fuer Organizer etc.
     221             : //
     222             : 
     223           0 : SfxStyleSheetBasePool* ScDocShell::GetStyleSheetPool()
     224             : {
     225           0 :     return (SfxStyleSheetBasePool*)aDocument.GetStyleSheetPool();
     226             : }
     227             : 
     228             : 
     229             : //  nach dem Laden von Vorlagen aus einem anderen Dokment (LoadStyles, Insert)
     230             : //  muessen die SetItems (ATTR_PAGE_HEADERSET, ATTR_PAGE_FOOTERSET) auf den richtigen
     231             : //  Pool umgesetzt werden, bevor der Quell-Pool geloescht wird.
     232             : 
     233           0 : static void lcl_AdjustPool( SfxStyleSheetBasePool* pStylePool )
     234             : {
     235           0 :     pStylePool->SetSearchMask(SFX_STYLE_FAMILY_PAGE, SFXSTYLEBIT_ALL);
     236           0 :     SfxStyleSheetBase *pStyle = pStylePool->First();
     237           0 :     while ( pStyle )
     238             :     {
     239           0 :         SfxItemSet& rStyleSet = pStyle->GetItemSet();
     240             : 
     241             :         const SfxPoolItem* pItem;
     242           0 :         if (rStyleSet.GetItemState(ATTR_PAGE_HEADERSET,false,&pItem) == SFX_ITEM_SET)
     243             :         {
     244           0 :             SfxItemSet& rSrcSet = ((SvxSetItem*)pItem)->GetItemSet();
     245           0 :             SfxItemSet* pDestSet = new SfxItemSet(*rStyleSet.GetPool(),rSrcSet.GetRanges());
     246           0 :             pDestSet->Put(rSrcSet);
     247           0 :             rStyleSet.Put(SvxSetItem(ATTR_PAGE_HEADERSET,pDestSet));
     248             :         }
     249           0 :         if (rStyleSet.GetItemState(ATTR_PAGE_FOOTERSET,false,&pItem) == SFX_ITEM_SET)
     250             :         {
     251           0 :             SfxItemSet& rSrcSet = ((SvxSetItem*)pItem)->GetItemSet();
     252           0 :             SfxItemSet* pDestSet = new SfxItemSet(*rStyleSet.GetPool(),rSrcSet.GetRanges());
     253           0 :             pDestSet->Put(rSrcSet);
     254           0 :             rStyleSet.Put(SvxSetItem(ATTR_PAGE_FOOTERSET,pDestSet));
     255             :         }
     256             : 
     257           0 :         pStyle = pStylePool->Next();
     258             :     }
     259           0 : }
     260             : 
     261           0 : void ScDocShell::LoadStyles( SfxObjectShell &rSource )
     262             : {
     263           0 :     aDocument.StylesToNames();
     264             : 
     265           0 :     SfxObjectShell::LoadStyles(rSource);
     266           0 :     lcl_AdjustPool( GetStyleSheetPool() );      // SetItems anpassen
     267             : 
     268           0 :     aDocument.UpdStlShtPtrsFrmNms();
     269             : 
     270           0 :     UpdateAllRowHeights();
     271             : 
     272             :         //  Paint
     273             : 
     274           0 :     PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID | PAINT_LEFT );
     275           0 : }
     276             : 
     277           0 : void ScDocShell::LoadStylesArgs( ScDocShell& rSource, bool bReplace, bool bCellStyles, bool bPageStyles )
     278             : {
     279             :     //  similar to LoadStyles, but with selectable behavior for XStyleLoader::loadStylesFromURL call
     280             : 
     281           0 :     if ( !bCellStyles && !bPageStyles )     // nothing to do
     282             :         return;
     283             : 
     284           0 :     ScStyleSheetPool* pSourcePool = rSource.GetDocument()->GetStyleSheetPool();
     285           0 :     ScStyleSheetPool* pDestPool = aDocument.GetStyleSheetPool();
     286             : 
     287             :     SfxStyleFamily eFamily = bCellStyles ?
     288             :             ( bPageStyles ? SFX_STYLE_FAMILY_ALL : SFX_STYLE_FAMILY_PARA ) :
     289           0 :             SFX_STYLE_FAMILY_PAGE;
     290           0 :     SfxStyleSheetIterator aIter( pSourcePool, eFamily );
     291           0 :     sal_uInt16 nSourceCount = aIter.Count();
     292           0 :     if ( nSourceCount == 0 )
     293             :         return;                             // no source styles
     294             : 
     295           0 :     ScStylePair* pStyles = new ScStylePair[ nSourceCount ];
     296           0 :     sal_uInt16 nFound = 0;
     297             : 
     298             :     //  first create all new styles
     299             : 
     300           0 :     SfxStyleSheetBase* pSourceStyle = aIter.First();
     301           0 :     while (pSourceStyle)
     302             :     {
     303           0 :         String aName = pSourceStyle->GetName();
     304           0 :         SfxStyleSheetBase* pDestStyle = pDestPool->Find( pSourceStyle->GetName(), pSourceStyle->GetFamily() );
     305           0 :         if ( pDestStyle )
     306             :         {
     307             :             // touch existing styles only if replace flag is set
     308           0 :             if ( bReplace )
     309             :             {
     310           0 :                 pStyles[nFound].pSource = pSourceStyle;
     311           0 :                 pStyles[nFound].pDest = pDestStyle;
     312           0 :                 ++nFound;
     313             :             }
     314             :         }
     315             :         else
     316             :         {
     317           0 :             pStyles[nFound].pSource = pSourceStyle;
     318           0 :             pStyles[nFound].pDest = &pDestPool->Make( aName, pSourceStyle->GetFamily(), pSourceStyle->GetMask() );
     319           0 :             ++nFound;
     320             :         }
     321             : 
     322           0 :         pSourceStyle = aIter.Next();
     323           0 :     }
     324             : 
     325             :     //  then copy contents (after inserting all styles, for parent etc.)
     326             : 
     327           0 :     for ( sal_uInt16 i = 0; i < nFound; ++i )
     328             :     {
     329           0 :         pStyles[i].pDest->GetItemSet().PutExtended(
     330           0 :             pStyles[i].pSource->GetItemSet(), SFX_ITEM_DONTCARE, SFX_ITEM_DEFAULT);
     331           0 :         if(pStyles[i].pSource->HasParentSupport())
     332           0 :             pStyles[i].pDest->SetParent(pStyles[i].pSource->GetParent());
     333             :         // follow is never used
     334             :     }
     335             : 
     336           0 :     lcl_AdjustPool( GetStyleSheetPool() );      // adjust SetItems
     337           0 :     UpdateAllRowHeights();
     338           0 :     PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID | PAINT_LEFT );      // Paint
     339             : 
     340           0 :     delete[] pStyles;
     341             : }
     342             : 
     343             : 
     344           0 : sal_Bool ScDocShell::Insert( SfxObjectShell &rSource,
     345             :                                 sal_uInt16 nSourceIdx1, sal_uInt16 nSourceIdx2, sal_uInt16 nSourceIdx3,
     346             :                                 sal_uInt16 &nIdx1, sal_uInt16 &nIdx2, sal_uInt16 &nIdx3, sal_uInt16 &rIdxDeleted )
     347             : {
     348             :     sal_Bool bRet = SfxObjectShell::Insert( rSource, nSourceIdx1, nSourceIdx2, nSourceIdx3,
     349           0 :                                             nIdx1, nIdx2, nIdx3, rIdxDeleted );
     350           0 :     if (bRet)
     351           0 :         lcl_AdjustPool( GetStyleSheetPool() );      // SetItems anpassen
     352             : 
     353           0 :     return bRet;
     354             : }
     355             : 
     356         108 : void ScDocShell::ReconnectDdeLink(SfxObjectShell& rServer)
     357             : {
     358         108 :     ::sfx2::LinkManager* pLinkManager = aDocument.GetLinkManager();
     359         108 :     if (!pLinkManager)
     360         108 :         return;
     361             : 
     362         108 :     pLinkManager->ReconnectDdeLink(rServer);
     363             : }
     364             : 
     365          33 : void ScDocShell::UpdateLinks()
     366             : {
     367             :     typedef boost::unordered_set<rtl::OUString, rtl::OUStringHash> StrSetType;
     368             : 
     369          33 :     sfx2::LinkManager* pLinkManager = aDocument.GetLinkManager();
     370          33 :     StrSetType aNames;
     371             : 
     372             :     // nicht mehr benutzte Links raus
     373             : 
     374          33 :     sal_uInt16 nCount = pLinkManager->GetLinks().size();
     375          66 :     for (sal_uInt16 k=nCount; k>0; )
     376             :     {
     377           0 :         --k;
     378           0 :         ::sfx2::SvBaseLink* pBase = *pLinkManager->GetLinks()[k];
     379           0 :         if (pBase->ISA(ScTableLink))
     380             :         {
     381           0 :             ScTableLink* pTabLink = (ScTableLink*)pBase;
     382           0 :             if (pTabLink->IsUsed())
     383           0 :                 aNames.insert(pTabLink->GetFileName());
     384             :             else        // nicht mehr benutzt -> loeschen
     385             :             {
     386           0 :                 pTabLink->SetAddUndo(sal_True);
     387           0 :                 pLinkManager->Remove(k);
     388             :             }
     389             :         }
     390             :     }
     391             : 
     392             :     // neue Links eintragen
     393             : 
     394          33 :     SCTAB nTabCount = aDocument.GetTableCount();
     395         108 :     for (SCTAB i = 0; i < nTabCount; ++i)
     396             :     {
     397          75 :         if (!aDocument.IsLinked(i))
     398          75 :             continue;
     399             : 
     400           0 :         rtl::OUString aDocName = aDocument.GetLinkDoc(i);
     401           0 :         rtl::OUString aFltName = aDocument.GetLinkFlt(i);
     402           0 :         rtl::OUString aOptions = aDocument.GetLinkOpt(i);
     403           0 :         sal_uLong nRefresh  = aDocument.GetLinkRefreshDelay(i);
     404           0 :         bool bThere = false;
     405           0 :         for (SCTAB j = 0; j < i && !bThere; ++j)                // im Dokument mehrfach?
     406             :         {
     407           0 :             if (aDocument.IsLinked(j)
     408           0 :                     && aDocument.GetLinkDoc(j) == aDocName
     409           0 :                     && aDocument.GetLinkFlt(j) == aFltName
     410           0 :                     && aDocument.GetLinkOpt(j) == aOptions)
     411             :                     // Ignore refresh delay in compare, it should be the
     412             :                     // same for identical links and we don't want dupes
     413             :                     // if it ain't.
     414           0 :                 bThere = true;
     415             :         }
     416             : 
     417           0 :         if (!bThere)                                        // schon als Filter eingetragen?
     418             :         {
     419           0 :             if (!aNames.insert(aDocName).second)
     420           0 :                 bThere = true;
     421             :         }
     422             : 
     423           0 :         if (!bThere)
     424             :         {
     425           0 :             ScTableLink* pLink = new ScTableLink( this, aDocName, aFltName, aOptions, nRefresh );
     426           0 :             pLink->SetInCreate(true);
     427           0 :             pLinkManager->InsertFileLink(*pLink, OBJECT_CLIENT_FILE, aDocName, &aFltName);
     428           0 :             pLink->Update();
     429           0 :             pLink->SetInCreate(false);
     430             :         }
     431          33 :     }
     432          33 : }
     433             : 
     434           0 : sal_Bool ScDocShell::ReloadTabLinks()
     435             : {
     436           0 :     sfx2::LinkManager* pLinkManager = aDocument.GetLinkManager();
     437             : 
     438           0 :     sal_Bool bAny = false;
     439           0 :     sal_uInt16 nCount = pLinkManager->GetLinks().size();
     440           0 :     for (sal_uInt16 i=0; i<nCount; i++ )
     441             :     {
     442           0 :         ::sfx2::SvBaseLink* pBase = *pLinkManager->GetLinks()[i];
     443           0 :         if (pBase->ISA(ScTableLink))
     444             :         {
     445           0 :             ScTableLink* pTabLink = (ScTableLink*)pBase;
     446             : //                      pTabLink->SetAddUndo(sal_False);             //! Undo's zusammenfassen
     447             : 
     448             :                         // Painting only after Update() makes no sense:
     449             :                         // ScTableLink::Refresh() will post a Paint only is bDoPaint is true
     450             :             // pTabLink->SetPaint(false);          //  Paint nur einmal am Ende
     451           0 :             pTabLink->Update();
     452             :             //pTabLink->SetPaint(true);
     453             : //                      pTabLink->SetAddUndo(sal_True);
     454           0 :             bAny = true;
     455             :         }
     456             :     }
     457             : 
     458           0 :     if ( bAny )
     459             :     {
     460             :         //  Paint nur einmal
     461             :         PostPaint( ScRange(0,0,0,MAXCOL,MAXROW,MAXTAB),
     462           0 :                                     PAINT_GRID | PAINT_TOP | PAINT_LEFT );
     463             : 
     464           0 :         SetDocumentModified();
     465             :     }
     466             : 
     467           0 :     return sal_True;        //! Fehler erkennen
     468             : }
     469             : 
     470          71 : void ScDocShell::SetFormulaOptions(const ScFormulaOptions& rOpt )
     471             : {
     472          71 :     aDocument.SetGrammar( rOpt.GetFormulaSyntax() );
     473             : 
     474             :     // This needs to be called first since it may re-initialize the entire
     475             :     // opcode map.
     476          71 :     if (rOpt.GetUseEnglishFuncName())
     477             :     {
     478             :         // switch native symbols to English.
     479           0 :         ScCompiler aComp(NULL, ScAddress());
     480           0 :         ScCompiler::OpCodeMapPtr xMap = aComp.GetOpCodeMap(::com::sun::star::sheet::FormulaLanguage::ENGLISH);
     481           0 :         ScCompiler::SetNativeSymbols(xMap);
     482             :     }
     483             :     else
     484             :         // re-initialize native symbols with localized function names.
     485          71 :         ScCompiler::ResetNativeSymbols();
     486             : 
     487             :     // Force re-population of function names for the function wizard, function tip etc.
     488          71 :     ScGlobal::ResetFunctionList();
     489             : 
     490             :     // Update the separators.
     491             :     ScCompiler::UpdateSeparatorsNative(
     492          71 :         rOpt.GetFormulaSepArg(), rOpt.GetFormulaSepArrayCol(), rOpt.GetFormulaSepArrayRow());
     493             : 
     494             :     // Global interpreter settings.
     495          71 :     ScInterpreter::SetGlobalConfig(rOpt.GetCalcConfig());
     496          71 : }
     497             : 
     498           0 : void ScDocShell::CheckConfigOptions()
     499             : {
     500           0 :     if (IsConfigOptionsChecked())
     501             :         // no need to check repeatedly.
     502           0 :         return;
     503             : 
     504           0 :     OUString aDecSep = ScGlobal::GetpLocaleData()->getNumDecimalSep();
     505             : 
     506           0 :     ScModule* pScMod = SC_MOD();
     507           0 :     const ScFormulaOptions& rOpt=pScMod->GetFormulaOptions();
     508           0 :     OUString aSepArg = rOpt.GetFormulaSepArg();
     509           0 :     OUString aSepArrRow = rOpt.GetFormulaSepArrayRow();
     510           0 :     OUString aSepArrCol = rOpt.GetFormulaSepArrayCol();
     511             : 
     512           0 :     if (aDecSep == aSepArg || aDecSep == aSepArrRow || aDecSep == aSepArrCol)
     513             :     {
     514             :         // One of arg separators conflicts with the current decimal
     515             :         // separator.  Reset them to default.
     516           0 :         ScFormulaOptions aNew = rOpt;
     517           0 :         aNew.ResetFormulaSeparators();
     518           0 :         SetFormulaOptions(aNew);
     519           0 :         pScMod->SetFormulaOptions(aNew);
     520             : 
     521             :         // Launch a nice warning dialog to let the users know of this change.
     522           0 :         ScTabViewShell* pViewShell = GetBestViewShell();
     523           0 :         if (pViewShell)
     524             :         {
     525           0 :             Window* pParent = pViewShell->GetFrameWin();
     526           0 :             InfoBox aBox(pParent, ScGlobal::GetRscString(STR_OPTIONS_WARN_SEPARATORS));
     527           0 :             aBox.Execute();
     528           0 :         }
     529             : 
     530             :         // For now, this is the only option setting that could launch info
     531             :         // dialog.  But in the future we may want to implement a nicer
     532             :         // dialog to display a list of warnings in case we have several
     533             :         // pieces of information to display.
     534             :     }
     535             : 
     536           0 :     SetConfigOptionsChecked(true);
     537          15 : }
     538             : 
     539             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10