1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20 #ifndef INCLUDED_SW_INC_IDOCUMENTREDLINEACCESS_HXX
21 #define INCLUDED_SW_INC_IDOCUMENTREDLINEACCESS_HXX
22
23 #include <sal/config.h>
24
25 #include <cstddef>
26
27 #include <sal/types.h>
28
29 #include <com/sun/star/uno/Sequence.h>
30 #include <o3tl/typed_flags_set.hxx>
31 #include <svx/ctredlin.hxx>
32
33 #include "docary.hxx"
34
35 class SwRangeRedline;
36 class SwTableRowRedline;
37 class SwTableCellRedline;
38 class SwPaM;
39 struct SwPosition;
40 class SwStartNode;
41 class SwNode;
42
43 enum class RedlineFlags
44 {
45 NONE = 0x000, ///< no RedlineFlags
46 On = 0x001, ///< RedlineFlags on
47 Ignore = 0x002, ///< ignore Redlines
48 ShowInsert = 0x010, ///< show all inserts
49 ShowDelete = 0x020, ///< show all deletes
50 ShowMask = ShowInsert | ShowDelete,
51
52 // For internal management:
53 // remove the original Redlines together with their content
54 // (Clipboard/text modules).
55 DeleteRedlines = 0x100,
56 // don't combine any redlines. This flag may be only used in Undo.
57 DontCombineRedlines = 0x400,
58 };
59 namespace o3tl
60 {
61 template<> struct typed_flags<RedlineFlags> : is_typed_flags<RedlineFlags, 0x533> {};
62 }
63
SwRedlineTypeToOUString(RedlineType eType)64 inline OUString SwRedlineTypeToOUString(RedlineType eType)
65 {
66 OUString sRet;
67 switch(eType)
68 {
69 case RedlineType::Insert: sRet = "Insert"; break;
70 case RedlineType::Delete: sRet = "Delete"; break;
71 case RedlineType::Format: sRet = "Format"; break;
72 case RedlineType::ParagraphFormat: sRet = "ParagraphFormat"; break;
73 case RedlineType::Table: sRet = "TextTable"; break;
74 case RedlineType::FmtColl:sRet = "Style"; break;
75 default: break;
76 }
77 return sRet;
78 };
79
80 class IDocumentRedlineAccess
81 {
82 // Static helper functions
83 public:
IsShowChanges(const RedlineFlags eM)84 static bool IsShowChanges(const RedlineFlags eM)
85 { return (RedlineFlags::ShowInsert | RedlineFlags::ShowDelete) == (eM & RedlineFlags::ShowMask); }
86
IsHideChanges(const RedlineFlags eM)87 static bool IsHideChanges(const RedlineFlags eM)
88 { return RedlineFlags::ShowInsert == (eM & RedlineFlags::ShowMask); }
89
IsShowOriginal(const RedlineFlags eM)90 static bool IsShowOriginal(const RedlineFlags eM)
91 { return RedlineFlags::ShowDelete == (eM & RedlineFlags::ShowMask); }
92
IsRedlineOn(const RedlineFlags eM)93 static bool IsRedlineOn(const RedlineFlags eM)
94 { return RedlineFlags::On == (eM & (RedlineFlags::On | RedlineFlags::Ignore )); }
95
96 public:
97
98 /** Query the currently set redline mode
99
100 @returns
101 the currently set redline mode
102 */
103 virtual RedlineFlags GetRedlineFlags() const = 0;
104
105 /** Set a new redline mode.
106
107 @param eMode
108 [in] the new redline mode.
109 */
110 virtual void SetRedlineFlags_intern(/*[in]*/RedlineFlags eMode) = 0;
111
112 /** Set a new redline mode.
113
114 @param eMode
115 [in] the new redline mode.
116 */
117 virtual void SetRedlineFlags(/*[in]*/RedlineFlags eMode) = 0;
118
119 /** Query if redlining is on.
120
121 @returns
122 <TRUE/> if redlining is on <FALSE/> otherwise
123 */
124 virtual bool IsRedlineOn() const = 0;
125
126 virtual bool IsIgnoreRedline() const = 0;
127
128 virtual const SwRedlineTable& GetRedlineTable() const = 0;
129 virtual SwRedlineTable& GetRedlineTable() = 0;
130 virtual const SwExtraRedlineTable& GetExtraRedlineTable() const = 0;
131 virtual SwExtraRedlineTable& GetExtraRedlineTable() = 0;
132 virtual bool HasExtraRedlineTable() const = 0;
133
134 virtual bool IsInRedlines(const SwNode& rNode) const = 0;
135
136 enum class AppendResult { IGNORED, MERGED, APPENDED };
137 /** Append a new redline
138
139 @param pNewRedl redline to insert
140
141 @param bCallDelete
142 if set, then for a new DELETE redline that is inserted so that it
143 overlaps an existing INSERT redline with the same author, the
144 overlapping range is deleted, i.e. the new DELETE removes
145 existing INSERT for that range
146
147 @returns
148 APPENDED if pNewRedl is still alive and was appended
149 MERGED if pNewRedl was deleted but has been merged with existing one
150 IGNORED if pNewRedl was deleted and ignored/invalid
151 */
152 virtual AppendResult AppendRedline(/*[in]*/SwRangeRedline* pNewRedl, /*[in]*/bool bCallDelete) = 0;
153
154 virtual bool AppendTableRowRedline(/*[in]*/SwTableRowRedline* pPtr) = 0;
155 virtual bool AppendTableCellRedline(/*[in]*/SwTableCellRedline* pPtr) = 0;
156
157 virtual bool SplitRedline(/*[in]*/const SwPaM& rPam) = 0;
158
159 virtual bool DeleteRedline(
160 /*[in]*/const SwPaM& rPam,
161 /*[in]*/bool bSaveInUndo,
162 /*[in]*/RedlineType nDelType) = 0;
163
164 virtual bool DeleteRedline(
165 /*[in]*/const SwStartNode& rSection,
166 /*[in]*/bool bSaveInUndo,
167 /*[in]*/RedlineType nDelType) = 0;
168
169 virtual SwRedlineTable::size_type GetRedlinePos(
170 /*[in]*/const SwNode& rNode,
171 /*[in]*/RedlineType nType) const = 0;
172
173 virtual void CompressRedlines() = 0;
174
175 virtual const SwRangeRedline* GetRedline(
176 /*[in]*/const SwPosition& rPos,
177 /*[in]*/SwRedlineTable::size_type* pFndPos) const = 0;
178
179 virtual bool IsRedlineMove() const = 0;
180
181 virtual void SetRedlineMove(/*[in]*/bool bFlag) = 0;
182
183 virtual bool AcceptRedline(/*[in]*/SwRedlineTable::size_type nPos, /*[in]*/bool bCallDelete) = 0;
184
185 virtual bool AcceptRedline(/*[in]*/const SwPaM& rPam, /*[in]*/bool bCallDelete) = 0;
186
187 virtual void AcceptRedlineParagraphFormatting(/*[in]*/const SwPaM& rPam ) = 0;
188
189 virtual bool RejectRedline(/*[in]*/SwRedlineTable::size_type nPos, /*[in]*/bool bCallDelete) = 0;
190
191 virtual bool RejectRedline(/*[in]*/const SwPaM& rPam, /*[in]*/bool bCallDelete) = 0;
192
193 virtual const SwRangeRedline* SelNextRedline(/*[in]*/SwPaM& rPam) const = 0;
194
195 virtual const SwRangeRedline* SelPrevRedline(/*[in]*/SwPaM& rPam) const = 0;
196
197 virtual void AcceptAllRedline(/*[in]*/bool bAcceptReject) = 0;
198
199 // Representation has changed, invalidate all Redlines.
200 virtual void UpdateRedlineAttr() = 0;
201
202 // Create a new Author if required.
203 virtual std::size_t GetRedlineAuthor() = 0;
204
205 // For Readers etc.: register new Author in table.
206 virtual std::size_t InsertRedlineAuthor(const OUString& rAuthor) = 0;
207
208 // Place a comment at Redline at given position.
209 virtual bool SetRedlineComment(
210 /*[in]*/const SwPaM& rPam,
211 /*[in]*/const OUString& rComment) = 0;
212
213 virtual const css::uno::Sequence <sal_Int8>& GetRedlinePassword() const = 0;
214
215 virtual void SetRedlinePassword(
216 /*[in]*/const css::uno::Sequence <sal_Int8>& rNewPassword) = 0;
217
218 protected:
~IDocumentRedlineAccess()219 virtual ~IDocumentRedlineAccess() {};
220 };
221
222 #endif
223
224 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
225