xref: /aoo4110/main/sw/source/core/txtnode/txtatr2.cxx (revision b1cdbd2c)
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 // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sw.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <hintids.hxx>
28*b1cdbd2cSJim Jagielski #include <hints.hxx>
29*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
30*b1cdbd2cSJim Jagielski #include <editeng/xmlcnitm.hxx>
31*b1cdbd2cSJim Jagielski #include <editeng/twolinesitem.hxx>
32*b1cdbd2cSJim Jagielski #include <txtinet.hxx>
33*b1cdbd2cSJim Jagielski #include <txtatr.hxx>
34*b1cdbd2cSJim Jagielski #include <fchrfmt.hxx>
35*b1cdbd2cSJim Jagielski #include <fmtinfmt.hxx>
36*b1cdbd2cSJim Jagielski #include <charfmt.hxx>
37*b1cdbd2cSJim Jagielski #include <ndtxt.hxx>        // SwCharFmt, SwTxtNode
38*b1cdbd2cSJim Jagielski #include <poolfmt.hxx>		// RES_POOLCHR_INET_...
39*b1cdbd2cSJim Jagielski #include <doc.hxx>			// SwDoc
40*b1cdbd2cSJim Jagielski #include <fmtruby.hxx>
41*b1cdbd2cSJim Jagielski #include <fmtmeta.hxx>
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski TYPEINIT1(SwTxtINetFmt,SwClient);
45*b1cdbd2cSJim Jagielski TYPEINIT1(SwTxtRuby,SwClient);
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski /*************************************************************************
49*b1cdbd2cSJim Jagielski  *						class SwTxtCharFmt
50*b1cdbd2cSJim Jagielski  *************************************************************************/
51*b1cdbd2cSJim Jagielski 
SwTxtCharFmt(SwFmtCharFmt & rAttr,xub_StrLen nStt,xub_StrLen nEnde)52*b1cdbd2cSJim Jagielski SwTxtCharFmt::SwTxtCharFmt( SwFmtCharFmt& rAttr,
53*b1cdbd2cSJim Jagielski                     xub_StrLen nStt, xub_StrLen nEnde )
54*b1cdbd2cSJim Jagielski     : SwTxtAttrEnd( rAttr, nStt, nEnde )
55*b1cdbd2cSJim Jagielski     , m_pTxtNode( 0 )
56*b1cdbd2cSJim Jagielski     , m_nSortNumber( 0 )
57*b1cdbd2cSJim Jagielski {
58*b1cdbd2cSJim Jagielski 	rAttr.pTxtAttr = this;
59*b1cdbd2cSJim Jagielski 	SetCharFmtAttr( sal_True );
60*b1cdbd2cSJim Jagielski }
61*b1cdbd2cSJim Jagielski 
~SwTxtCharFmt()62*b1cdbd2cSJim Jagielski SwTxtCharFmt::~SwTxtCharFmt( )
63*b1cdbd2cSJim Jagielski {
64*b1cdbd2cSJim Jagielski }
65*b1cdbd2cSJim Jagielski 
ModifyNotification(const SfxPoolItem * pOld,const SfxPoolItem * pNew)66*b1cdbd2cSJim Jagielski void SwTxtCharFmt::ModifyNotification( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
67*b1cdbd2cSJim Jagielski {
68*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
69*b1cdbd2cSJim Jagielski     ASSERT(  isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
70*b1cdbd2cSJim Jagielski              || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
71*b1cdbd2cSJim Jagielski         "SwTxtCharFmt::Modify(): unknown Modify");
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski     if ( m_pTxtNode )
74*b1cdbd2cSJim Jagielski     {
75*b1cdbd2cSJim Jagielski 		SwUpdateAttr aUpdateAttr( *GetStart(), *GetEnd(), nWhich );
76*b1cdbd2cSJim Jagielski         m_pTxtNode->ModifyNotification( &aUpdateAttr, &aUpdateAttr );
77*b1cdbd2cSJim Jagielski     }
78*b1cdbd2cSJim Jagielski }
79*b1cdbd2cSJim Jagielski 
GetInfo(SfxPoolItem & rInfo) const80*b1cdbd2cSJim Jagielski bool SwTxtCharFmt::GetInfo( SfxPoolItem& rInfo ) const
81*b1cdbd2cSJim Jagielski {
82*b1cdbd2cSJim Jagielski     if ( RES_AUTOFMT_DOCNODE != rInfo.Which() || !m_pTxtNode ||
83*b1cdbd2cSJim Jagielski         &m_pTxtNode->GetNodes() != static_cast<SwAutoFmtGetDocNode&>(rInfo).pNodes )
84*b1cdbd2cSJim Jagielski     {
85*b1cdbd2cSJim Jagielski 		return true;
86*b1cdbd2cSJim Jagielski     }
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski     static_cast<SwAutoFmtGetDocNode&>(rInfo).pCntntNode = m_pTxtNode;
89*b1cdbd2cSJim Jagielski 	return false;
90*b1cdbd2cSJim Jagielski }
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski /*************************************************************************
94*b1cdbd2cSJim Jagielski  *                        class SwTxtAttrNesting
95*b1cdbd2cSJim Jagielski  *************************************************************************/
96*b1cdbd2cSJim Jagielski 
SwTxtAttrNesting(SfxPoolItem & i_rAttr,const xub_StrLen i_nStart,const xub_StrLen i_nEnd)97*b1cdbd2cSJim Jagielski SwTxtAttrNesting::SwTxtAttrNesting( SfxPoolItem & i_rAttr,
98*b1cdbd2cSJim Jagielski             const xub_StrLen i_nStart, const xub_StrLen i_nEnd )
99*b1cdbd2cSJim Jagielski     : SwTxtAttrEnd( i_rAttr, i_nStart, i_nEnd )
100*b1cdbd2cSJim Jagielski {
101*b1cdbd2cSJim Jagielski     SetDontExpand( true );  // never expand this attribute
102*b1cdbd2cSJim Jagielski     // lock the expand flag: simple guarantee that nesting will not be
103*b1cdbd2cSJim Jagielski     // invalidated by expand operations
104*b1cdbd2cSJim Jagielski     SetLockExpandFlag( true );
105*b1cdbd2cSJim Jagielski     SetDontExpandStartAttr( true );
106*b1cdbd2cSJim Jagielski     SetNesting( true );
107*b1cdbd2cSJim Jagielski }
108*b1cdbd2cSJim Jagielski 
~SwTxtAttrNesting()109*b1cdbd2cSJim Jagielski SwTxtAttrNesting::~SwTxtAttrNesting()
110*b1cdbd2cSJim Jagielski {
111*b1cdbd2cSJim Jagielski }
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski /*************************************************************************
115*b1cdbd2cSJim Jagielski  *						class SwTxtINetFmt
116*b1cdbd2cSJim Jagielski  *************************************************************************/
117*b1cdbd2cSJim Jagielski 
SwTxtINetFmt(SwFmtINetFmt & rAttr,xub_StrLen nStart,xub_StrLen nEnd)118*b1cdbd2cSJim Jagielski SwTxtINetFmt::SwTxtINetFmt( SwFmtINetFmt& rAttr,
119*b1cdbd2cSJim Jagielski                             xub_StrLen nStart, xub_StrLen nEnd )
120*b1cdbd2cSJim Jagielski     : SwTxtAttrNesting( rAttr, nStart, nEnd )
121*b1cdbd2cSJim Jagielski     , SwClient( 0 )
122*b1cdbd2cSJim Jagielski     , m_pTxtNode( 0 )
123*b1cdbd2cSJim Jagielski     , m_bVisited( false )
124*b1cdbd2cSJim Jagielski     , m_bVisitedValid( false )
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski     rAttr.mpTxtAttr  = this;
127*b1cdbd2cSJim Jagielski     SetCharFmtAttr( true );
128*b1cdbd2cSJim Jagielski }
129*b1cdbd2cSJim Jagielski 
~SwTxtINetFmt()130*b1cdbd2cSJim Jagielski SwTxtINetFmt::~SwTxtINetFmt( )
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski }
133*b1cdbd2cSJim Jagielski 
GetCharFmt()134*b1cdbd2cSJim Jagielski SwCharFmt* SwTxtINetFmt::GetCharFmt()
135*b1cdbd2cSJim Jagielski {
136*b1cdbd2cSJim Jagielski     const SwFmtINetFmt& rFmt = SwTxtAttrEnd::GetINetFmt();
137*b1cdbd2cSJim Jagielski     SwCharFmt* pRet = NULL;
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski     if ( rFmt.GetValue().Len() )
140*b1cdbd2cSJim Jagielski     {
141*b1cdbd2cSJim Jagielski         const SwDoc* pDoc = GetTxtNode().GetDoc();
142*b1cdbd2cSJim Jagielski         if( !IsVisitedValid() )
143*b1cdbd2cSJim Jagielski         {
144*b1cdbd2cSJim Jagielski             SetVisited( pDoc->IsVisitedURL( rFmt.GetValue() ) );
145*b1cdbd2cSJim Jagielski             SetVisitedValid( true );
146*b1cdbd2cSJim Jagielski         }
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski         const sal_uInt16 nId = IsVisited() ? rFmt.GetVisitedFmtId() : rFmt.GetINetFmtId();
149*b1cdbd2cSJim Jagielski         const String& rStr = IsVisited() ? rFmt.GetVisitedFmt() : rFmt.GetINetFmt();
150*b1cdbd2cSJim Jagielski         if ( rStr.Len() == 0 )
151*b1cdbd2cSJim Jagielski         {
152*b1cdbd2cSJim Jagielski             ASSERT( false, "<SwTxtINetFmt::GetCharFmt()> - missing character format at hyperlink attribute");
153*b1cdbd2cSJim Jagielski         }
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski         // JP 10.02.2000, Bug 72806: dont modify the doc for getting the
156*b1cdbd2cSJim Jagielski         //		correct charstyle.
157*b1cdbd2cSJim Jagielski         sal_Bool bResetMod = !pDoc->IsModified();
158*b1cdbd2cSJim Jagielski         Link aOle2Lnk;
159*b1cdbd2cSJim Jagielski         if ( bResetMod )
160*b1cdbd2cSJim Jagielski         {
161*b1cdbd2cSJim Jagielski             aOle2Lnk = pDoc->GetOle2Link();
162*b1cdbd2cSJim Jagielski             ( (SwDoc*) pDoc )->SetOle2Link( Link() );
163*b1cdbd2cSJim Jagielski         }
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski         pRet = IsPoolUserFmt( nId )
166*b1cdbd2cSJim Jagielski                ? ( (SwDoc*) pDoc )->FindCharFmtByName( rStr )
167*b1cdbd2cSJim Jagielski                : ( (SwDoc*) pDoc )->GetCharFmtFromPool( nId );
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski         if ( bResetMod )
170*b1cdbd2cSJim Jagielski         {
171*b1cdbd2cSJim Jagielski             ( (SwDoc*) pDoc )->ResetModified();
172*b1cdbd2cSJim Jagielski             ( (SwDoc*) pDoc )->SetOle2Link( aOle2Lnk );
173*b1cdbd2cSJim Jagielski         }
174*b1cdbd2cSJim Jagielski     }
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski     if ( pRet )
177*b1cdbd2cSJim Jagielski         pRet->Add( this );
178*b1cdbd2cSJim Jagielski     else if ( GetRegisteredIn() )
179*b1cdbd2cSJim Jagielski         GetRegisteredInNonConst()->Remove( this );
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski     return pRet;
182*b1cdbd2cSJim Jagielski }
183*b1cdbd2cSJim Jagielski 
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)184*b1cdbd2cSJim Jagielski void SwTxtINetFmt::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
185*b1cdbd2cSJim Jagielski {
186*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
187*b1cdbd2cSJim Jagielski     ASSERT(  isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
188*b1cdbd2cSJim Jagielski              || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
189*b1cdbd2cSJim Jagielski         "SwTxtINetFmt::Modify(): unknown Modify");
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski     if ( m_pTxtNode )
192*b1cdbd2cSJim Jagielski     {
193*b1cdbd2cSJim Jagielski 		SwUpdateAttr aUpdateAttr( *GetStart(), *GetEnd(), nWhich );
194*b1cdbd2cSJim Jagielski         m_pTxtNode->ModifyNotification( &aUpdateAttr, &aUpdateAttr );
195*b1cdbd2cSJim Jagielski     }
196*b1cdbd2cSJim Jagielski }
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 	// erfrage vom Modify Informationen
GetInfo(SfxPoolItem & rInfo) const199*b1cdbd2cSJim Jagielski sal_Bool SwTxtINetFmt::GetInfo( SfxPoolItem& rInfo ) const
200*b1cdbd2cSJim Jagielski {
201*b1cdbd2cSJim Jagielski     if ( RES_AUTOFMT_DOCNODE != rInfo.Which() || !m_pTxtNode ||
202*b1cdbd2cSJim Jagielski         &m_pTxtNode->GetNodes() != static_cast<SwAutoFmtGetDocNode&>(rInfo).pNodes )
203*b1cdbd2cSJim Jagielski     {
204*b1cdbd2cSJim Jagielski 		return sal_True;
205*b1cdbd2cSJim Jagielski     }
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski     static_cast<SwAutoFmtGetDocNode&>(rInfo).pCntntNode = m_pTxtNode;
208*b1cdbd2cSJim Jagielski 	return sal_False;
209*b1cdbd2cSJim Jagielski }
210*b1cdbd2cSJim Jagielski 
IsProtect() const211*b1cdbd2cSJim Jagielski sal_Bool SwTxtINetFmt::IsProtect( ) const
212*b1cdbd2cSJim Jagielski {
213*b1cdbd2cSJim Jagielski     return m_pTxtNode && m_pTxtNode->IsProtect();
214*b1cdbd2cSJim Jagielski }
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski /*************************************************************************
217*b1cdbd2cSJim Jagielski  *						class SwTxtRuby
218*b1cdbd2cSJim Jagielski  *************************************************************************/
219*b1cdbd2cSJim Jagielski 
SwTxtRuby(SwFmtRuby & rAttr,xub_StrLen nStart,xub_StrLen nEnd)220*b1cdbd2cSJim Jagielski SwTxtRuby::SwTxtRuby( SwFmtRuby& rAttr,
221*b1cdbd2cSJim Jagielski                       xub_StrLen nStart, xub_StrLen nEnd )
222*b1cdbd2cSJim Jagielski     : SwTxtAttrNesting( rAttr, nStart, nEnd )
223*b1cdbd2cSJim Jagielski     , SwClient( 0 )
224*b1cdbd2cSJim Jagielski     , m_pTxtNode( 0 )
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski     rAttr.pTxtAttr  = this;
227*b1cdbd2cSJim Jagielski }
228*b1cdbd2cSJim Jagielski 
~SwTxtRuby()229*b1cdbd2cSJim Jagielski SwTxtRuby::~SwTxtRuby()
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski }
232*b1cdbd2cSJim Jagielski 
Modify(const SfxPoolItem * pOld,const SfxPoolItem * pNew)233*b1cdbd2cSJim Jagielski void SwTxtRuby::Modify( const SfxPoolItem* pOld, const SfxPoolItem *pNew )
234*b1cdbd2cSJim Jagielski {
235*b1cdbd2cSJim Jagielski 	sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0;
236*b1cdbd2cSJim Jagielski     ASSERT(  isCHRATR(nWhich) || (RES_OBJECTDYING == nWhich)
237*b1cdbd2cSJim Jagielski              || (RES_ATTRSET_CHG == nWhich) || (RES_FMT_CHG == nWhich),
238*b1cdbd2cSJim Jagielski         "SwTxtRuby::Modify(): unknown Modify");
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski     if ( m_pTxtNode )
241*b1cdbd2cSJim Jagielski     {
242*b1cdbd2cSJim Jagielski 		SwUpdateAttr aUpdateAttr( *GetStart(), *GetEnd(), nWhich );
243*b1cdbd2cSJim Jagielski         m_pTxtNode->ModifyNotification( &aUpdateAttr, &aUpdateAttr );
244*b1cdbd2cSJim Jagielski     }
245*b1cdbd2cSJim Jagielski }
246*b1cdbd2cSJim Jagielski 
GetInfo(SfxPoolItem & rInfo) const247*b1cdbd2cSJim Jagielski sal_Bool SwTxtRuby::GetInfo( SfxPoolItem& rInfo ) const
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski     if( RES_AUTOFMT_DOCNODE != rInfo.Which() || !m_pTxtNode ||
250*b1cdbd2cSJim Jagielski         &m_pTxtNode->GetNodes() != static_cast<SwAutoFmtGetDocNode&>(rInfo).pNodes )
251*b1cdbd2cSJim Jagielski     {
252*b1cdbd2cSJim Jagielski         return sal_True;
253*b1cdbd2cSJim Jagielski     }
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski     static_cast<SwAutoFmtGetDocNode&>(rInfo).pCntntNode = m_pTxtNode;
256*b1cdbd2cSJim Jagielski     return sal_False;
257*b1cdbd2cSJim Jagielski }
258*b1cdbd2cSJim Jagielski 
GetCharFmt()259*b1cdbd2cSJim Jagielski SwCharFmt* SwTxtRuby::GetCharFmt()
260*b1cdbd2cSJim Jagielski {
261*b1cdbd2cSJim Jagielski 	const SwFmtRuby& rFmt = SwTxtAttrEnd::GetRuby();
262*b1cdbd2cSJim Jagielski 	SwCharFmt* pRet = 0;
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski 	if( rFmt.GetText().Len() )
265*b1cdbd2cSJim Jagielski 	{
266*b1cdbd2cSJim Jagielski 		const SwDoc* pDoc = GetTxtNode().GetDoc();
267*b1cdbd2cSJim Jagielski 		const String& rStr = rFmt.GetCharFmtName();
268*b1cdbd2cSJim Jagielski         sal_uInt16 nId = RES_POOLCHR_RUBYTEXT;
269*b1cdbd2cSJim Jagielski         if ( rStr.Len() )
270*b1cdbd2cSJim Jagielski             nId = rFmt.GetCharFmtId();
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski 		// JP 10.02.2000, Bug 72806: dont modify the doc for getting the
273*b1cdbd2cSJim Jagielski 		//				correct charstyle.
274*b1cdbd2cSJim Jagielski 		sal_Bool bResetMod = !pDoc->IsModified();
275*b1cdbd2cSJim Jagielski 		Link aOle2Lnk;
276*b1cdbd2cSJim Jagielski 		if( bResetMod )
277*b1cdbd2cSJim Jagielski 		{
278*b1cdbd2cSJim Jagielski 			aOle2Lnk = pDoc->GetOle2Link();
279*b1cdbd2cSJim Jagielski 			((SwDoc*)pDoc)->SetOle2Link( Link() );
280*b1cdbd2cSJim Jagielski 		}
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski 		pRet = IsPoolUserFmt( nId )
283*b1cdbd2cSJim Jagielski 				? ((SwDoc*)pDoc)->FindCharFmtByName( rStr )
284*b1cdbd2cSJim Jagielski 				: ((SwDoc*)pDoc)->GetCharFmtFromPool( nId );
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 		if( bResetMod )
287*b1cdbd2cSJim Jagielski 		{
288*b1cdbd2cSJim Jagielski 			((SwDoc*)pDoc)->ResetModified();
289*b1cdbd2cSJim Jagielski 			((SwDoc*)pDoc)->SetOle2Link( aOle2Lnk );
290*b1cdbd2cSJim Jagielski 		}
291*b1cdbd2cSJim Jagielski 	}
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski 	if( pRet )
294*b1cdbd2cSJim Jagielski 		pRet->Add( this );
295*b1cdbd2cSJim Jagielski 	else if( GetRegisteredIn() )
296*b1cdbd2cSJim Jagielski 		GetRegisteredInNonConst()->Remove( this );
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 	return pRet;
299*b1cdbd2cSJim Jagielski }
300*b1cdbd2cSJim Jagielski 
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski /*************************************************************************
303*b1cdbd2cSJim Jagielski  *                        class SwTxtMeta
304*b1cdbd2cSJim Jagielski  *************************************************************************/
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski 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)307*b1cdbd2cSJim Jagielski SwTxtMeta::CreateTxtMeta(
308*b1cdbd2cSJim Jagielski     ::sw::MetaFieldManager & i_rTargetDocManager,
309*b1cdbd2cSJim Jagielski     SwTxtNode *const i_pTargetTxtNode,
310*b1cdbd2cSJim Jagielski     SwFmtMeta & i_rAttr,
311*b1cdbd2cSJim Jagielski     xub_StrLen const i_nStart,
312*b1cdbd2cSJim Jagielski     xub_StrLen const i_nEnd,
313*b1cdbd2cSJim Jagielski     bool const i_bIsCopy)
314*b1cdbd2cSJim Jagielski {
315*b1cdbd2cSJim Jagielski     if (COPY == i_bIsCopy)
316*b1cdbd2cSJim Jagielski     {   // i_rAttr is already cloned, now call DoCopy to copy the sw::Meta
317*b1cdbd2cSJim Jagielski         OSL_ENSURE(i_pTargetTxtNode, "cannot copy Meta without target node");
318*b1cdbd2cSJim Jagielski         i_rAttr.DoCopy(i_rTargetDocManager, *i_pTargetTxtNode);
319*b1cdbd2cSJim Jagielski     }
320*b1cdbd2cSJim Jagielski     SwTxtMeta *const pTxtMeta(new SwTxtMeta(i_rAttr, i_nStart, i_nEnd));
321*b1cdbd2cSJim Jagielski     return pTxtMeta;
322*b1cdbd2cSJim Jagielski }
323*b1cdbd2cSJim Jagielski 
SwTxtMeta(SwFmtMeta & i_rAttr,const xub_StrLen i_nStart,const xub_StrLen i_nEnd)324*b1cdbd2cSJim Jagielski SwTxtMeta::SwTxtMeta( SwFmtMeta & i_rAttr,
325*b1cdbd2cSJim Jagielski         const xub_StrLen i_nStart, const xub_StrLen i_nEnd )
326*b1cdbd2cSJim Jagielski     : SwTxtAttrNesting( i_rAttr, i_nStart, i_nEnd )
327*b1cdbd2cSJim Jagielski {
328*b1cdbd2cSJim Jagielski     i_rAttr.SetTxtAttr( this );
329*b1cdbd2cSJim Jagielski     SetHasDummyChar(true);
330*b1cdbd2cSJim Jagielski }
331*b1cdbd2cSJim Jagielski 
~SwTxtMeta()332*b1cdbd2cSJim Jagielski SwTxtMeta::~SwTxtMeta()
333*b1cdbd2cSJim Jagielski {
334*b1cdbd2cSJim Jagielski     SwFmtMeta & rFmtMeta( static_cast<SwFmtMeta &>(GetAttr()) );
335*b1cdbd2cSJim Jagielski     if (rFmtMeta.GetTxtAttr() == this)
336*b1cdbd2cSJim Jagielski     {
337*b1cdbd2cSJim Jagielski         rFmtMeta.SetTxtAttr(0);
338*b1cdbd2cSJim Jagielski     }
339*b1cdbd2cSJim Jagielski }
340*b1cdbd2cSJim Jagielski 
ChgTxtNode(SwTxtNode * const pNode)341*b1cdbd2cSJim Jagielski void SwTxtMeta::ChgTxtNode(SwTxtNode * const pNode)
342*b1cdbd2cSJim Jagielski {
343*b1cdbd2cSJim Jagielski     SwFmtMeta & rFmtMeta( static_cast<SwFmtMeta &>(GetAttr()) );
344*b1cdbd2cSJim Jagielski     if (rFmtMeta.GetTxtAttr() == this)
345*b1cdbd2cSJim Jagielski     {
346*b1cdbd2cSJim Jagielski         rFmtMeta.NotifyChangeTxtNode(pNode);
347*b1cdbd2cSJim Jagielski     }
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski 
350