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