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