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
28cdf0e10cSrcweir
29cdf0e10cSrcweir // INCLUDE ---------------------------------------------------------------
30cdf0e10cSrcweir #define _ZFORLIST_DECLARE_TABLE
31cdf0e10cSrcweir #include "scitems.hxx"
32cdf0e10cSrcweir #include <svl/smplhint.hxx>
33cdf0e10cSrcweir #include <svl/zforlist.hxx>
34cdf0e10cSrcweir #include <svx/numfmtsh.hxx>
35cdf0e10cSrcweir #include <svx/numinf.hxx>
36cdf0e10cSrcweir #include <svx/svxids.hrc>
37cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
38cdf0e10cSrcweir #include <sfx2/objsh.hxx>
39cdf0e10cSrcweir
40cdf0e10cSrcweir #include "tabvwsh.hxx"
41cdf0e10cSrcweir #include "sc.hrc"
42cdf0e10cSrcweir #include "global.hxx"
43cdf0e10cSrcweir #include "docsh.hxx"
44cdf0e10cSrcweir #include "document.hxx"
45cdf0e10cSrcweir #include "cell.hxx"
46cdf0e10cSrcweir #include "globstr.hrc"
47cdf0e10cSrcweir #include "scmod.hxx"
48cdf0e10cSrcweir #include "uiitems.hxx"
49cdf0e10cSrcweir #include "editsh.hxx"
50cdf0e10cSrcweir #include "hints.hxx"
51cdf0e10cSrcweir
52cdf0e10cSrcweir
53cdf0e10cSrcweir //==================================================================
54cdf0e10cSrcweir
Notify(SfxBroadcaster & rBC,const SfxHint & rHint)55cdf0e10cSrcweir void __EXPORT ScTabViewShell::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
56cdf0e10cSrcweir {
57cdf0e10cSrcweir if (rHint.ISA(SfxSimpleHint)) // ohne Parameter
58cdf0e10cSrcweir {
59cdf0e10cSrcweir sal_uLong nSlot = ((SfxSimpleHint&)rHint).GetId();
60cdf0e10cSrcweir switch ( nSlot )
61cdf0e10cSrcweir {
62cdf0e10cSrcweir case FID_DATACHANGED:
63cdf0e10cSrcweir UpdateFormulas();
64cdf0e10cSrcweir break;
65cdf0e10cSrcweir
66cdf0e10cSrcweir case FID_REFMODECHANGED:
67cdf0e10cSrcweir {
68cdf0e10cSrcweir sal_Bool bRefMode = SC_MOD()->IsFormulaMode();
69cdf0e10cSrcweir if (!bRefMode)
70cdf0e10cSrcweir StopRefMode();
71cdf0e10cSrcweir else
72cdf0e10cSrcweir {
73cdf0e10cSrcweir GetSelEngine()->Reset();
74cdf0e10cSrcweir GetFunctionSet()->SetAnchorFlag(sal_True);
75cdf0e10cSrcweir // AnchorFlag, damit gleich mit Control angehaengt werden kann
76cdf0e10cSrcweir }
77cdf0e10cSrcweir }
78cdf0e10cSrcweir break;
79cdf0e10cSrcweir
80cdf0e10cSrcweir case FID_KILLEDITVIEW:
81cdf0e10cSrcweir case FID_KILLEDITVIEW_NOPAINT:
82cdf0e10cSrcweir StopEditShell();
83cdf0e10cSrcweir KillEditView( nSlot == FID_KILLEDITVIEW_NOPAINT );
84cdf0e10cSrcweir break;
85cdf0e10cSrcweir
86cdf0e10cSrcweir case SFX_HINT_DOCCHANGED:
87cdf0e10cSrcweir {
88cdf0e10cSrcweir ScDocument* pDoc = GetViewData()->GetDocument();
89cdf0e10cSrcweir if (!pDoc->HasTable( GetViewData()->GetTabNo() ))
90cdf0e10cSrcweir {
91cdf0e10cSrcweir SetTabNo(0);
92cdf0e10cSrcweir }
93cdf0e10cSrcweir }
94cdf0e10cSrcweir break;
95cdf0e10cSrcweir
96cdf0e10cSrcweir case SC_HINT_DRWLAYER_NEW:
97cdf0e10cSrcweir MakeDrawView();
98cdf0e10cSrcweir break;
99cdf0e10cSrcweir
100cdf0e10cSrcweir case SC_HINT_DOC_SAVED:
101cdf0e10cSrcweir {
102cdf0e10cSrcweir // beim "Save as" kann ein vorher schreibgeschuetztes Dokument
103cdf0e10cSrcweir // bearbeitbar werden, deshalb die Layer-Locks neu (#39884#)
104cdf0e10cSrcweir // (Invalidate etc. passiert schon vom Sfx her)
105cdf0e10cSrcweir // #42091# bei SID_EDITDOC kommt kein SFX_HINT_TITLECHANGED, darum
106cdf0e10cSrcweir // der eigene Hint aus DoSaveCompleted
107cdf0e10cSrcweir //! was ist mit SFX_HINT_SAVECOMPLETED ?
108cdf0e10cSrcweir
109cdf0e10cSrcweir UpdateLayerLocks();
110cdf0e10cSrcweir
111cdf0e10cSrcweir // #54891# Design-Modus bei jedem Speichern anzupassen, waere zuviel
112cdf0e10cSrcweir // (beim Speichern unter gleichem Namen soll er unveraendert bleiben)
113cdf0e10cSrcweir // Darum nur bei SFX_HINT_MODECHANGED (vom ViewFrame)
114cdf0e10cSrcweir }
115cdf0e10cSrcweir break;
116cdf0e10cSrcweir
117cdf0e10cSrcweir case SFX_HINT_MODECHANGED:
118cdf0e10cSrcweir // #54891#/#58510# Da man sich nicht mehr darauf verlassen kann, woher
119cdf0e10cSrcweir // dieser Hint kommt, den Design-Modus immer dann umschalten, wenn der
120cdf0e10cSrcweir // ReadOnly-Status sich wirklich geaendert hat:
121cdf0e10cSrcweir
122cdf0e10cSrcweir if ( GetViewData()->GetSfxDocShell()->IsReadOnly() != bReadOnly )
123cdf0e10cSrcweir {
124cdf0e10cSrcweir bReadOnly = GetViewData()->GetSfxDocShell()->IsReadOnly();
125cdf0e10cSrcweir
126cdf0e10cSrcweir SfxBoolItem aItem( SID_FM_DESIGN_MODE, !bReadOnly);
127cdf0e10cSrcweir GetViewData()->GetDispatcher().Execute( SID_FM_DESIGN_MODE, SFX_CALLMODE_ASYNCHRON,
128cdf0e10cSrcweir &aItem, 0L );
129cdf0e10cSrcweir
130cdf0e10cSrcweir UpdateInputContext();
131cdf0e10cSrcweir }
132cdf0e10cSrcweir break;
133cdf0e10cSrcweir
134cdf0e10cSrcweir case SC_HINT_SHOWRANGEFINDER:
135cdf0e10cSrcweir PaintRangeFinder();
136cdf0e10cSrcweir break;
137cdf0e10cSrcweir
138cdf0e10cSrcweir case SC_HINT_FORCESETTAB:
139cdf0e10cSrcweir SetTabNo( GetViewData()->GetTabNo(), sal_True );
140cdf0e10cSrcweir break;
141cdf0e10cSrcweir
142cdf0e10cSrcweir default:
143cdf0e10cSrcweir break;
144cdf0e10cSrcweir }
145cdf0e10cSrcweir }
146cdf0e10cSrcweir else if (rHint.ISA(ScPaintHint)) // neu zeichnen
147cdf0e10cSrcweir {
148cdf0e10cSrcweir ScPaintHint* pHint = (ScPaintHint*) &rHint;
149cdf0e10cSrcweir sal_uInt16 nParts = pHint->GetParts();
150cdf0e10cSrcweir SCTAB nTab = GetViewData()->GetTabNo();
151cdf0e10cSrcweir if (pHint->GetStartTab() <= nTab && pHint->GetEndTab() >= nTab)
152cdf0e10cSrcweir {
153cdf0e10cSrcweir if (nParts & PAINT_EXTRAS) // zuerst, falls Tabelle weg ist !!!
154cdf0e10cSrcweir if (PaintExtras())
155cdf0e10cSrcweir nParts = PAINT_ALL;
156cdf0e10cSrcweir
157cdf0e10cSrcweir // if the current sheet has pending row height updates (sheet links refreshed),
158cdf0e10cSrcweir // execute them before invalidating the window
159cdf0e10cSrcweir GetViewData()->GetDocShell()->UpdatePendingRowHeights( GetViewData()->GetTabNo() );
160cdf0e10cSrcweir
161cdf0e10cSrcweir if (nParts & PAINT_SIZE)
162cdf0e10cSrcweir RepeatResize(); //! InvalidateBorder ???
163cdf0e10cSrcweir if (nParts & PAINT_GRID)
164cdf0e10cSrcweir PaintArea( pHint->GetStartCol(), pHint->GetStartRow(),
165cdf0e10cSrcweir pHint->GetEndCol(), pHint->GetEndRow() );
166cdf0e10cSrcweir if (nParts & PAINT_MARKS)
167cdf0e10cSrcweir PaintArea( pHint->GetStartCol(), pHint->GetStartRow(),
168cdf0e10cSrcweir pHint->GetEndCol(), pHint->GetEndRow(), SC_UPDATE_MARKS );
169cdf0e10cSrcweir if (nParts & PAINT_LEFT)
170cdf0e10cSrcweir PaintLeftArea( pHint->GetStartRow(), pHint->GetEndRow() );
171cdf0e10cSrcweir if (nParts & PAINT_TOP)
172cdf0e10cSrcweir PaintTopArea( pHint->GetStartCol(), pHint->GetEndCol() );
173cdf0e10cSrcweir if (nParts & PAINT_INVERT)
174cdf0e10cSrcweir InvertBlockMark( pHint->GetStartCol(), pHint->GetStartRow(),
175cdf0e10cSrcweir pHint->GetEndCol(), pHint->GetEndRow() );
176cdf0e10cSrcweir
177cdf0e10cSrcweir // #i84689# call UpdateAllOverlays here instead of in ScTabView::PaintArea
178cdf0e10cSrcweir if (nParts & ( PAINT_LEFT | PAINT_TOP )) // only if widths or heights changed
179cdf0e10cSrcweir UpdateAllOverlays();
180cdf0e10cSrcweir
181cdf0e10cSrcweir HideNoteMarker();
182cdf0e10cSrcweir }
183cdf0e10cSrcweir }
184cdf0e10cSrcweir else if (rHint.ISA(ScEditViewHint)) // Edit-View anlegen
185cdf0e10cSrcweir {
186cdf0e10cSrcweir // ScEditViewHint kommt nur an aktiver View an
187cdf0e10cSrcweir
188cdf0e10cSrcweir ScEditViewHint* pHint = (ScEditViewHint*) &rHint;
189cdf0e10cSrcweir SCTAB nTab = GetViewData()->GetTabNo();
190cdf0e10cSrcweir if ( pHint->GetTab() == nTab )
191cdf0e10cSrcweir {
192cdf0e10cSrcweir SCCOL nCol = pHint->GetCol();
193cdf0e10cSrcweir SCROW nRow = pHint->GetRow();
194cdf0e10cSrcweir {
195cdf0e10cSrcweir HideNoteMarker();
196cdf0e10cSrcweir
197cdf0e10cSrcweir MakeEditView( pHint->GetEngine(), nCol, nRow );
198cdf0e10cSrcweir
199cdf0e10cSrcweir StopEditShell(); // sollte nicht gesetzt sein
200cdf0e10cSrcweir
201cdf0e10cSrcweir ScSplitPos eActive = GetViewData()->GetActivePart();
202cdf0e10cSrcweir if ( GetViewData()->HasEditView(eActive) )
203cdf0e10cSrcweir {
204cdf0e10cSrcweir // MakeEditView geht schief, wenn der Cursor ausserhalb des
205cdf0e10cSrcweir // Bildschirms steht. GetEditView gibt dann eine nicht aktive
206cdf0e10cSrcweir // View zurueck, darum die Abfrage HasEditView.
207cdf0e10cSrcweir
208cdf0e10cSrcweir EditView* pView = GetViewData()->GetEditView(eActive); // ist nicht 0
209cdf0e10cSrcweir
210cdf0e10cSrcweir SetEditShell(pView ,sal_True);
211cdf0e10cSrcweir }
212cdf0e10cSrcweir }
213cdf0e10cSrcweir }
214cdf0e10cSrcweir }
215cdf0e10cSrcweir else if (rHint.ISA(ScTablesHint)) // Tabelle eingefuegt / geloescht
216cdf0e10cSrcweir {
217cdf0e10cSrcweir // aktuelle Tabelle zuerst holen (kann bei DeleteTab an ViewData geaendert werden)
218cdf0e10cSrcweir SCTAB nActiveTab = GetViewData()->GetTabNo();
219cdf0e10cSrcweir
220cdf0e10cSrcweir const ScTablesHint& rTabHint = (const ScTablesHint&)rHint;
221cdf0e10cSrcweir SCTAB nTab1 = rTabHint.GetTab1();
222cdf0e10cSrcweir SCTAB nTab2 = rTabHint.GetTab2();
223cdf0e10cSrcweir sal_uInt16 nId = rTabHint.GetId();
224cdf0e10cSrcweir switch (nId)
225cdf0e10cSrcweir {
226cdf0e10cSrcweir case SC_TAB_INSERTED:
227cdf0e10cSrcweir GetViewData()->InsertTab( nTab1 );
228cdf0e10cSrcweir break;
229cdf0e10cSrcweir case SC_TAB_DELETED:
230cdf0e10cSrcweir GetViewData()->DeleteTab( nTab1 );
231cdf0e10cSrcweir break;
232cdf0e10cSrcweir case SC_TAB_MOVED:
233cdf0e10cSrcweir GetViewData()->MoveTab( nTab1, nTab2 );
234cdf0e10cSrcweir break;
235cdf0e10cSrcweir case SC_TAB_COPIED:
236cdf0e10cSrcweir GetViewData()->CopyTab( nTab1, nTab2 );
237cdf0e10cSrcweir break;
238cdf0e10cSrcweir case SC_TAB_HIDDEN:
239cdf0e10cSrcweir break;
240cdf0e10cSrcweir default:
241cdf0e10cSrcweir DBG_ERROR("unbekannter ScTablesHint");
242cdf0e10cSrcweir }
243cdf0e10cSrcweir
244cdf0e10cSrcweir // hier keine Abfrage auf IsActive() mehr, weil die Aktion von Basic ausgehen
245cdf0e10cSrcweir // kann und dann auch die aktive View umgeschaltet werden muss.
246cdf0e10cSrcweir
247cdf0e10cSrcweir SCTAB nNewTab = nActiveTab;
248cdf0e10cSrcweir bool bStayOnActiveTab = true;
249cdf0e10cSrcweir switch (nId)
250cdf0e10cSrcweir {
251cdf0e10cSrcweir case SC_TAB_INSERTED:
252cdf0e10cSrcweir if ( nTab1 <= nNewTab ) // vorher eingefuegt
253cdf0e10cSrcweir ++nNewTab;
254cdf0e10cSrcweir break;
255cdf0e10cSrcweir case SC_TAB_DELETED:
256cdf0e10cSrcweir if ( nTab1 < nNewTab ) // vorher geloescht
257cdf0e10cSrcweir --nNewTab;
258cdf0e10cSrcweir else if ( nTab1 == nNewTab ) // aktuelle geloescht
259cdf0e10cSrcweir bStayOnActiveTab = false;
260cdf0e10cSrcweir break;
261cdf0e10cSrcweir case SC_TAB_MOVED:
262cdf0e10cSrcweir if ( nNewTab == nTab1 ) // verschobene Tabelle
263cdf0e10cSrcweir nNewTab = nTab2;
264cdf0e10cSrcweir else if ( nTab1 < nTab2 ) // nach hinten verschoben
265cdf0e10cSrcweir {
266cdf0e10cSrcweir if ( nNewTab > nTab1 && nNewTab <= nTab2 ) // nachrueckender Bereich
267cdf0e10cSrcweir --nNewTab;
268cdf0e10cSrcweir }
269cdf0e10cSrcweir else // nach vorne verschoben
270cdf0e10cSrcweir {
271cdf0e10cSrcweir if ( nNewTab >= nTab2 && nNewTab < nTab1 ) // nachrueckender Bereich
272cdf0e10cSrcweir ++nNewTab;
273cdf0e10cSrcweir }
274cdf0e10cSrcweir break;
275cdf0e10cSrcweir case SC_TAB_COPIED:
276cdf0e10cSrcweir if ( nNewTab >= nTab2 ) // vorher eingefuegt
277cdf0e10cSrcweir ++nNewTab;
278cdf0e10cSrcweir break;
279cdf0e10cSrcweir case SC_TAB_HIDDEN:
280cdf0e10cSrcweir if ( nTab1 == nNewTab ) // aktuelle ausgeblendet
281cdf0e10cSrcweir bStayOnActiveTab = false;
282cdf0e10cSrcweir break;
283cdf0e10cSrcweir }
284cdf0e10cSrcweir
285cdf0e10cSrcweir ScDocument* pDoc = GetViewData()->GetDocument();
286cdf0e10cSrcweir if ( nNewTab >= pDoc->GetTableCount() )
287cdf0e10cSrcweir nNewTab = pDoc->GetTableCount() - 1;
288cdf0e10cSrcweir
289cdf0e10cSrcweir sal_Bool bForce = !bStayOnActiveTab;
290cdf0e10cSrcweir SetTabNo( nNewTab, bForce, sal_False, bStayOnActiveTab );
291cdf0e10cSrcweir }
292cdf0e10cSrcweir else if (rHint.ISA(ScIndexHint))
293cdf0e10cSrcweir {
294cdf0e10cSrcweir const ScIndexHint& rIndexHint = (const ScIndexHint&)rHint;
295cdf0e10cSrcweir sal_uInt16 nId = rIndexHint.GetId();
296cdf0e10cSrcweir sal_uInt16 nIndex = rIndexHint.GetIndex();
297cdf0e10cSrcweir switch (nId)
298cdf0e10cSrcweir {
299cdf0e10cSrcweir case SC_HINT_SHOWRANGEFINDER:
300cdf0e10cSrcweir PaintRangeFinder( nIndex );
301cdf0e10cSrcweir break;
302cdf0e10cSrcweir }
303cdf0e10cSrcweir }
304cdf0e10cSrcweir
305cdf0e10cSrcweir SfxViewShell::Notify( rBC, rHint );
306cdf0e10cSrcweir }
307cdf0e10cSrcweir
308cdf0e10cSrcweir //------------------------------------------------------------------
309cdf0e10cSrcweir
MakeNumberInfoItem(ScDocument * pDoc,ScViewData * pViewData,SvxNumberInfoItem ** ppItem)310cdf0e10cSrcweir void ScTabViewShell::MakeNumberInfoItem( ScDocument* pDoc,
311cdf0e10cSrcweir ScViewData* pViewData,
312cdf0e10cSrcweir SvxNumberInfoItem** ppItem )
313cdf0e10cSrcweir {
314cdf0e10cSrcweir //------------------------------
315cdf0e10cSrcweir // NumberInfo-Item konstruieren:
316cdf0e10cSrcweir //------------------------------
317cdf0e10cSrcweir ScBaseCell* pCell = NULL;
318cdf0e10cSrcweir SvxNumberValueType eValType = SVX_VALUE_TYPE_UNDEFINED;
319cdf0e10cSrcweir double nCellValue = 0;
320cdf0e10cSrcweir String aCellString;
321cdf0e10cSrcweir
322cdf0e10cSrcweir pDoc->GetCell( pViewData->GetCurX(),
323cdf0e10cSrcweir pViewData->GetCurY(),
324cdf0e10cSrcweir pViewData->GetTabNo(),
325cdf0e10cSrcweir pCell );
326cdf0e10cSrcweir
327cdf0e10cSrcweir if ( pCell )
328cdf0e10cSrcweir {
329cdf0e10cSrcweir switch ( pCell->GetCellType() )
330cdf0e10cSrcweir {
331cdf0e10cSrcweir case CELLTYPE_VALUE:
332cdf0e10cSrcweir {
333cdf0e10cSrcweir nCellValue = ((ScValueCell*)pCell)->GetValue();
334cdf0e10cSrcweir eValType = SVX_VALUE_TYPE_NUMBER;
335cdf0e10cSrcweir aCellString.Erase();
336cdf0e10cSrcweir }
337cdf0e10cSrcweir break;
338cdf0e10cSrcweir
339cdf0e10cSrcweir case CELLTYPE_STRING:
340cdf0e10cSrcweir {
341cdf0e10cSrcweir ((ScStringCell*)pCell)->GetString( aCellString );
342cdf0e10cSrcweir eValType = SVX_VALUE_TYPE_STRING;
343cdf0e10cSrcweir }
344cdf0e10cSrcweir break;
345cdf0e10cSrcweir
346cdf0e10cSrcweir case CELLTYPE_FORMULA:
347cdf0e10cSrcweir {
348cdf0e10cSrcweir if ( ((ScFormulaCell*)pCell)->IsValue() )
349cdf0e10cSrcweir {
350cdf0e10cSrcweir nCellValue = ((ScFormulaCell*)pCell)->GetValue();
351cdf0e10cSrcweir eValType = SVX_VALUE_TYPE_NUMBER;
352cdf0e10cSrcweir }
353cdf0e10cSrcweir else
354cdf0e10cSrcweir {
355cdf0e10cSrcweir nCellValue = 0;
356cdf0e10cSrcweir eValType = SVX_VALUE_TYPE_UNDEFINED;
357cdf0e10cSrcweir }
358cdf0e10cSrcweir aCellString.Erase();
359cdf0e10cSrcweir }
360cdf0e10cSrcweir break;
361cdf0e10cSrcweir
362cdf0e10cSrcweir default:
363cdf0e10cSrcweir nCellValue = 0;
364cdf0e10cSrcweir eValType = SVX_VALUE_TYPE_UNDEFINED;
365cdf0e10cSrcweir aCellString.Erase();
366cdf0e10cSrcweir }
367cdf0e10cSrcweir }
368cdf0e10cSrcweir else // Zelle noch leer (== nicht erzeugt)
369cdf0e10cSrcweir {
370cdf0e10cSrcweir nCellValue = 0;
371cdf0e10cSrcweir eValType = SVX_VALUE_TYPE_UNDEFINED;
372cdf0e10cSrcweir aCellString.Erase();
373cdf0e10cSrcweir }
374cdf0e10cSrcweir
375cdf0e10cSrcweir switch ( eValType )
376cdf0e10cSrcweir {
377cdf0e10cSrcweir case SVX_VALUE_TYPE_STRING:
378cdf0e10cSrcweir *ppItem = new SvxNumberInfoItem(
379cdf0e10cSrcweir pDoc->GetFormatTable(),
380cdf0e10cSrcweir aCellString,
381cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_INFO );
382cdf0e10cSrcweir break;
383cdf0e10cSrcweir
384cdf0e10cSrcweir case SVX_VALUE_TYPE_NUMBER:
385cdf0e10cSrcweir *ppItem = new SvxNumberInfoItem(
386cdf0e10cSrcweir pDoc->GetFormatTable(),
387cdf0e10cSrcweir nCellValue,
388cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_INFO );
389cdf0e10cSrcweir break;
390cdf0e10cSrcweir
391cdf0e10cSrcweir case SVX_VALUE_TYPE_UNDEFINED:
392cdf0e10cSrcweir default:
393cdf0e10cSrcweir *ppItem = new SvxNumberInfoItem(
394cdf0e10cSrcweir pDoc->GetFormatTable(),
395cdf0e10cSrcweir (const sal_uInt16)
396cdf0e10cSrcweir SID_ATTR_NUMBERFORMAT_INFO );
397cdf0e10cSrcweir }
398cdf0e10cSrcweir }
399cdf0e10cSrcweir
400cdf0e10cSrcweir //------------------------------------------------------------------
401cdf0e10cSrcweir
UpdateNumberFormatter(ScDocument * pDoc,const SvxNumberInfoItem & rInfoItem)402cdf0e10cSrcweir void ScTabViewShell::UpdateNumberFormatter(
403cdf0e10cSrcweir ScDocument* pDoc,
404cdf0e10cSrcweir const SvxNumberInfoItem& rInfoItem )
405cdf0e10cSrcweir {
406cdf0e10cSrcweir const sal_uInt32 nDelCount = rInfoItem.GetDelCount();
407cdf0e10cSrcweir
408cdf0e10cSrcweir if ( nDelCount > 0 )
409cdf0e10cSrcweir {
410cdf0e10cSrcweir const sal_uInt32* pDelArr = rInfoItem.GetDelArray();
411cdf0e10cSrcweir
412cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nDelCount; i++ )
413cdf0e10cSrcweir rInfoItem.GetNumberFormatter()->DeleteEntry( pDelArr[i] );
414cdf0e10cSrcweir }
415cdf0e10cSrcweir
416cdf0e10cSrcweir // sollte besser UpdateNumberFormats() heissen ?
417cdf0e10cSrcweir pDoc->DeleteNumberFormat( rInfoItem.GetDelArray(),
418cdf0e10cSrcweir rInfoItem.GetDelCount() );
419cdf0e10cSrcweir }
420cdf0e10cSrcweir
421cdf0e10cSrcweir
422cdf0e10cSrcweir
423cdf0e10cSrcweir
424cdf0e10cSrcweir
425cdf0e10cSrcweir
426