1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
22 #include <sal/types.h>
23 #include <rtl/ustring.hxx>
24 #include "swtypes.hxx"
36 class SwDrawFrameFormat
;
37 class SwFlyFrameFormat
;
42 namespace utl
{ class TransliterationWrapper
; }
43 namespace svt
{ class EmbeddedObjectRef
; }
45 enum class SwMoveFlags
55 template<> struct typed_flags
<SwMoveFlags
> : is_typed_flags
<SwMoveFlags
, 0x0f> {};
58 // constants for inserting text
59 enum class SwInsertFlags
61 DEFAULT
= 0x00, // no extras
62 EMPTYEXPAND
= 0x01, // expand empty hints at insert position
63 NOHINTEXPAND
= 0x02, // do not expand any hints at insert pos
64 FORCEHINTEXPAND
= 0x04 // expand all hints at insert position
68 template<> struct typed_flags
<SwInsertFlags
> : is_typed_flags
<SwInsertFlags
, 0x07> {};
71 enum class SwCopyFlags
74 CopyAll
= (1<<0), ///< copy break attributes even when source is single node
75 CheckPosInFly
= (1<<1), ///< check if target position is in fly anchored at source range
76 IsMoveToFly
= (1<<2), ///< MakeFlyAndMove
77 // TODO: mbCopyIsMove? mbIsRedlineMove?
81 template<> struct typed_flags
<SwCopyFlags
> : is_typed_flags
<SwCopyFlags
, 0x07> {};
84 enum class SwDeleteFlags
87 ArtificialSelection
= (1<<0), ///< keyboard delete, artificial selection, avoid deleting flys
91 template<> struct typed_flags
<SwDeleteFlags
> : is_typed_flags
<SwDeleteFlags
, 0x01> {};
94 /** Text operation/manipulation interface
96 class IDocumentContentOperations
100 /** Copy a selected content range to a position
102 The position can be in the same or in an another document. It can also
105 \warning The range has to include at least two nodes or has to be a
106 SwDoc::IsColumnSelection, because the rPam is treated [mark, point[.
108 Normally this function should work only with content nodes. But there
109 is a special case used by SwDoc::Paste, which starts the SwPaM at the
110 content start node. This position doesn't contain any content:
113 SwNodeIndex aSourceIdx( rSource.GetNodes().GetEndOfExtras(), 1 );
116 This is important, because it prevents merging of the first node of
117 the range into the node pointed to by \p rPos.
118 As a result this keeps all properties of the first real content node,
119 which is the 2nd, including the Flys and the page description. In this
120 case the first (fake) node is silently dropped and all other nodes are
124 The source node range to copy
127 The target copy destination
130 SwCopyFlags::CheckPos:
131 If this function should check if rPos is in a fly frame anchored in
132 rPam. If false, then no such check will be performed, and it is assumed
133 that the caller took care of verifying this constraint already.
135 virtual bool CopyRange(SwPaM
& rPam
, SwPosition
& rPos
, SwCopyFlags flags
) const = 0;
137 /** Delete section containing the node.
139 virtual void DeleteSection(SwNode
* pNode
) = 0;
141 /** Delete a range SwFlyFrameFormat.
143 virtual void DeleteRange(SwPaM
&) = 0;
145 /** Delete full paragraphs.
147 virtual bool DelFullPara(SwPaM
&) = 0;
149 /** complete delete of a given PaM
151 virtual bool DeleteAndJoin(SwPaM
&, SwDeleteFlags flags
= SwDeleteFlags::Default
) = 0;
153 virtual bool MoveRange(SwPaM
&, SwPosition
&, SwMoveFlags
) = 0;
155 virtual bool MoveNodeRange(SwNodeRange
&, SwNode
&, SwMoveFlags
) = 0;
159 virtual void MoveAndJoin(SwPaM
&, SwPosition
&) = 0;
161 /** Overwrite string in an existing text node.
163 virtual bool Overwrite(const SwPaM
&rRg
, const OUString
& rStr
) = 0;
165 /** Insert string into existing text node at position rRg.Point().
167 virtual bool InsertString(const SwPaM
&rRg
, const OUString
&,
168 const SwInsertFlags nInsertMode
= SwInsertFlags::EMPTYEXPAND
) = 0;
170 /// States that the last inserted string came from IME.
171 virtual void SetIME(bool bIME
) = 0;
173 /// Did the last inserted string come from IME?
174 virtual bool GetIME() const = 0;
176 /** change text to Upper/Lower/Hiragana/Katakana/...
178 virtual void TransliterateText(const SwPaM
& rPaM
, utl::TransliterationWrapper
&) = 0;
180 /** Insert graphic or formula. The XXXX are copied.
182 virtual SwFlyFrameFormat
* InsertGraphic(
183 const SwPaM
&rRg
, const OUString
& rGrfName
,
184 const OUString
& rFltName
, const Graphic
* pGraphic
,
185 const SfxItemSet
* pFlyAttrSet
, const SfxItemSet
* pGrfAttrSet
,
188 /** Transpose graphic (with undo)
190 virtual void ReRead(SwPaM
&, const OUString
& rGrfName
, const OUString
& rFltName
, const Graphic
* pGraphic
) = 0;
192 /** Insert a DrawObject. The object must be already registered
195 virtual SwDrawFrameFormat
* InsertDrawObj(
196 const SwPaM
&rRg
, SdrObject
& rDrawObj
, const SfxItemSet
& rFlyAttrSet
) = 0;
198 /** Insert OLE-objects.
200 virtual SwFlyFrameFormat
* InsertEmbObject(
201 const SwPaM
&rRg
, const svt::EmbeddedObjectRef
& xObj
,
202 SfxItemSet
* pFlyAttrSet
) = 0;
204 virtual SwFlyFrameFormat
* InsertOLE(
205 const SwPaM
&rRg
, const OUString
& rObjName
, sal_Int64 nAspect
,
206 const SfxItemSet
* pFlyAttrSet
, const SfxItemSet
* pGrfAttrSet
) = 0;
208 /** Split a node at rPos (implemented only for TextNode).
210 virtual bool SplitNode(const SwPosition
&rPos
, bool bChkTableStart
) = 0;
212 virtual bool AppendTextNode(SwPosition
& rPos
) = 0;
214 /** Replace selected range in a TextNode with string.
215 Intended for search & replace.
216 bRegExpRplc - replace tabs (\\t) and insert the found string
217 ( not \& ). E.g.: Find: "zzz", Replace: "xx\t\\t..&..\&"
218 --> "xx\t<Tab>..zzz..&"
220 virtual bool ReplaceRange(SwPaM
& rPam
, const OUString
& rNewStr
,
221 const bool bRegExReplace
) = 0;
223 /** Insert an attribute. If rRg spans several nodes the
224 attribute is split, provided it makes sense.
225 Nodes, where this attribute does not make sense are ignored.
226 In nodes completely enclosed in the selection the attribute
227 becomes hard-formatted, in all other (text-) nodes the attribute
228 is inserted into the attribute array.
229 For a character attribute, in cases where no selection exists
230 an "empty" hint is inserted. If there is a selection the attribute
231 is hard-formatted and added to the node at rRg.Start().
232 If the attribute could not be inserted, the method returns
235 virtual bool InsertPoolItem(const SwPaM
&rRg
, const SfxPoolItem
&,
236 const SetAttrMode nFlags
= SetAttrMode::DEFAULT
,
237 SwRootFrame
const* pLayout
= nullptr,
238 SwTextAttr
**ppNewTextAttr
= nullptr) = 0;
240 virtual void InsertItemSet (const SwPaM
&rRg
, const SfxItemSet
&,
241 const SetAttrMode nFlags
= SetAttrMode::DEFAULT
,
242 SwRootFrame
const* pLayout
= nullptr) = 0;
244 /** Removes any leading white space from the paragraph
246 virtual void RemoveLeadingWhiteSpace(const SwPosition
& rPos
) = 0;
247 virtual void RemoveLeadingWhiteSpace(SwPaM
& rPaM
) = 0;
250 virtual ~IDocumentContentOperations() {};
253 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */