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_editeng.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <svl/intitem.hxx> 32*cdf0e10cSrcweir #include <editeng/editeng.hxx> 33*cdf0e10cSrcweir #include <editeng/editview.hxx> 34*cdf0e10cSrcweir #include <editeng/editdata.hxx> 35*cdf0e10cSrcweir #include <editeng/eerdll.hxx> 36*cdf0e10cSrcweir #include <editeng/lrspitem.hxx> 37*cdf0e10cSrcweir #include <editeng/fhgtitem.hxx> 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir #define _OUTLINER_CXX 40*cdf0e10cSrcweir #include <editeng/outliner.hxx> 41*cdf0e10cSrcweir #include <outlundo.hxx> 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir OutlinerUndoBase::OutlinerUndoBase( sal_uInt16 _nId, Outliner* pOutliner ) 45*cdf0e10cSrcweir : EditUndo( _nId, NULL ) 46*cdf0e10cSrcweir { 47*cdf0e10cSrcweir DBG_ASSERT( pOutliner, "Undo: Outliner?!" ); 48*cdf0e10cSrcweir mpOutliner = pOutliner; 49*cdf0e10cSrcweir } 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir OutlinerUndoChangeParaFlags::OutlinerUndoChangeParaFlags( Outliner* pOutliner, sal_uInt16 nPara, sal_uInt16 nOldFlags, sal_uInt16 nNewFlags ) 52*cdf0e10cSrcweir : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 53*cdf0e10cSrcweir { 54*cdf0e10cSrcweir mnPara = nPara; 55*cdf0e10cSrcweir mnOldFlags = nOldFlags; 56*cdf0e10cSrcweir mnNewFlags = nNewFlags; 57*cdf0e10cSrcweir } 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir void OutlinerUndoChangeParaFlags::Undo() 60*cdf0e10cSrcweir { 61*cdf0e10cSrcweir ImplChangeFlags( mnOldFlags ); 62*cdf0e10cSrcweir } 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir void OutlinerUndoChangeParaFlags::Redo() 65*cdf0e10cSrcweir { 66*cdf0e10cSrcweir ImplChangeFlags( mnNewFlags ); 67*cdf0e10cSrcweir } 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir void OutlinerUndoChangeParaFlags::ImplChangeFlags( sal_uInt16 nFlags ) 70*cdf0e10cSrcweir { 71*cdf0e10cSrcweir Outliner* pOutliner = GetOutliner(); 72*cdf0e10cSrcweir Paragraph* pPara = pOutliner->GetParagraph( mnPara ); 73*cdf0e10cSrcweir if( pPara ) 74*cdf0e10cSrcweir { 75*cdf0e10cSrcweir pOutliner->nDepthChangedHdlPrevDepth = pPara->GetDepth(); 76*cdf0e10cSrcweir pOutliner->mnDepthChangeHdlPrevFlags = pPara->nFlags; 77*cdf0e10cSrcweir pOutliner->pHdlParagraph = pPara; 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir pPara->nFlags = nFlags; 80*cdf0e10cSrcweir pOutliner->DepthChangedHdl(); 81*cdf0e10cSrcweir } 82*cdf0e10cSrcweir } 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir OutlinerUndoChangeParaNumberingRestart::OutlinerUndoChangeParaNumberingRestart( Outliner* pOutliner, sal_uInt16 nPara, 85*cdf0e10cSrcweir sal_Int16 nOldNumberingStartValue, sal_Int16 nNewNumberingStartValue, 86*cdf0e10cSrcweir sal_Bool bOldParaIsNumberingRestart, sal_Bool bNewParaIsNumberingRestart ) 87*cdf0e10cSrcweir : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 88*cdf0e10cSrcweir { 89*cdf0e10cSrcweir mnPara = nPara; 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir maUndoData.mnNumberingStartValue = nOldNumberingStartValue; 92*cdf0e10cSrcweir maUndoData.mbParaIsNumberingRestart = bOldParaIsNumberingRestart; 93*cdf0e10cSrcweir maRedoData.mnNumberingStartValue = nNewNumberingStartValue; 94*cdf0e10cSrcweir maRedoData.mbParaIsNumberingRestart = bNewParaIsNumberingRestart; 95*cdf0e10cSrcweir } 96*cdf0e10cSrcweir 97*cdf0e10cSrcweir void OutlinerUndoChangeParaNumberingRestart::Undo() 98*cdf0e10cSrcweir { 99*cdf0e10cSrcweir ImplApplyData( maUndoData ); 100*cdf0e10cSrcweir } 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir void OutlinerUndoChangeParaNumberingRestart::Redo() 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir ImplApplyData( maRedoData ); 105*cdf0e10cSrcweir } 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir void OutlinerUndoChangeParaNumberingRestart::ImplApplyData( const ParaRestartData& rData ) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir Outliner* pOutliner = GetOutliner(); 110*cdf0e10cSrcweir pOutliner->SetNumberingStartValue( mnPara, rData.mnNumberingStartValue ); 111*cdf0e10cSrcweir pOutliner->SetParaIsNumberingRestart( mnPara, rData.mbParaIsNumberingRestart ); 112*cdf0e10cSrcweir } 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir OutlinerUndoChangeDepth::OutlinerUndoChangeDepth( Outliner* pOutliner, sal_uInt16 nPara, sal_Int16 nOldDepth, sal_Int16 nNewDepth ) 115*cdf0e10cSrcweir : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 116*cdf0e10cSrcweir { 117*cdf0e10cSrcweir mnPara = nPara; 118*cdf0e10cSrcweir mnOldDepth = nOldDepth; 119*cdf0e10cSrcweir mnNewDepth = nNewDepth; 120*cdf0e10cSrcweir } 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir void OutlinerUndoChangeDepth::Undo() 123*cdf0e10cSrcweir { 124*cdf0e10cSrcweir GetOutliner()->ImplInitDepth( mnPara, mnOldDepth, sal_False ); 125*cdf0e10cSrcweir } 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir void OutlinerUndoChangeDepth::Redo() 128*cdf0e10cSrcweir { 129*cdf0e10cSrcweir GetOutliner()->ImplInitDepth( mnPara, mnNewDepth, sal_False ); 130*cdf0e10cSrcweir } 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir void OutlinerUndoChangeDepth::Repeat() 133*cdf0e10cSrcweir { 134*cdf0e10cSrcweir DBG_ERROR( "Repeat not implemented!" ); 135*cdf0e10cSrcweir } 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir OutlinerUndoCheckPara::OutlinerUndoCheckPara( Outliner* pOutliner, sal_uInt16 nPara ) 139*cdf0e10cSrcweir : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 140*cdf0e10cSrcweir { 141*cdf0e10cSrcweir mnPara = nPara; 142*cdf0e10cSrcweir } 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir void OutlinerUndoCheckPara::Undo() 145*cdf0e10cSrcweir { 146*cdf0e10cSrcweir Paragraph* pPara = GetOutliner()->GetParagraph( mnPara ); 147*cdf0e10cSrcweir pPara->Invalidate(); 148*cdf0e10cSrcweir GetOutliner()->ImplCalcBulletText( mnPara, sal_False, sal_False ); 149*cdf0e10cSrcweir } 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir void OutlinerUndoCheckPara::Redo() 152*cdf0e10cSrcweir { 153*cdf0e10cSrcweir Paragraph* pPara = GetOutliner()->GetParagraph( mnPara ); 154*cdf0e10cSrcweir pPara->Invalidate(); 155*cdf0e10cSrcweir GetOutliner()->ImplCalcBulletText( mnPara, sal_False, sal_False ); 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir void OutlinerUndoCheckPara::Repeat() 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir DBG_ERROR( "Repeat not implemented!" ); 161*cdf0e10cSrcweir } 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir DBG_NAME(OLUndoExpand); 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir OLUndoExpand::OLUndoExpand(Outliner* pOut, sal_uInt16 _nId ) 166*cdf0e10cSrcweir : EditUndo( _nId, 0 ) 167*cdf0e10cSrcweir { 168*cdf0e10cSrcweir DBG_CTOR(OLUndoExpand,0); 169*cdf0e10cSrcweir DBG_ASSERT(pOut,"Undo:No Outliner"); 170*cdf0e10cSrcweir pOutliner = pOut; 171*cdf0e10cSrcweir nCount = 0; 172*cdf0e10cSrcweir pParas = 0; 173*cdf0e10cSrcweir } 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir OLUndoExpand::~OLUndoExpand() 177*cdf0e10cSrcweir { 178*cdf0e10cSrcweir DBG_DTOR(OLUndoExpand,0); 179*cdf0e10cSrcweir delete pParas; 180*cdf0e10cSrcweir } 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir void OLUndoExpand::Restore( sal_Bool bUndo ) 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir DBG_CHKTHIS(OLUndoExpand,0); 186*cdf0e10cSrcweir DBG_ASSERT(pOutliner,"Undo:No Outliner"); 187*cdf0e10cSrcweir DBG_ASSERT(pOutliner->pEditEngine,"Outliner already deleted"); 188*cdf0e10cSrcweir Paragraph* pPara; 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir sal_Bool bExpand = sal_False; 191*cdf0e10cSrcweir sal_uInt16 _nId = GetId(); 192*cdf0e10cSrcweir if((_nId == OLUNDO_EXPAND && !bUndo) || (_nId == OLUNDO_COLLAPSE && bUndo)) 193*cdf0e10cSrcweir bExpand = sal_True; 194*cdf0e10cSrcweir if( !pParas ) 195*cdf0e10cSrcweir { 196*cdf0e10cSrcweir pPara = pOutliner->GetParagraph( (sal_uLong)nCount ); 197*cdf0e10cSrcweir if( bExpand ) 198*cdf0e10cSrcweir pOutliner->Expand( pPara ); 199*cdf0e10cSrcweir else 200*cdf0e10cSrcweir pOutliner->Collapse( pPara ); 201*cdf0e10cSrcweir } 202*cdf0e10cSrcweir else 203*cdf0e10cSrcweir { 204*cdf0e10cSrcweir for( sal_uInt16 nIdx = 0; nIdx < nCount; nIdx++ ) 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir pPara = pOutliner->GetParagraph( (sal_uLong)(pParas[nIdx]) ); 207*cdf0e10cSrcweir if( bExpand ) 208*cdf0e10cSrcweir pOutliner->Expand( pPara ); 209*cdf0e10cSrcweir else 210*cdf0e10cSrcweir pOutliner->Collapse( pPara ); 211*cdf0e10cSrcweir } 212*cdf0e10cSrcweir } 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir 216*cdf0e10cSrcweir void OLUndoExpand::Undo() 217*cdf0e10cSrcweir { 218*cdf0e10cSrcweir DBG_CHKTHIS(OLUndoExpand,0); 219*cdf0e10cSrcweir Restore( sal_True ); 220*cdf0e10cSrcweir } 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir void OLUndoExpand::Redo() 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir DBG_CHKTHIS(OLUndoExpand,0); 226*cdf0e10cSrcweir Restore( sal_False ); 227*cdf0e10cSrcweir } 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir void OLUndoExpand::Repeat() 231*cdf0e10cSrcweir { 232*cdf0e10cSrcweir DBG_CHKTHIS(OLUndoExpand,0); 233*cdf0e10cSrcweir DBG_ERROR("Not implemented"); 234*cdf0e10cSrcweir } 235