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 #include "scitems.hxx" 32*cdf0e10cSrcweir #include <editeng/eeitem.hxx> 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include <editeng/editobj.hxx> 35*cdf0e10cSrcweir #include <svl/zforlist.hxx> 36*cdf0e10cSrcweir #include <sfx2/app.hxx> 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir #include "undocell.hxx" 39*cdf0e10cSrcweir #include "document.hxx" 40*cdf0e10cSrcweir #include "docpool.hxx" 41*cdf0e10cSrcweir #include "patattr.hxx" 42*cdf0e10cSrcweir #include "docsh.hxx" 43*cdf0e10cSrcweir #include "tabvwsh.hxx" 44*cdf0e10cSrcweir #include "globstr.hrc" 45*cdf0e10cSrcweir #include "global.hxx" 46*cdf0e10cSrcweir #include "cell.hxx" 47*cdf0e10cSrcweir #include "target.hxx" 48*cdf0e10cSrcweir #include "undoolk.hxx" 49*cdf0e10cSrcweir #include "detdata.hxx" 50*cdf0e10cSrcweir #include "stlpool.hxx" 51*cdf0e10cSrcweir #include "printfun.hxx" 52*cdf0e10cSrcweir #include "rangenam.hxx" 53*cdf0e10cSrcweir #include "chgtrack.hxx" 54*cdf0e10cSrcweir #include "sc.hrc" 55*cdf0e10cSrcweir #include "docuno.hxx" 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir // STATIC DATA ----------------------------------------------------------- 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir TYPEINIT1(ScUndoCursorAttr, ScSimpleUndo); 60*cdf0e10cSrcweir TYPEINIT1(ScUndoEnterData, ScSimpleUndo); 61*cdf0e10cSrcweir TYPEINIT1(ScUndoEnterValue, ScSimpleUndo); 62*cdf0e10cSrcweir TYPEINIT1(ScUndoPutCell, ScSimpleUndo); 63*cdf0e10cSrcweir TYPEINIT1(ScUndoPageBreak, ScSimpleUndo); 64*cdf0e10cSrcweir TYPEINIT1(ScUndoPrintZoom, ScSimpleUndo); 65*cdf0e10cSrcweir TYPEINIT1(ScUndoThesaurus, ScSimpleUndo); 66*cdf0e10cSrcweir TYPEINIT1(ScUndoReplaceNote, ScSimpleUndo); 67*cdf0e10cSrcweir TYPEINIT1(ScUndoShowHideNote, ScSimpleUndo); 68*cdf0e10cSrcweir TYPEINIT1(ScUndoDetective, ScSimpleUndo); 69*cdf0e10cSrcweir TYPEINIT1(ScUndoRangeNames, ScSimpleUndo); 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir 72*cdf0e10cSrcweir // ----------------------------------------------------------------------- 73*cdf0e10cSrcweir // 74*cdf0e10cSrcweir // Attribute auf Cursor anwenden 75*cdf0e10cSrcweir // 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir ScUndoCursorAttr::ScUndoCursorAttr( ScDocShell* pNewDocShell, 78*cdf0e10cSrcweir SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab, 79*cdf0e10cSrcweir const ScPatternAttr* pOldPat, const ScPatternAttr* pNewPat, 80*cdf0e10cSrcweir const ScPatternAttr* pApplyPat, sal_Bool bAutomatic ) : 81*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 82*cdf0e10cSrcweir nCol( nNewCol ), 83*cdf0e10cSrcweir nRow( nNewRow ), 84*cdf0e10cSrcweir nTab( nNewTab ), 85*cdf0e10cSrcweir bIsAutomatic( bAutomatic ) 86*cdf0e10cSrcweir { 87*cdf0e10cSrcweir ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool(); 88*cdf0e10cSrcweir pNewPattern = (ScPatternAttr*) &pPool->Put( *pNewPat ); 89*cdf0e10cSrcweir pOldPattern = (ScPatternAttr*) &pPool->Put( *pOldPat ); 90*cdf0e10cSrcweir pApplyPattern = (ScPatternAttr*) &pPool->Put( *pApplyPat ); 91*cdf0e10cSrcweir } 92*cdf0e10cSrcweir 93*cdf0e10cSrcweir __EXPORT ScUndoCursorAttr::~ScUndoCursorAttr() 94*cdf0e10cSrcweir { 95*cdf0e10cSrcweir ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool(); 96*cdf0e10cSrcweir pPool->Remove(*pNewPattern); 97*cdf0e10cSrcweir pPool->Remove(*pOldPattern); 98*cdf0e10cSrcweir pPool->Remove(*pApplyPattern); 99*cdf0e10cSrcweir } 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir String __EXPORT ScUndoCursorAttr::GetComment() const 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir //! eigener Text fuer automatische Attributierung 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir sal_uInt16 nId = STR_UNDO_CURSORATTR; // "Attribute" 106*cdf0e10cSrcweir return ScGlobal::GetRscString( nId ); 107*cdf0e10cSrcweir } 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir void ScUndoCursorAttr::DoChange( const ScPatternAttr* pWhichPattern ) const 110*cdf0e10cSrcweir { 111*cdf0e10cSrcweir pDocShell->GetDocument()->SetPattern( nCol, nRow, nTab, *pWhichPattern, sal_True ); 112*cdf0e10cSrcweir 113*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 114*cdf0e10cSrcweir if (pViewShell) 115*cdf0e10cSrcweir { 116*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 117*cdf0e10cSrcweir pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, sal_False, sal_False ); 118*cdf0e10cSrcweir pViewShell->AdjustBlockHeight(); 119*cdf0e10cSrcweir } 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir const SfxItemSet& rApplySet = pApplyPattern->GetItemSet(); 122*cdf0e10cSrcweir sal_Bool bPaintExt = ( rApplySet.GetItemState( ATTR_SHADOW, sal_True ) != SFX_ITEM_DEFAULT || 123*cdf0e10cSrcweir rApplySet.GetItemState( ATTR_CONDITIONAL, sal_True ) != SFX_ITEM_DEFAULT ); 124*cdf0e10cSrcweir sal_Bool bPaintRows = ( rApplySet.GetItemState( ATTR_HOR_JUSTIFY, sal_True ) != SFX_ITEM_DEFAULT ); 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir sal_uInt16 nFlags = SC_PF_TESTMERGE; 127*cdf0e10cSrcweir if (bPaintExt) 128*cdf0e10cSrcweir nFlags |= SC_PF_LINES; 129*cdf0e10cSrcweir if (bPaintRows) 130*cdf0e10cSrcweir nFlags |= SC_PF_WHOLEROWS; 131*cdf0e10cSrcweir pDocShell->PostPaint( nCol,nRow,nTab, nCol,nRow,nTab, PAINT_GRID, nFlags ); 132*cdf0e10cSrcweir } 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir void __EXPORT ScUndoCursorAttr::Undo() 135*cdf0e10cSrcweir { 136*cdf0e10cSrcweir BeginUndo(); 137*cdf0e10cSrcweir DoChange(pOldPattern); 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir if ( bIsAutomatic ) 140*cdf0e10cSrcweir { 141*cdf0e10cSrcweir // wenn automatische Formatierung rueckgaengig gemacht wird, 142*cdf0e10cSrcweir // soll auch nicht weiter automatisch formatiert werden: 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 145*cdf0e10cSrcweir if (pViewShell) 146*cdf0e10cSrcweir pViewShell->ForgetFormatArea(); 147*cdf0e10cSrcweir } 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir EndUndo(); 150*cdf0e10cSrcweir } 151*cdf0e10cSrcweir 152*cdf0e10cSrcweir void __EXPORT ScUndoCursorAttr::Redo() 153*cdf0e10cSrcweir { 154*cdf0e10cSrcweir BeginRedo(); 155*cdf0e10cSrcweir DoChange(pNewPattern); 156*cdf0e10cSrcweir EndRedo(); 157*cdf0e10cSrcweir } 158*cdf0e10cSrcweir 159*cdf0e10cSrcweir void __EXPORT ScUndoCursorAttr::Repeat(SfxRepeatTarget& rTarget) 160*cdf0e10cSrcweir { 161*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 162*cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->ApplySelectionPattern( *pApplyPattern ); 163*cdf0e10cSrcweir } 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoCursorAttr::CanRepeat(SfxRepeatTarget& rTarget) const 166*cdf0e10cSrcweir { 167*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir // ----------------------------------------------------------------------- 172*cdf0e10cSrcweir // 173*cdf0e10cSrcweir // Daten eingeben 174*cdf0e10cSrcweir // 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir ScUndoEnterData::ScUndoEnterData( ScDocShell* pNewDocShell, 177*cdf0e10cSrcweir SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab, 178*cdf0e10cSrcweir SCTAB nNewCount, SCTAB* pNewTabs, ScBaseCell** ppOldData, 179*cdf0e10cSrcweir sal_Bool* pHasForm, sal_uLong* pOldForm, 180*cdf0e10cSrcweir const String& rNewStr, EditTextObject* pObj ) : 181*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 182*cdf0e10cSrcweir aNewString( rNewStr ), 183*cdf0e10cSrcweir pTabs( pNewTabs ), 184*cdf0e10cSrcweir ppOldCells( ppOldData ), 185*cdf0e10cSrcweir pHasFormat( pHasForm ), 186*cdf0e10cSrcweir pOldFormats( pOldForm ), 187*cdf0e10cSrcweir pNewEditData( pObj ), 188*cdf0e10cSrcweir nCol( nNewCol ), 189*cdf0e10cSrcweir nRow( nNewRow ), 190*cdf0e10cSrcweir nTab( nNewTab ), 191*cdf0e10cSrcweir nCount( nNewCount ) 192*cdf0e10cSrcweir { 193*cdf0e10cSrcweir SetChangeTrack(); 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir __EXPORT ScUndoEnterData::~ScUndoEnterData() 197*cdf0e10cSrcweir { 198*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++) 199*cdf0e10cSrcweir if (ppOldCells[i]) 200*cdf0e10cSrcweir ppOldCells[i]->Delete(); 201*cdf0e10cSrcweir delete[] ppOldCells; 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir delete[] pHasFormat; 204*cdf0e10cSrcweir delete[] pOldFormats; 205*cdf0e10cSrcweir delete[] pTabs; 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir delete pNewEditData; 208*cdf0e10cSrcweir } 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir String __EXPORT ScUndoEnterData::GetComment() const 211*cdf0e10cSrcweir { 212*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_ENTERDATA ); // "Eingabe" 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir void ScUndoEnterData::DoChange() const 216*cdf0e10cSrcweir { 217*cdf0e10cSrcweir // Zeilenhoehe anpassen 218*cdf0e10cSrcweir //! nur wenn noetig (alte oder neue EditZelle, oder Attribute) ?? 219*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++) 220*cdf0e10cSrcweir pDocShell->AdjustRowHeight( nRow, nRow, pTabs[i] ); 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 223*cdf0e10cSrcweir if (pViewShell) 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 226*cdf0e10cSrcweir pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, sal_False, sal_False ); 227*cdf0e10cSrcweir } 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir pDocShell->PostDataChanged(); 230*cdf0e10cSrcweir } 231*cdf0e10cSrcweir 232*cdf0e10cSrcweir void ScUndoEnterData::SetChangeTrack() 233*cdf0e10cSrcweir { 234*cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack(); 235*cdf0e10cSrcweir if ( pChangeTrack ) 236*cdf0e10cSrcweir { 237*cdf0e10cSrcweir nEndChangeAction = pChangeTrack->GetActionMax() + 1; 238*cdf0e10cSrcweir ScAddress aPos( nCol, nRow, nTab ); 239*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++) 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir aPos.SetTab( pTabs[i] ); 242*cdf0e10cSrcweir sal_uLong nFormat = 0; 243*cdf0e10cSrcweir if ( pHasFormat && pOldFormats ) 244*cdf0e10cSrcweir { 245*cdf0e10cSrcweir if ( pHasFormat[i] ) 246*cdf0e10cSrcweir nFormat = pOldFormats[i]; 247*cdf0e10cSrcweir } 248*cdf0e10cSrcweir pChangeTrack->AppendContent( aPos, ppOldCells[i], nFormat ); 249*cdf0e10cSrcweir } 250*cdf0e10cSrcweir if ( nEndChangeAction > pChangeTrack->GetActionMax() ) 251*cdf0e10cSrcweir nEndChangeAction = 0; // nichts appended 252*cdf0e10cSrcweir } 253*cdf0e10cSrcweir else 254*cdf0e10cSrcweir nEndChangeAction = 0; 255*cdf0e10cSrcweir } 256*cdf0e10cSrcweir 257*cdf0e10cSrcweir void __EXPORT ScUndoEnterData::Undo() 258*cdf0e10cSrcweir { 259*cdf0e10cSrcweir BeginUndo(); 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 262*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++) 263*cdf0e10cSrcweir { 264*cdf0e10cSrcweir ScBaseCell* pNewCell = ppOldCells[i] ? ppOldCells[i]->CloneWithoutNote( *pDoc, SC_CLONECELL_STARTLISTENING ) : 0; 265*cdf0e10cSrcweir pDoc->PutCell( nCol, nRow, pTabs[i], pNewCell ); 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir if (pHasFormat && pOldFormats) 268*cdf0e10cSrcweir { 269*cdf0e10cSrcweir if ( pHasFormat[i] ) 270*cdf0e10cSrcweir pDoc->ApplyAttr( nCol, nRow, pTabs[i], 271*cdf0e10cSrcweir SfxUInt32Item( ATTR_VALUE_FORMAT, pOldFormats[i] ) ); 272*cdf0e10cSrcweir else 273*cdf0e10cSrcweir { 274*cdf0e10cSrcweir ScPatternAttr aPattern( *pDoc->GetPattern( nCol, nRow, pTabs[i] ) ); 275*cdf0e10cSrcweir aPattern.GetItemSet().ClearItem( ATTR_VALUE_FORMAT ); 276*cdf0e10cSrcweir pDoc->SetPattern( nCol, nRow, pTabs[i], aPattern, sal_True ); 277*cdf0e10cSrcweir } 278*cdf0e10cSrcweir } 279*cdf0e10cSrcweir pDocShell->PostPaintCell( nCol, nRow, pTabs[i] ); 280*cdf0e10cSrcweir } 281*cdf0e10cSrcweir 282*cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack(); 283*cdf0e10cSrcweir if ( pChangeTrack && nEndChangeAction >= sal::static_int_cast<sal_uLong>(nCount) ) 284*cdf0e10cSrcweir pChangeTrack->Undo( nEndChangeAction - nCount + 1, nEndChangeAction ); 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir DoChange(); 287*cdf0e10cSrcweir EndUndo(); 288*cdf0e10cSrcweir 289*cdf0e10cSrcweir // #i97876# Spreadsheet data changes are not notified 290*cdf0e10cSrcweir ScModelObj* pModelObj = ScModelObj::getImplementation( pDocShell->GetModel() ); 291*cdf0e10cSrcweir if ( pModelObj && pModelObj->HasChangesListeners() ) 292*cdf0e10cSrcweir { 293*cdf0e10cSrcweir ScRangeList aChangeRanges; 294*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nCount; ++i ) 295*cdf0e10cSrcweir { 296*cdf0e10cSrcweir aChangeRanges.Append( ScRange( nCol, nRow, pTabs[i] ) ); 297*cdf0e10cSrcweir } 298*cdf0e10cSrcweir pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges ); 299*cdf0e10cSrcweir } 300*cdf0e10cSrcweir } 301*cdf0e10cSrcweir 302*cdf0e10cSrcweir void __EXPORT ScUndoEnterData::Redo() 303*cdf0e10cSrcweir { 304*cdf0e10cSrcweir BeginRedo(); 305*cdf0e10cSrcweir 306*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 307*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++) 308*cdf0e10cSrcweir { 309*cdf0e10cSrcweir if (pNewEditData) 310*cdf0e10cSrcweir pDoc->PutCell( nCol, nRow, pTabs[i], new ScEditCell( pNewEditData, 311*cdf0e10cSrcweir pDoc, NULL ) ); 312*cdf0e10cSrcweir else 313*cdf0e10cSrcweir pDoc->SetString( nCol, nRow, pTabs[i], aNewString ); 314*cdf0e10cSrcweir pDocShell->PostPaintCell( nCol, nRow, pTabs[i] ); 315*cdf0e10cSrcweir } 316*cdf0e10cSrcweir 317*cdf0e10cSrcweir SetChangeTrack(); 318*cdf0e10cSrcweir 319*cdf0e10cSrcweir DoChange(); 320*cdf0e10cSrcweir EndRedo(); 321*cdf0e10cSrcweir 322*cdf0e10cSrcweir // #i97876# Spreadsheet data changes are not notified 323*cdf0e10cSrcweir ScModelObj* pModelObj = ScModelObj::getImplementation( pDocShell->GetModel() ); 324*cdf0e10cSrcweir if ( pModelObj && pModelObj->HasChangesListeners() ) 325*cdf0e10cSrcweir { 326*cdf0e10cSrcweir ScRangeList aChangeRanges; 327*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nCount; ++i ) 328*cdf0e10cSrcweir { 329*cdf0e10cSrcweir aChangeRanges.Append( ScRange( nCol, nRow, pTabs[i] ) ); 330*cdf0e10cSrcweir } 331*cdf0e10cSrcweir pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges ); 332*cdf0e10cSrcweir } 333*cdf0e10cSrcweir } 334*cdf0e10cSrcweir 335*cdf0e10cSrcweir void __EXPORT ScUndoEnterData::Repeat(SfxRepeatTarget& rTarget) 336*cdf0e10cSrcweir { 337*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir String aTemp = aNewString; 340*cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->EnterDataAtCursor( aTemp ); 341*cdf0e10cSrcweir } 342*cdf0e10cSrcweir } 343*cdf0e10cSrcweir 344*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoEnterData::CanRepeat(SfxRepeatTarget& rTarget) const 345*cdf0e10cSrcweir { 346*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 347*cdf0e10cSrcweir } 348*cdf0e10cSrcweir 349*cdf0e10cSrcweir 350*cdf0e10cSrcweir // ----------------------------------------------------------------------- 351*cdf0e10cSrcweir // 352*cdf0e10cSrcweir // Wert aendern 353*cdf0e10cSrcweir // 354*cdf0e10cSrcweir 355*cdf0e10cSrcweir ScUndoEnterValue::ScUndoEnterValue( ScDocShell* pNewDocShell, const ScAddress& rNewPos, 356*cdf0e10cSrcweir ScBaseCell* pUndoCell, double nVal, sal_Bool bHeight ) : 357*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 358*cdf0e10cSrcweir aPos ( rNewPos ), 359*cdf0e10cSrcweir pOldCell ( pUndoCell ), 360*cdf0e10cSrcweir nValue ( nVal ), 361*cdf0e10cSrcweir bNeedHeight ( bHeight ) 362*cdf0e10cSrcweir { 363*cdf0e10cSrcweir SetChangeTrack(); 364*cdf0e10cSrcweir } 365*cdf0e10cSrcweir 366*cdf0e10cSrcweir __EXPORT ScUndoEnterValue::~ScUndoEnterValue() 367*cdf0e10cSrcweir { 368*cdf0e10cSrcweir if (pOldCell) 369*cdf0e10cSrcweir pOldCell->Delete(); 370*cdf0e10cSrcweir } 371*cdf0e10cSrcweir 372*cdf0e10cSrcweir String __EXPORT ScUndoEnterValue::GetComment() const 373*cdf0e10cSrcweir { 374*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_ENTERDATA ); // "Eingabe" 375*cdf0e10cSrcweir } 376*cdf0e10cSrcweir 377*cdf0e10cSrcweir void ScUndoEnterValue::SetChangeTrack() 378*cdf0e10cSrcweir { 379*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 380*cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack(); 381*cdf0e10cSrcweir if ( pChangeTrack ) 382*cdf0e10cSrcweir { 383*cdf0e10cSrcweir nEndChangeAction = pChangeTrack->GetActionMax() + 1; 384*cdf0e10cSrcweir pChangeTrack->AppendContent( aPos, pOldCell ); 385*cdf0e10cSrcweir if ( nEndChangeAction > pChangeTrack->GetActionMax() ) 386*cdf0e10cSrcweir nEndChangeAction = 0; // nichts appended 387*cdf0e10cSrcweir } 388*cdf0e10cSrcweir else 389*cdf0e10cSrcweir nEndChangeAction = 0; 390*cdf0e10cSrcweir } 391*cdf0e10cSrcweir 392*cdf0e10cSrcweir void __EXPORT ScUndoEnterValue::Undo() 393*cdf0e10cSrcweir { 394*cdf0e10cSrcweir BeginUndo(); 395*cdf0e10cSrcweir 396*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 397*cdf0e10cSrcweir ScBaseCell* pNewCell = pOldCell ? pOldCell->CloneWithoutNote( *pDoc, SC_CLONECELL_STARTLISTENING ) : 0; 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir pDoc->PutCell( aPos, pNewCell ); 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir pDocShell->PostPaintCell( aPos ); 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack(); 404*cdf0e10cSrcweir if ( pChangeTrack ) 405*cdf0e10cSrcweir pChangeTrack->Undo( nEndChangeAction, nEndChangeAction ); 406*cdf0e10cSrcweir 407*cdf0e10cSrcweir EndUndo(); 408*cdf0e10cSrcweir } 409*cdf0e10cSrcweir 410*cdf0e10cSrcweir void __EXPORT ScUndoEnterValue::Redo() 411*cdf0e10cSrcweir { 412*cdf0e10cSrcweir BeginRedo(); 413*cdf0e10cSrcweir 414*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 415*cdf0e10cSrcweir pDoc->SetValue( aPos.Col(), aPos.Row(), aPos.Tab(), nValue ); 416*cdf0e10cSrcweir pDocShell->PostPaintCell( aPos ); 417*cdf0e10cSrcweir 418*cdf0e10cSrcweir SetChangeTrack(); 419*cdf0e10cSrcweir 420*cdf0e10cSrcweir EndRedo(); 421*cdf0e10cSrcweir } 422*cdf0e10cSrcweir 423*cdf0e10cSrcweir void __EXPORT ScUndoEnterValue::Repeat(SfxRepeatTarget& /* rTarget */) 424*cdf0e10cSrcweir { 425*cdf0e10cSrcweir // gippsnich 426*cdf0e10cSrcweir } 427*cdf0e10cSrcweir 428*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoEnterValue::CanRepeat(SfxRepeatTarget& /* rTarget */) const 429*cdf0e10cSrcweir { 430*cdf0e10cSrcweir return sal_False; 431*cdf0e10cSrcweir } 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir 434*cdf0e10cSrcweir // ----------------------------------------------------------------------- 435*cdf0e10cSrcweir // 436*cdf0e10cSrcweir // Beliebige Zelle eingeben 437*cdf0e10cSrcweir // 438*cdf0e10cSrcweir 439*cdf0e10cSrcweir ScUndoPutCell::ScUndoPutCell( ScDocShell* pNewDocShell, const ScAddress& rNewPos, 440*cdf0e10cSrcweir ScBaseCell* pUndoCell, ScBaseCell* pRedoCell, sal_Bool bHeight ) : 441*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 442*cdf0e10cSrcweir aPos ( rNewPos ), 443*cdf0e10cSrcweir pOldCell ( pUndoCell ), 444*cdf0e10cSrcweir pEnteredCell( pRedoCell ), 445*cdf0e10cSrcweir bNeedHeight ( bHeight ) 446*cdf0e10cSrcweir { 447*cdf0e10cSrcweir SetChangeTrack(); 448*cdf0e10cSrcweir } 449*cdf0e10cSrcweir 450*cdf0e10cSrcweir __EXPORT ScUndoPutCell::~ScUndoPutCell() 451*cdf0e10cSrcweir { 452*cdf0e10cSrcweir if (pOldCell) 453*cdf0e10cSrcweir pOldCell->Delete(); 454*cdf0e10cSrcweir if (pEnteredCell) 455*cdf0e10cSrcweir pEnteredCell->Delete(); 456*cdf0e10cSrcweir } 457*cdf0e10cSrcweir 458*cdf0e10cSrcweir String __EXPORT ScUndoPutCell::GetComment() const 459*cdf0e10cSrcweir { 460*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_ENTERDATA ); // "Eingabe" 461*cdf0e10cSrcweir } 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir void ScUndoPutCell::SetChangeTrack() 464*cdf0e10cSrcweir { 465*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 466*cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack(); 467*cdf0e10cSrcweir if ( pChangeTrack ) 468*cdf0e10cSrcweir { 469*cdf0e10cSrcweir nEndChangeAction = pChangeTrack->GetActionMax() + 1; 470*cdf0e10cSrcweir pChangeTrack->AppendContent( aPos, pOldCell ); 471*cdf0e10cSrcweir if ( nEndChangeAction > pChangeTrack->GetActionMax() ) 472*cdf0e10cSrcweir nEndChangeAction = 0; // nichts appended 473*cdf0e10cSrcweir } 474*cdf0e10cSrcweir else 475*cdf0e10cSrcweir nEndChangeAction = 0; 476*cdf0e10cSrcweir } 477*cdf0e10cSrcweir 478*cdf0e10cSrcweir void __EXPORT ScUndoPutCell::Undo() 479*cdf0e10cSrcweir { 480*cdf0e10cSrcweir BeginUndo(); 481*cdf0e10cSrcweir 482*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 483*cdf0e10cSrcweir ScBaseCell* pNewCell = pOldCell ? pOldCell->CloneWithoutNote( *pDoc, aPos, SC_CLONECELL_STARTLISTENING ) : 0; 484*cdf0e10cSrcweir 485*cdf0e10cSrcweir pDoc->PutCell( aPos.Col(), aPos.Row(), aPos.Tab(), pNewCell ); 486*cdf0e10cSrcweir 487*cdf0e10cSrcweir pDocShell->PostPaintCell( aPos ); 488*cdf0e10cSrcweir 489*cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack(); 490*cdf0e10cSrcweir if ( pChangeTrack ) 491*cdf0e10cSrcweir pChangeTrack->Undo( nEndChangeAction, nEndChangeAction ); 492*cdf0e10cSrcweir 493*cdf0e10cSrcweir EndUndo(); 494*cdf0e10cSrcweir } 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir void __EXPORT ScUndoPutCell::Redo() 497*cdf0e10cSrcweir { 498*cdf0e10cSrcweir BeginRedo(); 499*cdf0e10cSrcweir 500*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 501*cdf0e10cSrcweir ScBaseCell* pNewCell = pEnteredCell ? pEnteredCell->CloneWithoutNote( *pDoc, aPos, SC_CLONECELL_STARTLISTENING ) : 0; 502*cdf0e10cSrcweir 503*cdf0e10cSrcweir pDoc->PutCell( aPos.Col(), aPos.Row(), aPos.Tab(), pNewCell ); 504*cdf0e10cSrcweir 505*cdf0e10cSrcweir pDocShell->PostPaintCell( aPos ); 506*cdf0e10cSrcweir 507*cdf0e10cSrcweir SetChangeTrack(); 508*cdf0e10cSrcweir 509*cdf0e10cSrcweir EndRedo(); 510*cdf0e10cSrcweir } 511*cdf0e10cSrcweir 512*cdf0e10cSrcweir void __EXPORT ScUndoPutCell::Repeat(SfxRepeatTarget& /* rTarget */) 513*cdf0e10cSrcweir { 514*cdf0e10cSrcweir // gippsnich 515*cdf0e10cSrcweir } 516*cdf0e10cSrcweir 517*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoPutCell::CanRepeat(SfxRepeatTarget& /* rTarget */) const 518*cdf0e10cSrcweir { 519*cdf0e10cSrcweir return sal_False; 520*cdf0e10cSrcweir } 521*cdf0e10cSrcweir 522*cdf0e10cSrcweir 523*cdf0e10cSrcweir // ----------------------------------------------------------------------- 524*cdf0e10cSrcweir // 525*cdf0e10cSrcweir // Seitenumbrueche 526*cdf0e10cSrcweir // 527*cdf0e10cSrcweir 528*cdf0e10cSrcweir ScUndoPageBreak::ScUndoPageBreak( ScDocShell* pNewDocShell, 529*cdf0e10cSrcweir SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab, 530*cdf0e10cSrcweir sal_Bool bNewColumn, sal_Bool bNewInsert ) : 531*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 532*cdf0e10cSrcweir nCol( nNewCol ), 533*cdf0e10cSrcweir nRow( nNewRow ), 534*cdf0e10cSrcweir nTab( nNewTab ), 535*cdf0e10cSrcweir bColumn( bNewColumn ), 536*cdf0e10cSrcweir bInsert( bNewInsert ) 537*cdf0e10cSrcweir { 538*cdf0e10cSrcweir } 539*cdf0e10cSrcweir 540*cdf0e10cSrcweir __EXPORT ScUndoPageBreak::~ScUndoPageBreak() 541*cdf0e10cSrcweir { 542*cdf0e10cSrcweir } 543*cdf0e10cSrcweir 544*cdf0e10cSrcweir String __EXPORT ScUndoPageBreak::GetComment() const 545*cdf0e10cSrcweir { 546*cdf0e10cSrcweir //"Spaltenumbruch" | "Zeilenumbruch" "einfuegen" | "loeschen" 547*cdf0e10cSrcweir return String ( bColumn ? 548*cdf0e10cSrcweir ( bInsert ? 549*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_INSCOLBREAK ) : 550*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_DELCOLBREAK ) 551*cdf0e10cSrcweir ) : 552*cdf0e10cSrcweir ( bInsert ? 553*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_INSROWBREAK ) : 554*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_DELROWBREAK ) 555*cdf0e10cSrcweir ) ); 556*cdf0e10cSrcweir } 557*cdf0e10cSrcweir 558*cdf0e10cSrcweir void ScUndoPageBreak::DoChange( sal_Bool bInsertP ) const 559*cdf0e10cSrcweir { 560*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 561*cdf0e10cSrcweir 562*cdf0e10cSrcweir if (pViewShell) 563*cdf0e10cSrcweir { 564*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 565*cdf0e10cSrcweir pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, sal_False, sal_False ); 566*cdf0e10cSrcweir 567*cdf0e10cSrcweir if (bInsertP) 568*cdf0e10cSrcweir pViewShell->InsertPageBreak(bColumn, sal_False); 569*cdf0e10cSrcweir else 570*cdf0e10cSrcweir pViewShell->DeletePageBreak(bColumn, sal_False); 571*cdf0e10cSrcweir 572*cdf0e10cSrcweir pDocShell->GetDocument()->InvalidatePageBreaks(nTab); 573*cdf0e10cSrcweir } 574*cdf0e10cSrcweir } 575*cdf0e10cSrcweir 576*cdf0e10cSrcweir void __EXPORT ScUndoPageBreak::Undo() 577*cdf0e10cSrcweir { 578*cdf0e10cSrcweir BeginUndo(); 579*cdf0e10cSrcweir DoChange(!bInsert); 580*cdf0e10cSrcweir EndUndo(); 581*cdf0e10cSrcweir } 582*cdf0e10cSrcweir 583*cdf0e10cSrcweir void __EXPORT ScUndoPageBreak::Redo() 584*cdf0e10cSrcweir { 585*cdf0e10cSrcweir BeginRedo(); 586*cdf0e10cSrcweir DoChange(bInsert); 587*cdf0e10cSrcweir EndRedo(); 588*cdf0e10cSrcweir } 589*cdf0e10cSrcweir 590*cdf0e10cSrcweir void __EXPORT ScUndoPageBreak::Repeat(SfxRepeatTarget& rTarget) 591*cdf0e10cSrcweir { 592*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 593*cdf0e10cSrcweir { 594*cdf0e10cSrcweir ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell(); 595*cdf0e10cSrcweir 596*cdf0e10cSrcweir if (bInsert) 597*cdf0e10cSrcweir rViewShell.InsertPageBreak(bColumn, sal_True); 598*cdf0e10cSrcweir else 599*cdf0e10cSrcweir rViewShell.DeletePageBreak(bColumn, sal_True); 600*cdf0e10cSrcweir } 601*cdf0e10cSrcweir } 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoPageBreak::CanRepeat(SfxRepeatTarget& rTarget) const 604*cdf0e10cSrcweir { 605*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 606*cdf0e10cSrcweir } 607*cdf0e10cSrcweir 608*cdf0e10cSrcweir // ----------------------------------------------------------------------- 609*cdf0e10cSrcweir // 610*cdf0e10cSrcweir // Druck-Skalierung 611*cdf0e10cSrcweir // 612*cdf0e10cSrcweir 613*cdf0e10cSrcweir ScUndoPrintZoom::ScUndoPrintZoom( ScDocShell* pNewDocShell, 614*cdf0e10cSrcweir SCTAB nT, sal_uInt16 nOS, sal_uInt16 nOP, sal_uInt16 nNS, sal_uInt16 nNP ) : 615*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 616*cdf0e10cSrcweir nTab( nT ), 617*cdf0e10cSrcweir nOldScale( nOS ), 618*cdf0e10cSrcweir nOldPages( nOP ), 619*cdf0e10cSrcweir nNewScale( nNS ), 620*cdf0e10cSrcweir nNewPages( nNP ) 621*cdf0e10cSrcweir { 622*cdf0e10cSrcweir } 623*cdf0e10cSrcweir 624*cdf0e10cSrcweir __EXPORT ScUndoPrintZoom::~ScUndoPrintZoom() 625*cdf0e10cSrcweir { 626*cdf0e10cSrcweir } 627*cdf0e10cSrcweir 628*cdf0e10cSrcweir String __EXPORT ScUndoPrintZoom::GetComment() const 629*cdf0e10cSrcweir { 630*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_PRINTSCALE ); 631*cdf0e10cSrcweir } 632*cdf0e10cSrcweir 633*cdf0e10cSrcweir void ScUndoPrintZoom::DoChange( sal_Bool bUndo ) 634*cdf0e10cSrcweir { 635*cdf0e10cSrcweir sal_uInt16 nScale = bUndo ? nOldScale : nNewScale; 636*cdf0e10cSrcweir sal_uInt16 nPages = bUndo ? nOldPages : nNewPages; 637*cdf0e10cSrcweir 638*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 639*cdf0e10cSrcweir String aStyleName = pDoc->GetPageStyle( nTab ); 640*cdf0e10cSrcweir ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); 641*cdf0e10cSrcweir SfxStyleSheetBase* pStyleSheet = pStylePool->Find( aStyleName, SFX_STYLE_FAMILY_PAGE ); 642*cdf0e10cSrcweir DBG_ASSERT( pStyleSheet, "PageStyle not found" ); 643*cdf0e10cSrcweir if ( pStyleSheet ) 644*cdf0e10cSrcweir { 645*cdf0e10cSrcweir SfxItemSet& rSet = pStyleSheet->GetItemSet(); 646*cdf0e10cSrcweir rSet.Put( SfxUInt16Item( ATTR_PAGE_SCALE, nScale ) ); 647*cdf0e10cSrcweir rSet.Put( SfxUInt16Item( ATTR_PAGE_SCALETOPAGES, nPages ) ); 648*cdf0e10cSrcweir 649*cdf0e10cSrcweir ScPrintFunc aPrintFunc( pDocShell, pDocShell->GetPrinter(), nTab ); 650*cdf0e10cSrcweir aPrintFunc.UpdatePages(); 651*cdf0e10cSrcweir } 652*cdf0e10cSrcweir } 653*cdf0e10cSrcweir 654*cdf0e10cSrcweir void __EXPORT ScUndoPrintZoom::Undo() 655*cdf0e10cSrcweir { 656*cdf0e10cSrcweir BeginUndo(); 657*cdf0e10cSrcweir DoChange(sal_True); 658*cdf0e10cSrcweir EndUndo(); 659*cdf0e10cSrcweir } 660*cdf0e10cSrcweir 661*cdf0e10cSrcweir void __EXPORT ScUndoPrintZoom::Redo() 662*cdf0e10cSrcweir { 663*cdf0e10cSrcweir BeginRedo(); 664*cdf0e10cSrcweir DoChange(sal_False); 665*cdf0e10cSrcweir EndRedo(); 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir 668*cdf0e10cSrcweir void __EXPORT ScUndoPrintZoom::Repeat(SfxRepeatTarget& rTarget) 669*cdf0e10cSrcweir { 670*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 671*cdf0e10cSrcweir { 672*cdf0e10cSrcweir ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell(); 673*cdf0e10cSrcweir ScViewData* pViewData = rViewShell.GetViewData(); 674*cdf0e10cSrcweir pViewData->GetDocShell()->SetPrintZoom( pViewData->GetTabNo(), nNewScale, nNewPages ); 675*cdf0e10cSrcweir } 676*cdf0e10cSrcweir } 677*cdf0e10cSrcweir 678*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoPrintZoom::CanRepeat(SfxRepeatTarget& rTarget) const 679*cdf0e10cSrcweir { 680*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 681*cdf0e10cSrcweir } 682*cdf0e10cSrcweir 683*cdf0e10cSrcweir 684*cdf0e10cSrcweir // ----------------------------------------------------------------------- 685*cdf0e10cSrcweir // 686*cdf0e10cSrcweir // Thesaurus 687*cdf0e10cSrcweir // 688*cdf0e10cSrcweir 689*cdf0e10cSrcweir ScUndoThesaurus::ScUndoThesaurus( ScDocShell* pNewDocShell, 690*cdf0e10cSrcweir SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab, 691*cdf0e10cSrcweir const String& rNewUndoStr, const EditTextObject* pUndoTObj, 692*cdf0e10cSrcweir const String& rNewRedoStr, const EditTextObject* pRedoTObj) : 693*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 694*cdf0e10cSrcweir nCol( nNewCol ), 695*cdf0e10cSrcweir nRow( nNewRow ), 696*cdf0e10cSrcweir nTab( nNewTab ), 697*cdf0e10cSrcweir aUndoStr( rNewUndoStr ), 698*cdf0e10cSrcweir aRedoStr( rNewRedoStr ) 699*cdf0e10cSrcweir { 700*cdf0e10cSrcweir pUndoTObject = (pUndoTObj) ? pUndoTObj->Clone() : NULL; 701*cdf0e10cSrcweir pRedoTObject = (pRedoTObj) ? pRedoTObj->Clone() : NULL; 702*cdf0e10cSrcweir 703*cdf0e10cSrcweir ScBaseCell* pOldCell; 704*cdf0e10cSrcweir if ( pUndoTObject ) 705*cdf0e10cSrcweir pOldCell = new ScEditCell( pUndoTObject, pDocShell->GetDocument(), NULL ); 706*cdf0e10cSrcweir else 707*cdf0e10cSrcweir pOldCell = new ScStringCell( aUndoStr ); 708*cdf0e10cSrcweir SetChangeTrack( pOldCell ); 709*cdf0e10cSrcweir pOldCell->Delete(); 710*cdf0e10cSrcweir } 711*cdf0e10cSrcweir 712*cdf0e10cSrcweir __EXPORT ScUndoThesaurus::~ScUndoThesaurus() 713*cdf0e10cSrcweir { 714*cdf0e10cSrcweir delete pUndoTObject; 715*cdf0e10cSrcweir delete pRedoTObject; 716*cdf0e10cSrcweir } 717*cdf0e10cSrcweir 718*cdf0e10cSrcweir String __EXPORT ScUndoThesaurus::GetComment() const 719*cdf0e10cSrcweir { 720*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_THESAURUS ); // "Thesaurus" 721*cdf0e10cSrcweir } 722*cdf0e10cSrcweir 723*cdf0e10cSrcweir void ScUndoThesaurus::SetChangeTrack( ScBaseCell* pOldCell ) 724*cdf0e10cSrcweir { 725*cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack(); 726*cdf0e10cSrcweir if ( pChangeTrack ) 727*cdf0e10cSrcweir { 728*cdf0e10cSrcweir nEndChangeAction = pChangeTrack->GetActionMax() + 1; 729*cdf0e10cSrcweir pChangeTrack->AppendContent( ScAddress( nCol, nRow, nTab ), pOldCell ); 730*cdf0e10cSrcweir if ( nEndChangeAction > pChangeTrack->GetActionMax() ) 731*cdf0e10cSrcweir nEndChangeAction = 0; // nichts appended 732*cdf0e10cSrcweir } 733*cdf0e10cSrcweir else 734*cdf0e10cSrcweir nEndChangeAction = 0; 735*cdf0e10cSrcweir } 736*cdf0e10cSrcweir 737*cdf0e10cSrcweir void __EXPORT ScUndoThesaurus::DoChange( sal_Bool bUndo, const String& rStr, 738*cdf0e10cSrcweir const EditTextObject* pTObj ) 739*cdf0e10cSrcweir { 740*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 741*cdf0e10cSrcweir 742*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 743*cdf0e10cSrcweir if (pViewShell) 744*cdf0e10cSrcweir { 745*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 746*cdf0e10cSrcweir pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, sal_False, sal_False ); 747*cdf0e10cSrcweir } 748*cdf0e10cSrcweir 749*cdf0e10cSrcweir if (pTObj) 750*cdf0e10cSrcweir { 751*cdf0e10cSrcweir ScBaseCell* pCell; 752*cdf0e10cSrcweir pDoc->GetCell( nCol, nRow, nTab, pCell ); 753*cdf0e10cSrcweir if (pCell) 754*cdf0e10cSrcweir { 755*cdf0e10cSrcweir if (pCell->GetCellType() == CELLTYPE_EDIT ) 756*cdf0e10cSrcweir { 757*cdf0e10cSrcweir ScEditCell* pNewCell = new ScEditCell( pTObj, pDoc, NULL ); 758*cdf0e10cSrcweir pDoc->PutCell( nCol, nRow, nTab, pNewCell ); 759*cdf0e10cSrcweir if ( !bUndo ) 760*cdf0e10cSrcweir SetChangeTrack( pCell ); 761*cdf0e10cSrcweir } 762*cdf0e10cSrcweir else 763*cdf0e10cSrcweir { 764*cdf0e10cSrcweir DBG_ERROR("Nicht CELLTYPE_EDIT bei Un/RedoThesaurus"); 765*cdf0e10cSrcweir } 766*cdf0e10cSrcweir } 767*cdf0e10cSrcweir } 768*cdf0e10cSrcweir else 769*cdf0e10cSrcweir { 770*cdf0e10cSrcweir ScBaseCell* pCell = NULL; 771*cdf0e10cSrcweir if ( !bUndo ) 772*cdf0e10cSrcweir pDoc->GetCell( nCol, nRow, nTab, pCell ); 773*cdf0e10cSrcweir pDoc->SetString( nCol, nRow, nTab, rStr ); 774*cdf0e10cSrcweir if ( !bUndo ) 775*cdf0e10cSrcweir SetChangeTrack( pCell ); 776*cdf0e10cSrcweir } 777*cdf0e10cSrcweir 778*cdf0e10cSrcweir pDocShell->PostPaintCell( nCol, nRow, nTab ); 779*cdf0e10cSrcweir } 780*cdf0e10cSrcweir 781*cdf0e10cSrcweir void __EXPORT ScUndoThesaurus::Undo() 782*cdf0e10cSrcweir { 783*cdf0e10cSrcweir BeginUndo(); 784*cdf0e10cSrcweir DoChange( sal_True, aUndoStr, pUndoTObject ); 785*cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack(); 786*cdf0e10cSrcweir if ( pChangeTrack ) 787*cdf0e10cSrcweir pChangeTrack->Undo( nEndChangeAction, nEndChangeAction ); 788*cdf0e10cSrcweir EndUndo(); 789*cdf0e10cSrcweir } 790*cdf0e10cSrcweir 791*cdf0e10cSrcweir void __EXPORT ScUndoThesaurus::Redo() 792*cdf0e10cSrcweir { 793*cdf0e10cSrcweir BeginRedo(); 794*cdf0e10cSrcweir DoChange( sal_False, aRedoStr, pRedoTObject ); 795*cdf0e10cSrcweir EndRedo(); 796*cdf0e10cSrcweir } 797*cdf0e10cSrcweir 798*cdf0e10cSrcweir void __EXPORT ScUndoThesaurus::Repeat(SfxRepeatTarget& rTarget) 799*cdf0e10cSrcweir { 800*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 801*cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->DoThesaurus( sal_True ); 802*cdf0e10cSrcweir } 803*cdf0e10cSrcweir 804*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoThesaurus::CanRepeat(SfxRepeatTarget& rTarget) const 805*cdf0e10cSrcweir { 806*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 807*cdf0e10cSrcweir } 808*cdf0e10cSrcweir 809*cdf0e10cSrcweir 810*cdf0e10cSrcweir // ============================================================================ 811*cdf0e10cSrcweir 812*cdf0e10cSrcweir ScUndoReplaceNote::ScUndoReplaceNote( ScDocShell& rDocShell, const ScAddress& rPos, 813*cdf0e10cSrcweir const ScNoteData& rNoteData, bool bInsert, SdrUndoAction* pDrawUndo ) : 814*cdf0e10cSrcweir ScSimpleUndo( &rDocShell ), 815*cdf0e10cSrcweir maPos( rPos ), 816*cdf0e10cSrcweir mpDrawUndo( pDrawUndo ) 817*cdf0e10cSrcweir { 818*cdf0e10cSrcweir DBG_ASSERT( rNoteData.mpCaption, "ScUndoReplaceNote::ScUndoReplaceNote - missing note caption" ); 819*cdf0e10cSrcweir (bInsert ? maNewData : maOldData) = rNoteData; 820*cdf0e10cSrcweir } 821*cdf0e10cSrcweir 822*cdf0e10cSrcweir ScUndoReplaceNote::ScUndoReplaceNote( ScDocShell& rDocShell, const ScAddress& rPos, 823*cdf0e10cSrcweir const ScNoteData& rOldData, const ScNoteData& rNewData, SdrUndoAction* pDrawUndo ) : 824*cdf0e10cSrcweir ScSimpleUndo( &rDocShell ), 825*cdf0e10cSrcweir maPos( rPos ), 826*cdf0e10cSrcweir maOldData( rOldData ), 827*cdf0e10cSrcweir maNewData( rNewData ), 828*cdf0e10cSrcweir mpDrawUndo( pDrawUndo ) 829*cdf0e10cSrcweir { 830*cdf0e10cSrcweir DBG_ASSERT( maOldData.mpCaption || maNewData.mpCaption, "ScUndoReplaceNote::ScUndoReplaceNote - missing note captions" ); 831*cdf0e10cSrcweir DBG_ASSERT( !maOldData.mxInitData.get() && !maNewData.mxInitData.get(), "ScUndoReplaceNote::ScUndoReplaceNote - unexpected unitialized note" ); 832*cdf0e10cSrcweir } 833*cdf0e10cSrcweir 834*cdf0e10cSrcweir ScUndoReplaceNote::~ScUndoReplaceNote() 835*cdf0e10cSrcweir { 836*cdf0e10cSrcweir DeleteSdrUndoAction( mpDrawUndo ); 837*cdf0e10cSrcweir } 838*cdf0e10cSrcweir 839*cdf0e10cSrcweir void ScUndoReplaceNote::Undo() 840*cdf0e10cSrcweir { 841*cdf0e10cSrcweir BeginUndo(); 842*cdf0e10cSrcweir DoSdrUndoAction( mpDrawUndo, pDocShell->GetDocument() ); 843*cdf0e10cSrcweir /* Undo insert -> remove new note. 844*cdf0e10cSrcweir Undo remove -> insert old note. 845*cdf0e10cSrcweir Undo replace -> remove new note, insert old note. */ 846*cdf0e10cSrcweir DoRemoveNote( maNewData ); 847*cdf0e10cSrcweir DoInsertNote( maOldData ); 848*cdf0e10cSrcweir pDocShell->PostPaintCell( maPos ); 849*cdf0e10cSrcweir EndUndo(); 850*cdf0e10cSrcweir } 851*cdf0e10cSrcweir 852*cdf0e10cSrcweir void ScUndoReplaceNote::Redo() 853*cdf0e10cSrcweir { 854*cdf0e10cSrcweir BeginRedo(); 855*cdf0e10cSrcweir RedoSdrUndoAction( mpDrawUndo ); 856*cdf0e10cSrcweir /* Redo insert -> insert new note. 857*cdf0e10cSrcweir Redo remove -> remove old note. 858*cdf0e10cSrcweir Redo replace -> remove old note, insert new note. */ 859*cdf0e10cSrcweir DoRemoveNote( maOldData ); 860*cdf0e10cSrcweir DoInsertNote( maNewData ); 861*cdf0e10cSrcweir pDocShell->PostPaintCell( maPos ); 862*cdf0e10cSrcweir EndRedo(); 863*cdf0e10cSrcweir } 864*cdf0e10cSrcweir 865*cdf0e10cSrcweir void ScUndoReplaceNote::Repeat( SfxRepeatTarget& /*rTarget*/ ) 866*cdf0e10cSrcweir { 867*cdf0e10cSrcweir } 868*cdf0e10cSrcweir 869*cdf0e10cSrcweir sal_Bool ScUndoReplaceNote::CanRepeat( SfxRepeatTarget& /*rTarget*/ ) const 870*cdf0e10cSrcweir { 871*cdf0e10cSrcweir return sal_False; 872*cdf0e10cSrcweir } 873*cdf0e10cSrcweir 874*cdf0e10cSrcweir String ScUndoReplaceNote::GetComment() const 875*cdf0e10cSrcweir { 876*cdf0e10cSrcweir return ScGlobal::GetRscString( maNewData.mpCaption ? 877*cdf0e10cSrcweir (maOldData.mpCaption ? STR_UNDO_EDITNOTE : STR_UNDO_INSERTNOTE) : STR_UNDO_DELETENOTE ); 878*cdf0e10cSrcweir } 879*cdf0e10cSrcweir 880*cdf0e10cSrcweir void ScUndoReplaceNote::DoInsertNote( const ScNoteData& rNoteData ) 881*cdf0e10cSrcweir { 882*cdf0e10cSrcweir if( rNoteData.mpCaption ) 883*cdf0e10cSrcweir { 884*cdf0e10cSrcweir ScDocument& rDoc = *pDocShell->GetDocument(); 885*cdf0e10cSrcweir DBG_ASSERT( !rDoc.GetNote( maPos ), "ScUndoReplaceNote::DoInsertNote - unexpected cell note" ); 886*cdf0e10cSrcweir ScPostIt* pNote = new ScPostIt( rDoc, maPos, rNoteData, false ); 887*cdf0e10cSrcweir rDoc.TakeNote( maPos, pNote ); 888*cdf0e10cSrcweir } 889*cdf0e10cSrcweir } 890*cdf0e10cSrcweir 891*cdf0e10cSrcweir void ScUndoReplaceNote::DoRemoveNote( const ScNoteData& rNoteData ) 892*cdf0e10cSrcweir { 893*cdf0e10cSrcweir if( rNoteData.mpCaption ) 894*cdf0e10cSrcweir { 895*cdf0e10cSrcweir ScDocument& rDoc = *pDocShell->GetDocument(); 896*cdf0e10cSrcweir DBG_ASSERT( rDoc.GetNote( maPos ), "ScUndoReplaceNote::DoRemoveNote - missing cell note" ); 897*cdf0e10cSrcweir if( ScPostIt* pNote = rDoc.ReleaseNote( maPos ) ) 898*cdf0e10cSrcweir { 899*cdf0e10cSrcweir /* Forget pointer to caption object to suppress removing the 900*cdf0e10cSrcweir caption object from the drawing layer while deleting pNote 901*cdf0e10cSrcweir (removing the caption is done by a drawing undo action). */ 902*cdf0e10cSrcweir pNote->ForgetCaption(); 903*cdf0e10cSrcweir delete pNote; 904*cdf0e10cSrcweir } 905*cdf0e10cSrcweir } 906*cdf0e10cSrcweir } 907*cdf0e10cSrcweir 908*cdf0e10cSrcweir // ============================================================================ 909*cdf0e10cSrcweir 910*cdf0e10cSrcweir ScUndoShowHideNote::ScUndoShowHideNote( ScDocShell& rDocShell, const ScAddress& rPos, bool bShow ) : 911*cdf0e10cSrcweir ScSimpleUndo( &rDocShell ), 912*cdf0e10cSrcweir maPos( rPos ), 913*cdf0e10cSrcweir mbShown( bShow ) 914*cdf0e10cSrcweir { 915*cdf0e10cSrcweir } 916*cdf0e10cSrcweir 917*cdf0e10cSrcweir ScUndoShowHideNote::~ScUndoShowHideNote() 918*cdf0e10cSrcweir { 919*cdf0e10cSrcweir } 920*cdf0e10cSrcweir 921*cdf0e10cSrcweir void ScUndoShowHideNote::Undo() 922*cdf0e10cSrcweir { 923*cdf0e10cSrcweir BeginUndo(); 924*cdf0e10cSrcweir if( ScPostIt* pNote = pDocShell->GetDocument()->GetNote( maPos ) ) 925*cdf0e10cSrcweir pNote->ShowCaption( maPos, !mbShown ); 926*cdf0e10cSrcweir EndUndo(); 927*cdf0e10cSrcweir } 928*cdf0e10cSrcweir 929*cdf0e10cSrcweir void ScUndoShowHideNote::Redo() 930*cdf0e10cSrcweir { 931*cdf0e10cSrcweir BeginRedo(); 932*cdf0e10cSrcweir if( ScPostIt* pNote = pDocShell->GetDocument()->GetNote( maPos ) ) 933*cdf0e10cSrcweir pNote->ShowCaption( maPos, mbShown ); 934*cdf0e10cSrcweir EndRedo(); 935*cdf0e10cSrcweir } 936*cdf0e10cSrcweir 937*cdf0e10cSrcweir void ScUndoShowHideNote::Repeat( SfxRepeatTarget& /*rTarget*/ ) 938*cdf0e10cSrcweir { 939*cdf0e10cSrcweir } 940*cdf0e10cSrcweir 941*cdf0e10cSrcweir sal_Bool ScUndoShowHideNote::CanRepeat( SfxRepeatTarget& /*rTarget*/ ) const 942*cdf0e10cSrcweir { 943*cdf0e10cSrcweir return sal_False; 944*cdf0e10cSrcweir } 945*cdf0e10cSrcweir 946*cdf0e10cSrcweir String ScUndoShowHideNote::GetComment() const 947*cdf0e10cSrcweir { 948*cdf0e10cSrcweir return ScGlobal::GetRscString( mbShown ? STR_UNDO_SHOWNOTE : STR_UNDO_HIDENOTE ); 949*cdf0e10cSrcweir } 950*cdf0e10cSrcweir 951*cdf0e10cSrcweir // ============================================================================ 952*cdf0e10cSrcweir 953*cdf0e10cSrcweir // ----------------------------------------------------------------------- 954*cdf0e10cSrcweir // 955*cdf0e10cSrcweir // Detektiv 956*cdf0e10cSrcweir // 957*cdf0e10cSrcweir 958*cdf0e10cSrcweir ScUndoDetective::ScUndoDetective( ScDocShell* pNewDocShell, 959*cdf0e10cSrcweir SdrUndoAction* pDraw, const ScDetOpData* pOperation, 960*cdf0e10cSrcweir ScDetOpList* pUndoList ) : 961*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 962*cdf0e10cSrcweir pOldList ( pUndoList ), 963*cdf0e10cSrcweir nAction ( 0 ), 964*cdf0e10cSrcweir pDrawUndo ( pDraw ) 965*cdf0e10cSrcweir { 966*cdf0e10cSrcweir bIsDelete = ( pOperation == NULL ); 967*cdf0e10cSrcweir if (!bIsDelete) 968*cdf0e10cSrcweir { 969*cdf0e10cSrcweir nAction = (sal_uInt16) pOperation->GetOperation(); 970*cdf0e10cSrcweir aPos = pOperation->GetPos(); 971*cdf0e10cSrcweir } 972*cdf0e10cSrcweir } 973*cdf0e10cSrcweir 974*cdf0e10cSrcweir __EXPORT ScUndoDetective::~ScUndoDetective() 975*cdf0e10cSrcweir { 976*cdf0e10cSrcweir DeleteSdrUndoAction( pDrawUndo ); 977*cdf0e10cSrcweir delete pOldList; 978*cdf0e10cSrcweir } 979*cdf0e10cSrcweir 980*cdf0e10cSrcweir String __EXPORT ScUndoDetective::GetComment() const 981*cdf0e10cSrcweir { 982*cdf0e10cSrcweir sal_uInt16 nId = STR_UNDO_DETDELALL; 983*cdf0e10cSrcweir if ( !bIsDelete ) 984*cdf0e10cSrcweir switch ( (ScDetOpType) nAction ) 985*cdf0e10cSrcweir { 986*cdf0e10cSrcweir case SCDETOP_ADDSUCC: nId = STR_UNDO_DETADDSUCC; break; 987*cdf0e10cSrcweir case SCDETOP_DELSUCC: nId = STR_UNDO_DETDELSUCC; break; 988*cdf0e10cSrcweir case SCDETOP_ADDPRED: nId = STR_UNDO_DETADDPRED; break; 989*cdf0e10cSrcweir case SCDETOP_DELPRED: nId = STR_UNDO_DETDELPRED; break; 990*cdf0e10cSrcweir case SCDETOP_ADDERROR: nId = STR_UNDO_DETADDERROR; break; 991*cdf0e10cSrcweir } 992*cdf0e10cSrcweir 993*cdf0e10cSrcweir return ScGlobal::GetRscString( nId ); 994*cdf0e10cSrcweir } 995*cdf0e10cSrcweir 996*cdf0e10cSrcweir 997*cdf0e10cSrcweir void __EXPORT ScUndoDetective::Undo() 998*cdf0e10cSrcweir { 999*cdf0e10cSrcweir BeginUndo(); 1000*cdf0e10cSrcweir 1001*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1002*cdf0e10cSrcweir DoSdrUndoAction(pDrawUndo, pDoc); 1003*cdf0e10cSrcweir 1004*cdf0e10cSrcweir if (bIsDelete) 1005*cdf0e10cSrcweir { 1006*cdf0e10cSrcweir if ( pOldList ) 1007*cdf0e10cSrcweir pDoc->SetDetOpList( new ScDetOpList(*pOldList) ); 1008*cdf0e10cSrcweir } 1009*cdf0e10cSrcweir else 1010*cdf0e10cSrcweir { 1011*cdf0e10cSrcweir // Eintrag aus der Liste loeschen 1012*cdf0e10cSrcweir 1013*cdf0e10cSrcweir ScDetOpList* pList = pDoc->GetDetOpList(); 1014*cdf0e10cSrcweir if (pList && pList->Count()) 1015*cdf0e10cSrcweir { 1016*cdf0e10cSrcweir sal_uInt16 nPos = pList->Count() - 1; 1017*cdf0e10cSrcweir ScDetOpData* pData = (*pList)[nPos]; 1018*cdf0e10cSrcweir if ( pData->GetOperation() == (ScDetOpType) nAction && pData->GetPos() == aPos ) 1019*cdf0e10cSrcweir pList->DeleteAndDestroy( nPos, 1 ); 1020*cdf0e10cSrcweir else 1021*cdf0e10cSrcweir { 1022*cdf0e10cSrcweir DBG_ERROR("Detektiv-Eintrag in der Liste nicht gefunden"); 1023*cdf0e10cSrcweir } 1024*cdf0e10cSrcweir } 1025*cdf0e10cSrcweir } 1026*cdf0e10cSrcweir 1027*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 1028*cdf0e10cSrcweir if (pViewShell) 1029*cdf0e10cSrcweir pViewShell->RecalcPPT(); //! use broadcast instead? 1030*cdf0e10cSrcweir 1031*cdf0e10cSrcweir EndUndo(); 1032*cdf0e10cSrcweir } 1033*cdf0e10cSrcweir 1034*cdf0e10cSrcweir void __EXPORT ScUndoDetective::Redo() 1035*cdf0e10cSrcweir { 1036*cdf0e10cSrcweir BeginRedo(); 1037*cdf0e10cSrcweir 1038*cdf0e10cSrcweir RedoSdrUndoAction(pDrawUndo); 1039*cdf0e10cSrcweir 1040*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1041*cdf0e10cSrcweir 1042*cdf0e10cSrcweir if (bIsDelete) 1043*cdf0e10cSrcweir pDoc->ClearDetectiveOperations(); 1044*cdf0e10cSrcweir else 1045*cdf0e10cSrcweir pDoc->AddDetectiveOperation( ScDetOpData( aPos, (ScDetOpType) nAction ) ); 1046*cdf0e10cSrcweir 1047*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 1048*cdf0e10cSrcweir if (pViewShell) 1049*cdf0e10cSrcweir pViewShell->RecalcPPT(); //! use broadcast instead? 1050*cdf0e10cSrcweir 1051*cdf0e10cSrcweir EndRedo(); 1052*cdf0e10cSrcweir } 1053*cdf0e10cSrcweir 1054*cdf0e10cSrcweir void __EXPORT ScUndoDetective::Repeat(SfxRepeatTarget& /* rTarget */) 1055*cdf0e10cSrcweir { 1056*cdf0e10cSrcweir // hammanich 1057*cdf0e10cSrcweir } 1058*cdf0e10cSrcweir 1059*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoDetective::CanRepeat(SfxRepeatTarget& /* rTarget */) const 1060*cdf0e10cSrcweir { 1061*cdf0e10cSrcweir return sal_False; 1062*cdf0e10cSrcweir } 1063*cdf0e10cSrcweir 1064*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1065*cdf0e10cSrcweir // 1066*cdf0e10cSrcweir // Benannte Bereiche 1067*cdf0e10cSrcweir // 1068*cdf0e10cSrcweir 1069*cdf0e10cSrcweir ScUndoRangeNames::ScUndoRangeNames( ScDocShell* pNewDocShell, 1070*cdf0e10cSrcweir ScRangeName* pOld, ScRangeName* pNew ) : 1071*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 1072*cdf0e10cSrcweir pOldRanges ( pOld ), 1073*cdf0e10cSrcweir pNewRanges ( pNew ) 1074*cdf0e10cSrcweir { 1075*cdf0e10cSrcweir } 1076*cdf0e10cSrcweir 1077*cdf0e10cSrcweir __EXPORT ScUndoRangeNames::~ScUndoRangeNames() 1078*cdf0e10cSrcweir { 1079*cdf0e10cSrcweir delete pOldRanges; 1080*cdf0e10cSrcweir delete pNewRanges; 1081*cdf0e10cSrcweir } 1082*cdf0e10cSrcweir 1083*cdf0e10cSrcweir String __EXPORT ScUndoRangeNames::GetComment() const 1084*cdf0e10cSrcweir { 1085*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_RANGENAMES ); 1086*cdf0e10cSrcweir } 1087*cdf0e10cSrcweir 1088*cdf0e10cSrcweir void ScUndoRangeNames::DoChange( sal_Bool bUndo ) 1089*cdf0e10cSrcweir { 1090*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1091*cdf0e10cSrcweir pDoc->CompileNameFormula( sal_True ); // CreateFormulaString 1092*cdf0e10cSrcweir 1093*cdf0e10cSrcweir if ( bUndo ) 1094*cdf0e10cSrcweir pDoc->SetRangeName( new ScRangeName( *pOldRanges ) ); 1095*cdf0e10cSrcweir else 1096*cdf0e10cSrcweir pDoc->SetRangeName( new ScRangeName( *pNewRanges ) ); 1097*cdf0e10cSrcweir 1098*cdf0e10cSrcweir pDoc->CompileNameFormula( sal_False ); // CompileFormulaString 1099*cdf0e10cSrcweir 1100*cdf0e10cSrcweir SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) ); 1101*cdf0e10cSrcweir } 1102*cdf0e10cSrcweir 1103*cdf0e10cSrcweir void __EXPORT ScUndoRangeNames::Undo() 1104*cdf0e10cSrcweir { 1105*cdf0e10cSrcweir BeginUndo(); 1106*cdf0e10cSrcweir DoChange( sal_True ); 1107*cdf0e10cSrcweir EndUndo(); 1108*cdf0e10cSrcweir } 1109*cdf0e10cSrcweir 1110*cdf0e10cSrcweir void __EXPORT ScUndoRangeNames::Redo() 1111*cdf0e10cSrcweir { 1112*cdf0e10cSrcweir BeginRedo(); 1113*cdf0e10cSrcweir DoChange( sal_False ); 1114*cdf0e10cSrcweir EndRedo(); 1115*cdf0e10cSrcweir } 1116*cdf0e10cSrcweir 1117*cdf0e10cSrcweir void __EXPORT ScUndoRangeNames::Repeat(SfxRepeatTarget& /* rTarget */) 1118*cdf0e10cSrcweir { 1119*cdf0e10cSrcweir // hammanich 1120*cdf0e10cSrcweir } 1121*cdf0e10cSrcweir 1122*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoRangeNames::CanRepeat(SfxRepeatTarget& /* rTarget */) const 1123*cdf0e10cSrcweir { 1124*cdf0e10cSrcweir return sal_False; 1125*cdf0e10cSrcweir } 1126*cdf0e10cSrcweir 1127*cdf0e10cSrcweir 1128*cdf0e10cSrcweir 1129*cdf0e10cSrcweir 1130