lok: avoid expensive fetching of a property.
[LibreOffice.git] / sw / inc / IDocumentContentOperations.hxx
blob14724eae3731e6a1c00308414b51dd29928785e5
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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 .
20 #ifndef INCLUDED_SW_INC_IDOCUMENTCONTENTOPERATIONS_HXX
21 #define INCLUDED_SW_INC_IDOCUMENTCONTENTOPERATIONS_HXX
23 #include <sal/types.h>
24 #include <rtl/ustring.hxx>
25 #include "swtypes.hxx"
27 class SwPaM;
28 struct SwPosition;
29 class SwNode;
30 class SwNodeRange;
31 class Graphic;
32 class SfxItemSet;
33 class SfxPoolItem;
34 class GraphicObject;
35 class SdrObject;
36 class SwFrameFormat;
37 class SwDrawFrameFormat;
38 class SwFlyFrameFormat;
39 class SwNodeIndex;
40 class SwRootFrame;
41 class SwTextAttr;
43 namespace utl { class TransliterationWrapper; }
44 namespace svt { class EmbeddedObjectRef; }
46 enum class SwMoveFlags
48 DEFAULT = 0x00,
49 ALLFLYS = 0x01,
50 CREATEUNDOOBJ = 0x02,
51 REDLINES = 0x04,
52 NO_DELFRMS = 0x08
54 namespace o3tl
56 template<> struct typed_flags<SwMoveFlags> : is_typed_flags<SwMoveFlags, 0x0f> {};
59 // constants for inserting text
60 enum class SwInsertFlags
62 DEFAULT = 0x00, // no extras
63 EMPTYEXPAND = 0x01, // expand empty hints at insert position
64 NOHINTEXPAND = 0x02, // do not expand any hints at insert pos
65 FORCEHINTEXPAND = 0x04 // expand all hints at insert position
67 namespace o3tl
69 template<> struct typed_flags<SwInsertFlags> : is_typed_flags<SwInsertFlags, 0x07> {};
72 enum class SwCopyFlags
74 Default = 0,
75 CopyAll = (1<<0), ///< copy break attributes even when source is single node
76 CheckPosInFly = (1<<1), ///< check if target position is in fly anchored at source range
77 IsMoveToFly = (1<<2), ///< MakeFlyAndMove
78 // TODO: mbCopyIsMove? mbIsRedlineMove?
80 namespace o3tl
82 template<> struct typed_flags<SwCopyFlags> : is_typed_flags<SwCopyFlags, 0x07> {};
85 /** Text operation/manipulation interface
87 class IDocumentContentOperations
89 public:
90 public:
91 /** Copy a selected content range to a position
93 The position can be in the same or in an another document. It can also
94 be within the range!
96 \warning The range has to include at least two nodes or has to be a
97 SwDoc::IsColumnSelection, because the rPam is treated [mark, point[.
99 Normally this function should work only with content nodes. But there
100 is a special case used by SwDoc::Paste, which starts the SwPaM at the
101 content start node. This position doesn't contain any content:
103 @code
104 SwNodeIndex aSourceIdx( rSource.GetNodes().GetEndOfExtras(), 1 );
105 @endcode
107 This is important, because it prevents merging of the first node of
108 the range into the node pointed to by \p rPos.
109 As a result this keeps all properties of the first real content node,
110 which is the 2nd, including the Flys and the page description. In this
111 case the first (fake) node is silently dropped and all other nodes are
112 just copied.
114 @param rPam
115 The source node range to copy
117 @param rPos
118 The target copy destination
120 @param flags
121 SwCopyFlags::CheckPos:
122 If this function should check if rPos is in a fly frame anchored in
123 rPam. If false, then no such check will be performed, and it is assumed
124 that the caller took care of verifying this constraint already.
126 virtual bool CopyRange(SwPaM& rPam, SwPosition& rPos, SwCopyFlags flags) const = 0;
128 /** Delete section containing the node.
130 virtual void DeleteSection(SwNode* pNode) = 0;
132 /** Delete a range SwFlyFrameFormat.
134 virtual void DeleteRange(SwPaM&) = 0;
136 /** Delete full paragraphs.
138 virtual bool DelFullPara(SwPaM&) = 0;
140 /** complete delete of a given PaM
142 #i100466#
143 Add optional parameter <bForceJoinNext>, default value <false>
144 Needed for hiding of deletion redlines
146 virtual bool DeleteAndJoin( SwPaM&,
147 const bool bForceJoinNext = false ) = 0;
149 virtual bool MoveRange(SwPaM&, SwPosition&, SwMoveFlags) = 0;
151 virtual bool MoveNodeRange(SwNodeRange&, SwNodeIndex&, SwMoveFlags) = 0;
153 /** Move a range.
155 virtual bool MoveAndJoin(SwPaM&, SwPosition&) = 0;
157 /** Overwrite string in an existing text node.
159 virtual bool Overwrite(const SwPaM &rRg, const OUString& rStr) = 0;
161 /** Insert string into existing text node at position rRg.Point().
163 virtual bool InsertString(const SwPaM &rRg, const OUString&,
164 const SwInsertFlags nInsertMode = SwInsertFlags::EMPTYEXPAND ) = 0;
166 /** change text to Upper/Lower/Hiragana/Katakana/...
168 virtual void TransliterateText(const SwPaM& rPaM, utl::TransliterationWrapper&) = 0;
170 /** Insert graphic or formula. The XXXX are copied.
172 virtual SwFlyFrameFormat* InsertGraphic(
173 const SwPaM &rRg, const OUString& rGrfName,
174 const OUString& rFltName, const Graphic* pGraphic,
175 const SfxItemSet* pFlyAttrSet, const SfxItemSet* pGrfAttrSet,
176 SwFrameFormat*) = 0;
178 virtual SwFlyFrameFormat* InsertGraphicObject(
179 const SwPaM& rRg, const GraphicObject& rGrfObj,
180 const SfxItemSet* pFlyAttrSet,
181 const SfxItemSet* pGrfAttrSet) = 0;
183 /** Transpose graphic (with undo)
185 virtual void ReRead(SwPaM&, const OUString& rGrfName, const OUString& rFltName, const Graphic* pGraphic) = 0;
187 /** Insert a DrawObject. The object must be already registered
188 in DrawModel.
190 virtual SwDrawFrameFormat* InsertDrawObj(
191 const SwPaM &rRg, SdrObject& rDrawObj, const SfxItemSet& rFlyAttrSet) = 0;
193 /** Insert OLE-objects.
195 virtual SwFlyFrameFormat* InsertEmbObject(
196 const SwPaM &rRg, const svt::EmbeddedObjectRef& xObj,
197 SfxItemSet* pFlyAttrSet) = 0;
199 virtual SwFlyFrameFormat* InsertOLE(
200 const SwPaM &rRg, const OUString& rObjName, sal_Int64 nAspect,
201 const SfxItemSet* pFlyAttrSet, const SfxItemSet* pGrfAttrSet) = 0;
203 /** Split a node at rPos (implemented only for TextNode).
205 virtual bool SplitNode(const SwPosition &rPos, bool bChkTableStart) = 0;
207 virtual bool AppendTextNode(SwPosition& rPos) = 0;
209 /** Replace selected range in a TextNode with string.
210 Intended for search & replace.
211 bRegExpRplc - replace tabs (\\t) and insert the found string
212 ( not \& ). E.g.: Find: "zzz", Replace: "xx\t\\t..&..\&"
213 --> "xx\t<Tab>..zzz..&"
215 virtual bool ReplaceRange(SwPaM& rPam, const OUString& rNewStr,
216 const bool bRegExReplace) = 0;
218 /** Insert an attribute. If rRg spans several nodes the
219 attribute is split, provided it makes sense.
220 Nodes, where this attribute does not make sense are ignored.
221 In nodes completely enclosed in the selection the attribute
222 becomes hard-formatted, in all other (text-) nodes the attribute
223 is inserted into the attribute array.
224 For a character attribute, in cases where no selection exists
225 an "empty" hint is inserted. If there is a selection the attribute
226 is hard-formatted and added to the node at rRg.Start().
227 If the attribute could not be inserted, the method returns
228 false.
230 virtual bool InsertPoolItem(const SwPaM &rRg, const SfxPoolItem&,
231 const SetAttrMode nFlags = SetAttrMode::DEFAULT,
232 SwRootFrame const* pLayout = nullptr,
233 bool bExpandCharToPara = false,
234 SwTextAttr **ppNewTextAttr = nullptr) = 0;
236 virtual void InsertItemSet (const SwPaM &rRg, const SfxItemSet&,
237 const SetAttrMode nFlags = SetAttrMode::DEFAULT,
238 SwRootFrame const* pLayout = nullptr) = 0;
240 /** Removes any leading white space from the paragraph
242 virtual void RemoveLeadingWhiteSpace(const SwPosition & rPos ) = 0;
244 protected:
245 virtual ~IDocumentContentOperations() {};
248 #endif // INCLUDED_SW_INC_IDOCUMENTCONTENTOPERATIONS_HXX
250 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */