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