1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef IDOCUMENTMARKACCESS_HXX_INCLUDED 29 #define IDOCUMENTMARKACCESS_HXX_INCLUDED 30 31 #include <sal/types.h> 32 #include <IMark.hxx> 33 #include <boost/shared_ptr.hpp> 34 35 class SwPaM; 36 class KeyCode; 37 class String; 38 struct SwPosition; 39 class SwTxtNode; 40 41 namespace sw { namespace mark { 42 class SaveBookmark; // FIXME: Ugly: SaveBookmark is a core-internal class, and should not be used in the interface 43 }} 44 45 /** Provides access to the marks of a document. 46 */ 47 class IDocumentMarkAccess 48 { 49 public: 50 enum MarkType 51 { 52 UNO_BOOKMARK, 53 DDE_BOOKMARK, 54 BOOKMARK, 55 CROSSREF_HEADING_BOOKMARK, 56 CROSSREF_NUMITEM_BOOKMARK, 57 TEXT_FIELDMARK, 58 CHECKBOX_FIELDMARK, 59 NAVIGATOR_REMINDER 60 }; 61 62 typedef ::boost::shared_ptr< ::sw::mark::IMark> pMark_t; 63 typedef ::std::vector< pMark_t > container_t; 64 typedef container_t::iterator iterator_t; 65 typedef container_t::const_iterator const_iterator_t; 66 typedef container_t::const_reverse_iterator const_reverse_iterator_t; 67 68 /** Generates a new mark in the document for a certain selection. 69 70 @param rPaM 71 [in] the selection being marked. 72 73 @param rProposedName 74 [in] the proposed name of the new mark. 75 76 @param eMark 77 [in] the type of the new mark. 78 79 @returns 80 a pointer to the new mark (name might have changed). 81 */ 82 virtual ::sw::mark::IMark* makeMark(const SwPaM& rPaM, 83 const ::rtl::OUString& rProposedName, 84 MarkType eMark) =0; 85 86 virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM, 87 const rtl::OUString& rName, 88 const rtl::OUString& rType) = 0; 89 virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const SwPaM& rPaM, 90 const rtl::OUString& rName, 91 const rtl::OUString& rType) = 0; 92 93 /** Returns a mark in the document for a paragraph. 94 If there is none, a mark will be created. 95 96 @param rTxtNode 97 [in] the paragraph being marked (a selection over the paragraph is marked) 98 99 @param eMark 100 [in] the type of the new mark. 101 102 @returns 103 a pointer to the new mark (name might have changed). 104 */ 105 virtual ::sw::mark::IMark* getMarkForTxtNode(const SwTxtNode& rTxtNode, 106 MarkType eMark) =0; 107 108 /** Moves an existing mark to a new selection and performs needed updates. 109 @param io_pMark 110 [in/out] the mark to be moved 111 112 @param rPaM 113 [in] new selection to be marked 114 */ 115 116 virtual void repositionMark(::sw::mark::IMark* io_pMark, 117 const SwPaM& rPaM) =0; 118 119 /** Renames an existing Mark, if possible. 120 @param io_pMark 121 [in/out] the mark to be renamed 122 123 @param rNewName 124 [in] new name for the mark 125 126 @returns false, if renaming failed (because the name is already in use) 127 */ 128 virtual bool renameMark(::sw::mark::IMark* io_pMark, 129 const ::rtl::OUString& rNewName) =0; 130 131 /** Corrects marks (absolute) 132 This method ignores the previous position of the mark in the paragraph 133 134 @param rOldNode 135 [in] the node from which nodes should be moved 136 137 @param rNewPos 138 [in] new position to which marks will be moved, if nOffset == 0 139 140 @param nOffset 141 [in] the offset by which the mark gets positioned of rNewPos 142 */ 143 virtual void correctMarksAbsolute(const SwNodeIndex& rOldNode, 144 const SwPosition& rNewPos, 145 const xub_StrLen nOffset) =0; 146 147 /** Corrects marks (relative) 148 This method uses the previous position of the mark in the paragraph as offset 149 150 @param rOldNode 151 [in] the node from which nodes should be moved 152 153 @param rNewPos 154 [in] new position to which marks from the start of the paragraph will be 155 moved, if nOffset == 0 156 157 @param nOffset 158 [in] the offset by which the mark gets positioned of rNewPos in addition to 159 its old position in the paragraph 160 */ 161 virtual void correctMarksRelative(const SwNodeIndex& rOldNode, 162 const SwPosition& rNewPos, 163 const xub_StrLen nOffset) =0; 164 165 /** Deletes marks in a range 166 */ 167 virtual void deleteMarks( 168 const SwNodeIndex& rStt, 169 const SwNodeIndex& rEnd, 170 ::std::vector< ::sw::mark::SaveBookmark>* pSaveBkmk, // Ugly: SaveBookmark is core-internal 171 const SwIndex* pSttIdx, 172 const SwIndex* pEndIdx) =0; 173 174 /** Deletes a mark. 175 176 @param ppMark 177 [in] an iterator pointing to the Mark to be deleted. 178 */ 179 virtual void deleteMark(const IDocumentMarkAccess::const_iterator_t ppMark) =0; 180 181 /** Deletes a mark. 182 183 @param ppMark 184 [in] the name of the mark to be deleted. 185 */ 186 virtual void deleteMark(const ::sw::mark::IMark* const pMark) =0; 187 188 /** Clear (deletes) all marks. 189 */ 190 virtual void clearAllMarks() =0; 191 192 /** returns a STL-like random access iterator to the begin of the sequence of marks. 193 */ 194 virtual const_iterator_t getMarksBegin() const =0; 195 196 /** returns a STL-like random access iterator to the end of the sequence of marks. 197 */ 198 virtual const_iterator_t getMarksEnd() const =0; 199 200 /** returns the number of marks. 201 */ 202 virtual sal_Int32 getMarksCount() const =0; 203 204 /** Finds a mark by name. 205 206 @param rName 207 [in] the name of the mark to find. 208 209 @returns 210 an iterator pointing to the mark, or pointing to getMarksEnd() if nothing was found. 211 */ 212 virtual const_iterator_t findMark(const ::rtl::OUString& rMark) const =0; 213 214 215 // interface IBookmarks (BOOKMARK, CROSSREF_NUMITEM_BOOKMARK, CROSSREF_HEADING_BOOKMARK) 216 217 /** returns a STL-like random access iterator to the begin of the sequence the IBookmarks. 218 */ 219 virtual const_iterator_t getBookmarksBegin() const =0; 220 221 /** returns a STL-like random access iterator to the end of the sequence of IBookmarks. 222 */ 223 virtual const_iterator_t getBookmarksEnd() const =0; 224 225 /** returns the number of IBookmarks. 226 */ 227 virtual sal_Int32 getBookmarksCount() const =0; 228 229 /** Finds a bookmark by name. 230 231 @param rName 232 [in] the name of the bookmark to find. 233 234 @returns 235 an iterator pointing to the bookmark, or getBookmarksEnd() if nothing was found. 236 */ 237 virtual const_iterator_t findBookmark(const ::rtl::OUString& rMark) const =0; 238 239 240 // Fieldmarks 241 virtual ::sw::mark::IFieldmark* getFieldmarkFor(const SwPosition& pos) const =0; 242 virtual ::sw::mark::IFieldmark* getFieldmarkBefore(const SwPosition& pos) const =0; 243 virtual ::sw::mark::IFieldmark* getFieldmarkAfter(const SwPosition& pos) const =0; 244 245 // Returns the MarkType used to create the mark 246 static MarkType SAL_DLLPUBLIC_EXPORT GetType(const ::sw::mark::IMark& rMark); 247 protected: 248 virtual ~IDocumentMarkAccess() {}; 249 }; 250 251 #endif // IDOCUMENTBOOKMARKACCESS_HXX_INCLUDED 252