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
28*b1cdbd2cSJim Jagielski #include <hintids.hxx>
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielski #include <editeng/tstpitem.hxx>
31*b1cdbd2cSJim Jagielski #include <editeng/lrspitem.hxx>
32*b1cdbd2cSJim Jagielski #include <editeng/scripttypeitem.hxx>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/ScriptType.hdl>
34*b1cdbd2cSJim Jagielski #include <txatbase.hxx>
35*b1cdbd2cSJim Jagielski #include <txtftn.hxx>
36*b1cdbd2cSJim Jagielski #include <fmtftn.hxx>
37*b1cdbd2cSJim Jagielski #include <editsh.hxx>
38*b1cdbd2cSJim Jagielski #include <edimp.hxx> // fuer MACROS
39*b1cdbd2cSJim Jagielski #include <doc.hxx>
40*b1cdbd2cSJim Jagielski #include <swundo.hxx> // fuer UNDO-Ids
41*b1cdbd2cSJim Jagielski #include <ndtxt.hxx>
42*b1cdbd2cSJim Jagielski #include <ftnidx.hxx>
43*b1cdbd2cSJim Jagielski #include <expfld.hxx>
44*b1cdbd2cSJim Jagielski #include <rootfrm.hxx>
45*b1cdbd2cSJim Jagielski #include <cntfrm.hxx>
46*b1cdbd2cSJim Jagielski #include <breakit.hxx>
47*b1cdbd2cSJim Jagielski #include <txtfld.hxx>
48*b1cdbd2cSJim Jagielski #include <fmtfld.hxx>
49*b1cdbd2cSJim Jagielski #include <crsskip.hxx>
50*b1cdbd2cSJim Jagielski #include <txtfrm.hxx> // SwTxtFrm
51*b1cdbd2cSJim Jagielski #include <scriptinfo.hxx>
52*b1cdbd2cSJim Jagielski #include <svl/ctloptions.hxx>
53*b1cdbd2cSJim Jagielski #include <charfmt.hxx> // #i27615#
54*b1cdbd2cSJim Jagielski #include <numrule.hxx>
55*b1cdbd2cSJim Jagielski
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski /*************************************
58*b1cdbd2cSJim Jagielski * harte Formatierung (Attribute)
59*b1cdbd2cSJim Jagielski *************************************/
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski // wenn Selektion groesser Max Nodes oder mehr als Max Selektionen
62*b1cdbd2cSJim Jagielski // => keine Attribute
getMaxLookup()63*b1cdbd2cSJim Jagielski const sal_uInt16& getMaxLookup()
64*b1cdbd2cSJim Jagielski {
65*b1cdbd2cSJim Jagielski static const sal_uInt16 nMaxLookup = 1000;
66*b1cdbd2cSJim Jagielski return nMaxLookup;
67*b1cdbd2cSJim Jagielski }
68*b1cdbd2cSJim Jagielski
69*b1cdbd2cSJim Jagielski // --> OD 2008-01-16 #newlistlevelattrs#
GetCurAttr(SfxItemSet & rSet,const bool bMergeIndentValuesOfNumRule) const70*b1cdbd2cSJim Jagielski sal_Bool SwEditShell::GetCurAttr( SfxItemSet& rSet,
71*b1cdbd2cSJim Jagielski const bool bMergeIndentValuesOfNumRule ) const
72*b1cdbd2cSJim Jagielski // <--
73*b1cdbd2cSJim Jagielski {
74*b1cdbd2cSJim Jagielski if( GetCrsrCnt() > getMaxLookup() )
75*b1cdbd2cSJim Jagielski {
76*b1cdbd2cSJim Jagielski rSet.InvalidateAllItems();
77*b1cdbd2cSJim Jagielski return sal_False;
78*b1cdbd2cSJim Jagielski }
79*b1cdbd2cSJim Jagielski
80*b1cdbd2cSJim Jagielski SfxItemSet aSet( *rSet.GetPool(), rSet.GetRanges() );
81*b1cdbd2cSJim Jagielski SfxItemSet *pSet = &rSet;
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski FOREACHPAM_START(this)
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski // #i27615# if the cursor is in front of the numbering label
86*b1cdbd2cSJim Jagielski // the attributes to get are those from the numbering format.
87*b1cdbd2cSJim Jagielski if (PCURCRSR->IsInFrontOfLabel())
88*b1cdbd2cSJim Jagielski {
89*b1cdbd2cSJim Jagielski SwTxtNode * pTxtNd =
90*b1cdbd2cSJim Jagielski PCURCRSR->GetPoint()->nNode.GetNode().GetTxtNode();
91*b1cdbd2cSJim Jagielski
92*b1cdbd2cSJim Jagielski if (pTxtNd)
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski SwNumRule * pNumRule = pTxtNd->GetNumRule();
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielski if (pNumRule)
97*b1cdbd2cSJim Jagielski {
98*b1cdbd2cSJim Jagielski const String & aCharFmtName =
99*b1cdbd2cSJim Jagielski pNumRule->Get(static_cast<sal_uInt16>(pTxtNd->GetActualListLevel())).GetCharFmtName();
100*b1cdbd2cSJim Jagielski SwCharFmt * pCharFmt =
101*b1cdbd2cSJim Jagielski GetDoc()->FindCharFmtByName(aCharFmtName);
102*b1cdbd2cSJim Jagielski
103*b1cdbd2cSJim Jagielski if (pCharFmt)
104*b1cdbd2cSJim Jagielski rSet.Put(pCharFmt->GetAttrSet());
105*b1cdbd2cSJim Jagielski }
106*b1cdbd2cSJim Jagielski }
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski continue;
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski sal_uLong nSttNd = PCURCRSR->GetMark()->nNode.GetIndex(),
112*b1cdbd2cSJim Jagielski nEndNd = PCURCRSR->GetPoint()->nNode.GetIndex();
113*b1cdbd2cSJim Jagielski xub_StrLen nSttCnt = PCURCRSR->GetMark()->nContent.GetIndex(),
114*b1cdbd2cSJim Jagielski nEndCnt = PCURCRSR->GetPoint()->nContent.GetIndex();
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski if( nSttNd > nEndNd || ( nSttNd == nEndNd && nSttCnt > nEndCnt ))
117*b1cdbd2cSJim Jagielski {
118*b1cdbd2cSJim Jagielski sal_uLong nTmp = nSttNd; nSttNd = nEndNd; nEndNd = nTmp;
119*b1cdbd2cSJim Jagielski nTmp = nSttCnt; nSttCnt = nEndCnt; nEndCnt = (xub_StrLen)nTmp;
120*b1cdbd2cSJim Jagielski }
121*b1cdbd2cSJim Jagielski
122*b1cdbd2cSJim Jagielski if( nEndNd - nSttNd >= getMaxLookup() )
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski rSet.ClearItem();
125*b1cdbd2cSJim Jagielski rSet.InvalidateAllItems();
126*b1cdbd2cSJim Jagielski return sal_False;
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski
129*b1cdbd2cSJim Jagielski // beim 1.Node traegt der Node die Werte in den GetSet ein (Initial)
130*b1cdbd2cSJim Jagielski // alle weiteren Nodes werden zum GetSet zu gemergt
131*b1cdbd2cSJim Jagielski for( sal_uLong n = nSttNd; n <= nEndNd; ++n )
132*b1cdbd2cSJim Jagielski {
133*b1cdbd2cSJim Jagielski SwNode* pNd = GetDoc()->GetNodes()[ n ];
134*b1cdbd2cSJim Jagielski switch( pNd->GetNodeType() )
135*b1cdbd2cSJim Jagielski {
136*b1cdbd2cSJim Jagielski case ND_TEXTNODE:
137*b1cdbd2cSJim Jagielski {
138*b1cdbd2cSJim Jagielski xub_StrLen nStt = n == nSttNd ? nSttCnt : 0,
139*b1cdbd2cSJim Jagielski nEnd = n == nEndNd ? nEndCnt
140*b1cdbd2cSJim Jagielski : ((SwTxtNode*)pNd)->GetTxt().Len();
141*b1cdbd2cSJim Jagielski // --> OD 2008-01-16 #newlistlevelattrs#
142*b1cdbd2cSJim Jagielski ((SwTxtNode*)pNd)->GetAttr( *pSet, nStt, nEnd,
143*b1cdbd2cSJim Jagielski sal_False, sal_True,
144*b1cdbd2cSJim Jagielski bMergeIndentValuesOfNumRule );
145*b1cdbd2cSJim Jagielski // <--
146*b1cdbd2cSJim Jagielski }
147*b1cdbd2cSJim Jagielski break;
148*b1cdbd2cSJim Jagielski case ND_GRFNODE:
149*b1cdbd2cSJim Jagielski case ND_OLENODE:
150*b1cdbd2cSJim Jagielski ((SwCntntNode*)pNd)->GetAttr( *pSet );
151*b1cdbd2cSJim Jagielski break;
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski default:
154*b1cdbd2cSJim Jagielski pNd = 0;
155*b1cdbd2cSJim Jagielski }
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski if( pNd )
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski if( pSet != &rSet )
160*b1cdbd2cSJim Jagielski rSet.MergeValues( aSet );
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski if( aSet.Count() )
163*b1cdbd2cSJim Jagielski aSet.ClearItem();
164*b1cdbd2cSJim Jagielski }
165*b1cdbd2cSJim Jagielski pSet = &aSet;
166*b1cdbd2cSJim Jagielski }
167*b1cdbd2cSJim Jagielski
168*b1cdbd2cSJim Jagielski FOREACHPAM_END()
169*b1cdbd2cSJim Jagielski
170*b1cdbd2cSJim Jagielski return sal_True;
171*b1cdbd2cSJim Jagielski }
172*b1cdbd2cSJim Jagielski
GetCurTxtFmtColl() const173*b1cdbd2cSJim Jagielski SwTxtFmtColl* SwEditShell::GetCurTxtFmtColl() const
174*b1cdbd2cSJim Jagielski {
175*b1cdbd2cSJim Jagielski SwTxtFmtColl *pFmt = 0;
176*b1cdbd2cSJim Jagielski
177*b1cdbd2cSJim Jagielski if ( GetCrsrCnt() > getMaxLookup() )
178*b1cdbd2cSJim Jagielski return 0;
179*b1cdbd2cSJim Jagielski
180*b1cdbd2cSJim Jagielski FOREACHPAM_START(this)
181*b1cdbd2cSJim Jagielski
182*b1cdbd2cSJim Jagielski sal_uLong nSttNd = PCURCRSR->GetMark()->nNode.GetIndex(),
183*b1cdbd2cSJim Jagielski nEndNd = PCURCRSR->GetPoint()->nNode.GetIndex();
184*b1cdbd2cSJim Jagielski xub_StrLen nSttCnt = PCURCRSR->GetMark()->nContent.GetIndex(),
185*b1cdbd2cSJim Jagielski nEndCnt = PCURCRSR->GetPoint()->nContent.GetIndex();
186*b1cdbd2cSJim Jagielski
187*b1cdbd2cSJim Jagielski if( nSttNd > nEndNd || ( nSttNd == nEndNd && nSttCnt > nEndCnt ))
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski sal_uLong nTmp = nSttNd; nSttNd = nEndNd; nEndNd = nTmp;
190*b1cdbd2cSJim Jagielski nTmp = nSttCnt; nSttCnt = nEndCnt; nEndCnt = (xub_StrLen)nTmp;
191*b1cdbd2cSJim Jagielski }
192*b1cdbd2cSJim Jagielski
193*b1cdbd2cSJim Jagielski if( nEndNd - nSttNd >= getMaxLookup() )
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski pFmt = 0;
196*b1cdbd2cSJim Jagielski break;
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski
199*b1cdbd2cSJim Jagielski for( sal_uLong n = nSttNd; n <= nEndNd; ++n )
200*b1cdbd2cSJim Jagielski {
201*b1cdbd2cSJim Jagielski SwNode* pNd = GetDoc()->GetNodes()[ n ];
202*b1cdbd2cSJim Jagielski if( pNd->IsTxtNode() )
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski if( !pFmt )
205*b1cdbd2cSJim Jagielski pFmt = ((SwTxtNode*)pNd)->GetTxtColl();
206*b1cdbd2cSJim Jagielski else if( pFmt == ((SwTxtNode*)pNd)->GetTxtColl() ) // ???
207*b1cdbd2cSJim Jagielski break;
208*b1cdbd2cSJim Jagielski }
209*b1cdbd2cSJim Jagielski }
210*b1cdbd2cSJim Jagielski
211*b1cdbd2cSJim Jagielski FOREACHPAM_END()
212*b1cdbd2cSJim Jagielski return pFmt;
213*b1cdbd2cSJim Jagielski }
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski
216*b1cdbd2cSJim Jagielski
GetCurFtn(SwFmtFtn * pFillFtn)217*b1cdbd2cSJim Jagielski sal_Bool SwEditShell::GetCurFtn( SwFmtFtn* pFillFtn )
218*b1cdbd2cSJim Jagielski {
219*b1cdbd2cSJim Jagielski // der Cursor muss auf dem akt. Fussnoten-Anker stehen:
220*b1cdbd2cSJim Jagielski SwPaM* pCrsr = GetCrsr();
221*b1cdbd2cSJim Jagielski SwTxtNode* pTxtNd = pCrsr->GetNode()->GetTxtNode();
222*b1cdbd2cSJim Jagielski if( !pTxtNd )
223*b1cdbd2cSJim Jagielski return sal_False;
224*b1cdbd2cSJim Jagielski
225*b1cdbd2cSJim Jagielski SwTxtAttr *const pFtn = pTxtNd->GetTxtAttrForCharAt(
226*b1cdbd2cSJim Jagielski pCrsr->GetPoint()->nContent.GetIndex(), RES_TXTATR_FTN);
227*b1cdbd2cSJim Jagielski if( pFtn && pFillFtn )
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski // Daten vom Attribut uebertragen
230*b1cdbd2cSJim Jagielski const SwFmtFtn &rFtn = ((SwTxtFtn*)pFtn)->GetFtn();
231*b1cdbd2cSJim Jagielski pFillFtn->SetNumber( rFtn );
232*b1cdbd2cSJim Jagielski pFillFtn->SetEndNote( rFtn.IsEndNote() );
233*b1cdbd2cSJim Jagielski }
234*b1cdbd2cSJim Jagielski return 0 != pFtn;
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski
237*b1cdbd2cSJim Jagielski
SetCurFtn(const SwFmtFtn & rFillFtn)238*b1cdbd2cSJim Jagielski bool SwEditShell::SetCurFtn( const SwFmtFtn& rFillFtn )
239*b1cdbd2cSJim Jagielski {
240*b1cdbd2cSJim Jagielski bool bChgd = false;
241*b1cdbd2cSJim Jagielski StartAllAction();
242*b1cdbd2cSJim Jagielski
243*b1cdbd2cSJim Jagielski SwPaM* pCrsr = GetCrsr(), *pFirst = pCrsr;
244*b1cdbd2cSJim Jagielski do {
245*b1cdbd2cSJim Jagielski bChgd |=
246*b1cdbd2cSJim Jagielski pDoc->SetCurFtn( *pCrsr, rFillFtn.GetNumStr(), rFillFtn.GetNumber(), rFillFtn.IsEndNote() );
247*b1cdbd2cSJim Jagielski
248*b1cdbd2cSJim Jagielski } while( pFirst != ( pCrsr = (SwPaM*)pCrsr->GetNext() ));
249*b1cdbd2cSJim Jagielski
250*b1cdbd2cSJim Jagielski EndAllAction();
251*b1cdbd2cSJim Jagielski return bChgd;
252*b1cdbd2cSJim Jagielski }
253*b1cdbd2cSJim Jagielski
254*b1cdbd2cSJim Jagielski
255*b1cdbd2cSJim Jagielski
256*b1cdbd2cSJim Jagielski /*sal_uInt16 SwEditShell::GetFtnCnt( sal_Bool bEndNotes = sal_False ) const
257*b1cdbd2cSJim Jagielski {
258*b1cdbd2cSJim Jagielski const SwFtnIdxs &rIdxs = pDoc->GetFtnIdxs();
259*b1cdbd2cSJim Jagielski sal_uInt16 nCnt = 0;
260*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < rIdxs.Count(); ++i )
261*b1cdbd2cSJim Jagielski {
262*b1cdbd2cSJim Jagielski const SwFmtFtn &rFtn = rIdxs[i]->GetFtn();
263*b1cdbd2cSJim Jagielski if ( bEndNotes == rFtn.IsEndNote() )
264*b1cdbd2cSJim Jagielski nCnt++;
265*b1cdbd2cSJim Jagielski }
266*b1cdbd2cSJim Jagielski return nCnt;
267*b1cdbd2cSJim Jagielski } */
268*b1cdbd2cSJim Jagielski
269*b1cdbd2cSJim Jagielski
HasFtns(bool bEndNotes) const270*b1cdbd2cSJim Jagielski bool SwEditShell::HasFtns( bool bEndNotes ) const
271*b1cdbd2cSJim Jagielski {
272*b1cdbd2cSJim Jagielski const SwFtnIdxs &rIdxs = pDoc->GetFtnIdxs();
273*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0; i < rIdxs.Count(); ++i )
274*b1cdbd2cSJim Jagielski {
275*b1cdbd2cSJim Jagielski const SwFmtFtn &rFtn = rIdxs[i]->GetFtn();
276*b1cdbd2cSJim Jagielski if ( bEndNotes == rFtn.IsEndNote() )
277*b1cdbd2cSJim Jagielski return sal_True;
278*b1cdbd2cSJim Jagielski }
279*b1cdbd2cSJim Jagielski return sal_False;
280*b1cdbd2cSJim Jagielski }
281*b1cdbd2cSJim Jagielski
282*b1cdbd2cSJim Jagielski
283*b1cdbd2cSJim Jagielski // gebe Liste aller Fussnoten und deren Anfangstexte
GetSeqFtnList(SwSeqFldList & rList,bool bEndNotes)284*b1cdbd2cSJim Jagielski sal_uInt16 SwEditShell::GetSeqFtnList( SwSeqFldList& rList, bool bEndNotes )
285*b1cdbd2cSJim Jagielski {
286*b1cdbd2cSJim Jagielski if( rList.Count() )
287*b1cdbd2cSJim Jagielski rList.Remove( 0, rList.Count() );
288*b1cdbd2cSJim Jagielski
289*b1cdbd2cSJim Jagielski sal_uInt16 n, nFtnCnt = pDoc->GetFtnIdxs().Count();
290*b1cdbd2cSJim Jagielski SwTxtFtn* pTxtFtn;
291*b1cdbd2cSJim Jagielski for( n = 0; n < nFtnCnt; ++n )
292*b1cdbd2cSJim Jagielski {
293*b1cdbd2cSJim Jagielski pTxtFtn = pDoc->GetFtnIdxs()[ n ];
294*b1cdbd2cSJim Jagielski const SwFmtFtn& rFtn = pTxtFtn->GetFtn();
295*b1cdbd2cSJim Jagielski if ( rFtn.IsEndNote() != bEndNotes )
296*b1cdbd2cSJim Jagielski continue;
297*b1cdbd2cSJim Jagielski
298*b1cdbd2cSJim Jagielski SwNodeIndex* pIdx = pTxtFtn->GetStartNode();
299*b1cdbd2cSJim Jagielski if( pIdx )
300*b1cdbd2cSJim Jagielski {
301*b1cdbd2cSJim Jagielski SwNodeIndex aIdx( *pIdx, 1 );
302*b1cdbd2cSJim Jagielski SwTxtNode* pTxtNd = aIdx.GetNode().GetTxtNode();
303*b1cdbd2cSJim Jagielski if( !pTxtNd )
304*b1cdbd2cSJim Jagielski pTxtNd = (SwTxtNode*)pDoc->GetNodes().GoNext( &aIdx );
305*b1cdbd2cSJim Jagielski
306*b1cdbd2cSJim Jagielski if( pTxtNd )
307*b1cdbd2cSJim Jagielski {
308*b1cdbd2cSJim Jagielski String sTxt( rFtn.GetViewNumStr( *pDoc ));
309*b1cdbd2cSJim Jagielski if( sTxt.Len() )
310*b1cdbd2cSJim Jagielski sTxt += ' ';
311*b1cdbd2cSJim Jagielski sTxt += pTxtNd->GetExpandTxt( 0, USHRT_MAX );
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski _SeqFldLstElem* pNew = new _SeqFldLstElem( sTxt,
314*b1cdbd2cSJim Jagielski pTxtFtn->GetSeqRefNo() );
315*b1cdbd2cSJim Jagielski while( rList.InsertSort( pNew ) )
316*b1cdbd2cSJim Jagielski pNew->sDlgEntry += ' ';
317*b1cdbd2cSJim Jagielski }
318*b1cdbd2cSJim Jagielski }
319*b1cdbd2cSJim Jagielski }
320*b1cdbd2cSJim Jagielski
321*b1cdbd2cSJim Jagielski return rList.Count();
322*b1cdbd2cSJim Jagielski }
323*b1cdbd2cSJim Jagielski
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski // linken Rand ueber Objectleiste einstellen (aenhlich dem Stufen von
326*b1cdbd2cSJim Jagielski // Numerierungen)
IsMoveLeftMargin(sal_Bool bRight,sal_Bool bModulus) const327*b1cdbd2cSJim Jagielski sal_Bool SwEditShell::IsMoveLeftMargin( sal_Bool bRight, sal_Bool bModulus ) const
328*b1cdbd2cSJim Jagielski {
329*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_True;
330*b1cdbd2cSJim Jagielski
331*b1cdbd2cSJim Jagielski const SvxTabStopItem& rTabItem = (SvxTabStopItem&)GetDoc()->
332*b1cdbd2cSJim Jagielski GetDefault( RES_PARATR_TABSTOP );
333*b1cdbd2cSJim Jagielski sal_uInt16 nDefDist = static_cast<sal_uInt16>(rTabItem.Count() ? rTabItem[0].GetTabPos() : 1134);
334*b1cdbd2cSJim Jagielski if( !nDefDist )
335*b1cdbd2cSJim Jagielski return sal_False;
336*b1cdbd2cSJim Jagielski
337*b1cdbd2cSJim Jagielski FOREACHPAM_START(this)
338*b1cdbd2cSJim Jagielski
339*b1cdbd2cSJim Jagielski sal_uLong nSttNd = PCURCRSR->GetMark()->nNode.GetIndex(),
340*b1cdbd2cSJim Jagielski nEndNd = PCURCRSR->GetPoint()->nNode.GetIndex();
341*b1cdbd2cSJim Jagielski
342*b1cdbd2cSJim Jagielski if( nSttNd > nEndNd )
343*b1cdbd2cSJim Jagielski {
344*b1cdbd2cSJim Jagielski sal_uLong nTmp = nSttNd; nSttNd = nEndNd; nEndNd = nTmp;
345*b1cdbd2cSJim Jagielski }
346*b1cdbd2cSJim Jagielski
347*b1cdbd2cSJim Jagielski SwCntntNode* pCNd;
348*b1cdbd2cSJim Jagielski for( sal_uLong n = nSttNd; bRet && n <= nEndNd; ++n )
349*b1cdbd2cSJim Jagielski if( 0 != ( pCNd = GetDoc()->GetNodes()[ n ]->GetTxtNode() ))
350*b1cdbd2cSJim Jagielski {
351*b1cdbd2cSJim Jagielski const SvxLRSpaceItem& rLS = (SvxLRSpaceItem&)
352*b1cdbd2cSJim Jagielski pCNd->GetAttr( RES_LR_SPACE );
353*b1cdbd2cSJim Jagielski if( bRight )
354*b1cdbd2cSJim Jagielski {
355*b1cdbd2cSJim Jagielski long nNext = rLS.GetTxtLeft() + nDefDist;
356*b1cdbd2cSJim Jagielski if( bModulus )
357*b1cdbd2cSJim Jagielski nNext = ( nNext / nDefDist ) * nDefDist;
358*b1cdbd2cSJim Jagielski SwFrm* pFrm = pCNd->getLayoutFrm( GetLayout() );
359*b1cdbd2cSJim Jagielski if ( pFrm )
360*b1cdbd2cSJim Jagielski {
361*b1cdbd2cSJim Jagielski const sal_uInt16 nFrmWidth = static_cast<sal_uInt16>( pFrm->IsVertical() ?
362*b1cdbd2cSJim Jagielski pFrm->Frm().Height() :
363*b1cdbd2cSJim Jagielski pFrm->Frm().Width() );
364*b1cdbd2cSJim Jagielski bRet = nFrmWidth > ( nNext + MM50 );
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski else
367*b1cdbd2cSJim Jagielski bRet = sal_False;
368*b1cdbd2cSJim Jagielski }
369*b1cdbd2cSJim Jagielski }
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski if( !bRet )
372*b1cdbd2cSJim Jagielski break;
373*b1cdbd2cSJim Jagielski
374*b1cdbd2cSJim Jagielski FOREACHPAM_END()
375*b1cdbd2cSJim Jagielski return bRet;
376*b1cdbd2cSJim Jagielski }
377*b1cdbd2cSJim Jagielski
MoveLeftMargin(sal_Bool bRight,sal_Bool bModulus)378*b1cdbd2cSJim Jagielski void SwEditShell::MoveLeftMargin( sal_Bool bRight, sal_Bool bModulus )
379*b1cdbd2cSJim Jagielski {
380*b1cdbd2cSJim Jagielski StartAllAction();
381*b1cdbd2cSJim Jagielski StartUndo( UNDO_START );
382*b1cdbd2cSJim Jagielski
383*b1cdbd2cSJim Jagielski SwPaM* pCrsr = GetCrsr();
384*b1cdbd2cSJim Jagielski if( pCrsr->GetNext() != pCrsr ) // Mehrfachselektion ?
385*b1cdbd2cSJim Jagielski {
386*b1cdbd2cSJim Jagielski SwPamRanges aRangeArr( *pCrsr );
387*b1cdbd2cSJim Jagielski SwPaM aPam( *pCrsr->GetPoint() );
388*b1cdbd2cSJim Jagielski for( sal_uInt16 n = 0; n < aRangeArr.Count(); ++n )
389*b1cdbd2cSJim Jagielski GetDoc()->MoveLeftMargin( aRangeArr.SetPam( n, aPam ),
390*b1cdbd2cSJim Jagielski bRight, bModulus );
391*b1cdbd2cSJim Jagielski }
392*b1cdbd2cSJim Jagielski else
393*b1cdbd2cSJim Jagielski GetDoc()->MoveLeftMargin( *pCrsr, bRight, bModulus );
394*b1cdbd2cSJim Jagielski
395*b1cdbd2cSJim Jagielski EndUndo( UNDO_END );
396*b1cdbd2cSJim Jagielski EndAllAction();
397*b1cdbd2cSJim Jagielski }
398*b1cdbd2cSJim Jagielski
399*b1cdbd2cSJim Jagielski
lcl_SetScriptFlags(sal_uInt16 nType)400*b1cdbd2cSJim Jagielski inline sal_uInt16 lcl_SetScriptFlags( sal_uInt16 nType )
401*b1cdbd2cSJim Jagielski {
402*b1cdbd2cSJim Jagielski sal_uInt16 nRet;
403*b1cdbd2cSJim Jagielski switch( nType )
404*b1cdbd2cSJim Jagielski {
405*b1cdbd2cSJim Jagielski case ::com::sun::star::i18n::ScriptType::LATIN: nRet = SCRIPTTYPE_LATIN; break;
406*b1cdbd2cSJim Jagielski case ::com::sun::star::i18n::ScriptType::ASIAN: nRet = SCRIPTTYPE_ASIAN; break;
407*b1cdbd2cSJim Jagielski case ::com::sun::star::i18n::ScriptType::COMPLEX: nRet = SCRIPTTYPE_COMPLEX; break;
408*b1cdbd2cSJim Jagielski default: nRet = 0;
409*b1cdbd2cSJim Jagielski }
410*b1cdbd2cSJim Jagielski return nRet;
411*b1cdbd2cSJim Jagielski }
412*b1cdbd2cSJim Jagielski
lcl_IsNoEndTxtAttrAtPos(const SwTxtNode & rTNd,xub_StrLen nPos,sal_uInt16 & rScrpt,sal_Bool bInSelection,sal_Bool bNum)413*b1cdbd2cSJim Jagielski sal_Bool lcl_IsNoEndTxtAttrAtPos( const SwTxtNode& rTNd, xub_StrLen nPos,
414*b1cdbd2cSJim Jagielski sal_uInt16 &rScrpt, sal_Bool bInSelection, sal_Bool bNum )
415*b1cdbd2cSJim Jagielski {
416*b1cdbd2cSJim Jagielski sal_Bool bRet = sal_False;
417*b1cdbd2cSJim Jagielski const String& rTxt = rTNd.GetTxt();
418*b1cdbd2cSJim Jagielski String sExp;
419*b1cdbd2cSJim Jagielski
420*b1cdbd2cSJim Jagielski // consider numbering
421*b1cdbd2cSJim Jagielski if ( bNum )
422*b1cdbd2cSJim Jagielski {
423*b1cdbd2cSJim Jagielski bRet = sal_False;
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski if ( rTNd.IsInList() )
426*b1cdbd2cSJim Jagielski {
427*b1cdbd2cSJim Jagielski ASSERT( rTNd.GetNumRule(),
428*b1cdbd2cSJim Jagielski "<lcl_IsNoEndTxtAttrAtPos(..)> - no list style found at text node. Serious defect -> please inform OD." );
429*b1cdbd2cSJim Jagielski const SwNumRule* pNumRule = rTNd.GetNumRule();
430*b1cdbd2cSJim Jagielski //Modified for i119959,2012.6.12
431*b1cdbd2cSJim Jagielski //Under this scenario,this pointer is null,but on win,it doesn't crash immediately
432*b1cdbd2cSJim Jagielski //it exits with exception,and associated memory will have problem which leads to crash problem in
433*b1cdbd2cSJim Jagielski //other place in dev env...
434*b1cdbd2cSJim Jagielski if ( pNumRule )
435*b1cdbd2cSJim Jagielski {
436*b1cdbd2cSJim Jagielski //End
437*b1cdbd2cSJim Jagielski const SwNumFmt &rNumFmt = pNumRule->Get( static_cast<sal_uInt16>(rTNd.GetActualListLevel()) );
438*b1cdbd2cSJim Jagielski if( SVX_NUM_BITMAP != rNumFmt.GetNumberingType() )
439*b1cdbd2cSJim Jagielski {
440*b1cdbd2cSJim Jagielski if ( SVX_NUM_CHAR_SPECIAL == rNumFmt.GetNumberingType() )
441*b1cdbd2cSJim Jagielski sExp = rNumFmt.GetBulletChar();
442*b1cdbd2cSJim Jagielski else
443*b1cdbd2cSJim Jagielski sExp = rTNd.GetNumString();
444*b1cdbd2cSJim Jagielski }
445*b1cdbd2cSJim Jagielski //Modified for i119959,2012.6.12
446*b1cdbd2cSJim Jagielski //Under this scenario,this pointer is null,but on win,it doesn't crash immediately
447*b1cdbd2cSJim Jagielski //it exits with exception,and associated memory will have problem which leads to crash problem in
448*b1cdbd2cSJim Jagielski //other place in dev env...
449*b1cdbd2cSJim Jagielski }
450*b1cdbd2cSJim Jagielski //End
451*b1cdbd2cSJim Jagielski }
452*b1cdbd2cSJim Jagielski }
453*b1cdbd2cSJim Jagielski
454*b1cdbd2cSJim Jagielski // and fields
455*b1cdbd2cSJim Jagielski if ( CH_TXTATR_BREAKWORD == rTxt.GetChar( nPos ) )
456*b1cdbd2cSJim Jagielski {
457*b1cdbd2cSJim Jagielski const SwTxtAttr* const pAttr = rTNd.GetTxtAttrForCharAt( nPos );
458*b1cdbd2cSJim Jagielski if (pAttr)
459*b1cdbd2cSJim Jagielski {
460*b1cdbd2cSJim Jagielski bRet = sal_True; // all other than fields can be
461*b1cdbd2cSJim Jagielski // defined as weak-script ?
462*b1cdbd2cSJim Jagielski if ( RES_TXTATR_FIELD == pAttr->Which() )
463*b1cdbd2cSJim Jagielski {
464*b1cdbd2cSJim Jagielski const SwField* const pFld = pAttr->GetFmtFld().GetField();
465*b1cdbd2cSJim Jagielski if (pFld)
466*b1cdbd2cSJim Jagielski {
467*b1cdbd2cSJim Jagielski sExp += pFld->ExpandField(true);
468*b1cdbd2cSJim Jagielski }
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski }
471*b1cdbd2cSJim Jagielski }
472*b1cdbd2cSJim Jagielski
473*b1cdbd2cSJim Jagielski xub_StrLen nEnd = sExp.Len();
474*b1cdbd2cSJim Jagielski if ( nEnd )
475*b1cdbd2cSJim Jagielski {
476*b1cdbd2cSJim Jagielski xub_StrLen n;
477*b1cdbd2cSJim Jagielski if( bInSelection )
478*b1cdbd2cSJim Jagielski {
479*b1cdbd2cSJim Jagielski sal_uInt16 nScript;
480*b1cdbd2cSJim Jagielski for( n = 0; n < nEnd; n = (xub_StrLen)
481*b1cdbd2cSJim Jagielski pBreakIt->GetBreakIter()->endOfScript( sExp, n, nScript ))
482*b1cdbd2cSJim Jagielski {
483*b1cdbd2cSJim Jagielski nScript = pBreakIt->GetBreakIter()->getScriptType( sExp, n );
484*b1cdbd2cSJim Jagielski rScrpt |= lcl_SetScriptFlags( nScript );
485*b1cdbd2cSJim Jagielski }
486*b1cdbd2cSJim Jagielski }
487*b1cdbd2cSJim Jagielski else
488*b1cdbd2cSJim Jagielski rScrpt |= lcl_SetScriptFlags( pBreakIt->GetBreakIter()->
489*b1cdbd2cSJim Jagielski getScriptType( sExp, nEnd-1 ));
490*b1cdbd2cSJim Jagielski }
491*b1cdbd2cSJim Jagielski
492*b1cdbd2cSJim Jagielski return bRet;
493*b1cdbd2cSJim Jagielski }
494*b1cdbd2cSJim Jagielski
495*b1cdbd2cSJim Jagielski
496*b1cdbd2cSJim Jagielski // returns the scripttpye of the selection
GetScriptType() const497*b1cdbd2cSJim Jagielski sal_uInt16 SwEditShell::GetScriptType() const
498*b1cdbd2cSJim Jagielski {
499*b1cdbd2cSJim Jagielski sal_uInt16 nRet = 0;
500*b1cdbd2cSJim Jagielski //if( pBreakIt->GetBreakIter().is() )
501*b1cdbd2cSJim Jagielski {
502*b1cdbd2cSJim Jagielski FOREACHPAM_START(this)
503*b1cdbd2cSJim Jagielski
504*b1cdbd2cSJim Jagielski const SwPosition *pStt = PCURCRSR->Start(),
505*b1cdbd2cSJim Jagielski *pEnd = pStt == PCURCRSR->GetMark()
506*b1cdbd2cSJim Jagielski ? PCURCRSR->GetPoint()
507*b1cdbd2cSJim Jagielski : PCURCRSR->GetMark();
508*b1cdbd2cSJim Jagielski if( pStt == pEnd || *pStt == *pEnd )
509*b1cdbd2cSJim Jagielski {
510*b1cdbd2cSJim Jagielski const SwTxtNode* pTNd = pStt->nNode.GetNode().GetTxtNode();
511*b1cdbd2cSJim Jagielski if( pTNd )
512*b1cdbd2cSJim Jagielski {
513*b1cdbd2cSJim Jagielski // try to get SwScriptInfo
514*b1cdbd2cSJim Jagielski const SwScriptInfo* pScriptInfo = SwScriptInfo::GetScriptInfo( *pTNd );
515*b1cdbd2cSJim Jagielski
516*b1cdbd2cSJim Jagielski xub_StrLen nPos = pStt->nContent.GetIndex();
517*b1cdbd2cSJim Jagielski //Task 90448: we need the scripttype of the previous
518*b1cdbd2cSJim Jagielski // position, if no selection exist!
519*b1cdbd2cSJim Jagielski if( nPos )
520*b1cdbd2cSJim Jagielski {
521*b1cdbd2cSJim Jagielski SwIndex aIdx( pStt->nContent );
522*b1cdbd2cSJim Jagielski if( pTNd->GoPrevious( &aIdx, CRSR_SKIP_CHARS ) )
523*b1cdbd2cSJim Jagielski nPos = aIdx.GetIndex();
524*b1cdbd2cSJim Jagielski }
525*b1cdbd2cSJim Jagielski
526*b1cdbd2cSJim Jagielski sal_uInt16 nScript;
527*b1cdbd2cSJim Jagielski
528*b1cdbd2cSJim Jagielski if ( pTNd->GetTxt().Len() )
529*b1cdbd2cSJim Jagielski {
530*b1cdbd2cSJim Jagielski nScript = pScriptInfo ?
531*b1cdbd2cSJim Jagielski pScriptInfo->ScriptType( nPos ) :
532*b1cdbd2cSJim Jagielski pBreakIt->GetBreakIter()->getScriptType( pTNd->GetTxt(), nPos );
533*b1cdbd2cSJim Jagielski }
534*b1cdbd2cSJim Jagielski else
535*b1cdbd2cSJim Jagielski nScript = GetI18NScriptTypeOfLanguage( (sal_uInt16)GetAppLanguage() );
536*b1cdbd2cSJim Jagielski
537*b1cdbd2cSJim Jagielski if( !lcl_IsNoEndTxtAttrAtPos( *pTNd, nPos, nRet, sal_False, sal_False ))
538*b1cdbd2cSJim Jagielski nRet |= lcl_SetScriptFlags( nScript );
539*b1cdbd2cSJim Jagielski }
540*b1cdbd2cSJim Jagielski }
541*b1cdbd2cSJim Jagielski else if ( pBreakIt->GetBreakIter().is() )
542*b1cdbd2cSJim Jagielski {
543*b1cdbd2cSJim Jagielski sal_uLong nEndIdx = pEnd->nNode.GetIndex();
544*b1cdbd2cSJim Jagielski SwNodeIndex aIdx( pStt->nNode );
545*b1cdbd2cSJim Jagielski for( ; aIdx.GetIndex() <= nEndIdx; aIdx++ )
546*b1cdbd2cSJim Jagielski if( aIdx.GetNode().IsTxtNode() )
547*b1cdbd2cSJim Jagielski {
548*b1cdbd2cSJim Jagielski const SwTxtNode* pTNd = aIdx.GetNode().GetTxtNode();
549*b1cdbd2cSJim Jagielski const String& rTxt = pTNd->GetTxt();
550*b1cdbd2cSJim Jagielski
551*b1cdbd2cSJim Jagielski // try to get SwScriptInfo
552*b1cdbd2cSJim Jagielski const SwScriptInfo* pScriptInfo = SwScriptInfo::GetScriptInfo( *pTNd );
553*b1cdbd2cSJim Jagielski
554*b1cdbd2cSJim Jagielski xub_StrLen nChg = aIdx == pStt->nNode
555*b1cdbd2cSJim Jagielski ? pStt->nContent.GetIndex()
556*b1cdbd2cSJim Jagielski : 0,
557*b1cdbd2cSJim Jagielski nEndPos = aIdx == nEndIdx
558*b1cdbd2cSJim Jagielski ? pEnd->nContent.GetIndex()
559*b1cdbd2cSJim Jagielski : rTxt.Len();
560*b1cdbd2cSJim Jagielski
561*b1cdbd2cSJim Jagielski ASSERT( nEndPos <= rTxt.Len(), "Index outside the range - endless loop!" );
562*b1cdbd2cSJim Jagielski if( nEndPos > rTxt.Len() )
563*b1cdbd2cSJim Jagielski nEndPos = rTxt.Len();
564*b1cdbd2cSJim Jagielski
565*b1cdbd2cSJim Jagielski sal_uInt16 nScript;
566*b1cdbd2cSJim Jagielski while( nChg < nEndPos )
567*b1cdbd2cSJim Jagielski {
568*b1cdbd2cSJim Jagielski nScript = pScriptInfo ?
569*b1cdbd2cSJim Jagielski pScriptInfo->ScriptType( nChg ) :
570*b1cdbd2cSJim Jagielski pBreakIt->GetBreakIter()->getScriptType(
571*b1cdbd2cSJim Jagielski rTxt, nChg );
572*b1cdbd2cSJim Jagielski
573*b1cdbd2cSJim Jagielski if( !lcl_IsNoEndTxtAttrAtPos( *pTNd, nChg, nRet, sal_True,
574*b1cdbd2cSJim Jagielski 0 == nChg && rTxt.Len() == nEndPos ) )
575*b1cdbd2cSJim Jagielski nRet |= lcl_SetScriptFlags( nScript );
576*b1cdbd2cSJim Jagielski
577*b1cdbd2cSJim Jagielski if( (SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN |
578*b1cdbd2cSJim Jagielski SCRIPTTYPE_COMPLEX) == nRet )
579*b1cdbd2cSJim Jagielski break;
580*b1cdbd2cSJim Jagielski
581*b1cdbd2cSJim Jagielski xub_StrLen nFldPos = nChg+1;
582*b1cdbd2cSJim Jagielski
583*b1cdbd2cSJim Jagielski nChg = pScriptInfo ?
584*b1cdbd2cSJim Jagielski pScriptInfo->NextScriptChg( nChg ) :
585*b1cdbd2cSJim Jagielski (xub_StrLen)pBreakIt->GetBreakIter()->endOfScript(
586*b1cdbd2cSJim Jagielski rTxt, nChg, nScript );
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski nFldPos = rTxt.Search(
589*b1cdbd2cSJim Jagielski CH_TXTATR_BREAKWORD, nFldPos );
590*b1cdbd2cSJim Jagielski if( nFldPos < nChg )
591*b1cdbd2cSJim Jagielski nChg = nFldPos;
592*b1cdbd2cSJim Jagielski }
593*b1cdbd2cSJim Jagielski if( (SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN |
594*b1cdbd2cSJim Jagielski SCRIPTTYPE_COMPLEX) == nRet )
595*b1cdbd2cSJim Jagielski break;
596*b1cdbd2cSJim Jagielski }
597*b1cdbd2cSJim Jagielski }
598*b1cdbd2cSJim Jagielski if( (SCRIPTTYPE_LATIN | SCRIPTTYPE_ASIAN |
599*b1cdbd2cSJim Jagielski SCRIPTTYPE_COMPLEX) == nRet )
600*b1cdbd2cSJim Jagielski break;
601*b1cdbd2cSJim Jagielski
602*b1cdbd2cSJim Jagielski FOREACHPAM_END()
603*b1cdbd2cSJim Jagielski }
604*b1cdbd2cSJim Jagielski if( !nRet )
605*b1cdbd2cSJim Jagielski nRet = SvtLanguageOptions::GetScriptTypeOfLanguage( LANGUAGE_SYSTEM );
606*b1cdbd2cSJim Jagielski return nRet;
607*b1cdbd2cSJim Jagielski }
608*b1cdbd2cSJim Jagielski
609*b1cdbd2cSJim Jagielski
GetCurLang() const610*b1cdbd2cSJim Jagielski sal_uInt16 SwEditShell::GetCurLang() const
611*b1cdbd2cSJim Jagielski {
612*b1cdbd2cSJim Jagielski const SwPaM* pCrsr = GetCrsr();
613*b1cdbd2cSJim Jagielski const SwPosition& rPos = *pCrsr->GetPoint();
614*b1cdbd2cSJim Jagielski const SwTxtNode* pTNd = rPos.nNode.GetNode().GetTxtNode();
615*b1cdbd2cSJim Jagielski sal_uInt16 nLang;
616*b1cdbd2cSJim Jagielski if( pTNd )
617*b1cdbd2cSJim Jagielski {
618*b1cdbd2cSJim Jagielski //JP 24.9.2001: if exist no selection, then get the language before
619*b1cdbd2cSJim Jagielski // the current character!
620*b1cdbd2cSJim Jagielski xub_StrLen nPos = rPos.nContent.GetIndex();
621*b1cdbd2cSJim Jagielski if( nPos && !pCrsr->HasMark() )
622*b1cdbd2cSJim Jagielski --nPos;
623*b1cdbd2cSJim Jagielski nLang = pTNd->GetLang( nPos );
624*b1cdbd2cSJim Jagielski }
625*b1cdbd2cSJim Jagielski else
626*b1cdbd2cSJim Jagielski nLang = LANGUAGE_DONTKNOW;
627*b1cdbd2cSJim Jagielski return nLang;
628*b1cdbd2cSJim Jagielski }
629*b1cdbd2cSJim Jagielski
GetScalingOfSelectedText() const630*b1cdbd2cSJim Jagielski sal_uInt16 SwEditShell::GetScalingOfSelectedText() const
631*b1cdbd2cSJim Jagielski {
632*b1cdbd2cSJim Jagielski const SwPaM* pCrsr = GetCrsr();
633*b1cdbd2cSJim Jagielski const SwPosition* pStt = pCrsr->Start();
634*b1cdbd2cSJim Jagielski const SwTxtNode* pTNd = pStt->nNode.GetNode().GetTxtNode();
635*b1cdbd2cSJim Jagielski ASSERT( pTNd, "no textnode available" );
636*b1cdbd2cSJim Jagielski
637*b1cdbd2cSJim Jagielski sal_uInt16 nScaleWidth;
638*b1cdbd2cSJim Jagielski if( pTNd )
639*b1cdbd2cSJim Jagielski {
640*b1cdbd2cSJim Jagielski xub_StrLen nStt = pStt->nContent.GetIndex(), nEnd;
641*b1cdbd2cSJim Jagielski const SwPosition* pEnd = pStt == pCrsr->GetPoint()
642*b1cdbd2cSJim Jagielski ? pCrsr->GetMark()
643*b1cdbd2cSJim Jagielski : pCrsr->GetPoint();
644*b1cdbd2cSJim Jagielski if( pStt->nNode == pEnd->nNode )
645*b1cdbd2cSJim Jagielski nEnd = pEnd->nContent.GetIndex();
646*b1cdbd2cSJim Jagielski else
647*b1cdbd2cSJim Jagielski nEnd = pTNd->GetTxt().Len();
648*b1cdbd2cSJim Jagielski nScaleWidth = pTNd->GetScalingOfSelectedText( nStt, nEnd );
649*b1cdbd2cSJim Jagielski }
650*b1cdbd2cSJim Jagielski else
651*b1cdbd2cSJim Jagielski nScaleWidth = 100; // default are no scaling -> 100%
652*b1cdbd2cSJim Jagielski return nScaleWidth;
653*b1cdbd2cSJim Jagielski }
654