LCOV - code coverage report
Current view: top level - sc/source/ui/view - tabvwshf.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 446 0.0 %
Date: 2014-04-14 Functions: 0 4 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             : 
      21             : #include <boost/scoped_ptr.hpp>
      22             : 
      23             : #include "scitems.hxx"
      24             : #include <sfx2/request.hxx>
      25             : #include <sfx2/bindings.hxx>
      26             : #include <sfx2/viewfrm.hxx>
      27             : #include <basic/sbstar.hxx>
      28             : #include <svl/languageoptions.hxx>
      29             : #include <svl/stritem.hxx>
      30             : #include <svl/whiter.hxx>
      31             : #include <vcl/msgbox.hxx>
      32             : #include <sfx2/objface.hxx>
      33             : #include <svx/svxdlg.hxx>
      34             : #include <editeng/colritem.hxx>
      35             : 
      36             : #include "tabvwsh.hxx"
      37             : #include "sc.hrc"
      38             : #include "docsh.hxx"
      39             : #include "document.hxx"
      40             : #include "shtabdlg.hxx"
      41             : #include "scresid.hxx"
      42             : #include "globstr.hrc"
      43             : #include "docfunc.hxx"
      44             : #include "eventuno.hxx"
      45             : 
      46             : #include "scabstdlg.hxx"
      47             : 
      48             : #include "tabbgcolor.hxx"
      49             : #include "tabbgcolordlg.hxx"
      50             : #include "sccommands.h"
      51             : #include "markdata.hxx"
      52             : 
      53             : #include <vector>
      54             : 
      55             : using ::boost::scoped_ptr;
      56             : using namespace com::sun::star;
      57             : 
      58           0 : void ScTabViewShell::ExecuteTable( SfxRequest& rReq )
      59             : {
      60           0 :     ScViewData* pViewData   = GetViewData();
      61           0 :     ScDocument* pDoc        = pViewData->GetDocument();
      62             : 
      63           0 :     SCTAB       nCurrentTab = pViewData->GetTabNo();
      64           0 :     SCTAB       nTabCount   = pDoc->GetTableCount();
      65           0 :     sal_uInt16      nSlot       = rReq.GetSlot();
      66           0 :     const SfxItemSet* pReqArgs = rReq.GetArgs();
      67             : 
      68           0 :     HideListBox();                  // Autofilter-DropDown-Listbox
      69             : 
      70           0 :     switch ( nSlot )
      71             :     {
      72             :         case FID_TABLE_VISIBLE:
      73             :             {
      74           0 :                 OUString aName;
      75           0 :                 pDoc->GetName( nCurrentTab, aName );
      76             : 
      77           0 :                 sal_Bool bVisible=sal_True;
      78           0 :                 if( pReqArgs != NULL )
      79             :                 {
      80             :                     const SfxPoolItem* pItem;
      81           0 :                     if( pReqArgs->HasItem( FID_TABLE_VISIBLE, &pItem ) )
      82           0 :                         bVisible = ((const SfxBoolItem*)pItem)->GetValue();
      83             :                 }
      84             : 
      85           0 :                 if( ! bVisible )            // ausblenden
      86             :                 {
      87           0 :                     if ( pDoc->IsDocEditable() )
      88             :                     {
      89           0 :                         ScMarkData& rMark = pViewData->GetMarkData();
      90           0 :                         HideTable( rMark );
      91             :                     }
      92             :                 }
      93             :                 else                        // einblenden
      94             :                 {
      95           0 :                     std::vector<OUString> rNames;
      96           0 :                     rNames.push_back(aName);
      97           0 :                     ShowTable( rNames );
      98           0 :                 }
      99             :             }
     100           0 :             break;
     101             : 
     102             :         case FID_TABLE_HIDE:
     103             :             {
     104           0 :                 if ( pDoc->IsDocEditable() )
     105             :                 {
     106           0 :                     ScMarkData& rMark = pViewData->GetMarkData();
     107           0 :                     HideTable( rMark );
     108             :                 }
     109             :             }
     110           0 :             break;
     111             : 
     112             :         case FID_TABLE_SHOW:
     113             :             {
     114           0 :                 OUString aName;
     115           0 :                 std::vector<OUString> rNames;
     116           0 :                 if ( pReqArgs )
     117             :                 {
     118             :                     const SfxPoolItem* pItem;
     119           0 :                     if( pReqArgs->HasItem( FID_TABLE_SHOW, &pItem ) )
     120             :                     {
     121           0 :                         aName = ((const SfxStringItem*)pItem)->GetValue();
     122           0 :                         rNames.push_back(aName);
     123           0 :                         ShowTable( rNames );
     124             : 
     125           0 :                         if( ! rReq.IsAPI() )
     126           0 :                             rReq.Done();
     127             :                     }
     128             :                 }
     129             :                 else
     130             :                 {
     131           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     132             :                     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     133             : 
     134           0 :                     AbstractScShowTabDlg* pDlg = pFact->CreateScShowTabDlg(GetDialogParent());
     135             :                     OSL_ENSURE(pDlg, "Dialog create fail!");
     136             : 
     137           0 :                     OUString aTabName;
     138           0 :                     sal_Bool bFirst = sal_True;
     139           0 :                     for ( SCTAB i=0; i != nTabCount; i++ )
     140             :                     {
     141           0 :                         if (!pDoc->IsVisible(i))
     142             :                         {
     143           0 :                             pDoc->GetName( i, aTabName );
     144           0 :                             pDlg->Insert( aTabName, bFirst );
     145           0 :                             bFirst = false;
     146             :                         }
     147             :                     }
     148             : 
     149           0 :                     if ( pDlg->Execute() == RET_OK )
     150             :                     {
     151           0 :                         sal_uInt16 nCount = pDlg->GetSelectEntryCount();
     152           0 :                         for (sal_uInt16 nPos=0; nPos<nCount; nPos++)
     153             :                         {
     154           0 :                             aName = pDlg->GetSelectEntry(nPos);
     155           0 :                             rReq.AppendItem( SfxStringItem( FID_TABLE_SHOW, aName ) );
     156           0 :                             rNames.push_back(aName);
     157             :                         }
     158           0 :                         ShowTable( rNames );
     159           0 :                         rReq.Done();
     160             :                     }
     161           0 :                     delete pDlg;
     162           0 :                 }
     163             :             }
     164           0 :             break;
     165             : 
     166             :         case FID_INS_TABLE:
     167             :         case FID_INS_TABLE_EXT:
     168             :             {
     169           0 :                 ScMarkData& rMark    = pViewData->GetMarkData();
     170           0 :                 SCTAB   nTabSelCount = rMark.GetSelectCount();
     171           0 :                 SCTAB   nTabNr       = nCurrentTab;
     172             : 
     173           0 :                 if ( !pDoc->IsDocEditable() )
     174           0 :                     break;                          // gesperrt
     175             : 
     176           0 :                 if ( pReqArgs != NULL )             // von Basic
     177             :                 {
     178           0 :                     sal_Bool bOk = false;
     179             :                     const SfxPoolItem*  pTabItem;
     180             :                     const SfxPoolItem*  pNameItem;
     181           0 :                     OUString            aName;
     182             : 
     183           0 :                     if ( pReqArgs->HasItem( FN_PARAM_1, &pTabItem ) &&
     184           0 :                          pReqArgs->HasItem( nSlot, &pNameItem ) )
     185             :                     {
     186             :                         //  Tabellennr. von Basic: 1-basiert
     187             : 
     188           0 :                         aName = ((const SfxStringItem*)pNameItem)->GetValue();
     189           0 :                         nTabNr = ((const SfxUInt16Item*)pTabItem)->GetValue() - 1;
     190           0 :                         if ( nTabNr < nTabCount )
     191           0 :                             bOk = InsertTable( aName, nTabNr );
     192             :                     }
     193             : 
     194           0 :                     if (bOk)
     195           0 :                         rReq.Done( *pReqArgs );
     196             :                     //! sonst Fehler setzen
     197             :                 }
     198             :                 else                                // Dialog
     199             :                 {
     200           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     201             :                     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     202             : 
     203             :                     AbstractScInsertTableDlg* pDlg = pFact->CreateScInsertTableDlg(GetDialogParent(), *pViewData,
     204           0 :                         nTabSelCount, nSlot == FID_INS_TABLE_EXT);
     205             :                     OSL_ENSURE(pDlg, "Dialog create fail!");
     206           0 :                     if ( RET_OK == pDlg->Execute() )
     207             :                     {
     208           0 :                         if (pDlg->GetTablesFromFile())
     209             :                         {
     210           0 :                             std::vector<SCTAB> nTabs;
     211           0 :                             sal_uInt16 n = 0;
     212           0 :                             const OUString* pStr = pDlg->GetFirstTable( &n );
     213           0 :                             while ( pStr )
     214             :                             {
     215           0 :                                 nTabs.push_back( static_cast<SCTAB>(n) );
     216           0 :                                 pStr = pDlg->GetNextTable( &n );
     217             :                             }
     218           0 :                             sal_Bool bLink = pDlg->GetTablesAsLink();
     219           0 :                             if (!nTabs.empty())
     220             :                             {
     221           0 :                                 if(pDlg->IsTableBefore())
     222             :                                 {
     223           0 :                                     ImportTables( pDlg->GetDocShellTables(), nTabs.size(), &nTabs[0],
     224           0 :                                                 bLink,nTabNr );
     225             :                                 }
     226             :                                 else
     227             :                                 {
     228           0 :                                     SCTAB   nTabAfter    = nTabNr+1;
     229             : 
     230           0 :                                     for(SCTAB j=nCurrentTab+1;j<nTabCount;j++)
     231             :                                     {
     232           0 :                                         if(!pDoc->IsScenario(j))
     233             :                                         {
     234           0 :                                             nTabAfter=j;
     235           0 :                                             break;
     236             :                                         }
     237             :                                     }
     238             : 
     239           0 :                                     ImportTables( pDlg->GetDocShellTables(), nTabs.size(), &nTabs[0],
     240           0 :                                                 bLink,nTabAfter );
     241             :                                 }
     242           0 :                             }
     243             :                         }
     244             :                         else
     245             :                         {
     246           0 :                             SCTAB nCount=pDlg->GetTableCount();
     247           0 :                             if(pDlg->IsTableBefore())
     248             :                             {
     249           0 :                                 if(nCount==1 && !pDlg->GetFirstTable()->isEmpty())
     250             :                                 {
     251           0 :                                     rReq.AppendItem( SfxStringItem( FID_INS_TABLE, *pDlg->GetFirstTable() ) );
     252           0 :                                     rReq.AppendItem( SfxUInt16Item( FN_PARAM_1, static_cast<sal_uInt16>(nTabNr) + 1 ) );        // 1-based
     253           0 :                                     rReq.Done();
     254             : 
     255           0 :                                     InsertTable( *pDlg->GetFirstTable(), nTabNr );
     256             :                                 }
     257             :                                 else
     258             :                                 {
     259           0 :                                     std::vector<OUString> aNames(0);
     260           0 :                                     InsertTables( aNames, nTabNr,nCount );
     261             :                                 }
     262             :                             }
     263             :                             else
     264             :                             {
     265           0 :                                 SCTAB   nTabAfter    = nTabNr+1;
     266           0 :                                 SCTAB nSelHigh = rMark.GetLastSelected();
     267             : 
     268           0 :                                 for(SCTAB j=nSelHigh+1;j<nTabCount;j++)
     269             :                                 {
     270           0 :                                     if(!pDoc->IsScenario(j))
     271             :                                     {
     272           0 :                                         nTabAfter=j;
     273           0 :                                         break;
     274             :                                     }
     275             :                                     else // #101672#; increase nTabAfter, because it is possible that the scenario tables are the last
     276           0 :                                         nTabAfter = j + 1;
     277             :                                 }
     278             : 
     279           0 :                                 if(nCount==1 && !pDlg->GetFirstTable()->isEmpty())
     280             :                                 {
     281           0 :                                     rReq.AppendItem( SfxStringItem( FID_INS_TABLE, *pDlg->GetFirstTable() ) );
     282           0 :                                     rReq.AppendItem( SfxUInt16Item( FN_PARAM_1, static_cast<sal_uInt16>(nTabAfter) + 1 ) );     // 1-based
     283           0 :                                     rReq.Done();
     284             : 
     285           0 :                                     InsertTable( *pDlg->GetFirstTable(), nTabAfter);
     286             :                                 }
     287             :                                 else
     288             :                                 {
     289           0 :                                     std::vector<OUString> aNames(0);
     290           0 :                                     InsertTables( aNames, nTabAfter,nCount);
     291             :                                 }
     292             :                             }
     293             :                         }
     294             :                     }
     295             : 
     296           0 :                     delete pDlg;
     297             :                 }
     298             :             }
     299           0 :             break;
     300             : 
     301             :         case FID_TAB_APPEND:
     302             :         case FID_TAB_RENAME:
     303             :         case FID_TAB_MENU_RENAME:
     304             :             {
     305             :                 //  FID_TAB_MENU_RENAME - "umbenennen" im Menu
     306             :                 //  FID_TAB_RENAME      - "Name"-Property fuer Basic
     307             :                 //  Execute ist gleich, aber im GetState wird MENU_RENAME evtl. disabled
     308             : 
     309           0 :                 if ( nSlot == FID_TAB_MENU_RENAME )
     310           0 :                     nSlot = FID_TAB_RENAME;             // Execute ist gleich
     311             : 
     312           0 :                 SCTAB nTabNr = pViewData->GetTabNo();
     313           0 :                 ScMarkData& rMark = pViewData->GetMarkData();
     314           0 :                 SCTAB nTabSelCount = rMark.GetSelectCount();
     315             : 
     316           0 :                 if ( !pDoc->IsDocEditable() )
     317           0 :                     break; // alles gesperrt
     318             : 
     319           0 :                 if ( nSlot != FID_TAB_APPEND &&
     320           0 :                         ( pDoc->IsTabProtected( nTabNr ) || nTabSelCount > 1 ) )
     321           0 :                     break; // kein Rename
     322             : 
     323           0 :                 if( pReqArgs != NULL )
     324             :                 {
     325           0 :                     sal_Bool        bDone   = false;
     326             :                     const SfxPoolItem* pItem;
     327           0 :                     OUString      aName;
     328             : 
     329           0 :                     if( pReqArgs->HasItem( FN_PARAM_1, &pItem ) )
     330           0 :                         nTabNr = ((const SfxUInt16Item*)pItem)->GetValue();
     331             : 
     332           0 :                     if( pReqArgs->HasItem( nSlot, &pItem ) )
     333           0 :                         aName = ((const SfxStringItem*)pItem)->GetValue();
     334             : 
     335           0 :                     switch ( nSlot )
     336             :                     {
     337             :                         case FID_TAB_APPEND:
     338           0 :                             bDone = AppendTable( aName );
     339           0 :                             break;
     340             :                         case FID_TAB_RENAME:
     341           0 :                             bDone = RenameTable( aName, nTabNr );
     342           0 :                             break;
     343             :                     }
     344             : 
     345           0 :                     if( bDone )
     346             :                     {
     347           0 :                         rReq.Done( *pReqArgs );
     348           0 :                     }
     349             :                 }
     350             :                 else
     351             :                 {
     352           0 :                     sal_uInt16      nRet    = RET_OK;
     353           0 :                     sal_Bool        bDone   = false;
     354           0 :                     OUString      aErrMsg ( ScGlobal::GetRscString( STR_INVALIDTABNAME ) );
     355           0 :                     OUString aName;
     356           0 :                     OUString      aDlgTitle;
     357           0 :                     const sal_Char* pHelpId = 0;
     358             : 
     359           0 :                     switch ( nSlot )
     360             :                     {
     361             :                         case FID_TAB_APPEND:
     362           0 :                             aDlgTitle = OUString(ScResId(SCSTR_APDTABLE));
     363           0 :                             pDoc->CreateValidTabName( aName );
     364           0 :                             pHelpId = HID_SC_APPEND_NAME;
     365           0 :                             break;
     366             : 
     367             :                         case FID_TAB_RENAME:
     368           0 :                             aDlgTitle = OUString(ScResId(SCSTR_RENAMETAB));
     369           0 :                             pDoc->GetName( pViewData->GetTabNo(), aName );
     370           0 :                             pHelpId = HID_SC_RENAME_NAME;
     371           0 :                             break;
     372             :                     }
     373             : 
     374           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     375             :                     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     376             : 
     377             :                     AbstractScStringInputDlg* pDlg = pFact->CreateScStringInputDlg(
     378             :                         GetDialogParent(), aDlgTitle, OUString(ScResId(SCSTR_NAME)),
     379           0 :                         aName, GetStaticInterface()->GetSlot(nSlot)->GetCommand(),
     380           0 :                         pHelpId);
     381             : 
     382             :                     OSL_ENSURE(pDlg, "Dialog create fail!");
     383             : 
     384           0 :                     while ( !bDone && nRet == RET_OK )
     385             :                     {
     386           0 :                         nRet = pDlg->Execute();
     387             : 
     388           0 :                         if ( nRet == RET_OK )
     389             :                         {
     390           0 :                             aName = pDlg->GetInputString();
     391             : 
     392             : 
     393           0 :                             switch ( nSlot )
     394             :                             {
     395             :                                 case FID_TAB_APPEND:
     396           0 :                                     bDone = AppendTable( aName );
     397           0 :                                     break;
     398             :                                 case FID_TAB_RENAME:
     399           0 :                                     bDone = RenameTable( aName, nTabNr );
     400           0 :                                     break;
     401             :                             }
     402             : 
     403           0 :                             if ( bDone )
     404             :                             {
     405           0 :                                 rReq.AppendItem( SfxStringItem( nSlot, aName ) );
     406           0 :                                 rReq.Done();
     407             :                             }
     408             :                             else
     409             :                             {
     410           0 :                                 if( rReq.IsAPI() )
     411             :                                 {
     412             : #ifndef DISABLE_SCRIPTING
     413           0 :                                     StarBASIC::Error( SbERR_SETPROP_FAILED ); // XXX Fehlerbehandlung???
     414             : #endif
     415             :                                 }
     416             :                                 else
     417             :                                 {
     418             :                                     nRet = ErrorBox( GetDialogParent(),
     419             :                                                      WinBits( WB_OK | WB_DEF_OK ),
     420             :                                                      aErrMsg
     421           0 :                                                    ).Execute();
     422             :                                 }
     423             :                             }
     424             :                         }
     425             :                     }
     426           0 :                     delete pDlg;
     427             :                 }
     428             :             }
     429           0 :             break;
     430             : 
     431             :         case FID_TAB_MOVE:
     432             :             {
     433           0 :                 if ( pDoc->GetChangeTrack() != NULL )
     434           0 :                     break;      // bei aktiviertem ChangeTracking kein TabMove
     435             : 
     436           0 :                 sal_Bool   bDoIt = false;
     437           0 :                 sal_uInt16 nDoc = 0;
     438           0 :                 SCTAB nTab = pViewData->GetTabNo();
     439           0 :                 sal_Bool   bCpy = false;
     440           0 :                 OUString aDocName;
     441           0 :                 OUString aTabName;
     442             : 
     443           0 :                 if( pReqArgs != NULL )
     444             :                 {
     445           0 :                     SCTAB nTableCount = pDoc->GetTableCount();
     446             :                     const SfxPoolItem* pItem;
     447             : 
     448           0 :                     if( pReqArgs->HasItem( FID_TAB_MOVE, &pItem ) )
     449           0 :                         aDocName = ((const SfxStringItem*)pItem)->GetValue();
     450           0 :                     if( pReqArgs->HasItem( FN_PARAM_1, &pItem ) )
     451             :                     {
     452             :                         //  Tabelle ist 1-basiert
     453           0 :                         nTab = ((const SfxUInt16Item*)pItem)->GetValue() - 1;
     454           0 :                         if ( nTab >= nTableCount )
     455           0 :                             nTab = SC_TAB_APPEND;
     456             :                     }
     457           0 :                     if( pReqArgs->HasItem( FN_PARAM_2, &pItem ) )
     458           0 :                         bCpy = ((const SfxBoolItem*)pItem)->GetValue();
     459             : 
     460           0 :                     if (!aDocName.isEmpty())
     461             :                     {
     462           0 :                         SfxObjectShell* pSh     = SfxObjectShell::GetFirst();
     463           0 :                         ScDocShell*     pScSh   = NULL;
     464           0 :                         sal_uInt16          i=0;
     465             : 
     466           0 :                         while ( pSh )
     467             :                         {
     468           0 :                             pScSh = PTR_CAST( ScDocShell, pSh );
     469             : 
     470           0 :                             if( pScSh )
     471             :                             {
     472           0 :                                 pScSh->GetTitle();
     473             : 
     474           0 :                                 if (aDocName.equals(pScSh->GetTitle()))
     475             :                                 {
     476           0 :                                     nDoc = i;
     477           0 :                                     ScDocument* pDestDoc = pScSh->GetDocument();
     478           0 :                                     nTableCount = pDestDoc->GetTableCount();
     479           0 :                                     bDoIt = pDestDoc->IsDocEditable();
     480           0 :                                     break;
     481             :                                 }
     482             : 
     483           0 :                                 i++;        // nur die ScDocShell's zaehlen
     484             :                             }
     485           0 :                             pSh = SfxObjectShell::GetNext( *pSh );
     486             :                         }
     487             :                     }
     488             :                     else // Kein Dokumentname -> neues Dokument
     489             :                     {
     490           0 :                         nDoc = SC_DOC_NEW;
     491           0 :                         bDoIt = sal_True;
     492             :                     }
     493             : 
     494           0 :                     if ( bDoIt && nTab >= nTableCount )     // ggf. anhaengen
     495           0 :                         nTab = SC_TAB_APPEND;
     496             :                 }
     497             :                 else
     498             :                 {
     499           0 :                     OUString aDefaultName;
     500           0 :                     pDoc->GetName( pViewData->GetTabNo(), aDefaultName );
     501             : 
     502           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     503             :                     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     504             : 
     505             :                     AbstractScMoveTableDlg* pDlg = pFact->CreateScMoveTableDlg(GetDialogParent(),
     506           0 :                         aDefaultName);
     507             :                     OSL_ENSURE(pDlg, "Dialog create fail!");
     508             : 
     509           0 :                     SCTAB nTableCount = pDoc->GetTableCount();
     510           0 :                     ScMarkData& rMark       = GetViewData()->GetMarkData();
     511           0 :                     SCTAB       nTabSelCount = rMark.GetSelectCount();
     512             : 
     513             : 
     514           0 :                     if(nTableCount==nTabSelCount)
     515             :                     {
     516           0 :                         pDlg->SetForceCopyTable();
     517             :                     }
     518             : 
     519             :                     // We support direct renaming of sheet only when one sheet
     520             :                     // is selected.
     521           0 :                     pDlg->EnableRenameTable(nTabSelCount == 1);
     522             : 
     523           0 :                     if ( pDlg->Execute() == RET_OK )
     524             :                     {
     525           0 :                         nDoc = pDlg->GetSelectedDocument();
     526           0 :                         nTab = pDlg->GetSelectedTable();
     527           0 :                         bCpy = pDlg->GetCopyTable();
     528           0 :                         bool bRna = pDlg->GetRenameTable();
     529             :                         // Leave aTabName string empty, when Rename is FALSE.
     530           0 :                         if( bRna )
     531             :                         {
     532           0 :                            pDlg->GetTabNameString( aTabName );
     533             :                         }
     534           0 :                         bDoIt = true;
     535             : 
     536           0 :                         OUString aFoundDocName;
     537           0 :                         if ( nDoc != SC_DOC_NEW )
     538             :                         {
     539           0 :                             ScDocShell* pSh = ScDocShell::GetShellByNum( nDoc );
     540           0 :                             if (pSh)
     541             :                             {
     542           0 :                                 aFoundDocName = pSh->GetTitle();
     543           0 :                                 if ( !pSh->GetDocument()->IsDocEditable() )
     544             :                                 {
     545           0 :                                     ErrorMessage(STR_READONLYERR);
     546           0 :                                     bDoIt = false;
     547             :                                 }
     548             :                             }
     549             :                         }
     550           0 :                         rReq.AppendItem( SfxStringItem( FID_TAB_MOVE, aFoundDocName ) );
     551             :                         //  Tabelle ist 1-basiert, wenn nicht APPEND
     552           0 :                         SCTAB nBasicTab = ( nTab <= MAXTAB ) ? (nTab+1) : nTab;
     553           0 :                         rReq.AppendItem( SfxUInt16Item( FN_PARAM_1, static_cast<sal_uInt16>(nBasicTab) ) );
     554           0 :                         rReq.AppendItem( SfxBoolItem( FN_PARAM_2, bCpy ) );
     555             :                     }
     556           0 :                     delete pDlg;
     557             :                 }
     558             : 
     559           0 :                 if( bDoIt )
     560             :                 {
     561           0 :                     rReq.Done();        // aufzeichnen, solange das Dokument noch aktiv ist
     562             : 
     563           0 :                     MoveTable( nDoc, nTab, bCpy, &aTabName );
     564           0 :                 }
     565             :             }
     566           0 :             break;
     567             : 
     568             :         case FID_DELETE_TABLE:
     569             :             {
     570             :                 //  Parameter war ueberfluessig, weil die Methode an der Table haengt
     571             : 
     572           0 :                 sal_Bool bDoIt = rReq.IsAPI();
     573           0 :                 if( !bDoIt )
     574             :                 {
     575             :                     //  wenn's nicht von Basic kommt, nochmal nachfragen:
     576             : 
     577           0 :                         bDoIt = ( RET_YES ==
     578             :                                   QueryBox( GetDialogParent(),
     579             :                                             WinBits( WB_YES_NO | WB_DEF_YES ),
     580           0 :                                             ScGlobal::GetRscString(STR_QUERY_DELTAB)
     581           0 :                                       ).Execute() );
     582             :                 }
     583           0 :                 if( bDoIt )
     584             :                 {
     585           0 :                     SCTAB nNewTab   = nCurrentTab;
     586           0 :                     SCTAB nFirstTab=0;
     587           0 :                     bool   bTabFlag=false;
     588           0 :                     ScMarkData& rMark = pViewData->GetMarkData();
     589           0 :                     std::vector<SCTAB> TheTabs;
     590           0 :                     for(SCTAB i=0;i<nTabCount;i++)
     591             :                     {
     592           0 :                         if(rMark.GetTableSelect(i) &&!pDoc->IsTabProtected(i))
     593             :                         {
     594           0 :                             TheTabs.push_back(i);
     595           0 :                             bTabFlag=true;
     596           0 :                             if(nNewTab==i) nNewTab++;
     597             :                         }
     598           0 :                         if(!bTabFlag) nFirstTab=i;
     599             :                     }
     600           0 :                     if(nNewTab>=nTabCount) nNewTab=nFirstTab;
     601             : 
     602           0 :                     pViewData->SetTabNo(nNewTab);
     603           0 :                     DeleteTables(TheTabs);
     604           0 :                     TheTabs.clear();
     605           0 :                     rReq.Done();
     606             :                 }
     607             :             }
     608           0 :             break;
     609             : 
     610             :         case FID_TAB_RTL:
     611             :             {
     612           0 :                 ScDocShell* pDocSh = pViewData->GetDocShell();
     613           0 :                 ScDocFunc &rFunc = pDocSh->GetDocFunc();
     614           0 :                 sal_Bool bSet = !pDoc->IsLayoutRTL( nCurrentTab );
     615             : 
     616           0 :                 const ScMarkData& rMark = pViewData->GetMarkData();
     617           0 :                 if ( rMark.GetSelectCount() != 0 )
     618             :                 {
     619             :                     //  handle several sheets
     620             : 
     621           0 :                     ::svl::IUndoManager* pUndoManager = pDocSh->GetUndoManager();
     622           0 :                     OUString aUndo = ScGlobal::GetRscString( STR_UNDO_TAB_RTL );
     623           0 :                     pUndoManager->EnterListAction( aUndo, aUndo );
     624             : 
     625           0 :                     ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end();
     626           0 :                     for (; itr != itrEnd; ++itr)
     627           0 :                         rFunc.SetLayoutRTL( *itr, bSet, false );
     628             : 
     629           0 :                     pUndoManager->LeaveListAction();
     630             :                 }
     631             :                 else
     632           0 :                     rFunc.SetLayoutRTL( nCurrentTab, bSet, false );
     633             :             }
     634           0 :             break;
     635             : 
     636             :         case FID_TAB_TOGGLE_GRID:
     637             :             {
     638           0 :                 bool bShowGrid = pViewData->GetShowGrid();
     639           0 :                 pViewData->SetShowGrid(!bShowGrid);
     640           0 :                 SfxBindings& rBindings = GetViewFrame()->GetBindings();
     641           0 :                 rBindings.Invalidate( FID_TAB_TOGGLE_GRID );
     642           0 :                 PaintGrid();
     643           0 :                 rReq.Done();
     644             :             }
     645           0 :             break;
     646             : 
     647             :         case FID_TAB_SET_TAB_BG_COLOR:
     648             :         case FID_TAB_MENU_SET_TAB_BG_COLOR:
     649             :             {
     650           0 :                 if ( nSlot == FID_TAB_MENU_SET_TAB_BG_COLOR )
     651           0 :                     nSlot = FID_TAB_SET_TAB_BG_COLOR;
     652           0 :                 SCTAB nTabNr = pViewData->GetTabNo();
     653           0 :                 ScMarkData& rMark = pViewData->GetMarkData();
     654           0 :                 SCTAB nTabSelCount = rMark.GetSelectCount();
     655           0 :                 if ( !pDoc->IsDocEditable() )
     656           0 :                     break;
     657             : 
     658           0 :                 if ( pDoc->IsTabProtected( nTabNr ) ) // ||nTabSelCount > 1
     659           0 :                     break;
     660             : 
     661           0 :                 if( pReqArgs != NULL )
     662             :                 {
     663           0 :                     sal_Bool                bDone = false;
     664             :                     const SfxPoolItem*  pItem;
     665           0 :                     Color               aColor;
     666           0 :                     if( pReqArgs->HasItem( FN_PARAM_1, &pItem ) )
     667           0 :                         nTabNr = ((const SfxUInt16Item*)pItem)->GetValue();
     668             : 
     669           0 :                     if( pReqArgs->HasItem( nSlot, &pItem ) )
     670           0 :                         aColor = ((const SvxColorItem*)pItem)->GetValue();
     671             : 
     672           0 :                     if ( nTabSelCount > 1 )
     673             :                     {
     674             :                         scoped_ptr<ScUndoTabColorInfo::List>
     675           0 :                             pTabColorList(new ScUndoTabColorInfo::List);
     676           0 :                         ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
     677           0 :                         for (; itr != itrEnd; ++itr)
     678             :                         {
     679           0 :                             if ( !pDoc->IsTabProtected(*itr) )
     680             :                             {
     681           0 :                                 ScUndoTabColorInfo aTabColorInfo(*itr);
     682           0 :                                 aTabColorInfo.maNewTabBgColor = aColor;
     683           0 :                                 pTabColorList->push_back(aTabColorInfo);
     684             :                             }
     685             :                         }
     686           0 :                         bDone = SetTabBgColor( *pTabColorList );
     687             :                     }
     688             :                     else
     689             :                     {
     690           0 :                         bDone = SetTabBgColor( aColor, nCurrentTab ); //ScViewFunc.SetTabBgColor
     691             :                     }
     692           0 :                     if( bDone )
     693             :                     {
     694           0 :                         rReq.Done( *pReqArgs );
     695             :                     }
     696             :                 }
     697             :                 else
     698             :                 {
     699           0 :                     sal_uInt16      nRet    = RET_OK; /// temp
     700           0 :                     sal_Bool        bDone   = false; /// temp
     701           0 :                     Color       aTabBgColor;
     702             : 
     703           0 :                     aTabBgColor = pDoc->GetTabBgColor( nCurrentTab );
     704           0 :                     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     705             :                     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     706             :                     AbstractScTabBgColorDlg* pDlg = pFact->CreateScTabBgColorDlg(
     707             :                                                                 GetDialogParent(),
     708             :                                                                 OUString(ScResId(SCSTR_SET_TAB_BG_COLOR)),
     709             :                                                                 OUString(ScResId(SCSTR_NO_TAB_BG_COLOR)),
     710             :                                                                 aTabBgColor,
     711           0 :                                                                 CMD_FID_TAB_SET_TAB_BG_COLOR);
     712           0 :                     while ( !bDone && nRet == RET_OK )
     713             :                     {
     714           0 :                         nRet = pDlg->Execute();
     715           0 :                         if( nRet == RET_OK )
     716             :                         {
     717           0 :                             Color aSelectedColor;
     718           0 :                             pDlg->GetSelectedColor(aSelectedColor);
     719             :                             scoped_ptr<ScUndoTabColorInfo::List>
     720           0 :                                 pTabColorList(new ScUndoTabColorInfo::List);
     721           0 :                             if ( nTabSelCount > 1 )
     722             :                             {
     723           0 :                                 ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
     724           0 :                                 for (; itr != itrEnd; ++itr)
     725             :                                     {
     726           0 :                                         if ( !pDoc->IsTabProtected(*itr) )
     727             :                                         {
     728           0 :                                             ScUndoTabColorInfo aTabColorInfo(*itr);
     729           0 :                                             aTabColorInfo.maNewTabBgColor = aSelectedColor;
     730           0 :                                             pTabColorList->push_back(aTabColorInfo);
     731             :                                         }
     732             :                                     }
     733           0 :                                     bDone = SetTabBgColor( *pTabColorList );
     734             :                                 }
     735             :                                 else
     736             :                                 {
     737           0 :                                     bDone = SetTabBgColor( aSelectedColor, nCurrentTab ); //ScViewFunc.SetTabBgColor
     738             :                                 }
     739           0 :                                 if ( bDone )
     740             :                                 {
     741           0 :                                     rReq.AppendItem( SvxColorItem( aTabBgColor, nSlot ) );
     742           0 :                                     rReq.Done();
     743             :                                 }
     744             :                                 else
     745             :                                 {
     746           0 :                                     if( rReq.IsAPI() )
     747             :                                     {
     748             : #ifndef DISABLE_SCRIPTING
     749           0 :                                         StarBASIC::Error( SbERR_SETPROP_FAILED );
     750             : #endif
     751             :                                     }
     752           0 :                                 }
     753             :                             }
     754             :                         }
     755           0 :                         delete( pDlg );
     756             :                     }
     757             :                 }
     758           0 :                 break;
     759             : 
     760             :             case FID_TAB_EVENTS:
     761             :                 {
     762           0 :                     ScDocShell* pDocSh = pViewData->GetDocShell();
     763           0 :                     uno::Reference<container::XNameReplace> xEvents( new ScSheetEventsObj( pDocSh, nCurrentTab ) );
     764           0 :                     uno::Reference<frame::XFrame> xFrame = GetViewFrame()->GetFrame().GetFrameInterface();
     765           0 :                     SvxAbstractDialogFactory* pDlgFactory = SvxAbstractDialogFactory::Create();
     766           0 :                     if (pDlgFactory)
     767             :                     {
     768             :                         boost::scoped_ptr<VclAbstractDialog> pDialog( pDlgFactory->CreateSvxMacroAssignDlg(
     769           0 :                             GetDialogParent(), xFrame, false, xEvents, 0 ) );
     770           0 :                         if ( pDialog.get() && pDialog->Execute() == RET_OK )
     771             :                         {
     772             :                             // the dialog modifies the settings directly
     773           0 :                         }
     774           0 :                     }
     775             :                 }
     776           0 :                 break;
     777             : 
     778             :             default:
     779             :                 OSL_FAIL("Unbekannte Message bei ViewShell");
     780           0 :                 break;
     781             :         }
     782           0 :     }
     783             : 
     784           0 :     void ScTabViewShell::GetStateTable( SfxItemSet& rSet )
     785             :     {
     786           0 :         ScViewData* pViewData   = GetViewData();
     787           0 :     ScDocument* pDoc        = pViewData->GetDocument();
     788           0 :     ScDocShell* pDocShell   = pViewData->GetDocShell();
     789           0 :     ScMarkData& rMark       = GetViewData()->GetMarkData();
     790           0 :     SCTAB       nTab        = pViewData->GetTabNo();
     791             : 
     792           0 :     SCTAB nTabCount = pDoc->GetTableCount();
     793           0 :     SCTAB nTabSelCount = rMark.GetSelectCount();
     794             : 
     795           0 :     SfxWhichIter    aIter(rSet);
     796           0 :     sal_uInt16          nWhich = aIter.FirstWhich();
     797             : 
     798           0 :     while ( nWhich )
     799             :     {
     800           0 :         switch ( nWhich )
     801             :         {
     802             : 
     803             :             case FID_TABLE_VISIBLE:
     804           0 :                 rSet.Put( SfxBoolItem( nWhich, pDoc->IsVisible(nTab) ));
     805           0 :                 break;
     806             : 
     807             :             case FID_TABLE_HIDE:
     808             :                 {
     809           0 :                     sal_uInt16 nVis = 0;
     810             :                     // enable menu : check to make sure we won't hide all sheets. we need at least one visible at all times.
     811           0 :                     for ( SCTAB i=0; i < nTabCount && nVis<nTabSelCount + 1; i++ )
     812           0 :                         if (pDoc->IsVisible(i))
     813           0 :                             ++nVis;
     814           0 :                     if ( nVis<=nTabSelCount || !pDoc->IsDocEditable() )
     815           0 :                         rSet.DisableItem( nWhich );
     816             :                 }
     817           0 :                 break;
     818             : 
     819             :             case FID_TABLE_SHOW:
     820             :                 {
     821           0 :                     sal_Bool bHasHidden = false;
     822           0 :                     for ( SCTAB i=0; i < nTabCount && !bHasHidden; i++ )
     823           0 :                         if (!pDoc->IsVisible(i))
     824           0 :                             bHasHidden = sal_True;
     825           0 :                     if ( !bHasHidden || pDoc->IsDocProtected() || nTabSelCount > 1 )
     826           0 :                         rSet.DisableItem( nWhich );
     827             :                 }
     828           0 :                 break;
     829             : 
     830             :             case FID_DELETE_TABLE:
     831             :                 {
     832           0 :                     if ( pDoc->GetChangeTrack() )
     833           0 :                         rSet.DisableItem( nWhich );
     834             :                     else
     835             :                     {
     836           0 :                         sal_uInt16 nVis = 0;
     837           0 :                         for ( SCTAB i=0; i < nTabCount && nVis<2; i++ )
     838           0 :                             if (pDoc->IsVisible(i))
     839           0 :                                 ++nVis;
     840           0 :                         if (   pDoc->IsTabProtected(nTab)
     841           0 :                             || !pDoc->IsDocEditable()
     842           0 :                             || nVis < 2
     843           0 :                             || nTabSelCount == nTabCount)
     844           0 :                         rSet.DisableItem( nWhich );
     845             :                     }
     846             :                 }
     847           0 :                 break;
     848             : 
     849             :             case FID_INS_TABLE:
     850             :             case FID_INS_TABLE_EXT:
     851             :             case FID_TAB_APPEND:
     852           0 :                 if ( !pDoc->IsDocEditable() ||
     853           0 :                      nTabCount > MAXTAB ||
     854           0 :                      ( nWhich == FID_INS_TABLE_EXT && pDocShell && pDocShell->IsDocShared() ) )
     855           0 :                     rSet.DisableItem( nWhich );
     856           0 :                 break;
     857             : 
     858             :             case FID_TAB_MOVE:
     859           0 :                 if (   !pDoc->IsDocEditable()
     860           0 :                     || pDoc->GetChangeTrack() != NULL
     861           0 :                     || nTabCount > MAXTAB)
     862           0 :                     rSet.DisableItem( nWhich );
     863           0 :                 break;
     864             : 
     865             :             //  FID_TAB_MENU_RENAME - "umbenennen" im Menu
     866             :             //  FID_TAB_RENAME      - "Name"-Property fuer Basic
     867             : 
     868             :             case FID_TAB_MENU_RENAME:
     869           0 :                 if ( !pDoc->IsDocEditable() ||
     870           0 :                      pDoc->IsTabProtected(nTab) ||nTabSelCount > 1 ||
     871           0 :                      ( pDocShell && pDocShell->IsDocShared() ) )
     872           0 :                     rSet.DisableItem( nWhich );
     873           0 :                 break;
     874             : 
     875             :             case FID_TAB_RENAME:
     876             :                 {
     877           0 :                     OUString aTabName;
     878           0 :                     pDoc->GetName( nTab, aTabName );
     879             : 
     880           0 :                     rSet.Put( SfxStringItem( nWhich, aTabName ));
     881             : 
     882             :                 }
     883           0 :                 break;
     884             : 
     885             :             case FID_TAB_RTL:
     886             :                 {
     887           0 :                     SvtLanguageOptions aLangOpt;
     888           0 :                     if ( !aLangOpt.IsCTLFontEnabled() )
     889           0 :                         rSet.DisableItem( nWhich );
     890             :                     else
     891           0 :                         rSet.Put( SfxBoolItem( nWhich, pDoc->IsLayoutRTL( nTab ) ) );
     892             :                 }
     893           0 :                 break;
     894             : 
     895             :             case FID_TAB_MENU_SET_TAB_BG_COLOR:
     896             :                 {
     897           0 :                     if ( !pDoc->IsDocEditable()
     898           0 :                         || ( pDocShell && pDocShell->IsDocShared() )
     899           0 :                         || pDoc->IsTabProtected(nTab) )
     900           0 :                         rSet.DisableItem( nWhich );
     901             :                 }
     902           0 :                 break;
     903             : 
     904             :             case FID_TAB_SET_TAB_BG_COLOR:
     905             :                 {
     906           0 :                     Color aColor;
     907           0 :                     aColor = pDoc->GetTabBgColor( nTab );
     908           0 :                     rSet.Put( SvxColorItem( aColor, nWhich ) );
     909             :                 }
     910           0 :                 break;
     911             : 
     912             :             case FID_TAB_TOGGLE_GRID:
     913           0 :                 rSet.Put( SfxBoolItem(nWhich, pViewData->GetShowGrid()) );
     914           0 :                 break;
     915             :         }
     916           0 :         nWhich = aIter.NextWhich();
     917           0 :     }
     918           0 : }
     919             : 
     920             : 
     921             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10