xref: /trunk/main/sc/source/ui/view/tabvwsh5.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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
10cdf0e10cSrcweir  *
11*b3f79822SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
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.
19cdf0e10cSrcweir  *
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 }
420