LCOV - code coverage report
Current view: top level - sc/source/ui/app - scmod.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 304 1162 26.2 %
Date: 2014-11-03 Functions: 48 97 49.5 %
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 <config_features.h>
      21             : 
      22             : #include <com/sun/star/ui/dialogs/XSLTFilterDialog.hpp>
      23             : #include <comphelper/processfactory.hxx>
      24             : 
      25             : #include "scitems.hxx"
      26             : #include <sfx2/app.hxx>
      27             : #include <editeng/eeitem.hxx>
      28             : 
      29             : #include <editeng/flditem.hxx>
      30             : #include <editeng/outliner.hxx>
      31             : #include <basic/sbstar.hxx>
      32             : 
      33             : #include <sfx2/sfxdlg.hxx>
      34             : #include <sfx2/viewfrm.hxx>
      35             : #include <sfx2/objface.hxx>
      36             : 
      37             : #include "IAnyRefDialog.hxx"
      38             : #include "anyrefdg.hxx"
      39             : 
      40             : #include <svtools/ehdl.hxx>
      41             : #include <svtools/accessibilityoptions.hxx>
      42             : #include <svl/ctloptions.hxx>
      43             : #include <unotools/useroptions.hxx>
      44             : #include <vcl/status.hxx>
      45             : #include <sfx2/bindings.hxx>
      46             : #include <sfx2/request.hxx>
      47             : #include <sfx2/printer.hxx>
      48             : #include <editeng/langitem.hxx>
      49             : #include <svtools/colorcfg.hxx>
      50             : 
      51             : #include <svl/whiter.hxx>
      52             : #include <svx/selctrl.hxx>
      53             : #include <svx/insctrl.hxx>
      54             : #include <svx/zoomctrl.hxx>
      55             : #include <svx/modctrl.hxx>
      56             : #include <svx/pszctrl.hxx>
      57             : #include <svx/zoomsliderctrl.hxx>
      58             : #include <vcl/msgbox.hxx>
      59             : #include <svl/inethist.hxx>
      60             : #include <vcl/waitobj.hxx>
      61             : #include <svx/svxerr.hxx>
      62             : #include <tools/diagnose_ex.h>
      63             : 
      64             : #include <editeng/unolingu.hxx>
      65             : #include <unotools/lingucfg.hxx>
      66             : #include <i18nlangtag/mslangid.hxx>
      67             : #include <i18nlangtag/languagetag.hxx>
      68             : #include <com/sun/star/i18n/ScriptType.hpp>
      69             : #include <com/sun/star/linguistic2/XThesaurus.hpp>
      70             : #include <com/sun/star/lang/Locale.hpp>
      71             : 
      72             : #include "scmod.hxx"
      73             : #include "global.hxx"
      74             : #include "viewopti.hxx"
      75             : #include "docoptio.hxx"
      76             : #include "appoptio.hxx"
      77             : #include "defaultsoptions.hxx"
      78             : #include "formulaopt.hxx"
      79             : #include "inputopt.hxx"
      80             : #include "printopt.hxx"
      81             : #include "navicfg.hxx"
      82             : #include "addincfg.hxx"
      83             : #include "tabvwsh.hxx"
      84             : #include "prevwsh.hxx"
      85             : #include "docsh.hxx"
      86             : #include "drwlayer.hxx"
      87             : #include "uiitems.hxx"
      88             : #include "sc.hrc"
      89             : #include "cfgids.hxx"
      90             : #include "inputhdl.hxx"
      91             : #include "inputwin.hxx"
      92             : #include "msgpool.hxx"
      93             : #include "scresid.hxx"
      94             : #include "dwfunctr.hxx"
      95             : #include "formdata.hxx"
      96             : #include "tpprint.hxx"
      97             : #include "tpdefaults.hxx"
      98             : #include "transobj.hxx"
      99             : #include "detfunc.hxx"
     100             : #include "preview.hxx"
     101             : #include "dragdata.hxx"
     102             : #include "clipdata.hxx"
     103             : #include "markdata.hxx"
     104             : 
     105             : #include <svx/xmlsecctrl.hxx>
     106             : 
     107             : #define ScModule
     108             : #include "scslots.hxx"
     109             : 
     110             : #include "scabstdlg.hxx"
     111             : #include <formula/errorcodes.hxx>
     112             : #include "formulagroup.hxx"
     113             : #include <documentlinkmgr.hxx>
     114             : 
     115             : #define SC_IDLE_MIN     150
     116             : #define SC_IDLE_MAX     3000
     117             : #define SC_IDLE_STEP    75
     118             : #define SC_IDLE_COUNT   50
     119             : 
     120             : static sal_uInt16 nIdleCount = 0;
     121             : 
     122       11736 : SFX_IMPL_INTERFACE(ScModule, SfxShell, ScResId(RID_APPTITLE))
     123             : 
     124          76 : void ScModule::InitInterface_Impl()
     125             : {
     126             :     GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_APPLICATION | SFX_VISIBILITY_DESKTOP | SFX_VISIBILITY_STANDARD | SFX_VISIBILITY_CLIENT | SFX_VISIBILITY_VIEWER,
     127          76 :                                             ScResId(RID_OBJECTBAR_APP));
     128             : 
     129          76 :     GetStaticInterface()->RegisterStatusBar(ScResId(SCCFG_STATUSBAR));
     130          76 : }
     131             : 
     132          76 : ScModule::ScModule( SfxObjectFactory* pFact ) :
     133             :     SfxModule( ResMgr::CreateResMgr( "sc" ), false, pFact, NULL ),
     134          76 :     mpDragData(new ScDragData),
     135          76 :     mpClipData(new ScClipData),
     136             :     pSelTransfer( NULL ),
     137             :     pMessagePool( NULL ),
     138             :     pRefInputHandler( NULL ),
     139             :     pViewCfg( NULL ),
     140             :     pDocCfg( NULL ),
     141             :     pAppCfg( NULL ),
     142             :     pDefaultsCfg( NULL ),
     143             :     pFormulaCfg( NULL ),
     144             :     pInputCfg( NULL ),
     145             :     pPrintCfg( NULL ),
     146             :     pNavipiCfg( NULL ),
     147             :     pAddInCfg( NULL ),
     148             :     pColorConfig( NULL ),
     149             :     pAccessOptions( NULL ),
     150             :     pCTLOptions( NULL ),
     151             :     pUserOptions( NULL ),
     152             :     pErrorHdl( NULL ),
     153             :     pFormEditData( NULL ),
     154             :     nCurRefDlgId( 0 ),
     155             :     bIsWaterCan( false ),
     156             :     bIsInEditCommand( false ),
     157             :     bIsInExecuteDrop( false ),
     158             :     mbIsInSharedDocLoading( false ),
     159         228 :     mbIsInSharedDocSaving( false )
     160             : {
     161             :     // The ResManager (DLL data) is not yet initalized in the ctor!
     162          76 :     SetName(OUString("StarCalc")); // for Basic
     163             : 
     164          76 :     ResetDragObject();
     165          76 :     SetClipObject( NULL, NULL );
     166             : 
     167             :     // InputHandler does not need to be created
     168             : 
     169             :     // Create ErrorHandler - was in Init()
     170             :     // Between OfficeApplication::Init and ScGlobal::Init
     171          76 :     SvxErrorHandler::ensure();
     172             :     pErrorHdl    = new SfxErrorHandler( RID_ERRHDLSC,
     173             :                                         ERRCODE_AREA_SC,
     174             :                                         ERRCODE_AREA_APP2-1,
     175          76 :                                         GetResMgr() );
     176             : 
     177          76 :     aSpellTimer.SetTimeout(10);
     178          76 :     aSpellTimer.SetTimeoutHdl( LINK( this, ScModule, SpellTimerHdl ) );
     179          76 :     aIdleTimer.SetTimeout(SC_IDLE_MIN);
     180          76 :     aIdleTimer.SetTimeoutHdl( LINK( this, ScModule, IdleHandler ) );
     181          76 :     aIdleTimer.Start();
     182             : 
     183          76 :     pMessagePool = new ScMessagePool;
     184          76 :     pMessagePool->FreezeIdRanges();
     185          76 :     SetPool( pMessagePool );
     186          76 :     ScGlobal::InitTextHeight( pMessagePool );
     187             : 
     188          76 :     StartListening( *SfxGetpApp() );       // for SFX_HINT_DEINITIALIZING
     189          76 : }
     190             : 
     191          60 : ScModule::~ScModule()
     192             : {
     193             :     OSL_ENSURE( !pSelTransfer, "Selection Transfer object not deleted" );
     194             : 
     195             :     // InputHandler does not need to be deleted (there's none in the App anymore)
     196             : 
     197          20 :     SfxItemPool::Free(pMessagePool);
     198             : 
     199          20 :     DELETEZ( pFormEditData );
     200             : 
     201          20 :     delete mpDragData;
     202          20 :     delete mpClipData;
     203          20 :     delete pErrorHdl;
     204             : 
     205          20 :     ScGlobal::Clear(); // Also calls ScDocumentPool::DeleteVersionMaps();
     206             : 
     207          20 :     DeleteCfg(); // Called from Exit()
     208          40 : }
     209             : 
     210          18 : void ScModule::ConfigurationChanged( utl::ConfigurationBroadcaster* p, sal_uInt32 )
     211             : {
     212          18 :     if ( p == pColorConfig || p == pAccessOptions )
     213             :     {
     214             :         // Test if detective objects have to be updated with new colors
     215             :         // (if the detective colors haven't been used yet, there's nothing to update)
     216          18 :         if ( ScDetectiveFunc::IsColorsInitialized() )
     217             :         {
     218           0 :             const svtools::ColorConfig& rColors = GetColorConfig();
     219             :             bool bArrows =
     220           0 :                 ( ScDetectiveFunc::GetArrowColor() != (ColorData)rColors.GetColorValue(svtools::CALCDETECTIVE).nColor ||
     221           0 :                   ScDetectiveFunc::GetErrorColor() != (ColorData)rColors.GetColorValue(svtools::CALCDETECTIVEERROR).nColor );
     222             :             bool bComments =
     223           0 :                 ( ScDetectiveFunc::GetCommentColor() != (ColorData)rColors.GetColorValue(svtools::CALCNOTESBACKGROUND).nColor );
     224           0 :             if ( bArrows || bComments )
     225             :             {
     226           0 :                 ScDetectiveFunc::InitializeColors(); // get the new colors
     227             : 
     228             :                 // update detective objects in all open documents
     229           0 :                 SfxObjectShell* pObjSh = SfxObjectShell::GetFirst();
     230           0 :                 while ( pObjSh )
     231             :                 {
     232           0 :                     if ( pObjSh->Type() == TYPE(ScDocShell) )
     233             :                     {
     234           0 :                         ScDocShell* pDocSh = static_cast<ScDocShell*>(pObjSh);
     235           0 :                         if ( bArrows )
     236           0 :                             ScDetectiveFunc( &pDocSh->GetDocument(), 0 ).UpdateAllArrowColors();
     237           0 :                         if ( bComments )
     238           0 :                             ScDetectiveFunc::UpdateAllComments( pDocSh->GetDocument() );
     239             :                     }
     240           0 :                     pObjSh = SfxObjectShell::GetNext( *pObjSh );
     241             :                 }
     242             :             }
     243             :         }
     244             : 
     245             :         // force all views to repaint, using the new options
     246          18 :         SfxViewShell* pViewShell = SfxViewShell::GetFirst();
     247          46 :         while(pViewShell)
     248             :         {
     249          10 :             if ( pViewShell->ISA(ScTabViewShell) )
     250             :             {
     251          10 :                 ScTabViewShell* pViewSh = static_cast<ScTabViewShell*>(pViewShell);
     252          10 :                 pViewSh->PaintGrid();
     253          10 :                 pViewSh->PaintTop();
     254          10 :                 pViewSh->PaintLeft();
     255          10 :                 pViewSh->PaintExtras();
     256             : 
     257          10 :                 ScInputHandler* pHdl = pViewSh->GetInputHandler();
     258          10 :                 if ( pHdl )
     259          10 :                     pHdl->ForgetLastPattern(); // EditEngine BackgroundColor may change
     260             :             }
     261           0 :             else if ( pViewShell->ISA(ScPreviewShell) )
     262             :             {
     263           0 :                 vcl::Window* pWin = pViewShell->GetWindow();
     264           0 :                 if (pWin)
     265           0 :                     pWin->Invalidate();
     266             :             }
     267          10 :             pViewShell = SfxViewShell::GetNext( *pViewShell );
     268          18 :         }
     269             :     }
     270           0 :     else if ( p == pCTLOptions )
     271             :     {
     272             :         // for all documents: set digit language for printer, recalc output factor, update row heights
     273           0 :         SfxObjectShell* pObjSh = SfxObjectShell::GetFirst();
     274           0 :         while ( pObjSh )
     275             :         {
     276           0 :             if ( pObjSh->Type() == TYPE(ScDocShell) )
     277             :             {
     278           0 :                 ScDocShell* pDocSh = static_cast<ScDocShell*>(pObjSh);
     279           0 :                 OutputDevice* pPrinter = pDocSh->GetPrinter();
     280           0 :                 if ( pPrinter )
     281           0 :                     pPrinter->SetDigitLanguage( GetOptDigitLanguage() );
     282             : 
     283           0 :                 pDocSh->CalcOutputFactor();
     284             : 
     285           0 :                 SCTAB nTabCount = pDocSh->GetDocument().GetTableCount();
     286           0 :                 for (SCTAB nTab=0; nTab<nTabCount; nTab++)
     287           0 :                     pDocSh->AdjustRowHeight( 0, MAXROW, nTab );
     288             :             }
     289           0 :             pObjSh = SfxObjectShell::GetNext( *pObjSh );
     290             :         }
     291             : 
     292             :         // for all views (table and preview): update digit language
     293           0 :         SfxViewShell* pSh = SfxViewShell::GetFirst();
     294           0 :         while ( pSh )
     295             :         {
     296           0 :             if ( pSh->ISA( ScTabViewShell ) )
     297             :             {
     298           0 :                 ScTabViewShell* pViewSh = static_cast<ScTabViewShell*>(pSh);
     299             : 
     300             :                 // set ref-device for EditEngine (re-evaluates digit settings)
     301           0 :                 ScInputHandler* pHdl = GetInputHdl(pViewSh);
     302           0 :                 if (pHdl)
     303           0 :                     pHdl->UpdateRefDevice();
     304             : 
     305           0 :                 pViewSh->DigitLanguageChanged();
     306           0 :                 pViewSh->PaintGrid();
     307             :             }
     308           0 :             else if ( pSh->ISA( ScPreviewShell ) )
     309             :             {
     310           0 :                 ScPreviewShell* pPreviewSh = static_cast<ScPreviewShell*>(pSh);
     311           0 :                 ScPreview* pPreview = pPreviewSh->GetPreview();
     312             : 
     313           0 :                 pPreview->SetDigitLanguage( GetOptDigitLanguage() );
     314           0 :                 pPreview->Invalidate();
     315             :             }
     316             : 
     317           0 :             pSh = SfxViewShell::GetNext( *pSh );
     318             :         }
     319             :     }
     320          18 : }
     321             : 
     322       29932 : void ScModule::Notify( SfxBroadcaster&, const SfxHint& rHint )
     323             : {
     324       29932 :     const SfxSimpleHint* pSimpleHint = dynamic_cast<const SfxSimpleHint*>(&rHint);
     325       29932 :     if ( pSimpleHint )
     326             :     {
     327       22870 :         sal_uLong nHintId = pSimpleHint->GetId();
     328       22870 :         if ( nHintId == SFX_HINT_DEINITIALIZING )
     329             :         {
     330             :             // ConfigItems must be removed before ConfigManager
     331          20 :             DeleteCfg();
     332             :         }
     333             :     }
     334       29932 : }
     335             : 
     336          40 : void ScModule::DeleteCfg()
     337             : {
     338          40 :     DELETEZ( pViewCfg ); // Saving happens automatically before Exit()
     339          40 :     DELETEZ( pDocCfg );
     340          40 :     DELETEZ( pAppCfg );
     341          40 :     DELETEZ( pDefaultsCfg );
     342          40 :     DELETEZ( pFormulaCfg );
     343          40 :     DELETEZ( pInputCfg );
     344          40 :     DELETEZ( pPrintCfg );
     345          40 :     DELETEZ( pNavipiCfg );
     346          40 :     DELETEZ( pAddInCfg );
     347             : 
     348          40 :     if ( pColorConfig )
     349             :     {
     350          20 :         pColorConfig->RemoveListener(this);
     351          20 :         DELETEZ( pColorConfig );
     352             :     }
     353          40 :     if ( pAccessOptions )
     354             :     {
     355          20 :         pAccessOptions->RemoveListener(this);
     356          20 :         DELETEZ( pAccessOptions );
     357             :     }
     358          40 :     if ( pCTLOptions )
     359             :     {
     360          20 :         pCTLOptions->RemoveListener(this);
     361          20 :         DELETEZ( pCTLOptions );
     362             :     }
     363          40 :     if( pUserOptions )
     364             :     {
     365           0 :         DELETEZ( pUserOptions );
     366             :     }
     367          40 : }
     368             : 
     369             : // Moved here from the App
     370             : 
     371           4 : void ScModule::Execute( SfxRequest& rReq )
     372             : {
     373           4 :     SfxViewFrame* pViewFrm = SfxViewFrame::Current();
     374           4 :     SfxBindings* pBindings = pViewFrm ? &pViewFrm->GetBindings() : NULL;
     375             : 
     376           4 :     const SfxItemSet*   pReqArgs    = rReq.GetArgs();
     377           4 :     sal_uInt16              nSlot       = rReq.GetSlot();
     378             : 
     379           4 :     switch ( nSlot )
     380             :     {
     381             :         case SID_CHOOSE_DESIGN:
     382             :             {
     383           0 :                 OUString aMacroName("Template.Samples.ShowStyles");
     384           0 :                 SfxApplication::CallAppBasic( aMacroName );
     385             :             }
     386           0 :             break;
     387             :         case SID_EURO_CONVERTER:
     388             :             {
     389           0 :                 OUString aMacroName("Euro.ConvertRun.Main");
     390           0 :                 SfxApplication::CallAppBasic( aMacroName );
     391             :             }
     392           0 :             break;
     393             :         case SID_AUTOSPELL_CHECK:
     394             :             {
     395             :                 bool bSet;
     396             :                 const SfxPoolItem* pItem;
     397           0 :                 if ( pReqArgs && SfxItemState::SET == pReqArgs->GetItemState( nSlot, true, &pItem ) )
     398           0 :                     bSet = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     399             :                 else
     400             :                 {   // Toggle
     401           0 :                     ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current());
     402           0 :                     if ( pDocSh )
     403           0 :                         bSet = !pDocSh->GetDocument().GetDocOptions().IsAutoSpell();
     404             :                     else
     405           0 :                         bSet = !GetDocOptions().IsAutoSpell();
     406             :                 }
     407             : 
     408           0 :                 SfxItemSet aSet( GetPool(), SID_AUTOSPELL_CHECK, SID_AUTOSPELL_CHECK );
     409           0 :                 aSet.Put( SfxBoolItem( SID_AUTOSPELL_CHECK, bSet ) );
     410           0 :                 ModifyOptions( aSet );
     411           0 :                 rReq.Done();
     412             :             }
     413           0 :             break;
     414             : 
     415             :         case SID_ATTR_METRIC:
     416             :             {
     417             :                 const SfxPoolItem* pItem;
     418           0 :                 if ( pReqArgs && SfxItemState::SET == pReqArgs->GetItemState( nSlot, true, &pItem ) )
     419             :                 {
     420           0 :                     FieldUnit eUnit = (FieldUnit)static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     421           0 :                     switch( eUnit )
     422             :                     {
     423             :                         case FUNIT_MM:      // Just the units that are also in the dialog
     424             :                         case FUNIT_CM:
     425             :                         case FUNIT_INCH:
     426             :                         case FUNIT_PICA:
     427             :                         case FUNIT_POINT:
     428             :                             {
     429           0 :                                 PutItem( *pItem );
     430           0 :                                 ScAppOptions aNewOpts( GetAppOptions() );
     431           0 :                                 aNewOpts.SetAppMetric( eUnit );
     432           0 :                                 SetAppOptions( aNewOpts );
     433           0 :                                 rReq.Done();
     434             :                             }
     435           0 :                             break;
     436             :                         default:
     437             :                         {
     438             :                             // added to avoid warnings
     439             :                         }
     440             :                     }
     441             :                 }
     442             :             }
     443           0 :             break;
     444             : 
     445             :         case FID_AUTOCOMPLETE:
     446             :             {
     447           0 :                 ScAppOptions aNewOpts( GetAppOptions() );
     448           0 :                 bool bNew = !aNewOpts.GetAutoComplete();
     449           0 :                 aNewOpts.SetAutoComplete( bNew );
     450           0 :                 SetAppOptions( aNewOpts );
     451           0 :                 ScInputHandler::SetAutoComplete( bNew );
     452           0 :                 if (pBindings)
     453           0 :                     pBindings->Invalidate( FID_AUTOCOMPLETE );
     454           0 :                 rReq.Done();
     455             :             }
     456           0 :             break;
     457             : 
     458             :         case SID_DETECTIVE_AUTO:
     459             :             {
     460           4 :                 ScAppOptions aNewOpts( GetAppOptions() );
     461           4 :                 bool bNew = !aNewOpts.GetDetectiveAuto();
     462           4 :                 SFX_REQUEST_ARG( rReq, pAuto, SfxBoolItem, SID_DETECTIVE_AUTO, false );
     463           4 :                 if ( pAuto )
     464           4 :                     bNew = pAuto->GetValue();
     465             : 
     466           4 :                 aNewOpts.SetDetectiveAuto( bNew );
     467           4 :                 SetAppOptions( aNewOpts );
     468           4 :                 if (pBindings)
     469           4 :                     pBindings->Invalidate( SID_DETECTIVE_AUTO );
     470           4 :                 rReq.AppendItem( SfxBoolItem( SID_DETECTIVE_AUTO, bNew ) );
     471           4 :                 rReq.Done();
     472             :             }
     473           4 :             break;
     474             : 
     475             :         case SID_PSZ_FUNCTION:
     476           0 :             if (pReqArgs)
     477             :             {
     478           0 :                 const SfxUInt16Item& rItem = static_cast<const SfxUInt16Item&>(pReqArgs->Get(SID_PSZ_FUNCTION));
     479             :                 OSL_ENSURE(rItem.ISA(SfxUInt16Item),"wrong Parameter");
     480             : 
     481           0 :                 ScAppOptions aNewOpts( GetAppOptions() );
     482           0 :                 aNewOpts.SetStatusFunc( rItem.GetValue() );
     483           0 :                 SetAppOptions( aNewOpts );
     484             : 
     485           0 :                 if (pBindings)
     486             :                 {
     487           0 :                     pBindings->Invalidate( SID_TABLE_CELL );
     488           0 :                     pBindings->Update( SID_TABLE_CELL ); // Immediately
     489             : 
     490           0 :                     pBindings->Invalidate( SID_PSZ_FUNCTION );
     491           0 :                     pBindings->Update( SID_PSZ_FUNCTION );
     492             :                     // If the menu is opened again immediately
     493           0 :                 }
     494             :             }
     495           0 :             break;
     496             : 
     497             :         case SID_ATTR_LANGUAGE:
     498             :         case SID_ATTR_CHAR_CJK_LANGUAGE:
     499             :         case SID_ATTR_CHAR_CTL_LANGUAGE:
     500             :             {
     501             :                 const SfxPoolItem* pItem;
     502           0 :                 if ( pReqArgs && SfxItemState::SET == pReqArgs->GetItemState( GetPool().GetWhich(nSlot), true, &pItem ) )
     503             :                 {
     504           0 :                     ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current());
     505           0 :                     if ( pDocSh )
     506             :                     {
     507           0 :                         ScDocument& rDoc = pDocSh->GetDocument();
     508           0 :                         LanguageType eNewLang = static_cast<const SvxLanguageItem*>(pItem)->GetLanguage();
     509             :                         LanguageType eLatin, eCjk, eCtl;
     510           0 :                         rDoc.GetLanguage( eLatin, eCjk, eCtl );
     511             :                         LanguageType eOld = ( nSlot == SID_ATTR_CHAR_CJK_LANGUAGE ) ? eCjk :
     512           0 :                                             ( ( nSlot == SID_ATTR_CHAR_CTL_LANGUAGE ) ? eCtl : eLatin );
     513           0 :                         if ( eNewLang != eOld )
     514             :                         {
     515           0 :                             if ( nSlot == SID_ATTR_CHAR_CJK_LANGUAGE )
     516           0 :                                 eCjk = eNewLang;
     517           0 :                             else if ( nSlot == SID_ATTR_CHAR_CTL_LANGUAGE )
     518           0 :                                 eCtl = eNewLang;
     519             :                             else
     520           0 :                                 eLatin = eNewLang;
     521             : 
     522           0 :                             rDoc.SetLanguage( eLatin, eCjk, eCtl );
     523             : 
     524           0 :                             ScInputHandler* pInputHandler = GetInputHdl();
     525           0 :                             if ( pInputHandler )
     526           0 :                                 pInputHandler->UpdateSpellSettings(); // EditEngine flags
     527           0 :                             ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell, SfxViewShell::Current());
     528           0 :                             if ( pViewSh )
     529           0 :                                 pViewSh->UpdateDrawTextOutliner(); // EditEngine flags
     530             : 
     531           0 :                             pDocSh->SetDocumentModified();
     532             :                         }
     533             :                     }
     534             :                 }
     535             :             }
     536           0 :             break;
     537             : 
     538             :         case FID_FOCUS_POSWND:
     539             :             {
     540           0 :                 ScInputHandler* pHdl = GetInputHdl();
     541           0 :                 if (pHdl)
     542             :                 {
     543           0 :                     ScInputWindow* pWin = pHdl->GetInputWindow();
     544           0 :                     if (pWin)
     545           0 :                         pWin->PosGrabFocus();
     546             :                 }
     547           0 :                 rReq.Done();
     548             :             }
     549           0 :             break;
     550             : 
     551             :         case SID_OPEN_XML_FILTERSETTINGS:
     552             :         {
     553             :             try
     554             :             {
     555           0 :                 css::uno::Reference < css::ui::dialogs::XExecutableDialog > xDialog = css::ui::dialogs::XSLTFilterDialog::create( ::comphelper::getProcessComponentContext());
     556           0 :                 xDialog->execute();
     557             :             }
     558           0 :             catch( ::com::sun::star::uno::RuntimeException& )
     559             :             {
     560             :                 DBG_UNHANDLED_EXCEPTION();
     561             :             }
     562             :         }
     563           0 :         break;
     564             : 
     565             :         default:
     566             :             OSL_FAIL( "ScApplication: Unknown Message." );
     567           0 :             break;
     568             :     }
     569           4 : }
     570             : 
     571         652 : void ScModule::GetState( SfxItemSet& rSet )
     572             : {
     573         652 :     ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current());
     574         652 :     bool bTabView = pDocSh && (pDocSh->GetBestViewShell(true) != NULL);
     575             : 
     576         652 :     SfxWhichIter aIter(rSet);
     577        1324 :     for (sal_uInt16 nWhich = aIter.FirstWhich(); nWhich; nWhich = aIter.NextWhich())
     578             :     {
     579         672 :         if (!bTabView)
     580             :         {
     581             :             // Not in the normal calc view shell (most likely in preview shell). Disable all actions.
     582         404 :             rSet.DisableItem(nWhich);
     583         404 :             continue;
     584             :         }
     585             : 
     586         268 :         switch ( nWhich )
     587             :         {
     588             :             case FID_AUTOCOMPLETE:
     589           0 :                 rSet.Put( SfxBoolItem( nWhich, GetAppOptions().GetAutoComplete() ) );
     590           0 :                 break;
     591             :             case SID_DETECTIVE_AUTO:
     592           4 :                 rSet.Put( SfxBoolItem( nWhich, GetAppOptions().GetDetectiveAuto() ) );
     593           4 :                 break;
     594             :             case SID_PSZ_FUNCTION:
     595          22 :                 rSet.Put( SfxUInt16Item( nWhich, GetAppOptions().GetStatusFunc() ) );
     596          22 :                 break;
     597             :             case SID_ATTR_METRIC:
     598           0 :                 rSet.Put( SfxUInt16Item( nWhich, sal::static_int_cast<sal_uInt16>(GetAppOptions().GetAppMetric()) ) );
     599           0 :                 break;
     600             :             case SID_AUTOSPELL_CHECK:
     601         242 :                 rSet.Put( SfxBoolItem( nWhich, pDocSh->GetDocument().GetDocOptions().IsAutoSpell()) );
     602         242 :                 break;
     603             :             case SID_ATTR_LANGUAGE:
     604             :             case ATTR_CJK_FONT_LANGUAGE:        // WID for SID_ATTR_CHAR_CJK_LANGUAGE
     605             :             case ATTR_CTL_FONT_LANGUAGE:        // WID for SID_ATTR_CHAR_CTL_LANGUAGE
     606             :                 {
     607             :                     LanguageType eLatin, eCjk, eCtl;
     608           0 :                     pDocSh->GetDocument().GetLanguage( eLatin, eCjk, eCtl );
     609             :                     LanguageType eLang = ( nWhich == ATTR_CJK_FONT_LANGUAGE ) ? eCjk :
     610           0 :                                         ( ( nWhich == ATTR_CTL_FONT_LANGUAGE ) ? eCtl : eLatin );
     611           0 :                     rSet.Put( SvxLanguageItem( eLang, nWhich ) );
     612             :                 }
     613           0 :                 break;
     614             :         }
     615         652 :     }
     616         652 : }
     617             : 
     618           0 : void ScModule::HideDisabledSlots( SfxItemSet& rSet )
     619             : {
     620           0 :     if( SfxViewFrame* pViewFrm = SfxViewFrame::Current() )
     621             :     {
     622           0 :         SfxBindings& rBindings = pViewFrm->GetBindings();
     623           0 :         SfxWhichIter aIter( rSet );
     624           0 :         for( sal_uInt16 nWhich = aIter.FirstWhich(); nWhich != 0; nWhich = aIter.NextWhich() )
     625             :         {
     626           0 :             ScViewUtil::HideDisabledSlot( rSet, rBindings, nWhich );
     627             :             // always disable the slots
     628           0 :             rSet.DisableItem( nWhich );
     629           0 :         }
     630             :     }
     631           0 : }
     632             : 
     633          76 : void ScModule::ResetDragObject()
     634             : {
     635          76 :     mpDragData->pCellTransfer = NULL;
     636          76 :     mpDragData->pDrawTransfer = NULL;
     637          76 :     mpDragData->pJumpLocalDoc = NULL;
     638          76 :     mpDragData->aLinkDoc = OUString();
     639          76 :     mpDragData->aLinkTable = OUString();
     640          76 :     mpDragData->aLinkArea = OUString();
     641          76 :     mpDragData->aJumpTarget = OUString();
     642          76 :     mpDragData->aJumpText = OUString();
     643          76 : }
     644             : 
     645           0 : void ScModule::SetDragObject( ScTransferObj* pCellObj, ScDrawTransferObj* pDrawObj )
     646             : {
     647           0 :     ResetDragObject();
     648           0 :     mpDragData->pCellTransfer = pCellObj;
     649           0 :     mpDragData->pDrawTransfer = pDrawObj;
     650           0 : }
     651             : 
     652           0 : void ScModule::SetDragLink(
     653             :     const OUString& rDoc, const OUString& rTab, const OUString& rArea )
     654             : {
     655           0 :     ResetDragObject();
     656           0 :     mpDragData->aLinkDoc   = rDoc;
     657           0 :     mpDragData->aLinkTable = rTab;
     658           0 :     mpDragData->aLinkArea  = rArea;
     659           0 : }
     660             : 
     661           0 : void ScModule::SetDragJump(
     662             :     ScDocument* pLocalDoc, const OUString& rTarget, const OUString& rText )
     663             : {
     664           0 :     ResetDragObject();
     665             : 
     666           0 :     mpDragData->pJumpLocalDoc = pLocalDoc;
     667           0 :     mpDragData->aJumpTarget = rTarget;
     668           0 :     mpDragData->aJumpText = rText;
     669           0 : }
     670             : 
     671         120 : void ScModule::SetClipObject( ScTransferObj* pCellObj, ScDrawTransferObj* pDrawObj )
     672             : {
     673             :     OSL_ENSURE( !pCellObj || !pDrawObj, "SetClipObject: not allowed to set both objects" );
     674             : 
     675         120 :     mpClipData->pCellClipboard = pCellObj;
     676         120 :     mpClipData->pDrawClipboard = pDrawObj;
     677         120 : }
     678             : 
     679        2256 : ScDocument* ScModule::GetClipDoc()
     680             : {
     681             :     // called from document
     682        2256 :     ScTransferObj* pObj = ScTransferObj::GetOwnClipboard( NULL );
     683        2256 :     if (pObj)
     684           0 :         return pObj->GetDocument();
     685             : 
     686        2256 :     return NULL;
     687             : }
     688             : 
     689         714 : void ScModule::SetSelectionTransfer( ScSelectionTransferObj* pNew )
     690             : {
     691         714 :     pSelTransfer = pNew;
     692         714 : }
     693             : 
     694           0 : void ScModule::InitFormEditData()
     695             : {
     696           0 :     pFormEditData = new ScFormEditData;
     697           0 : }
     698             : 
     699           0 : void ScModule::ClearFormEditData()
     700             : {
     701           0 :     DELETEZ( pFormEditData );
     702           0 : }
     703             : 
     704           0 : void ScModule::SetViewOptions( const ScViewOptions& rOpt )
     705             : {
     706           0 :     if ( !pViewCfg )
     707           0 :         pViewCfg = new ScViewCfg;
     708             : 
     709           0 :     pViewCfg->SetOptions( rOpt );
     710           0 : }
     711             : 
     712         952 : const ScViewOptions& ScModule::GetViewOptions()
     713             : {
     714         952 :     if ( !pViewCfg )
     715          70 :         pViewCfg = new ScViewCfg;
     716             : 
     717         952 :     return *pViewCfg;
     718             : }
     719             : 
     720           0 : void ScModule::SetDocOptions( const ScDocOptions& rOpt )
     721             : {
     722           0 :     if ( !pDocCfg )
     723           0 :         pDocCfg = new ScDocCfg;
     724             : 
     725           0 :     pDocCfg->SetOptions( rOpt );
     726           0 : }
     727             : 
     728         952 : const ScDocOptions& ScModule::GetDocOptions()
     729             : {
     730         952 :     if ( !pDocCfg )
     731          70 :         pDocCfg = new ScDocCfg;
     732             : 
     733         952 :     return *pDocCfg;
     734             : }
     735             : 
     736             : #ifndef LRU_MAX
     737             : #define LRU_MAX 10
     738             : #endif
     739             : 
     740           0 : void ScModule::InsertEntryToLRUList(sal_uInt16 nFIndex)
     741             : {
     742           0 :     if(nFIndex != 0)
     743             :     {
     744           0 :         const ScAppOptions& rAppOpt = GetAppOptions();
     745           0 :         sal_uInt16 nLRUFuncCount = std::min( rAppOpt.GetLRUFuncListCount(), (sal_uInt16)LRU_MAX );
     746           0 :         sal_uInt16* pLRUListIds = rAppOpt.GetLRUFuncList();
     747             : 
     748             :         sal_uInt16  aIdxList[LRU_MAX];
     749           0 :         sal_uInt16  n = 0;
     750           0 :         bool    bFound = false;
     751             : 
     752           0 :         while ((n < LRU_MAX) && n<nLRUFuncCount)                        // Iterate through old list
     753             :         {
     754           0 :             if (!bFound && (pLRUListIds[n]== nFIndex))
     755           0 :                 bFound = true;                                          // First hit!
     756           0 :             else if (bFound)
     757           0 :                 aIdxList[n  ] = pLRUListIds[n];                         // Copy after hit
     758           0 :             else if ((n+1) < LRU_MAX)
     759           0 :                 aIdxList[n+1] = pLRUListIds[n];                         // Move before hit
     760           0 :             n++;
     761             :         }
     762           0 :         if (!bFound && (n < LRU_MAX))                                   // Entry not found?
     763           0 :             n++;                                                        // One more
     764           0 :         aIdxList[0] = nFIndex;                                          // Current on Top
     765             : 
     766           0 :         ScAppOptions aNewOpts(rAppOpt);                                 // Let App know
     767           0 :         aNewOpts.SetLRUFuncList(aIdxList, n);
     768           0 :         SetAppOptions(aNewOpts);
     769             : 
     770           0 :         RecentFunctionsChanged();
     771             :     }
     772           0 : }
     773             : 
     774           0 : void ScModule::RecentFunctionsChanged()
     775             : {
     776             :     // update function list window
     777           0 :     sal_uInt16 nFuncListID = ScFunctionChildWindow::GetChildWindowId();
     778             : 
     779             :     //! notify all views
     780           0 :     SfxViewFrame* pViewFrm = SfxViewFrame::Current();
     781           0 :     if ( pViewFrm && pViewFrm->HasChildWindow(nFuncListID) )
     782             :     {
     783           0 :         ScFunctionChildWindow* pWnd = static_cast<ScFunctionChildWindow*>(pViewFrm->GetChildWindow( nFuncListID ));
     784             : 
     785           0 :         ScFunctionDockWin* pFuncList = static_cast<ScFunctionDockWin*>(pWnd->GetWindow());
     786             : 
     787           0 :         pFuncList->InitLRUList();
     788             :     }
     789           0 : }
     790             : 
     791          40 : void ScModule::SetAppOptions( const ScAppOptions& rOpt )
     792             : {
     793          40 :     if ( !pAppCfg )
     794           0 :         pAppCfg = new ScAppCfg;
     795             : 
     796          40 :     pAppCfg->SetOptions( rOpt );
     797          40 : }
     798             : 
     799          24 : void global_InitAppOptions()
     800             : {
     801          24 :     SC_MOD()->GetAppOptions();
     802          24 : }
     803             : 
     804        1678 : const ScAppOptions& ScModule::GetAppOptions()
     805             : {
     806        1678 :     if ( !pAppCfg )
     807          76 :         pAppCfg = new ScAppCfg;
     808             : 
     809        1678 :     return *pAppCfg;
     810             : }
     811             : 
     812           0 : void ScModule::SetDefaultsOptions( const ScDefaultsOptions& rOpt )
     813             : {
     814           0 :     if ( !pDefaultsCfg )
     815           0 :         pDefaultsCfg = new ScDefaultsCfg;
     816             : 
     817           0 :     pDefaultsCfg->SetOptions( rOpt );
     818           0 : }
     819             : 
     820        1644 : const ScDefaultsOptions& ScModule::GetDefaultsOptions()
     821             : {
     822        1644 :     if ( !pDefaultsCfg )
     823          70 :         pDefaultsCfg = new ScDefaultsCfg;
     824             : 
     825        1644 :     return *pDefaultsCfg;
     826             : }
     827             : 
     828           0 : void ScModule::SetFormulaOptions( const ScFormulaOptions& rOpt )
     829             : {
     830           0 :     if ( !pFormulaCfg )
     831           0 :         pFormulaCfg = new ScFormulaCfg;
     832             : 
     833           0 :     pFormulaCfg->SetOptions( rOpt );
     834           0 : }
     835             : 
     836        2140 : const ScFormulaOptions& ScModule::GetFormulaOptions()
     837             : {
     838        2140 :     if ( !pFormulaCfg )
     839          70 :         pFormulaCfg = new ScFormulaCfg;
     840             : 
     841        2140 :     return *pFormulaCfg;
     842             : }
     843             : 
     844         176 : void ScModule::SetInputOptions( const ScInputOptions& rOpt )
     845             : {
     846         176 :     if ( !pInputCfg )
     847           0 :         pInputCfg = new ScInputCfg;
     848             : 
     849         176 :     pInputCfg->SetOptions( rOpt );
     850         176 : }
     851             : 
     852       23862 : const ScInputOptions& ScModule::GetInputOptions()
     853             : {
     854       23862 :     if ( !pInputCfg )
     855          70 :         pInputCfg = new ScInputCfg;
     856             : 
     857       23862 :     return *pInputCfg;
     858             : }
     859             : 
     860          12 : void ScModule::SetPrintOptions( const ScPrintOptions& rOpt )
     861             : {
     862          12 :     if ( !pPrintCfg )
     863           0 :         pPrintCfg = new ScPrintCfg;
     864             : 
     865          12 :     pPrintCfg->SetOptions( rOpt );
     866          12 : }
     867             : 
     868         460 : const ScPrintOptions& ScModule::GetPrintOptions()
     869             : {
     870         460 :     if ( !pPrintCfg )
     871          14 :         pPrintCfg = new ScPrintCfg;
     872             : 
     873         460 :     return *pPrintCfg;
     874             : }
     875             : 
     876           0 : ScNavipiCfg& ScModule::GetNavipiCfg()
     877             : {
     878           0 :     if ( !pNavipiCfg )
     879           0 :         pNavipiCfg = new ScNavipiCfg;
     880             : 
     881           0 :     return *pNavipiCfg;
     882             : }
     883             : 
     884          54 : ScAddInCfg& ScModule::GetAddInCfg()
     885             : {
     886          54 :     if ( !pAddInCfg )
     887          54 :         pAddInCfg = new ScAddInCfg;
     888             : 
     889          54 :     return *pAddInCfg;
     890             : }
     891             : 
     892       14104 : svtools::ColorConfig& ScModule::GetColorConfig()
     893             : {
     894       14104 :     if ( !pColorConfig )
     895             :     {
     896          68 :         pColorConfig = new svtools::ColorConfig;
     897          68 :         pColorConfig->AddListener(this);
     898             :     }
     899             : 
     900       14104 :     return *pColorConfig;
     901             : }
     902             : 
     903       16468 : SvtAccessibilityOptions& ScModule::GetAccessOptions()
     904             : {
     905       16468 :     if ( !pAccessOptions )
     906             :     {
     907          54 :         pAccessOptions = new SvtAccessibilityOptions;
     908          54 :         pAccessOptions->AddListener(this);
     909             :     }
     910             : 
     911       16468 :     return *pAccessOptions;
     912             : }
     913             : 
     914        4097 : SvtCTLOptions& ScModule::GetCTLOptions()
     915             : {
     916        4097 :     if ( !pCTLOptions )
     917             :     {
     918          68 :         pCTLOptions = new SvtCTLOptions;
     919          68 :         pCTLOptions->AddListener(this);
     920             :     }
     921             : 
     922        4097 :     return *pCTLOptions;
     923             : }
     924             : 
     925          38 : SvtUserOptions&  ScModule::GetUserOptions()
     926             : {
     927          38 :     if( !pUserOptions )
     928             :     {
     929           2 :         pUserOptions = new SvtUserOptions;
     930             :     }
     931          38 :     return *pUserOptions;
     932             : }
     933             : 
     934        4097 : sal_uInt16 ScModule::GetOptDigitLanguage()
     935             : {
     936        4097 :     SvtCTLOptions::TextNumerals eNumerals = GetCTLOptions().GetCTLTextNumerals();
     937             :     return ( eNumerals == SvtCTLOptions::NUMERALS_ARABIC ) ? LANGUAGE_ENGLISH_US :
     938             :            ( eNumerals == SvtCTLOptions::NUMERALS_HINDI)   ? LANGUAGE_ARABIC_SAUDI_ARABIA :
     939        4097 :                                                              LANGUAGE_SYSTEM;
     940             : }
     941             : 
     942             : /**
     943             :  * Options
     944             :  *
     945             :  * Items from Calc options dialog and SID_AUTOSPELL_CHECK
     946             :  */
     947           0 : void ScModule::ModifyOptions( const SfxItemSet& rOptSet )
     948             : {
     949             :     sal_uInt16 nOldSpellLang, nOldCjkLang, nOldCtlLang;
     950             :     bool bOldAutoSpell;
     951           0 :     GetSpellSettings( nOldSpellLang, nOldCjkLang, nOldCtlLang, bOldAutoSpell );
     952             : 
     953           0 :     if (!pAppCfg)
     954           0 :         GetAppOptions();
     955             :     OSL_ENSURE( pAppCfg, "AppOptions not initialised :-(" );
     956             : 
     957           0 :     if (!pInputCfg)
     958           0 :         GetInputOptions();
     959             :     OSL_ENSURE( pInputCfg, "InputOptions not initialised :-(" );
     960             : 
     961           0 :     SfxViewFrame* pViewFrm = SfxViewFrame::Current();
     962           0 :     SfxBindings* pBindings = pViewFrm ? &pViewFrm->GetBindings() : NULL;
     963             : 
     964           0 :     ScTabViewShell*         pViewSh = PTR_CAST(ScTabViewShell, SfxViewShell::Current());
     965           0 :     ScDocShell*             pDocSh  = PTR_CAST(ScDocShell, SfxObjectShell::Current());
     966           0 :     ScDocument*             pDoc    = pDocSh ? &pDocSh->GetDocument() : NULL;
     967           0 :     const SfxPoolItem*      pItem   = NULL;
     968           0 :     bool bRepaint = false;
     969           0 :     bool bUpdateMarks = false;
     970           0 :     bool bUpdateRefDev = false;
     971           0 :     bool bCalcAll = false;
     972           0 :     bool bSaveAppOptions = false;
     973           0 :     bool bSaveInputOptions = false;
     974           0 :     bool bCompileErrorCells = false;
     975             : 
     976             :     //  SfxGetpApp()->SetOptions( rOptSet );
     977             : 
     978             :     // No more linguistics
     979           0 :     if (rOptSet.HasItem(SID_ATTR_METRIC, &pItem))
     980             :     {
     981           0 :         PutItem( *pItem );
     982           0 :         pAppCfg->SetAppMetric( (FieldUnit)static_cast<const SfxUInt16Item*>(pItem)->GetValue() );
     983           0 :         bSaveAppOptions = true;
     984             :     }
     985             : 
     986           0 :     if (rOptSet.HasItem(SCITEM_USERLIST, &pItem))
     987             :     {
     988           0 :         ScGlobal::SetUserList( static_cast<const ScUserListItem*>(pItem)->GetUserList() );
     989           0 :         bSaveAppOptions = true;
     990             :     }
     991             : 
     992           0 :     if (rOptSet.HasItem(SID_SC_OPT_SYNCZOOM, &pItem))
     993             :     {
     994           0 :         pAppCfg->SetSynchronizeZoom( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
     995           0 :         bSaveAppOptions = true;
     996             :     }
     997             : 
     998           0 :     if (rOptSet.HasItem(SID_SC_OPT_KEY_BINDING_COMPAT, &pItem))
     999             :     {
    1000           0 :         sal_uInt16 nVal = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
    1001           0 :         ScOptionsUtil::KeyBindingType eOld = pAppCfg->GetKeyBindingType();
    1002           0 :         ScOptionsUtil::KeyBindingType eNew = static_cast<ScOptionsUtil::KeyBindingType>(nVal);
    1003           0 :         if (eOld != eNew)
    1004             :         {
    1005           0 :             pAppCfg->SetKeyBindingType(eNew);
    1006           0 :             bSaveAppOptions = true;
    1007           0 :             pDocSh->ResetKeyBindings(eNew);
    1008             :         }
    1009             :     }
    1010             : 
    1011             :     // DefaultsOptions
    1012           0 :     if (rOptSet.HasItem(SID_SCDEFAULTSOPTIONS, &pItem))
    1013             :     {
    1014           0 :         const ScDefaultsOptions& rOpt = static_cast<const ScTpDefaultsItem*>(pItem)->GetDefaultsOptions();
    1015           0 :         SetDefaultsOptions( rOpt );
    1016             :     }
    1017             : 
    1018             :     // FormulaOptions
    1019           0 :     if (rOptSet.HasItem(SID_SCFORMULAOPTIONS, &pItem))
    1020             :     {
    1021           0 :         const ScFormulaOptions& rOpt = static_cast<const ScTpFormulaItem*>(pItem)->GetFormulaOptions();
    1022             : 
    1023           0 :         if (!pFormulaCfg || (*pFormulaCfg != rOpt))
    1024             :             // Formula options have changed. Repaint the column headers.
    1025           0 :             bRepaint = true;
    1026             : 
    1027           0 :         if (pFormulaCfg && pFormulaCfg->GetUseEnglishFuncName() != rOpt.GetUseEnglishFuncName())
    1028             :         {
    1029             :             // Re-compile formula cells with error as the error may have been
    1030             :             // caused by unresolved function names.
    1031           0 :             bCompileErrorCells = true;
    1032             :         }
    1033             : 
    1034             :         // Recalc for interpreter options changes.
    1035           0 :         if (pFormulaCfg && pFormulaCfg->GetCalcConfig() != rOpt.GetCalcConfig())
    1036           0 :             bCalcAll = true;
    1037             : 
    1038           0 :         if ( pDocSh )
    1039             :         {
    1040           0 :             pDocSh->SetFormulaOptions( rOpt );
    1041           0 :             pDocSh->SetDocumentModified();
    1042             :         }
    1043             : 
    1044             :         // ScDocShell::SetFormulaOptions() may check for changed settings, so
    1045             :         // set the new options here after that has been called.
    1046           0 :         SetFormulaOptions( rOpt );
    1047             :     }
    1048             : 
    1049             :     // ViewOptions
    1050           0 :     if (rOptSet.HasItem(SID_SCVIEWOPTIONS, &pItem))
    1051             :     {
    1052           0 :         const ScViewOptions& rNewOpt = static_cast<const ScTpViewItem*>(pItem)->GetViewOptions();
    1053             : 
    1054           0 :         if ( pViewSh )
    1055             :         {
    1056           0 :             ScViewData&             rViewData = pViewSh->GetViewData();
    1057           0 :             const ScViewOptions&    rOldOpt   = rViewData.GetOptions();
    1058             : 
    1059           0 :             bool bAnchorList = ( rOldOpt.GetOption( VOPT_ANCHOR ) !=
    1060           0 :                                  rNewOpt.GetOption( VOPT_ANCHOR ) );
    1061             : 
    1062           0 :             if ( rOldOpt != rNewOpt )
    1063             :             {
    1064           0 :                 rViewData.SetOptions( rNewOpt ); // Changes rOldOpt
    1065           0 :                 rViewData.GetDocument()->SetViewOptions( rNewOpt );
    1066           0 :                 if (pDocSh)
    1067           0 :                     pDocSh->SetDocumentModified();
    1068           0 :                 bRepaint = true;
    1069             :             }
    1070           0 :             if ( bAnchorList )
    1071           0 :                 pViewSh->UpdateAnchorHandles();
    1072             :         }
    1073           0 :         SetViewOptions( rNewOpt );
    1074           0 :         if (pBindings)
    1075             :         {
    1076           0 :             pBindings->Invalidate(SID_HELPLINES_MOVE);
    1077             :         }
    1078             :     }
    1079             : 
    1080             :     // GridOptions
    1081             :     // Evaluate after ViewOptions, as GridOptions is a member of ViewOptions
    1082           0 :     if ( rOptSet.HasItem(SID_ATTR_GRID_OPTIONS,&pItem) )
    1083             :     {
    1084           0 :         ScGridOptions aNewGridOpt( static_cast<const SvxGridItem&>(*pItem ));
    1085             : 
    1086           0 :         if ( pViewSh )
    1087             :         {
    1088           0 :             ScViewData&          rViewData = pViewSh->GetViewData();
    1089           0 :             ScViewOptions        aNewViewOpt( rViewData.GetOptions() );
    1090           0 :             const ScGridOptions& rOldGridOpt = aNewViewOpt.GetGridOptions();
    1091             : 
    1092           0 :             if ( rOldGridOpt != aNewGridOpt )
    1093             :             {
    1094           0 :                 aNewViewOpt.SetGridOptions( aNewGridOpt );
    1095           0 :                 rViewData.SetOptions( aNewViewOpt );
    1096           0 :                 rViewData.GetDocument()->SetViewOptions( aNewViewOpt );
    1097           0 :                 pDocSh->SetDocumentModified();
    1098           0 :                 bRepaint = true;
    1099           0 :             }
    1100             :         }
    1101           0 :         ScViewOptions aNewViewOpt ( GetViewOptions() );
    1102           0 :         aNewViewOpt.SetGridOptions( aNewGridOpt );
    1103           0 :         SetViewOptions( aNewViewOpt );
    1104           0 :         if (pBindings)
    1105             :         {
    1106           0 :             pBindings->Invalidate(SID_GRID_VISIBLE);
    1107           0 :             pBindings->Invalidate(SID_GRID_USE);
    1108           0 :         }
    1109             :     }
    1110             : 
    1111             :     // DocOptions
    1112           0 :     if ( rOptSet.HasItem(SID_SCDOCOPTIONS,&pItem) )
    1113             :     {
    1114           0 :         const ScDocOptions& rNewOpt = static_cast<const ScTpCalcItem*>(pItem)->GetDocOptions();
    1115             : 
    1116           0 :         if ( pDoc )
    1117             :         {
    1118           0 :             const ScDocOptions& rOldOpt = pDoc->GetDocOptions();
    1119             : 
    1120           0 :             bRepaint = ( bRepaint || ( rOldOpt != rNewOpt )   );
    1121           0 :             bCalcAll =   bRepaint &&
    1122           0 :                          (  rOldOpt.IsIter()       != rNewOpt.IsIter()
    1123           0 :                          || rOldOpt.GetIterCount() != rNewOpt.GetIterCount()
    1124           0 :                          || rOldOpt.GetIterEps()   != rNewOpt.GetIterEps()
    1125           0 :                          || rOldOpt.IsIgnoreCase() != rNewOpt.IsIgnoreCase()
    1126           0 :                          || rOldOpt.IsCalcAsShown() != rNewOpt.IsCalcAsShown()
    1127           0 :                          || (rNewOpt.IsCalcAsShown() &&
    1128           0 :                             rOldOpt.GetStdPrecision() != rNewOpt.GetStdPrecision())
    1129           0 :                          || rOldOpt.IsMatchWholeCell() != rNewOpt.IsMatchWholeCell()
    1130           0 :                          || rOldOpt.GetYear2000()   != rNewOpt.GetYear2000()
    1131           0 :                          || rOldOpt.IsFormulaRegexEnabled() != rNewOpt.IsFormulaRegexEnabled()
    1132           0 :                          );
    1133           0 :             pDoc->SetDocOptions( rNewOpt );
    1134           0 :             pDocSh->SetDocumentModified();
    1135             :         }
    1136           0 :         SetDocOptions( rNewOpt );
    1137             :     }
    1138             : 
    1139             :     // Set TabDistance after the actual DocOptions
    1140           0 :     if ( rOptSet.HasItem(SID_ATTR_DEFTABSTOP,&pItem) )
    1141             :     {
    1142           0 :         sal_uInt16 nTabDist = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
    1143           0 :         ScDocOptions aOpt(GetDocOptions());
    1144           0 :         aOpt.SetTabDistance(nTabDist);
    1145           0 :         SetDocOptions( aOpt );
    1146             : 
    1147           0 :         if ( pDoc )
    1148             :         {
    1149           0 :             ScDocOptions aDocOpt(pDoc->GetDocOptions());
    1150           0 :             aDocOpt.SetTabDistance(nTabDist);
    1151           0 :             pDoc->SetDocOptions( aDocOpt );
    1152           0 :             pDocSh->SetDocumentModified();
    1153           0 :             if(pDoc->GetDrawLayer())
    1154           0 :                 pDoc->GetDrawLayer()->SetDefaultTabulator(nTabDist);
    1155           0 :         }
    1156             :     }
    1157             : 
    1158             :     // AutoSpell after the DocOptions (due to being a member)
    1159           0 :     if ( rOptSet.HasItem(SID_AUTOSPELL_CHECK,&pItem) ) // At DocOptions
    1160             :     {
    1161           0 :         bool bDoAutoSpell = static_cast<const SfxBoolItem*>(pItem)->GetValue();
    1162             : 
    1163           0 :         if (pDoc)
    1164             :         {
    1165           0 :             ScDocOptions aNewOpt = pDoc->GetDocOptions();
    1166           0 :             if ( aNewOpt.IsAutoSpell() != bDoAutoSpell )
    1167             :             {
    1168           0 :                 aNewOpt.SetAutoSpell( bDoAutoSpell );
    1169           0 :                 pDoc->SetDocOptions( aNewOpt );
    1170             : 
    1171           0 :                 if (pViewSh)
    1172           0 :                     pViewSh->EnableAutoSpell(bDoAutoSpell);
    1173             : 
    1174           0 :                 bRepaint = true;            // Because HideAutoSpell might be invalid
    1175             :                                             //TODO: Paint all Views?
    1176           0 :             }
    1177             :         }
    1178             : 
    1179           0 :         if ( bOldAutoSpell != bDoAutoSpell )
    1180           0 :             SetAutoSpellProperty( bDoAutoSpell );
    1181           0 :         if ( pDocSh )
    1182           0 :             pDocSh->PostPaintGridAll();                     // Due to marks
    1183           0 :         ScInputHandler* pInputHandler = GetInputHdl();
    1184           0 :         if ( pInputHandler )
    1185           0 :             pInputHandler->UpdateSpellSettings();           // EditEngine flags
    1186           0 :         if ( pViewSh )
    1187           0 :             pViewSh->UpdateDrawTextOutliner();              // EditEngine flags
    1188             : 
    1189           0 :         if (pBindings)
    1190           0 :             pBindings->Invalidate( SID_AUTOSPELL_CHECK );
    1191             :     }
    1192             : 
    1193             :     // InputOptions
    1194           0 :     if ( rOptSet.HasItem(SID_SC_INPUT_SELECTIONPOS,&pItem) )
    1195             :     {
    1196           0 :         pInputCfg->SetMoveDir( static_cast<const SfxUInt16Item*>(pItem)->GetValue() );
    1197           0 :         bSaveInputOptions = true;
    1198             :     }
    1199           0 :     if ( rOptSet.HasItem(SID_SC_INPUT_SELECTION,&pItem) )
    1200             :     {
    1201           0 :         pInputCfg->SetMoveSelection( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1202           0 :         bSaveInputOptions = true;
    1203             :     }
    1204           0 :     if ( rOptSet.HasItem(SID_SC_INPUT_EDITMODE,&pItem) )
    1205             :     {
    1206           0 :         pInputCfg->SetEnterEdit( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1207           0 :         bSaveInputOptions = true;
    1208             :     }
    1209           0 :     if ( rOptSet.HasItem(SID_SC_INPUT_FMT_EXPAND,&pItem) )
    1210             :     {
    1211           0 :         pInputCfg->SetExtendFormat( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1212           0 :         bSaveInputOptions = true;
    1213             :     }
    1214           0 :     if ( rOptSet.HasItem(SID_SC_INPUT_RANGEFINDER,&pItem) )
    1215             :     {
    1216           0 :         pInputCfg->SetRangeFinder( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1217           0 :         bSaveInputOptions = true;
    1218             :     }
    1219           0 :     if ( rOptSet.HasItem(SID_SC_INPUT_REF_EXPAND,&pItem) )
    1220             :     {
    1221           0 :         pInputCfg->SetExpandRefs( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1222           0 :         bSaveInputOptions = true;
    1223             :     }
    1224           0 :     if (rOptSet.HasItem(SID_SC_OPT_SORT_REF_UPDATE, &pItem))
    1225             :     {
    1226           0 :         pInputCfg->SetSortRefUpdate(static_cast<const SfxBoolItem*>(pItem)->GetValue());
    1227           0 :         bSaveInputOptions = true;
    1228             :     }
    1229             : 
    1230           0 :     if ( rOptSet.HasItem(SID_SC_INPUT_MARK_HEADER,&pItem) )
    1231             :     {
    1232           0 :         pInputCfg->SetMarkHeader( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1233           0 :         bSaveInputOptions = true;
    1234           0 :         bUpdateMarks = true;
    1235             :     }
    1236           0 :     if ( rOptSet.HasItem(SID_SC_INPUT_TEXTWYSIWYG,&pItem) )
    1237             :     {
    1238           0 :         bool bNew = static_cast<const SfxBoolItem*>(pItem)->GetValue();
    1239           0 :         if ( bNew != pInputCfg->GetTextWysiwyg() )
    1240             :         {
    1241           0 :             pInputCfg->SetTextWysiwyg( bNew );
    1242           0 :             bSaveInputOptions = true;
    1243           0 :             bUpdateRefDev = true;
    1244             :         }
    1245             :     }
    1246           0 :     if( rOptSet.HasItem( SID_SC_INPUT_REPLCELLSWARN, &pItem ) )
    1247             :     {
    1248           0 :         pInputCfg->SetReplaceCellsWarn( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1249           0 :         bSaveInputOptions = true;
    1250             :     }
    1251             : 
    1252           0 :     if( rOptSet.HasItem( SID_SC_INPUT_LEGACY_CELL_SELECTION, &pItem ) )
    1253             :     {
    1254           0 :         pInputCfg->SetLegacyCellSelection( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
    1255           0 :         bSaveInputOptions = true;
    1256             :     }
    1257             : 
    1258             :     // PrintOptions
    1259           0 :     if ( rOptSet.HasItem(SID_SCPRINTOPTIONS,&pItem) )
    1260             :     {
    1261           0 :         const ScPrintOptions& rNewOpt = static_cast<const ScTpPrintItem*>(pItem)->GetPrintOptions();
    1262           0 :         SetPrintOptions( rNewOpt );
    1263             : 
    1264             :         // broadcast causes all previews to recalc page numbers
    1265           0 :         SfxGetpApp()->Broadcast( SfxSimpleHint( SID_SCPRINTOPTIONS ) );
    1266             :     }
    1267             : 
    1268           0 :     if ( bSaveAppOptions )
    1269           0 :         pAppCfg->OptionsChanged();
    1270             : 
    1271           0 :     if ( bSaveInputOptions )
    1272           0 :         pInputCfg->OptionsChanged();
    1273             : 
    1274             :     // Kick off recalculation?
    1275           0 :     if (pDoc && bCompileErrorCells)
    1276             :     {
    1277             :         // Re-compile cells with name error, and recalc if at least one cell
    1278             :         // has been re-compiled.  In the future we may want to find a way to
    1279             :         // recalc only those that are affected.
    1280           0 :         if (pDoc->CompileErrorCells(ScErrorCodes::errNoName))
    1281           0 :             bCalcAll = true;
    1282             :     }
    1283             : 
    1284           0 :     if ( pDoc && bCalcAll )
    1285             :     {
    1286           0 :         WaitObject aWait( pDocSh->GetActiveDialogParent() );
    1287           0 :         pDoc->CalcAll();
    1288           0 :         if ( pViewSh )
    1289           0 :             pViewSh->UpdateCharts( true );
    1290             :         else
    1291           0 :             ScDBFunc::DoUpdateCharts( ScAddress(), pDoc, true );
    1292           0 :         if (pBindings)
    1293           0 :             pBindings->Invalidate( SID_ATTR_SIZE ); //SvxPosSize StatusControl Update
    1294             :     }
    1295             : 
    1296           0 :     if ( pViewSh && bUpdateMarks )
    1297           0 :         pViewSh->UpdateAutoFillMark();
    1298             : 
    1299             :     // Repaint View?
    1300           0 :     if ( pViewSh && bRepaint )
    1301             :     {
    1302           0 :         pViewSh->UpdateFixPos();
    1303           0 :         pViewSh->PaintGrid();
    1304           0 :         pViewSh->PaintTop();
    1305           0 :         pViewSh->PaintLeft();
    1306           0 :         pViewSh->PaintExtras();
    1307           0 :         pViewSh->InvalidateBorder();
    1308           0 :         if (pBindings)
    1309             :         {
    1310           0 :             pBindings->Invalidate( FID_TOGGLEHEADERS ); // -> Checks in menu
    1311           0 :             pBindings->Invalidate( FID_TOGGLESYNTAX );
    1312             :         }
    1313             :     }
    1314             : 
    1315             :     // update ref device (for all documents)
    1316           0 :     if ( bUpdateRefDev )
    1317             :     {
    1318             :         // for all documents: recalc output factor, update row heights
    1319           0 :         SfxObjectShell* pObjSh = SfxObjectShell::GetFirst();
    1320           0 :         while ( pObjSh )
    1321             :         {
    1322           0 :             if ( pObjSh->Type() == TYPE(ScDocShell) )
    1323             :             {
    1324           0 :                 ScDocShell* pOneDocSh = static_cast<ScDocShell*>(pObjSh);
    1325           0 :                 pOneDocSh->CalcOutputFactor();
    1326           0 :                 SCTAB nTabCount = pOneDocSh->GetDocument().GetTableCount();
    1327           0 :                 for (SCTAB nTab=0; nTab<nTabCount; nTab++)
    1328           0 :                     pOneDocSh->AdjustRowHeight( 0, MAXROW, nTab );
    1329             :             }
    1330           0 :             pObjSh = SfxObjectShell::GetNext( *pObjSh );
    1331             :         }
    1332             : 
    1333             :         // for all (tab-) views:
    1334           0 :         TypeId aScType = TYPE(ScTabViewShell);
    1335           0 :         SfxViewShell* pSh = SfxViewShell::GetFirst( &aScType );
    1336           0 :         while ( pSh )
    1337             :         {
    1338           0 :             ScTabViewShell* pOneViewSh = static_cast<ScTabViewShell*>(pSh);
    1339             : 
    1340             :             // set ref-device for EditEngine
    1341           0 :             ScInputHandler* pHdl = GetInputHdl(pOneViewSh);
    1342           0 :             if (pHdl)
    1343           0 :                 pHdl->UpdateRefDevice();
    1344             : 
    1345             :             // update view scale
    1346           0 :             ScViewData& rViewData = pOneViewSh->GetViewData();
    1347           0 :             pOneViewSh->SetZoom( rViewData.GetZoomX(), rViewData.GetZoomY(), false );
    1348             : 
    1349             :             // repaint
    1350           0 :             pOneViewSh->PaintGrid();
    1351           0 :             pOneViewSh->PaintTop();
    1352           0 :             pOneViewSh->PaintLeft();
    1353             : 
    1354           0 :             pSh = SfxViewShell::GetNext( *pSh, &aScType );
    1355             :         }
    1356             :     }
    1357           0 : }
    1358             : 
    1359             : /**
    1360             :  * Input-Handler
    1361             :  */
    1362       31338 : ScInputHandler* ScModule::GetInputHdl( ScTabViewShell* pViewSh, bool bUseRef )
    1363             : {
    1364       31338 :     if ( pRefInputHandler && bUseRef )
    1365           0 :         return pRefInputHandler;
    1366             : 
    1367       31338 :     ScInputHandler* pHdl = NULL;
    1368       31338 :     if ( !pViewSh )
    1369             :     {
    1370             :         // in case a UIActive embedded object has no ViewShell (UNO component)
    1371             :         // the own calc view shell will be set as current, but no handling should happen
    1372       24814 :         ScTabViewShell* pCurViewSh = PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
    1373       24814 :         if ( pCurViewSh && !pCurViewSh->GetUIActiveClient() )
    1374       22632 :             pViewSh = pCurViewSh;
    1375             :     }
    1376             : 
    1377       31338 :     if ( pViewSh )
    1378       29156 :         pHdl = pViewSh->GetInputHandler(); // Viewshell always has one, from now on
    1379             : 
    1380             :     // If no ViewShell passed or active, we can get NULL
    1381             :     OSL_ENSURE( pHdl || !pViewSh, "GetInputHdl: no InputHandler found!" );
    1382       31338 :     return pHdl;
    1383             : }
    1384             : 
    1385         542 : void ScModule::ViewShellChanged()
    1386             : {
    1387         542 :     ScInputHandler* pHdl   = GetInputHdl();
    1388         542 :     ScTabViewShell* pShell = ScTabViewShell::GetActiveViewShell();
    1389         542 :     if ( pShell && pHdl )
    1390         542 :         pShell->UpdateInputHandler();
    1391         542 : }
    1392             : 
    1393           0 : void ScModule::SetInputMode( ScInputMode eMode, const OUString* pInitText )
    1394             : {
    1395           0 :     ScInputHandler* pHdl = GetInputHdl();
    1396           0 :     if (pHdl)
    1397           0 :         pHdl->SetMode(eMode, pInitText);
    1398           0 : }
    1399             : 
    1400          70 : bool ScModule::IsEditMode()
    1401             : {
    1402          70 :     ScInputHandler* pHdl = GetInputHdl();
    1403          70 :     return pHdl && pHdl->IsEditMode();
    1404             : }
    1405             : 
    1406           0 : bool ScModule::IsInputMode()
    1407             : {
    1408           0 :     ScInputHandler* pHdl = GetInputHdl();
    1409           0 :     return pHdl && pHdl->IsInputMode();
    1410             : }
    1411             : 
    1412           0 : bool ScModule::InputKeyEvent( const KeyEvent& rKEvt, bool bStartEdit )
    1413             : {
    1414           0 :     ScInputHandler* pHdl = GetInputHdl();
    1415           0 :     return pHdl && pHdl->KeyInput( rKEvt, bStartEdit );
    1416             : }
    1417             : 
    1418         202 : void ScModule::InputEnterHandler( sal_uInt8 nBlockMode )
    1419             : {
    1420         202 :     if ( !SfxGetpApp()->IsDowning() ) // Not when quitting the program
    1421             :     {
    1422         202 :         ScInputHandler* pHdl = GetInputHdl();
    1423         202 :         if (pHdl)
    1424         202 :             pHdl->EnterHandler( nBlockMode );
    1425             :     }
    1426         202 : }
    1427             : 
    1428           0 : void ScModule::InputCancelHandler()
    1429             : {
    1430           0 :     ScInputHandler* pHdl = GetInputHdl();
    1431           0 :     if (pHdl)
    1432           0 :         pHdl->CancelHandler();
    1433           0 : }
    1434             : 
    1435           0 : void ScModule::InputSelection( EditView* pView )
    1436             : {
    1437           0 :     ScInputHandler* pHdl = GetInputHdl();
    1438           0 :     if (pHdl)
    1439           0 :         pHdl->InputSelection( pView );
    1440           0 : }
    1441             : 
    1442           0 : void ScModule::InputChanged( EditView* pView )
    1443             : {
    1444           0 :     ScInputHandler* pHdl = GetInputHdl();
    1445           0 :     if (pHdl)
    1446           0 :         pHdl->InputChanged( pView );
    1447           0 : }
    1448             : 
    1449         546 : void ScModule::ViewShellGone( ScTabViewShell* pViewSh )
    1450             : {
    1451         546 :     ScInputHandler* pHdl = GetInputHdl();
    1452         546 :     if (pHdl)
    1453          16 :         pHdl->ViewShellGone( pViewSh );
    1454         546 : }
    1455             : 
    1456           0 : void ScModule::SetRefInputHdl( ScInputHandler* pNew )
    1457             : {
    1458           0 :     pRefInputHandler = pNew;
    1459           0 : }
    1460             : 
    1461           0 : void ScModule::InputGetSelection( sal_Int32& rStart, sal_Int32& rEnd )
    1462             : {
    1463           0 :     ScInputHandler* pHdl = GetInputHdl();
    1464           0 :     if (pHdl)
    1465           0 :         pHdl->InputGetSelection( rStart, rEnd );
    1466           0 : }
    1467             : 
    1468           0 : void ScModule::InputSetSelection( sal_Int32 nStart, sal_Int32 nEnd )
    1469             : {
    1470           0 :     ScInputHandler* pHdl = GetInputHdl();
    1471           0 :     if (pHdl)
    1472           0 :         pHdl->InputSetSelection( nStart, nEnd );
    1473           0 : }
    1474             : 
    1475           0 : void ScModule::InputReplaceSelection( const OUString& rStr )
    1476             : {
    1477           0 :     ScInputHandler* pHdl = GetInputHdl();
    1478           0 :     if (pHdl)
    1479           0 :         pHdl->InputReplaceSelection( rStr );
    1480           0 : }
    1481             : 
    1482           0 : void ScModule::InputTurnOffWinEngine()
    1483             : {
    1484           0 :     ScInputHandler* pHdl = GetInputHdl();
    1485           0 :     if (pHdl)
    1486           0 :         pHdl->InputTurnOffWinEngine();
    1487           0 : }
    1488             : 
    1489           0 : OUString ScModule::InputGetFormulaStr()
    1490             : {
    1491           0 :     ScInputHandler* pHdl = GetInputHdl();
    1492           0 :     OUString aStr;
    1493           0 :     if ( pHdl )
    1494           0 :         aStr = pHdl->GetFormString();
    1495           0 :     return aStr;
    1496             : }
    1497             : 
    1498           0 : void ScModule::ActivateInputWindow( const OUString* pStrFormula, bool bMatrix )
    1499             : {
    1500           0 :     ScInputHandler* pHdl = GetInputHdl();
    1501           0 :     if ( pHdl )
    1502             :     {
    1503           0 :         ScInputWindow* pWin = pHdl->GetInputWindow();
    1504           0 :         if ( pStrFormula )
    1505             :         {
    1506             :             // Take over formula
    1507           0 :             if ( pWin )
    1508             :             {
    1509           0 :                 pWin->SetFuncString( *pStrFormula, false );
    1510             :                 // SetSumAssignMode due to sal_False not necessary
    1511             :             }
    1512           0 :             sal_uInt8 nMode = bMatrix ? SC_ENTER_MATRIX : SC_ENTER_NORMAL;
    1513           0 :             pHdl->EnterHandler( nMode );
    1514             : 
    1515             :             // Without Invalidate the selection remains active, if the formula has not changed
    1516           0 :             if (pWin)
    1517           0 :                 pWin->TextInvalidate();
    1518             :         }
    1519             :         else
    1520             :         {
    1521             :             // Cancel
    1522           0 :             if ( pWin )
    1523             :             {
    1524           0 :                 pWin->SetFuncString( EMPTY_OUSTRING, false );
    1525             :                 // SetSumAssignMode due to sal_False no necessary
    1526             :             }
    1527           0 :             pHdl->CancelHandler();
    1528             :         }
    1529             :     }
    1530           0 : }
    1531             : 
    1532             : /**
    1533             :  * Reference dialogs
    1534             :  */
    1535           0 : void ScModule::SetRefDialog( sal_uInt16 nId, bool bVis, SfxViewFrame* pViewFrm )
    1536             : {
    1537             :     //TODO: Move reference dialog handling to view
    1538             :     //      Just keep function autopilot here for references to other documents
    1539           0 :     if(nCurRefDlgId==0 || (nId==nCurRefDlgId && !bVis))
    1540             :     {
    1541           0 :         if ( !pViewFrm )
    1542           0 :             pViewFrm = SfxViewFrame::Current();
    1543             : 
    1544             :         // bindings update causes problems with update of stylist if
    1545             :         // current style family has changed
    1546             :         //if ( pViewFrm )
    1547             :         //  pViewFrm->GetBindings().Update();       // to avoid trouble in LockDispatcher
    1548             : 
    1549           0 :         nCurRefDlgId = bVis ? nId : 0 ;             // before SetChildWindow
    1550             : 
    1551           0 :         if ( pViewFrm )
    1552             :         {
    1553             :             //  store the dialog id also in the view shell
    1554           0 :             SfxViewShell* pViewSh = pViewFrm->GetViewShell();
    1555           0 :             if ( pViewSh && pViewSh->ISA( ScTabViewShell ) )
    1556           0 :                 static_cast<ScTabViewShell*>(pViewSh)->SetCurRefDlgId( nCurRefDlgId );
    1557             :             else
    1558             :             {
    1559             :                 // no ScTabViewShell - possible for example from a Basic macro
    1560           0 :                 bVis = false;
    1561           0 :                 nCurRefDlgId = 0;   // don't set nCurRefDlgId if no dialog is created
    1562             :             }
    1563             : 
    1564           0 :             pViewFrm->SetChildWindow( nId, bVis );
    1565             :         }
    1566             : 
    1567           0 :         SfxApplication* pSfxApp = SfxGetpApp();
    1568           0 :         pSfxApp->Broadcast( SfxSimpleHint( FID_REFMODECHANGED ) );
    1569             :     }
    1570           0 : }
    1571             : 
    1572           0 : static SfxChildWindow* lcl_GetChildWinFromAnyView( sal_uInt16 nId )
    1573             : {
    1574             :     // First, try the current view
    1575           0 :     SfxViewFrame* pViewFrm = SfxViewFrame::Current();
    1576             : 
    1577             :     // #i46999# current view frame can be null (for example, when closing help)
    1578           0 :     SfxChildWindow* pChildWnd = pViewFrm ? pViewFrm->GetChildWindow( nId ) : NULL;
    1579           0 :     if ( pChildWnd )
    1580           0 :         return pChildWnd;           // found in the current view
    1581             : 
    1582             :     //  if not found there, get the child window from any open view
    1583             :     //  it can be open only in one view because nCurRefDlgId is global
    1584             : 
    1585           0 :     pViewFrm = SfxViewFrame::GetFirst();
    1586           0 :     while ( pViewFrm )
    1587             :     {
    1588           0 :         pChildWnd = pViewFrm->GetChildWindow( nId );
    1589           0 :         if ( pChildWnd )
    1590           0 :             return pChildWnd;       // found in any view
    1591             : 
    1592           0 :         pViewFrm = SfxViewFrame::GetNext( *pViewFrm );
    1593             :     }
    1594             : 
    1595           0 :     return NULL;                    // none found
    1596             : }
    1597             : 
    1598           0 : bool ScModule::IsModalMode(SfxObjectShell* pDocSh)
    1599             : {
    1600             :     //TODO: Move reference dialog handling to view
    1601             :     //      Just keep function autopilot here for references to other documents
    1602           0 :     bool bIsModal = false;
    1603             : 
    1604           0 :     if ( nCurRefDlgId )
    1605             :     {
    1606           0 :         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
    1607           0 :         ScAnyRefModalDlg* pModalDlg = GetCurrentAnyRefDlg();
    1608           0 :         if ( pChildWnd )
    1609             :         {
    1610           0 :             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
    1611             :             assert(pRefDlg);
    1612           0 :             bIsModal = pChildWnd->IsVisible() && pRefDlg &&
    1613           0 :                 !( pRefDlg->IsRefInputMode() && pRefDlg->IsDocAllowed(pDocSh) );
    1614             :         }
    1615           0 :         else if(pModalDlg)
    1616             :         {
    1617           0 :             bIsModal = pModalDlg->IsVisible() && !(pModalDlg->IsRefInputMode() && pModalDlg->IsDocAllowed(pDocSh) );
    1618             :         }
    1619             :         else
    1620             :         {
    1621             :             // in 592 and above, the dialog isn't visible in other views
    1622             :             //  if the dialog is open but can't be accessed, disable input
    1623           0 :             bIsModal = true;
    1624             :         }
    1625             : 
    1626             :         //  pChildWnd can be 0 if the dialog has not been created by another Shell yet after
    1627             :         //  switching over(e.g. in GetFocus())
    1628             :     }
    1629           0 :     else if (pDocSh)
    1630             :     {
    1631           0 :         ScInputHandler* pHdl = GetInputHdl();
    1632           0 :         if ( pHdl )
    1633           0 :             bIsModal = pHdl->IsModalMode(pDocSh);
    1634             :     }
    1635             : 
    1636           0 :     return bIsModal;
    1637             : }
    1638             : 
    1639           0 : bool ScModule::IsTableLocked()
    1640             : {
    1641             :     //TODO: Move reference dialog handling to view
    1642             :     //      Just keep function autopilot here for references to other documents
    1643           0 :     bool bLocked = false;
    1644             : 
    1645             :     // Up until now just for ScAnyRefDlg
    1646           0 :     if ( nCurRefDlgId )
    1647             :     {
    1648           0 :         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
    1649           0 :         ScAnyRefModalDlg* pModalDlg = GetCurrentAnyRefDlg();
    1650           0 :         if ( pChildWnd )
    1651             :         {
    1652           0 :             IAnyRefDialog* pRefDlg(dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow()));
    1653             :             assert(pRefDlg);
    1654           0 :             if(pRefDlg)
    1655             :             {
    1656           0 :                 bLocked = pRefDlg->IsTableLocked();
    1657             :             }
    1658             :         }
    1659           0 :         else if( pModalDlg )
    1660           0 :             bLocked = pModalDlg->IsTableLocked();
    1661             :         else
    1662           0 :             bLocked = true;     // for other views, see IsModalMode
    1663             :     }
    1664             : 
    1665           0 :     return bLocked;
    1666             : }
    1667             : 
    1668        5249 : bool ScModule::IsRefDialogOpen()
    1669             : {
    1670             :     //TODO: Move reference dialog handling to view
    1671             :     //      Just keep function autopilot here for references to other documents
    1672        5249 :     bool bIsOpen = false;
    1673             : 
    1674        5249 :     if ( nCurRefDlgId )
    1675             :     {
    1676           0 :         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
    1677           0 :         ScAnyRefModalDlg* pModalDlg = GetCurrentAnyRefDlg();
    1678           0 :         if ( pChildWnd )
    1679           0 :             bIsOpen = pChildWnd->IsVisible();
    1680           0 :         else if(pModalDlg)
    1681           0 :             bIsOpen = pModalDlg->IsVisible();
    1682             :         else
    1683           0 :             bIsOpen = true;     // for other views, see IsModalMode
    1684             :     }
    1685             : 
    1686        5249 :     return bIsOpen;
    1687             : }
    1688             : 
    1689        7350 : bool ScModule::IsFormulaMode()
    1690             : {
    1691             :     //TODO: Move reference dialog handling to view
    1692             :     //      Just keep function autopilot here for references to other documents
    1693        7350 :     bool bIsFormula = false;
    1694             : 
    1695        7350 :     if ( nCurRefDlgId )
    1696             :     {
    1697           0 :         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
    1698           0 :         ScAnyRefModalDlg* pModalDlg = GetCurrentAnyRefDlg();
    1699           0 :         if ( pChildWnd )
    1700             :         {
    1701           0 :             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
    1702             :             assert(pRefDlg);
    1703           0 :             bIsFormula = pChildWnd->IsVisible() && pRefDlg && pRefDlg->IsRefInputMode();
    1704             :         }
    1705           0 :         else if(pModalDlg)
    1706             :         {
    1707           0 :             bIsFormula = pModalDlg->IsVisible() && pModalDlg->IsRefInputMode();
    1708             :         }
    1709             :         else
    1710           0 :             bIsFormula = true;
    1711             :     }
    1712             :     else
    1713             :     {
    1714        7350 :         ScInputHandler* pHdl = GetInputHdl();
    1715        7350 :         if ( pHdl )
    1716        6286 :             bIsFormula = pHdl->IsFormulaMode();
    1717             :     }
    1718             : 
    1719        7350 :     if (bIsInEditCommand)
    1720           0 :         bIsFormula = true;
    1721             : 
    1722        7350 :     return bIsFormula;
    1723             : }
    1724             : 
    1725           0 : static void lcl_MarkedTabs( const ScMarkData& rMark, SCTAB& rStartTab, SCTAB& rEndTab )
    1726             : {
    1727           0 :     if (rMark.GetSelectCount() > 1)
    1728             :     {
    1729           0 :         rEndTab = rMark.GetLastSelected();
    1730           0 :         rStartTab = rMark.GetFirstSelected();
    1731             :     }
    1732           0 : }
    1733             : 
    1734           0 : void ScModule::SetReference( const ScRange& rRef, ScDocument* pDoc,
    1735             :                                     const ScMarkData* pMarkData )
    1736             : {
    1737             :     //TODO: Move reference dialog handling to view
    1738             :     //      Just keep function autopilot here for references to other documents
    1739             : 
    1740             :     // In RefDialogs we also trigger the ZoomIn, if the Ref's Start and End are different
    1741           0 :     ScRange aNew = rRef;
    1742           0 :     aNew.Justify(); // Always in the right direction
    1743             : 
    1744           0 :     if( nCurRefDlgId )
    1745             :     {
    1746           0 :         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
    1747           0 :         ScAnyRefModalDlg* pModalDlg = GetCurrentAnyRefDlg();
    1748             :         OSL_ENSURE( pChildWnd || pModalDlg, "NoChildWin" );
    1749           0 :         if ( pChildWnd )
    1750             :         {
    1751           0 :             if ( nCurRefDlgId == SID_OPENDLG_CONSOLIDATE && pMarkData )
    1752             :             {
    1753           0 :                 SCTAB nStartTab = aNew.aStart.Tab();
    1754           0 :                 SCTAB nEndTab   = aNew.aEnd.Tab();
    1755           0 :                 lcl_MarkedTabs( *pMarkData, nStartTab, nEndTab );
    1756           0 :                 aNew.aStart.SetTab(nStartTab);
    1757           0 :                 aNew.aEnd.SetTab(nEndTab);
    1758             :             }
    1759             : 
    1760           0 :             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
    1761             :             assert(pRefDlg);
    1762           0 :             if(pRefDlg)
    1763             :             {
    1764             :                 // hide the (color) selection now instead of later from LoseFocus,
    1765             :                 // don't abort the ref input that causes this call (bDoneRefMode = sal_False)
    1766           0 :                 pRefDlg->HideReference( false );
    1767           0 :                 pRefDlg->SetReference( aNew, pDoc );
    1768             :             }
    1769             :         }
    1770           0 :         else if(pModalDlg)
    1771             :         {
    1772             :             // hide the (color) selection now instead of later from LoseFocus,
    1773             :             // don't abort the ref input that causes this call (bDoneRefMode = sal_False)
    1774           0 :             pModalDlg->HideReference( false );
    1775           0 :             pModalDlg->SetReference( aNew, pDoc );
    1776             :         }
    1777             :     }
    1778             :     else
    1779             :     {
    1780           0 :         ScInputHandler* pHdl = GetInputHdl();
    1781           0 :         if (pHdl)
    1782           0 :             pHdl->SetReference( aNew, pDoc );
    1783             :         else
    1784             :         {
    1785             :             OSL_FAIL("SetReference without receiver");
    1786             :         }
    1787             :     }
    1788           0 : }
    1789             : 
    1790             : /**
    1791             :  * Multiple selecton
    1792             :  */
    1793           0 : void ScModule::AddRefEntry()
    1794             : {
    1795             :     //TODO: Move reference dialog handling to view
    1796             :     //      Just keep function autopilot here for references to other documents
    1797           0 :     if ( nCurRefDlgId )
    1798             :     {
    1799           0 :         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
    1800           0 :         ScAnyRefModalDlg* pModalDlg = GetCurrentAnyRefDlg();
    1801             :         OSL_ENSURE( pChildWnd || pModalDlg, "NoChildWin" );
    1802           0 :         if ( pChildWnd )
    1803             :         {
    1804           0 :             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
    1805             :             assert(pRefDlg);
    1806           0 :             if(pRefDlg)
    1807             :             {
    1808           0 :                 pRefDlg->AddRefEntry();
    1809             :             }
    1810             :         }
    1811           0 :         else if(pModalDlg)
    1812           0 :             pModalDlg->AddRefEntry();
    1813             :     }
    1814             :     else
    1815             :     {
    1816           0 :         ScInputHandler* pHdl = GetInputHdl();
    1817           0 :         if (pHdl)
    1818           0 :             pHdl->AddRefEntry();
    1819             :     }
    1820           0 : }
    1821             : 
    1822           0 : void ScModule::EndReference()
    1823             : {
    1824             :     //TODO: Move reference dialog handling to view
    1825             :     //      Just keep function autopilot here for references to other documents
    1826             : 
    1827             :     // We also annul the ZoomIn again in RefDialogs
    1828             : 
    1829             :     //FIXME: ShowRefFrame at InputHdl, if the Function AutoPilot is open?
    1830           0 :     if ( nCurRefDlgId )
    1831             :     {
    1832           0 :         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
    1833           0 :         ScAnyRefModalDlg* pModalDlg = GetCurrentAnyRefDlg();
    1834             :         OSL_ENSURE( pChildWnd || pModalDlg, "NoChildWin" );
    1835           0 :         if ( pChildWnd )
    1836             :         {
    1837           0 :             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
    1838             :             assert(pRefDlg);
    1839           0 :             if(pRefDlg)
    1840             :             {
    1841           0 :                 pRefDlg->SetActive();
    1842             :             }
    1843             :         }
    1844           0 :         else if (pModalDlg)
    1845           0 :             pModalDlg->SetActive();
    1846             :     }
    1847           0 : }
    1848             : 
    1849             : /**
    1850             :  * Idle/OnlineSpelling
    1851             :  */
    1852       17482 : void ScModule::AnythingChanged()
    1853             : {
    1854       17482 :     sal_uLong nOldTime = aIdleTimer.GetTimeout();
    1855       17482 :     if ( nOldTime != SC_IDLE_MIN )
    1856           2 :         aIdleTimer.SetTimeout( SC_IDLE_MIN );
    1857             : 
    1858       17482 :     nIdleCount = 0;
    1859       17482 : }
    1860             : 
    1861           0 : static void lcl_CheckNeedsRepaint( ScDocShell* pDocShell )
    1862             : {
    1863           0 :     SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pDocShell );
    1864           0 :     while ( pFrame )
    1865             :     {
    1866           0 :         SfxViewShell* p = pFrame->GetViewShell();
    1867           0 :         ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell,p);
    1868           0 :         if ( pViewSh )
    1869           0 :             pViewSh->CheckNeedsRepaint();
    1870           0 :         pFrame = SfxViewFrame::GetNext( *pFrame, pDocShell );
    1871             :     }
    1872           0 : }
    1873             : 
    1874        9384 : IMPL_LINK_NOARG(ScModule, IdleHandler)
    1875             : {
    1876        4692 :     if ( Application::AnyInput( VCL_INPUT_MOUSEANDKEYBOARD ) )
    1877             :     {
    1878           0 :         aIdleTimer.Start(); // Timeout unchanged
    1879           0 :         return 0;
    1880             :     }
    1881             : 
    1882        4692 :     bool bMore = false;
    1883        4692 :     bool bAutoSpell = false;
    1884        4692 :     ScDocShell* pDocSh = dynamic_cast<ScDocShell*>(SfxObjectShell::Current());
    1885             : 
    1886        4692 :     if ( pDocSh )
    1887             :     {
    1888        1325 :         ScDocument& rDoc = pDocSh->GetDocument();
    1889        1325 :         bAutoSpell = rDoc.GetDocOptions().IsAutoSpell();
    1890        1325 :         if (pDocSh->IsReadOnly())
    1891           0 :             bAutoSpell = false;
    1892             : 
    1893        1325 :         sc::DocumentLinkManager& rLinkMgr = rDoc.GetDocLinkManager();
    1894        1325 :         bool bLinks = rLinkMgr.idleCheckLinks();
    1895        1325 :         bool bWidth = rDoc.IdleCalcTextWidth();
    1896             : 
    1897        1325 :         bMore = bLinks || bWidth; // Still something at all?
    1898             : 
    1899             :         // While calculating a Basic formula, a paint event may have occurred,
    1900             :         // so check the bNeedsRepaint flags for this document's views
    1901        1325 :         if (bWidth)
    1902           0 :             lcl_CheckNeedsRepaint( pDocSh );
    1903             :     }
    1904             : 
    1905        4692 :     if (bAutoSpell)
    1906             :     {
    1907        1323 :         ScTabViewShell* pViewSh = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current());
    1908        1323 :         if (pViewSh)
    1909             :         {
    1910        1016 :             bool bSpell = pViewSh->ContinueOnlineSpelling();
    1911        1016 :             if (bSpell)
    1912             :             {
    1913         214 :                 aSpellTimer.Start();
    1914         214 :                 bMore = true;
    1915             :             }
    1916             :         }
    1917             :     }
    1918             : 
    1919        4692 :     sal_uLong nOldTime = aIdleTimer.GetTimeout();
    1920        4692 :     sal_uLong nNewTime = nOldTime;
    1921        4692 :     if ( bMore )
    1922             :     {
    1923         214 :         nNewTime = SC_IDLE_MIN;
    1924         214 :         nIdleCount = 0;
    1925             :     }
    1926             :     else
    1927             :     {
    1928             :         // Set SC_IDLE_COUNT to initial Timeout - increase afterwards
    1929        4478 :         if ( nIdleCount < SC_IDLE_COUNT )
    1930        4368 :             ++nIdleCount;
    1931             :         else
    1932             :         {
    1933         110 :             nNewTime += SC_IDLE_STEP;
    1934         110 :             if ( nNewTime > SC_IDLE_MAX )
    1935           0 :                 nNewTime = SC_IDLE_MAX;
    1936             :         }
    1937             :     }
    1938        4692 :     if ( nNewTime != nOldTime )
    1939         110 :         aIdleTimer.SetTimeout( nNewTime );
    1940             : 
    1941        4692 :     aIdleTimer.Start();
    1942        4692 :     return 0;
    1943             : }
    1944             : 
    1945        1608 : IMPL_LINK_NOARG(ScModule, SpellTimerHdl)
    1946             : {
    1947         804 :     if ( Application::AnyInput( VCL_INPUT_KEYBOARD ) )
    1948             :     {
    1949           0 :         aSpellTimer.Start();
    1950           0 :         return 0; // Later again ...
    1951             :     }
    1952             : 
    1953         804 :     ScTabViewShell* pViewSh = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current());
    1954         804 :     if (pViewSh)
    1955             :     {
    1956         768 :         if (pViewSh->ContinueOnlineSpelling())
    1957         693 :             aSpellTimer.Start();
    1958             :     }
    1959         804 :     return 0;
    1960             : }
    1961             : 
    1962             : /**
    1963             :  * Virtual methods for the OptionsDialog
    1964             :  */
    1965           0 : SfxItemSet*  ScModule::CreateItemSet( sal_uInt16 nId )
    1966             : {
    1967           0 :     SfxItemSet*  pRet = 0;
    1968           0 :     if(SID_SC_EDITOPTIONS == nId)
    1969             :     {
    1970           0 :         pRet = new SfxItemSet( GetPool(),
    1971             :                             // TP_CALC:
    1972             :                             SID_SCDOCOPTIONS,       SID_SCDOCOPTIONS,
    1973             :                             // TP_VIEW:
    1974             :                             SID_SCVIEWOPTIONS,      SID_SCVIEWOPTIONS,
    1975             :                             SID_SC_OPT_SYNCZOOM,    SID_SC_OPT_SYNCZOOM,
    1976             :                             // TP_INPUT:
    1977             :                             SID_SC_INPUT_SELECTION,SID_SC_INPUT_MARK_HEADER,
    1978             :                             SID_SC_INPUT_TEXTWYSIWYG,SID_SC_INPUT_TEXTWYSIWYG,
    1979             :                             SID_SC_INPUT_REPLCELLSWARN,SID_SC_INPUT_REPLCELLSWARN,
    1980             :                             SID_SC_INPUT_LEGACY_CELL_SELECTION,SID_SC_OPT_SORT_REF_UPDATE,
    1981             :                             // TP_USERLISTS:
    1982             :                             SCITEM_USERLIST,        SCITEM_USERLIST,
    1983             :                             // TP_PRINT:
    1984             :                             SID_SCPRINTOPTIONS, SID_SCPRINTOPTIONS,
    1985             :                             // TP_GRID:
    1986             :                             SID_ATTR_GRID_OPTIONS, SID_ATTR_GRID_OPTIONS,
    1987             : 
    1988             :                             SID_ATTR_METRIC,        SID_ATTR_METRIC,
    1989             :                             SID_ATTR_DEFTABSTOP,    SID_ATTR_DEFTABSTOP,
    1990             :                             // TP_COMPATIBILITY
    1991             :                             SID_SC_OPT_KEY_BINDING_COMPAT, SID_SC_OPT_KEY_BINDING_COMPAT,
    1992             :                             // TP_DEFAULTS
    1993             :                             SID_SCDEFAULTSOPTIONS, SID_SCDEFAULTSOPTIONS,
    1994             :                             // TP_FORMULA
    1995             :                             SID_SCFORMULAOPTIONS, SID_SCFORMULAOPTIONS,
    1996           0 :                             0 );
    1997             : 
    1998           0 :         const ScAppOptions& rAppOpt = GetAppOptions();
    1999             : 
    2000           0 :         ScDocShell*     pDocSh = PTR_CAST(ScDocShell,
    2001             :                                             SfxObjectShell::Current());
    2002             :         ScDocOptions    aCalcOpt = pDocSh
    2003           0 :                             ? pDocSh->GetDocument().GetDocOptions()
    2004           0 :                             : GetDocOptions();
    2005             : 
    2006           0 :         ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell,
    2007             :                                             SfxViewShell::Current());
    2008             :         ScViewOptions   aViewOpt = pViewSh
    2009           0 :                             ? pViewSh->GetViewData().GetOptions()
    2010           0 :                             : GetViewOptions();
    2011             : 
    2012           0 :         ScUserListItem  aULItem( SCITEM_USERLIST );
    2013           0 :         ScUserList*     pUL = ScGlobal::GetUserList();
    2014             : 
    2015             :         //  SfxGetpApp()->GetOptions( aSet );
    2016             : 
    2017             :         pRet->Put( SfxUInt16Item( SID_ATTR_METRIC,
    2018           0 :                         sal::static_int_cast<sal_uInt16>(rAppOpt.GetAppMetric()) ) );
    2019             : 
    2020             :         // TP_CALC
    2021             :         pRet->Put( SfxUInt16Item( SID_ATTR_DEFTABSTOP,
    2022           0 :                         aCalcOpt.GetTabDistance()));
    2023           0 :         pRet->Put( ScTpCalcItem( SID_SCDOCOPTIONS, aCalcOpt ) );
    2024             : 
    2025             :         // TP_VIEW
    2026           0 :         pRet->Put( ScTpViewItem( SID_SCVIEWOPTIONS, aViewOpt ) );
    2027           0 :         pRet->Put( SfxBoolItem( SID_SC_OPT_SYNCZOOM, rAppOpt.GetSynchronizeZoom() ) );
    2028             : 
    2029             :         // TP_INPUT
    2030           0 :         const ScInputOptions& rInpOpt = GetInputOptions();
    2031             :         pRet->Put( SfxUInt16Item( SID_SC_INPUT_SELECTIONPOS,
    2032           0 :                     rInpOpt.GetMoveDir() ) );
    2033             :         pRet->Put( SfxBoolItem( SID_SC_INPUT_SELECTION,
    2034           0 :                     rInpOpt.GetMoveSelection() ) );
    2035             :         pRet->Put( SfxBoolItem( SID_SC_INPUT_EDITMODE,
    2036           0 :                     rInpOpt.GetEnterEdit() ) );
    2037             :         pRet->Put( SfxBoolItem( SID_SC_INPUT_FMT_EXPAND,
    2038           0 :                     rInpOpt.GetExtendFormat() ) );
    2039             :         pRet->Put( SfxBoolItem( SID_SC_INPUT_RANGEFINDER,
    2040           0 :                     rInpOpt.GetRangeFinder() ) );
    2041             :         pRet->Put( SfxBoolItem( SID_SC_INPUT_REF_EXPAND,
    2042           0 :                     rInpOpt.GetExpandRefs() ) );
    2043           0 :         pRet->Put( SfxBoolItem(SID_SC_OPT_SORT_REF_UPDATE, rInpOpt.GetSortRefUpdate()));
    2044             :         pRet->Put( SfxBoolItem( SID_SC_INPUT_MARK_HEADER,
    2045           0 :                     rInpOpt.GetMarkHeader() ) );
    2046             :         pRet->Put( SfxBoolItem( SID_SC_INPUT_TEXTWYSIWYG,
    2047           0 :                     rInpOpt.GetTextWysiwyg() ) );
    2048             :         pRet->Put( SfxBoolItem( SID_SC_INPUT_REPLCELLSWARN,
    2049           0 :                     rInpOpt.GetReplaceCellsWarn() ) );
    2050             :         pRet->Put( SfxBoolItem( SID_SC_INPUT_LEGACY_CELL_SELECTION,
    2051           0 :                     rInpOpt.GetLegacyCellSelection() ) );
    2052             : 
    2053             :         // RID_SC_TP_PRINT
    2054           0 :         pRet->Put( ScTpPrintItem( SID_SCPRINTOPTIONS, GetPrintOptions() ) );
    2055             : 
    2056             :         // TP_GRID
    2057           0 :         SvxGridItem* pSvxGridItem = aViewOpt.CreateGridItem();
    2058           0 :         pRet->Put( *pSvxGridItem );
    2059           0 :         delete pSvxGridItem;
    2060             : 
    2061             :         // TP_USERLISTS
    2062           0 :         if ( pUL )
    2063             :         {
    2064           0 :             aULItem.SetUserList( *pUL );
    2065           0 :             pRet->Put(aULItem);
    2066             :         }
    2067             : 
    2068             :         // TP_COMPATIBILITY
    2069             :         pRet->Put( SfxUInt16Item( SID_SC_OPT_KEY_BINDING_COMPAT,
    2070           0 :                                    rAppOpt.GetKeyBindingType() ) );
    2071             : 
    2072             :         // TP_DEFAULTS
    2073           0 :         pRet->Put( ScTpDefaultsItem( SID_SCDEFAULTSOPTIONS, GetDefaultsOptions() ) );
    2074             : 
    2075             :         // TP_FORMULA
    2076           0 :         ScFormulaOptions aOptions = GetFormulaOptions();
    2077           0 :         if (pDocSh)
    2078             :         {
    2079           0 :             ScCalcConfig aConfig( aOptions.GetCalcConfig());
    2080           0 :             aConfig.MergeDocumentSpecific( pDocSh->GetDocument().GetCalcConfig());
    2081           0 :             aOptions.SetCalcConfig( aConfig);
    2082             :         }
    2083           0 :         pRet->Put( ScTpFormulaItem( SID_SCFORMULAOPTIONS, aOptions ) );
    2084             :     }
    2085           0 :     return pRet;
    2086             : }
    2087             : 
    2088           0 : void ScModule::ApplyItemSet( sal_uInt16 nId, const SfxItemSet& rSet )
    2089             : {
    2090           0 :     if(SID_SC_EDITOPTIONS == nId)
    2091             :     {
    2092           0 :         ModifyOptions( rSet );
    2093             :     }
    2094           0 : }
    2095             : 
    2096           0 : SfxTabPage*  ScModule::CreateTabPage( sal_uInt16 nId, vcl::Window* pParent, const SfxItemSet& rSet )
    2097             : {
    2098           0 :     SfxTabPage* pRet = NULL;
    2099           0 :     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
    2100             :     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
    2101           0 :     switch(nId)
    2102             :     {
    2103             :         case SID_SC_TP_LAYOUT:
    2104             :                                 {
    2105           0 :                                     ::CreateTabPage ScTpLayoutOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_LAYOUT );
    2106           0 :                                     if ( ScTpLayoutOptionsCreate )
    2107           0 :                                         pRet =  (*ScTpLayoutOptionsCreate) (pParent, &rSet);
    2108             :                                 }
    2109           0 :                                 break;
    2110             :         case SID_SC_TP_CONTENT:
    2111             :                                 {
    2112           0 :                                     ::CreateTabPage ScTpContentOptionsCreate = pFact->GetTabPageCreatorFunc(RID_SCPAGE_CONTENT);
    2113           0 :                                     if ( ScTpContentOptionsCreate )
    2114           0 :                                         pRet = (*ScTpContentOptionsCreate)(pParent, &rSet);
    2115             :                                 }
    2116           0 :                                 break;
    2117           0 :         case SID_SC_TP_GRID:            pRet = SvxGridTabPage::Create(pParent, rSet); break;
    2118             :         case SID_SC_TP_USERLISTS:
    2119             :                                 {
    2120           0 :                                     ::CreateTabPage ScTpUserListsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_USERLISTS );
    2121           0 :                                     if ( ScTpUserListsCreate )
    2122           0 :                                             pRet = (*ScTpUserListsCreate)( pParent, &rSet);
    2123             :                                 }
    2124           0 :                                 break;
    2125             :         case SID_SC_TP_CALC:
    2126             :                                 {
    2127           0 :                                     ::CreateTabPage ScTpCalcOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_CALC );
    2128           0 :                                     if ( ScTpCalcOptionsCreate )
    2129           0 :                                             pRet = (*ScTpCalcOptionsCreate)(pParent, &rSet);
    2130             :                                 }
    2131           0 :                                 break;
    2132             :         case SID_SC_TP_FORMULA:
    2133             :         {
    2134           0 :             ::CreateTabPage ScTpFormulaOptionsCreate = pFact->GetTabPageCreatorFunc (RID_SCPAGE_FORMULA);
    2135           0 :             if (ScTpFormulaOptionsCreate)
    2136           0 :                 pRet = (*ScTpFormulaOptionsCreate)(pParent, &rSet);
    2137             :         }
    2138           0 :         break;
    2139             :         case SID_SC_TP_COMPATIBILITY:
    2140             :         {
    2141           0 :             ::CreateTabPage ScTpCompatOptionsCreate = pFact->GetTabPageCreatorFunc (RID_SCPAGE_COMPATIBILITY);
    2142           0 :             if (ScTpCompatOptionsCreate)
    2143           0 :                 pRet = (*ScTpCompatOptionsCreate)(pParent, &rSet);
    2144             :         }
    2145           0 :         break;
    2146             :         case SID_SC_TP_CHANGES:
    2147             :                                 {
    2148           0 :                                    ::CreateTabPage ScRedlineOptionsTabPageCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_OPREDLINE );
    2149           0 :                                    if ( ScRedlineOptionsTabPageCreate )
    2150           0 :                                            pRet =(*ScRedlineOptionsTabPageCreate)(pParent, &rSet);
    2151             :                                 }
    2152           0 :                         break;
    2153             :         case RID_SC_TP_PRINT:
    2154             :                                 {
    2155           0 :                                    ::CreateTabPage ScTpPrintOptionsCreate =    pFact->GetTabPageCreatorFunc( RID_SCPAGE_PRINT );
    2156           0 :                                    if ( ScTpPrintOptionsCreate )
    2157           0 :                                           pRet = (*ScTpPrintOptionsCreate)( pParent, &rSet);
    2158             :                                 }
    2159           0 :             break;
    2160             :         case RID_SC_TP_DEFAULTS:
    2161             :             {
    2162           0 :                 ::CreateTabPage ScTpDefaultsOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_DEFAULTS );
    2163           0 :                 if ( ScTpDefaultsOptionsCreate )
    2164           0 :                     pRet = (*ScTpDefaultsOptionsCreate)( pParent, &rSet);
    2165             :             }
    2166           0 :             break;
    2167             :     }
    2168             : 
    2169             :     OSL_ENSURE( pRet, "ScModule::CreateTabPage(): no valid ID for TabPage!" );
    2170             : 
    2171           0 :     return pRet;
    2172             : }
    2173             : 
    2174           0 : IMPL_LINK( ScModule, CalcFieldValueHdl, EditFieldInfo*, pInfo )
    2175             : {
    2176             :     //TODO: Merge with ScFieldEditEngine!
    2177           0 :     if (pInfo)
    2178             :     {
    2179           0 :         const SvxFieldItem& rField = pInfo->GetField();
    2180           0 :         const SvxFieldData* pField = rField.GetField();
    2181             : 
    2182           0 :         if (pField && pField->ISA(SvxURLField))
    2183             :         {
    2184             :             // URLField
    2185           0 :             const SvxURLField* pURLField = static_cast<const SvxURLField*>(pField);
    2186           0 :             OUString aURL = pURLField->GetURL();
    2187             : 
    2188           0 :             switch ( pURLField->GetFormat() )
    2189             :             {
    2190             :                 case SVXURLFORMAT_APPDEFAULT: //TODO: Settable in the App?
    2191             :                 case SVXURLFORMAT_REPR:
    2192             :                 {
    2193           0 :                     pInfo->SetRepresentation( pURLField->GetRepresentation() );
    2194             :                 }
    2195           0 :                 break;
    2196             : 
    2197             :                 case SVXURLFORMAT_URL:
    2198             :                 {
    2199           0 :                     pInfo->SetRepresentation( aURL );
    2200             :                 }
    2201           0 :                 break;
    2202             :             }
    2203             : 
    2204             :             svtools::ColorConfigEntry eEntry =
    2205           0 :                 INetURLHistory::GetOrCreate()->QueryUrl( aURL ) ? svtools::LINKSVISITED : svtools::LINKS;
    2206           0 :             pInfo->SetTxtColor( GetColorConfig().GetColorValue(eEntry).nColor );
    2207             :         }
    2208             :         else
    2209             :         {
    2210             :             OSL_FAIL("Unknown Field");
    2211           0 :             pInfo->SetRepresentation(OUString('?'));
    2212             :         }
    2213             :     }
    2214             : 
    2215           0 :     return 0;
    2216             : }
    2217             : 
    2218           0 : bool ScModule::RegisterRefWindow( sal_uInt16 nSlotId, vcl::Window *pWnd )
    2219             : {
    2220           0 :     std::list<vcl::Window*> & rlRefWindow = m_mapRefWindow[nSlotId];
    2221             : 
    2222           0 :     if( std::find( rlRefWindow.begin(), rlRefWindow.end(), pWnd ) == rlRefWindow.end() )
    2223             :     {
    2224           0 :         rlRefWindow.push_back( pWnd );
    2225           0 :         return true;
    2226             :     }
    2227             : 
    2228           0 :     return false;
    2229             : }
    2230             : 
    2231           0 : bool  ScModule::UnregisterRefWindow( sal_uInt16 nSlotId, vcl::Window *pWnd )
    2232             : {
    2233           0 :     std::map<sal_uInt16, std::list<vcl::Window*> >::iterator iSlot = m_mapRefWindow.find( nSlotId );
    2234             : 
    2235           0 :     if( iSlot == m_mapRefWindow.end() )
    2236           0 :         return false;
    2237             : 
    2238           0 :     std::list<vcl::Window*> & rlRefWindow = iSlot->second;
    2239             : 
    2240           0 :     std::list<vcl::Window*>::iterator i = std::find( rlRefWindow.begin(), rlRefWindow.end(), pWnd );
    2241             : 
    2242           0 :     if( i == rlRefWindow.end() )
    2243           0 :         return false;
    2244             : 
    2245           0 :     rlRefWindow.erase( i );
    2246             : 
    2247           0 :     if( rlRefWindow.empty() )
    2248           0 :         m_mapRefWindow.erase( nSlotId );
    2249             : 
    2250           0 :     return true;
    2251             : }
    2252             : 
    2253           0 : vcl::Window *  ScModule::Find1RefWindow( sal_uInt16 nSlotId, vcl::Window *pWndAncestor )
    2254             : {
    2255           0 :     if (!pWndAncestor)
    2256           0 :         return NULL;
    2257             : 
    2258           0 :     std::map<sal_uInt16, std::list<vcl::Window*> >::iterator iSlot = m_mapRefWindow.find( nSlotId );
    2259             : 
    2260           0 :     if( iSlot == m_mapRefWindow.end() )
    2261           0 :         return NULL;
    2262             : 
    2263           0 :     std::list<vcl::Window*> & rlRefWindow = iSlot->second;
    2264             : 
    2265           0 :     while( vcl::Window *pParent = pWndAncestor->GetParent() ) pWndAncestor = pParent;
    2266             : 
    2267           0 :     for( std::list<vcl::Window*>::iterator i = rlRefWindow.begin(); i!=rlRefWindow.end(); ++i )
    2268           0 :         if ( pWndAncestor->IsWindowOrChild( *i, (*i)->IsSystemWindow() ) )
    2269           0 :             return *i;
    2270             : 
    2271           0 :     return NULL;
    2272             : }
    2273             : 
    2274           0 : ScAnyRefModalDlg* ScModule::GetCurrentAnyRefDlg()
    2275             : {
    2276           0 :     if(!maAnyRefDlgStack.empty())
    2277           0 :         return maAnyRefDlgStack.top();
    2278             : 
    2279           0 :     return NULL;
    2280             : }
    2281             : 
    2282           0 : void ScModule::PushNewAnyRefDlg( ScAnyRefModalDlg* pNewDlg )
    2283             : {
    2284           0 :     maAnyRefDlgStack.push( pNewDlg );
    2285             : 
    2286             :     // prevent mismatch between calls to
    2287             :     // SetInRefMode(true) and SetInRefMode(false)
    2288           0 :     if(maAnyRefDlgStack.size() != 1)
    2289           0 :         return;
    2290             : 
    2291           0 :     SfxViewShell* pViewShell = SfxViewShell::GetFirst();
    2292           0 :     while(pViewShell)
    2293             :     {
    2294           0 :         if ( pViewShell->ISA(ScTabViewShell) )
    2295             :         {
    2296           0 :             ScTabViewShell* pViewSh = static_cast<ScTabViewShell*>(pViewShell);
    2297           0 :             pViewSh->SetInRefMode( true );
    2298             :         }
    2299           0 :         pViewShell = SfxViewShell::GetNext( *pViewShell );
    2300             :     }
    2301             : }
    2302             : 
    2303           0 : void ScModule::PopAnyRefDlg()
    2304             : {
    2305           0 :     maAnyRefDlgStack.pop();
    2306             : 
    2307           0 :     if(maAnyRefDlgStack.empty())
    2308             :     {
    2309             :         // no modal ref dlg any more
    2310             :         // disable the flag in ScGridWindow
    2311           0 :         SfxViewShell* pViewShell = SfxViewShell::GetFirst();
    2312           0 :         while(pViewShell)
    2313             :         {
    2314           0 :             if ( pViewShell->ISA(ScTabViewShell) )
    2315             :             {
    2316           0 :                 ScTabViewShell* pViewSh = static_cast<ScTabViewShell*>(pViewShell);
    2317           0 :                 pViewSh->SetInRefMode( false );
    2318             :             }
    2319           0 :             pViewShell = SfxViewShell::GetNext( *pViewShell );
    2320             :         }
    2321             : 
    2322             :     }
    2323           0 : }
    2324             : 
    2325             : using namespace com::sun::star;
    2326             : 
    2327             : #define LINGUPROP_AUTOSPELL "IsSpellAuto"
    2328             : 
    2329         952 : void ScModule::GetSpellSettings( sal_uInt16& rDefLang, sal_uInt16& rCjkLang, sal_uInt16& rCtlLang,
    2330             :         bool& rAutoSpell )
    2331             : {
    2332             :     // use SvtLinguConfig instead of service LinguProperties to avoid
    2333             :     // loading the linguistic component
    2334         952 :     SvtLinguConfig aConfig;
    2335             : 
    2336        1904 :     SvtLinguOptions aOptions;
    2337         952 :     aConfig.GetOptions( aOptions );
    2338             : 
    2339         952 :     rDefLang = MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage, ::com::sun::star::i18n::ScriptType::LATIN);
    2340         952 :     rCjkLang = MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage_CJK, ::com::sun::star::i18n::ScriptType::ASIAN);
    2341         952 :     rCtlLang = MsLangId::resolveSystemLanguageByScriptType(aOptions.nDefaultLanguage_CTL, ::com::sun::star::i18n::ScriptType::COMPLEX);
    2342        1904 :     rAutoSpell = aOptions.bIsSpellAuto;
    2343         952 : }
    2344             : 
    2345           0 : void ScModule::SetAutoSpellProperty( bool bSet )
    2346             : {
    2347             :     // use SvtLinguConfig instead of service LinguProperties to avoid
    2348             :     // loading the linguistic component
    2349           0 :     SvtLinguConfig aConfig;
    2350             : 
    2351           0 :     uno::Any aAny;
    2352           0 :     aAny <<= bSet;
    2353           0 :     aConfig.SetProperty( OUString( LINGUPROP_AUTOSPELL ), aAny );
    2354           0 : }
    2355             : 
    2356           0 : bool ScModule::HasThesaurusLanguage( sal_uInt16 nLang )
    2357             : {
    2358           0 :     if ( nLang == LANGUAGE_NONE )
    2359           0 :         return false;
    2360             : 
    2361           0 :     bool bHasLang = false;
    2362             :     try
    2363             :     {
    2364           0 :         uno::Reference< linguistic2::XThesaurus > xThes(LinguMgr::GetThesaurus());
    2365           0 :         if ( xThes.is() )
    2366           0 :             bHasLang = xThes->hasLocale( LanguageTag::convertToLocale( nLang ) );
    2367             :     }
    2368           0 :     catch( uno::Exception& )
    2369             :     {
    2370             :         OSL_FAIL("Error in Thesaurus");
    2371             :     }
    2372             : 
    2373           0 :     return bHasLang;
    2374         228 : }
    2375             : 
    2376             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10