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 --------------------------------------------------------------- 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include <sfx2/app.hxx> 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir #include "undodat.hxx" 36*cdf0e10cSrcweir #include "undoutil.hxx" 37*cdf0e10cSrcweir #include "undoolk.hxx" 38*cdf0e10cSrcweir #include "document.hxx" 39*cdf0e10cSrcweir #include "docsh.hxx" 40*cdf0e10cSrcweir #include "tabvwsh.hxx" 41*cdf0e10cSrcweir #include "olinetab.hxx" 42*cdf0e10cSrcweir #include "dbcolect.hxx" 43*cdf0e10cSrcweir #include "rangenam.hxx" 44*cdf0e10cSrcweir #include "pivot.hxx" 45*cdf0e10cSrcweir #include "globstr.hrc" 46*cdf0e10cSrcweir #include "global.hxx" 47*cdf0e10cSrcweir #include "target.hxx" 48*cdf0e10cSrcweir #include "chartarr.hxx" 49*cdf0e10cSrcweir #include "dbdocfun.hxx" 50*cdf0e10cSrcweir #include "olinefun.hxx" 51*cdf0e10cSrcweir #include "dpobject.hxx" 52*cdf0e10cSrcweir #include "attrib.hxx" 53*cdf0e10cSrcweir #include "hints.hxx" 54*cdf0e10cSrcweir #include "sc.hrc" 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir // ----------------------------------------------------------------------- 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir TYPEINIT1(ScUndoDoOutline, ScSimpleUndo); 59*cdf0e10cSrcweir TYPEINIT1(ScUndoMakeOutline, ScSimpleUndo); 60*cdf0e10cSrcweir TYPEINIT1(ScUndoOutlineLevel, ScSimpleUndo); 61*cdf0e10cSrcweir TYPEINIT1(ScUndoOutlineBlock, ScSimpleUndo); 62*cdf0e10cSrcweir TYPEINIT1(ScUndoRemoveAllOutlines, ScSimpleUndo); 63*cdf0e10cSrcweir TYPEINIT1(ScUndoAutoOutline, ScSimpleUndo); 64*cdf0e10cSrcweir TYPEINIT1(ScUndoSubTotals, ScDBFuncUndo); 65*cdf0e10cSrcweir TYPEINIT1(ScUndoSort, ScDBFuncUndo); 66*cdf0e10cSrcweir TYPEINIT1(ScUndoQuery, ScDBFuncUndo); 67*cdf0e10cSrcweir TYPEINIT1(ScUndoAutoFilter, ScDBFuncUndo); 68*cdf0e10cSrcweir TYPEINIT1(ScUndoDBData, ScSimpleUndo); 69*cdf0e10cSrcweir TYPEINIT1(ScUndoImportData, ScSimpleUndo); 70*cdf0e10cSrcweir TYPEINIT1(ScUndoRepeatDB, ScSimpleUndo); 71*cdf0e10cSrcweir //UNUSED2008-05 TYPEINIT1(ScUndoPivot, ScSimpleUndo); 72*cdf0e10cSrcweir TYPEINIT1(ScUndoDataPilot, ScSimpleUndo); 73*cdf0e10cSrcweir TYPEINIT1(ScUndoConsolidate, ScSimpleUndo); 74*cdf0e10cSrcweir TYPEINIT1(ScUndoChartData, ScSimpleUndo); 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir // ----------------------------------------------------------------------- 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir // 80*cdf0e10cSrcweir // Outline-Gruppen ein- oder ausblenden 81*cdf0e10cSrcweir // 82*cdf0e10cSrcweir 83*cdf0e10cSrcweir ScUndoDoOutline::ScUndoDoOutline( ScDocShell* pNewDocShell, 84*cdf0e10cSrcweir SCCOLROW nNewStart, SCCOLROW nNewEnd, SCTAB nNewTab, 85*cdf0e10cSrcweir ScDocument* pNewUndoDoc, sal_Bool bNewColumns, 86*cdf0e10cSrcweir sal_uInt16 nNewLevel, sal_uInt16 nNewEntry, sal_Bool bNewShow ) : 87*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 88*cdf0e10cSrcweir nStart( nNewStart ), 89*cdf0e10cSrcweir nEnd( nNewEnd ), 90*cdf0e10cSrcweir nTab( nNewTab ), 91*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 92*cdf0e10cSrcweir bColumns( bNewColumns ), 93*cdf0e10cSrcweir nLevel( nNewLevel ), 94*cdf0e10cSrcweir nEntry( nNewEntry ), 95*cdf0e10cSrcweir bShow( bNewShow ) 96*cdf0e10cSrcweir { 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir __EXPORT ScUndoDoOutline::~ScUndoDoOutline() 100*cdf0e10cSrcweir { 101*cdf0e10cSrcweir delete pUndoDoc; 102*cdf0e10cSrcweir } 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir String __EXPORT ScUndoDoOutline::GetComment() const 105*cdf0e10cSrcweir { // Detail einblenden" "Detail ausblenden" 106*cdf0e10cSrcweir return bShow ? 107*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_DOOUTLINE ) : 108*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_REDOOUTLINE ); 109*cdf0e10cSrcweir } 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir void __EXPORT ScUndoDoOutline::Undo() 112*cdf0e10cSrcweir { 113*cdf0e10cSrcweir BeginUndo(); 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 116*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir // Tabelle muss vorher umgeschaltet sein (#46952#) !!! 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 121*cdf0e10cSrcweir if ( nVisTab != nTab ) 122*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 123*cdf0e10cSrcweir 124*cdf0e10cSrcweir // inverse Funktion ausfuehren 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir if (bShow) 127*cdf0e10cSrcweir pViewShell->HideOutline( bColumns, nLevel, nEntry, sal_False, sal_False ); 128*cdf0e10cSrcweir else 129*cdf0e10cSrcweir pViewShell->ShowOutline( bColumns, nLevel, nEntry, sal_False, sal_False ); 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir // Original Spalten-/Zeilenstatus 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir if (bColumns) 134*cdf0e10cSrcweir pUndoDoc->CopyToDocument( static_cast<SCCOL>(nStart), 0, nTab, 135*cdf0e10cSrcweir static_cast<SCCOL>(nEnd), MAXROW, nTab, IDF_NONE, sal_False, pDoc); 136*cdf0e10cSrcweir else 137*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, nStart, nTab, MAXCOL, nEnd, nTab, IDF_NONE, sal_False, pDoc ); 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir pViewShell->UpdateScrollBars(); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir pDocShell->PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_GRID|PAINT_LEFT|PAINT_TOP); 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir EndUndo(); 144*cdf0e10cSrcweir } 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir void __EXPORT ScUndoDoOutline::Redo() 147*cdf0e10cSrcweir { 148*cdf0e10cSrcweir BeginRedo(); 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 151*cdf0e10cSrcweir 152*cdf0e10cSrcweir // Tabelle muss vorher umgeschaltet sein (#46952#) !!! 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 155*cdf0e10cSrcweir if ( nVisTab != nTab ) 156*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir if (bShow) 159*cdf0e10cSrcweir pViewShell->ShowOutline( bColumns, nLevel, nEntry, sal_False ); 160*cdf0e10cSrcweir else 161*cdf0e10cSrcweir pViewShell->HideOutline( bColumns, nLevel, nEntry, sal_False ); 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir EndRedo(); 164*cdf0e10cSrcweir } 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir void __EXPORT ScUndoDoOutline::Repeat(SfxRepeatTarget& /* rTarget */) 167*cdf0e10cSrcweir { 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoDoOutline::CanRepeat(SfxRepeatTarget& /* rTarget */) const 171*cdf0e10cSrcweir { 172*cdf0e10cSrcweir return sal_False; // geht nicht 173*cdf0e10cSrcweir } 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir // 176*cdf0e10cSrcweir // Outline-Gruppen erzeugen oder loeschen 177*cdf0e10cSrcweir // 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir ScUndoMakeOutline::ScUndoMakeOutline( ScDocShell* pNewDocShell, 180*cdf0e10cSrcweir SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, 181*cdf0e10cSrcweir SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, 182*cdf0e10cSrcweir ScOutlineTable* pNewUndoTab, sal_Bool bNewColumns, sal_Bool bNewMake ) : 183*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 184*cdf0e10cSrcweir aBlockStart( nStartX, nStartY, nStartZ ), 185*cdf0e10cSrcweir aBlockEnd( nEndX, nEndY, nEndZ ), 186*cdf0e10cSrcweir pUndoTable( pNewUndoTab ), 187*cdf0e10cSrcweir bColumns( bNewColumns ), 188*cdf0e10cSrcweir bMake( bNewMake ) 189*cdf0e10cSrcweir { 190*cdf0e10cSrcweir } 191*cdf0e10cSrcweir 192*cdf0e10cSrcweir __EXPORT ScUndoMakeOutline::~ScUndoMakeOutline() 193*cdf0e10cSrcweir { 194*cdf0e10cSrcweir delete pUndoTable; 195*cdf0e10cSrcweir } 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir String __EXPORT ScUndoMakeOutline::GetComment() const 198*cdf0e10cSrcweir { // "Gruppierung" "Gruppierung aufheben" 199*cdf0e10cSrcweir return bMake ? 200*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_MAKEOUTLINE ) : 201*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_REMAKEOUTLINE ); 202*cdf0e10cSrcweir } 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir void __EXPORT ScUndoMakeOutline::Undo() 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir BeginUndo(); 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 209*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 210*cdf0e10cSrcweir SCTAB nTab = aBlockStart.Tab(); 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, aBlockStart, aBlockEnd ); 213*cdf0e10cSrcweir 214*cdf0e10cSrcweir pDoc->SetOutlineTable( nTab, pUndoTable ); 215*cdf0e10cSrcweir 216*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 217*cdf0e10cSrcweir if ( nVisTab != nTab ) 218*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir pDocShell->PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_GRID|PAINT_LEFT|PAINT_TOP|PAINT_SIZE); 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir EndUndo(); 223*cdf0e10cSrcweir } 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir void __EXPORT ScUndoMakeOutline::Redo() 226*cdf0e10cSrcweir { 227*cdf0e10cSrcweir BeginRedo(); 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, aBlockStart, aBlockEnd ); 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir if (bMake) 234*cdf0e10cSrcweir pViewShell->MakeOutline( bColumns, sal_False ); 235*cdf0e10cSrcweir else 236*cdf0e10cSrcweir pViewShell->RemoveOutline( bColumns, sal_False ); 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir pDocShell->PostPaint(0,0,aBlockStart.Tab(),MAXCOL,MAXROW,aBlockEnd.Tab(),PAINT_GRID); 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir EndRedo(); 241*cdf0e10cSrcweir } 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir void __EXPORT ScUndoMakeOutline::Repeat(SfxRepeatTarget& rTarget) 244*cdf0e10cSrcweir { 245*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 246*cdf0e10cSrcweir { 247*cdf0e10cSrcweir ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell(); 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir if (bMake) 250*cdf0e10cSrcweir rViewShell.MakeOutline( bColumns, sal_True ); 251*cdf0e10cSrcweir else 252*cdf0e10cSrcweir rViewShell.RemoveOutline( bColumns, sal_True ); 253*cdf0e10cSrcweir } 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir 256*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoMakeOutline::CanRepeat(SfxRepeatTarget& rTarget) const 257*cdf0e10cSrcweir { 258*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 259*cdf0e10cSrcweir } 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir // 262*cdf0e10cSrcweir // Outline-Ebene auswaehlen 263*cdf0e10cSrcweir // 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir ScUndoOutlineLevel::ScUndoOutlineLevel( ScDocShell* pNewDocShell, 266*cdf0e10cSrcweir SCCOLROW nNewStart, SCCOLROW nNewEnd, SCTAB nNewTab, 267*cdf0e10cSrcweir ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, 268*cdf0e10cSrcweir sal_Bool bNewColumns, sal_uInt16 nNewLevel ) : 269*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 270*cdf0e10cSrcweir nStart( nNewStart ), 271*cdf0e10cSrcweir nEnd( nNewEnd ), 272*cdf0e10cSrcweir nTab( nNewTab ), 273*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 274*cdf0e10cSrcweir pUndoTable( pNewUndoTab ), 275*cdf0e10cSrcweir bColumns( bNewColumns ), 276*cdf0e10cSrcweir nLevel( nNewLevel ) 277*cdf0e10cSrcweir { 278*cdf0e10cSrcweir } 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir __EXPORT ScUndoOutlineLevel::~ScUndoOutlineLevel() 281*cdf0e10cSrcweir { 282*cdf0e10cSrcweir delete pUndoDoc; 283*cdf0e10cSrcweir delete pUndoTable; 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir String __EXPORT ScUndoOutlineLevel::GetComment() const 287*cdf0e10cSrcweir { // "Gliederungsebene auswaehlen"; 288*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_OUTLINELEVEL ); 289*cdf0e10cSrcweir } 290*cdf0e10cSrcweir 291*cdf0e10cSrcweir void __EXPORT ScUndoOutlineLevel::Undo() 292*cdf0e10cSrcweir { 293*cdf0e10cSrcweir BeginUndo(); 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 296*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir // Original Outline-Table 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir pDoc->SetOutlineTable( nTab, pUndoTable ); 301*cdf0e10cSrcweir 302*cdf0e10cSrcweir // Original Spalten-/Zeilenstatus 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir if (bColumns) 305*cdf0e10cSrcweir pUndoDoc->CopyToDocument( static_cast<SCCOL>(nStart), 0, nTab, 306*cdf0e10cSrcweir static_cast<SCCOL>(nEnd), MAXROW, nTab, IDF_NONE, sal_False, pDoc); 307*cdf0e10cSrcweir else 308*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, nStart, nTab, MAXCOL, nEnd, nTab, IDF_NONE, sal_False, pDoc ); 309*cdf0e10cSrcweir 310*cdf0e10cSrcweir pDoc->UpdatePageBreaks( nTab ); 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir pViewShell->UpdateScrollBars(); 313*cdf0e10cSrcweir 314*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 315*cdf0e10cSrcweir if ( nVisTab != nTab ) 316*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir pDocShell->PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_GRID|PAINT_LEFT|PAINT_TOP); 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir EndUndo(); 321*cdf0e10cSrcweir } 322*cdf0e10cSrcweir 323*cdf0e10cSrcweir void __EXPORT ScUndoOutlineLevel::Redo() 324*cdf0e10cSrcweir { 325*cdf0e10cSrcweir BeginRedo(); 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 328*cdf0e10cSrcweir 329*cdf0e10cSrcweir // Tabelle muss vorher umgeschaltet sein (#46952#) !!! 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 332*cdf0e10cSrcweir if ( nVisTab != nTab ) 333*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 334*cdf0e10cSrcweir 335*cdf0e10cSrcweir pViewShell->SelectLevel( bColumns, nLevel, sal_False ); 336*cdf0e10cSrcweir 337*cdf0e10cSrcweir EndRedo(); 338*cdf0e10cSrcweir } 339*cdf0e10cSrcweir 340*cdf0e10cSrcweir void __EXPORT ScUndoOutlineLevel::Repeat(SfxRepeatTarget& rTarget) 341*cdf0e10cSrcweir { 342*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 343*cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->SelectLevel( bColumns, nLevel, sal_True ); 344*cdf0e10cSrcweir } 345*cdf0e10cSrcweir 346*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoOutlineLevel::CanRepeat(SfxRepeatTarget& rTarget) const 347*cdf0e10cSrcweir { 348*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir 351*cdf0e10cSrcweir // 352*cdf0e10cSrcweir // Outline ueber Blockmarken ein- oder ausblenden 353*cdf0e10cSrcweir // 354*cdf0e10cSrcweir 355*cdf0e10cSrcweir ScUndoOutlineBlock::ScUndoOutlineBlock( ScDocShell* pNewDocShell, 356*cdf0e10cSrcweir SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, 357*cdf0e10cSrcweir SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, 358*cdf0e10cSrcweir ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, sal_Bool bNewShow ) : 359*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 360*cdf0e10cSrcweir aBlockStart( nStartX, nStartY, nStartZ ), 361*cdf0e10cSrcweir aBlockEnd( nEndX, nEndY, nEndZ ), 362*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 363*cdf0e10cSrcweir pUndoTable( pNewUndoTab ), 364*cdf0e10cSrcweir bShow( bNewShow ) 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir } 367*cdf0e10cSrcweir 368*cdf0e10cSrcweir __EXPORT ScUndoOutlineBlock::~ScUndoOutlineBlock() 369*cdf0e10cSrcweir { 370*cdf0e10cSrcweir delete pUndoDoc; 371*cdf0e10cSrcweir delete pUndoTable; 372*cdf0e10cSrcweir } 373*cdf0e10cSrcweir 374*cdf0e10cSrcweir String __EXPORT ScUndoOutlineBlock::GetComment() const 375*cdf0e10cSrcweir { // "Detail einblenden" "Detail ausblenden" 376*cdf0e10cSrcweir return bShow ? 377*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_DOOUTLINEBLK ) : 378*cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_REDOOUTLINEBLK ); 379*cdf0e10cSrcweir } 380*cdf0e10cSrcweir 381*cdf0e10cSrcweir void __EXPORT ScUndoOutlineBlock::Undo() 382*cdf0e10cSrcweir { 383*cdf0e10cSrcweir BeginUndo(); 384*cdf0e10cSrcweir 385*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 386*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 387*cdf0e10cSrcweir SCTAB nTab = aBlockStart.Tab(); 388*cdf0e10cSrcweir 389*cdf0e10cSrcweir // Original Outline-Table 390*cdf0e10cSrcweir 391*cdf0e10cSrcweir pDoc->SetOutlineTable( nTab, pUndoTable ); 392*cdf0e10cSrcweir 393*cdf0e10cSrcweir // Original Spalten-/Zeilenstatus 394*cdf0e10cSrcweir 395*cdf0e10cSrcweir SCCOLROW nStartCol = aBlockStart.Col(); 396*cdf0e10cSrcweir SCCOLROW nEndCol = aBlockEnd.Col(); 397*cdf0e10cSrcweir SCCOLROW nStartRow = aBlockStart.Row(); 398*cdf0e10cSrcweir SCCOLROW nEndRow = aBlockEnd.Row(); 399*cdf0e10cSrcweir 400*cdf0e10cSrcweir if (!bShow) 401*cdf0e10cSrcweir { // Groesse des ausgeblendeten Blocks 402*cdf0e10cSrcweir sal_uInt16 nLevel; 403*cdf0e10cSrcweir pUndoTable->GetColArray()->FindTouchedLevel( nStartCol, nEndCol, nLevel ); 404*cdf0e10cSrcweir pUndoTable->GetColArray()->ExtendBlock( nLevel, nStartCol, nEndCol ); 405*cdf0e10cSrcweir pUndoTable->GetRowArray()->FindTouchedLevel( nStartRow, nEndRow, nLevel ); 406*cdf0e10cSrcweir pUndoTable->GetRowArray()->ExtendBlock( nLevel, nStartRow, nEndRow ); 407*cdf0e10cSrcweir } 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir pUndoDoc->CopyToDocument( static_cast<SCCOL>(nStartCol), 0, nTab, 410*cdf0e10cSrcweir static_cast<SCCOL>(nEndCol), MAXROW, nTab, IDF_NONE, sal_False, pDoc ); 411*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, nStartRow, nTab, MAXCOL, nEndRow, nTab, IDF_NONE, sal_False, pDoc ); 412*cdf0e10cSrcweir 413*cdf0e10cSrcweir pDoc->UpdatePageBreaks( nTab ); 414*cdf0e10cSrcweir 415*cdf0e10cSrcweir pViewShell->UpdateScrollBars(); 416*cdf0e10cSrcweir 417*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 418*cdf0e10cSrcweir if ( nVisTab != nTab ) 419*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir pDocShell->PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_GRID|PAINT_LEFT|PAINT_TOP); 422*cdf0e10cSrcweir 423*cdf0e10cSrcweir EndUndo(); 424*cdf0e10cSrcweir } 425*cdf0e10cSrcweir 426*cdf0e10cSrcweir void __EXPORT ScUndoOutlineBlock::Redo() 427*cdf0e10cSrcweir { 428*cdf0e10cSrcweir BeginRedo(); 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 431*cdf0e10cSrcweir 432*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, aBlockStart, aBlockEnd ); 433*cdf0e10cSrcweir if (bShow) 434*cdf0e10cSrcweir pViewShell->ShowMarkedOutlines( sal_False ); 435*cdf0e10cSrcweir else 436*cdf0e10cSrcweir pViewShell->HideMarkedOutlines( sal_False ); 437*cdf0e10cSrcweir 438*cdf0e10cSrcweir EndRedo(); 439*cdf0e10cSrcweir } 440*cdf0e10cSrcweir 441*cdf0e10cSrcweir void __EXPORT ScUndoOutlineBlock::Repeat(SfxRepeatTarget& rTarget) 442*cdf0e10cSrcweir { 443*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 444*cdf0e10cSrcweir { 445*cdf0e10cSrcweir ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell(); 446*cdf0e10cSrcweir 447*cdf0e10cSrcweir if (bShow) 448*cdf0e10cSrcweir rViewShell.ShowMarkedOutlines( sal_True ); 449*cdf0e10cSrcweir else 450*cdf0e10cSrcweir rViewShell.HideMarkedOutlines( sal_True ); 451*cdf0e10cSrcweir } 452*cdf0e10cSrcweir } 453*cdf0e10cSrcweir 454*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoOutlineBlock::CanRepeat(SfxRepeatTarget& rTarget) const 455*cdf0e10cSrcweir { 456*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 457*cdf0e10cSrcweir } 458*cdf0e10cSrcweir 459*cdf0e10cSrcweir // 460*cdf0e10cSrcweir // alle Outlines loeschen 461*cdf0e10cSrcweir // 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir ScUndoRemoveAllOutlines::ScUndoRemoveAllOutlines( ScDocShell* pNewDocShell, 464*cdf0e10cSrcweir SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, 465*cdf0e10cSrcweir SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, 466*cdf0e10cSrcweir ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab ) : 467*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 468*cdf0e10cSrcweir aBlockStart( nStartX, nStartY, nStartZ ), 469*cdf0e10cSrcweir aBlockEnd( nEndX, nEndY, nEndZ ), 470*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 471*cdf0e10cSrcweir pUndoTable( pNewUndoTab ) 472*cdf0e10cSrcweir { 473*cdf0e10cSrcweir } 474*cdf0e10cSrcweir 475*cdf0e10cSrcweir __EXPORT ScUndoRemoveAllOutlines::~ScUndoRemoveAllOutlines() 476*cdf0e10cSrcweir { 477*cdf0e10cSrcweir delete pUndoDoc; 478*cdf0e10cSrcweir delete pUndoTable; 479*cdf0e10cSrcweir } 480*cdf0e10cSrcweir 481*cdf0e10cSrcweir String __EXPORT ScUndoRemoveAllOutlines::GetComment() const 482*cdf0e10cSrcweir { // "Gliederung entfernen" 483*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_REMOVEALLOTLNS ); 484*cdf0e10cSrcweir } 485*cdf0e10cSrcweir 486*cdf0e10cSrcweir void __EXPORT ScUndoRemoveAllOutlines::Undo() 487*cdf0e10cSrcweir { 488*cdf0e10cSrcweir BeginUndo(); 489*cdf0e10cSrcweir 490*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 491*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 492*cdf0e10cSrcweir SCTAB nTab = aBlockStart.Tab(); 493*cdf0e10cSrcweir 494*cdf0e10cSrcweir // Original Outline-Table 495*cdf0e10cSrcweir 496*cdf0e10cSrcweir pDoc->SetOutlineTable( nTab, pUndoTable ); 497*cdf0e10cSrcweir 498*cdf0e10cSrcweir // Original Spalten-/Zeilenstatus 499*cdf0e10cSrcweir 500*cdf0e10cSrcweir SCCOL nStartCol = aBlockStart.Col(); 501*cdf0e10cSrcweir SCCOL nEndCol = aBlockEnd.Col(); 502*cdf0e10cSrcweir SCROW nStartRow = aBlockStart.Row(); 503*cdf0e10cSrcweir SCROW nEndRow = aBlockEnd.Row(); 504*cdf0e10cSrcweir 505*cdf0e10cSrcweir pUndoDoc->CopyToDocument( nStartCol, 0, nTab, nEndCol, MAXROW, nTab, IDF_NONE, sal_False, pDoc ); 506*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, nStartRow, nTab, MAXCOL, nEndRow, nTab, IDF_NONE, sal_False, pDoc ); 507*cdf0e10cSrcweir 508*cdf0e10cSrcweir pDoc->UpdatePageBreaks( nTab ); 509*cdf0e10cSrcweir 510*cdf0e10cSrcweir pViewShell->UpdateScrollBars(); 511*cdf0e10cSrcweir 512*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 513*cdf0e10cSrcweir if ( nVisTab != nTab ) 514*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 515*cdf0e10cSrcweir 516*cdf0e10cSrcweir pDocShell->PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_GRID|PAINT_LEFT|PAINT_TOP|PAINT_SIZE); 517*cdf0e10cSrcweir 518*cdf0e10cSrcweir EndUndo(); 519*cdf0e10cSrcweir } 520*cdf0e10cSrcweir 521*cdf0e10cSrcweir void __EXPORT ScUndoRemoveAllOutlines::Redo() 522*cdf0e10cSrcweir { 523*cdf0e10cSrcweir BeginRedo(); 524*cdf0e10cSrcweir 525*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 526*cdf0e10cSrcweir 527*cdf0e10cSrcweir // Tabelle muss vorher umgeschaltet sein (#46952#) !!! 528*cdf0e10cSrcweir 529*cdf0e10cSrcweir SCTAB nTab = aBlockStart.Tab(); 530*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 531*cdf0e10cSrcweir if ( nVisTab != nTab ) 532*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 533*cdf0e10cSrcweir 534*cdf0e10cSrcweir pViewShell->RemoveAllOutlines( sal_False ); 535*cdf0e10cSrcweir 536*cdf0e10cSrcweir EndRedo(); 537*cdf0e10cSrcweir } 538*cdf0e10cSrcweir 539*cdf0e10cSrcweir void __EXPORT ScUndoRemoveAllOutlines::Repeat(SfxRepeatTarget& rTarget) 540*cdf0e10cSrcweir { 541*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 542*cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->RemoveAllOutlines( sal_True ); 543*cdf0e10cSrcweir } 544*cdf0e10cSrcweir 545*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoRemoveAllOutlines::CanRepeat(SfxRepeatTarget& rTarget) const 546*cdf0e10cSrcweir { 547*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 548*cdf0e10cSrcweir } 549*cdf0e10cSrcweir 550*cdf0e10cSrcweir // 551*cdf0e10cSrcweir // Auto-Outline 552*cdf0e10cSrcweir // 553*cdf0e10cSrcweir 554*cdf0e10cSrcweir ScUndoAutoOutline::ScUndoAutoOutline( ScDocShell* pNewDocShell, 555*cdf0e10cSrcweir SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, 556*cdf0e10cSrcweir SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, 557*cdf0e10cSrcweir ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab ) : 558*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 559*cdf0e10cSrcweir aBlockStart( nStartX, nStartY, nStartZ ), 560*cdf0e10cSrcweir aBlockEnd( nEndX, nEndY, nEndZ ), 561*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 562*cdf0e10cSrcweir pUndoTable( pNewUndoTab ) 563*cdf0e10cSrcweir { 564*cdf0e10cSrcweir } 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir __EXPORT ScUndoAutoOutline::~ScUndoAutoOutline() 567*cdf0e10cSrcweir { 568*cdf0e10cSrcweir delete pUndoDoc; 569*cdf0e10cSrcweir delete pUndoTable; 570*cdf0e10cSrcweir } 571*cdf0e10cSrcweir 572*cdf0e10cSrcweir String __EXPORT ScUndoAutoOutline::GetComment() const 573*cdf0e10cSrcweir { // "Auto-Gliederung" 574*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_AUTOOUTLINE ); 575*cdf0e10cSrcweir } 576*cdf0e10cSrcweir 577*cdf0e10cSrcweir void __EXPORT ScUndoAutoOutline::Undo() 578*cdf0e10cSrcweir { 579*cdf0e10cSrcweir BeginUndo(); 580*cdf0e10cSrcweir 581*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 582*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 583*cdf0e10cSrcweir SCTAB nTab = aBlockStart.Tab(); 584*cdf0e10cSrcweir 585*cdf0e10cSrcweir // Original Outline-Table 586*cdf0e10cSrcweir 587*cdf0e10cSrcweir pDoc->SetOutlineTable( nTab, pUndoTable ); 588*cdf0e10cSrcweir 589*cdf0e10cSrcweir // Original Spalten-/Zeilenstatus 590*cdf0e10cSrcweir 591*cdf0e10cSrcweir if (pUndoDoc && pUndoTable) 592*cdf0e10cSrcweir { 593*cdf0e10cSrcweir SCCOLROW nStartCol; 594*cdf0e10cSrcweir SCCOLROW nStartRow; 595*cdf0e10cSrcweir SCCOLROW nEndCol; 596*cdf0e10cSrcweir SCCOLROW nEndRow; 597*cdf0e10cSrcweir pUndoTable->GetColArray()->GetRange( nStartCol, nEndCol ); 598*cdf0e10cSrcweir pUndoTable->GetRowArray()->GetRange( nStartRow, nEndRow ); 599*cdf0e10cSrcweir 600*cdf0e10cSrcweir pUndoDoc->CopyToDocument( static_cast<SCCOL>(nStartCol), 0, nTab, 601*cdf0e10cSrcweir static_cast<SCCOL>(nEndCol), MAXROW, nTab, IDF_NONE, sal_False, 602*cdf0e10cSrcweir pDoc); 603*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, nStartRow, nTab, MAXCOL, nEndRow, nTab, IDF_NONE, sal_False, pDoc ); 604*cdf0e10cSrcweir 605*cdf0e10cSrcweir pViewShell->UpdateScrollBars(); 606*cdf0e10cSrcweir } 607*cdf0e10cSrcweir 608*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 609*cdf0e10cSrcweir if ( nVisTab != nTab ) 610*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 611*cdf0e10cSrcweir 612*cdf0e10cSrcweir pDocShell->PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_GRID|PAINT_LEFT|PAINT_TOP|PAINT_SIZE); 613*cdf0e10cSrcweir 614*cdf0e10cSrcweir EndUndo(); 615*cdf0e10cSrcweir } 616*cdf0e10cSrcweir 617*cdf0e10cSrcweir void __EXPORT ScUndoAutoOutline::Redo() 618*cdf0e10cSrcweir { 619*cdf0e10cSrcweir BeginRedo(); 620*cdf0e10cSrcweir 621*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 622*cdf0e10cSrcweir 623*cdf0e10cSrcweir SCTAB nTab = aBlockStart.Tab(); 624*cdf0e10cSrcweir if (pViewShell) 625*cdf0e10cSrcweir { 626*cdf0e10cSrcweir // Tabelle muss vorher umgeschaltet sein (#46952#) !!! 627*cdf0e10cSrcweir 628*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 629*cdf0e10cSrcweir if ( nVisTab != nTab ) 630*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 631*cdf0e10cSrcweir } 632*cdf0e10cSrcweir 633*cdf0e10cSrcweir ScRange aRange( aBlockStart.Col(), aBlockStart.Row(), nTab, 634*cdf0e10cSrcweir aBlockEnd.Col(), aBlockEnd.Row(), nTab ); 635*cdf0e10cSrcweir ScOutlineDocFunc aFunc( *pDocShell ); 636*cdf0e10cSrcweir aFunc.AutoOutline( aRange, sal_False, sal_False ); 637*cdf0e10cSrcweir 638*cdf0e10cSrcweir // auf der View markieren 639*cdf0e10cSrcweir // Wenn's beim Aufruf eine Mehrfachselektion war, ist es jetzt der 640*cdf0e10cSrcweir // umschliessende Bereich... 641*cdf0e10cSrcweir 642*cdf0e10cSrcweir if (pViewShell) 643*cdf0e10cSrcweir pViewShell->MarkRange( aRange ); 644*cdf0e10cSrcweir 645*cdf0e10cSrcweir EndRedo(); 646*cdf0e10cSrcweir } 647*cdf0e10cSrcweir 648*cdf0e10cSrcweir void __EXPORT ScUndoAutoOutline::Repeat(SfxRepeatTarget& rTarget) 649*cdf0e10cSrcweir { 650*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 651*cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->AutoOutline( sal_True ); 652*cdf0e10cSrcweir } 653*cdf0e10cSrcweir 654*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoAutoOutline::CanRepeat(SfxRepeatTarget& rTarget) const 655*cdf0e10cSrcweir { 656*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 657*cdf0e10cSrcweir } 658*cdf0e10cSrcweir 659*cdf0e10cSrcweir // 660*cdf0e10cSrcweir // Zwischenergebnisse 661*cdf0e10cSrcweir // 662*cdf0e10cSrcweir 663*cdf0e10cSrcweir ScUndoSubTotals::ScUndoSubTotals( ScDocShell* pNewDocShell, SCTAB nNewTab, 664*cdf0e10cSrcweir const ScSubTotalParam& rNewParam, SCROW nNewEndY, 665*cdf0e10cSrcweir ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, 666*cdf0e10cSrcweir ScRangeName* pNewUndoRange, ScDBCollection* pNewUndoDB ) : 667*cdf0e10cSrcweir ScDBFuncUndo( pNewDocShell, ScRange( rNewParam.nCol1, rNewParam.nRow1, nNewTab, 668*cdf0e10cSrcweir rNewParam.nCol2, rNewParam.nRow2, nNewTab ) ), 669*cdf0e10cSrcweir nTab( nNewTab ), 670*cdf0e10cSrcweir aParam( rNewParam ), 671*cdf0e10cSrcweir nNewEndRow( nNewEndY ), 672*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 673*cdf0e10cSrcweir pUndoTable( pNewUndoTab ), 674*cdf0e10cSrcweir pUndoRange( pNewUndoRange ), 675*cdf0e10cSrcweir pUndoDB( pNewUndoDB ) 676*cdf0e10cSrcweir { 677*cdf0e10cSrcweir } 678*cdf0e10cSrcweir 679*cdf0e10cSrcweir __EXPORT ScUndoSubTotals::~ScUndoSubTotals() 680*cdf0e10cSrcweir { 681*cdf0e10cSrcweir delete pUndoDoc; 682*cdf0e10cSrcweir delete pUndoTable; 683*cdf0e10cSrcweir delete pUndoRange; 684*cdf0e10cSrcweir delete pUndoDB; 685*cdf0e10cSrcweir } 686*cdf0e10cSrcweir 687*cdf0e10cSrcweir String __EXPORT ScUndoSubTotals::GetComment() const 688*cdf0e10cSrcweir { // "Teilergebnisse" 689*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_SUBTOTALS ); 690*cdf0e10cSrcweir } 691*cdf0e10cSrcweir 692*cdf0e10cSrcweir void __EXPORT ScUndoSubTotals::Undo() 693*cdf0e10cSrcweir { 694*cdf0e10cSrcweir BeginUndo(); 695*cdf0e10cSrcweir 696*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 697*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 698*cdf0e10cSrcweir 699*cdf0e10cSrcweir // um einzelnen DB-Bereich anzupassen 700*cdf0e10cSrcweir /* ScDBData* pOldDBData = ScUndoUtil::GetOldDBData( pUndoDBData, pDoc, nTab, 701*cdf0e10cSrcweir aParam.nCol1, aParam.nRow1, aParam.nCol2, nNewEndRow ); 702*cdf0e10cSrcweir */ 703*cdf0e10cSrcweir 704*cdf0e10cSrcweir if (nNewEndRow > aParam.nRow2) 705*cdf0e10cSrcweir { 706*cdf0e10cSrcweir pDoc->DeleteRow( 0,nTab, MAXCOL,nTab, aParam.nRow2+1, static_cast<SCSIZE>(nNewEndRow-aParam.nRow2) ); 707*cdf0e10cSrcweir } 708*cdf0e10cSrcweir else if (nNewEndRow < aParam.nRow2) 709*cdf0e10cSrcweir { 710*cdf0e10cSrcweir pDoc->InsertRow( 0,nTab, MAXCOL,nTab, nNewEndRow+1, static_cast<SCSIZE>(aParam.nRow2-nNewEndRow) ); 711*cdf0e10cSrcweir } 712*cdf0e10cSrcweir 713*cdf0e10cSrcweir 714*cdf0e10cSrcweir // Original Outline-Table 715*cdf0e10cSrcweir 716*cdf0e10cSrcweir pDoc->SetOutlineTable( nTab, pUndoTable ); 717*cdf0e10cSrcweir 718*cdf0e10cSrcweir // Original Spalten-/Zeilenstatus 719*cdf0e10cSrcweir 720*cdf0e10cSrcweir if (pUndoDoc && pUndoTable) 721*cdf0e10cSrcweir { 722*cdf0e10cSrcweir SCCOLROW nStartCol; 723*cdf0e10cSrcweir SCCOLROW nStartRow; 724*cdf0e10cSrcweir SCCOLROW nEndCol; 725*cdf0e10cSrcweir SCCOLROW nEndRow; 726*cdf0e10cSrcweir pUndoTable->GetColArray()->GetRange( nStartCol, nEndCol ); 727*cdf0e10cSrcweir pUndoTable->GetRowArray()->GetRange( nStartRow, nEndRow ); 728*cdf0e10cSrcweir 729*cdf0e10cSrcweir pUndoDoc->CopyToDocument( static_cast<SCCOL>(nStartCol), 0, nTab, 730*cdf0e10cSrcweir static_cast<SCCOL>(nEndCol), MAXROW, nTab, IDF_NONE, sal_False, 731*cdf0e10cSrcweir pDoc); 732*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, nStartRow, nTab, MAXCOL, nEndRow, nTab, IDF_NONE, sal_False, pDoc ); 733*cdf0e10cSrcweir 734*cdf0e10cSrcweir pViewShell->UpdateScrollBars(); 735*cdf0e10cSrcweir } 736*cdf0e10cSrcweir 737*cdf0e10cSrcweir // Original-Daten & Referenzen 738*cdf0e10cSrcweir 739*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, 0, aParam.nRow1+1, nTab, 740*cdf0e10cSrcweir MAXCOL, aParam.nRow2, nTab ); 741*cdf0e10cSrcweir 742*cdf0e10cSrcweir pDoc->DeleteAreaTab( 0,aParam.nRow1+1, MAXCOL,aParam.nRow2, nTab, IDF_ALL ); 743*cdf0e10cSrcweir 744*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, aParam.nRow1+1, nTab, MAXCOL, aParam.nRow2, nTab, 745*cdf0e10cSrcweir IDF_NONE, sal_False, pDoc ); // Flags 746*cdf0e10cSrcweir pUndoDoc->UndoToDocument( 0, aParam.nRow1+1, nTab, MAXCOL, aParam.nRow2, nTab, 747*cdf0e10cSrcweir IDF_ALL, sal_False, pDoc ); 748*cdf0e10cSrcweir 749*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, aParam.nCol1,aParam.nRow1,nTab, 750*cdf0e10cSrcweir aParam.nCol2,aParam.nRow2,nTab ); 751*cdf0e10cSrcweir 752*cdf0e10cSrcweir /* if (pUndoDBData) 753*cdf0e10cSrcweir *pOldDBData = *pUndoDBData; 754*cdf0e10cSrcweir */ 755*cdf0e10cSrcweir if (pUndoRange) 756*cdf0e10cSrcweir pDoc->SetRangeName( new ScRangeName( *pUndoRange ) ); 757*cdf0e10cSrcweir if (pUndoDB) 758*cdf0e10cSrcweir pDoc->SetDBCollection( new ScDBCollection( *pUndoDB ), sal_True ); 759*cdf0e10cSrcweir 760*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 761*cdf0e10cSrcweir if ( nVisTab != nTab ) 762*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 763*cdf0e10cSrcweir 764*cdf0e10cSrcweir pDocShell->PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_GRID|PAINT_LEFT|PAINT_TOP|PAINT_SIZE); 765*cdf0e10cSrcweir pDocShell->PostDataChanged(); 766*cdf0e10cSrcweir 767*cdf0e10cSrcweir EndUndo(); 768*cdf0e10cSrcweir } 769*cdf0e10cSrcweir 770*cdf0e10cSrcweir void __EXPORT ScUndoSubTotals::Redo() 771*cdf0e10cSrcweir { 772*cdf0e10cSrcweir BeginRedo(); 773*cdf0e10cSrcweir 774*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 775*cdf0e10cSrcweir 776*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 777*cdf0e10cSrcweir if ( nVisTab != nTab ) 778*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 779*cdf0e10cSrcweir 780*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, aParam.nCol1,aParam.nRow1,nTab, 781*cdf0e10cSrcweir aParam.nCol2,aParam.nRow2,nTab ); 782*cdf0e10cSrcweir pViewShell->DoSubTotals( aParam, sal_False ); 783*cdf0e10cSrcweir 784*cdf0e10cSrcweir EndRedo(); 785*cdf0e10cSrcweir } 786*cdf0e10cSrcweir 787*cdf0e10cSrcweir void __EXPORT ScUndoSubTotals::Repeat(SfxRepeatTarget& /* rTarget */) 788*cdf0e10cSrcweir { 789*cdf0e10cSrcweir } 790*cdf0e10cSrcweir 791*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoSubTotals::CanRepeat(SfxRepeatTarget& /* rTarget */) const 792*cdf0e10cSrcweir { 793*cdf0e10cSrcweir return sal_False; // geht nicht wegen Spaltennummern 794*cdf0e10cSrcweir } 795*cdf0e10cSrcweir 796*cdf0e10cSrcweir // 797*cdf0e10cSrcweir // Sortieren 798*cdf0e10cSrcweir // 799*cdf0e10cSrcweir 800*cdf0e10cSrcweir ScUndoSort::ScUndoSort( ScDocShell* pNewDocShell, 801*cdf0e10cSrcweir SCTAB nNewTab, const ScSortParam& rParam, 802*cdf0e10cSrcweir sal_Bool bQuery, ScDocument* pNewUndoDoc, ScDBCollection* pNewUndoDB, 803*cdf0e10cSrcweir const ScRange* pDest ) : 804*cdf0e10cSrcweir ScDBFuncUndo( pNewDocShell, ScRange( rParam.nCol1, rParam.nRow1, nNewTab, 805*cdf0e10cSrcweir rParam.nCol2, rParam.nRow2, nNewTab ) ), 806*cdf0e10cSrcweir nTab( nNewTab ), 807*cdf0e10cSrcweir aSortParam( rParam ), 808*cdf0e10cSrcweir bRepeatQuery( bQuery ), 809*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 810*cdf0e10cSrcweir pUndoDB( pNewUndoDB ), 811*cdf0e10cSrcweir bDestArea( sal_False ) 812*cdf0e10cSrcweir { 813*cdf0e10cSrcweir if ( pDest ) 814*cdf0e10cSrcweir { 815*cdf0e10cSrcweir bDestArea = sal_True; 816*cdf0e10cSrcweir aDestRange = *pDest; 817*cdf0e10cSrcweir } 818*cdf0e10cSrcweir } 819*cdf0e10cSrcweir 820*cdf0e10cSrcweir __EXPORT ScUndoSort::~ScUndoSort() 821*cdf0e10cSrcweir { 822*cdf0e10cSrcweir delete pUndoDoc; 823*cdf0e10cSrcweir delete pUndoDB; 824*cdf0e10cSrcweir } 825*cdf0e10cSrcweir 826*cdf0e10cSrcweir String __EXPORT ScUndoSort::GetComment() const 827*cdf0e10cSrcweir { 828*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_SORT ); 829*cdf0e10cSrcweir } 830*cdf0e10cSrcweir 831*cdf0e10cSrcweir void __EXPORT ScUndoSort::Undo() 832*cdf0e10cSrcweir { 833*cdf0e10cSrcweir BeginUndo(); 834*cdf0e10cSrcweir 835*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 836*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 837*cdf0e10cSrcweir 838*cdf0e10cSrcweir SCCOL nStartCol = aSortParam.nCol1; 839*cdf0e10cSrcweir SCROW nStartRow = aSortParam.nRow1; 840*cdf0e10cSrcweir SCCOL nEndCol = aSortParam.nCol2; 841*cdf0e10cSrcweir SCROW nEndRow = aSortParam.nRow2; 842*cdf0e10cSrcweir SCTAB nSortTab = nTab; 843*cdf0e10cSrcweir if ( !aSortParam.bInplace ) 844*cdf0e10cSrcweir { 845*cdf0e10cSrcweir nStartCol = aSortParam.nDestCol; 846*cdf0e10cSrcweir nStartRow = aSortParam.nDestRow; 847*cdf0e10cSrcweir nEndCol = nStartCol + ( aSortParam.nCol2 - aSortParam.nCol1 ); 848*cdf0e10cSrcweir nEndRow = nStartRow + ( aSortParam.nRow2 - aSortParam.nRow1 ); 849*cdf0e10cSrcweir nSortTab = aSortParam.nDestTab; 850*cdf0e10cSrcweir } 851*cdf0e10cSrcweir 852*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, nStartCol, nStartRow, nSortTab, 853*cdf0e10cSrcweir nEndCol, nEndRow, nSortTab ); 854*cdf0e10cSrcweir 855*cdf0e10cSrcweir // do not delete/copy note captions, they are handled in drawing undo (ScDBFuncUndo::mpDrawUndo) 856*cdf0e10cSrcweir pDoc->DeleteAreaTab( nStartCol,nStartRow, nEndCol,nEndRow, nSortTab, IDF_ALL|IDF_NOCAPTIONS ); 857*cdf0e10cSrcweir pUndoDoc->CopyToDocument( nStartCol, nStartRow, nSortTab, nEndCol, nEndRow, nSortTab, 858*cdf0e10cSrcweir IDF_ALL|IDF_NOCAPTIONS, sal_False, pDoc ); 859*cdf0e10cSrcweir 860*cdf0e10cSrcweir if (bDestArea) 861*cdf0e10cSrcweir { 862*cdf0e10cSrcweir // do not delete/copy note captions, they are handled in drawing undo (ScDBFuncUndo::mpDrawUndo) 863*cdf0e10cSrcweir pDoc->DeleteAreaTab( aDestRange, IDF_ALL|IDF_NOCAPTIONS ); 864*cdf0e10cSrcweir pUndoDoc->CopyToDocument( aDestRange, IDF_ALL|IDF_NOCAPTIONS, sal_False, pDoc ); 865*cdf0e10cSrcweir } 866*cdf0e10cSrcweir 867*cdf0e10cSrcweir // Zeilenhoehen immer (wegen automatischer Anpassung) 868*cdf0e10cSrcweir //! auf ScBlockUndo umstellen 869*cdf0e10cSrcweir // if (bRepeatQuery) 870*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, nStartRow, nSortTab, MAXCOL, nEndRow, nSortTab, 871*cdf0e10cSrcweir IDF_NONE, sal_False, pDoc ); 872*cdf0e10cSrcweir 873*cdf0e10cSrcweir if (pUndoDB) 874*cdf0e10cSrcweir pDoc->SetDBCollection( new ScDBCollection( *pUndoDB ), sal_True ); 875*cdf0e10cSrcweir 876*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 877*cdf0e10cSrcweir if ( nVisTab != nSortTab ) 878*cdf0e10cSrcweir pViewShell->SetTabNo( nSortTab ); 879*cdf0e10cSrcweir 880*cdf0e10cSrcweir pDocShell->PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_GRID|PAINT_LEFT|PAINT_TOP|PAINT_SIZE); 881*cdf0e10cSrcweir pDocShell->PostDataChanged(); 882*cdf0e10cSrcweir 883*cdf0e10cSrcweir EndUndo(); 884*cdf0e10cSrcweir } 885*cdf0e10cSrcweir 886*cdf0e10cSrcweir void __EXPORT ScUndoSort::Redo() 887*cdf0e10cSrcweir { 888*cdf0e10cSrcweir BeginRedo(); 889*cdf0e10cSrcweir 890*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 891*cdf0e10cSrcweir 892*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 893*cdf0e10cSrcweir if ( nVisTab != nTab ) 894*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 895*cdf0e10cSrcweir 896*cdf0e10cSrcweir // pViewShell->DoneBlockMode(); 897*cdf0e10cSrcweir // pViewShell->InitOwnBlockMode(); 898*cdf0e10cSrcweir // pViewShell->GetViewData()->GetMarkData() = aMarkData; // CopyMarksTo 899*cdf0e10cSrcweir 900*cdf0e10cSrcweir pViewShell->MarkRange( ScRange( aSortParam.nCol1, aSortParam.nRow1, nTab, 901*cdf0e10cSrcweir aSortParam.nCol2, aSortParam.nRow2, nTab ) ); 902*cdf0e10cSrcweir 903*cdf0e10cSrcweir pViewShell->Sort( aSortParam, sal_False ); 904*cdf0e10cSrcweir 905*cdf0e10cSrcweir // Quellbereich painten wegen Markierung 906*cdf0e10cSrcweir if ( !aSortParam.bInplace ) 907*cdf0e10cSrcweir pDocShell->PostPaint( aSortParam.nCol1, aSortParam.nRow1, nTab, 908*cdf0e10cSrcweir aSortParam.nCol2, aSortParam.nRow2, nTab, PAINT_GRID ); 909*cdf0e10cSrcweir 910*cdf0e10cSrcweir EndRedo(); 911*cdf0e10cSrcweir } 912*cdf0e10cSrcweir 913*cdf0e10cSrcweir void __EXPORT ScUndoSort::Repeat(SfxRepeatTarget& /* rTarget */) 914*cdf0e10cSrcweir { 915*cdf0e10cSrcweir } 916*cdf0e10cSrcweir 917*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoSort::CanRepeat(SfxRepeatTarget& /* rTarget */) const 918*cdf0e10cSrcweir { 919*cdf0e10cSrcweir return sal_False; // geht nicht wegen Spaltennummern 920*cdf0e10cSrcweir } 921*cdf0e10cSrcweir 922*cdf0e10cSrcweir // 923*cdf0e10cSrcweir // Filtern 924*cdf0e10cSrcweir // 925*cdf0e10cSrcweir 926*cdf0e10cSrcweir ScUndoQuery::ScUndoQuery( ScDocShell* pNewDocShell, SCTAB nNewTab, const ScQueryParam& rParam, 927*cdf0e10cSrcweir ScDocument* pNewUndoDoc, ScDBCollection* pNewUndoDB, 928*cdf0e10cSrcweir const ScRange* pOld, sal_Bool bSize, const ScRange* pAdvSrc ) : 929*cdf0e10cSrcweir ScDBFuncUndo( pNewDocShell, ScRange( rParam.nCol1, rParam.nRow1, nNewTab, 930*cdf0e10cSrcweir rParam.nCol2, rParam.nRow2, nNewTab ) ), 931*cdf0e10cSrcweir pDrawUndo( NULL ), 932*cdf0e10cSrcweir nTab( nNewTab ), 933*cdf0e10cSrcweir aQueryParam( rParam ), 934*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 935*cdf0e10cSrcweir // pUndoDBData( pNewData ) 936*cdf0e10cSrcweir pUndoDB( pNewUndoDB ), 937*cdf0e10cSrcweir bIsAdvanced( sal_False ), 938*cdf0e10cSrcweir bDestArea( sal_False ), 939*cdf0e10cSrcweir bDoSize( bSize ) 940*cdf0e10cSrcweir { 941*cdf0e10cSrcweir if ( pOld ) 942*cdf0e10cSrcweir { 943*cdf0e10cSrcweir bDestArea = sal_True; 944*cdf0e10cSrcweir aOldDest = *pOld; 945*cdf0e10cSrcweir } 946*cdf0e10cSrcweir if ( pAdvSrc ) 947*cdf0e10cSrcweir { 948*cdf0e10cSrcweir bIsAdvanced = sal_True; 949*cdf0e10cSrcweir aAdvSource = *pAdvSrc; 950*cdf0e10cSrcweir } 951*cdf0e10cSrcweir 952*cdf0e10cSrcweir pDrawUndo = GetSdrUndoAction( pDocShell->GetDocument() ); 953*cdf0e10cSrcweir } 954*cdf0e10cSrcweir 955*cdf0e10cSrcweir __EXPORT ScUndoQuery::~ScUndoQuery() 956*cdf0e10cSrcweir { 957*cdf0e10cSrcweir delete pUndoDoc; 958*cdf0e10cSrcweir // delete pUndoDBData; 959*cdf0e10cSrcweir delete pUndoDB; 960*cdf0e10cSrcweir DeleteSdrUndoAction( pDrawUndo ); 961*cdf0e10cSrcweir } 962*cdf0e10cSrcweir 963*cdf0e10cSrcweir String __EXPORT ScUndoQuery::GetComment() const 964*cdf0e10cSrcweir { // "Filtern"; 965*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_QUERY ); 966*cdf0e10cSrcweir } 967*cdf0e10cSrcweir 968*cdf0e10cSrcweir void __EXPORT ScUndoQuery::Undo() 969*cdf0e10cSrcweir { 970*cdf0e10cSrcweir BeginUndo(); 971*cdf0e10cSrcweir 972*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 973*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 974*cdf0e10cSrcweir 975*cdf0e10cSrcweir sal_Bool bCopy = !aQueryParam.bInplace; 976*cdf0e10cSrcweir SCCOL nDestEndCol = 0; 977*cdf0e10cSrcweir SCROW nDestEndRow = 0; 978*cdf0e10cSrcweir if (bCopy) 979*cdf0e10cSrcweir { 980*cdf0e10cSrcweir nDestEndCol = aQueryParam.nDestCol + ( aQueryParam.nCol2-aQueryParam.nCol1 ); 981*cdf0e10cSrcweir nDestEndRow = aQueryParam.nDestRow + ( aQueryParam.nRow2-aQueryParam.nRow1 ); 982*cdf0e10cSrcweir 983*cdf0e10cSrcweir ScDBData* pData = pDoc->GetDBAtCursor( aQueryParam.nDestCol, aQueryParam.nDestRow, 984*cdf0e10cSrcweir aQueryParam.nDestTab, sal_True ); 985*cdf0e10cSrcweir if (pData) 986*cdf0e10cSrcweir { 987*cdf0e10cSrcweir ScRange aNewDest; 988*cdf0e10cSrcweir pData->GetArea( aNewDest ); 989*cdf0e10cSrcweir nDestEndCol = aNewDest.aEnd.Col(); 990*cdf0e10cSrcweir nDestEndRow = aNewDest.aEnd.Row(); 991*cdf0e10cSrcweir } 992*cdf0e10cSrcweir 993*cdf0e10cSrcweir if ( bDoSize && bDestArea ) 994*cdf0e10cSrcweir { 995*cdf0e10cSrcweir // aDestRange ist der alte Bereich 996*cdf0e10cSrcweir pDoc->FitBlock( ScRange( 997*cdf0e10cSrcweir aQueryParam.nDestCol, aQueryParam.nDestRow, aQueryParam.nDestTab, 998*cdf0e10cSrcweir nDestEndCol, nDestEndRow, aQueryParam.nDestTab ), 999*cdf0e10cSrcweir aOldDest ); 1000*cdf0e10cSrcweir } 1001*cdf0e10cSrcweir 1002*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, 1003*cdf0e10cSrcweir aQueryParam.nDestCol, aQueryParam.nDestRow, aQueryParam.nDestTab, 1004*cdf0e10cSrcweir nDestEndCol, nDestEndRow, aQueryParam.nDestTab ); 1005*cdf0e10cSrcweir pDoc->DeleteAreaTab( aQueryParam.nDestCol, aQueryParam.nDestRow, 1006*cdf0e10cSrcweir nDestEndCol, nDestEndRow, aQueryParam.nDestTab, IDF_ALL ); 1007*cdf0e10cSrcweir 1008*cdf0e10cSrcweir pViewShell->DoneBlockMode(); 1009*cdf0e10cSrcweir 1010*cdf0e10cSrcweir pUndoDoc->CopyToDocument( aQueryParam.nDestCol, aQueryParam.nDestRow, aQueryParam.nDestTab, 1011*cdf0e10cSrcweir nDestEndCol, nDestEndRow, aQueryParam.nDestTab, 1012*cdf0e10cSrcweir IDF_ALL, sal_False, pDoc ); 1013*cdf0e10cSrcweir // Attribute werden immer mitkopiert (#49287#) 1014*cdf0e10cSrcweir 1015*cdf0e10cSrcweir // Rest von altem Bereich 1016*cdf0e10cSrcweir if ( bDestArea && !bDoSize ) 1017*cdf0e10cSrcweir { 1018*cdf0e10cSrcweir pDoc->DeleteAreaTab( aOldDest, IDF_ALL ); 1019*cdf0e10cSrcweir pUndoDoc->CopyToDocument( aOldDest, IDF_ALL, sal_False, pDoc ); 1020*cdf0e10cSrcweir } 1021*cdf0e10cSrcweir } 1022*cdf0e10cSrcweir else 1023*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, aQueryParam.nRow1, nTab, MAXCOL, aQueryParam.nRow2, nTab, 1024*cdf0e10cSrcweir IDF_NONE, sal_False, pDoc ); 1025*cdf0e10cSrcweir 1026*cdf0e10cSrcweir if (pUndoDB) 1027*cdf0e10cSrcweir pDoc->SetDBCollection( new ScDBCollection( *pUndoDB ), sal_True ); 1028*cdf0e10cSrcweir 1029*cdf0e10cSrcweir if (!bCopy) 1030*cdf0e10cSrcweir { 1031*cdf0e10cSrcweir pDoc->InvalidatePageBreaks(nTab); 1032*cdf0e10cSrcweir pDoc->UpdatePageBreaks( nTab ); 1033*cdf0e10cSrcweir } 1034*cdf0e10cSrcweir 1035*cdf0e10cSrcweir ScRange aDirtyRange( 0 , aQueryParam.nRow1, nTab, 1036*cdf0e10cSrcweir MAXCOL, aQueryParam.nRow2, nTab ); 1037*cdf0e10cSrcweir pDoc->SetDirty( aDirtyRange ); 1038*cdf0e10cSrcweir 1039*cdf0e10cSrcweir DoSdrUndoAction( pDrawUndo, pDoc ); 1040*cdf0e10cSrcweir 1041*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 1042*cdf0e10cSrcweir if ( nVisTab != nTab ) 1043*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 1044*cdf0e10cSrcweir 1045*cdf0e10cSrcweir // Paint 1046*cdf0e10cSrcweir 1047*cdf0e10cSrcweir if (bCopy) 1048*cdf0e10cSrcweir { 1049*cdf0e10cSrcweir SCCOL nEndX = nDestEndCol; 1050*cdf0e10cSrcweir SCROW nEndY = nDestEndRow; 1051*cdf0e10cSrcweir if (bDestArea) 1052*cdf0e10cSrcweir { 1053*cdf0e10cSrcweir if ( aOldDest.aEnd.Col() > nEndX ) 1054*cdf0e10cSrcweir nEndX = aOldDest.aEnd.Col(); 1055*cdf0e10cSrcweir if ( aOldDest.aEnd.Row() > nEndY ) 1056*cdf0e10cSrcweir nEndY = aOldDest.aEnd.Row(); 1057*cdf0e10cSrcweir } 1058*cdf0e10cSrcweir if (bDoSize) 1059*cdf0e10cSrcweir nEndY = MAXROW; 1060*cdf0e10cSrcweir pDocShell->PostPaint( aQueryParam.nDestCol, aQueryParam.nDestRow, aQueryParam.nDestTab, 1061*cdf0e10cSrcweir nEndX, nEndY, aQueryParam.nDestTab, PAINT_GRID ); 1062*cdf0e10cSrcweir } 1063*cdf0e10cSrcweir else 1064*cdf0e10cSrcweir pDocShell->PostPaint( 0, aQueryParam.nRow1, nTab, MAXCOL, MAXROW, nTab, 1065*cdf0e10cSrcweir PAINT_GRID | PAINT_LEFT ); 1066*cdf0e10cSrcweir pDocShell->PostDataChanged(); 1067*cdf0e10cSrcweir 1068*cdf0e10cSrcweir EndUndo(); 1069*cdf0e10cSrcweir } 1070*cdf0e10cSrcweir 1071*cdf0e10cSrcweir void __EXPORT ScUndoQuery::Redo() 1072*cdf0e10cSrcweir { 1073*cdf0e10cSrcweir BeginRedo(); 1074*cdf0e10cSrcweir 1075*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 1076*cdf0e10cSrcweir 1077*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 1078*cdf0e10cSrcweir if ( nVisTab != nTab ) 1079*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 1080*cdf0e10cSrcweir 1081*cdf0e10cSrcweir if ( bIsAdvanced ) 1082*cdf0e10cSrcweir pViewShell->Query( aQueryParam, &aAdvSource, sal_False ); 1083*cdf0e10cSrcweir else 1084*cdf0e10cSrcweir pViewShell->Query( aQueryParam, NULL, sal_False ); 1085*cdf0e10cSrcweir 1086*cdf0e10cSrcweir EndRedo(); 1087*cdf0e10cSrcweir } 1088*cdf0e10cSrcweir 1089*cdf0e10cSrcweir void __EXPORT ScUndoQuery::Repeat(SfxRepeatTarget& /* rTarget */) 1090*cdf0e10cSrcweir { 1091*cdf0e10cSrcweir } 1092*cdf0e10cSrcweir 1093*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoQuery::CanRepeat(SfxRepeatTarget& /* rTarget */) const 1094*cdf0e10cSrcweir { 1095*cdf0e10cSrcweir return sal_False; // geht nicht wegen Spaltennummern 1096*cdf0e10cSrcweir } 1097*cdf0e10cSrcweir 1098*cdf0e10cSrcweir // 1099*cdf0e10cSrcweir // Show or hide AutoFilter buttons (doesn't include filter settings) 1100*cdf0e10cSrcweir // 1101*cdf0e10cSrcweir 1102*cdf0e10cSrcweir ScUndoAutoFilter::ScUndoAutoFilter( ScDocShell* pNewDocShell, const ScRange& rRange, 1103*cdf0e10cSrcweir const String& rName, sal_Bool bSet ) : 1104*cdf0e10cSrcweir ScDBFuncUndo( pNewDocShell, rRange ), 1105*cdf0e10cSrcweir aDBName( rName ), 1106*cdf0e10cSrcweir bFilterSet( bSet ) 1107*cdf0e10cSrcweir { 1108*cdf0e10cSrcweir } 1109*cdf0e10cSrcweir 1110*cdf0e10cSrcweir ScUndoAutoFilter::~ScUndoAutoFilter() 1111*cdf0e10cSrcweir { 1112*cdf0e10cSrcweir } 1113*cdf0e10cSrcweir 1114*cdf0e10cSrcweir String ScUndoAutoFilter::GetComment() const 1115*cdf0e10cSrcweir { 1116*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_QUERY ); // same as ScUndoQuery 1117*cdf0e10cSrcweir } 1118*cdf0e10cSrcweir 1119*cdf0e10cSrcweir void ScUndoAutoFilter::DoChange( sal_Bool bUndo ) 1120*cdf0e10cSrcweir { 1121*cdf0e10cSrcweir sal_Bool bNewFilter = bUndo ? !bFilterSet : bFilterSet; 1122*cdf0e10cSrcweir 1123*cdf0e10cSrcweir sal_uInt16 nIndex; 1124*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1125*cdf0e10cSrcweir ScDBCollection* pColl = pDoc->GetDBCollection(); 1126*cdf0e10cSrcweir if ( pColl->SearchName( aDBName, nIndex ) ) 1127*cdf0e10cSrcweir { 1128*cdf0e10cSrcweir ScDBData* pDBData = (*pColl)[nIndex]; 1129*cdf0e10cSrcweir pDBData->SetAutoFilter( bNewFilter ); 1130*cdf0e10cSrcweir 1131*cdf0e10cSrcweir SCCOL nRangeX1; 1132*cdf0e10cSrcweir SCROW nRangeY1; 1133*cdf0e10cSrcweir SCCOL nRangeX2; 1134*cdf0e10cSrcweir SCROW nRangeY2; 1135*cdf0e10cSrcweir SCTAB nRangeTab; 1136*cdf0e10cSrcweir pDBData->GetArea( nRangeTab, nRangeX1, nRangeY1, nRangeX2, nRangeY2 ); 1137*cdf0e10cSrcweir 1138*cdf0e10cSrcweir if ( bNewFilter ) 1139*cdf0e10cSrcweir pDoc->ApplyFlagsTab( nRangeX1, nRangeY1, nRangeX2, nRangeY1, nRangeTab, SC_MF_AUTO ); 1140*cdf0e10cSrcweir else 1141*cdf0e10cSrcweir pDoc->RemoveFlagsTab( nRangeX1, nRangeY1, nRangeX2, nRangeY1, nRangeTab, SC_MF_AUTO ); 1142*cdf0e10cSrcweir 1143*cdf0e10cSrcweir pDocShell->PostPaint( nRangeX1, nRangeY1, nRangeTab, nRangeX2, nRangeY1, nRangeTab, PAINT_GRID ); 1144*cdf0e10cSrcweir } 1145*cdf0e10cSrcweir } 1146*cdf0e10cSrcweir 1147*cdf0e10cSrcweir void ScUndoAutoFilter::Undo() 1148*cdf0e10cSrcweir { 1149*cdf0e10cSrcweir BeginUndo(); 1150*cdf0e10cSrcweir DoChange( sal_True ); 1151*cdf0e10cSrcweir EndUndo(); 1152*cdf0e10cSrcweir } 1153*cdf0e10cSrcweir 1154*cdf0e10cSrcweir void ScUndoAutoFilter::Redo() 1155*cdf0e10cSrcweir { 1156*cdf0e10cSrcweir BeginRedo(); 1157*cdf0e10cSrcweir DoChange( sal_False ); 1158*cdf0e10cSrcweir EndRedo(); 1159*cdf0e10cSrcweir } 1160*cdf0e10cSrcweir 1161*cdf0e10cSrcweir void ScUndoAutoFilter::Repeat(SfxRepeatTarget& /* rTarget */) 1162*cdf0e10cSrcweir { 1163*cdf0e10cSrcweir } 1164*cdf0e10cSrcweir 1165*cdf0e10cSrcweir sal_Bool ScUndoAutoFilter::CanRepeat(SfxRepeatTarget& /* rTarget */) const 1166*cdf0e10cSrcweir { 1167*cdf0e10cSrcweir return sal_False; 1168*cdf0e10cSrcweir } 1169*cdf0e10cSrcweir 1170*cdf0e10cSrcweir // 1171*cdf0e10cSrcweir // Datenbankbereiche aendern (Dialog) 1172*cdf0e10cSrcweir // 1173*cdf0e10cSrcweir 1174*cdf0e10cSrcweir ScUndoDBData::ScUndoDBData( ScDocShell* pNewDocShell, 1175*cdf0e10cSrcweir ScDBCollection* pNewUndoColl, ScDBCollection* pNewRedoColl ) : 1176*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 1177*cdf0e10cSrcweir pUndoColl( pNewUndoColl ), 1178*cdf0e10cSrcweir pRedoColl( pNewRedoColl ) 1179*cdf0e10cSrcweir { 1180*cdf0e10cSrcweir } 1181*cdf0e10cSrcweir 1182*cdf0e10cSrcweir __EXPORT ScUndoDBData::~ScUndoDBData() 1183*cdf0e10cSrcweir { 1184*cdf0e10cSrcweir delete pUndoColl; 1185*cdf0e10cSrcweir delete pRedoColl; 1186*cdf0e10cSrcweir } 1187*cdf0e10cSrcweir 1188*cdf0e10cSrcweir String __EXPORT ScUndoDBData::GetComment() const 1189*cdf0e10cSrcweir { // "Datenbankbereiche aendern"; 1190*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_DBDATA ); 1191*cdf0e10cSrcweir } 1192*cdf0e10cSrcweir 1193*cdf0e10cSrcweir void __EXPORT ScUndoDBData::Undo() 1194*cdf0e10cSrcweir { 1195*cdf0e10cSrcweir BeginUndo(); 1196*cdf0e10cSrcweir 1197*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1198*cdf0e10cSrcweir 1199*cdf0e10cSrcweir sal_Bool bOldAutoCalc = pDoc->GetAutoCalc(); 1200*cdf0e10cSrcweir pDoc->SetAutoCalc( sal_False ); // unnoetige Berechnungen vermeiden 1201*cdf0e10cSrcweir pDoc->CompileDBFormula( sal_True ); // CreateFormulaString 1202*cdf0e10cSrcweir pDoc->SetDBCollection( new ScDBCollection(*pUndoColl), sal_True ); 1203*cdf0e10cSrcweir pDoc->CompileDBFormula( sal_False ); // CompileFormulaString 1204*cdf0e10cSrcweir pDoc->SetAutoCalc( bOldAutoCalc ); 1205*cdf0e10cSrcweir 1206*cdf0e10cSrcweir SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) ); 1207*cdf0e10cSrcweir 1208*cdf0e10cSrcweir EndUndo(); 1209*cdf0e10cSrcweir } 1210*cdf0e10cSrcweir 1211*cdf0e10cSrcweir void __EXPORT ScUndoDBData::Redo() 1212*cdf0e10cSrcweir { 1213*cdf0e10cSrcweir BeginRedo(); 1214*cdf0e10cSrcweir 1215*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1216*cdf0e10cSrcweir 1217*cdf0e10cSrcweir sal_Bool bOldAutoCalc = pDoc->GetAutoCalc(); 1218*cdf0e10cSrcweir pDoc->SetAutoCalc( sal_False ); // unnoetige Berechnungen vermeiden 1219*cdf0e10cSrcweir pDoc->CompileDBFormula( sal_True ); // CreateFormulaString 1220*cdf0e10cSrcweir pDoc->SetDBCollection( new ScDBCollection(*pRedoColl), sal_True ); 1221*cdf0e10cSrcweir pDoc->CompileDBFormula( sal_False ); // CompileFormulaString 1222*cdf0e10cSrcweir pDoc->SetAutoCalc( bOldAutoCalc ); 1223*cdf0e10cSrcweir 1224*cdf0e10cSrcweir SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) ); 1225*cdf0e10cSrcweir 1226*cdf0e10cSrcweir EndRedo(); 1227*cdf0e10cSrcweir } 1228*cdf0e10cSrcweir 1229*cdf0e10cSrcweir void __EXPORT ScUndoDBData::Repeat(SfxRepeatTarget& /* rTarget */) 1230*cdf0e10cSrcweir { 1231*cdf0e10cSrcweir } 1232*cdf0e10cSrcweir 1233*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoDBData::CanRepeat(SfxRepeatTarget& /* rTarget */) const 1234*cdf0e10cSrcweir { 1235*cdf0e10cSrcweir return sal_False; // geht nicht 1236*cdf0e10cSrcweir } 1237*cdf0e10cSrcweir 1238*cdf0e10cSrcweir // 1239*cdf0e10cSrcweir // Import 1240*cdf0e10cSrcweir // 1241*cdf0e10cSrcweir 1242*cdf0e10cSrcweir ScUndoImportData::ScUndoImportData( ScDocShell* pNewDocShell, SCTAB nNewTab, 1243*cdf0e10cSrcweir const ScImportParam& rParam, SCCOL nNewEndX, SCROW nNewEndY, 1244*cdf0e10cSrcweir SCCOL nNewFormula, 1245*cdf0e10cSrcweir ScDocument* pNewUndoDoc, ScDocument* pNewRedoDoc, 1246*cdf0e10cSrcweir ScDBData* pNewUndoData, ScDBData* pNewRedoData ) : 1247*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 1248*cdf0e10cSrcweir nTab( nNewTab ), 1249*cdf0e10cSrcweir aImportParam( rParam ), 1250*cdf0e10cSrcweir nEndCol( nNewEndX ), 1251*cdf0e10cSrcweir nEndRow( nNewEndY ), 1252*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 1253*cdf0e10cSrcweir pRedoDoc( pNewRedoDoc ), 1254*cdf0e10cSrcweir pUndoDBData( pNewUndoData ), 1255*cdf0e10cSrcweir pRedoDBData( pNewRedoData ), 1256*cdf0e10cSrcweir nFormulaCols( nNewFormula ), 1257*cdf0e10cSrcweir bRedoFilled( sal_False ) 1258*cdf0e10cSrcweir { 1259*cdf0e10cSrcweir // redo doc doesn't contain imported data (but everything else) 1260*cdf0e10cSrcweir } 1261*cdf0e10cSrcweir 1262*cdf0e10cSrcweir __EXPORT ScUndoImportData::~ScUndoImportData() 1263*cdf0e10cSrcweir { 1264*cdf0e10cSrcweir delete pUndoDoc; 1265*cdf0e10cSrcweir delete pRedoDoc; 1266*cdf0e10cSrcweir delete pUndoDBData; 1267*cdf0e10cSrcweir delete pRedoDBData; 1268*cdf0e10cSrcweir } 1269*cdf0e10cSrcweir 1270*cdf0e10cSrcweir String __EXPORT ScUndoImportData::GetComment() const 1271*cdf0e10cSrcweir { // "Importieren"; 1272*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_IMPORTDATA ); 1273*cdf0e10cSrcweir } 1274*cdf0e10cSrcweir 1275*cdf0e10cSrcweir void __EXPORT ScUndoImportData::Undo() 1276*cdf0e10cSrcweir { 1277*cdf0e10cSrcweir BeginUndo(); 1278*cdf0e10cSrcweir 1279*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1280*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 1281*cdf0e10cSrcweir 1282*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, aImportParam.nCol1,aImportParam.nRow1,nTab, 1283*cdf0e10cSrcweir nEndCol,nEndRow,nTab ); 1284*cdf0e10cSrcweir 1285*cdf0e10cSrcweir SCTAB nTable; 1286*cdf0e10cSrcweir SCCOL nCol1, nCol2; 1287*cdf0e10cSrcweir SCROW nRow1, nRow2; 1288*cdf0e10cSrcweir ScDBData* pCurrentData = NULL; 1289*cdf0e10cSrcweir if (pUndoDBData && pRedoDBData) 1290*cdf0e10cSrcweir { 1291*cdf0e10cSrcweir pRedoDBData->GetArea( nTable, nCol1, nRow1, nCol2, nRow2 ); 1292*cdf0e10cSrcweir pCurrentData = ScUndoUtil::GetOldDBData( pRedoDBData, pDoc, nTab, 1293*cdf0e10cSrcweir nCol1, nRow1, nCol2, nRow2 ); 1294*cdf0e10cSrcweir 1295*cdf0e10cSrcweir if ( !bRedoFilled ) 1296*cdf0e10cSrcweir { 1297*cdf0e10cSrcweir // read redo data from document at first undo 1298*cdf0e10cSrcweir // imported data is deleted later anyway, 1299*cdf0e10cSrcweir // so now delete each column after copying to save memory (#41216#) 1300*cdf0e10cSrcweir 1301*cdf0e10cSrcweir sal_Bool bOldAutoCalc = pDoc->GetAutoCalc(); 1302*cdf0e10cSrcweir pDoc->SetAutoCalc( sal_False ); // outside of the loop 1303*cdf0e10cSrcweir for (SCCOL nCopyCol = nCol1; nCopyCol <= nCol2; nCopyCol++) 1304*cdf0e10cSrcweir { 1305*cdf0e10cSrcweir pDoc->CopyToDocument( nCopyCol,nRow1,nTab, nCopyCol,nRow2,nTab, 1306*cdf0e10cSrcweir IDF_CONTENTS & ~IDF_NOTE, sal_False, pRedoDoc ); 1307*cdf0e10cSrcweir pDoc->DeleteAreaTab( nCopyCol,nRow1, nCopyCol,nRow2, nTab, IDF_CONTENTS & ~IDF_NOTE ); 1308*cdf0e10cSrcweir pDoc->DoColResize( nTab, nCopyCol, nCopyCol, 0 ); 1309*cdf0e10cSrcweir } 1310*cdf0e10cSrcweir pDoc->SetAutoCalc( bOldAutoCalc ); 1311*cdf0e10cSrcweir bRedoFilled = sal_True; 1312*cdf0e10cSrcweir } 1313*cdf0e10cSrcweir } 1314*cdf0e10cSrcweir sal_Bool bMoveCells = pUndoDBData && pRedoDBData && 1315*cdf0e10cSrcweir pRedoDBData->IsDoSize(); // in alt und neu gleich 1316*cdf0e10cSrcweir if (bMoveCells) 1317*cdf0e10cSrcweir { 1318*cdf0e10cSrcweir // Undo: erst die neuen Daten loeschen, dann FitBlock rueckwaerts 1319*cdf0e10cSrcweir 1320*cdf0e10cSrcweir ScRange aOld, aNew; 1321*cdf0e10cSrcweir pUndoDBData->GetArea( aOld ); 1322*cdf0e10cSrcweir pRedoDBData->GetArea( aNew ); 1323*cdf0e10cSrcweir 1324*cdf0e10cSrcweir pDoc->DeleteAreaTab( aNew.aStart.Col(), aNew.aStart.Row(), 1325*cdf0e10cSrcweir aNew.aEnd.Col(), aNew.aEnd.Row(), nTab, IDF_ALL & ~IDF_NOTE ); 1326*cdf0e10cSrcweir 1327*cdf0e10cSrcweir aOld.aEnd.SetCol( aOld.aEnd.Col() + nFormulaCols ); // FitBlock auch fuer Formeln 1328*cdf0e10cSrcweir aNew.aEnd.SetCol( aNew.aEnd.Col() + nFormulaCols ); 1329*cdf0e10cSrcweir pDoc->FitBlock( aNew, aOld, sal_False ); // rueckwaerts 1330*cdf0e10cSrcweir } 1331*cdf0e10cSrcweir else 1332*cdf0e10cSrcweir pDoc->DeleteAreaTab( aImportParam.nCol1,aImportParam.nRow1, 1333*cdf0e10cSrcweir nEndCol,nEndRow, nTab, IDF_ALL & ~IDF_NOTE ); 1334*cdf0e10cSrcweir 1335*cdf0e10cSrcweir pUndoDoc->CopyToDocument( aImportParam.nCol1,aImportParam.nRow1,nTab, 1336*cdf0e10cSrcweir nEndCol+nFormulaCols,nEndRow,nTab, 1337*cdf0e10cSrcweir IDF_ALL & ~IDF_NOTE, sal_False, pDoc ); 1338*cdf0e10cSrcweir 1339*cdf0e10cSrcweir if (pCurrentData) 1340*cdf0e10cSrcweir { 1341*cdf0e10cSrcweir *pCurrentData = *pUndoDBData; 1342*cdf0e10cSrcweir 1343*cdf0e10cSrcweir pUndoDBData->GetArea( nTable, nCol1, nRow1, nCol2, nRow2 ); 1344*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, nCol1, nRow1, nTable, nCol2, nRow2, nTable ); 1345*cdf0e10cSrcweir } 1346*cdf0e10cSrcweir 1347*cdf0e10cSrcweir // erack! it's broadcasted 1348*cdf0e10cSrcweir // pDoc->SetDirty(); 1349*cdf0e10cSrcweir 1350*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 1351*cdf0e10cSrcweir if ( nVisTab != nTab ) 1352*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 1353*cdf0e10cSrcweir 1354*cdf0e10cSrcweir if (bMoveCells) 1355*cdf0e10cSrcweir pDocShell->PostPaint( 0,0,nTab, MAXCOL,MAXROW,nTab, PAINT_GRID ); 1356*cdf0e10cSrcweir else 1357*cdf0e10cSrcweir pDocShell->PostPaint( aImportParam.nCol1,aImportParam.nRow1,nTab, 1358*cdf0e10cSrcweir nEndCol,nEndRow,nTab, PAINT_GRID ); 1359*cdf0e10cSrcweir pDocShell->PostDataChanged(); 1360*cdf0e10cSrcweir 1361*cdf0e10cSrcweir EndUndo(); 1362*cdf0e10cSrcweir } 1363*cdf0e10cSrcweir 1364*cdf0e10cSrcweir void __EXPORT ScUndoImportData::Redo() 1365*cdf0e10cSrcweir { 1366*cdf0e10cSrcweir BeginRedo(); 1367*cdf0e10cSrcweir 1368*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1369*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 1370*cdf0e10cSrcweir 1371*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, aImportParam.nCol1,aImportParam.nRow1,nTab, 1372*cdf0e10cSrcweir nEndCol,nEndRow,nTab ); 1373*cdf0e10cSrcweir 1374*cdf0e10cSrcweir SCTAB nTable; 1375*cdf0e10cSrcweir SCCOL nCol1, nCol2; 1376*cdf0e10cSrcweir SCROW nRow1, nRow2; 1377*cdf0e10cSrcweir ScDBData* pCurrentData = NULL; 1378*cdf0e10cSrcweir if (pUndoDBData && pRedoDBData) 1379*cdf0e10cSrcweir { 1380*cdf0e10cSrcweir pUndoDBData->GetArea( nTable, nCol1, nRow1, nCol2, nRow2 ); 1381*cdf0e10cSrcweir pCurrentData = ScUndoUtil::GetOldDBData( pUndoDBData, pDoc, nTab, 1382*cdf0e10cSrcweir nCol1, nRow1, nCol2, nRow2 ); 1383*cdf0e10cSrcweir } 1384*cdf0e10cSrcweir sal_Bool bMoveCells = pUndoDBData && pRedoDBData && 1385*cdf0e10cSrcweir pRedoDBData->IsDoSize(); // in alt und neu gleich 1386*cdf0e10cSrcweir if (bMoveCells) 1387*cdf0e10cSrcweir { 1388*cdf0e10cSrcweir // Redo: FitBlock, dann Daten loeschen (noetig fuer CopyToDocument) 1389*cdf0e10cSrcweir 1390*cdf0e10cSrcweir ScRange aOld, aNew; 1391*cdf0e10cSrcweir pUndoDBData->GetArea( aOld ); 1392*cdf0e10cSrcweir pRedoDBData->GetArea( aNew ); 1393*cdf0e10cSrcweir 1394*cdf0e10cSrcweir aOld.aEnd.SetCol( aOld.aEnd.Col() + nFormulaCols ); // FitBlock auch fuer Formeln 1395*cdf0e10cSrcweir aNew.aEnd.SetCol( aNew.aEnd.Col() + nFormulaCols ); 1396*cdf0e10cSrcweir pDoc->FitBlock( aOld, aNew ); 1397*cdf0e10cSrcweir 1398*cdf0e10cSrcweir pDoc->DeleteAreaTab( aNew.aStart.Col(), aNew.aStart.Row(), 1399*cdf0e10cSrcweir aNew.aEnd.Col(), aNew.aEnd.Row(), nTab, IDF_ALL & ~IDF_NOTE ); 1400*cdf0e10cSrcweir 1401*cdf0e10cSrcweir pRedoDoc->CopyToDocument( aNew, IDF_ALL & ~IDF_NOTE, sal_False, pDoc ); // incl. Formeln 1402*cdf0e10cSrcweir } 1403*cdf0e10cSrcweir else 1404*cdf0e10cSrcweir { 1405*cdf0e10cSrcweir pDoc->DeleteAreaTab( aImportParam.nCol1,aImportParam.nRow1, 1406*cdf0e10cSrcweir nEndCol,nEndRow, nTab, IDF_ALL & ~IDF_NOTE ); 1407*cdf0e10cSrcweir pRedoDoc->CopyToDocument( aImportParam.nCol1,aImportParam.nRow1,nTab, 1408*cdf0e10cSrcweir nEndCol,nEndRow,nTab, IDF_ALL & ~IDF_NOTE, sal_False, pDoc ); 1409*cdf0e10cSrcweir } 1410*cdf0e10cSrcweir 1411*cdf0e10cSrcweir if (pCurrentData) 1412*cdf0e10cSrcweir { 1413*cdf0e10cSrcweir *pCurrentData = *pRedoDBData; 1414*cdf0e10cSrcweir 1415*cdf0e10cSrcweir pRedoDBData->GetArea( nTable, nCol1, nRow1, nCol2, nRow2 ); 1416*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, nCol1, nRow1, nTable, nCol2, nRow2, nTable ); 1417*cdf0e10cSrcweir } 1418*cdf0e10cSrcweir 1419*cdf0e10cSrcweir // erack! it's broadcasted 1420*cdf0e10cSrcweir // pDoc->SetDirty(); 1421*cdf0e10cSrcweir 1422*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 1423*cdf0e10cSrcweir if ( nVisTab != nTab ) 1424*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 1425*cdf0e10cSrcweir 1426*cdf0e10cSrcweir if (bMoveCells) 1427*cdf0e10cSrcweir pDocShell->PostPaint( 0,0,nTab, MAXCOL,MAXROW,nTab, PAINT_GRID ); 1428*cdf0e10cSrcweir else 1429*cdf0e10cSrcweir pDocShell->PostPaint( aImportParam.nCol1,aImportParam.nRow1,nTab, 1430*cdf0e10cSrcweir nEndCol,nEndRow,nTab, PAINT_GRID ); 1431*cdf0e10cSrcweir pDocShell->PostDataChanged(); 1432*cdf0e10cSrcweir 1433*cdf0e10cSrcweir EndRedo(); 1434*cdf0e10cSrcweir } 1435*cdf0e10cSrcweir 1436*cdf0e10cSrcweir void __EXPORT ScUndoImportData::Repeat(SfxRepeatTarget& rTarget) 1437*cdf0e10cSrcweir { 1438*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 1439*cdf0e10cSrcweir { 1440*cdf0e10cSrcweir ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell(); 1441*cdf0e10cSrcweir 1442*cdf0e10cSrcweir SCTAB nDummy; 1443*cdf0e10cSrcweir ScImportParam aNewParam(aImportParam); 1444*cdf0e10cSrcweir ScDBData* pDBData = rViewShell.GetDBData(); 1445*cdf0e10cSrcweir pDBData->GetArea( nDummy, aNewParam.nCol1,aNewParam.nRow1, aNewParam.nCol2,aNewParam.nRow2 ); 1446*cdf0e10cSrcweir 1447*cdf0e10cSrcweir rViewShell.ImportData( aNewParam ); 1448*cdf0e10cSrcweir } 1449*cdf0e10cSrcweir } 1450*cdf0e10cSrcweir 1451*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoImportData::CanRepeat(SfxRepeatTarget& rTarget) const 1452*cdf0e10cSrcweir { 1453*cdf0e10cSrcweir // Repeat nur fuer Import per DB-Bereich, dann ist pUndoDBData gesetzt 1454*cdf0e10cSrcweir 1455*cdf0e10cSrcweir if (pUndoDBData) 1456*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 1457*cdf0e10cSrcweir else 1458*cdf0e10cSrcweir return sal_False; // Adressbuch 1459*cdf0e10cSrcweir } 1460*cdf0e10cSrcweir 1461*cdf0e10cSrcweir // 1462*cdf0e10cSrcweir // Operationen wiederholen 1463*cdf0e10cSrcweir // 1464*cdf0e10cSrcweir 1465*cdf0e10cSrcweir ScUndoRepeatDB::ScUndoRepeatDB( ScDocShell* pNewDocShell, SCTAB nNewTab, 1466*cdf0e10cSrcweir SCCOL nStartX, SCROW nStartY, SCCOL nEndX, SCROW nEndY, 1467*cdf0e10cSrcweir SCROW nResultEndRow, SCCOL nCurX, SCROW nCurY, 1468*cdf0e10cSrcweir ScDocument* pNewUndoDoc, ScOutlineTable* pNewUndoTab, 1469*cdf0e10cSrcweir ScRangeName* pNewUndoRange, ScDBCollection* pNewUndoDB, 1470*cdf0e10cSrcweir const ScRange* pOldQ, const ScRange* pNewQ ) : 1471*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 1472*cdf0e10cSrcweir aBlockStart( nStartX,nStartY,nNewTab ), 1473*cdf0e10cSrcweir aBlockEnd( nEndX,nEndY,nNewTab ), 1474*cdf0e10cSrcweir nNewEndRow( nResultEndRow ), 1475*cdf0e10cSrcweir aCursorPos( nCurX,nCurY,nNewTab ), 1476*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 1477*cdf0e10cSrcweir pUndoTable( pNewUndoTab ), 1478*cdf0e10cSrcweir pUndoRange( pNewUndoRange ), 1479*cdf0e10cSrcweir pUndoDB( pNewUndoDB ), 1480*cdf0e10cSrcweir bQuerySize( sal_False ) 1481*cdf0e10cSrcweir { 1482*cdf0e10cSrcweir if ( pOldQ && pNewQ ) 1483*cdf0e10cSrcweir { 1484*cdf0e10cSrcweir aOldQuery = *pOldQ; 1485*cdf0e10cSrcweir aNewQuery = *pNewQ; 1486*cdf0e10cSrcweir bQuerySize = sal_True;; 1487*cdf0e10cSrcweir } 1488*cdf0e10cSrcweir } 1489*cdf0e10cSrcweir 1490*cdf0e10cSrcweir __EXPORT ScUndoRepeatDB::~ScUndoRepeatDB() 1491*cdf0e10cSrcweir { 1492*cdf0e10cSrcweir delete pUndoDoc; 1493*cdf0e10cSrcweir delete pUndoTable; 1494*cdf0e10cSrcweir delete pUndoRange; 1495*cdf0e10cSrcweir delete pUndoDB; 1496*cdf0e10cSrcweir } 1497*cdf0e10cSrcweir 1498*cdf0e10cSrcweir String __EXPORT ScUndoRepeatDB::GetComment() const 1499*cdf0e10cSrcweir { // "Wiederholen"; //! bessere Beschreibung! 1500*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_REPEATDB ); 1501*cdf0e10cSrcweir } 1502*cdf0e10cSrcweir 1503*cdf0e10cSrcweir void __EXPORT ScUndoRepeatDB::Undo() 1504*cdf0e10cSrcweir { 1505*cdf0e10cSrcweir BeginUndo(); 1506*cdf0e10cSrcweir 1507*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1508*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 1509*cdf0e10cSrcweir SCTAB nTab = aBlockStart.Tab(); 1510*cdf0e10cSrcweir 1511*cdf0e10cSrcweir if (bQuerySize) 1512*cdf0e10cSrcweir { 1513*cdf0e10cSrcweir pDoc->FitBlock( aNewQuery, aOldQuery, sal_False ); 1514*cdf0e10cSrcweir 1515*cdf0e10cSrcweir if ( aNewQuery.aEnd.Col() == aOldQuery.aEnd.Col() ) 1516*cdf0e10cSrcweir { 1517*cdf0e10cSrcweir SCCOL nFormulaCols = 0; 1518*cdf0e10cSrcweir SCCOL nCol = aOldQuery.aEnd.Col() + 1; 1519*cdf0e10cSrcweir SCROW nRow = aOldQuery.aStart.Row() + 1; //! Header testen 1520*cdf0e10cSrcweir while ( nCol <= MAXCOL && 1521*cdf0e10cSrcweir pDoc->GetCellType(ScAddress( nCol, nRow, nTab )) == CELLTYPE_FORMULA ) 1522*cdf0e10cSrcweir ++nCol, ++nFormulaCols; 1523*cdf0e10cSrcweir 1524*cdf0e10cSrcweir if ( nFormulaCols > 0 ) 1525*cdf0e10cSrcweir { 1526*cdf0e10cSrcweir ScRange aOldForm = aOldQuery; 1527*cdf0e10cSrcweir aOldForm.aStart.SetCol( aOldQuery.aEnd.Col() + 1 ); 1528*cdf0e10cSrcweir aOldForm.aEnd.SetCol( aOldQuery.aEnd.Col() + nFormulaCols ); 1529*cdf0e10cSrcweir ScRange aNewForm = aOldForm; 1530*cdf0e10cSrcweir aNewForm.aEnd.SetRow( aNewQuery.aEnd.Row() ); 1531*cdf0e10cSrcweir pDoc->FitBlock( aNewForm, aOldForm, sal_False ); 1532*cdf0e10cSrcweir } 1533*cdf0e10cSrcweir } 1534*cdf0e10cSrcweir } 1535*cdf0e10cSrcweir 1536*cdf0e10cSrcweir //! Daten von Filter in anderen Bereich fehlen noch !!!!!!!!!!!!!!!!! 1537*cdf0e10cSrcweir 1538*cdf0e10cSrcweir if (nNewEndRow > aBlockEnd.Row()) 1539*cdf0e10cSrcweir { 1540*cdf0e10cSrcweir pDoc->DeleteRow( 0,nTab, MAXCOL,nTab, aBlockEnd.Row()+1, static_cast<SCSIZE>(nNewEndRow-aBlockEnd.Row()) ); 1541*cdf0e10cSrcweir } 1542*cdf0e10cSrcweir else if (nNewEndRow < aBlockEnd.Row()) 1543*cdf0e10cSrcweir { 1544*cdf0e10cSrcweir pDoc->InsertRow( 0,nTab, MAXCOL,nTab, nNewEndRow+1, static_cast<SCSIZE>(nNewEndRow-aBlockEnd.Row()) ); 1545*cdf0e10cSrcweir } 1546*cdf0e10cSrcweir 1547*cdf0e10cSrcweir // Original Outline-Table 1548*cdf0e10cSrcweir 1549*cdf0e10cSrcweir pDoc->SetOutlineTable( nTab, pUndoTable ); 1550*cdf0e10cSrcweir 1551*cdf0e10cSrcweir // Original Spalten-/Zeilenstatus 1552*cdf0e10cSrcweir 1553*cdf0e10cSrcweir if (pUndoDoc && pUndoTable) 1554*cdf0e10cSrcweir { 1555*cdf0e10cSrcweir SCCOLROW nStartCol; 1556*cdf0e10cSrcweir SCCOLROW nStartRow; 1557*cdf0e10cSrcweir SCCOLROW nEndCol; 1558*cdf0e10cSrcweir SCCOLROW nEndRow; 1559*cdf0e10cSrcweir pUndoTable->GetColArray()->GetRange( nStartCol, nEndCol ); 1560*cdf0e10cSrcweir pUndoTable->GetRowArray()->GetRange( nStartRow, nEndRow ); 1561*cdf0e10cSrcweir 1562*cdf0e10cSrcweir pUndoDoc->CopyToDocument( static_cast<SCCOL>(nStartCol), 0, nTab, 1563*cdf0e10cSrcweir static_cast<SCCOL>(nEndCol), MAXROW, nTab, IDF_NONE, sal_False, 1564*cdf0e10cSrcweir pDoc ); 1565*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, nStartRow, nTab, MAXCOL, nEndRow, nTab, IDF_NONE, sal_False, pDoc ); 1566*cdf0e10cSrcweir 1567*cdf0e10cSrcweir pViewShell->UpdateScrollBars(); 1568*cdf0e10cSrcweir } 1569*cdf0e10cSrcweir 1570*cdf0e10cSrcweir // Original-Daten & Referenzen 1571*cdf0e10cSrcweir 1572*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, 0, aBlockStart.Row(), nTab, 1573*cdf0e10cSrcweir MAXCOL, aBlockEnd.Row(), nTab ); 1574*cdf0e10cSrcweir pDoc->DeleteAreaTab( 0, aBlockStart.Row(), 1575*cdf0e10cSrcweir MAXCOL, aBlockEnd.Row(), nTab, IDF_ALL ); 1576*cdf0e10cSrcweir 1577*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0, aBlockStart.Row(), nTab, MAXCOL, aBlockEnd.Row(), nTab, 1578*cdf0e10cSrcweir IDF_NONE, sal_False, pDoc ); // Flags 1579*cdf0e10cSrcweir pUndoDoc->UndoToDocument( 0, aBlockStart.Row(), nTab, MAXCOL, aBlockEnd.Row(), nTab, 1580*cdf0e10cSrcweir IDF_ALL, sal_False, pDoc ); 1581*cdf0e10cSrcweir 1582*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, aBlockStart.Col(),aBlockStart.Row(),nTab, 1583*cdf0e10cSrcweir aBlockEnd.Col(),aBlockEnd.Row(),nTab ); 1584*cdf0e10cSrcweir 1585*cdf0e10cSrcweir if (pUndoRange) 1586*cdf0e10cSrcweir pDoc->SetRangeName( new ScRangeName( *pUndoRange ) ); 1587*cdf0e10cSrcweir if (pUndoDB) 1588*cdf0e10cSrcweir pDoc->SetDBCollection( new ScDBCollection( *pUndoDB ), sal_True ); 1589*cdf0e10cSrcweir 1590*cdf0e10cSrcweir // erack! it's broadcasted 1591*cdf0e10cSrcweir // pDoc->SetDirty(); 1592*cdf0e10cSrcweir 1593*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 1594*cdf0e10cSrcweir if ( nVisTab != nTab ) 1595*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 1596*cdf0e10cSrcweir 1597*cdf0e10cSrcweir pDocShell->PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_GRID|PAINT_LEFT|PAINT_TOP|PAINT_SIZE); 1598*cdf0e10cSrcweir pDocShell->PostDataChanged(); 1599*cdf0e10cSrcweir 1600*cdf0e10cSrcweir EndUndo(); 1601*cdf0e10cSrcweir } 1602*cdf0e10cSrcweir 1603*cdf0e10cSrcweir void __EXPORT ScUndoRepeatDB::Redo() 1604*cdf0e10cSrcweir { 1605*cdf0e10cSrcweir BeginRedo(); 1606*cdf0e10cSrcweir 1607*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 1608*cdf0e10cSrcweir SCTAB nTab = aBlockStart.Tab(); 1609*cdf0e10cSrcweir 1610*cdf0e10cSrcweir SCTAB nVisTab = pViewShell->GetViewData()->GetTabNo(); 1611*cdf0e10cSrcweir if ( nVisTab != nTab ) 1612*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 1613*cdf0e10cSrcweir 1614*cdf0e10cSrcweir ScUndoUtil::MarkSimpleBlock( pDocShell, aBlockStart.Col(),aBlockStart.Row(),nTab, 1615*cdf0e10cSrcweir aBlockEnd.Col(),aBlockEnd.Row(),nTab ); 1616*cdf0e10cSrcweir pViewShell->SetCursor( aCursorPos.Col(), aCursorPos.Row() ); 1617*cdf0e10cSrcweir 1618*cdf0e10cSrcweir pViewShell->RepeatDB( sal_False ); 1619*cdf0e10cSrcweir 1620*cdf0e10cSrcweir EndRedo(); 1621*cdf0e10cSrcweir } 1622*cdf0e10cSrcweir 1623*cdf0e10cSrcweir void __EXPORT ScUndoRepeatDB::Repeat(SfxRepeatTarget& rTarget) 1624*cdf0e10cSrcweir { 1625*cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget)) 1626*cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->RepeatDB( sal_True ); 1627*cdf0e10cSrcweir } 1628*cdf0e10cSrcweir 1629*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoRepeatDB::CanRepeat(SfxRepeatTarget& rTarget) const 1630*cdf0e10cSrcweir { 1631*cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget)); 1632*cdf0e10cSrcweir } 1633*cdf0e10cSrcweir 1634*cdf0e10cSrcweir //UNUSED2008-05 // 1635*cdf0e10cSrcweir //UNUSED2008-05 // Pivot-Tabellen 1636*cdf0e10cSrcweir //UNUSED2008-05 // 1637*cdf0e10cSrcweir //UNUSED2008-05 1638*cdf0e10cSrcweir //UNUSED2008-05 ScUndoPivot::ScUndoPivot( ScDocShell* pNewDocShell, 1639*cdf0e10cSrcweir //UNUSED2008-05 const ScArea& rOld, const ScArea& rNew, 1640*cdf0e10cSrcweir //UNUSED2008-05 ScDocument* pOldDoc, ScDocument* pNewDoc, 1641*cdf0e10cSrcweir //UNUSED2008-05 const ScPivot* pOldPivot, const ScPivot* pNewPivot ) : 1642*cdf0e10cSrcweir //UNUSED2008-05 ScSimpleUndo( pNewDocShell ), 1643*cdf0e10cSrcweir //UNUSED2008-05 aOldArea( rOld ), 1644*cdf0e10cSrcweir //UNUSED2008-05 aNewArea( rNew ), 1645*cdf0e10cSrcweir //UNUSED2008-05 pOldUndoDoc( pOldDoc ), 1646*cdf0e10cSrcweir //UNUSED2008-05 pNewUndoDoc( pNewDoc ) 1647*cdf0e10cSrcweir //UNUSED2008-05 { 1648*cdf0e10cSrcweir //UNUSED2008-05 if (pNewPivot) 1649*cdf0e10cSrcweir //UNUSED2008-05 { 1650*cdf0e10cSrcweir //UNUSED2008-05 pNewPivot->GetParam( aNewParam, aNewQuery, aNewSrc ); 1651*cdf0e10cSrcweir //UNUSED2008-05 aNewName = pNewPivot->GetName(); 1652*cdf0e10cSrcweir //UNUSED2008-05 aNewTag = pNewPivot->GetTag(); 1653*cdf0e10cSrcweir //UNUSED2008-05 } 1654*cdf0e10cSrcweir //UNUSED2008-05 if (pOldPivot) 1655*cdf0e10cSrcweir //UNUSED2008-05 { 1656*cdf0e10cSrcweir //UNUSED2008-05 pOldPivot->GetParam( aOldParam, aOldQuery, aOldSrc ); 1657*cdf0e10cSrcweir //UNUSED2008-05 aOldName = pOldPivot->GetName(); 1658*cdf0e10cSrcweir //UNUSED2008-05 aOldTag = pOldPivot->GetTag(); 1659*cdf0e10cSrcweir //UNUSED2008-05 } 1660*cdf0e10cSrcweir //UNUSED2008-05 } 1661*cdf0e10cSrcweir //UNUSED2008-05 1662*cdf0e10cSrcweir //UNUSED2008-05 __EXPORT ScUndoPivot::~ScUndoPivot() 1663*cdf0e10cSrcweir //UNUSED2008-05 { 1664*cdf0e10cSrcweir //UNUSED2008-05 delete pOldUndoDoc; 1665*cdf0e10cSrcweir //UNUSED2008-05 delete pNewUndoDoc; 1666*cdf0e10cSrcweir //UNUSED2008-05 } 1667*cdf0e10cSrcweir //UNUSED2008-05 1668*cdf0e10cSrcweir //UNUSED2008-05 String __EXPORT ScUndoPivot::GetComment() const 1669*cdf0e10cSrcweir //UNUSED2008-05 { 1670*cdf0e10cSrcweir //UNUSED2008-05 sal_uInt16 nIndex; 1671*cdf0e10cSrcweir //UNUSED2008-05 if ( pOldUndoDoc && pNewUndoDoc ) 1672*cdf0e10cSrcweir //UNUSED2008-05 nIndex = STR_UNDO_PIVOT_MODIFY; 1673*cdf0e10cSrcweir //UNUSED2008-05 else if ( pNewUndoDoc ) 1674*cdf0e10cSrcweir //UNUSED2008-05 nIndex = STR_UNDO_PIVOT_NEW; 1675*cdf0e10cSrcweir //UNUSED2008-05 else 1676*cdf0e10cSrcweir //UNUSED2008-05 nIndex = STR_UNDO_PIVOT_DELETE; 1677*cdf0e10cSrcweir //UNUSED2008-05 1678*cdf0e10cSrcweir //UNUSED2008-05 return ScGlobal::GetRscString( nIndex ); 1679*cdf0e10cSrcweir //UNUSED2008-05 } 1680*cdf0e10cSrcweir //UNUSED2008-05 1681*cdf0e10cSrcweir //UNUSED2008-05 void __EXPORT ScUndoPivot::Undo() 1682*cdf0e10cSrcweir //UNUSED2008-05 { 1683*cdf0e10cSrcweir //UNUSED2008-05 BeginUndo(); 1684*cdf0e10cSrcweir //UNUSED2008-05 1685*cdf0e10cSrcweir //UNUSED2008-05 ScDocument* pDoc = pDocShell->GetDocument(); 1686*cdf0e10cSrcweir //UNUSED2008-05 1687*cdf0e10cSrcweir //UNUSED2008-05 if (pNewUndoDoc) 1688*cdf0e10cSrcweir //UNUSED2008-05 { 1689*cdf0e10cSrcweir //UNUSED2008-05 pDoc->DeleteAreaTab( aNewArea.nColStart,aNewArea.nRowStart, 1690*cdf0e10cSrcweir //UNUSED2008-05 aNewArea.nColEnd,aNewArea.nRowEnd, aNewArea.nTab, IDF_ALL ); 1691*cdf0e10cSrcweir //UNUSED2008-05 pNewUndoDoc->CopyToDocument( aNewArea.nColStart, aNewArea.nRowStart, aNewArea.nTab, 1692*cdf0e10cSrcweir //UNUSED2008-05 aNewArea.nColEnd, aNewArea.nRowEnd, aNewArea.nTab, 1693*cdf0e10cSrcweir //UNUSED2008-05 IDF_ALL, sal_False, pDoc ); 1694*cdf0e10cSrcweir //UNUSED2008-05 } 1695*cdf0e10cSrcweir //UNUSED2008-05 if (pOldUndoDoc) 1696*cdf0e10cSrcweir //UNUSED2008-05 { 1697*cdf0e10cSrcweir //UNUSED2008-05 pDoc->DeleteAreaTab( aOldArea.nColStart,aOldArea.nRowStart, 1698*cdf0e10cSrcweir //UNUSED2008-05 aOldArea.nColEnd,aOldArea.nRowEnd, aOldArea.nTab, IDF_ALL ); 1699*cdf0e10cSrcweir //UNUSED2008-05 pOldUndoDoc->CopyToDocument( aOldArea.nColStart, aOldArea.nRowStart, aOldArea.nTab, 1700*cdf0e10cSrcweir //UNUSED2008-05 aOldArea.nColEnd, aOldArea.nRowEnd, aOldArea.nTab, 1701*cdf0e10cSrcweir //UNUSED2008-05 IDF_ALL, sal_False, pDoc ); 1702*cdf0e10cSrcweir //UNUSED2008-05 } 1703*cdf0e10cSrcweir //UNUSED2008-05 1704*cdf0e10cSrcweir //UNUSED2008-05 ScPivotCollection* pPivotCollection = pDoc->GetPivotCollection(); 1705*cdf0e10cSrcweir //UNUSED2008-05 if ( pNewUndoDoc ) 1706*cdf0e10cSrcweir //UNUSED2008-05 { 1707*cdf0e10cSrcweir //UNUSED2008-05 ScPivot* pNewPivot = pPivotCollection->GetPivotAtCursor( 1708*cdf0e10cSrcweir //UNUSED2008-05 aNewParam.nCol, aNewParam.nRow, aNewParam.nTab ); 1709*cdf0e10cSrcweir //UNUSED2008-05 if (pNewPivot) 1710*cdf0e10cSrcweir //UNUSED2008-05 pPivotCollection->Free( pNewPivot ); 1711*cdf0e10cSrcweir //UNUSED2008-05 } 1712*cdf0e10cSrcweir //UNUSED2008-05 if ( pOldUndoDoc ) 1713*cdf0e10cSrcweir //UNUSED2008-05 { 1714*cdf0e10cSrcweir //UNUSED2008-05 ScPivot* pOldPivot = new ScPivot( pDoc ); 1715*cdf0e10cSrcweir //UNUSED2008-05 pOldPivot->SetParam( aOldParam, aOldQuery, aOldSrc ); 1716*cdf0e10cSrcweir //UNUSED2008-05 pOldPivot->SetName( aOldName ); 1717*cdf0e10cSrcweir //UNUSED2008-05 pOldPivot->SetTag( aOldTag ); 1718*cdf0e10cSrcweir //UNUSED2008-05 if (pOldPivot->CreateData()) // Felder berechnen 1719*cdf0e10cSrcweir //UNUSED2008-05 pOldPivot->ReleaseData(); 1720*cdf0e10cSrcweir //UNUSED2008-05 pPivotCollection->Insert( pOldPivot ); 1721*cdf0e10cSrcweir //UNUSED2008-05 } 1722*cdf0e10cSrcweir //UNUSED2008-05 1723*cdf0e10cSrcweir //UNUSED2008-05 // erack! it's broadcasted 1724*cdf0e10cSrcweir //UNUSED2008-05 // pDoc->SetDirty(); 1725*cdf0e10cSrcweir //UNUSED2008-05 if (pNewUndoDoc) 1726*cdf0e10cSrcweir //UNUSED2008-05 pDocShell->PostPaint( aNewArea.nColStart, aNewArea.nRowStart, aNewArea.nTab, 1727*cdf0e10cSrcweir //UNUSED2008-05 aNewArea.nColEnd, aNewArea.nRowEnd, aNewArea.nTab, 1728*cdf0e10cSrcweir //UNUSED2008-05 PAINT_GRID, SC_PF_LINES ); 1729*cdf0e10cSrcweir //UNUSED2008-05 if (pOldUndoDoc) 1730*cdf0e10cSrcweir //UNUSED2008-05 pDocShell->PostPaint( aOldArea.nColStart, aOldArea.nRowStart, aOldArea.nTab, 1731*cdf0e10cSrcweir //UNUSED2008-05 aOldArea.nColEnd, aOldArea.nRowEnd, aOldArea.nTab, 1732*cdf0e10cSrcweir //UNUSED2008-05 PAINT_GRID, SC_PF_LINES ); 1733*cdf0e10cSrcweir //UNUSED2008-05 pDocShell->PostDataChanged(); 1734*cdf0e10cSrcweir //UNUSED2008-05 1735*cdf0e10cSrcweir //UNUSED2008-05 ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 1736*cdf0e10cSrcweir //UNUSED2008-05 if (pViewShell) 1737*cdf0e10cSrcweir //UNUSED2008-05 { 1738*cdf0e10cSrcweir //UNUSED2008-05 SCTAB nTab = pViewShell->GetViewData()->GetTabNo(); 1739*cdf0e10cSrcweir //UNUSED2008-05 if ( pOldUndoDoc ) 1740*cdf0e10cSrcweir //UNUSED2008-05 { 1741*cdf0e10cSrcweir //UNUSED2008-05 if ( nTab != aOldArea.nTab ) 1742*cdf0e10cSrcweir //UNUSED2008-05 pViewShell->SetTabNo( aOldArea.nTab ); 1743*cdf0e10cSrcweir //UNUSED2008-05 } 1744*cdf0e10cSrcweir //UNUSED2008-05 else if ( pNewUndoDoc ) 1745*cdf0e10cSrcweir //UNUSED2008-05 { 1746*cdf0e10cSrcweir //UNUSED2008-05 if ( nTab != aNewArea.nTab ) 1747*cdf0e10cSrcweir //UNUSED2008-05 pViewShell->SetTabNo( aNewArea.nTab ); 1748*cdf0e10cSrcweir //UNUSED2008-05 } 1749*cdf0e10cSrcweir //UNUSED2008-05 } 1750*cdf0e10cSrcweir //UNUSED2008-05 1751*cdf0e10cSrcweir //UNUSED2008-05 EndUndo(); 1752*cdf0e10cSrcweir //UNUSED2008-05 } 1753*cdf0e10cSrcweir //UNUSED2008-05 1754*cdf0e10cSrcweir //UNUSED2008-05 void __EXPORT ScUndoPivot::Redo() 1755*cdf0e10cSrcweir //UNUSED2008-05 { 1756*cdf0e10cSrcweir //UNUSED2008-05 BeginRedo(); 1757*cdf0e10cSrcweir //UNUSED2008-05 1758*cdf0e10cSrcweir //UNUSED2008-05 ScDocument* pDoc = pDocShell->GetDocument(); 1759*cdf0e10cSrcweir //UNUSED2008-05 ScPivotCollection* pPivotCollection = pDoc->GetPivotCollection(); 1760*cdf0e10cSrcweir //UNUSED2008-05 ScPivot* pOldPivot = pPivotCollection->GetPivotAtCursor( 1761*cdf0e10cSrcweir //UNUSED2008-05 aOldParam.nCol, aOldParam.nRow, aOldParam.nTab ); 1762*cdf0e10cSrcweir //UNUSED2008-05 1763*cdf0e10cSrcweir //UNUSED2008-05 ScPivot* pNewPivot = NULL; 1764*cdf0e10cSrcweir //UNUSED2008-05 if (pNewUndoDoc) 1765*cdf0e10cSrcweir //UNUSED2008-05 { 1766*cdf0e10cSrcweir //UNUSED2008-05 pNewPivot = new ScPivot( pDoc ); 1767*cdf0e10cSrcweir //UNUSED2008-05 pNewPivot->SetParam( aNewParam, aNewQuery, aNewSrc ); 1768*cdf0e10cSrcweir //UNUSED2008-05 pNewPivot->SetName( aNewName ); 1769*cdf0e10cSrcweir //UNUSED2008-05 pNewPivot->SetTag( aNewTag ); 1770*cdf0e10cSrcweir //UNUSED2008-05 } 1771*cdf0e10cSrcweir //UNUSED2008-05 1772*cdf0e10cSrcweir //UNUSED2008-05 pDocShell->PivotUpdate( pOldPivot, pNewPivot, sal_False ); 1773*cdf0e10cSrcweir //UNUSED2008-05 1774*cdf0e10cSrcweir //UNUSED2008-05 EndRedo(); 1775*cdf0e10cSrcweir //UNUSED2008-05 } 1776*cdf0e10cSrcweir //UNUSED2008-05 1777*cdf0e10cSrcweir //UNUSED2008-05 void __EXPORT ScUndoPivot::Repeat(SfxRepeatTarget& rTarget) 1778*cdf0e10cSrcweir //UNUSED2008-05 { 1779*cdf0e10cSrcweir //UNUSED2008-05 // Wiederholen: nur loeschen 1780*cdf0e10cSrcweir //UNUSED2008-05 1781*cdf0e10cSrcweir //UNUSED2008-05 if ( pOldUndoDoc && !pNewUndoDoc && rTarget.ISA(ScTabViewTarget) ) 1782*cdf0e10cSrcweir //UNUSED2008-05 ((ScTabViewTarget&)rTarget).GetViewShell()->DeletePivotTable(); 1783*cdf0e10cSrcweir //UNUSED2008-05 } 1784*cdf0e10cSrcweir //UNUSED2008-05 1785*cdf0e10cSrcweir //UNUSED2008-05 sal_Bool __EXPORT ScUndoPivot::CanRepeat(SfxRepeatTarget& rTarget) const 1786*cdf0e10cSrcweir //UNUSED2008-05 { 1787*cdf0e10cSrcweir //UNUSED2008-05 // Wiederholen: nur loeschen 1788*cdf0e10cSrcweir //UNUSED2008-05 1789*cdf0e10cSrcweir //UNUSED2008-05 return ( pOldUndoDoc && !pNewUndoDoc && rTarget.ISA(ScTabViewTarget) ); 1790*cdf0e10cSrcweir //UNUSED2008-05 } 1791*cdf0e10cSrcweir 1792*cdf0e10cSrcweir // 1793*cdf0e10cSrcweir // data pilot 1794*cdf0e10cSrcweir // 1795*cdf0e10cSrcweir 1796*cdf0e10cSrcweir ScUndoDataPilot::ScUndoDataPilot( ScDocShell* pNewDocShell, 1797*cdf0e10cSrcweir ScDocument* pOldDoc, ScDocument* pNewDoc, 1798*cdf0e10cSrcweir const ScDPObject* pOldObj, const ScDPObject* pNewObj, sal_Bool bMove ) : 1799*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 1800*cdf0e10cSrcweir pOldUndoDoc( pOldDoc ), 1801*cdf0e10cSrcweir pNewUndoDoc( pNewDoc ), 1802*cdf0e10cSrcweir pOldDPObject( NULL ), 1803*cdf0e10cSrcweir pNewDPObject( NULL ), 1804*cdf0e10cSrcweir bAllowMove( bMove ) 1805*cdf0e10cSrcweir { 1806*cdf0e10cSrcweir if (pOldObj) 1807*cdf0e10cSrcweir pOldDPObject = new ScDPObject( *pOldObj ); 1808*cdf0e10cSrcweir if (pNewObj) 1809*cdf0e10cSrcweir pNewDPObject = new ScDPObject( *pNewObj ); 1810*cdf0e10cSrcweir } 1811*cdf0e10cSrcweir 1812*cdf0e10cSrcweir __EXPORT ScUndoDataPilot::~ScUndoDataPilot() 1813*cdf0e10cSrcweir { 1814*cdf0e10cSrcweir delete pOldDPObject; 1815*cdf0e10cSrcweir delete pNewDPObject; 1816*cdf0e10cSrcweir delete pOldUndoDoc; 1817*cdf0e10cSrcweir delete pNewUndoDoc; 1818*cdf0e10cSrcweir } 1819*cdf0e10cSrcweir 1820*cdf0e10cSrcweir String __EXPORT ScUndoDataPilot::GetComment() const 1821*cdf0e10cSrcweir { 1822*cdf0e10cSrcweir sal_uInt16 nIndex; 1823*cdf0e10cSrcweir if ( pOldUndoDoc && pNewUndoDoc ) 1824*cdf0e10cSrcweir nIndex = STR_UNDO_PIVOT_MODIFY; 1825*cdf0e10cSrcweir else if ( pNewUndoDoc ) 1826*cdf0e10cSrcweir nIndex = STR_UNDO_PIVOT_NEW; 1827*cdf0e10cSrcweir else 1828*cdf0e10cSrcweir nIndex = STR_UNDO_PIVOT_DELETE; 1829*cdf0e10cSrcweir 1830*cdf0e10cSrcweir return ScGlobal::GetRscString( nIndex ); 1831*cdf0e10cSrcweir } 1832*cdf0e10cSrcweir 1833*cdf0e10cSrcweir void __EXPORT ScUndoDataPilot::Undo() 1834*cdf0e10cSrcweir { 1835*cdf0e10cSrcweir BeginUndo(); 1836*cdf0e10cSrcweir 1837*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1838*cdf0e10cSrcweir 1839*cdf0e10cSrcweir ScRange aOldRange; 1840*cdf0e10cSrcweir ScRange aNewRange; 1841*cdf0e10cSrcweir 1842*cdf0e10cSrcweir if ( pNewDPObject && pNewUndoDoc ) 1843*cdf0e10cSrcweir { 1844*cdf0e10cSrcweir aNewRange = pNewDPObject->GetOutRange(); 1845*cdf0e10cSrcweir pDoc->DeleteAreaTab( aNewRange, IDF_ALL ); 1846*cdf0e10cSrcweir pNewUndoDoc->CopyToDocument( aNewRange, IDF_ALL, sal_False, pDoc ); 1847*cdf0e10cSrcweir } 1848*cdf0e10cSrcweir if ( pOldDPObject && pOldUndoDoc ) 1849*cdf0e10cSrcweir { 1850*cdf0e10cSrcweir aOldRange = pOldDPObject->GetOutRange(); 1851*cdf0e10cSrcweir pDoc->DeleteAreaTab( aOldRange, IDF_ALL ); 1852*cdf0e10cSrcweir pOldUndoDoc->CopyToDocument( aOldRange, IDF_ALL, sal_False, pDoc ); 1853*cdf0e10cSrcweir } 1854*cdf0e10cSrcweir 1855*cdf0e10cSrcweir // update objects in collection 1856*cdf0e10cSrcweir 1857*cdf0e10cSrcweir if ( pNewDPObject ) 1858*cdf0e10cSrcweir { 1859*cdf0e10cSrcweir // find updated object 1860*cdf0e10cSrcweir //! find by name! 1861*cdf0e10cSrcweir 1862*cdf0e10cSrcweir ScDPObject* pDocObj = pDoc->GetDPAtCursor( 1863*cdf0e10cSrcweir aNewRange.aStart.Col(), aNewRange.aStart.Row(), aNewRange.aStart.Tab() ); 1864*cdf0e10cSrcweir DBG_ASSERT(pDocObj, "DPObject not found"); 1865*cdf0e10cSrcweir if (pDocObj) 1866*cdf0e10cSrcweir { 1867*cdf0e10cSrcweir if ( pOldDPObject ) 1868*cdf0e10cSrcweir { 1869*cdf0e10cSrcweir // restore old settings 1870*cdf0e10cSrcweir pOldDPObject->WriteSourceDataTo( *pDocObj ); 1871*cdf0e10cSrcweir ScDPSaveData* pData = pOldDPObject->GetSaveData(); 1872*cdf0e10cSrcweir if (pData) 1873*cdf0e10cSrcweir pDocObj->SetSaveData(*pData); 1874*cdf0e10cSrcweir pDocObj->SetOutRange( pOldDPObject->GetOutRange() ); 1875*cdf0e10cSrcweir pOldDPObject->WriteTempDataTo( *pDocObj ); 1876*cdf0e10cSrcweir } 1877*cdf0e10cSrcweir else 1878*cdf0e10cSrcweir { 1879*cdf0e10cSrcweir // delete inserted object 1880*cdf0e10cSrcweir pDoc->GetDPCollection()->FreeTable(pDocObj); 1881*cdf0e10cSrcweir } 1882*cdf0e10cSrcweir } 1883*cdf0e10cSrcweir } 1884*cdf0e10cSrcweir else if ( pOldDPObject ) 1885*cdf0e10cSrcweir { 1886*cdf0e10cSrcweir // re-insert deleted object 1887*cdf0e10cSrcweir 1888*cdf0e10cSrcweir ScDPObject* pDestObj = new ScDPObject( *pOldDPObject ); 1889*cdf0e10cSrcweir pDestObj->SetAlive(sal_True); 1890*cdf0e10cSrcweir if ( !pDoc->GetDPCollection()->InsertNewTable(pDestObj) ) 1891*cdf0e10cSrcweir { 1892*cdf0e10cSrcweir DBG_ERROR("cannot insert DPObject"); 1893*cdf0e10cSrcweir DELETEZ( pDestObj ); 1894*cdf0e10cSrcweir } 1895*cdf0e10cSrcweir } 1896*cdf0e10cSrcweir 1897*cdf0e10cSrcweir if (pNewUndoDoc) 1898*cdf0e10cSrcweir pDocShell->PostPaint( aNewRange, PAINT_GRID, SC_PF_LINES ); 1899*cdf0e10cSrcweir if (pOldUndoDoc) 1900*cdf0e10cSrcweir pDocShell->PostPaint( aOldRange, PAINT_GRID, SC_PF_LINES ); 1901*cdf0e10cSrcweir pDocShell->PostDataChanged(); 1902*cdf0e10cSrcweir 1903*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 1904*cdf0e10cSrcweir if (pViewShell) 1905*cdf0e10cSrcweir { 1906*cdf0e10cSrcweir //! set current sheet 1907*cdf0e10cSrcweir } 1908*cdf0e10cSrcweir 1909*cdf0e10cSrcweir if (pNewDPObject) 1910*cdf0e10cSrcweir { 1911*cdf0e10cSrcweir // notify API objects 1912*cdf0e10cSrcweir pDoc->BroadcastUno( ScDataPilotModifiedHint( pNewDPObject->GetName() ) ); 1913*cdf0e10cSrcweir } 1914*cdf0e10cSrcweir 1915*cdf0e10cSrcweir EndUndo(); 1916*cdf0e10cSrcweir } 1917*cdf0e10cSrcweir 1918*cdf0e10cSrcweir void __EXPORT ScUndoDataPilot::Redo() 1919*cdf0e10cSrcweir { 1920*cdf0e10cSrcweir BeginRedo(); 1921*cdf0e10cSrcweir 1922*cdf0e10cSrcweir //! copy output data instead of repeating the change, 1923*cdf0e10cSrcweir //! in case external data have changed! 1924*cdf0e10cSrcweir 1925*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1926*cdf0e10cSrcweir 1927*cdf0e10cSrcweir ScDPObject* pSourceObj = NULL; 1928*cdf0e10cSrcweir if ( pOldDPObject ) 1929*cdf0e10cSrcweir { 1930*cdf0e10cSrcweir // find object to modify 1931*cdf0e10cSrcweir //! find by name! 1932*cdf0e10cSrcweir 1933*cdf0e10cSrcweir ScRange aOldRange = pOldDPObject->GetOutRange(); 1934*cdf0e10cSrcweir pSourceObj = pDoc->GetDPAtCursor( 1935*cdf0e10cSrcweir aOldRange.aStart.Col(), aOldRange.aStart.Row(), aOldRange.aStart.Tab() ); 1936*cdf0e10cSrcweir DBG_ASSERT(pSourceObj, "DPObject not found"); 1937*cdf0e10cSrcweir } 1938*cdf0e10cSrcweir 1939*cdf0e10cSrcweir ScDBDocFunc aFunc( *pDocShell ); 1940*cdf0e10cSrcweir aFunc.DataPilotUpdate( pSourceObj, pNewDPObject, sal_False, sal_False, bAllowMove ); // no new undo action 1941*cdf0e10cSrcweir 1942*cdf0e10cSrcweir EndRedo(); 1943*cdf0e10cSrcweir } 1944*cdf0e10cSrcweir 1945*cdf0e10cSrcweir void __EXPORT ScUndoDataPilot::Repeat(SfxRepeatTarget& /* rTarget */) 1946*cdf0e10cSrcweir { 1947*cdf0e10cSrcweir //! allow deletion 1948*cdf0e10cSrcweir } 1949*cdf0e10cSrcweir 1950*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoDataPilot::CanRepeat(SfxRepeatTarget& /* rTarget */) const 1951*cdf0e10cSrcweir { 1952*cdf0e10cSrcweir //! allow deletion 1953*cdf0e10cSrcweir return sal_False; 1954*cdf0e10cSrcweir } 1955*cdf0e10cSrcweir 1956*cdf0e10cSrcweir 1957*cdf0e10cSrcweir // 1958*cdf0e10cSrcweir // Konsolidieren 1959*cdf0e10cSrcweir // 1960*cdf0e10cSrcweir 1961*cdf0e10cSrcweir ScUndoConsolidate::ScUndoConsolidate( ScDocShell* pNewDocShell, const ScArea& rArea, 1962*cdf0e10cSrcweir const ScConsolidateParam& rPar, ScDocument* pNewUndoDoc, 1963*cdf0e10cSrcweir sal_Bool bReference, SCROW nInsCount, ScOutlineTable* pTab, 1964*cdf0e10cSrcweir ScDBData* pData ) : 1965*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 1966*cdf0e10cSrcweir aDestArea( rArea ), 1967*cdf0e10cSrcweir pUndoDoc( pNewUndoDoc ), 1968*cdf0e10cSrcweir aParam( rPar ), 1969*cdf0e10cSrcweir bInsRef( bReference ), 1970*cdf0e10cSrcweir nInsertCount( nInsCount ), 1971*cdf0e10cSrcweir pUndoTab( pTab ), 1972*cdf0e10cSrcweir pUndoData( pData ) 1973*cdf0e10cSrcweir { 1974*cdf0e10cSrcweir } 1975*cdf0e10cSrcweir 1976*cdf0e10cSrcweir __EXPORT ScUndoConsolidate::~ScUndoConsolidate() 1977*cdf0e10cSrcweir { 1978*cdf0e10cSrcweir delete pUndoDoc; 1979*cdf0e10cSrcweir delete pUndoTab; 1980*cdf0e10cSrcweir delete pUndoData; 1981*cdf0e10cSrcweir } 1982*cdf0e10cSrcweir 1983*cdf0e10cSrcweir String __EXPORT ScUndoConsolidate::GetComment() const 1984*cdf0e10cSrcweir { 1985*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_CONSOLIDATE ); 1986*cdf0e10cSrcweir } 1987*cdf0e10cSrcweir 1988*cdf0e10cSrcweir void __EXPORT ScUndoConsolidate::Undo() 1989*cdf0e10cSrcweir { 1990*cdf0e10cSrcweir BeginUndo(); 1991*cdf0e10cSrcweir 1992*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1993*cdf0e10cSrcweir SCTAB nTab = aDestArea.nTab; 1994*cdf0e10cSrcweir 1995*cdf0e10cSrcweir ScRange aOldRange; 1996*cdf0e10cSrcweir if (pUndoData) 1997*cdf0e10cSrcweir pUndoData->GetArea(aOldRange); 1998*cdf0e10cSrcweir 1999*cdf0e10cSrcweir if (bInsRef) 2000*cdf0e10cSrcweir { 2001*cdf0e10cSrcweir // Zeilen loeschen 2002*cdf0e10cSrcweir pDoc->DeleteRow( 0,nTab, MAXCOL,nTab, aDestArea.nRowStart, nInsertCount ); 2003*cdf0e10cSrcweir 2004*cdf0e10cSrcweir // Outlines 2005*cdf0e10cSrcweir pDoc->SetOutlineTable( nTab, pUndoTab ); 2006*cdf0e10cSrcweir 2007*cdf0e10cSrcweir // Zeilenstatus 2008*cdf0e10cSrcweir pUndoDoc->CopyToDocument( 0,0,nTab, MAXCOL,MAXROW,nTab, IDF_NONE, sal_False, pDoc ); 2009*cdf0e10cSrcweir 2010*cdf0e10cSrcweir // Daten & Referenzen 2011*cdf0e10cSrcweir pDoc->DeleteAreaTab( 0,aDestArea.nRowStart, MAXCOL,aDestArea.nRowEnd, nTab, IDF_ALL ); 2012*cdf0e10cSrcweir pUndoDoc->UndoToDocument( 0, aDestArea.nRowStart, nTab, 2013*cdf0e10cSrcweir MAXCOL, aDestArea.nRowEnd, nTab, 2014*cdf0e10cSrcweir IDF_ALL, sal_False, pDoc ); 2015*cdf0e10cSrcweir 2016*cdf0e10cSrcweir // Original-Bereich 2017*cdf0e10cSrcweir if (pUndoData) 2018*cdf0e10cSrcweir { 2019*cdf0e10cSrcweir pDoc->DeleteAreaTab(aOldRange, IDF_ALL); 2020*cdf0e10cSrcweir pUndoDoc->CopyToDocument(aOldRange, IDF_ALL, sal_False, pDoc); 2021*cdf0e10cSrcweir } 2022*cdf0e10cSrcweir 2023*cdf0e10cSrcweir pDocShell->PostPaint( 0,aDestArea.nRowStart,nTab, MAXCOL,MAXROW,nTab, 2024*cdf0e10cSrcweir PAINT_GRID | PAINT_LEFT | PAINT_SIZE ); 2025*cdf0e10cSrcweir } 2026*cdf0e10cSrcweir else 2027*cdf0e10cSrcweir { 2028*cdf0e10cSrcweir pDoc->DeleteAreaTab( aDestArea.nColStart,aDestArea.nRowStart, 2029*cdf0e10cSrcweir aDestArea.nColEnd,aDestArea.nRowEnd, nTab, IDF_ALL ); 2030*cdf0e10cSrcweir pUndoDoc->CopyToDocument( aDestArea.nColStart, aDestArea.nRowStart, nTab, 2031*cdf0e10cSrcweir aDestArea.nColEnd, aDestArea.nRowEnd, nTab, 2032*cdf0e10cSrcweir IDF_ALL, sal_False, pDoc ); 2033*cdf0e10cSrcweir 2034*cdf0e10cSrcweir // Original-Bereich 2035*cdf0e10cSrcweir if (pUndoData) 2036*cdf0e10cSrcweir { 2037*cdf0e10cSrcweir pDoc->DeleteAreaTab(aOldRange, IDF_ALL); 2038*cdf0e10cSrcweir pUndoDoc->CopyToDocument(aOldRange, IDF_ALL, sal_False, pDoc); 2039*cdf0e10cSrcweir } 2040*cdf0e10cSrcweir 2041*cdf0e10cSrcweir SCCOL nEndX = aDestArea.nColEnd; 2042*cdf0e10cSrcweir SCROW nEndY = aDestArea.nRowEnd; 2043*cdf0e10cSrcweir if ( pUndoData ) 2044*cdf0e10cSrcweir { 2045*cdf0e10cSrcweir if ( aOldRange.aEnd.Col() > nEndX ) 2046*cdf0e10cSrcweir nEndX = aOldRange.aEnd.Col(); 2047*cdf0e10cSrcweir if ( aOldRange.aEnd.Row() > nEndY ) 2048*cdf0e10cSrcweir nEndY = aOldRange.aEnd.Row(); 2049*cdf0e10cSrcweir } 2050*cdf0e10cSrcweir pDocShell->PostPaint( aDestArea.nColStart, aDestArea.nRowStart, nTab, 2051*cdf0e10cSrcweir nEndX, nEndY, nTab, PAINT_GRID ); 2052*cdf0e10cSrcweir } 2053*cdf0e10cSrcweir 2054*cdf0e10cSrcweir // DB-Bereich wieder anpassen 2055*cdf0e10cSrcweir if (pUndoData) 2056*cdf0e10cSrcweir { 2057*cdf0e10cSrcweir ScDBCollection* pColl = pDoc->GetDBCollection(); 2058*cdf0e10cSrcweir if (pColl) 2059*cdf0e10cSrcweir { 2060*cdf0e10cSrcweir sal_uInt16 nIndex; 2061*cdf0e10cSrcweir if (pColl->SearchName( pUndoData->GetName(), nIndex )) 2062*cdf0e10cSrcweir { 2063*cdf0e10cSrcweir ScDBData* pDocData = (*pColl)[nIndex]; 2064*cdf0e10cSrcweir if (pDocData) 2065*cdf0e10cSrcweir *pDocData = *pUndoData; 2066*cdf0e10cSrcweir } 2067*cdf0e10cSrcweir else 2068*cdf0e10cSrcweir { 2069*cdf0e10cSrcweir DBG_ERROR("alte DB-Daten nicht gefunden"); 2070*cdf0e10cSrcweir } 2071*cdf0e10cSrcweir } 2072*cdf0e10cSrcweir } 2073*cdf0e10cSrcweir 2074*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 2075*cdf0e10cSrcweir if (pViewShell) 2076*cdf0e10cSrcweir { 2077*cdf0e10cSrcweir SCTAB nViewTab = pViewShell->GetViewData()->GetTabNo(); 2078*cdf0e10cSrcweir if ( nViewTab != nTab ) 2079*cdf0e10cSrcweir pViewShell->SetTabNo( nTab ); 2080*cdf0e10cSrcweir } 2081*cdf0e10cSrcweir 2082*cdf0e10cSrcweir EndUndo(); 2083*cdf0e10cSrcweir } 2084*cdf0e10cSrcweir 2085*cdf0e10cSrcweir void __EXPORT ScUndoConsolidate::Redo() 2086*cdf0e10cSrcweir { 2087*cdf0e10cSrcweir BeginRedo(); 2088*cdf0e10cSrcweir 2089*cdf0e10cSrcweir pDocShell->DoConsolidate( aParam, sal_False ); 2090*cdf0e10cSrcweir 2091*cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); 2092*cdf0e10cSrcweir if (pViewShell) 2093*cdf0e10cSrcweir { 2094*cdf0e10cSrcweir SCTAB nViewTab = pViewShell->GetViewData()->GetTabNo(); 2095*cdf0e10cSrcweir if ( nViewTab != aParam.nTab ) 2096*cdf0e10cSrcweir pViewShell->SetTabNo( aParam.nTab ); 2097*cdf0e10cSrcweir } 2098*cdf0e10cSrcweir 2099*cdf0e10cSrcweir EndRedo(); 2100*cdf0e10cSrcweir } 2101*cdf0e10cSrcweir 2102*cdf0e10cSrcweir void __EXPORT ScUndoConsolidate::Repeat(SfxRepeatTarget& /* rTarget */) 2103*cdf0e10cSrcweir { 2104*cdf0e10cSrcweir } 2105*cdf0e10cSrcweir 2106*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoConsolidate::CanRepeat(SfxRepeatTarget& /* rTarget */) const 2107*cdf0e10cSrcweir { 2108*cdf0e10cSrcweir return sal_False; 2109*cdf0e10cSrcweir } 2110*cdf0e10cSrcweir 2111*cdf0e10cSrcweir 2112*cdf0e10cSrcweir // 2113*cdf0e10cSrcweir // Quell-Daten von Chart aendern 2114*cdf0e10cSrcweir // 2115*cdf0e10cSrcweir 2116*cdf0e10cSrcweir void ScUndoChartData::Init() 2117*cdf0e10cSrcweir { 2118*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2119*cdf0e10cSrcweir aOldRangeListRef = new ScRangeList; 2120*cdf0e10cSrcweir pDoc->GetOldChartParameters( aChartName, *aOldRangeListRef, bOldColHeaders, bOldRowHeaders ); 2121*cdf0e10cSrcweir } 2122*cdf0e10cSrcweir 2123*cdf0e10cSrcweir ScUndoChartData::ScUndoChartData( ScDocShell* pNewDocShell, const String& rName, 2124*cdf0e10cSrcweir const ScRange& rNew, sal_Bool bColHdr, sal_Bool bRowHdr, 2125*cdf0e10cSrcweir sal_Bool bAdd ) : 2126*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 2127*cdf0e10cSrcweir aChartName( rName ), 2128*cdf0e10cSrcweir bNewColHeaders( bColHdr ), 2129*cdf0e10cSrcweir bNewRowHeaders( bRowHdr ), 2130*cdf0e10cSrcweir bAddRange( bAdd ) 2131*cdf0e10cSrcweir { 2132*cdf0e10cSrcweir aNewRangeListRef = new ScRangeList; 2133*cdf0e10cSrcweir aNewRangeListRef->Append( rNew ); 2134*cdf0e10cSrcweir 2135*cdf0e10cSrcweir Init(); 2136*cdf0e10cSrcweir } 2137*cdf0e10cSrcweir 2138*cdf0e10cSrcweir ScUndoChartData::ScUndoChartData( ScDocShell* pNewDocShell, const String& rName, 2139*cdf0e10cSrcweir const ScRangeListRef& rNew, sal_Bool bColHdr, sal_Bool bRowHdr, 2140*cdf0e10cSrcweir sal_Bool bAdd ) : 2141*cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ), 2142*cdf0e10cSrcweir aChartName( rName ), 2143*cdf0e10cSrcweir aNewRangeListRef( rNew ), 2144*cdf0e10cSrcweir bNewColHeaders( bColHdr ), 2145*cdf0e10cSrcweir bNewRowHeaders( bRowHdr ), 2146*cdf0e10cSrcweir bAddRange( bAdd ) 2147*cdf0e10cSrcweir { 2148*cdf0e10cSrcweir Init(); 2149*cdf0e10cSrcweir } 2150*cdf0e10cSrcweir 2151*cdf0e10cSrcweir __EXPORT ScUndoChartData::~ScUndoChartData() 2152*cdf0e10cSrcweir { 2153*cdf0e10cSrcweir } 2154*cdf0e10cSrcweir 2155*cdf0e10cSrcweir String __EXPORT ScUndoChartData::GetComment() const 2156*cdf0e10cSrcweir { 2157*cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_CHARTDATA ); 2158*cdf0e10cSrcweir } 2159*cdf0e10cSrcweir 2160*cdf0e10cSrcweir void __EXPORT ScUndoChartData::Undo() 2161*cdf0e10cSrcweir { 2162*cdf0e10cSrcweir BeginUndo(); 2163*cdf0e10cSrcweir 2164*cdf0e10cSrcweir pDocShell->GetDocument()->UpdateChartArea( aChartName, aOldRangeListRef, 2165*cdf0e10cSrcweir bOldColHeaders, bOldRowHeaders, sal_False ); 2166*cdf0e10cSrcweir 2167*cdf0e10cSrcweir EndUndo(); 2168*cdf0e10cSrcweir } 2169*cdf0e10cSrcweir 2170*cdf0e10cSrcweir void __EXPORT ScUndoChartData::Redo() 2171*cdf0e10cSrcweir { 2172*cdf0e10cSrcweir BeginRedo(); 2173*cdf0e10cSrcweir 2174*cdf0e10cSrcweir pDocShell->GetDocument()->UpdateChartArea( aChartName, aNewRangeListRef, 2175*cdf0e10cSrcweir bNewColHeaders, bNewRowHeaders, bAddRange ); 2176*cdf0e10cSrcweir 2177*cdf0e10cSrcweir EndRedo(); 2178*cdf0e10cSrcweir } 2179*cdf0e10cSrcweir 2180*cdf0e10cSrcweir void __EXPORT ScUndoChartData::Repeat(SfxRepeatTarget& /* rTarget */) 2181*cdf0e10cSrcweir { 2182*cdf0e10cSrcweir } 2183*cdf0e10cSrcweir 2184*cdf0e10cSrcweir sal_Bool __EXPORT ScUndoChartData::CanRepeat(SfxRepeatTarget& /* rTarget */) const 2185*cdf0e10cSrcweir { 2186*cdf0e10cSrcweir return sal_False; 2187*cdf0e10cSrcweir } 2188*cdf0e10cSrcweir 2189*cdf0e10cSrcweir 2190*cdf0e10cSrcweir 2191*cdf0e10cSrcweir 2192*cdf0e10cSrcweir 2193*cdf0e10cSrcweir 2194