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

Generated by: LCOV version 1.10