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 IDOCUMENTCONTENTOPERATIONS_HXX_INCLUDED
25  #define IDOCUMENTCONTENTOPERATIONS_HXX_INCLUDED
26 
27  #ifndef _SAL_TYPES_H_
28  #include <sal/types.h>
29  #endif
30 
31  class SwPaM;
32  struct SwPosition;
33  class SwNode;
34  class SwNodeRange;
35  class String;
36  class Graphic;
37  class SfxItemSet;
38  class SfxPoolItem;
39  class GraphicObject;
40  class SdrObject;
41  class SwFrmFmt;
42  class SwDrawFrmFmt;
43  class SwFlyFrmFmt;
44  class SwNodeIndex;
45 
46  namespace utl { class TransliterationWrapper; }
47  namespace svt { class EmbeddedObjectRef; }
48 
49  /** Text operation/manipulation interface
50  */
51  class IDocumentContentOperations
52  {
53  public:
54     enum SwMoveFlags
55     {
56         DOC_MOVEDEFAULT = 0x00,
57         DOC_MOVEALLFLYS = 0x01,
58         DOC_CREATEUNDOOBJ = 0x02,
59         DOC_MOVEREDLINES = 0x04,
60         DOC_NO_DELFRMS = 0x08
61     };
62 
63     // constants for inserting text
64     enum InsertFlags
65     {   INS_DEFAULT         = 0x00 // no extras
66     ,   INS_EMPTYEXPAND     = 0x01 // expand empty hints at insert position
67     ,   INS_NOHINTEXPAND    = 0x02 // do not expand any hints at insert pos
68     ,   INS_FORCEHINTEXPAND = 0x04 // expand all hints at insert position
69     };
70 
71  public:
72     /** Kopieren eines Bereiches im oder in ein anderes Dokument !
73 	    Die Position kann auch im Bereich liegen !!
74     */
75     virtual bool CopyRange(SwPaM&, SwPosition&, const bool bCopyAll ) const = 0;
76 
77 	/** Loesche die Section, in der der Node steht.
78     */
79 	virtual void DeleteSection(SwNode* pNode) = 0;
80 
81     /** loeschen eines BereichesSwFlyFrmFmt
82     */
83     virtual bool DeleteRange(SwPaM&) = 0;
84 
85     /** loeschen gesamter Absaetze
86     */
87 	virtual bool DelFullPara(SwPaM&) = 0;
88 
89     /** complete delete of a given PaM
90 
91         OD 2009-08-20 #i100466#
92         Add optional parameter <bForceJoinNext>, default value <false>
93         Needed for hiding of deletion redlines
94     */
95     virtual bool DeleteAndJoin( SwPaM&,
96                                 const bool bForceJoinNext = false ) = 0;
97 
98     /** verschieben eines Bereiches
99     */
100     virtual bool MoveRange(SwPaM&, SwPosition&, SwMoveFlags) = 0;
101 
102     /** verschieben ganzer Nodes
103     */
104     virtual bool MoveNodeRange(SwNodeRange&, SwNodeIndex&, SwMoveFlags) = 0;
105 
106     /** verschieben eines Bereiches
107     */
108 	virtual bool MoveAndJoin(SwPaM&, SwPosition&, SwMoveFlags) = 0;
109 
110 	/** Ueberschreiben eines Strings in einem bestehenden Textnode.
111     */
112 	virtual bool Overwrite(const SwPaM &rRg, const String& rStr) = 0;
113 
114     /** Insert string into existing text node at position rRg.Point().
115     */
116     virtual bool InsertString(const SwPaM &rRg, const String&,
117               const enum InsertFlags nInsertMode = INS_EMPTYEXPAND ) = 0;
118 
119 	/** change text to Upper/Lower/Hiragana/Katagana/...
120     */
121 	virtual void TransliterateText(const SwPaM& rPaM, utl::TransliterationWrapper&) = 0;
122 
123 	/** Einfuegen einer Grafik, Formel. Die XXXX werden kopiert.
124     */
125 	virtual SwFlyFrmFmt* Insert(const SwPaM &rRg, const String& rGrfName, const String& rFltName, const Graphic* pGraphic,
126 						const SfxItemSet* pFlyAttrSet, const SfxItemSet* pGrfAttrSet, SwFrmFmt*) = 0;
127 
128     /**
129     */
130 	virtual SwFlyFrmFmt* Insert(const SwPaM& rRg, const GraphicObject& rGrfObj,	const SfxItemSet* pFlyAttrSet,
131 						const SfxItemSet* pGrfAttrSet, SwFrmFmt*) = 0;
132 
133 	/** austauschen einer Grafik (mit Undo)
134     */
135 	virtual void ReRead(SwPaM&, const String& rGrfName, const String& rFltName, const Graphic* pGraphic, const GraphicObject* pGrfObj) = 0;
136 
137 	/** Einfuegen eines DrawObjectes. Das Object muss bereits im DrawModel
138 	    angemeldet sein.
139     */
140 	virtual SwDrawFrmFmt* Insert(const SwPaM &rRg, SdrObject& rDrawObj, const SfxItemSet* pFlyAttrSet, SwFrmFmt*) = 0;
141 
142 	/** Einfuegen von OLE-Objecten.
143     */
144     virtual SwFlyFrmFmt* Insert(const SwPaM &rRg, const svt::EmbeddedObjectRef& xObj, const SfxItemSet* pFlyAttrSet,
145 						const SfxItemSet* pGrfAttrSet, SwFrmFmt*) = 0;
146 
147 	virtual SwFlyFrmFmt* InsertOLE(const SwPaM &rRg, const String& rObjName, sal_Int64 nAspect, const SfxItemSet* pFlyAttrSet,
148                            const SfxItemSet* pGrfAttrSet, SwFrmFmt*) = 0;
149 
150     /** Aufspalten eines Nodes an rPos (nur fuer den TxtNode implementiert)
151     */
152 	virtual bool SplitNode(const SwPosition &rPos, bool bChkTableStart) = 0;
153 
154     /**
155     */
156 	virtual bool AppendTxtNode(SwPosition& rPos) = 0;
157 
158 	/** Ersetz einen selektierten Bereich in einem TextNode mit dem
159 	    String. Ist fuers Suchen&Ersetzen gedacht.
160         bRegExpRplc - ersetze Tabs (\\t) und setze den gefundenen String
161 				 ein ( nicht \& )
162 	    			z.B.: Fnd: "zzz", Repl: "xx\t\\t..&..\&"
163 						--> "xx\t<Tab>..zzz..&"
164     */
165     virtual bool ReplaceRange(SwPaM& rPam, const String& rNewStr,
166                               const bool bRegExReplace) = 0;
167 
168     /** Einfuegen eines Attributs. Erstreckt sich rRg ueber
169 	    mehrere Nodes, wird das Attribut aufgespaltet, sofern
170         dieses Sinn macht. Nodes, in denen dieses Attribut keinen
171         Sinn macht, werden ignoriert.  In vollstaendig in der
172         Selektion eingeschlossenen Nodes wird das Attribut zu
173         harter Formatierung, in den anderen (Text-)Nodes wird das
174         Attribut in das Attributearray eingefuegt. Bei einem
175         Zeichenattribut wird ein "leerer" Hint eingefuegt,
176         wenn keine Selektion
177         vorliegt; andernfalls wird das Attribut als harte
178         Formatierung dem durch rRg.Start() bezeichneten Node
179         hinzugefuegt.  Wenn das Attribut nicht eingefuegt werden
180         konnte, liefert die Methode sal_False.
181 	*/
182     virtual bool InsertPoolItem(const SwPaM &rRg, const SfxPoolItem&,
183                                 const sal_uInt16 nFlags) = 0;
184 
185     /**
186     */
187     virtual bool InsertItemSet (const SwPaM &rRg, const SfxItemSet&,
188                                 const sal_uInt16 nFlags) = 0;
189 
190     /** Removes any leading white space from the paragraph
191     */
192     virtual void RemoveLeadingWhiteSpace(const SwPosition & rPos ) = 0;
193 
194  protected:
195     virtual ~IDocumentContentOperations() {};
196 };
197 
198 #endif // IDOCUMENTCONTENTOPERATIONS_HXX_INCLUDED
199 
200