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

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "scitems.hxx"
      21             : #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           0 : static sal_uInt16 lcl_ParseRange(ScRange& rScRange, const OUString& aAddress, ScDocument* pDoc, sal_uInt16 /* nSlot */)
      74             : {
      75           0 :     sal_uInt16 nResult = rScRange.Parse(aAddress, pDoc);
      76           0 :     if ( (nResult & SCA_VALID) )
      77           0 :         return nResult;
      78             : 
      79           0 :     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           0 : static sal_uInt16 lcl_ParseAddress(ScAddress& rScAddress, const OUString& aAddress, ScDocument* pDoc, sal_uInt16 /* nSlot */)
      85             : {
      86           0 :     sal_uInt16 nResult = rScAddress.Parse(aAddress, pDoc);
      87           0 :     if ( (nResult & SCA_VALID) )
      88           0 :         return nResult;
      89             : 
      90           0 :     return rScAddress.Parse(aAddress, pDoc, ScAddress::Details(formula::FormulaGrammar::CONV_XL_A1, 0, 0));
      91             : }
      92             : 
      93           0 : void ScTabViewShell::Execute( SfxRequest& rReq )
      94             : {
      95           0 :     SfxViewFrame*       pThisFrame  = GetViewFrame();
      96           0 :     SfxBindings&        rBindings   = pThisFrame->GetBindings();
      97           0 :     ScModule*           pScMod      = SC_MOD();
      98           0 :     const SfxItemSet*   pReqArgs    = rReq.GetArgs();
      99           0 :     sal_uInt16              nSlot       = rReq.GetSlot();
     100             : 
     101           0 :     if (nSlot != SID_CURRENTCELL)       // der kommt beim MouseButtonUp
     102           0 :         HideListBox();                  // Autofilter-DropDown-Listbox
     103             : 
     104           0 :     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) == SFX_ITEM_SET )
     111             :                 {
     112           0 :                     OUString aFileName = ((const SfxStringItem*)pItem)->GetValue();
     113             : 
     114             :                         // Einfuege-Position
     115             : 
     116           0 :                     Point aInsertPos;
     117           0 :                     if ( pReqArgs->GetItemState(FN_PARAM_1,true,&pItem) == SFX_ITEM_SET )
     118           0 :                         aInsertPos = ((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) == SFX_ITEM_SET )
     126           0 :                         bAsLink = ((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 ) == SFX_ITEM_SET )
     154           0 :                         aPrintStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
     155           0 :                     if ( pReqArgs->GetItemState( FN_PARAM_2, true, &pItem ) == SFX_ITEM_SET )
     156           0 :                         aRowStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
     157           0 :                     if ( pReqArgs->GetItemState( FN_PARAM_3, true, &pItem ) == SFX_ITEM_SET )
     158           0 :                         aColStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
     159           0 :                     if ( pReqArgs->GetItemState( FN_PARAM_4, true, &pItem ) == SFX_ITEM_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 ) == SFX_ITEM_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             :             GetViewData()->GetDocShell()->
     218           0 :                 ExecutePageStyle( *this, rReq, GetViewData()->GetTabNo() );
     219           0 :             break;
     220             : 
     221             :         case SID_JUMPTOMARK:
     222             :         case SID_CURRENTCELL:
     223           0 :             if ( pReqArgs )
     224             :             {
     225           0 :                 OUString aAddress;
     226             :                 const SfxPoolItem* pItem;
     227           0 :                 if ( pReqArgs->GetItemState( nSlot, true, &pItem ) == SFX_ITEM_SET )
     228           0 :                     aAddress = ((const SfxStringItem*)pItem)->GetValue();
     229           0 :                 else if ( nSlot == SID_JUMPTOMARK && pReqArgs->GetItemState(
     230           0 :                                             SID_JUMPTOMARK, true, &pItem ) == SFX_ITEM_SET )
     231           0 :                     aAddress = ((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           0 :                 bool bUnmark = ( nSlot == SID_CURRENTCELL );
     238           0 :                 if ( pReqArgs->GetItemState( FN_PARAM_1, true, &pItem ) == SFX_ITEM_SET )
     239           0 :                     bUnmark = ((const SfxBoolItem*)pItem)->GetValue();
     240             : 
     241           0 :                 bool bAlignToCursor = true;
     242           0 :                 if (pReqArgs->GetItemState(FN_PARAM_2, true, &pItem) == SFX_ITEM_SET)
     243           0 :                     bAlignToCursor = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     244             : 
     245           0 :                 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           0 :                 bool bFound = false;
     254           0 :                 ScViewData* pViewData = GetViewData();
     255           0 :                 ScDocument* pDoc      = pViewData->GetDocument();
     256           0 :                 ScMarkData& rMark     = pViewData->GetMarkData();
     257           0 :                 ScRange     aScRange;
     258           0 :                 ScAddress   aScAddress;
     259           0 :                 sal_uInt16      nResult = lcl_ParseRange(aScRange, aAddress, pDoc, nSlot);
     260           0 :                 SCTAB       nTab = pViewData->GetTabNo();
     261           0 :                 bool        bMark = true;
     262             : 
     263             :                 // Is this a range ?
     264           0 :                 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           0 :                 else if ( (nResult = lcl_ParseAddress(aScAddress, aAddress, pDoc, nSlot)) & SCA_VALID )
     279             :                 {
     280           0 :                     if ( nResult & SCA_TAB_3D )
     281             :                     {
     282           0 :                         if( aScAddress.Tab() != nTab )
     283           0 :                             SetTabNo( nTab = aScAddress.Tab() );
     284             :                     }
     285             :                     else
     286           0 :                         aScAddress.SetTab( nTab );
     287             : 
     288           0 :                     aScRange = ScRange( aScAddress, aScAddress );
     289             :                     // Zellen sollen nicht markiert werden
     290           0 :                     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           0 :                 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( pViewData->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           0 :                 if ( !ValidRow(aScRange.aStart.Row()) || !ValidRow(aScRange.aEnd.Row()) )
     323           0 :                     nResult = 0;
     324             : 
     325             :                 // wir haben was gefunden
     326           0 :                 if( nResult & SCA_VALID )
     327             :                 {
     328           0 :                     bFound = true;
     329           0 :                     SCCOL nCol = aScRange.aStart.Col();
     330           0 :                     SCROW nRow = aScRange.aStart.Row();
     331           0 :                     bool bNothing = ( pViewData->GetCurX()==nCol && pViewData->GetCurY()==nRow );
     332             : 
     333             :                     // markieren
     334           0 :                     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           0 :                         if( bUnmark )
     355             :                         {
     356             :                             MoveCursorAbs( nCol, nRow,
     357           0 :                                 SC_FOLLOW_NONE, false, false );
     358             :                         }
     359             :                     }
     360             : 
     361             :                     // und Cursor setzen
     362             : 
     363             :                     // zusammengefasste Zellen beruecksichtigen:
     364           0 :                     pDoc->SkipOverlapped(nCol, nRow, nTab);
     365             : 
     366             :                     //  Navigator-Aufrufe sind nicht API!!!
     367             : 
     368           0 :                     if( bNothing )
     369             :                     {
     370           0 :                         if (rReq.IsAPI())
     371           0 :                             rReq.Ignore();      // wenn Makro, dann gar nix
     372             :                         else
     373           0 :                             rReq.Done();        // sonst wenigstens aufzeichnen
     374             :                     }
     375             :                     else
     376             :                     {
     377           0 :                         pViewData->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           0 :                     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           0 :                         AlignToCursor( nCol, nRow, SC_FOLLOW_JUMP );
     391             :                     }
     392             : 
     393           0 :                     rReq.SetReturnValue( SfxStringItem( SID_CURRENTCELL, aAddress ) );
     394             :                 }
     395             : 
     396           0 :                 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           0 :                 if ( !bFound && nSlot == SID_JUMPTOMARK )
     410             :                 {
     411             :                     //  Grafik-Objekte probieren (nur bei URL's)
     412             : 
     413           0 :                     bFound = SelectObject( aAddress );
     414             :                 }
     415             : 
     416           0 :                 if (!bFound && !rReq.IsAPI())
     417           0 :                     ErrorMessage( STR_ERR_INVALID_AREA );
     418             :             }
     419           0 :             break;
     420             : 
     421             :         case SID_CURRENTOBJECT:
     422           0 :             if ( pReqArgs )
     423             :             {
     424           0 :                 OUString aName = ((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 = ((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( ((const SfxStringItem&)pReqArgs->
     451           0 :                                         Get(nSlot)).GetValue() );
     452             : 
     453           0 :                 SfxViewFrame*   pViewFrame = NULL;
     454           0 :                 ScDocShell*     pDocSh = (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 = (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             : 
     480             :         case SID_PRINTPREVIEW:
     481             :             {
     482           0 :                 if ( !pThisFrame->GetFrame().IsInPlace() )          // nicht bei OLE
     483             :                 {
     484             :                     //  print preview is now always in the same frame as the tab view
     485             :                     //  -> always switch this frame back to normal view
     486             :                     //  (ScPreviewShell ctor reads view data)
     487             : 
     488             :                     // #102785#; finish input
     489           0 :                     pScMod->InputEnterHandler();
     490             : 
     491           0 :                     pThisFrame->GetDispatcher()->Execute( SID_VIEWSHELL1, SFX_CALLMODE_ASYNCHRON );
     492             :                 }
     493             :                 //  else Fehler (z.B. Ole)
     494             :             }
     495           0 :             break;
     496             : 
     497             :         case SID_DETECTIVE_DEL_ALL:
     498           0 :             DetectiveDelAll();
     499           0 :             rReq.Done();
     500           0 :             break;
     501             : 
     502             :         //  SID_TABLE_ACTIVATE und SID_MARKAREA werden von Basic aus an der versteckten
     503             :         //  View aufgerufen, um auf der sichtbaren View zu markieren/umzuschalten:
     504             : 
     505             :         case SID_TABLE_ACTIVATE:
     506             :             OSL_FAIL("old slot SID_TABLE_ACTIVATE");
     507           0 :             break;
     508             : 
     509             :         case SID_REPAINT:
     510           0 :             PaintGrid();
     511           0 :             PaintTop();
     512           0 :             PaintLeft();
     513           0 :             PaintExtras();
     514           0 :             rReq.Done();
     515           0 :             break;
     516             : 
     517             :         case FID_NORMALVIEWMODE:
     518             :         case FID_PAGEBREAKMODE:
     519             :             {
     520           0 :                 bool bWantPageBreak = nSlot == FID_PAGEBREAKMODE;
     521             : 
     522             :                 // check whether there is an explicit argument, use it
     523             :                 const SfxPoolItem* pItem;
     524           0 :                 if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
     525             :                 {
     526           0 :                     bool bItemValue = ((const SfxBoolItem*)pItem)->GetValue();
     527           0 :                     bWantPageBreak = (nSlot == FID_PAGEBREAKMODE) == bItemValue;
     528             :                 }
     529             : 
     530           0 :                 if( GetViewData()->IsPagebreakMode() != bWantPageBreak )
     531             :                 {
     532           0 :                     SetPagebreakMode( bWantPageBreak );
     533           0 :                     UpdatePageBreakData();
     534           0 :                     SetCurSubShell( GetCurObjectSelectionType(), true );
     535           0 :                     PaintGrid();
     536           0 :                     PaintTop();
     537           0 :                     PaintLeft();
     538           0 :                     rBindings.Invalidate( nSlot );
     539           0 :                     rReq.AppendItem( SfxBoolItem( nSlot, true ) );
     540           0 :                     rReq.Done();
     541             :                 }
     542             :             }
     543           0 :             break;
     544             : 
     545             :         case FID_FUNCTION_BOX:
     546             :             {
     547           0 :                 sal_uInt16 nChildId = ScFunctionChildWindow::GetChildWindowId();
     548           0 :                 if ( rReq.GetArgs() )
     549           0 :                     pThisFrame->SetChildWindow( nChildId, ((const SfxBoolItem&) (rReq.GetArgs()->Get(FID_FUNCTION_BOX))).GetValue());
     550             :                 else
     551             :                 {
     552           0 :                     pThisFrame->ToggleChildWindow( nChildId );
     553           0 :                     rReq.AppendItem( SfxBoolItem( FID_FUNCTION_BOX , pThisFrame->HasChildWindow( nChildId ) ) );
     554             :                 }
     555             : 
     556           0 :                 GetViewFrame()->GetBindings().Invalidate(FID_FUNCTION_BOX);
     557           0 :                 rReq.Done ();
     558             :             }
     559           0 :             break;
     560             : 
     561             : 
     562             :         case FID_TOGGLESYNTAX:
     563             :             {
     564           0 :                 bool bSet = !GetViewData()->IsSyntaxMode();
     565             :                 const SfxPoolItem* pItem;
     566           0 :                 if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
     567           0 :                     bSet = ((const SfxBoolItem*)pItem)->GetValue();
     568           0 :                 GetViewData()->SetSyntaxMode( bSet );
     569           0 :                 PaintGrid();
     570           0 :                 rBindings.Invalidate( FID_TOGGLESYNTAX );
     571           0 :                 rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
     572           0 :                 rReq.Done();
     573             :             }
     574           0 :             break;
     575             :         case FID_TOGGLEHEADERS:
     576             :             {
     577           0 :                 bool bSet = !GetViewData()->IsHeaderMode();
     578             :                 const SfxPoolItem* pItem;
     579           0 :                 if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
     580           0 :                     bSet = ((const SfxBoolItem*)pItem)->GetValue();
     581           0 :                 GetViewData()->SetHeaderMode( bSet );
     582           0 :                 RepeatResize();
     583           0 :                 rBindings.Invalidate( FID_TOGGLEHEADERS );
     584           0 :                 rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
     585           0 :                 rReq.Done();
     586             :             }
     587           0 :             break;
     588             : 
     589             :         case FID_TOGGLEFORMULA:
     590             :             {
     591           0 :                 ScViewData* pViewData = GetViewData();
     592           0 :                 const ScViewOptions& rOpts = pViewData->GetOptions();
     593           0 :                 bool bFormulaMode = !rOpts.GetOption( VOPT_FORMULAS );
     594             :                 const SfxPoolItem *pItem;
     595           0 :                 if( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
     596           0 :                     bFormulaMode = ((const SfxBoolItem *)pItem)->GetValue();
     597             : 
     598           0 :                 ScViewOptions rSetOpts = ScViewOptions( rOpts );
     599           0 :                 rSetOpts.SetOption( VOPT_FORMULAS, bFormulaMode );
     600           0 :                 pViewData->SetOptions( rSetOpts );
     601             : 
     602           0 :                 pViewData->GetDocShell()->PostPaintGridAll();
     603             : 
     604           0 :                 rBindings.Invalidate( FID_TOGGLEFORMULA );
     605           0 :                 rReq.AppendItem( SfxBoolItem( nSlot, bFormulaMode ) );
     606           0 :                 rReq.Done();
     607             :             }
     608           0 :             break;
     609             : 
     610             :         case FID_TOGGLEINPUTLINE:
     611             :             {
     612           0 :                 sal_uInt16          nId  = ScInputWindowWrapper::GetChildWindowId();
     613           0 :                 SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
     614           0 :                 bool bSet = ( pWnd == NULL );
     615             :                 const SfxPoolItem* pItem;
     616           0 :                 if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
     617           0 :                     bSet = ((const SfxBoolItem*)pItem)->GetValue();
     618             : 
     619           0 :                 pThisFrame->SetChildWindow( nId, bSet );
     620           0 :                 rBindings.Invalidate( FID_TOGGLEINPUTLINE );
     621           0 :                 rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
     622           0 :                 rReq.Done();
     623             :             }
     624           0 :             break;
     625             : 
     626             :         case SID_ATTR_ZOOM: // Statuszeile
     627             :         case FID_SCALE:
     628             :             {
     629           0 :                 bool bSyncZoom = SC_MOD()->GetAppOptions().GetSynchronizeZoom();
     630           0 :                 SvxZoomType eOldZoomType = GetZoomType();
     631           0 :                 SvxZoomType eNewZoomType = eOldZoomType;
     632           0 :                 const Fraction& rOldY = GetViewData()->GetZoomY();  // Y wird angezeigt
     633           0 :                 sal_uInt16 nOldZoom = (sal_uInt16)(( rOldY.GetNumerator() * 100 )
     634           0 :                                             / rOldY.GetDenominator());
     635           0 :                 sal_uInt16 nZoom = nOldZoom;
     636           0 :                 bool bCancel = false;
     637             : 
     638           0 :                 if ( pReqArgs )
     639             :                 {
     640             :                     const SvxZoomItem& rZoomItem = (const SvxZoomItem&)
     641           0 :                                                    pReqArgs->Get(SID_ATTR_ZOOM);
     642             : 
     643           0 :                     eNewZoomType = rZoomItem.GetType();
     644           0 :                     nZoom     = rZoomItem.GetValue();
     645             :                 }
     646             :                 else
     647             :                 {
     648           0 :                     SfxItemSet      aSet     ( GetPool(), SID_ATTR_ZOOM, SID_ATTR_ZOOM );
     649           0 :                     SvxZoomItem     aZoomItem( eOldZoomType, nOldZoom, SID_ATTR_ZOOM );
     650           0 :                     AbstractSvxZoomDialog* pDlg = NULL;
     651           0 :                     ScMarkData&     rMark = GetViewData()->GetMarkData();
     652             :                     sal_uInt16          nBtnFlags =   SVX_ZOOM_ENABLE_50
     653             :                                                 | SVX_ZOOM_ENABLE_75
     654             :                                                 | SVX_ZOOM_ENABLE_100
     655             :                                                 | SVX_ZOOM_ENABLE_150
     656             :                                                 | SVX_ZOOM_ENABLE_200
     657             :                                                 | SVX_ZOOM_ENABLE_WHOLEPAGE
     658           0 :                                                 | SVX_ZOOM_ENABLE_PAGEWIDTH;
     659             : 
     660           0 :                     if ( rMark.IsMarked() || rMark.IsMultiMarked() )
     661           0 :                         nBtnFlags = nBtnFlags | SVX_ZOOM_ENABLE_OPTIMAL;
     662             : 
     663           0 :                     aZoomItem.SetValueSet( nBtnFlags );
     664           0 :                     aSet.Put( aZoomItem );
     665           0 :                     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     666           0 :                     if(pFact)
     667             :                     {
     668           0 :                         pDlg = pFact->CreateSvxZoomDialog(GetDialogParent(), aSet );
     669             :                         OSL_ENSURE(pDlg, "Dialogdiet fail!");
     670             :                     }
     671           0 :                     if (pDlg)
     672             :                     {
     673           0 :                         pDlg->SetLimits( MINZOOM, MAXZOOM );
     674             : 
     675           0 :                         bCancel = ( RET_CANCEL == pDlg->Execute() );
     676             : 
     677             :                         // bCancel is True only if we were in the previous if block,
     678             :                         // so no need to check again pDlg
     679           0 :                         if ( !bCancel )
     680             :                         {
     681             :                             const SvxZoomItem&  rZoomItem = (const SvxZoomItem&)
     682           0 :                                                     pDlg->GetOutputItemSet()->
     683           0 :                                                         Get( SID_ATTR_ZOOM );
     684             : 
     685           0 :                             eNewZoomType = rZoomItem.GetType();
     686           0 :                             nZoom     = rZoomItem.GetValue();
     687             :                         }
     688             : 
     689           0 :                         delete pDlg;
     690           0 :                     }
     691             :                 }
     692             : 
     693           0 :                 if ( !bCancel )
     694             :                 {
     695           0 :                     if ( eNewZoomType == SVX_ZOOM_PERCENT )
     696             :                     {
     697           0 :                         if ( nZoom < MINZOOM )  nZoom = MINZOOM;
     698           0 :                         if ( nZoom > MAXZOOM )  nZoom = MAXZOOM;
     699             :                     }
     700             :                     else
     701             :                     {
     702           0 :                         nZoom = CalcZoom( eNewZoomType, nOldZoom );
     703           0 :                         bCancel = nZoom == 0;
     704             :                     }
     705             : 
     706           0 :                     switch ( eNewZoomType )
     707             :                     {
     708             :                         case SVX_ZOOM_WHOLEPAGE:
     709             :                         case SVX_ZOOM_PAGEWIDTH:
     710           0 :                             SetZoomType( eNewZoomType, bSyncZoom );
     711           0 :                             break;
     712             : 
     713             :                         default:
     714           0 :                             SetZoomType( SVX_ZOOM_PERCENT, bSyncZoom );
     715             :                     }
     716             :                 }
     717             : 
     718           0 :                 if ( nZoom != nOldZoom && !bCancel )
     719             :                 {
     720           0 :                     if (!GetViewData()->IsPagebreakMode())
     721             :                     {
     722           0 :                         ScAppOptions aNewOpt = pScMod->GetAppOptions();
     723           0 :                         aNewOpt.SetZoom( nZoom );
     724           0 :                         aNewOpt.SetZoomType( GetZoomType() );
     725           0 :                         pScMod->SetAppOptions( aNewOpt );
     726             :                     }
     727           0 :                     Fraction aFract( nZoom, 100 );
     728           0 :                     SetZoom( aFract, aFract, bSyncZoom );
     729           0 :                     PaintGrid();
     730           0 :                     PaintTop();
     731           0 :                     PaintLeft();
     732           0 :                     rBindings.Invalidate( SID_ATTR_ZOOM );
     733           0 :                     rReq.AppendItem( SvxZoomItem( GetZoomType(), nZoom, nSlot ) );
     734           0 :                     rReq.Done();
     735             :                 }
     736             :             }
     737           0 :             break;
     738             : 
     739             :         case SID_ATTR_ZOOMSLIDER:
     740             :             {
     741           0 :                 const SfxPoolItem* pItem = NULL;
     742           0 :                 bool bSyncZoom = SC_MOD()->GetAppOptions().GetSynchronizeZoom();
     743           0 :                 if ( pReqArgs && pReqArgs->GetItemState(SID_ATTR_ZOOMSLIDER, true, &pItem) == SFX_ITEM_SET )
     744             :                 {
     745           0 :                     const sal_uInt16 nCurrentZoom = ((const SvxZoomSliderItem *)pItem)->GetValue();
     746           0 :                     if( nCurrentZoom )
     747             :                     {
     748           0 :                         SetZoomType( SVX_ZOOM_PERCENT, bSyncZoom );
     749           0 :                         if (!GetViewData()->IsPagebreakMode())
     750             :                         {
     751           0 :                             ScAppOptions aNewOpt = pScMod->GetAppOptions();
     752           0 :                             aNewOpt.SetZoom( nCurrentZoom );
     753           0 :                             aNewOpt.SetZoomType( GetZoomType() );
     754           0 :                             pScMod->SetAppOptions( aNewOpt );
     755             :                         }
     756           0 :                         Fraction aFract( nCurrentZoom,100 );
     757           0 :                         SetZoom( aFract, aFract, bSyncZoom );
     758           0 :                         PaintGrid();
     759           0 :                         PaintTop();
     760           0 :                         PaintLeft();
     761           0 :                         rBindings.Invalidate( SID_ATTR_ZOOMSLIDER );
     762           0 :                         rReq.Done();
     763             :                     }
     764             :                 }
     765             :             }
     766           0 :             break;
     767             : 
     768             :         case FID_TAB_SELECTALL:
     769           0 :             SelectAllTables();
     770           0 :             rReq.Done();
     771           0 :             break;
     772             : 
     773             :         case FID_TAB_DESELECTALL:
     774           0 :             DeselectAllTables();
     775           0 :             rReq.Done();
     776           0 :             break;
     777             : 
     778             :         case SID_SELECT_TABLES:
     779             :         {
     780           0 :             ScViewData& rViewData = *GetViewData();
     781           0 :             ScDocument& rDoc = *rViewData.GetDocument();
     782           0 :             ScMarkData& rMark = rViewData.GetMarkData();
     783           0 :             SCTAB nTabCount = rDoc.GetTableCount();
     784             :             SCTAB nTab;
     785             : 
     786           0 :             ::std::vector < sal_Int32 > aIndexList;
     787           0 :             SFX_REQUEST_ARG( rReq, pItem, SfxIntegerListItem, SID_SELECT_TABLES, false );
     788           0 :             if ( pItem )
     789           0 :                 pItem->GetList( aIndexList );
     790             :             else
     791             :             {
     792           0 :                 ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     793             :                 OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     794             : 
     795           0 :                 AbstractScShowTabDlg* pDlg = pFact->CreateScShowTabDlg(GetDialogParent());
     796             :                 OSL_ENSURE(pDlg, "Dialog create fail!");
     797             :                 pDlg->SetDescription(
     798             :                     OUString( ScResId( STR_DLG_SELECTTABLES_TITLE ) ),
     799             :                     OUString( ScResId( STR_DLG_SELECTTABLES_LBNAME ) ),
     800           0 :                     GetStaticInterface()->GetSlot(SID_SELECT_TABLES)->GetCommand(), HID_SELECTTABLES );
     801             : 
     802             :                 // fill all table names with selection state
     803           0 :                 OUString aTabName;
     804           0 :                 for( nTab = 0; nTab < nTabCount; ++nTab )
     805             :                 {
     806           0 :                     rDoc.GetName( nTab, aTabName );
     807           0 :                     pDlg->Insert( aTabName, rMark.GetTableSelect( nTab ) );
     808             :                 }
     809             : 
     810           0 :                 if( pDlg->Execute() == RET_OK )
     811             :                 {
     812           0 :                     sal_uInt16 nSelCount = pDlg->GetSelectEntryCount();
     813             :                     sal_uInt16 nSelIx;
     814           0 :                     for( nSelIx = 0; nSelIx < nSelCount; ++nSelIx )
     815           0 :                         aIndexList.insert( aIndexList.begin()+nSelIx, pDlg->GetSelectEntryPos( nSelIx ) );
     816           0 :                     delete pDlg;
     817           0 :                     rReq.AppendItem( SfxIntegerListItem( SID_SELECT_TABLES, aIndexList ) );
     818             :                 }
     819             :                 else
     820           0 :                     rReq.Ignore();
     821             :             }
     822             : 
     823           0 :             if ( !aIndexList.empty() )
     824             :             {
     825           0 :                 sal_uInt16 nSelCount = aIndexList.size();
     826             :                 sal_uInt16 nSelIx;
     827           0 :                 SCTAB nFirstVisTab = 0;
     828             : 
     829             :                 // special case: only hidden tables selected -> do nothing
     830           0 :                 bool bVisSelected = false;
     831           0 :                 for( nSelIx = 0; !bVisSelected && (nSelIx < nSelCount); ++nSelIx )
     832           0 :                     bVisSelected = rDoc.IsVisible( nFirstVisTab = static_cast<SCTAB>(aIndexList[nSelIx]) );
     833           0 :                 if( !bVisSelected )
     834           0 :                     nSelCount = 0;
     835             : 
     836             :                 // select the tables
     837           0 :                 if( nSelCount )
     838             :                 {
     839           0 :                     for( nTab = 0; nTab < nTabCount; ++nTab )
     840           0 :                         rMark.SelectTable( nTab, false );
     841             : 
     842           0 :                     for( nSelIx = 0; nSelIx < nSelCount; ++nSelIx )
     843           0 :                         rMark.SelectTable( static_cast<SCTAB>(aIndexList[nSelIx]), true );
     844             : 
     845             :                     // activate another table, if current is deselected
     846           0 :                     if( !rMark.GetTableSelect( rViewData.GetTabNo() ) )
     847             :                     {
     848           0 :                         rMark.SelectTable( nFirstVisTab, true );
     849           0 :                         SetTabNo( nFirstVisTab );
     850             :                     }
     851             : 
     852           0 :                     rViewData.GetDocShell()->PostPaintExtras();
     853           0 :                     SfxBindings& rBind = rViewData.GetBindings();
     854           0 :                     rBind.Invalidate( FID_FILL_TAB );
     855           0 :                     rBind.Invalidate( FID_TAB_DESELECTALL );
     856             :                 }
     857             : 
     858           0 :                 rReq.Done();
     859           0 :             }
     860             :         }
     861           0 :         break;
     862             : 
     863             : 
     864             :         case SID_OUTLINE_DELETEALL:
     865           0 :             RemoveAllOutlines();
     866           0 :             rReq.Done();
     867           0 :             break;
     868             : 
     869             :         case SID_AUTO_OUTLINE:
     870           0 :             AutoOutline();
     871           0 :             rReq.Done();
     872           0 :             break;
     873             : 
     874             : 
     875             :         case SID_WINDOW_SPLIT:
     876             :             {
     877           0 :                 ScSplitMode eHSplit = GetViewData()->GetHSplitMode();
     878           0 :                 ScSplitMode eVSplit = GetViewData()->GetVSplitMode();
     879           0 :                 if ( eHSplit == SC_SPLIT_NORMAL || eVSplit == SC_SPLIT_NORMAL )     // aufheben
     880           0 :                     RemoveSplit();
     881           0 :                 else if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX )      // normal
     882           0 :                     FreezeSplitters( false );
     883             :                 else                                                                // erzeugen
     884           0 :                     SplitAtCursor();
     885           0 :                 rReq.Done();
     886             : 
     887           0 :                 InvalidateSplit();
     888             :             }
     889           0 :             break;
     890             : 
     891             :         case SID_WINDOW_FIX:
     892             :             {
     893           0 :                 ScSplitMode eHSplit = GetViewData()->GetHSplitMode();
     894           0 :                 ScSplitMode eVSplit = GetViewData()->GetVSplitMode();
     895           0 :                 if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX )           // aufheben
     896           0 :                     RemoveSplit();
     897             :                 else
     898           0 :                     FreezeSplitters( true );        // erzeugen oder fixieren
     899           0 :                 rReq.Done();
     900             : 
     901           0 :                 InvalidateSplit();
     902             :             }
     903           0 :             break;
     904             : 
     905             :         case FID_CHG_SHOW:
     906             :             {
     907           0 :                 sal_uInt16          nId  = ScHighlightChgDlgWrapper::GetChildWindowId();
     908           0 :                 SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
     909             : 
     910           0 :                 pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
     911             :             }
     912           0 :             break;
     913             : 
     914             :         case FID_CHG_ACCEPT:
     915             :             {
     916           0 :                 pThisFrame->ToggleChildWindow(ScAcceptChgDlgWrapper::GetChildWindowId());
     917           0 :                 GetViewFrame()->GetBindings().Invalidate(FID_CHG_ACCEPT);
     918           0 :                 rReq.Done ();
     919             : 
     920             :                 /*
     921             :                 sal_uInt16          nId  = ScAcceptChgDlgWrapper::GetChildWindowId();
     922             :                 SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
     923             : 
     924             :                 pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True );
     925             :                 */
     926             :             }
     927           0 :             break;
     928             : 
     929             :         case FID_CHG_COMMENT:
     930             :             {
     931           0 :                 ScViewData* pData = GetViewData();
     932           0 :                 ScAddress aCursorPos( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
     933           0 :                 ScDocShell* pDocSh = pData->GetDocShell();
     934             : 
     935           0 :                 ScChangeAction* pAction = pDocSh->GetChangeAction( aCursorPos );
     936           0 :                 if ( pAction )
     937             :                 {
     938             :                     const SfxPoolItem* pItem;
     939           0 :                     if ( pReqArgs &&
     940           0 :                          pReqArgs->GetItemState( nSlot, true, &pItem ) == SFX_ITEM_SET &&
     941           0 :                          pItem->ISA( SfxStringItem ) )
     942             :                     {
     943           0 :                         OUString aComment = ((const SfxStringItem*)pItem)->GetValue();
     944           0 :                         pDocSh->SetChangeComment( pAction, aComment );
     945           0 :                         rReq.Done();
     946             :                     }
     947             :                     else
     948             :                     {
     949           0 :                         pDocSh->ExecuteChangeCommentDialog( pAction, GetDialogParent() );
     950           0 :                         rReq.Done();
     951             :                     }
     952             :                 }
     953             :             }
     954           0 :             break;
     955             : 
     956             :         case SID_CREATE_SW_DRAWVIEW:
     957             :             //  wird von den Forms gerufen, wenn die DrawView mit allem Zubehoer
     958             :             //  angelegt werden muss
     959           0 :             if (!GetScDrawView())
     960             :             {
     961           0 :                 GetViewData()->GetDocShell()->MakeDrawLayer();
     962           0 :                 rBindings.InvalidateAll(false);
     963             :             }
     964           0 :             break;
     965             : 
     966             :         case FID_PROTECT_DOC:
     967             :             {
     968           0 :                 ScDocument*         pDoc = GetViewData()->GetDocument();
     969             :                 SfxPasswordDialog*  pDlg;
     970             : 
     971           0 :                 if( pReqArgs )
     972             :                 {
     973             :                     const SfxPoolItem* pItem;
     974           0 :                     if( pReqArgs->HasItem( FID_PROTECT_DOC, &pItem ) &&
     975           0 :                         ((const SfxBoolItem*)pItem)->GetValue() == pDoc->IsDocProtected() )
     976             :                     {
     977           0 :                         rReq.Ignore();
     978           0 :                         break;
     979             :                     }
     980             :                 }
     981             : 
     982           0 :                 ScDocProtection* pProtect = pDoc->GetDocProtection();
     983           0 :                 if (pProtect && pProtect->isProtected())
     984             :                 {
     985           0 :                     bool bCancel = false;
     986           0 :                     OUString aPassword;
     987             : 
     988           0 :                     if (pProtect->isProtectedWithPass())
     989             :                     {
     990           0 :                         OUString aText(ScResId(SCSTR_PASSWORD));
     991             : 
     992           0 :                         pDlg = new SfxPasswordDialog(GetDialogParent(), &aText);
     993           0 :                         pDlg->SetText( ScResId(SCSTR_UNPROTECTDOC) );
     994           0 :                         pDlg->SetMinLen( 0 );
     995           0 :                         pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_DOC)->GetCommand() );
     996           0 :                         pDlg->SetEditHelpId( HID_PASSWD_DOC );
     997             : 
     998           0 :                         if (pDlg->Execute() == RET_OK)
     999           0 :                             aPassword = pDlg->GetPassword();
    1000             :                         else
    1001           0 :                             bCancel = true;
    1002           0 :                         delete pDlg;
    1003             :                     }
    1004           0 :                     if (!bCancel)
    1005             :                     {
    1006           0 :                         Unprotect( TABLEID_DOC, aPassword );
    1007           0 :                         rReq.AppendItem( SfxBoolItem( FID_PROTECT_DOC, false ) );
    1008           0 :                         rReq.Done();
    1009           0 :                     }
    1010             :                 }
    1011             :                 else
    1012             :                 {
    1013           0 :                     OUString aText(ScResId(SCSTR_PASSWORDOPT));
    1014             : 
    1015           0 :                     pDlg = new SfxPasswordDialog(   GetDialogParent(), &aText );
    1016           0 :                     pDlg->SetText( ScResId(SCSTR_PROTECTDOC) );
    1017           0 :                     pDlg->SetMinLen( 0 );
    1018           0 :                     pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_DOC)->GetCommand() );
    1019           0 :                     pDlg->SetEditHelpId( HID_PASSWD_DOC );
    1020           0 :                     pDlg->ShowExtras( SHOWEXTRAS_CONFIRM );
    1021             : 
    1022           0 :                     if (pDlg->Execute() == RET_OK)
    1023             :                     {
    1024           0 :                         OUString aPassword = pDlg->GetPassword();
    1025           0 :                         Protect( TABLEID_DOC, aPassword );
    1026           0 :                         rReq.AppendItem( SfxBoolItem( FID_PROTECT_DOC, true ) );
    1027           0 :                         rReq.Done();
    1028             :                     }
    1029             : 
    1030           0 :                     delete pDlg;
    1031             :                 }
    1032           0 :                 rBindings.Invalidate( FID_PROTECT_DOC );
    1033             :             }
    1034           0 :             break;
    1035             : 
    1036             : 
    1037             :         case FID_PROTECT_TABLE:
    1038             :         {
    1039           0 :             ScDocument* pDoc = GetViewData()->GetDocument();
    1040           0 :             SCTAB       nTab = GetViewData()->GetTabNo();
    1041           0 :             bool        bOldProtection = pDoc->IsTabProtected(nTab);
    1042             : 
    1043           0 :             if( pReqArgs )
    1044             :             {
    1045             :                 const SfxPoolItem* pItem;
    1046           0 :                 bool bNewProtection = !bOldProtection;
    1047           0 :                 if( pReqArgs->HasItem( FID_PROTECT_TABLE, &pItem ) )
    1048           0 :                     bNewProtection = ((const SfxBoolItem*)pItem)->GetValue();
    1049           0 :                 if( bNewProtection == bOldProtection )
    1050             :                 {
    1051           0 :                     rReq.Ignore();
    1052           0 :                     break;
    1053             :                 }
    1054             :             }
    1055             : 
    1056           0 :             if (bOldProtection)
    1057             :             {
    1058             :                 // Unprotect a protected sheet.
    1059             : 
    1060           0 :                 ScTableProtection* pProtect = pDoc->GetTabProtection(nTab);
    1061           0 :                 if (pProtect && pProtect->isProtectedWithPass())
    1062             :                 {
    1063           0 :                     OUString aText( ScResId(SCSTR_PASSWORDOPT) );
    1064           0 :                     boost::scoped_ptr<SfxPasswordDialog> pDlg(new SfxPasswordDialog(GetDialogParent(), &aText));
    1065           0 :                     pDlg->SetText( ScResId(SCSTR_UNPROTECTTAB) );
    1066           0 :                     pDlg->SetMinLen( 0 );
    1067           0 :                     pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_TABLE)->GetCommand() );
    1068           0 :                     pDlg->SetEditHelpId( HID_PASSWD_TABLE );
    1069             : 
    1070           0 :                     if (pDlg->Execute() == RET_OK)
    1071             :                     {
    1072           0 :                         OUString aPassword = pDlg->GetPassword();
    1073           0 :                         Unprotect(nTab, aPassword);
    1074           0 :                     }
    1075             :                 }
    1076             :                 else
    1077             :                     // this sheet is not password-protected.
    1078           0 :                     Unprotect(nTab, OUString());
    1079             : 
    1080           0 :                 if (!pReqArgs)
    1081             :                 {
    1082           0 :                     rReq.AppendItem( SfxBoolItem(FID_PROTECT_TABLE, false) );
    1083           0 :                     rReq.Done();
    1084             :                 }
    1085             :             }
    1086             :             else
    1087             :             {
    1088             :                 // Protect a current sheet.
    1089             : 
    1090           0 :                 boost::scoped_ptr<ScTableProtectionDlg> pDlg(new ScTableProtectionDlg(GetDialogParent()));
    1091             : 
    1092           0 :                 ScTableProtection* pProtect = pDoc->GetTabProtection(nTab);
    1093           0 :                 if (pProtect)
    1094           0 :                     pDlg->SetDialogData(*pProtect);
    1095             : 
    1096           0 :                 if (pDlg->Execute() == RET_OK)
    1097             :                 {
    1098           0 :                     pScMod->InputEnterHandler();
    1099             : 
    1100           0 :                     ScTableProtection aNewProtect;
    1101           0 :                     pDlg->WriteData(aNewProtect);
    1102           0 :                     ProtectSheet(nTab, aNewProtect);
    1103           0 :                     if (!pReqArgs)
    1104             :                     {
    1105           0 :                         rReq.AppendItem( SfxBoolItem(FID_PROTECT_TABLE, true) );
    1106           0 :                         rReq.Done();
    1107           0 :                     }
    1108           0 :                 }
    1109             :             }
    1110           0 :             TabChanged();
    1111           0 :             UpdateInputHandler(true);   // damit sofort wieder eingegeben werden kann
    1112           0 :             SelectionChanged();
    1113             :         }
    1114           0 :         break;
    1115             : 
    1116             :         case SID_OPT_LOCALE_CHANGED :
    1117             :             {   // locale changed, SYSTEM number formats changed => repaint cell contents
    1118           0 :                 PaintGrid();
    1119           0 :                 rReq.Done();
    1120             :             }
    1121           0 :             break;
    1122             : 
    1123             :         default:
    1124             :             OSL_FAIL("Unbekannter Slot bei ScTabViewShell::Execute");
    1125           0 :             break;
    1126             :     }
    1127           0 : }
    1128             : 
    1129             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10