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

Generated by: LCOV version 1.10