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_sw.hxx" 26 27 28 29 #include "errhdl.hxx" 30 31 #include "txtcache.hxx" 32 #include "txtfrm.hxx" 33 #include "porlay.hxx" 34 35 /************************************************************************* 36 |* 37 |* SwTxtLine::SwTxtLine(), ~SwTxtLine() 38 |* 39 |* Ersterstellung MA 16. Mar. 94 40 |* Letzte Aenderung MA 16. Mar. 94 41 |* 42 |*************************************************************************/ 43 44 SwTxtLine::SwTxtLine( SwTxtFrm *pFrm, SwParaPortion *pNew ) : 45 SwCacheObj( (void*)pFrm ), 46 pLine( pNew ) 47 { 48 } 49 50 SwTxtLine::~SwTxtLine() 51 { 52 delete pLine; 53 } 54 55 /************************************************************************* 56 |* 57 |* SwTxtLineAccess::NewObj() 58 |* 59 |* Ersterstellung MA 16. Mar. 94 60 |* Letzte Aenderung MA 16. Mar. 94 61 |* 62 |*************************************************************************/ 63 64 SwCacheObj *SwTxtLineAccess::NewObj() 65 { 66 return new SwTxtLine( (SwTxtFrm*)pOwner ); 67 } 68 69 /************************************************************************* 70 |* 71 |* SwTxtLineAccess::GetPara() 72 |* 73 |* Ersterstellung MA 16. Mar. 94 74 |* Letzte Aenderung MA 16. Mar. 94 75 |* 76 |*************************************************************************/ 77 78 SwParaPortion *SwTxtLineAccess::GetPara() 79 { 80 SwTxtLine *pRet; 81 if ( pObj ) 82 pRet = (SwTxtLine*)pObj; 83 else 84 { 85 pRet = (SwTxtLine*)Get(); 86 ((SwTxtFrm*)pOwner)->SetCacheIdx( pRet->GetCachePos() ); 87 } 88 if ( !pRet->GetPara() ) 89 pRet->SetPara( new SwParaPortion ); 90 return pRet->GetPara(); 91 } 92 93 94 /************************************************************************* 95 |* 96 |* SwTxtLineAccess::SwTxtLineAccess() 97 |* 98 |* Ersterstellung MA 16. Mar. 94 99 |* Letzte Aenderung MA 16. Mar. 94 100 |* 101 |*************************************************************************/ 102 103 SwTxtLineAccess::SwTxtLineAccess( const SwTxtFrm *pOwn ) : 104 SwCacheAccess( *SwTxtFrm::GetTxtCache(), pOwn, pOwn->GetCacheIdx() ) 105 { 106 } 107 108 /************************************************************************* 109 |* 110 |* SwTxtLineAccess::IsAvailable 111 |* 112 |* Ersterstellung MA 23. Mar. 94 113 |* Letzte Aenderung MA 23. Mar. 94 114 |* 115 |*************************************************************************/ 116 117 sal_Bool SwTxtLineAccess::IsAvailable() const 118 { 119 if ( pObj ) 120 return ((SwTxtLine*)pObj)->GetPara() != 0; 121 return sal_False; 122 } 123 124 /************************************************************************* 125 |* 126 |* SwTxtFrm::HasPara() 127 |* 128 |* Ersterstellung MA 16. Mar. 94 129 |* Letzte Aenderung MA 22. Aug. 94 130 |* 131 |*************************************************************************/ 132 133 sal_Bool SwTxtFrm::_HasPara() const 134 { 135 SwTxtLine *pTxtLine = (SwTxtLine*)SwTxtFrm::GetTxtCache()-> 136 Get( this, GetCacheIdx(), sal_False ); 137 if ( pTxtLine ) 138 { 139 if ( pTxtLine->GetPara() ) 140 return sal_True; 141 } 142 else 143 ((SwTxtFrm*)this)->nCacheIdx = MSHRT_MAX; 144 145 return sal_False; 146 } 147 148 /************************************************************************* 149 |* 150 |* SwTxtFrm::GetPara() 151 |* 152 |* Ersterstellung MA 16. Mar. 94 153 |* Letzte Aenderung MA 22. Aug. 94 154 |* 155 |*************************************************************************/ 156 157 SwParaPortion *SwTxtFrm::GetPara() 158 { 159 if ( GetCacheIdx() != MSHRT_MAX ) 160 { SwTxtLine *pLine = (SwTxtLine*)SwTxtFrm::GetTxtCache()-> 161 Get( this, GetCacheIdx(), sal_False ); 162 if ( pLine ) 163 return pLine->GetPara(); 164 else 165 nCacheIdx = MSHRT_MAX; 166 } 167 return 0; 168 } 169 170 171 /************************************************************************* 172 |* 173 |* SwTxtFrm::ClearPara() 174 |* 175 |* Ersterstellung MA 16. Mar. 94 176 |* Letzte Aenderung MA 22. Aug. 94 177 |* 178 |*************************************************************************/ 179 180 void SwTxtFrm::ClearPara() 181 { 182 ASSERT( !IsLocked(), "+SwTxtFrm::ClearPara: this is locked." ); 183 if ( !IsLocked() && GetCacheIdx() != MSHRT_MAX ) 184 { 185 SwTxtLine *pTxtLine = (SwTxtLine*)SwTxtFrm::GetTxtCache()-> 186 Get( this, GetCacheIdx(), sal_False ); 187 if ( pTxtLine ) 188 { 189 delete pTxtLine->GetPara(); 190 pTxtLine->SetPara( 0 ); 191 } 192 else 193 nCacheIdx = MSHRT_MAX; 194 } 195 } 196 197 /************************************************************************* 198 |* 199 |* SwTxtFrm::SetPara() 200 |* 201 |* Ersterstellung MA 16. Mar. 94 202 |* Letzte Aenderung MA 22. Aug. 94 203 |* 204 |*************************************************************************/ 205 206 void SwTxtFrm::SetPara( SwParaPortion *pNew, sal_Bool bDelete ) 207 { 208 if ( GetCacheIdx() != MSHRT_MAX ) 209 { 210 //Nur die Information Auswechseln, das CacheObj bleibt stehen. 211 SwTxtLine *pTxtLine = (SwTxtLine*)SwTxtFrm::GetTxtCache()-> 212 Get( this, GetCacheIdx(), sal_False ); 213 if ( pTxtLine ) 214 { 215 if( bDelete ) 216 delete pTxtLine->GetPara(); 217 pTxtLine->SetPara( pNew ); 218 } 219 else 220 { 221 ASSERT( !pNew, "+SetPara: Losing SwParaPortion" ); 222 nCacheIdx = MSHRT_MAX; 223 } 224 } 225 else if ( pNew ) 226 { //Einen neuen einfuegen. 227 SwTxtLine *pTxtLine = new SwTxtLine( this, pNew ); 228 if ( SwTxtFrm::GetTxtCache()->Insert( pTxtLine ) ) 229 nCacheIdx = pTxtLine->GetCachePos(); 230 else 231 { 232 ASSERT( sal_False, "+SetPara: InsertCache failed." ); 233 } 234 } 235 } 236 237 238