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