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 #include <editsh.hxx> 28 #include <doc.hxx> // fuer aNodes 29 #include <IDocumentUndoRedo.hxx> 30 #include <pam.hxx> // fuer SwPaM 31 #include <edimp.hxx> // fuer MACROS 32 #include <swundo.hxx> // fuer die UndoIds 33 #include <ndtxt.hxx> // fuer Get-/ChgFmt Set-/GetAttrXXX 34 35 36 37 /************************************* 38 * harte Formatierung (Attribute) 39 *************************************/ 40 41 42 void SwEditShell::ResetAttr( const SvUShortsSort* pAttrs ) 43 { 44 SET_CURR_SHELL( this ); 45 StartAllAction(); 46 sal_Bool bUndoGroup = GetCrsr()->GetNext() != GetCrsr(); 47 if( bUndoGroup ) 48 { 49 GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_RESETATTR, NULL); 50 } 51 52 FOREACHPAM_START(this) 53 // if ( PCURCRSR->HasMark() ) 54 GetDoc()->ResetAttrs(*PCURCRSR, sal_True, pAttrs); 55 FOREACHPAM_END() 56 57 if( bUndoGroup ) 58 { 59 GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_RESETATTR, NULL); 60 } 61 CallChgLnk(); 62 EndAllAction(); 63 } 64 65 66 67 void SwEditShell::GCAttr() 68 { 69 //JP 04.02.97: wozu eine Action-Klammerung - ein Formatierung sollte nicht 70 // ausgeloest werden, so dass es hier ueberfluessig ist. 71 // Sonst Probleme im MouseBut.DownHdl - Bug 35562 72 // StartAllAction(); 73 FOREACHPAM_START(this) 74 if ( !PCURCRSR->HasMark() ) 75 { 76 SwTxtNode *const pTxtNode = 77 PCURCRSR->GetPoint()->nNode.GetNode().GetTxtNode(); 78 if (pTxtNode) 79 { 80 pTxtNode->GCAttr(); 81 } 82 } 83 else 84 { 85 const SwNodeIndex& rEnd = PCURCRSR->End()->nNode; 86 SwNodeIndex aIdx( PCURCRSR->Start()->nNode ); 87 SwNode* pNd = &aIdx.GetNode(); 88 do { 89 if( pNd->IsTxtNode() ) 90 ((SwTxtNode*)pNd)->GCAttr(); 91 } 92 while( 0 != ( pNd = GetDoc()->GetNodes().GoNext( &aIdx )) && 93 aIdx <= rEnd ); 94 } 95 FOREACHPAM_END() 96 // EndAllAction(); 97 } 98 99 // Setze das Attribut als neues default Attribut im Dokument. 100 101 102 void SwEditShell::SetDefault( const SfxPoolItem& rFmtHint ) 103 { 104 // 7502: Action-Klammerung 105 StartAllAction(); 106 GetDoc()->SetDefault( rFmtHint ); 107 EndAllAction(); 108 } 109 110 /* 111 112 void SwEditShell::SetDefault( const SfxItemSet& rSet ) 113 { 114 // 7502: Action-Klammerung 115 StartAllAction(); 116 GetDoc()->SetDefault( rSet ); 117 EndAllAction(); 118 } 119 */ 120 121 // Erfrage das Default Attribut in diesem Dokument. 122 123 const SfxPoolItem& SwEditShell::GetDefault( sal_uInt16 nFmtHint ) const 124 { 125 return GetDoc()->GetDefault( nFmtHint ); 126 127 } 128 129 130 void SwEditShell::SetAttr( const SfxPoolItem& rHint, sal_uInt16 nFlags ) 131 { 132 SET_CURR_SHELL( this ); 133 StartAllAction(); 134 SwPaM* pCrsr = GetCrsr(); 135 if( pCrsr->GetNext() != pCrsr ) // Ring von Cursorn 136 { 137 sal_Bool bIsTblMode = IsTableMode(); 138 GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_INSATTR, NULL); 139 140 FOREACHPAM_START(this) 141 if( PCURCRSR->HasMark() && ( bIsTblMode || 142 *PCURCRSR->GetPoint() != *PCURCRSR->GetMark() )) 143 { 144 GetDoc()->InsertPoolItem(*PCURCRSR, rHint, nFlags ); 145 } 146 FOREACHPAM_END() 147 148 GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_INSATTR, NULL); 149 } 150 else 151 { 152 if( !HasSelection() ) 153 UpdateAttr(); 154 GetDoc()->InsertPoolItem( *pCrsr, rHint, nFlags ); 155 } 156 EndAllAction(); 157 } 158 159 160 void SwEditShell::SetAttr( const SfxItemSet& rSet, sal_uInt16 nFlags ) 161 { 162 SET_CURR_SHELL( this ); 163 StartAllAction(); 164 SwPaM* pCrsr = GetCrsr(); 165 if( pCrsr->GetNext() != pCrsr ) // Ring von Cursorn 166 { 167 sal_Bool bIsTblMode = IsTableMode(); 168 GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_INSATTR, NULL); 169 170 FOREACHPAM_START(this) 171 if( PCURCRSR->HasMark() && ( bIsTblMode || 172 *PCURCRSR->GetPoint() != *PCURCRSR->GetMark() )) 173 { 174 GetDoc()->InsertItemSet(*PCURCRSR, rSet, nFlags ); 175 } 176 FOREACHPAM_END() 177 178 GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_INSATTR, NULL); 179 } 180 else 181 { 182 if( !HasSelection() ) 183 UpdateAttr(); 184 GetDoc()->InsertItemSet( *pCrsr, rSet, nFlags ); 185 } 186 EndAllAction(); 187 } 188 189 190 191 192