LCOV - code coverage report
Current view: top level - sc/source/ui/app - scmod.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 1170 0.0 %
Date: 2014-04-14 Functions: 0 101 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10