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 #ifndef SW_UNDO_ATTRIBUTE_HXX
25 #define SW_UNDO_ATTRIBUTE_HXX
26 
27 #include <undobj.hxx>
28 
29 #include <memory>
30 
31 #ifndef _SVSTDARR_HXX
32 #define _SVSTDARR_USHORTS
33 #define _SVSTDARR_ULONGS
34 #define _SVSTDARR_BOOLS
35 #define _SVSTDARR_BYTES
36 #define _SVSTDARR_USHORTSSORT
37 #include <svl/svstdarr.hxx>
38 #endif
39 #include <svl/itemset.hxx>
40 
41 #include <swtypes.hxx>
42 #include <calbck.hxx>
43 
44 
45 class SvxTabStopItem;
46 class SwFmt;
47 class SwFtnInfo;
48 class SwEndNoteInfo;
49 
50 
51 class SwUndoAttr : public SwUndo, private SwUndRng
52 {
53     SfxItemSet m_AttrSet;                           // attributes for Redo
54     const ::std::auto_ptr<SwHistory> m_pHistory;    // History for Undo
55     ::std::auto_ptr<SwRedlineData> m_pRedlineData;  // Redlining
56     ::std::auto_ptr<SwRedlineSaveDatas> m_pRedlineSaveData;
57     sal_uLong m_nNodeIndex;                             // Offset: for Redlining
58     const SetAttrMode m_nInsertFlags;               // insert flags
59 
60     void RemoveIdx( SwDoc& rDoc );
61 
62 public:
63     SwUndoAttr( const SwPaM&, const SfxItemSet &, const SetAttrMode nFlags );
64     SwUndoAttr( const SwPaM&, const SfxPoolItem&, const SetAttrMode nFlags );
65 
66     virtual ~SwUndoAttr();
67 
68     virtual void UndoImpl( ::sw::UndoRedoContext & );
69     virtual void RedoImpl( ::sw::UndoRedoContext & );
70     virtual void RepeatImpl( ::sw::RepeatContext & );
71 
72     void SaveRedlineData( const SwPaM& rPam, sal_Bool bInsCntnt );
73 
GetHistory()74     SwHistory& GetHistory() { return *m_pHistory; }
75 
76 };
77 
78 class SwUndoResetAttr : public SwUndo, private SwUndRng
79 {
80     const ::std::auto_ptr<SwHistory> m_pHistory;
81     SvUShortsSort m_Ids;
82     const sal_uInt16 m_nFormatId;             // Format-Id for Redo
83 
84 public:
85     SwUndoResetAttr( const SwPaM&, sal_uInt16 nFmtId );
86     SwUndoResetAttr( const SwPosition&, sal_uInt16 nFmtId );
87 
88     virtual ~SwUndoResetAttr();
89 
90     virtual void UndoImpl( ::sw::UndoRedoContext & );
91     virtual void RedoImpl( ::sw::UndoRedoContext & );
92     virtual void RepeatImpl( ::sw::RepeatContext & );
93 
94     void SetAttrs( const SvUShortsSort& rArr );
95 
GetHistory()96     SwHistory& GetHistory() { return *m_pHistory; }
97 
98 };
99 
100 class SwUndoFmtAttr : public SwUndo
101 {
102     friend class SwUndoDefaultAttr;
103     SwFmt * m_pFmt;
104     ::std::auto_ptr<SfxItemSet> m_pOldSet;    // old attributes
105     sal_uLong m_nNodeIndex;
106     const sal_uInt16 m_nFmtWhich;
107     const bool m_bSaveDrawPt;
108 
109     bool IsFmtInDoc( SwDoc* );   //is the attribute format still in the Doc?
110     void SaveFlyAnchor( bool bSaveDrawPt = false );
111     // --> OD 2004-10-26 #i35443# - Add return value, type <bool>.
112     // Return value indicates, if anchor attribute is restored.
113     // Notes: - If anchor attribute is restored, all other existing attributes
114     //          are also restored.
115     //        - Anchor attribute isn't restored successfully, if it contains
116     //          an invalid anchor position and all other existing attributes
117     //          aren't restored.
118     //          This situation occurs for undo of styles.
119     bool RestoreFlyAnchor(::sw::UndoRedoContext & rContext);
120     // <--
121     // --> OD 2008-02-27 #refactorlists# - removed <rAffectedItemSet>
122     void Init();
123     // <--
124 
125 public:
126     // register at the Format and save old attributes
127     // --> OD 2008-02-27 #refactorlists# - removed <rNewSet>
128     SwUndoFmtAttr( const SfxItemSet& rOldSet,
129                    SwFmt& rFmt,
130                    bool bSaveDrawPt = true );
131     // <--
132     SwUndoFmtAttr( const SfxPoolItem& rItem,
133                    SwFmt& rFmt,
134                    bool bSaveDrawPt = true );
135 
136     virtual ~SwUndoFmtAttr();
137 
138     virtual void UndoImpl( ::sw::UndoRedoContext & );
139     virtual void RedoImpl( ::sw::UndoRedoContext & );
140     virtual void RepeatImpl( ::sw::RepeatContext & );
141 
142     virtual SwRewriter GetRewriter() const;
143 
144     void PutAttr( const SfxPoolItem& rItem );
145     SwFmt* GetFmt( SwDoc& rDoc );   // checks if it is still in the Doc!
146 };
147 
148 // --> OD 2008-02-12 #newlistlevelattrs#
149 class SwUndoFmtResetAttr : public SwUndo
150 {
151     public:
152         SwUndoFmtResetAttr( SwFmt& rChangedFormat,
153                             const sal_uInt16 nWhichId );
154         ~SwUndoFmtResetAttr();
155 
156         virtual void UndoImpl( ::sw::UndoRedoContext & );
157         virtual void RedoImpl( ::sw::UndoRedoContext & );
158 
159     private:
160         // format at which a certain attribute is reset.
161         SwFmt * const m_pChangedFormat;
162         // which ID of the reset attribute
163         const sal_uInt16 m_nWhichId;
164         // old attribute which has been reset - needed for undo.
165         ::std::auto_ptr<SfxPoolItem> m_pOldItem;
166 };
167 // <--
168 
169 class SwUndoDontExpandFmt : public SwUndo
170 {
171     const sal_uLong m_nNodeIndex;
172     const xub_StrLen m_nContentIndex;
173 
174 public:
175     SwUndoDontExpandFmt( const SwPosition& rPos );
176 
177     virtual void UndoImpl( ::sw::UndoRedoContext & );
178     virtual void RedoImpl( ::sw::UndoRedoContext & );
179     virtual void RepeatImpl( ::sw::RepeatContext & );
180 };
181 
182 // helper class to receive changed attribute sets
183 class SwUndoFmtAttrHelper : public SwClient
184 {
185     ::std::auto_ptr<SwUndoFmtAttr> m_pUndo;
186     const bool m_bSaveDrawPt;
187 
188 public:
189     SwUndoFmtAttrHelper( SwFmt& rFmt, bool bSaveDrawPt = true );
190 
191     virtual void Modify( const SfxPoolItem*, const SfxPoolItem* );
192 
GetUndo() const193     SwUndoFmtAttr* GetUndo() const  { return m_pUndo.get(); }
194     // release the undo object (so it is not deleted here), and return it
ReleaseUndo()195     SwUndoFmtAttr* ReleaseUndo()    { return m_pUndo.release(); }
196 };
197 
198 
199 class SwUndoMoveLeftMargin : public SwUndo, private SwUndRng
200 {
201     const ::std::auto_ptr<SwHistory> m_pHistory;
202     const bool m_bModulus;
203 
204 public:
205     SwUndoMoveLeftMargin( const SwPaM&, sal_Bool bRight, sal_Bool bModulus );
206 
207     virtual ~SwUndoMoveLeftMargin();
208 
209     virtual void UndoImpl( ::sw::UndoRedoContext & );
210     virtual void RedoImpl( ::sw::UndoRedoContext & );
211     virtual void RepeatImpl( ::sw::RepeatContext & );
212 
GetHistory()213     SwHistory& GetHistory() { return *m_pHistory; }
214 
215 };
216 
217 
218 //--------------------------------------------------------------------
219 
220 class SwUndoDefaultAttr : public SwUndo
221 {
222     ::std::auto_ptr<SfxItemSet> m_pOldSet;        // the old attributes
223     ::std::auto_ptr<SvxTabStopItem> m_pTabStop;
224 
225 public:
226     // registers at the format and saves old attributes
227     SwUndoDefaultAttr( const SfxItemSet& rOldSet );
228 
229     virtual ~SwUndoDefaultAttr();
230 
231     virtual void UndoImpl( ::sw::UndoRedoContext & );
232     virtual void RedoImpl( ::sw::UndoRedoContext & );
233 };
234 
235 
236 //--------------------------------------------------------------------
237 
238 class SwUndoChangeFootNote : public SwUndo, private SwUndRng
239 {
240     const ::std::auto_ptr<SwHistory> m_pHistory;
241     const String m_Text;
242     const sal_uInt16 m_nNumber;
243     const bool m_bEndNote;
244 
245 public:
246     SwUndoChangeFootNote( const SwPaM& rRange, const String& rTxt,
247                           sal_uInt16 nNum, bool bIsEndNote );
248     virtual ~SwUndoChangeFootNote();
249 
250     virtual void UndoImpl( ::sw::UndoRedoContext & );
251     virtual void RedoImpl( ::sw::UndoRedoContext & );
252     virtual void RepeatImpl( ::sw::RepeatContext & );
253 
GetHistory()254     SwHistory& GetHistory() { return *m_pHistory; }
255 };
256 
257 class SwUndoFootNoteInfo : public SwUndo
258 {
259     ::std::auto_ptr<SwFtnInfo> m_pFootNoteInfo;
260 
261 public:
262     SwUndoFootNoteInfo( const SwFtnInfo &rInfo );
263 
264     virtual ~SwUndoFootNoteInfo();
265 
266     virtual void UndoImpl( ::sw::UndoRedoContext & );
267     virtual void RedoImpl( ::sw::UndoRedoContext & );
268 };
269 
270 class SwUndoEndNoteInfo : public SwUndo
271 {
272     ::std::auto_ptr<SwEndNoteInfo> m_pEndNoteInfo;
273 
274 public:
275     SwUndoEndNoteInfo( const SwEndNoteInfo &rInfo );
276 
277     virtual ~SwUndoEndNoteInfo();
278 
279     virtual void UndoImpl( ::sw::UndoRedoContext & );
280     virtual void RedoImpl( ::sw::UndoRedoContext & );
281 };
282 
283 #endif // SW_UNDO_ATTRIBUTE_HXX
284 
285