1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_editeng.hxx" 26 27 #include <svl/intitem.hxx> 28 #include <editeng/editeng.hxx> 29 #include <editeng/editview.hxx> 30 #include <editeng/editdata.hxx> 31 #include <editeng/eerdll.hxx> 32 #include <editeng/lrspitem.hxx> 33 #include <editeng/fhgtitem.hxx> 34 35 #define _OUTLINER_CXX 36 #include <editeng/outliner.hxx> 37 #include <outlundo.hxx> 38 39 40 OutlinerUndoBase::OutlinerUndoBase( sal_uInt16 _nId, Outliner* pOutliner ) 41 : EditUndo( _nId, NULL ) 42 { 43 DBG_ASSERT( pOutliner, "Undo: Outliner?!" ); 44 mpOutliner = pOutliner; 45 } 46 47 OutlinerUndoChangeParaFlags::OutlinerUndoChangeParaFlags( Outliner* pOutliner, sal_uInt16 nPara, sal_uInt16 nOldFlags, sal_uInt16 nNewFlags ) 48 : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 49 { 50 mnPara = nPara; 51 mnOldFlags = nOldFlags; 52 mnNewFlags = nNewFlags; 53 } 54 55 void OutlinerUndoChangeParaFlags::Undo() 56 { 57 ImplChangeFlags( mnOldFlags ); 58 } 59 60 void OutlinerUndoChangeParaFlags::Redo() 61 { 62 ImplChangeFlags( mnNewFlags ); 63 } 64 65 void OutlinerUndoChangeParaFlags::ImplChangeFlags( sal_uInt16 nFlags ) 66 { 67 Outliner* pOutliner = GetOutliner(); 68 Paragraph* pPara = pOutliner->GetParagraph( mnPara ); 69 if( pPara ) 70 { 71 pOutliner->nDepthChangedHdlPrevDepth = pPara->GetDepth(); 72 pOutliner->mnDepthChangeHdlPrevFlags = pPara->nFlags; 73 pOutliner->pHdlParagraph = pPara; 74 75 pPara->nFlags = nFlags; 76 pOutliner->DepthChangedHdl(); 77 } 78 } 79 80 OutlinerUndoChangeParaNumberingRestart::OutlinerUndoChangeParaNumberingRestart( Outliner* pOutliner, sal_uInt16 nPara, 81 sal_Int16 nOldNumberingStartValue, sal_Int16 nNewNumberingStartValue, 82 sal_Bool bOldParaIsNumberingRestart, sal_Bool bNewParaIsNumberingRestart ) 83 : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 84 { 85 mnPara = nPara; 86 87 maUndoData.mnNumberingStartValue = nOldNumberingStartValue; 88 maUndoData.mbParaIsNumberingRestart = bOldParaIsNumberingRestart; 89 maRedoData.mnNumberingStartValue = nNewNumberingStartValue; 90 maRedoData.mbParaIsNumberingRestart = bNewParaIsNumberingRestart; 91 } 92 93 void OutlinerUndoChangeParaNumberingRestart::Undo() 94 { 95 ImplApplyData( maUndoData ); 96 } 97 98 void OutlinerUndoChangeParaNumberingRestart::Redo() 99 { 100 ImplApplyData( maRedoData ); 101 } 102 103 void OutlinerUndoChangeParaNumberingRestart::ImplApplyData( const ParaRestartData& rData ) 104 { 105 Outliner* pOutliner = GetOutliner(); 106 pOutliner->SetNumberingStartValue( mnPara, rData.mnNumberingStartValue ); 107 pOutliner->SetParaIsNumberingRestart( mnPara, rData.mbParaIsNumberingRestart ); 108 } 109 110 OutlinerUndoChangeDepth::OutlinerUndoChangeDepth( Outliner* pOutliner, sal_uInt16 nPara, sal_Int16 nOldDepth, sal_Int16 nNewDepth ) 111 : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 112 { 113 mnPara = nPara; 114 mnOldDepth = nOldDepth; 115 mnNewDepth = nNewDepth; 116 } 117 118 void OutlinerUndoChangeDepth::Undo() 119 { 120 GetOutliner()->ImplInitDepth( mnPara, mnOldDepth, sal_False ); 121 } 122 123 void OutlinerUndoChangeDepth::Redo() 124 { 125 GetOutliner()->ImplInitDepth( mnPara, mnNewDepth, sal_False ); 126 } 127 128 void OutlinerUndoChangeDepth::Repeat() 129 { 130 DBG_ERROR( "Repeat not implemented!" ); 131 } 132 133 134 OutlinerUndoCheckPara::OutlinerUndoCheckPara( Outliner* pOutliner, sal_uInt16 nPara ) 135 : OutlinerUndoBase( OLUNDO_DEPTH, pOutliner ) 136 { 137 mnPara = nPara; 138 } 139 140 void OutlinerUndoCheckPara::Undo() 141 { 142 Paragraph* pPara = GetOutliner()->GetParagraph( mnPara ); 143 pPara->Invalidate(); 144 GetOutliner()->ImplCalcBulletText( mnPara, sal_False, sal_False ); 145 } 146 147 void OutlinerUndoCheckPara::Redo() 148 { 149 Paragraph* pPara = GetOutliner()->GetParagraph( mnPara ); 150 pPara->Invalidate(); 151 GetOutliner()->ImplCalcBulletText( mnPara, sal_False, sal_False ); 152 } 153 154 void OutlinerUndoCheckPara::Repeat() 155 { 156 DBG_ERROR( "Repeat not implemented!" ); 157 } 158 159 DBG_NAME(OLUndoExpand); 160 161 OLUndoExpand::OLUndoExpand(Outliner* pOut, sal_uInt16 _nId ) 162 : EditUndo( _nId, 0 ) 163 { 164 DBG_CTOR(OLUndoExpand,0); 165 DBG_ASSERT(pOut,"Undo:No Outliner"); 166 pOutliner = pOut; 167 nCount = 0; 168 pParas = 0; 169 } 170 171 172 OLUndoExpand::~OLUndoExpand() 173 { 174 DBG_DTOR(OLUndoExpand,0); 175 delete pParas; 176 } 177 178 179 void OLUndoExpand::Restore( sal_Bool bUndo ) 180 { 181 DBG_CHKTHIS(OLUndoExpand,0); 182 DBG_ASSERT(pOutliner,"Undo:No Outliner"); 183 DBG_ASSERT(pOutliner->pEditEngine,"Outliner already deleted"); 184 Paragraph* pPara; 185 186 sal_Bool bExpand = sal_False; 187 sal_uInt16 _nId = GetId(); 188 if((_nId == OLUNDO_EXPAND && !bUndo) || (_nId == OLUNDO_COLLAPSE && bUndo)) 189 bExpand = sal_True; 190 if( !pParas ) 191 { 192 pPara = pOutliner->GetParagraph( (sal_uLong)nCount ); 193 if( bExpand ) 194 pOutliner->Expand( pPara ); 195 else 196 pOutliner->Collapse( pPara ); 197 } 198 else 199 { 200 for( sal_uInt16 nIdx = 0; nIdx < nCount; nIdx++ ) 201 { 202 pPara = pOutliner->GetParagraph( (sal_uLong)(pParas[nIdx]) ); 203 if( bExpand ) 204 pOutliner->Expand( pPara ); 205 else 206 pOutliner->Collapse( pPara ); 207 } 208 } 209 } 210 211 212 void OLUndoExpand::Undo() 213 { 214 DBG_CHKTHIS(OLUndoExpand,0); 215 Restore( sal_True ); 216 } 217 218 219 void OLUndoExpand::Redo() 220 { 221 DBG_CHKTHIS(OLUndoExpand,0); 222 Restore( sal_False ); 223 } 224 225 226 void OLUndoExpand::Repeat() 227 { 228 DBG_CHKTHIS(OLUndoExpand,0); 229 DBG_ERROR("Not implemented"); 230 } 231