1efeef26fSAndrew Rist /**************************************************************
2efeef26fSAndrew Rist *
3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5efeef26fSAndrew Rist * distributed with this work for additional information
6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10efeef26fSAndrew Rist *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist * software distributed under the License is distributed on an
15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17efeef26fSAndrew Rist * specific language governing permissions and limitations
18efeef26fSAndrew Rist * under the License.
19efeef26fSAndrew Rist *
20efeef26fSAndrew Rist *************************************************************/
21efeef26fSAndrew Rist
22efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <hintids.hxx>
28cdf0e10cSrcweir #include <hints.hxx>
29cdf0e10cSrcweir #include <sfx2/objsh.hxx>
30cdf0e10cSrcweir #include <editeng/xmlcnitm.hxx>
31cdf0e10cSrcweir #include <editeng/twolinesitem.hxx>
32cdf0e10cSrcweir #include <txtinet.hxx>
33cdf0e10cSrcweir #include <txtatr.hxx>
34cdf0e10cSrcweir #include <fchrfmt.hxx>
35cdf0e10cSrcweir #include <fmtinfmt.hxx>
36cdf0e10cSrcweir #include <charfmt.hxx>
37cdf0e10cSrcweir #include <ndtxt.hxx> // SwCharFmt, SwTxtNode
38cdf0e10cSrcweir #include <poolfmt.hxx> // RES_POOLCHR_INET_...
39cdf0e10cSrcweir #include <doc.hxx> // SwDoc
40cdf0e10cSrcweir #include <fmtruby.hxx>
41cdf0e10cSrcweir #include <fmtmeta.hxx>
42cdf0e10cSrcweir
43cdf0e10cSrcweir
44cdf0e10cSrcweir TYPEINIT1(SwTxtINetFmt,SwClient);
45cdf0e10cSrcweir TYPEINIT1(SwTxtRuby,SwClient);
46cdf0e10cSrcweir
47cdf0e10cSrcweir
48cdf0e10cSrcweir /*************************************************************************
49cdf0e10cSrcweir * class SwTxtCharFmt
50cdf0e10cSrcweir *************************************************************************/
51cdf0e10cSrcweir
SwTxtCharFmt(SwFmtCharFmt & rAttr,xub_StrLen nStt,xub_StrLen nEnde)52cdf0e10cSrcweir SwTxtCharFmt::SwTxtCharFmt( SwFmtCharFmt& rAttr,
53cdf0e10cSrcweir xub_StrLen nStt, xub_StrLen nEnde )
54cdf0e10cSrcweir : SwTxtAttrEnd( rAttr, nStt, nEnde )
55cdf0e10cSrcweir , m_pTxtNode( 0 )
56cdf0e10cSrcweir , m_nSortNumber( 0 )
57cdf0e10cSrcweir {
58cdf0e10cSrcweir rAttr.pTxtAttr = this;
59cdf0e10cSrcweir SetCharFmtAttr( sal_True );
60cdf0e10cSrcweir }
61cdf0e10cSrcweir
~SwTxtCharFmt()62cdf0e10cSrcweir SwTxtCharFmt::~SwTxtCharFmt( )
63cdf0e10cSrcweir {
64cdf0e10cSrcweir }
65cdf0e10cSrcweir
ModifyNotification(const SfxPoolItem * pOld,const SfxPoolItem * pNew)66cdf0e10cSrcweir void SwTxtCharFmt::ModifyNotification( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
67cdf0e10cSrcweir {
68cdf0e10cSrcweir sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
69cdf0e10cSrcweir ASSERT( isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
70cdf0e10cSrcweir || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
71cdf0e10cSrcweir "SwTxtCharFmt::Modify(): unknown Modify");
72cdf0e10cSrcweir
73cdf0e10cSrcweir if ( m_pTxtNode )
74cdf0e10cSrcweir {
75*56b35d86SArmin Le Grand SwUpdateAttr aUpdateAttr(
76*56b35d86SArmin Le Grand *GetStart(),
77*56b35d86SArmin Le Grand *GetEnd(),
78*56b35d86SArmin Le Grand nWhich);
79*56b35d86SArmin Le Grand
80cdf0e10cSrcweir m_pTxtNode->ModifyNotification( &aUpdateAttr, &aUpdateAttr );
81cdf0e10cSrcweir }
82cdf0e10cSrcweir }
83cdf0e10cSrcweir
GetInfo(SfxPoolItem & rInfo) const84cdf0e10cSrcweir bool SwTxtCharFmt::GetInfo( SfxPoolItem& rInfo ) const
85cdf0e10cSrcweir {
86cdf0e10cSrcweir if ( RES_AUTOFMT_DOCNODE != rInfo.Which() || !m_pTxtNode ||
87cdf0e10cSrcweir &m_pTxtNode->GetNodes() != static_cast<SwAutoFmtGetDocNode&>(rInfo).pNodes )
88cdf0e10cSrcweir {
89cdf0e10cSrcweir return true;
90cdf0e10cSrcweir }
91cdf0e10cSrcweir
92cdf0e10cSrcweir static_cast<SwAutoFmtGetDocNode&>(rInfo).pCntntNode = m_pTxtNode;
93cdf0e10cSrcweir return false;
94cdf0e10cSrcweir }
95cdf0e10cSrcweir
96cdf0e10cSrcweir
97cdf0e10cSrcweir /*************************************************************************
98cdf0e10cSrcweir * class SwTxtAttrNesting
99cdf0e10cSrcweir *************************************************************************/
100cdf0e10cSrcweir
SwTxtAttrNesting(SfxPoolItem & i_rAttr,const xub_StrLen i_nStart,const xub_StrLen i_nEnd)101cdf0e10cSrcweir SwTxtAttrNesting::SwTxtAttrNesting( SfxPoolItem & i_rAttr,
102cdf0e10cSrcweir const xub_StrLen i_nStart, const xub_StrLen i_nEnd )
103cdf0e10cSrcweir : SwTxtAttrEnd( i_rAttr, i_nStart, i_nEnd )
104cdf0e10cSrcweir {
105cdf0e10cSrcweir SetDontExpand( true ); // never expand this attribute
106cdf0e10cSrcweir // lock the expand flag: simple guarantee that nesting will not be
107cdf0e10cSrcweir // invalidated by expand operations
108cdf0e10cSrcweir SetLockExpandFlag( true );
109cdf0e10cSrcweir SetDontExpandStartAttr( true );
110cdf0e10cSrcweir SetNesting( true );
111cdf0e10cSrcweir }
112cdf0e10cSrcweir
~SwTxtAttrNesting()113cdf0e10cSrcweir SwTxtAttrNesting::~SwTxtAttrNesting()
114cdf0e10cSrcweir {
115cdf0e10cSrcweir }
116cdf0e10cSrcweir
117cdf0e10cSrcweir
118cdf0e10cSrcweir /*************************************************************************
119cdf0e10cSrcweir * class SwTxtINetFmt
120cdf0e10cSrcweir *************************************************************************/
121cdf0e10cSrcweir
SwTxtINetFmt(SwFmtINetFmt & rAttr,xub_StrLen nStart,xub_StrLen nEnd)122cdf0e10cSrcweir SwTxtINetFmt::SwTxtINetFmt( SwFmtINetFmt& rAttr,
123cdf0e10cSrcweir xub_StrLen nStart, xub_StrLen nEnd )
124cdf0e10cSrcweir : SwTxtAttrNesting( rAttr, nStart, nEnd )
125cdf0e10cSrcweir , SwClient( 0 )
126cdf0e10cSrcweir , m_pTxtNode( 0 )
127cdf0e10cSrcweir , m_bVisited( false )
128cdf0e10cSrcweir , m_bVisitedValid( false )
129cdf0e10cSrcweir {
130782a276cSOliver-Rainer Wittmann rAttr.mpTxtAttr = this;
131cdf0e10cSrcweir SetCharFmtAttr( true );
132cdf0e10cSrcweir }
133cdf0e10cSrcweir
~SwTxtINetFmt()134cdf0e10cSrcweir SwTxtINetFmt::~SwTxtINetFmt( )
135cdf0e10cSrcweir {
136cdf0e10cSrcweir }
137cdf0e10cSrcweir
GetCharFmt()138cdf0e10cSrcweir SwCharFmt* SwTxtINetFmt::GetCharFmt()
139cdf0e10cSrcweir {
140782a276cSOliver-Rainer Wittmann const SwFmtINetFmt& rFmt = SwTxtAttrEnd::GetINetFmt();
141782a276cSOliver-Rainer Wittmann SwCharFmt* pRet = NULL;
142cdf0e10cSrcweir
143782a276cSOliver-Rainer Wittmann if ( rFmt.GetValue().Len() )
144782a276cSOliver-Rainer Wittmann {
145782a276cSOliver-Rainer Wittmann const SwDoc* pDoc = GetTxtNode().GetDoc();
146cdf0e10cSrcweir if( !IsVisitedValid() )
147cdf0e10cSrcweir {
148782a276cSOliver-Rainer Wittmann SetVisited( pDoc->IsVisitedURL( rFmt.GetValue() ) );
149cdf0e10cSrcweir SetVisitedValid( true );
150cdf0e10cSrcweir }
151782a276cSOliver-Rainer Wittmann
152782a276cSOliver-Rainer Wittmann const sal_uInt16 nId = IsVisited() ? rFmt.GetVisitedFmtId() : rFmt.GetINetFmtId();
153782a276cSOliver-Rainer Wittmann const String& rStr = IsVisited() ? rFmt.GetVisitedFmt() : rFmt.GetINetFmt();
154782a276cSOliver-Rainer Wittmann if ( rStr.Len() == 0 )
155782a276cSOliver-Rainer Wittmann {
156782a276cSOliver-Rainer Wittmann ASSERT( false, "<SwTxtINetFmt::GetCharFmt()> - missing character format at hyperlink attribute");
157782a276cSOliver-Rainer Wittmann }
158782a276cSOliver-Rainer Wittmann
159782a276cSOliver-Rainer Wittmann // JP 10.02.2000, Bug 72806: dont modify the doc for getting the
160782a276cSOliver-Rainer Wittmann // correct charstyle.
161782a276cSOliver-Rainer Wittmann sal_Bool bResetMod = !pDoc->IsModified();
162782a276cSOliver-Rainer Wittmann Link aOle2Lnk;
163782a276cSOliver-Rainer Wittmann if ( bResetMod )
164782a276cSOliver-Rainer Wittmann {
165782a276cSOliver-Rainer Wittmann aOle2Lnk = pDoc->GetOle2Link();
166782a276cSOliver-Rainer Wittmann ( (SwDoc*) pDoc )->SetOle2Link( Link() );
167782a276cSOliver-Rainer Wittmann }
168782a276cSOliver-Rainer Wittmann
169782a276cSOliver-Rainer Wittmann pRet = IsPoolUserFmt( nId )
170782a276cSOliver-Rainer Wittmann ? ( (SwDoc*) pDoc )->FindCharFmtByName( rStr )
171782a276cSOliver-Rainer Wittmann : ( (SwDoc*) pDoc )->GetCharFmtFromPool( nId );
172782a276cSOliver-Rainer Wittmann
173782a276cSOliver-Rainer Wittmann if ( bResetMod )
174782a276cSOliver-Rainer Wittmann {
175782a276cSOliver-Rainer Wittmann ( (SwDoc*) pDoc )->ResetModified();
176782a276cSOliver-Rainer Wittmann ( (SwDoc*) pDoc )->SetOle2Link( aOle2Lnk );
177782a276cSOliver-Rainer Wittmann }
178782a276cSOliver-Rainer Wittmann }
179782a276cSOliver-Rainer Wittmann
180782a276cSOliver-Rainer Wittmann if ( pRet )
181782a276cSOliver-Rainer Wittmann pRet->Add( this );
182782a276cSOliver-Rainer Wittmann else if ( GetRegisteredIn() )
183782a276cSOliver-Rainer Wittmann GetRegisteredInNonConst()->Remove( this );
184782a276cSOliver-Rainer Wittmann
185782a276cSOliver-Rainer Wittmann return pRet;
186cdf0e10cSrcweir }
187cdf0e10cSrcweir
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)188cdf0e10cSrcweir void SwTxtINetFmt::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
189cdf0e10cSrcweir {
190cdf0e10cSrcweir sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
191cdf0e10cSrcweir ASSERT( isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
192cdf0e10cSrcweir || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
193cdf0e10cSrcweir "SwTxtINetFmt::Modify(): unknown Modify");
194cdf0e10cSrcweir
195cdf0e10cSrcweir if ( m_pTxtNode )
196cdf0e10cSrcweir {
197*56b35d86SArmin Le Grand SwUpdateAttr aUpdateAttr(
198*56b35d86SArmin Le Grand *GetStart(),
199*56b35d86SArmin Le Grand *GetEnd(),
200*56b35d86SArmin Le Grand nWhich);
201*56b35d86SArmin Le Grand
202cdf0e10cSrcweir m_pTxtNode->ModifyNotification( &aUpdateAttr, &aUpdateAttr );
203cdf0e10cSrcweir }
204cdf0e10cSrcweir }
205cdf0e10cSrcweir
206cdf0e10cSrcweir // erfrage vom Modify Informationen
GetInfo(SfxPoolItem & rInfo) const207cdf0e10cSrcweir sal_Bool SwTxtINetFmt::GetInfo( SfxPoolItem& rInfo ) const
208cdf0e10cSrcweir {
209cdf0e10cSrcweir if ( RES_AUTOFMT_DOCNODE != rInfo.Which() || !m_pTxtNode ||
210cdf0e10cSrcweir &m_pTxtNode->GetNodes() != static_cast<SwAutoFmtGetDocNode&>(rInfo).pNodes )
211cdf0e10cSrcweir {
212cdf0e10cSrcweir return sal_True;
213cdf0e10cSrcweir }
214cdf0e10cSrcweir
215cdf0e10cSrcweir static_cast<SwAutoFmtGetDocNode&>(rInfo).pCntntNode = m_pTxtNode;
216cdf0e10cSrcweir return sal_False;
217cdf0e10cSrcweir }
218cdf0e10cSrcweir
IsProtect() const219cdf0e10cSrcweir sal_Bool SwTxtINetFmt::IsProtect( ) const
220cdf0e10cSrcweir {
221cdf0e10cSrcweir return m_pTxtNode && m_pTxtNode->IsProtect();
222cdf0e10cSrcweir }
223cdf0e10cSrcweir
224cdf0e10cSrcweir /*************************************************************************
225cdf0e10cSrcweir * class SwTxtRuby
226cdf0e10cSrcweir *************************************************************************/
227cdf0e10cSrcweir
SwTxtRuby(SwFmtRuby & rAttr,xub_StrLen nStart,xub_StrLen nEnd)228cdf0e10cSrcweir SwTxtRuby::SwTxtRuby( SwFmtRuby& rAttr,
229cdf0e10cSrcweir xub_StrLen nStart, xub_StrLen nEnd )
230cdf0e10cSrcweir : SwTxtAttrNesting( rAttr, nStart, nEnd )
231cdf0e10cSrcweir , SwClient( 0 )
232cdf0e10cSrcweir , m_pTxtNode( 0 )
233cdf0e10cSrcweir {
234cdf0e10cSrcweir rAttr.pTxtAttr = this;
235cdf0e10cSrcweir }
236cdf0e10cSrcweir
~SwTxtRuby()237cdf0e10cSrcweir SwTxtRuby::~SwTxtRuby()
238cdf0e10cSrcweir {
239cdf0e10cSrcweir }
240cdf0e10cSrcweir
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)241cdf0e10cSrcweir void SwTxtRuby::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew )
242cdf0e10cSrcweir {
243cdf0e10cSrcweir sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
244cdf0e10cSrcweir ASSERT( isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
245cdf0e10cSrcweir || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
246cdf0e10cSrcweir "SwTxtRuby::Modify(): unknown Modify");
247cdf0e10cSrcweir
248cdf0e10cSrcweir if ( m_pTxtNode )
249cdf0e10cSrcweir {
250*56b35d86SArmin Le Grand SwUpdateAttr aUpdateAttr(
251*56b35d86SArmin Le Grand *GetStart(),
252*56b35d86SArmin Le Grand *GetEnd(),
253*56b35d86SArmin Le Grand nWhich);
254*56b35d86SArmin Le Grand
255cdf0e10cSrcweir m_pTxtNode->ModifyNotification( &aUpdateAttr, &aUpdateAttr );
256cdf0e10cSrcweir }
257cdf0e10cSrcweir }
258cdf0e10cSrcweir
GetInfo(SfxPoolItem & rInfo) const259cdf0e10cSrcweir sal_Bool SwTxtRuby::GetInfo( SfxPoolItem& rInfo ) const
260cdf0e10cSrcweir {
261cdf0e10cSrcweir if( RES_AUTOFMT_DOCNODE != rInfo.Which() || !m_pTxtNode ||
262cdf0e10cSrcweir &m_pTxtNode->GetNodes() != static_cast<SwAutoFmtGetDocNode&>(rInfo).pNodes )
263cdf0e10cSrcweir {
264cdf0e10cSrcweir return sal_True;
265cdf0e10cSrcweir }
266cdf0e10cSrcweir
267cdf0e10cSrcweir static_cast<SwAutoFmtGetDocNode&>(rInfo).pCntntNode = m_pTxtNode;
268cdf0e10cSrcweir return sal_False;
269cdf0e10cSrcweir }
270cdf0e10cSrcweir
GetCharFmt()271cdf0e10cSrcweir SwCharFmt* SwTxtRuby::GetCharFmt()
272cdf0e10cSrcweir {
273cdf0e10cSrcweir const SwFmtRuby& rFmt = SwTxtAttrEnd::GetRuby();
274cdf0e10cSrcweir SwCharFmt* pRet = 0;
275cdf0e10cSrcweir
276cdf0e10cSrcweir if( rFmt.GetText().Len() )
277cdf0e10cSrcweir {
278cdf0e10cSrcweir const SwDoc* pDoc = GetTxtNode().GetDoc();
279cdf0e10cSrcweir const String& rStr = rFmt.GetCharFmtName();
280cdf0e10cSrcweir sal_uInt16 nId = RES_POOLCHR_RUBYTEXT;
281cdf0e10cSrcweir if ( rStr.Len() )
282cdf0e10cSrcweir nId = rFmt.GetCharFmtId();
283cdf0e10cSrcweir
284cdf0e10cSrcweir // JP 10.02.2000, Bug 72806: dont modify the doc for getting the
285cdf0e10cSrcweir // correct charstyle.
286cdf0e10cSrcweir sal_Bool bResetMod = !pDoc->IsModified();
287cdf0e10cSrcweir Link aOle2Lnk;
288cdf0e10cSrcweir if( bResetMod )
289cdf0e10cSrcweir {
290cdf0e10cSrcweir aOle2Lnk = pDoc->GetOle2Link();
291cdf0e10cSrcweir ((SwDoc*)pDoc)->SetOle2Link( Link() );
292cdf0e10cSrcweir }
293cdf0e10cSrcweir
294cdf0e10cSrcweir pRet = IsPoolUserFmt( nId )
295cdf0e10cSrcweir ? ((SwDoc*)pDoc)->FindCharFmtByName( rStr )
296cdf0e10cSrcweir : ((SwDoc*)pDoc)->GetCharFmtFromPool( nId );
297cdf0e10cSrcweir
298cdf0e10cSrcweir if( bResetMod )
299cdf0e10cSrcweir {
300cdf0e10cSrcweir ((SwDoc*)pDoc)->ResetModified();
301cdf0e10cSrcweir ((SwDoc*)pDoc)->SetOle2Link( aOle2Lnk );
302cdf0e10cSrcweir }
303cdf0e10cSrcweir }
304cdf0e10cSrcweir
305cdf0e10cSrcweir if( pRet )
306cdf0e10cSrcweir pRet->Add( this );
307cdf0e10cSrcweir else if( GetRegisteredIn() )
308cdf0e10cSrcweir GetRegisteredInNonConst()->Remove( this );
309cdf0e10cSrcweir
310cdf0e10cSrcweir return pRet;
311cdf0e10cSrcweir }
312cdf0e10cSrcweir
313cdf0e10cSrcweir
314cdf0e10cSrcweir /*************************************************************************
315cdf0e10cSrcweir * class SwTxtMeta
316cdf0e10cSrcweir *************************************************************************/
317cdf0e10cSrcweir
318cdf0e10cSrcweir SwTxtMeta *
CreateTxtMeta(::sw::MetaFieldManager & i_rTargetDocManager,SwTxtNode * const i_pTargetTxtNode,SwFmtMeta & i_rAttr,xub_StrLen const i_nStart,xub_StrLen const i_nEnd,bool const i_bIsCopy)319cdf0e10cSrcweir SwTxtMeta::CreateTxtMeta(
320cdf0e10cSrcweir ::sw::MetaFieldManager & i_rTargetDocManager,
321cdf0e10cSrcweir SwTxtNode *const i_pTargetTxtNode,
322cdf0e10cSrcweir SwFmtMeta & i_rAttr,
323dec99bbdSOliver-Rainer Wittmann xub_StrLen const i_nStart,
324dec99bbdSOliver-Rainer Wittmann xub_StrLen const i_nEnd,
325dec99bbdSOliver-Rainer Wittmann bool const i_bIsCopy)
326cdf0e10cSrcweir {
327cdf0e10cSrcweir if (COPY == i_bIsCopy)
328cdf0e10cSrcweir { // i_rAttr is already cloned, now call DoCopy to copy the sw::Meta
329cdf0e10cSrcweir OSL_ENSURE(i_pTargetTxtNode, "cannot copy Meta without target node");
330cdf0e10cSrcweir i_rAttr.DoCopy(i_rTargetDocManager, *i_pTargetTxtNode);
331cdf0e10cSrcweir }
332cdf0e10cSrcweir SwTxtMeta *const pTxtMeta(new SwTxtMeta(i_rAttr, i_nStart, i_nEnd));
333cdf0e10cSrcweir return pTxtMeta;
334cdf0e10cSrcweir }
335cdf0e10cSrcweir
SwTxtMeta(SwFmtMeta & i_rAttr,const xub_StrLen i_nStart,const xub_StrLen i_nEnd)336cdf0e10cSrcweir SwTxtMeta::SwTxtMeta( SwFmtMeta & i_rAttr,
337cdf0e10cSrcweir const xub_StrLen i_nStart, const xub_StrLen i_nEnd )
338cdf0e10cSrcweir : SwTxtAttrNesting( i_rAttr, i_nStart, i_nEnd )
339cdf0e10cSrcweir {
340cdf0e10cSrcweir i_rAttr.SetTxtAttr( this );
341cdf0e10cSrcweir SetHasDummyChar(true);
342cdf0e10cSrcweir }
343cdf0e10cSrcweir
~SwTxtMeta()344cdf0e10cSrcweir SwTxtMeta::~SwTxtMeta()
345cdf0e10cSrcweir {
346cdf0e10cSrcweir SwFmtMeta & rFmtMeta( static_cast<SwFmtMeta &>(GetAttr()) );
347cdf0e10cSrcweir if (rFmtMeta.GetTxtAttr() == this)
348cdf0e10cSrcweir {
349cdf0e10cSrcweir rFmtMeta.SetTxtAttr(0);
350cdf0e10cSrcweir }
351cdf0e10cSrcweir }
352cdf0e10cSrcweir
ChgTxtNode(SwTxtNode * const pNode)353cdf0e10cSrcweir void SwTxtMeta::ChgTxtNode(SwTxtNode * const pNode)
354cdf0e10cSrcweir {
355cdf0e10cSrcweir SwFmtMeta & rFmtMeta( static_cast<SwFmtMeta &>(GetAttr()) );
356cdf0e10cSrcweir if (rFmtMeta.GetTxtAttr() == this)
357cdf0e10cSrcweir {
358cdf0e10cSrcweir rFmtMeta.NotifyChangeTxtNode(pNode);
359cdf0e10cSrcweir }
360cdf0e10cSrcweir }
361cdf0e10cSrcweir
362