1dec99bbdSOliver-Rainer Wittmann /**************************************************************
2dec99bbdSOliver-Rainer Wittmann  *
3dec99bbdSOliver-Rainer Wittmann  * Licensed to the Apache Software Foundation (ASF) under one
4dec99bbdSOliver-Rainer Wittmann  * or more contributor license agreements.  See the NOTICE file
5dec99bbdSOliver-Rainer Wittmann  * distributed with this work for additional information
6dec99bbdSOliver-Rainer Wittmann  * regarding copyright ownership.  The ASF licenses this file
7dec99bbdSOliver-Rainer Wittmann  * to you under the Apache License, Version 2.0 (the
8dec99bbdSOliver-Rainer Wittmann  * "License"); you may not use this file except in compliance
9dec99bbdSOliver-Rainer Wittmann  * with the License.  You may obtain a copy of the License at
10dec99bbdSOliver-Rainer Wittmann  *
11dec99bbdSOliver-Rainer Wittmann  *   http://www.apache.org/licenses/LICENSE-2.0
12dec99bbdSOliver-Rainer Wittmann  *
13dec99bbdSOliver-Rainer Wittmann  * Unless required by applicable law or agreed to in writing,
14dec99bbdSOliver-Rainer Wittmann  * software distributed under the License is distributed on an
15dec99bbdSOliver-Rainer Wittmann  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16dec99bbdSOliver-Rainer Wittmann  * KIND, either express or implied.  See the License for the
17dec99bbdSOliver-Rainer Wittmann  * specific language governing permissions and limitations
18dec99bbdSOliver-Rainer Wittmann  * under the License.
19dec99bbdSOliver-Rainer Wittmann  *
20dec99bbdSOliver-Rainer Wittmann  *************************************************************/
21dec99bbdSOliver-Rainer Wittmann 
22dec99bbdSOliver-Rainer Wittmann 
23dec99bbdSOliver-Rainer Wittmann // MARKER(update_precomp.py): autogen include statement, do not remove
24dec99bbdSOliver-Rainer Wittmann #include "precompiled_sw.hxx"
25dec99bbdSOliver-Rainer Wittmann 
26dec99bbdSOliver-Rainer Wittmann #include <annotationmark.hxx>
27dec99bbdSOliver-Rainer Wittmann 
28dec99bbdSOliver-Rainer Wittmann #include <doc.hxx>
29dec99bbdSOliver-Rainer Wittmann #include <IDocumentMarkAccess.hxx>
30dec99bbdSOliver-Rainer Wittmann #include <fldbas.hxx>
31dec99bbdSOliver-Rainer Wittmann #include <switerator.hxx>
32dec99bbdSOliver-Rainer Wittmann #include <fmtfld.hxx>
33dec99bbdSOliver-Rainer Wittmann #include <docufld.hxx>
34dec99bbdSOliver-Rainer Wittmann #include <IDocumentUndoRedo.hxx>
35dec99bbdSOliver-Rainer Wittmann #include <UndoBookmark.hxx>
36dec99bbdSOliver-Rainer Wittmann #include <ndtxt.hxx>
37dec99bbdSOliver-Rainer Wittmann #include <txtfld.hxx>
38dec99bbdSOliver-Rainer Wittmann 
39dec99bbdSOliver-Rainer Wittmann namespace sw { namespace mark
40dec99bbdSOliver-Rainer Wittmann {
AnnotationMark(const SwPaM & rPaM,const::rtl::OUString & rName)41dec99bbdSOliver-Rainer Wittmann     AnnotationMark::AnnotationMark(
42dec99bbdSOliver-Rainer Wittmann         const SwPaM& rPaM,
43dec99bbdSOliver-Rainer Wittmann         const ::rtl::OUString& rName )
44dec99bbdSOliver-Rainer Wittmann         : MarkBase( rPaM, rName )
45dec99bbdSOliver-Rainer Wittmann     {
46dec99bbdSOliver-Rainer Wittmann         if ( rName.getLength() == 0 )
47dec99bbdSOliver-Rainer Wittmann         {
48dec99bbdSOliver-Rainer Wittmann             SetName( MarkBase::GenerateNewName( ::rtl::OUString::createFromAscii("__Annotation__") ) );
49dec99bbdSOliver-Rainer Wittmann         }
50dec99bbdSOliver-Rainer Wittmann     }
51dec99bbdSOliver-Rainer Wittmann 
52dec99bbdSOliver-Rainer Wittmann 
~AnnotationMark()53dec99bbdSOliver-Rainer Wittmann     AnnotationMark::~AnnotationMark()
54dec99bbdSOliver-Rainer Wittmann     {
55dec99bbdSOliver-Rainer Wittmann     }
56dec99bbdSOliver-Rainer Wittmann 
57dec99bbdSOliver-Rainer Wittmann 
InitDoc(SwDoc * const io_pDoc)58dec99bbdSOliver-Rainer Wittmann     void AnnotationMark::InitDoc(SwDoc* const io_pDoc)
59dec99bbdSOliver-Rainer Wittmann     {
60dec99bbdSOliver-Rainer Wittmann         SwTxtFld* pTxtFld =
61dec99bbdSOliver-Rainer Wittmann             GetMarkEnd().nNode.GetNode().GetTxtNode()->GetFldTxtAttrAt(
62dec99bbdSOliver-Rainer Wittmann             GetMarkEnd().nContent.GetIndex()-1, true );
63*332f371aSOliver-Rainer Wittmann         ASSERT( pTxtFld != NULL, "<AnnotationMark::InitDoc(..)> - missing text attribute for annotation field!" );
64dec99bbdSOliver-Rainer Wittmann         if ( pTxtFld != NULL )
65dec99bbdSOliver-Rainer Wittmann         {
66dec99bbdSOliver-Rainer Wittmann             const SwPostItField* pPostItField = dynamic_cast< const SwPostItField* >(pTxtFld->GetFmtFld().GetField());
67dec99bbdSOliver-Rainer Wittmann             ASSERT( pPostItField != NULL, "<AnnotationMark::InitDoc(..)> - annotation field missing!" );
68dec99bbdSOliver-Rainer Wittmann             if ( pPostItField != NULL )
69dec99bbdSOliver-Rainer Wittmann             {
70dec99bbdSOliver-Rainer Wittmann                 // use the annotation mark's name as the annotation name, if
71dec99bbdSOliver-Rainer Wittmann                 // - the annotation field has an empty annotation name or
72dec99bbdSOliver-Rainer Wittmann                 // - the annotation mark's name differs (on mark creation a name clash had been detected)
73dec99bbdSOliver-Rainer Wittmann                 if ( pPostItField->GetName().Len() == 0
74dec99bbdSOliver-Rainer Wittmann                     || rtl::OUString( pPostItField->GetName() ) != GetName() )
75dec99bbdSOliver-Rainer Wittmann                 {
76dec99bbdSOliver-Rainer Wittmann                     const_cast<SwPostItField*>(pPostItField)->SetName( GetName() );
77dec99bbdSOliver-Rainer Wittmann                 }
78dec99bbdSOliver-Rainer Wittmann             }
79dec99bbdSOliver-Rainer Wittmann         }
80dec99bbdSOliver-Rainer Wittmann 
81dec99bbdSOliver-Rainer Wittmann         if (io_pDoc->GetIDocumentUndoRedo().DoesUndo())
82dec99bbdSOliver-Rainer Wittmann         {
83dec99bbdSOliver-Rainer Wittmann             io_pDoc->GetIDocumentUndoRedo().AppendUndo( new SwUndoInsBookmark(*this) );
84dec99bbdSOliver-Rainer Wittmann         }
85dec99bbdSOliver-Rainer Wittmann         io_pDoc->SetModified();
86dec99bbdSOliver-Rainer Wittmann     }
87dec99bbdSOliver-Rainer Wittmann 
88dec99bbdSOliver-Rainer Wittmann 
GetAnnotationFmtFld() const89dec99bbdSOliver-Rainer Wittmann     const SwFmtFld* AnnotationMark::GetAnnotationFmtFld() const
90dec99bbdSOliver-Rainer Wittmann     {
91dec99bbdSOliver-Rainer Wittmann         SwDoc* pDoc = GetMarkPos().GetDoc();
92dec99bbdSOliver-Rainer Wittmann         if ( pDoc == NULL )
93dec99bbdSOliver-Rainer Wittmann         {
94dec99bbdSOliver-Rainer Wittmann             ASSERT( false, "<AnnotationMark::GetAnnotationFmtFld()> - missing document at annotation mark" );
95dec99bbdSOliver-Rainer Wittmann             return NULL;
96dec99bbdSOliver-Rainer Wittmann         }
97dec99bbdSOliver-Rainer Wittmann 
98dec99bbdSOliver-Rainer Wittmann         SwFmtFld* pAnnotationFmtFld = NULL;
99dec99bbdSOliver-Rainer Wittmann 
100dec99bbdSOliver-Rainer Wittmann         SwFieldType* pType = pDoc->GetFldType( RES_POSTITFLD, String(), false );
101dec99bbdSOliver-Rainer Wittmann         SwIterator<SwFmtFld,SwFieldType> aIter( *pType );
102dec99bbdSOliver-Rainer Wittmann         for( SwFmtFld* pFmtFld = aIter.First(); pFmtFld != NULL; pFmtFld = aIter.Next() )
103dec99bbdSOliver-Rainer Wittmann         {
104dec99bbdSOliver-Rainer Wittmann             if ( pFmtFld->IsFldInDoc() )
105dec99bbdSOliver-Rainer Wittmann             {
106dec99bbdSOliver-Rainer Wittmann                 const SwPostItField* pPostItField = dynamic_cast< const SwPostItField* >(pFmtFld->GetField());
107dec99bbdSOliver-Rainer Wittmann                 if ( pPostItField != NULL
108dec99bbdSOliver-Rainer Wittmann                      && rtl::OUString( pPostItField->GetName() ) == GetName() )
109dec99bbdSOliver-Rainer Wittmann                 {
110dec99bbdSOliver-Rainer Wittmann                     pAnnotationFmtFld = pFmtFld;
111dec99bbdSOliver-Rainer Wittmann                     break;
112dec99bbdSOliver-Rainer Wittmann                 }
113dec99bbdSOliver-Rainer Wittmann             }
114dec99bbdSOliver-Rainer Wittmann         }
115dec99bbdSOliver-Rainer Wittmann 
116dec99bbdSOliver-Rainer Wittmann         return pAnnotationFmtFld;
117dec99bbdSOliver-Rainer Wittmann     }
118dec99bbdSOliver-Rainer Wittmann }}
119dec99bbdSOliver-Rainer Wittmann 
120