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