xref: /trunk/main/sc/source/ui/view/tabvwsh5.cxx (revision b3f79822)
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