1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_editeng.hxx" 30 31 #include <svl/intitem.hxx> 32 #include <editeng/editeng.hxx> 33 #include <editeng/editview.hxx> 34 #include <editeng/editdata.hxx> 35 #include <editeng/eerdll.hxx> 36 #include <editeng/lrspitem.hxx> 37 #include <editeng/fhgtitem.hxx> 38 39 #define _OUTLINER_CXX 40 #include <editeng/outliner.hxx> 41 #include <outlundo.hxx> 42 43 44 OutlinerUndoBase::OutlinerUndoBase( sal_uInt16 _nId, Outliner* pOutliner ) 45 : EditUndo( _nId, NULL ) 46 { 47 DBG_ASSERT( pOutliner, "Undo: Outliner?!" ); 48 mpOutliner = pOutliner; 49 } 50 51 OutlinerUndoChangeParaFlags::OutlinerUndoChangeParaFlags( Outliner* pOutliner, sal_uInt16 nPara, sal_uInt16 nOldFlags, sal_uInt16 nNewFlags ) 52 : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 53 { 54 mnPara = nPara; 55 mnOldFlags = nOldFlags; 56 mnNewFlags = nNewFlags; 57 } 58 59 void OutlinerUndoChangeParaFlags::Undo() 60 { 61 ImplChangeFlags( mnOldFlags ); 62 } 63 64 void OutlinerUndoChangeParaFlags::Redo() 65 { 66 ImplChangeFlags( mnNewFlags ); 67 } 68 69 void OutlinerUndoChangeParaFlags::ImplChangeFlags( sal_uInt16 nFlags ) 70 { 71 Outliner* pOutliner = GetOutliner(); 72 Paragraph* pPara = pOutliner->GetParagraph( mnPara ); 73 if( pPara ) 74 { 75 pOutliner->nDepthChangedHdlPrevDepth = pPara->GetDepth(); 76 pOutliner->mnDepthChangeHdlPrevFlags = pPara->nFlags; 77 pOutliner->pHdlParagraph = pPara; 78 79 pPara->nFlags = nFlags; 80 pOutliner->DepthChangedHdl(); 81 } 82 } 83 84 OutlinerUndoChangeParaNumberingRestart::OutlinerUndoChangeParaNumberingRestart( Outliner* pOutliner, sal_uInt16 nPara, 85 sal_Int16 nOldNumberingStartValue, sal_Int16 nNewNumberingStartValue, 86 sal_Bool bOldParaIsNumberingRestart, sal_Bool bNewParaIsNumberingRestart ) 87 : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 88 { 89 mnPara = nPara; 90 91 maUndoData.mnNumberingStartValue = nOldNumberingStartValue; 92 maUndoData.mbParaIsNumberingRestart = bOldParaIsNumberingRestart; 93 maRedoData.mnNumberingStartValue = nNewNumberingStartValue; 94 maRedoData.mbParaIsNumberingRestart = bNewParaIsNumberingRestart; 95 } 96 97 void OutlinerUndoChangeParaNumberingRestart::Undo() 98 { 99 ImplApplyData( maUndoData ); 100 } 101 102 void OutlinerUndoChangeParaNumberingRestart::Redo() 103 { 104 ImplApplyData( maRedoData ); 105 } 106 107 void OutlinerUndoChangeParaNumberingRestart::ImplApplyData( const ParaRestartData& rData ) 108 { 109 Outliner* pOutliner = GetOutliner(); 110 pOutliner->SetNumberingStartValue( mnPara, rData.mnNumberingStartValue ); 111 pOutliner->SetParaIsNumberingRestart( mnPara, rData.mbParaIsNumberingRestart ); 112 } 113 114 OutlinerUndoChangeDepth::OutlinerUndoChangeDepth( Outliner* pOutliner, sal_uInt16 nPara, sal_Int16 nOldDepth, sal_Int16 nNewDepth ) 115 : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 116 { 117 mnPara = nPara; 118 mnOldDepth = nOldDepth; 119 mnNewDepth = nNewDepth; 120 } 121 122 void OutlinerUndoChangeDepth::Undo() 123 { 124 GetOutliner()->ImplInitDepth( mnPara, mnOldDepth, sal_False ); 125 } 126 127 void OutlinerUndoChangeDepth::Redo() 128 { 129 GetOutliner()->ImplInitDepth( mnPara, mnNewDepth, sal_False ); 130 } 131 132 void OutlinerUndoChangeDepth::Repeat() 133 { 134 DBG_ERROR( "Repeat not implemented!" ); 135 } 136 137 138 OutlinerUndoCheckPara::OutlinerUndoCheckPara( Outliner* pOutliner, sal_uInt16 nPara ) 139 : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 140 { 141 mnPara = nPara; 142 } 143 144 void OutlinerUndoCheckPara::Undo() 145 { 146 Paragraph* pPara = GetOutliner()->GetParagraph( mnPara ); 147 pPara->Invalidate(); 148 GetOutliner()->ImplCalcBulletText( mnPara, sal_False, sal_False ); 149 } 150 151 void OutlinerUndoCheckPara::Redo() 152 { 153 Paragraph* pPara = GetOutliner()->GetParagraph( mnPara ); 154 pPara->Invalidate(); 155 GetOutliner()->ImplCalcBulletText( mnPara, sal_False, sal_False ); 156 } 157 158 void OutlinerUndoCheckPara::Repeat() 159 { 160 DBG_ERROR( "Repeat not implemented!" ); 161 } 162 163 DBG_NAME(OLUndoExpand); 164 165 OLUndoExpand::OLUndoExpand(Outliner* pOut, sal_uInt16 _nId ) 166 : EditUndo( _nId, 0 ) 167 { 168 DBG_CTOR(OLUndoExpand,0); 169 DBG_ASSERT(pOut,"Undo:No Outliner"); 170 pOutliner = pOut; 171 nCount = 0; 172 pParas = 0; 173 } 174 175 176 OLUndoExpand::~OLUndoExpand() 177 { 178 DBG_DTOR(OLUndoExpand,0); 179 delete pParas; 180 } 181 182 183 void OLUndoExpand::Restore( sal_Bool bUndo ) 184 { 185 DBG_CHKTHIS(OLUndoExpand,0); 186 DBG_ASSERT(pOutliner,"Undo:No Outliner"); 187 DBG_ASSERT(pOutliner->pEditEngine,"Outliner already deleted"); 188 Paragraph* pPara; 189 190 sal_Bool bExpand = sal_False; 191 sal_uInt16 _nId = GetId(); 192 if((_nId == OLUNDO_EXPAND && !bUndo) || (_nId == OLUNDO_COLLAPSE && bUndo)) 193 bExpand = sal_True; 194 if( !pParas ) 195 { 196 pPara = pOutliner->GetParagraph( (sal_uLong)nCount ); 197 if( bExpand ) 198 pOutliner->Expand( pPara ); 199 else 200 pOutliner->Collapse( pPara ); 201 } 202 else 203 { 204 for( sal_uInt16 nIdx = 0; nIdx < nCount; nIdx++ ) 205 { 206 pPara = pOutliner->GetParagraph( (sal_uLong)(pParas[nIdx]) ); 207 if( bExpand ) 208 pOutliner->Expand( pPara ); 209 else 210 pOutliner->Collapse( pPara ); 211 } 212 } 213 } 214 215 216 void OLUndoExpand::Undo() 217 { 218 DBG_CHKTHIS(OLUndoExpand,0); 219 Restore( sal_True ); 220 } 221 222 223 void OLUndoExpand::Redo() 224 { 225 DBG_CHKTHIS(OLUndoExpand,0); 226 Restore( sal_False ); 227 } 228 229 230 void OLUndoExpand::Repeat() 231 { 232 DBG_CHKTHIS(OLUndoExpand,0); 233 DBG_ERROR("Not implemented"); 234 } 235