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