xref: /aoo4110/main/sw/inc/IDocumentMarkAccess.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef IDOCUMENTMARKACCESS_HXX_INCLUDED
25*b1cdbd2cSJim Jagielski #define IDOCUMENTMARKACCESS_HXX_INCLUDED
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <sal/types.h>
28*b1cdbd2cSJim Jagielski #include <IMark.hxx>
29*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski class SwPaM;
32*b1cdbd2cSJim Jagielski class KeyCode;
33*b1cdbd2cSJim Jagielski class String;
34*b1cdbd2cSJim Jagielski struct SwPosition;
35*b1cdbd2cSJim Jagielski class SwTxtNode;
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski namespace sw { namespace mark {
38*b1cdbd2cSJim Jagielski     class SaveBookmark; // FIXME: Ugly: SaveBookmark is a core-internal class, and should not be used in the interface
39*b1cdbd2cSJim Jagielski }}
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski /** Provides access to the marks of a document.
42*b1cdbd2cSJim Jagielski */
43*b1cdbd2cSJim Jagielski class IDocumentMarkAccess
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski     public:
46*b1cdbd2cSJim Jagielski         enum MarkType
47*b1cdbd2cSJim Jagielski         {
48*b1cdbd2cSJim Jagielski             UNO_BOOKMARK,
49*b1cdbd2cSJim Jagielski             DDE_BOOKMARK,
50*b1cdbd2cSJim Jagielski             BOOKMARK,
51*b1cdbd2cSJim Jagielski             CROSSREF_HEADING_BOOKMARK,
52*b1cdbd2cSJim Jagielski             CROSSREF_NUMITEM_BOOKMARK,
53*b1cdbd2cSJim Jagielski             ANNOTATIONMARK,
54*b1cdbd2cSJim Jagielski             TEXT_FIELDMARK,
55*b1cdbd2cSJim Jagielski             CHECKBOX_FIELDMARK,
56*b1cdbd2cSJim Jagielski             NAVIGATOR_REMINDER
57*b1cdbd2cSJim Jagielski         };
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski         typedef ::boost::shared_ptr< ::sw::mark::IMark> pMark_t;
60*b1cdbd2cSJim Jagielski         typedef ::std::vector< pMark_t > container_t;
61*b1cdbd2cSJim Jagielski         typedef container_t::iterator iterator_t;
62*b1cdbd2cSJim Jagielski         typedef container_t::const_iterator const_iterator_t;
63*b1cdbd2cSJim Jagielski         typedef container_t::const_reverse_iterator const_reverse_iterator_t;
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski         /** Generates a new mark in the document for a certain selection.
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski            @param rPaM
68*b1cdbd2cSJim Jagielski            [in] the selection being marked.
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski            @param rProposedName
71*b1cdbd2cSJim Jagielski            [in] the proposed name of the new mark.
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski            @param eMark
74*b1cdbd2cSJim Jagielski            [in] the type of the new mark.
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski            @returns
77*b1cdbd2cSJim Jagielski            a pointer to the new mark (name might have changed).
78*b1cdbd2cSJim Jagielski         */
79*b1cdbd2cSJim Jagielski         virtual ::sw::mark::IMark* makeMark(const SwPaM& rPaM,
80*b1cdbd2cSJim Jagielski             const ::rtl::OUString& rProposedName,
81*b1cdbd2cSJim Jagielski             MarkType eMark) =0;
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski         virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM,
84*b1cdbd2cSJim Jagielski             const rtl::OUString& rName,
85*b1cdbd2cSJim Jagielski             const rtl::OUString& rType) = 0;
86*b1cdbd2cSJim Jagielski         virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const SwPaM& rPaM,
87*b1cdbd2cSJim Jagielski             const rtl::OUString& rName,
88*b1cdbd2cSJim Jagielski             const rtl::OUString& rType) = 0;
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski         virtual sw::mark::IMark* makeAnnotationMark(
91*b1cdbd2cSJim Jagielski             const SwPaM& rPaM,
92*b1cdbd2cSJim Jagielski             const ::rtl::OUString& rName ) = 0;
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski         /** Returns a mark in the document for a paragraph.
95*b1cdbd2cSJim Jagielski             If there is none, a mark will be created.
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski            @param rTxtNode
98*b1cdbd2cSJim Jagielski            [in] the paragraph being marked (a selection over the paragraph is marked)
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski            @param eMark
101*b1cdbd2cSJim Jagielski            [in] the type of the new mark.
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski            @returns
104*b1cdbd2cSJim Jagielski            a pointer to the new mark (name might have changed).
105*b1cdbd2cSJim Jagielski         */
106*b1cdbd2cSJim Jagielski         virtual ::sw::mark::IMark* getMarkForTxtNode(const SwTxtNode& rTxtNode,
107*b1cdbd2cSJim Jagielski             MarkType eMark) =0;
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski         /** Moves an existing mark to a new selection and performs needed updates.
110*b1cdbd2cSJim Jagielski             @param io_pMark
111*b1cdbd2cSJim Jagielski             [in/out] the mark to be moved
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski             @param rPaM
114*b1cdbd2cSJim Jagielski             [in] new selection to be marked
115*b1cdbd2cSJim Jagielski         */
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski         virtual void repositionMark(::sw::mark::IMark* io_pMark,
118*b1cdbd2cSJim Jagielski             const SwPaM& rPaM) =0;
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski         /** Renames an existing Mark, if possible.
121*b1cdbd2cSJim Jagielski             @param io_pMark
122*b1cdbd2cSJim Jagielski             [in/out] the mark to be renamed
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski             @param rNewName
125*b1cdbd2cSJim Jagielski             [in] new name for the mark
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski             @returns false, if renaming failed (because the name is already in use)
128*b1cdbd2cSJim Jagielski         */
129*b1cdbd2cSJim Jagielski             virtual bool renameMark(::sw::mark::IMark* io_pMark,
130*b1cdbd2cSJim Jagielski                 const ::rtl::OUString& rNewName) =0;
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski         /** Corrects marks (absolute)
133*b1cdbd2cSJim Jagielski             This method ignores the previous position of the mark in the paragraph
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski             @param rOldNode
136*b1cdbd2cSJim Jagielski             [in] the node from which nodes should be moved
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski             @param rNewPos
139*b1cdbd2cSJim Jagielski             [in] new position to which marks will be moved, if nOffset == 0
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski             @param nOffset
142*b1cdbd2cSJim Jagielski             [in] the offset by which the mark gets positioned of rNewPos
143*b1cdbd2cSJim Jagielski         */
144*b1cdbd2cSJim Jagielski         virtual void correctMarksAbsolute(const SwNodeIndex& rOldNode,
145*b1cdbd2cSJim Jagielski             const SwPosition& rNewPos,
146*b1cdbd2cSJim Jagielski             const xub_StrLen nOffset) =0;
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski         /** Corrects marks (relative)
149*b1cdbd2cSJim Jagielski             This method uses the previous position of the mark in the paragraph as offset
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski             @param rOldNode
152*b1cdbd2cSJim Jagielski             [in] the node from which nodes should be moved
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski             @param rNewPos
155*b1cdbd2cSJim Jagielski             [in] new position to which marks from the start of the paragraph will be
156*b1cdbd2cSJim Jagielski                  moved, if nOffset == 0
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski             @param nOffset
159*b1cdbd2cSJim Jagielski             [in] the offset by which the mark gets positioned of rNewPos in addition to
160*b1cdbd2cSJim Jagielski                  its old position in the paragraph
161*b1cdbd2cSJim Jagielski         */
162*b1cdbd2cSJim Jagielski         virtual void correctMarksRelative(const SwNodeIndex& rOldNode,
163*b1cdbd2cSJim Jagielski             const SwPosition& rNewPos,
164*b1cdbd2cSJim Jagielski             const xub_StrLen nOffset) =0;
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski         /** Deletes marks in a range
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski             Note: navigator reminders are excluded
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski         */
171*b1cdbd2cSJim Jagielski         virtual void deleteMarks(
172*b1cdbd2cSJim Jagielski             const SwNodeIndex& rStt,
173*b1cdbd2cSJim Jagielski             const SwNodeIndex& rEnd,
174*b1cdbd2cSJim Jagielski             ::std::vector< ::sw::mark::SaveBookmark>* pSaveBkmk, // Ugly: SaveBookmark is core-internal
175*b1cdbd2cSJim Jagielski             const SwIndex* pSttIdx,
176*b1cdbd2cSJim Jagielski             const SwIndex* pEndIdx) =0;
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski         /** Deletes a mark.
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski             @param ppMark
181*b1cdbd2cSJim Jagielski             [in] an iterator pointing to the Mark to be deleted.
182*b1cdbd2cSJim Jagielski         */
183*b1cdbd2cSJim Jagielski         virtual void deleteMark(const IDocumentMarkAccess::const_iterator_t ppMark) =0;
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski         /** Deletes a mark.
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski             @param ppMark
188*b1cdbd2cSJim Jagielski             [in] the name of the mark to be deleted.
189*b1cdbd2cSJim Jagielski         */
190*b1cdbd2cSJim Jagielski         virtual void deleteMark(const ::sw::mark::IMark* const pMark) =0;
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski         /** Clear (deletes) all marks.
193*b1cdbd2cSJim Jagielski         */
194*b1cdbd2cSJim Jagielski         virtual void clearAllMarks() =0;
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski         virtual void assureSortedMarkContainers() const = 0;
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski         /** returns a STL-like random access iterator to the begin of the sequence of marks.
199*b1cdbd2cSJim Jagielski         */
200*b1cdbd2cSJim Jagielski         virtual const_iterator_t getAllMarksBegin() const =0;
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski         /** returns a STL-like random access iterator to the end of the sequence of marks.
203*b1cdbd2cSJim Jagielski         */
204*b1cdbd2cSJim Jagielski         virtual const_iterator_t getAllMarksEnd() const =0;
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski         /** returns the number of marks.
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski             Note: annotation marks are excluded
209*b1cdbd2cSJim Jagielski         */
210*b1cdbd2cSJim Jagielski         virtual sal_Int32 getAllMarksCount() const =0;
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski         /** Finds a mark by name.
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski             @param rName
215*b1cdbd2cSJim Jagielski             [in] the name of the mark to find.
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski             @returns
218*b1cdbd2cSJim Jagielski             an iterator pointing to the mark, or pointing to getAllMarksEnd() if nothing was found.
219*b1cdbd2cSJim Jagielski         */
220*b1cdbd2cSJim Jagielski         virtual const_iterator_t findMark(const ::rtl::OUString& rMark) const =0;
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski         // interface IBookmarks (BOOKMARK, CROSSREF_NUMITEM_BOOKMARK, CROSSREF_HEADING_BOOKMARK )
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski         /** returns a STL-like random access iterator to the begin of the sequence the IBookmarks.
226*b1cdbd2cSJim Jagielski         */
227*b1cdbd2cSJim Jagielski         virtual const_iterator_t getBookmarksBegin() const =0;
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski         /** returns a STL-like random access iterator to the end of the sequence of IBookmarks.
230*b1cdbd2cSJim Jagielski         */
231*b1cdbd2cSJim Jagielski         virtual const_iterator_t getBookmarksEnd() const =0;
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski         /** returns the number of IBookmarks.
234*b1cdbd2cSJim Jagielski         */
235*b1cdbd2cSJim Jagielski         virtual sal_Int32 getBookmarksCount() const =0;
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski         /** Finds a bookmark by name.
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski             @param rName
240*b1cdbd2cSJim Jagielski             [in] the name of the bookmark to find.
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski             @returns
243*b1cdbd2cSJim Jagielski             an iterator pointing to the bookmark, or getBookmarksEnd() if nothing was found.
244*b1cdbd2cSJim Jagielski         */
245*b1cdbd2cSJim Jagielski         virtual const_iterator_t findBookmark(const ::rtl::OUString& rMark) const =0;
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski         // Fieldmarks
249*b1cdbd2cSJim Jagielski         virtual ::sw::mark::IFieldmark* getFieldmarkFor(const SwPosition& pos) const =0;
250*b1cdbd2cSJim Jagielski         virtual ::sw::mark::IFieldmark* getFieldmarkBefore(const SwPosition& pos) const =0;
251*b1cdbd2cSJim Jagielski         virtual ::sw::mark::IFieldmark* getFieldmarkAfter(const SwPosition& pos) const =0;
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski         // Annotation Marks
254*b1cdbd2cSJim Jagielski         virtual const_iterator_t getAnnotationMarksBegin() const = 0;
255*b1cdbd2cSJim Jagielski         virtual const_iterator_t getAnnotationMarksEnd() const = 0;
256*b1cdbd2cSJim Jagielski         virtual sal_Int32 getAnnotationMarksCount() const = 0;
257*b1cdbd2cSJim Jagielski         virtual const_iterator_t findAnnotationMark( const ::rtl::OUString& rName ) const = 0;
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski         // Returns the MarkType used to create the mark
260*b1cdbd2cSJim Jagielski         static SAL_DLLPUBLIC_EXPORT MarkType GetType(const ::sw::mark::IMark& rMark);
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski         static SAL_DLLPUBLIC_EXPORT const ::rtl::OUString& GetCrossRefHeadingBookmarkNamePrefix();
263*b1cdbd2cSJim Jagielski         static SAL_DLLPUBLIC_EXPORT bool IsLegalPaMForCrossRefHeadingBookmark( const SwPaM& );
264*b1cdbd2cSJim Jagielski     protected:
~IDocumentMarkAccess()265*b1cdbd2cSJim Jagielski         virtual ~IDocumentMarkAccess() {};
266*b1cdbd2cSJim Jagielski };
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski #endif // IDOCUMENTBOOKMARKACCESS_HXX_INCLUDED
269