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

Generated by: LCOV version 1.11