LCOV - code coverage report
Current view: top level - libreoffice/sc/source/ui/view - tabvwsh3.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 545 0.2 %
Date: 2012-12-27 Functions: 2 5 40.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "scitems.hxx"
      21             : #include <editeng/eeitem.hxx>
      22             : 
      23             : #include <sfx2/app.hxx>
      24             : #include <sfx2/bindings.hxx>
      25             : #include <sfx2/dispatch.hxx>
      26             : #include <sfx2/passwd.hxx>
      27             : #include <sfx2/request.hxx>
      28             : #include <svl/ptitem.hxx>
      29             : #include <svl/stritem.hxx>
      30             : #include <tools/urlobj.hxx>
      31             : #include <sfx2/objface.hxx>
      32             : #include <vcl/msgbox.hxx>
      33             : #include <vcl/vclenum.hxx>
      34             : 
      35             : #include "globstr.hrc"
      36             : #include "scmod.hxx"
      37             : #include "appoptio.hxx"
      38             : #include "tabvwsh.hxx"
      39             : #include "document.hxx"
      40             : #include "sc.hrc"
      41             : #include "inputwin.hxx"
      42             : #include "scresid.hxx"
      43             : #include "printfun.hxx"
      44             : #include "docsh.hxx"
      45             : #include "rangelst.hxx"
      46             : #include "prevwsh.hxx"
      47             : #include "rangeutl.hxx"
      48             : #include "reffact.hxx"
      49             : #include "uiitems.hxx"
      50             : #include "cell.hxx"
      51             : #include "inputhdl.hxx"
      52             : #include "autoform.hxx"
      53             : #include "autofmt.hxx"
      54             : #include "dwfunctr.hxx"
      55             : #include "shtabdlg.hxx"
      56             : #include "tabprotection.hxx"
      57             : #include "protectiondlg.hxx"
      58             : #include "markdata.hxx"
      59             : 
      60             : #include <svl/ilstitem.hxx>
      61             : #include <vector>
      62             : 
      63             : #include <svx/zoomslideritem.hxx>
      64             : #include <svx/svxdlg.hxx>
      65             : #include <svx/dialogs.hrc>
      66             : #include <comphelper/string.hxx>
      67             : #include "scabstdlg.hxx"
      68             : 
      69             : #include <memory>
      70             : 
      71             : using ::std::auto_ptr;
      72             : 
      73             : //------------------------------------------------------------------
      74             : 
      75             : /** Try to parse the given range using Calc-style syntax first, then
      76             :     Excel-style if that fails. */
      77           0 : static sal_uInt16 lcl_ParseRange(ScRange& rScRange, const String& aAddress, ScDocument* pDoc, sal_uInt16 /* nSlot */)
      78             : {
      79           0 :     sal_uInt16 nResult = rScRange.Parse(aAddress, pDoc);
      80           0 :     if ( (nResult & SCA_VALID) )
      81           0 :         return nResult;
      82             : 
      83           0 :     return rScRange.Parse(aAddress, pDoc, ScAddress::Details(formula::FormulaGrammar::CONV_XL_A1, 0, 0));
      84             : }
      85             : 
      86             : /** Try to parse the given address using Calc-style syntax first, then
      87             :     Excel-style if that fails. */
      88           0 : static sal_uInt16 lcl_ParseAddress(ScAddress& rScAddress, const String& aAddress, ScDocument* pDoc, sal_uInt16 /* nSlot */)
      89             : {
      90           0 :     sal_uInt16 nResult = rScAddress.Parse(aAddress, pDoc);
      91           0 :     if ( (nResult & SCA_VALID) )
      92           0 :         return nResult;
      93             : 
      94           0 :     return rScAddress.Parse(aAddress, pDoc, ScAddress::Details(formula::FormulaGrammar::CONV_XL_A1, 0, 0));
      95             : }
      96             : 
      97           0 : void ScTabViewShell::Execute( SfxRequest& rReq )
      98             : {
      99           0 :     SfxViewFrame*       pThisFrame  = GetViewFrame();
     100           0 :     SfxBindings&        rBindings   = pThisFrame->GetBindings();
     101           0 :     ScModule*           pScMod      = SC_MOD();
     102           0 :     const SfxItemSet*   pReqArgs    = rReq.GetArgs();
     103           0 :     sal_uInt16              nSlot       = rReq.GetSlot();
     104             : 
     105           0 :     if (nSlot != SID_CURRENTCELL)       // der kommt beim MouseButtonUp
     106           0 :         HideListBox();                  // Autofilter-DropDown-Listbox
     107             : 
     108           0 :     switch ( nSlot )
     109             :     {
     110             :         case FID_INSERT_FILE:
     111             :             {
     112             :                 const SfxPoolItem* pItem;
     113           0 :                 if ( pReqArgs &&
     114           0 :                      pReqArgs->GetItemState(FID_INSERT_FILE,sal_True,&pItem) == SFX_ITEM_SET )
     115             :                 {
     116           0 :                     String aFileName = ((const SfxStringItem*)pItem)->GetValue();
     117             : 
     118             :                         // Einfuege-Position
     119             : 
     120           0 :                     Point aInsertPos;
     121           0 :                     if ( pReqArgs->GetItemState(FN_PARAM_1,sal_True,&pItem) == SFX_ITEM_SET )
     122           0 :                         aInsertPos = ((const SfxPointItem*)pItem)->GetValue();
     123             :                     else
     124           0 :                         aInsertPos = GetInsertPos();
     125             : 
     126             :                         //  als Link?
     127             : 
     128           0 :                     sal_Bool bAsLink = false;
     129           0 :                     if ( pReqArgs->GetItemState(FN_PARAM_2,sal_True,&pItem) == SFX_ITEM_SET )
     130           0 :                         bAsLink = ((const SfxBoolItem*)pItem)->GetValue();
     131             : 
     132             :                         // ausfuehren
     133             : 
     134           0 :                     PasteFile( aInsertPos, aFileName, bAsLink );
     135             :                 }
     136             :             }
     137           0 :             break;
     138             : 
     139             :         case SID_OPENDLG_EDIT_PRINTAREA:
     140             :             {
     141           0 :                 sal_uInt16          nId  = ScPrintAreasDlgWrapper::GetChildWindowId();
     142           0 :                 SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
     143             : 
     144           0 :                 pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
     145             :             }
     146           0 :             break;
     147             : 
     148             :         case SID_CHANGE_PRINTAREA:
     149             :             {
     150           0 :                 if ( pReqArgs )         // OK aus Dialog
     151             :                 {
     152           0 :                     String aPrintStr;
     153           0 :                     String aRowStr;
     154           0 :                     String aColStr;
     155           0 :                     sal_Bool bEntire = false;
     156             :                     const SfxPoolItem* pItem;
     157           0 :                     if ( pReqArgs->GetItemState( SID_CHANGE_PRINTAREA, sal_True, &pItem ) == SFX_ITEM_SET )
     158           0 :                         aPrintStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
     159           0 :                     if ( pReqArgs->GetItemState( FN_PARAM_2, sal_True, &pItem ) == SFX_ITEM_SET )
     160           0 :                         aRowStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
     161           0 :                     if ( pReqArgs->GetItemState( FN_PARAM_3, sal_True, &pItem ) == SFX_ITEM_SET )
     162           0 :                         aColStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
     163           0 :                     if ( pReqArgs->GetItemState( FN_PARAM_4, sal_True, &pItem ) == SFX_ITEM_SET )
     164           0 :                         bEntire = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     165             : 
     166           0 :                     SetPrintRanges( bEntire, &aPrintStr, &aColStr, &aRowStr, false );
     167             : 
     168           0 :                     rReq.Done();
     169             :                 }
     170             :             }
     171           0 :             break;
     172             : 
     173             :         case SID_ADD_PRINTAREA:
     174             :         case SID_DEFINE_PRINTAREA:      // Menue oder Basic
     175             :             {
     176           0 :                 sal_Bool bAdd = ( nSlot == SID_ADD_PRINTAREA );
     177           0 :                 if ( pReqArgs )
     178             :                 {
     179           0 :                     String aPrintStr;
     180             :                     const SfxPoolItem* pItem;
     181           0 :                     if ( pReqArgs->GetItemState( SID_DEFINE_PRINTAREA, sal_True, &pItem ) == SFX_ITEM_SET )
     182           0 :                         aPrintStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
     183           0 :                     SetPrintRanges( false, &aPrintStr, NULL, NULL, bAdd );
     184             :                 }
     185             :                 else
     186             :                 {
     187           0 :                     SetPrintRanges( false, NULL, NULL, NULL, bAdd );      // aus Selektion
     188           0 :                     rReq.Done();
     189             :                 }
     190             :             }
     191           0 :             break;
     192             : 
     193             :         case SID_DELETE_PRINTAREA:
     194             :             {
     195           0 :                 String aEmpty;
     196           0 :                 SetPrintRanges( false, &aEmpty, NULL, NULL, false );        // Druckbereich loeschen
     197           0 :                 rReq.Done();
     198             :             }
     199           0 :             break;
     200             : 
     201             :         case FID_DEL_MANUALBREAKS:
     202           0 :             RemoveManualBreaks();
     203           0 :             rReq.Done();
     204           0 :             break;
     205             : 
     206             :         case FID_ADJUST_PRINTZOOM:
     207           0 :             AdjustPrintZoom();
     208           0 :             rReq.Done();
     209           0 :             break;
     210             : 
     211             :         case FID_RESET_PRINTZOOM:
     212           0 :             SetPrintZoom( 100, 0 );     // 100%, nicht auf Seiten
     213           0 :             rReq.Done();
     214           0 :             break;
     215             : 
     216             :         case SID_FORMATPAGE:
     217             :         case SID_STATUS_PAGESTYLE:
     218             :         case SID_HFEDIT:
     219             :             GetViewData()->GetDocShell()->
     220           0 :                 ExecutePageStyle( *this, rReq, GetViewData()->GetTabNo() );
     221           0 :             break;
     222             : 
     223             :         case SID_JUMPTOMARK:
     224             :         case SID_CURRENTCELL:
     225           0 :             if ( pReqArgs )
     226             :             {
     227           0 :                 String aAddress;
     228             :                 const SfxPoolItem* pItem;
     229           0 :                 if ( pReqArgs->GetItemState( nSlot, sal_True, &pItem ) == SFX_ITEM_SET )
     230           0 :                     aAddress = ((const SfxStringItem*)pItem)->GetValue();
     231           0 :                 else if ( nSlot == SID_JUMPTOMARK && pReqArgs->GetItemState(
     232           0 :                                             SID_JUMPTOMARK, sal_True, &pItem ) == SFX_ITEM_SET )
     233           0 :                     aAddress = ((const SfxStringItem*)pItem)->GetValue();
     234             : 
     235             :                 //  #i14927# SID_CURRENTCELL with a single cell must unmark if FN_PARAM_1
     236             :                 //  isn't set (for recorded macros, because IsAPI is no longer available).
     237             :                 //  ScGridWindow::MouseButtonUp no longer executes the slot for a single
     238             :                 //  cell if there is a multi selection.
     239           0 :                 sal_Bool bUnmark = ( nSlot == SID_CURRENTCELL );
     240           0 :                 if ( pReqArgs->GetItemState( FN_PARAM_1, sal_True, &pItem ) == SFX_ITEM_SET )
     241           0 :                     bUnmark = ((const SfxBoolItem*)pItem)->GetValue();
     242             : 
     243           0 :                 bool bAlignToCursor = true;
     244           0 :                 if (pReqArgs->GetItemState(FN_PARAM_2, true, &pItem) == SFX_ITEM_SET)
     245           0 :                     bAlignToCursor = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     246             : 
     247           0 :                 if ( nSlot == SID_JUMPTOMARK )
     248             :                 {
     249             :                     //  URL has to be decoded for escaped characters (%20)
     250             :                     aAddress = INetURLObject::decode( aAddress, INET_HEX_ESCAPE,
     251             :                                                INetURLObject::DECODE_WITH_CHARSET,
     252           0 :                                             RTL_TEXTENCODING_UTF8 );
     253             :                 }
     254             : 
     255           0 :                 sal_Bool bFound = false;
     256           0 :                 ScViewData* pViewData = GetViewData();
     257           0 :                 ScDocument* pDoc      = pViewData->GetDocument();
     258           0 :                 ScMarkData& rMark     = pViewData->GetMarkData();
     259           0 :                 ScRange     aScRange;
     260           0 :                 ScAddress   aScAddress;
     261           0 :                 sal_uInt16      nResult = lcl_ParseRange(aScRange, aAddress, pDoc, nSlot);
     262           0 :                 SCTAB       nTab = pViewData->GetTabNo();
     263           0 :                 sal_Bool        bMark = sal_True;
     264             : 
     265             :                 // Is this a range ?
     266           0 :                 if( nResult & SCA_VALID )
     267             :                 {
     268           0 :                     if ( nResult & SCA_TAB_3D )
     269             :                     {
     270           0 :                         if( aScRange.aStart.Tab() != nTab )
     271           0 :                             SetTabNo( nTab = aScRange.aStart.Tab() );
     272             :                     }
     273             :                     else
     274             :                     {
     275           0 :                         aScRange.aStart.SetTab( nTab );
     276           0 :                         aScRange.aEnd.SetTab( nTab );
     277             :                     }
     278             :                 }
     279             :                 // Is this a cell ?
     280           0 :                 else if ( (nResult = lcl_ParseAddress(aScAddress, aAddress, pDoc, nSlot)) & SCA_VALID )
     281             :                 {
     282           0 :                     if ( nResult & SCA_TAB_3D )
     283             :                     {
     284           0 :                         if( aScAddress.Tab() != nTab )
     285           0 :                             SetTabNo( nTab = aScAddress.Tab() );
     286             :                     }
     287             :                     else
     288           0 :                         aScAddress.SetTab( nTab );
     289             : 
     290           0 :                     aScRange = ScRange( aScAddress, aScAddress );
     291             :                     // Zellen sollen nicht markiert werden
     292           0 :                     bMark = false;
     293             :                 }
     294             :                 // Ist es benahmster Bereich (erst Namen dann DBBereiche) ?
     295             :                 else
     296             :                 {
     297           0 :                     ScRangeUtil     aRangeUtil;
     298           0 :                     formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention();
     299           0 :                     if( aRangeUtil.MakeRangeFromName( aAddress, pDoc, nTab, aScRange, RUTL_NAMES, eConv ) ||
     300           0 :                         aRangeUtil.MakeRangeFromName( aAddress, pDoc, nTab, aScRange, RUTL_DBASE, eConv ) )
     301             :                     {
     302           0 :                         nResult |= SCA_VALID;
     303           0 :                         if( aScRange.aStart.Tab() != nTab )
     304           0 :                             SetTabNo( nTab = aScRange.aStart.Tab() );
     305           0 :                     }
     306             :                 }
     307             : 
     308           0 :                 if ( !(nResult & SCA_VALID) && comphelper::string::isdigitAsciiString(aAddress) )
     309             :                 {
     310           0 :                     sal_Int32 nNumeric = aAddress.ToInt32();
     311           0 :                     if ( nNumeric > 0 && nNumeric <= MAXROW+1 )
     312             :                     {
     313             :                         //  1-basierte Zeilennummer
     314             : 
     315           0 :                         aScAddress.SetRow( (SCROW)(nNumeric - 1) );
     316           0 :                         aScAddress.SetCol( pViewData->GetCurX() );
     317           0 :                         aScAddress.SetTab( nTab );
     318           0 :                         aScRange = ScRange( aScAddress, aScAddress );
     319           0 :                         bMark    = false;
     320           0 :                         nResult  = SCA_VALID;
     321             :                     }
     322             :                 }
     323             : 
     324           0 :                 if ( !ValidRow(aScRange.aStart.Row()) || !ValidRow(aScRange.aEnd.Row()) )
     325           0 :                     nResult = 0;
     326             : 
     327             :                 // wir haben was gefunden
     328           0 :                 if( nResult & SCA_VALID )
     329             :                 {
     330           0 :                     bFound = sal_True;
     331           0 :                     SCCOL nCol = aScRange.aStart.Col();
     332           0 :                     SCROW nRow = aScRange.aStart.Row();
     333           0 :                     sal_Bool bNothing = ( pViewData->GetCurX()==nCol && pViewData->GetCurY()==nRow );
     334             : 
     335             :                     // markieren
     336           0 :                     if( bMark )
     337             :                     {
     338           0 :                         if (rMark.IsMarked())           // ist derselbe Bereich schon markiert?
     339             :                         {
     340           0 :                             ScRange aOldMark;
     341           0 :                             rMark.GetMarkArea( aOldMark );
     342           0 :                             aOldMark.Justify();
     343           0 :                             ScRange aCurrent = aScRange;
     344           0 :                             aCurrent.Justify();
     345           0 :                             bNothing = ( aCurrent == aOldMark );
     346             :                         }
     347             :                         else
     348           0 :                             bNothing = false;
     349             : 
     350           0 :                         if (!bNothing)
     351           0 :                             MarkRange( aScRange, false );   // Cursor kommt hinterher...
     352             :                     }
     353             :                     else
     354             :                     {
     355             :                         //  remove old selection, unless bUnmark argument is sal_False (from navigator)
     356           0 :                         if( bUnmark )
     357             :                         {
     358             :                             MoveCursorAbs( nCol, nRow,
     359           0 :                                 SC_FOLLOW_NONE, false, false );
     360             :                         }
     361             :                     }
     362             : 
     363             :                     // und Cursor setzen
     364             : 
     365             :                     // zusammengefasste Zellen beruecksichtigen:
     366           0 :                     pDoc->SkipOverlapped(nCol, nRow, nTab);
     367             : 
     368             :                     //  Navigator-Aufrufe sind nicht API!!!
     369             : 
     370           0 :                     if( bNothing )
     371             :                     {
     372           0 :                         if (rReq.IsAPI())
     373           0 :                             rReq.Ignore();      // wenn Makro, dann gar nix
     374             :                         else
     375           0 :                             rReq.Done();        // sonst wenigstens aufzeichnen
     376             :                     }
     377             :                     else
     378             :                     {
     379           0 :                         pViewData->ResetOldCursor();
     380           0 :                         SetCursor( nCol, nRow );
     381           0 :                         rBindings.Invalidate( SID_CURRENTCELL );
     382           0 :                         rBindings.Update( nSlot );
     383             : 
     384           0 :                         if (!rReq.IsAPI())
     385           0 :                             rReq.Done();
     386             :                     }
     387             : 
     388           0 :                     if (bAlignToCursor)
     389             :                     {
     390             :                         // align to cursor even if the cursor position hasn't changed,
     391             :                         // because the cursor may be set outside the visible area.
     392           0 :                         AlignToCursor( nCol, nRow, SC_FOLLOW_JUMP );
     393             :                     }
     394             : 
     395           0 :                     rReq.SetReturnValue( SfxStringItem( SID_CURRENTCELL, aAddress ) );
     396             :                 }
     397             : 
     398           0 :                 if (!bFound)    // kein gueltiger Bereich
     399             :                 {
     400             :                     //  wenn es ein Tabellenname ist, umschalten (fuer Navigator/URL's)
     401             : 
     402             :                     SCTAB nNameTab;
     403           0 :                     if ( pDoc->GetTable( aAddress, nNameTab ) )
     404             :                     {
     405           0 :                         bFound = sal_True;
     406           0 :                         if ( nNameTab != nTab )
     407           0 :                             SetTabNo( nNameTab );
     408             :                     }
     409             :                 }
     410             : 
     411           0 :                 if ( !bFound && nSlot == SID_JUMPTOMARK )
     412             :                 {
     413             :                     //  Grafik-Objekte probieren (nur bei URL's)
     414             : 
     415           0 :                     bFound = SelectObject( aAddress );
     416             :                 }
     417             : 
     418           0 :                 if (!bFound && !rReq.IsAPI())
     419           0 :                     ErrorMessage( STR_ERR_INVALID_AREA );
     420             :             }
     421           0 :             break;
     422             : 
     423             :         case SID_CURRENTOBJECT:
     424           0 :             if ( pReqArgs )
     425             :             {
     426           0 :                 String aName = ((const SfxStringItem&)pReqArgs->Get(nSlot)).GetValue();
     427           0 :                 SelectObject( aName );
     428             :             }
     429           0 :             break;
     430             : 
     431             :         case SID_CURRENTTAB:
     432           0 :             if ( pReqArgs )
     433             :             {
     434             :                 //  Tabelle fuer Basic ist 1-basiert
     435           0 :                 SCTAB nTab = ((const SfxUInt16Item&)pReqArgs->Get(nSlot)).GetValue() - 1;
     436           0 :                 ScDocument* pDoc = GetViewData()->GetDocument();
     437           0 :                 if ( nTab < pDoc->GetTableCount() )
     438             :                 {
     439           0 :                     SetTabNo( nTab );
     440           0 :                     rBindings.Update( nSlot );
     441             : 
     442           0 :                     if( ! rReq.IsAPI() )
     443           0 :                         rReq.Done();
     444             :                 }
     445             :                 //! sonst Fehler ?
     446             :             }
     447           0 :             break;
     448             : 
     449             :         case SID_CURRENTDOC:
     450           0 :             if ( pReqArgs )
     451             :             {
     452             :                 String aStrDocName( ((const SfxStringItem&)pReqArgs->
     453           0 :                                         Get(nSlot)).GetValue() );
     454             : 
     455           0 :                 SfxViewFrame*   pViewFrame = NULL;
     456           0 :                 ScDocShell*     pDocSh = (ScDocShell*)SfxObjectShell::GetFirst();
     457           0 :                 sal_Bool            bFound = false;
     458             : 
     459             :                 // zu aktivierenden ViewFrame suchen
     460             : 
     461           0 :                 while ( pDocSh && !bFound )
     462             :                 {
     463           0 :                     if ( pDocSh->GetTitle() == aStrDocName )
     464             :                     {
     465           0 :                         pViewFrame = SfxViewFrame::GetFirst( pDocSh );
     466           0 :                         bFound = ( NULL != pViewFrame );
     467             :                     }
     468             : 
     469           0 :                     pDocSh = (ScDocShell*)SfxObjectShell::GetNext( *pDocSh );
     470             :                 }
     471             : 
     472           0 :                 if ( bFound )
     473           0 :                     pViewFrame->GetFrame().Appear();
     474             : 
     475           0 :                 rReq.Ignore();//XXX wird von SFX erledigt
     476             :             }
     477             : 
     478             :         case SID_ATTR_SIZE://XXX ???
     479           0 :             break;
     480             : 
     481             : 
     482             :         case SID_PRINTPREVIEW:
     483             :             {
     484           0 :                 if ( !pThisFrame->GetFrame().IsInPlace() )          // nicht bei OLE
     485             :                 {
     486             :                     //  print preview is now always in the same frame as the tab view
     487             :                     //  -> always switch this frame back to normal view
     488             :                     //  (ScPreviewShell ctor reads view data)
     489             : 
     490             :                     // #102785#; finish input
     491           0 :                     pScMod->InputEnterHandler();
     492             : 
     493           0 :                     pThisFrame->GetDispatcher()->Execute( SID_VIEWSHELL1, SFX_CALLMODE_ASYNCHRON );
     494             :                 }
     495             :                 //  else Fehler (z.B. Ole)
     496             :             }
     497           0 :             break;
     498             : 
     499             :         case SID_DETECTIVE_DEL_ALL:
     500           0 :             DetectiveDelAll();
     501           0 :             rReq.Done();
     502           0 :             break;
     503             : 
     504             :         //  SID_TABLE_ACTIVATE und SID_MARKAREA werden von Basic aus an der versteckten
     505             :         //  View aufgerufen, um auf der sichtbaren View zu markieren/umzuschalten:
     506             : 
     507             :         case SID_TABLE_ACTIVATE:
     508             :             OSL_FAIL("old slot SID_TABLE_ACTIVATE");
     509           0 :             break;
     510             : 
     511             :         case SID_REPAINT:
     512           0 :             PaintGrid();
     513           0 :             PaintTop();
     514           0 :             PaintLeft();
     515           0 :             PaintExtras();
     516           0 :             rReq.Done();
     517           0 :             break;
     518             : 
     519             :         case FID_NORMALVIEWMODE:
     520             :         case FID_PAGEBREAKMODE:
     521             :             {
     522           0 :                 bool bWantPageBreak = nSlot == FID_PAGEBREAKMODE;
     523             : 
     524             :                 // check whether there is an explicit argument, use it
     525             :                 const SfxPoolItem* pItem;
     526           0 :                 if ( pReqArgs && pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET )
     527             :                 {
     528           0 :                     sal_Bool bItemValue = ((const SfxBoolItem*)pItem)->GetValue();
     529           0 :                     bWantPageBreak = (nSlot == FID_PAGEBREAKMODE) == bItemValue;
     530             :                 }
     531             : 
     532           0 :                 if( GetViewData()->IsPagebreakMode() != bWantPageBreak )
     533             :                 {
     534           0 :                     SetPagebreakMode( bWantPageBreak );
     535           0 :                     UpdatePageBreakData();
     536           0 :                     SetCurSubShell( GetCurObjectSelectionType(), sal_True );
     537           0 :                     PaintGrid();
     538           0 :                     PaintTop();
     539           0 :                     PaintLeft();
     540           0 :                     rBindings.Invalidate( nSlot );
     541           0 :                     rReq.AppendItem( SfxBoolItem( nSlot, sal_True ) );
     542           0 :                     rReq.Done();
     543             :                 }
     544             :             }
     545           0 :             break;
     546             : 
     547             :         case FID_FUNCTION_BOX:
     548             :             {
     549           0 :                 sal_uInt16 nChildId = ScFunctionChildWindow::GetChildWindowId();
     550           0 :                 if ( rReq.GetArgs() )
     551           0 :                     pThisFrame->SetChildWindow( nChildId, ((const SfxBoolItem&) (rReq.GetArgs()->Get(FID_FUNCTION_BOX))).GetValue());
     552             :                 else
     553             :                 {
     554           0 :                     pThisFrame->ToggleChildWindow( nChildId );
     555           0 :                     rReq.AppendItem( SfxBoolItem( FID_FUNCTION_BOX , pThisFrame->HasChildWindow( nChildId ) ) );
     556             :                 }
     557             : 
     558           0 :                 GetViewFrame()->GetBindings().Invalidate(FID_FUNCTION_BOX);
     559           0 :                 rReq.Done ();
     560             :             }
     561           0 :             break;
     562             : 
     563             : 
     564             :         case FID_TOGGLESYNTAX:
     565             :             {
     566           0 :                 sal_Bool bSet = !GetViewData()->IsSyntaxMode();
     567             :                 const SfxPoolItem* pItem;
     568           0 :                 if ( pReqArgs && pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET )
     569           0 :                     bSet = ((const SfxBoolItem*)pItem)->GetValue();
     570           0 :                 GetViewData()->SetSyntaxMode( bSet );
     571           0 :                 PaintGrid();
     572           0 :                 rBindings.Invalidate( FID_TOGGLESYNTAX );
     573           0 :                 rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
     574           0 :                 rReq.Done();
     575             :             }
     576           0 :             break;
     577             :         case FID_TOGGLEHEADERS:
     578             :             {
     579           0 :                 sal_Bool bSet = !GetViewData()->IsHeaderMode();
     580             :                 const SfxPoolItem* pItem;
     581           0 :                 if ( pReqArgs && pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET )
     582           0 :                     bSet = ((const SfxBoolItem*)pItem)->GetValue();
     583           0 :                 GetViewData()->SetHeaderMode( bSet );
     584           0 :                 RepeatResize();
     585           0 :                 rBindings.Invalidate( FID_TOGGLEHEADERS );
     586           0 :                 rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
     587           0 :                 rReq.Done();
     588             :             }
     589           0 :             break;
     590             : 
     591             :         case FID_TOGGLEFORMULA:
     592             :             {
     593           0 :                 ScViewData* pViewData = GetViewData();
     594           0 :                 const ScViewOptions& rOpts = pViewData->GetOptions();
     595           0 :                 sal_Bool bFormulaMode = !rOpts.GetOption( VOPT_FORMULAS );
     596             :                 const SfxPoolItem *pItem;
     597           0 :                 if( pReqArgs && pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET )
     598           0 :                     bFormulaMode = ((const SfxBoolItem *)pItem)->GetValue();
     599             : 
     600           0 :                 ScViewOptions rSetOpts = ScViewOptions( rOpts );
     601           0 :                 rSetOpts.SetOption( VOPT_FORMULAS, bFormulaMode );
     602           0 :                 pViewData->SetOptions( rSetOpts );
     603             : 
     604           0 :                 pViewData->GetDocShell()->PostPaintGridAll();
     605             : 
     606           0 :                 rBindings.Invalidate( FID_TOGGLEFORMULA );
     607           0 :                 rReq.AppendItem( SfxBoolItem( nSlot, bFormulaMode ) );
     608           0 :                 rReq.Done();
     609             :             }
     610           0 :             break;
     611             : 
     612             :         case FID_TOGGLEINPUTLINE:
     613             :             {
     614           0 :                 sal_uInt16          nId  = ScInputWindowWrapper::GetChildWindowId();
     615           0 :                 SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
     616           0 :                 sal_Bool bSet = ( pWnd == NULL );
     617             :                 const SfxPoolItem* pItem;
     618           0 :                 if ( pReqArgs && pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET )
     619           0 :                     bSet = ((const SfxBoolItem*)pItem)->GetValue();
     620             : 
     621           0 :                 pThisFrame->SetChildWindow( nId, bSet );
     622           0 :                 rBindings.Invalidate( FID_TOGGLEINPUTLINE );
     623           0 :                 rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
     624           0 :                 rReq.Done();
     625             :             }
     626           0 :             break;
     627             : 
     628             :         case SID_ATTR_ZOOM: // Statuszeile
     629             :         case FID_SCALE:
     630             :             {
     631           0 :                 sal_Bool bSyncZoom = SC_MOD()->GetAppOptions().GetSynchronizeZoom();
     632           0 :                 SvxZoomType eOldZoomType = GetZoomType();
     633           0 :                 SvxZoomType eNewZoomType = eOldZoomType;
     634           0 :                 const Fraction& rOldY = GetViewData()->GetZoomY();  // Y wird angezeigt
     635           0 :                 sal_uInt16 nOldZoom = (sal_uInt16)(( rOldY.GetNumerator() * 100 )
     636           0 :                                             / rOldY.GetDenominator());
     637           0 :                 sal_uInt16 nZoom = nOldZoom;
     638           0 :                 sal_Bool bCancel = false;
     639             : 
     640           0 :                 if ( pReqArgs )
     641             :                 {
     642             :                     const SvxZoomItem& rZoomItem = (const SvxZoomItem&)
     643           0 :                                                    pReqArgs->Get(SID_ATTR_ZOOM);
     644             : 
     645           0 :                     eNewZoomType = rZoomItem.GetType();
     646           0 :                     nZoom     = rZoomItem.GetValue();
     647             :                 }
     648             :                 else
     649             :                 {
     650           0 :                     SfxItemSet      aSet     ( GetPool(), SID_ATTR_ZOOM, SID_ATTR_ZOOM );
     651           0 :                     SvxZoomItem     aZoomItem( eOldZoomType, nOldZoom, SID_ATTR_ZOOM );
     652           0 :                     AbstractSvxZoomDialog* pDlg = NULL;
     653           0 :                     ScMarkData&     rMark = GetViewData()->GetMarkData();
     654             :                     sal_uInt16          nBtnFlags =   SVX_ZOOM_ENABLE_50
     655             :                                                 | SVX_ZOOM_ENABLE_75
     656             :                                                 | SVX_ZOOM_ENABLE_100
     657             :                                                 | SVX_ZOOM_ENABLE_150
     658             :                                                 | SVX_ZOOM_ENABLE_200
     659             :                                                 | SVX_ZOOM_ENABLE_WHOLEPAGE
     660           0 :                                                 | SVX_ZOOM_ENABLE_PAGEWIDTH;
     661             : 
     662           0 :                     if ( rMark.IsMarked() || rMark.IsMultiMarked() )
     663           0 :                         nBtnFlags = nBtnFlags | SVX_ZOOM_ENABLE_OPTIMAL;
     664             : 
     665           0 :                     aZoomItem.SetValueSet( nBtnFlags );
     666           0 :                     aSet.Put( aZoomItem );
     667           0 :                     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     668           0 :                     if(pFact)
     669             :                     {
     670           0 :                         pDlg = pFact->CreateSvxZoomDialog(GetDialogParent(), aSet );
     671             :                         OSL_ENSURE(pDlg, "Dialogdiet fail!");
     672             :                     }
     673           0 :                     if (pDlg)
     674             :                     {
     675           0 :                        pDlg->SetLimits( MINZOOM, MAXZOOM );
     676             : 
     677           0 :                        bCancel = ( RET_CANCEL == pDlg->Execute() );
     678             :                     }
     679             :                     // bCancel is True only if we were in the previous if block,
     680             :                     // so no need to check again pDlg
     681           0 :                     if ( !bCancel )
     682             :                     {
     683             :                         const SvxZoomItem&  rZoomItem = (const SvxZoomItem&)
     684           0 :                                                 pDlg->GetOutputItemSet()->
     685           0 :                                                     Get( SID_ATTR_ZOOM );
     686             : 
     687           0 :                         eNewZoomType = rZoomItem.GetType();
     688           0 :                         nZoom     = rZoomItem.GetValue();
     689             :                     }
     690             : 
     691           0 :                     delete pDlg;
     692             :                 }
     693             : 
     694           0 :                 if ( !bCancel )
     695             :                 {
     696           0 :                     if ( eNewZoomType == SVX_ZOOM_PERCENT )
     697             :                     {
     698           0 :                         if ( nZoom < MINZOOM )  nZoom = MINZOOM;
     699           0 :                         if ( nZoom > MAXZOOM )  nZoom = MAXZOOM;
     700             :                     }
     701             :                     else
     702             :                     {
     703           0 :                         nZoom = CalcZoom( eNewZoomType, nOldZoom );
     704           0 :                         bCancel = nZoom == 0;
     705             :                     }
     706             : 
     707           0 :                     switch ( eNewZoomType )
     708             :                     {
     709             :                         case SVX_ZOOM_WHOLEPAGE:
     710             :                         case SVX_ZOOM_PAGEWIDTH:
     711           0 :                             SetZoomType( eNewZoomType, bSyncZoom );
     712           0 :                             break;
     713             : 
     714             :                         default:
     715           0 :                             SetZoomType( SVX_ZOOM_PERCENT, bSyncZoom );
     716             :                     }
     717             :                 }
     718             : 
     719           0 :                 if ( nZoom != nOldZoom && !bCancel )
     720             :                 {
     721           0 :                     if (!GetViewData()->IsPagebreakMode())
     722             :                     {
     723           0 :                         ScAppOptions aNewOpt = pScMod->GetAppOptions();
     724           0 :                         aNewOpt.SetZoom( nZoom );
     725           0 :                         aNewOpt.SetZoomType( GetZoomType() );
     726           0 :                         pScMod->SetAppOptions( aNewOpt );
     727             :                     }
     728           0 :                     Fraction aFract( nZoom, 100 );
     729           0 :                     SetZoom( aFract, aFract, bSyncZoom );
     730           0 :                     PaintGrid();
     731           0 :                     PaintTop();
     732           0 :                     PaintLeft();
     733           0 :                     rBindings.Invalidate( SID_ATTR_ZOOM );
     734           0 :                     rReq.AppendItem( SvxZoomItem( GetZoomType(), nZoom, nSlot ) );
     735           0 :                     rReq.Done();
     736             :                 }
     737             :             }
     738           0 :             break;
     739             : 
     740             :         case SID_ATTR_ZOOMSLIDER:
     741             :             {
     742           0 :                 const SfxPoolItem* pItem = NULL;
     743           0 :                 sal_Bool bSyncZoom = SC_MOD()->GetAppOptions().GetSynchronizeZoom();
     744           0 :                 if ( pReqArgs && pReqArgs->GetItemState(SID_ATTR_ZOOMSLIDER, sal_True, &pItem) == SFX_ITEM_SET )
     745             :                 {
     746           0 :                     const sal_uInt16 nCurrentZoom = ((const SvxZoomSliderItem *)pItem)->GetValue();
     747           0 :                     if( nCurrentZoom )
     748             :                     {
     749           0 :                         SetZoomType( SVX_ZOOM_PERCENT, bSyncZoom );
     750           0 :                         if (!GetViewData()->IsPagebreakMode())
     751             :                         {
     752           0 :                             ScAppOptions aNewOpt = pScMod->GetAppOptions();
     753           0 :                             aNewOpt.SetZoom( nCurrentZoom );
     754           0 :                             aNewOpt.SetZoomType( GetZoomType() );
     755           0 :                             pScMod->SetAppOptions( aNewOpt );
     756             :                         }
     757           0 :                         Fraction aFract( nCurrentZoom,100 );
     758           0 :                         SetZoom( aFract, aFract, bSyncZoom );
     759           0 :                         PaintGrid();
     760           0 :                         PaintTop();
     761           0 :                         PaintLeft();
     762           0 :                         rBindings.Invalidate( SID_ATTR_ZOOMSLIDER );
     763           0 :                         rReq.Done();
     764             :                     }
     765             :                 }
     766             :             }
     767           0 :             break;
     768             : 
     769             :         //----------------------------------------------------------------
     770             : 
     771             :         case FID_TAB_SELECTALL:
     772           0 :             SelectAllTables();
     773           0 :             rReq.Done();
     774           0 :             break;
     775             : 
     776             :         case FID_TAB_DESELECTALL:
     777           0 :             DeselectAllTables();
     778           0 :             rReq.Done();
     779           0 :             break;
     780             : 
     781             :         case SID_SELECT_TABLES:
     782             :         {
     783           0 :             ScViewData& rViewData = *GetViewData();
     784           0 :             ScDocument& rDoc = *rViewData.GetDocument();
     785           0 :             ScMarkData& rMark = rViewData.GetMarkData();
     786           0 :             SCTAB nTabCount = rDoc.GetTableCount();
     787             :             SCTAB nTab;
     788             : 
     789           0 :             ::std::vector < sal_Int32 > aIndexList;
     790           0 :             SFX_REQUEST_ARG( rReq, pItem, SfxIntegerListItem, SID_SELECT_TABLES, false );
     791           0 :             if ( pItem )
     792           0 :                 pItem->GetList( aIndexList );
     793             :             else
     794             :             {
     795           0 :                 ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     796             :                 OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     797             : 
     798           0 :                 AbstractScShowTabDlg* pDlg = pFact->CreateScShowTabDlg( GetDialogParent(), RID_SCDLG_SHOW_TAB);
     799             :                 OSL_ENSURE(pDlg, "Dialog create fail!");
     800             :                 pDlg->SetDescription(
     801             :                     String( ScResId( STR_DLG_SELECTTABLES_TITLE ) ),
     802             :                     String( ScResId( STR_DLG_SELECTTABLES_LBNAME ) ),
     803           0 :                     GetStaticInterface()->GetSlot(SID_SELECT_TABLES)->GetCommand(), HID_SELECTTABLES );
     804             : 
     805             :                 // fill all table names with selection state
     806           0 :                 rtl::OUString aTabName;
     807           0 :                 for( nTab = 0; nTab < nTabCount; ++nTab )
     808             :                 {
     809           0 :                     rDoc.GetName( nTab, aTabName );
     810           0 :                     pDlg->Insert( aTabName, rMark.GetTableSelect( nTab ) );
     811             :                 }
     812             : 
     813           0 :                 if( pDlg->Execute() == RET_OK )
     814             :                 {
     815           0 :                     sal_uInt16 nSelCount = pDlg->GetSelectEntryCount();
     816             :                     sal_uInt16 nSelIx;
     817           0 :                     for( nSelIx = 0; nSelIx < nSelCount; ++nSelIx )
     818           0 :                         aIndexList.insert( aIndexList.begin()+nSelIx, pDlg->GetSelectEntryPos( nSelIx ) );
     819           0 :                     delete pDlg;
     820           0 :                     rReq.AppendItem( SfxIntegerListItem( SID_SELECT_TABLES, aIndexList ) );
     821             :                 }
     822             :                 else
     823           0 :                     rReq.Ignore();
     824             :             }
     825             : 
     826           0 :             if ( !aIndexList.empty() )
     827             :             {
     828           0 :                 sal_uInt16 nSelCount = aIndexList.size();
     829             :                 sal_uInt16 nSelIx;
     830           0 :                 SCTAB nFirstVisTab = 0;
     831             : 
     832             :                 // special case: only hidden tables selected -> do nothing
     833           0 :                 sal_Bool bVisSelected = false;
     834           0 :                 for( nSelIx = 0; !bVisSelected && (nSelIx < nSelCount); ++nSelIx )
     835           0 :                     bVisSelected = rDoc.IsVisible( nFirstVisTab = static_cast<SCTAB>(aIndexList[nSelIx]) );
     836           0 :                 if( !bVisSelected )
     837           0 :                     nSelCount = 0;
     838             : 
     839             :                 // select the tables
     840           0 :                 if( nSelCount )
     841             :                 {
     842           0 :                     for( nTab = 0; nTab < nTabCount; ++nTab )
     843           0 :                         rMark.SelectTable( nTab, false );
     844             : 
     845           0 :                     for( nSelIx = 0; nSelIx < nSelCount; ++nSelIx )
     846           0 :                         rMark.SelectTable( static_cast<SCTAB>(aIndexList[nSelIx]), sal_True );
     847             : 
     848             :                     // activate another table, if current is deselected
     849           0 :                     if( !rMark.GetTableSelect( rViewData.GetTabNo() ) )
     850             :                     {
     851           0 :                         rMark.SelectTable( nFirstVisTab, sal_True );
     852           0 :                         SetTabNo( nFirstVisTab );
     853             :                     }
     854             : 
     855           0 :                     rViewData.GetDocShell()->PostPaintExtras();
     856           0 :                     SfxBindings& rBind = rViewData.GetBindings();
     857           0 :                     rBind.Invalidate( FID_FILL_TAB );
     858           0 :                     rBind.Invalidate( FID_TAB_DESELECTALL );
     859             :                 }
     860             : 
     861           0 :                 rReq.Done();
     862           0 :             }
     863             :         }
     864           0 :         break;
     865             : 
     866             : 
     867             :         case SID_OUTLINE_DELETEALL:
     868           0 :             RemoveAllOutlines();
     869           0 :             rReq.Done();
     870           0 :             break;
     871             : 
     872             :         case SID_AUTO_OUTLINE:
     873           0 :             AutoOutline();
     874           0 :             rReq.Done();
     875           0 :             break;
     876             : 
     877             : 
     878             :         case SID_WINDOW_SPLIT:
     879             :             {
     880           0 :                 ScSplitMode eHSplit = GetViewData()->GetHSplitMode();
     881           0 :                 ScSplitMode eVSplit = GetViewData()->GetVSplitMode();
     882           0 :                 if ( eHSplit == SC_SPLIT_NORMAL || eVSplit == SC_SPLIT_NORMAL )     // aufheben
     883           0 :                     RemoveSplit();
     884           0 :                 else if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX )      // normal
     885           0 :                     FreezeSplitters( false );
     886             :                 else                                                                // erzeugen
     887           0 :                     SplitAtCursor();
     888           0 :                 rReq.Done();
     889             : 
     890           0 :                 InvalidateSplit();
     891             :             }
     892           0 :             break;
     893             : 
     894             :         case SID_WINDOW_FIX:
     895             :             {
     896           0 :                 ScSplitMode eHSplit = GetViewData()->GetHSplitMode();
     897           0 :                 ScSplitMode eVSplit = GetViewData()->GetVSplitMode();
     898           0 :                 if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX )           // aufheben
     899           0 :                     RemoveSplit();
     900             :                 else
     901           0 :                     FreezeSplitters( sal_True );        // erzeugen oder fixieren
     902           0 :                 rReq.Done();
     903             : 
     904           0 :                 InvalidateSplit();
     905             :             }
     906           0 :             break;
     907             : 
     908             :         //  ----------------------------------------------------------------
     909             : 
     910             :         case FID_CHG_SHOW:
     911             :             {
     912           0 :                 sal_uInt16          nId  = ScHighlightChgDlgWrapper::GetChildWindowId();
     913           0 :                 SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
     914             : 
     915           0 :                 pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
     916             :             }
     917           0 :             break;
     918             : 
     919             :         case FID_CHG_ACCEPT:
     920             :             {
     921           0 :                 pThisFrame->ToggleChildWindow(ScAcceptChgDlgWrapper::GetChildWindowId());
     922           0 :                 GetViewFrame()->GetBindings().Invalidate(FID_CHG_ACCEPT);
     923           0 :                 rReq.Done ();
     924             : 
     925             :                 /*
     926             :                 sal_uInt16          nId  = ScAcceptChgDlgWrapper::GetChildWindowId();
     927             :                 SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
     928             : 
     929             :                 pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True );
     930             :                 */
     931             :             }
     932           0 :             break;
     933             : 
     934             :         case FID_CHG_COMMENT:
     935             :             {
     936           0 :                 ScViewData* pData = GetViewData();
     937           0 :                 ScAddress aCursorPos( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
     938           0 :                 ScDocShell* pDocSh = pData->GetDocShell();
     939             : 
     940           0 :                 ScChangeAction* pAction = pDocSh->GetChangeAction( aCursorPos );
     941           0 :                 if ( pAction )
     942             :                 {
     943             :                     const SfxPoolItem* pItem;
     944           0 :                     if ( pReqArgs &&
     945           0 :                          pReqArgs->GetItemState( nSlot, sal_True, &pItem ) == SFX_ITEM_SET &&
     946           0 :                          pItem->ISA( SfxStringItem ) )
     947             :                     {
     948           0 :                         String aComment = ((const SfxStringItem*)pItem)->GetValue();
     949           0 :                         pDocSh->SetChangeComment( pAction, aComment );
     950           0 :                         rReq.Done();
     951             :                     }
     952             :                     else
     953             :                     {
     954           0 :                         pDocSh->ExecuteChangeCommentDialog( pAction, GetDialogParent() );
     955           0 :                         rReq.Done();
     956             :                     }
     957             :                 }
     958             :             }
     959           0 :             break;
     960             : 
     961             :         case SID_CREATE_SW_DRAWVIEW:
     962             :             //  wird von den Forms gerufen, wenn die DrawView mit allem Zubehoer
     963             :             //  angelegt werden muss
     964           0 :             if (!GetScDrawView())
     965             :             {
     966           0 :                 GetViewData()->GetDocShell()->MakeDrawLayer();
     967           0 :                 rBindings.InvalidateAll(false);
     968             :             }
     969           0 :             break;
     970             : 
     971             :         case FID_PROTECT_DOC:
     972             :             {
     973           0 :                 ScDocument*         pDoc = GetViewData()->GetDocument();
     974             :                 SfxPasswordDialog*  pDlg;
     975             : 
     976           0 :                 if( pReqArgs )
     977             :                 {
     978             :                     const SfxPoolItem* pItem;
     979           0 :                     if( pReqArgs->HasItem( FID_PROTECT_DOC, &pItem ) &&
     980           0 :                         ((const SfxBoolItem*)pItem)->GetValue() == static_cast<sal_Bool>(pDoc->IsDocProtected()) )
     981             :                     {
     982           0 :                         rReq.Ignore();
     983             :                         break;
     984             :                     }
     985             :                 }
     986             : 
     987           0 :                 ScDocProtection* pProtect = pDoc->GetDocProtection();
     988           0 :                 if (pProtect && pProtect->isProtected())
     989             :                 {
     990           0 :                     sal_Bool    bCancel = false;
     991           0 :                     String  aPassword;
     992             : 
     993           0 :                     if (pProtect->isProtectedWithPass())
     994             :                     {
     995           0 :                         String  aText( ScResId(SCSTR_PASSWORD) );
     996             : 
     997           0 :                         pDlg = new SfxPasswordDialog(   GetDialogParent(), &aText );
     998           0 :                         pDlg->SetText( ScResId(SCSTR_UNPROTECTDOC) );
     999           0 :                         pDlg->SetMinLen( 0 );
    1000           0 :                         pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_DOC)->GetCommand() );
    1001           0 :                         pDlg->SetEditHelpId( HID_PASSWD_DOC );
    1002             : 
    1003           0 :                         if (pDlg->Execute() == RET_OK)
    1004           0 :                             aPassword = pDlg->GetPassword();
    1005             :                         else
    1006           0 :                             bCancel = sal_True;
    1007           0 :                         delete pDlg;
    1008             :                     }
    1009           0 :                     if (!bCancel)
    1010             :                     {
    1011           0 :                         Unprotect( TABLEID_DOC, aPassword );
    1012           0 :                         rReq.AppendItem( SfxBoolItem( FID_PROTECT_DOC, false ) );
    1013           0 :                         rReq.Done();
    1014           0 :                     }
    1015             :                 }
    1016             :                 else
    1017             :                 {
    1018           0 :                     String aText( ScResId(SCSTR_PASSWORDOPT) );
    1019             : 
    1020           0 :                     pDlg = new SfxPasswordDialog(   GetDialogParent(), &aText );
    1021           0 :                     pDlg->SetText( ScResId(SCSTR_PROTECTDOC) );
    1022           0 :                     pDlg->SetMinLen( 0 );
    1023           0 :                     pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_DOC)->GetCommand() );
    1024           0 :                     pDlg->SetEditHelpId( HID_PASSWD_DOC );
    1025           0 :                     pDlg->ShowExtras( SHOWEXTRAS_CONFIRM );
    1026             : 
    1027           0 :                     if (pDlg->Execute() == RET_OK)
    1028             :                     {
    1029           0 :                         String aPassword = pDlg->GetPassword();
    1030           0 :                         Protect( TABLEID_DOC, aPassword );
    1031           0 :                         rReq.AppendItem( SfxBoolItem( FID_PROTECT_DOC, sal_True ) );
    1032           0 :                         rReq.Done();
    1033             :                     }
    1034             : 
    1035           0 :                     delete pDlg;
    1036             :                 }
    1037           0 :                 rBindings.Invalidate( FID_PROTECT_DOC );
    1038             :             }
    1039           0 :             break;
    1040             : 
    1041             : 
    1042             :         case FID_PROTECT_TABLE:
    1043             :         {
    1044           0 :             ScDocument* pDoc = GetViewData()->GetDocument();
    1045           0 :             SCTAB       nTab = GetViewData()->GetTabNo();
    1046           0 :             bool        bOldProtection = pDoc->IsTabProtected(nTab);
    1047             : 
    1048           0 :             if( pReqArgs )
    1049             :             {
    1050             :                 const SfxPoolItem* pItem;
    1051           0 :                 bool bNewProtection = !bOldProtection;
    1052           0 :                 if( pReqArgs->HasItem( FID_PROTECT_TABLE, &pItem ) )
    1053           0 :                     bNewProtection = ((const SfxBoolItem*)pItem)->GetValue();
    1054           0 :                 if( bNewProtection == bOldProtection )
    1055             :                 {
    1056           0 :                     rReq.Ignore();
    1057             :                     break;
    1058             :                 }
    1059             :             }
    1060             : 
    1061           0 :             if (bOldProtection)
    1062             :             {
    1063             :                 // Unprotect a protected sheet.
    1064             : 
    1065           0 :                 ScTableProtection* pProtect = pDoc->GetTabProtection(nTab);
    1066           0 :                 if (pProtect && pProtect->isProtectedWithPass())
    1067             :                 {
    1068           0 :                     String aText( ScResId(SCSTR_PASSWORDOPT) );
    1069           0 :                     auto_ptr<SfxPasswordDialog> pDlg(new SfxPasswordDialog(GetDialogParent(), &aText));
    1070           0 :                     pDlg->SetText( ScResId(SCSTR_UNPROTECTTAB) );
    1071           0 :                     pDlg->SetMinLen( 0 );
    1072           0 :                     pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_TABLE)->GetCommand() );
    1073           0 :                     pDlg->SetEditHelpId( HID_PASSWD_TABLE );
    1074             : 
    1075           0 :                     if (pDlg->Execute() == RET_OK)
    1076             :                     {
    1077           0 :                         String aPassword = pDlg->GetPassword();
    1078           0 :                         Unprotect(nTab, aPassword);
    1079           0 :                     }
    1080             :                 }
    1081             :                 else
    1082             :                     // this sheet is not password-protected.
    1083           0 :                     Unprotect(nTab, String());
    1084             : 
    1085           0 :                 if (!pReqArgs)
    1086             :                 {
    1087           0 :                     rReq.AppendItem( SfxBoolItem(FID_PROTECT_TABLE, false) );
    1088           0 :                     rReq.Done();
    1089             :                 }
    1090             :             }
    1091             :             else
    1092             :             {
    1093             :                 // Protect a current sheet.
    1094             : 
    1095           0 :                 auto_ptr<ScTableProtectionDlg> pDlg(new ScTableProtectionDlg(GetDialogParent()));
    1096             : 
    1097           0 :                 ScTableProtection* pProtect = pDoc->GetTabProtection(nTab);
    1098           0 :                 if (pProtect)
    1099           0 :                     pDlg->SetDialogData(*pProtect);
    1100             : 
    1101           0 :                 if (pDlg->Execute() == RET_OK)
    1102             :                 {
    1103           0 :                     pScMod->InputEnterHandler();
    1104             : 
    1105           0 :                     ScTableProtection aNewProtect;
    1106           0 :                     pDlg->WriteData(aNewProtect);
    1107           0 :                     ProtectSheet(nTab, aNewProtect);
    1108           0 :                     if (!pReqArgs)
    1109             :                     {
    1110           0 :                         rReq.AppendItem( SfxBoolItem(FID_PROTECT_TABLE, true) );
    1111           0 :                         rReq.Done();
    1112           0 :                     }
    1113           0 :                 }
    1114             :             }
    1115           0 :             TabChanged();
    1116           0 :             UpdateInputHandler(true);   // damit sofort wieder eingegeben werden kann
    1117           0 :             SelectionChanged();
    1118             :         }
    1119           0 :         break;
    1120             : 
    1121             :         case SID_OPT_LOCALE_CHANGED :
    1122             :             {   // locale changed, SYSTEM number formats changed => repaint cell contents
    1123           0 :                 PaintGrid();
    1124           0 :                 rReq.Done();
    1125             :             }
    1126           0 :             break;
    1127             : 
    1128             :         default:
    1129             :             OSL_FAIL("Unbekannter Slot bei ScTabViewShell::Execute");
    1130           0 :             break;
    1131             :     }
    1132          15 : }
    1133             : 
    1134             : 
    1135             : 
    1136             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10