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