xref: /AOO41X/main/sw/source/core/edit/edfcol.cxx (revision 808c4840145b66ebc65ba9c0f5bc9b4b53af9eab)
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 #include <hintids.hxx>
29 #include <editeng/brkitem.hxx>
30 #include <editsh.hxx>
31 #include <doc.hxx>      // fuer SwTxtFmtColls
32 #include <IDocumentUndoRedo.hxx>
33 #include <edimp.hxx>    // fuer MACROS
34 #include <ndtxt.hxx>
35 #include <paratr.hxx>
36 #include <fmtpdsc.hxx>
37 // --> FME 2004-06-29 #114856# Formular view
38 #include <viewopt.hxx>
39 // <--
40 #include <SwRewriter.hxx>
41 #include <numrule.hxx>
42 #include <swundo.hxx>
43 
44 /*************************************
45  * FormatColl
46  *************************************/
47 // TXT
48 
49 
GetDfltTxtFmtColl() const50 SwTxtFmtColl& SwEditShell::GetDfltTxtFmtColl() const
51 {
52     return *((SwTxtFmtColl*) (GetDoc()->GetDfltTxtFmtColl()));
53 }
54 
55 
GetTxtFmtCollCount() const56 sal_uInt16 SwEditShell::GetTxtFmtCollCount() const
57 {
58     return GetDoc()->GetTxtFmtColls()->Count();
59 }
60 
61 
GetTxtFmtColl(sal_uInt16 nFmtColl) const62 SwTxtFmtColl& SwEditShell::GetTxtFmtColl( sal_uInt16 nFmtColl) const
63 {
64     return *((*(GetDoc()->GetTxtFmtColls()))[nFmtColl]);
65 }
66 
67 // --> OD 2007-11-06 #i62675#
SetTxtFmtColl(SwTxtFmtColl * pFmt,const bool bResetListAttrs)68 void SwEditShell::SetTxtFmtColl( SwTxtFmtColl *pFmt,
69                                  const bool bResetListAttrs )
70 {
71     SwTxtFmtColl *pLocal = pFmt? pFmt: (*GetDoc()->GetTxtFmtColls())[0];
72     StartAllAction();
73 
74     SwRewriter aRewriter;
75     aRewriter.AddRule(UNDO_ARG1, pLocal->GetName());
76 
77     GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_SETFMTCOLL, &aRewriter);
78     FOREACHPAM_START(this)
79 
80         if ( !PCURCRSR->HasReadonlySel( GetViewOptions()->IsFormView() ) )
81         {
82             GetDoc()->SetTxtFmtColl( *PCURCRSR, pLocal, true, bResetListAttrs );
83         }
84 
85     FOREACHPAM_END()
86     GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_SETFMTCOLL, &aRewriter);
87     EndAllAction();
88 }
89 // <--
90 
91 
MakeTxtFmtColl(const String & rFmtCollName,SwTxtFmtColl * pParent)92 SwTxtFmtColl* SwEditShell::MakeTxtFmtColl(const String& rFmtCollName,
93         SwTxtFmtColl* pParent)
94 {
95     SwTxtFmtColl *pColl;
96     if ( pParent == 0 )
97         pParent = &GetTxtFmtColl(0);
98     if (  (pColl=GetDoc()->MakeTxtFmtColl(rFmtCollName, pParent)) == 0 )
99     {
100         ASSERT( sal_False, "MakeTxtFmtColl failed" )
101     }
102     return pColl;
103 
104 }
105 
106 
FillByEx(SwTxtFmtColl * pColl,sal_Bool bReset)107 void SwEditShell::FillByEx(SwTxtFmtColl* pColl, sal_Bool bReset)
108 {
109     if( bReset )
110     {
111         // --> OD 2007-01-25 #i73790# - method renamed
112         pColl->ResetAllFmtAttr();
113         // <--
114     }
115 
116     SwPaM * pCrsr = GetCrsr();
117     SwCntntNode * pCnt = pCrsr->GetCntntNode();
118     const SfxItemSet* pSet = pCnt->GetpSwAttrSet();
119     if( pSet )
120     {
121         // JP 05.10.98: falls eines der Attribute Break/PageDesc/NumRule(auto)
122         //      im ItemSet steht, so entferne die VORM setzen an der Collection.
123         //      Ansonst wird zu viel gemacht oder falsche gemacht (NumRules!)
124         //      Bug 57568
125 
126         // AutoNumRules NICHT in die Vorlagen uebernehmen
127         const SfxPoolItem* pItem;
128         const SwNumRule* pRule = 0;
129         if( SFX_ITEM_SET == pSet->GetItemState( RES_BREAK, sal_False ) ||
130             SFX_ITEM_SET == pSet->GetItemState( RES_PAGEDESC,sal_False ) ||
131             ( SFX_ITEM_SET == pSet->GetItemState( RES_PARATR_NUMRULE,
132                 sal_False, &pItem ) && 0 != (pRule = GetDoc()->FindNumRulePtr(
133                 ((SwNumRuleItem*)pItem)->GetValue() )) &&
134                 pRule && pRule->IsAutoRule() )
135             )
136         {
137             SfxItemSet aSet( *pSet );
138             aSet.ClearItem( RES_BREAK );
139             aSet.ClearItem( RES_PAGEDESC );
140 
141             if( pRule || (SFX_ITEM_SET == pSet->GetItemState( RES_PARATR_NUMRULE,
142                 sal_False, &pItem ) && 0 != (pRule = GetDoc()->FindNumRulePtr(
143                 ((SwNumRuleItem*)pItem)->GetValue() )) &&
144                 pRule && pRule->IsAutoRule() ))
145                 aSet.ClearItem( RES_PARATR_NUMRULE );
146 
147             if( aSet.Count() )
148                 GetDoc()->ChgFmt(*pColl, aSet );
149         }
150         else
151             GetDoc()->ChgFmt(*pColl, *pSet );
152     }
153 }
154 
155 
156 
157 
158