xref: /trunk/main/sw/source/core/fields/expfld.cxx (revision 721f84f292c13ee103c3eff117eb0ad9b2066153)
1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
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
10cdf0e10cSrcweir  *
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.
19cdf0e10cSrcweir  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
23cdf0e10cSrcweir #include "precompiled_sw.hxx"
24cdf0e10cSrcweir 
25cdf0e10cSrcweir #include <hintids.hxx>
26cdf0e10cSrcweir #include <unotools/collatorwrapper.hxx>
27cdf0e10cSrcweir #include <unotools/charclass.hxx>
28cdf0e10cSrcweir #include <editeng/unolingu.hxx>
29cdf0e10cSrcweir #include <svx/pageitem.hxx>
30cdf0e10cSrcweir #include <editeng/langitem.hxx>
31cdf0e10cSrcweir #include <editeng/fontitem.hxx>
32cdf0e10cSrcweir #include <com/sun/star/text/SetVariableType.hpp>
33cdf0e10cSrcweir #include <unofield.hxx>
34cdf0e10cSrcweir #include <frmfmt.hxx>
35cdf0e10cSrcweir #include <fmtfld.hxx>
36cdf0e10cSrcweir #include <txtfld.hxx>
37cdf0e10cSrcweir #include <fmtanchr.hxx>
38cdf0e10cSrcweir #include <txtftn.hxx>
39cdf0e10cSrcweir #include <doc.hxx>
40cdf0e10cSrcweir #include <layfrm.hxx>
41cdf0e10cSrcweir #include <pagefrm.hxx>
42cdf0e10cSrcweir #include <cntfrm.hxx>
43cdf0e10cSrcweir #include <rootfrm.hxx>
44cdf0e10cSrcweir #include <tabfrm.hxx>
45cdf0e10cSrcweir #include <flyfrm.hxx>
46cdf0e10cSrcweir #include <ftnfrm.hxx>
47cdf0e10cSrcweir #include <rowfrm.hxx>
48cdf0e10cSrcweir #include <expfld.hxx>
49cdf0e10cSrcweir #include <usrfld.hxx>
50cdf0e10cSrcweir #include <ndtxt.hxx>
51cdf0e10cSrcweir #include <calc.hxx>
52cdf0e10cSrcweir #include <pam.hxx>
53cdf0e10cSrcweir #include <docfld.hxx>
54cdf0e10cSrcweir #include <swcache.hxx>
55cdf0e10cSrcweir #include <swtable.hxx>
56cdf0e10cSrcweir #include <breakit.hxx>
57cdf0e10cSrcweir #include <SwStyleNameMapper.hxx>
58cdf0e10cSrcweir #include <unofldmid.h>
59cdf0e10cSrcweir #include <numrule.hxx>
60cdf0e10cSrcweir #include <switerator.hxx>
61cdf0e10cSrcweir 
62cdf0e10cSrcweir using namespace ::com::sun::star;
63cdf0e10cSrcweir using namespace ::com::sun::star::text;
64cdf0e10cSrcweir using ::rtl::OUString;
65cdf0e10cSrcweir 
SV_IMPL_PTRARR(_SwSeqFldList,_SeqFldLstElem *)66cdf0e10cSrcweir SV_IMPL_PTRARR( _SwSeqFldList, _SeqFldLstElem* )
67cdf0e10cSrcweir 
68cdf0e10cSrcweir //-----------------------------------------------------------------------------
69cdf0e10cSrcweir sal_Int16 lcl_SubTypeToAPI(sal_uInt16 nSubType)
70cdf0e10cSrcweir {
71cdf0e10cSrcweir         sal_Int16 nRet = 0;
72cdf0e10cSrcweir         switch(nSubType)
73cdf0e10cSrcweir         {
74cdf0e10cSrcweir             case nsSwGetSetExpType::GSE_EXPR:
75cdf0e10cSrcweir                 nRet = SetVariableType::VAR;      // 0
76cdf0e10cSrcweir                 break;
77cdf0e10cSrcweir             case nsSwGetSetExpType::GSE_SEQ:
78cdf0e10cSrcweir                 nRet = SetVariableType::SEQUENCE; // 1
79cdf0e10cSrcweir                 break;
80cdf0e10cSrcweir             case nsSwGetSetExpType::GSE_FORMULA:
81cdf0e10cSrcweir                 nRet = SetVariableType::FORMULA;  // 2
82cdf0e10cSrcweir                 break;
83cdf0e10cSrcweir             case nsSwGetSetExpType::GSE_STRING:
84cdf0e10cSrcweir                 nRet = SetVariableType::STRING;   // 3
85cdf0e10cSrcweir                 break;
86cdf0e10cSrcweir         }
87cdf0e10cSrcweir         return nRet;
88cdf0e10cSrcweir }
89cdf0e10cSrcweir //-----------------------------------------------------------------------------
lcl_APIToSubType(const uno::Any & rAny)90cdf0e10cSrcweir sal_Int32 lcl_APIToSubType(const uno::Any& rAny)
91cdf0e10cSrcweir {
92cdf0e10cSrcweir         sal_Int16 nVal = 0;
93cdf0e10cSrcweir         rAny >>= nVal;
94cdf0e10cSrcweir         sal_Int32 nSet = 0;
95cdf0e10cSrcweir         switch(nVal)
96cdf0e10cSrcweir         {
97cdf0e10cSrcweir             case SetVariableType::VAR:      nSet = nsSwGetSetExpType::GSE_EXPR;  break;
98cdf0e10cSrcweir             case SetVariableType::SEQUENCE: nSet = nsSwGetSetExpType::GSE_SEQ;  break;
99cdf0e10cSrcweir             case SetVariableType::FORMULA:  nSet = nsSwGetSetExpType::GSE_FORMULA; break;
100cdf0e10cSrcweir             case SetVariableType::STRING:   nSet = nsSwGetSetExpType::GSE_STRING;   break;
101cdf0e10cSrcweir             default:
102cdf0e10cSrcweir                 DBG_ERROR("wrong value");
103cdf0e10cSrcweir                 nSet = -1;
104cdf0e10cSrcweir         }
105cdf0e10cSrcweir         return nSet;
106cdf0e10cSrcweir }
107cdf0e10cSrcweir 
108cdf0e10cSrcweir //-----------------------------------------------------------------------------
109cdf0e10cSrcweir 
ReplacePoint(String & rTmpName,sal_Bool bWithCommandType)110cdf0e10cSrcweir void ReplacePoint( String& rTmpName, sal_Bool bWithCommandType )
111cdf0e10cSrcweir {
112cdf0e10cSrcweir     // replace first and last (if bWithCommandType: last two) dot Ersten und letzten Punkt ersetzen, da in Tabellennamen Punkte erlaubt sind
113cdf0e10cSrcweir     // since table names may contain dots
114cdf0e10cSrcweir 
115cdf0e10cSrcweir     xub_StrLen nLen = rTmpName.Len();
116cdf0e10cSrcweir     sal_Unicode *pStr = rTmpName.GetBufferAccess(), *pBackStr = pStr + nLen;
117cdf0e10cSrcweir 
118cdf0e10cSrcweir     long nBackCount = bWithCommandType ? 2 : 1;
119cdf0e10cSrcweir     xub_StrLen i;
120cdf0e10cSrcweir 
121cdf0e10cSrcweir     for( i = nLen; i; --i, pBackStr-- )
122cdf0e10cSrcweir         if( '.' == *pBackStr )
123cdf0e10cSrcweir         {
124cdf0e10cSrcweir             *pBackStr = DB_DELIM;
125cdf0e10cSrcweir             if(!--nBackCount)
126cdf0e10cSrcweir                 break;
127cdf0e10cSrcweir         }
128cdf0e10cSrcweir     for( i = 0; i < nLen; ++i, ++pStr )
129cdf0e10cSrcweir         if( '.' == *pStr )
130cdf0e10cSrcweir         {
131cdf0e10cSrcweir             *pStr = DB_DELIM;
132cdf0e10cSrcweir             break;
133cdf0e10cSrcweir         }
134cdf0e10cSrcweir }
135cdf0e10cSrcweir 
GetFirstTxtNode(const SwDoc & rDoc,SwPosition & rPos,const SwCntntFrm * pCFrm,Point & rPt)136cdf0e10cSrcweir SwTxtNode* GetFirstTxtNode( const SwDoc& rDoc, SwPosition& rPos,
137cdf0e10cSrcweir                             const SwCntntFrm *pCFrm, Point &rPt )
138cdf0e10cSrcweir {
139cdf0e10cSrcweir     SwTxtNode* pTxtNode = 0;
140cdf0e10cSrcweir     if ( !pCFrm )
141cdf0e10cSrcweir     {
142cdf0e10cSrcweir         const SwNodes& rNodes = rDoc.GetNodes();
143cdf0e10cSrcweir         rPos.nNode = *rNodes.GetEndOfContent().StartOfSectionNode();
144cdf0e10cSrcweir         SwCntntNode* pCNd;
145cdf0e10cSrcweir         while( 0 != (pCNd = rNodes.GoNext( &rPos.nNode ) ) &&
146cdf0e10cSrcweir                 0 == ( pTxtNode = pCNd->GetTxtNode() ) )
147cdf0e10cSrcweir                         ;
148cdf0e10cSrcweir         ASSERT( pTxtNode, "wo ist der 1.TextNode" );
149cdf0e10cSrcweir         rPos.nContent.Assign( pTxtNode, 0 );
150cdf0e10cSrcweir     }
151cdf0e10cSrcweir     else if ( !pCFrm->IsValid() )
152cdf0e10cSrcweir     {
153cdf0e10cSrcweir         pTxtNode = (SwTxtNode*)pCFrm->GetNode();
154cdf0e10cSrcweir         rPos.nNode = *pTxtNode;
155cdf0e10cSrcweir         rPos.nContent.Assign( pTxtNode, 0 );
156cdf0e10cSrcweir     }
157cdf0e10cSrcweir     else
158cdf0e10cSrcweir     {
159cdf0e10cSrcweir         pCFrm->GetCrsrOfst( &rPos, rPt );
160cdf0e10cSrcweir         pTxtNode = rPos.nNode.GetNode().GetTxtNode();
161cdf0e10cSrcweir     }
162cdf0e10cSrcweir     return pTxtNode;
163cdf0e10cSrcweir }
164cdf0e10cSrcweir 
GetBodyTxtNode(const SwDoc & rDoc,SwPosition & rPos,const SwFrm & rFrm)165cdf0e10cSrcweir const SwTxtNode* GetBodyTxtNode( const SwDoc& rDoc, SwPosition& rPos,
166cdf0e10cSrcweir                                 const SwFrm& rFrm )
167cdf0e10cSrcweir {
168cdf0e10cSrcweir     const SwLayoutFrm* pLayout = (SwLayoutFrm*)rFrm.GetUpper();
169cdf0e10cSrcweir     const SwTxtNode* pTxtNode = 0;
170cdf0e10cSrcweir 
171cdf0e10cSrcweir     while( pLayout )
172cdf0e10cSrcweir     {
173cdf0e10cSrcweir         if( pLayout->IsFlyFrm() )
174cdf0e10cSrcweir         {
175cdf0e10cSrcweir             // hole das FlyFormat
176cdf0e10cSrcweir             SwFrmFmt* pFlyFmt = ((SwFlyFrm*)pLayout)->GetFmt();
177cdf0e10cSrcweir             ASSERT( pFlyFmt, "kein FlyFormat gefunden, wo steht das Feld" );
178cdf0e10cSrcweir 
179cdf0e10cSrcweir             const SwFmtAnchor &rAnchor = pFlyFmt->GetAnchor();
180cdf0e10cSrcweir 
181cdf0e10cSrcweir             if( FLY_AT_FLY == rAnchor.GetAnchorId() )
182cdf0e10cSrcweir             {
183cdf0e10cSrcweir                 // und der Fly muss irgendwo angehaengt sein, also
184cdf0e10cSrcweir                 // den befragen
185cdf0e10cSrcweir                 pLayout = (SwLayoutFrm*)((SwFlyFrm*)pLayout)->GetAnchorFrm();
186cdf0e10cSrcweir                 continue;
187cdf0e10cSrcweir             }
188cdf0e10cSrcweir             else if ((FLY_AT_PARA == rAnchor.GetAnchorId()) ||
189cdf0e10cSrcweir                      (FLY_AT_CHAR == rAnchor.GetAnchorId()) ||
190cdf0e10cSrcweir                      (FLY_AS_CHAR == rAnchor.GetAnchorId()))
191cdf0e10cSrcweir             {
192cdf0e10cSrcweir                 ASSERT( rAnchor.GetCntntAnchor(), "keine gueltige Position" );
193cdf0e10cSrcweir                 rPos = *rAnchor.GetCntntAnchor();
194cdf0e10cSrcweir                 pTxtNode = rPos.nNode.GetNode().GetTxtNode();
195cdf0e10cSrcweir                 if ( FLY_AT_PARA == rAnchor.GetAnchorId() )
196cdf0e10cSrcweir                 {
197cdf0e10cSrcweir                     const_cast<SwTxtNode*>(pTxtNode)->MakeStartIndex(
198cdf0e10cSrcweir                             &rPos.nContent );
199cdf0e10cSrcweir // oder doch besser das Ende vom (Anker-)TextNode nehmen ??
200cdf0e10cSrcweir //                  ((SwTxtNode*)pTxtNode)->MakeEndIndex( &rPos.nContent );
201cdf0e10cSrcweir                 }
202cdf0e10cSrcweir 
203cdf0e10cSrcweir                 // noch nicht abbrechen, kann ja auch noch im
204cdf0e10cSrcweir                 // Header/Footer/Footnote/Fly stehen !!
205cdf0e10cSrcweir                 pLayout = ((SwFlyFrm*)pLayout)->GetAnchorFrm()
206cdf0e10cSrcweir                             ? ((SwFlyFrm*)pLayout)->GetAnchorFrm()->GetUpper() : 0;
207cdf0e10cSrcweir                 continue;
208cdf0e10cSrcweir             }
209cdf0e10cSrcweir             else
210cdf0e10cSrcweir             {
211cdf0e10cSrcweir                 pLayout->FindPageFrm()->GetCntntPosition(
212cdf0e10cSrcweir                                                 pLayout->Frm().Pos(), rPos );
213cdf0e10cSrcweir                 pTxtNode = rPos.nNode.GetNode().GetTxtNode();
214cdf0e10cSrcweir             }
215cdf0e10cSrcweir         }
216cdf0e10cSrcweir         else if( pLayout->IsFtnFrm() )
217cdf0e10cSrcweir         {
218cdf0e10cSrcweir             // hole den Node vom Anker
219cdf0e10cSrcweir             const SwTxtFtn* pFtn = ((SwFtnFrm*)pLayout)->GetAttr();
220cdf0e10cSrcweir             pTxtNode = &pFtn->GetTxtNode();
221cdf0e10cSrcweir             rPos.nNode = *pTxtNode;
222cdf0e10cSrcweir             rPos.nContent = *pFtn->GetStart();
223cdf0e10cSrcweir         }
224cdf0e10cSrcweir         else if( pLayout->IsHeaderFrm() || pLayout->IsFooterFrm() )
225cdf0e10cSrcweir         {
226cdf0e10cSrcweir             const SwCntntFrm* pCntFrm;
227cdf0e10cSrcweir             const SwPageFrm* pPgFrm = pLayout->FindPageFrm();
228cdf0e10cSrcweir             if( pLayout->IsHeaderFrm() )
229cdf0e10cSrcweir             {
230cdf0e10cSrcweir                 const SwTabFrm *pTab;
231cdf0e10cSrcweir                 if( 0 != ( pCntFrm = pPgFrm->FindFirstBodyCntnt()) &&
232cdf0e10cSrcweir                     0 != (pTab = pCntFrm->FindTabFrm()) && pTab->IsFollow() &&
233cdf0e10cSrcweir                     pTab->GetTable()->GetRowsToRepeat() > 0 &&
234cdf0e10cSrcweir                     pTab->IsInHeadline( *pCntFrm ) )
235cdf0e10cSrcweir                 {
236cdf0e10cSrcweir                     // take the next line
237cdf0e10cSrcweir                     const SwLayoutFrm* pRow = pTab->GetFirstNonHeadlineRow();
238cdf0e10cSrcweir                     pCntFrm = pRow->ContainsCntnt();
239cdf0e10cSrcweir                 }
240cdf0e10cSrcweir             }
241cdf0e10cSrcweir             else
242cdf0e10cSrcweir                 pCntFrm = pPgFrm->FindLastBodyCntnt();
243cdf0e10cSrcweir 
244cdf0e10cSrcweir             if( pCntFrm )
245cdf0e10cSrcweir             {
246cdf0e10cSrcweir                 pTxtNode = pCntFrm->GetNode()->GetTxtNode();
247cdf0e10cSrcweir                 rPos.nNode = *pTxtNode;
248cdf0e10cSrcweir                 ((SwTxtNode*)pTxtNode)->MakeEndIndex( &rPos.nContent );
249cdf0e10cSrcweir             }
250cdf0e10cSrcweir             else
251cdf0e10cSrcweir             {
252cdf0e10cSrcweir                 Point aPt( pLayout->Frm().Pos() );
253cdf0e10cSrcweir                 aPt.Y()++;      // aus dem Header raus
254cdf0e10cSrcweir                 pCntFrm = pPgFrm->GetCntntPos( aPt, sal_False, sal_True, sal_False );
255cdf0e10cSrcweir                 pTxtNode = GetFirstTxtNode( rDoc, rPos, pCntFrm, aPt );
256cdf0e10cSrcweir             }
257cdf0e10cSrcweir         }
258cdf0e10cSrcweir         else
259cdf0e10cSrcweir         {
260cdf0e10cSrcweir             pLayout = pLayout->GetUpper();
261cdf0e10cSrcweir             continue;
262cdf0e10cSrcweir         }
263cdf0e10cSrcweir         break;      // gefunden und beende die Schleife
264cdf0e10cSrcweir     }
265cdf0e10cSrcweir     return pTxtNode;
266cdf0e10cSrcweir }
267cdf0e10cSrcweir 
268cdf0e10cSrcweir /*--------------------------------------------------------------------
269cdf0e10cSrcweir     Beschreibung: SwSetExpFieldType by JP
270cdf0e10cSrcweir  --------------------------------------------------------------------*/
271cdf0e10cSrcweir 
SwGetExpFieldType(SwDoc * pDc)272cdf0e10cSrcweir SwGetExpFieldType::SwGetExpFieldType(SwDoc* pDc)
273cdf0e10cSrcweir     : SwValueFieldType( pDc, RES_GETEXPFLD )
274cdf0e10cSrcweir {
275cdf0e10cSrcweir }
276cdf0e10cSrcweir 
Copy() const277cdf0e10cSrcweir SwFieldType* SwGetExpFieldType::Copy() const
278cdf0e10cSrcweir {
279cdf0e10cSrcweir     return new SwGetExpFieldType(GetDoc());
280cdf0e10cSrcweir }
281cdf0e10cSrcweir 
Modify(const SfxPoolItem *,const SfxPoolItem * pNew)282cdf0e10cSrcweir void SwGetExpFieldType::Modify( const SfxPoolItem*, const SfxPoolItem* pNew )
283cdf0e10cSrcweir {
284cdf0e10cSrcweir     if( pNew && RES_DOCPOS_UPDATE == pNew->Which() )
285cdf0e10cSrcweir         NotifyClients( 0, pNew );
286cdf0e10cSrcweir     // sonst nichts weiter expandieren
287cdf0e10cSrcweir }
288cdf0e10cSrcweir 
289cdf0e10cSrcweir /*--------------------------------------------------------------------
290cdf0e10cSrcweir     Beschreibung: SwGetExpField by JP
291cdf0e10cSrcweir  --------------------------------------------------------------------*/
292cdf0e10cSrcweir 
SwGetExpField(SwGetExpFieldType * pTyp,const String & rFormel,sal_uInt16 nSub,sal_uLong nFmt)293cdf0e10cSrcweir SwGetExpField::SwGetExpField(SwGetExpFieldType* pTyp, const String& rFormel,
294cdf0e10cSrcweir                             sal_uInt16 nSub, sal_uLong nFmt)
295cdf0e10cSrcweir     : SwFormulaField( pTyp, nFmt, 0.0 ),
296cdf0e10cSrcweir     bIsInBodyTxt( sal_True ),
297cdf0e10cSrcweir     nSubType(nSub),
298cdf0e10cSrcweir     bLateInitialization( false )
299cdf0e10cSrcweir {
300cdf0e10cSrcweir     SetFormula( rFormel );
301cdf0e10cSrcweir }
302cdf0e10cSrcweir 
Expand() const303cdf0e10cSrcweir String SwGetExpField::Expand() const
304cdf0e10cSrcweir {
305cdf0e10cSrcweir     if(nSubType & nsSwExtendedSubType::SUB_CMD)
306cdf0e10cSrcweir         return GetFormula();
307cdf0e10cSrcweir     else
308cdf0e10cSrcweir         return sExpand;
309cdf0e10cSrcweir }
310cdf0e10cSrcweir 
GetFieldName() const311cdf0e10cSrcweir String SwGetExpField::GetFieldName() const
312cdf0e10cSrcweir {
313cdf0e10cSrcweir     String aStr( SwFieldType::GetTypeStr(
314cdf0e10cSrcweir         static_cast<sal_uInt16>(((nsSwGetSetExpType::GSE_FORMULA & nSubType) != 0)
315cdf0e10cSrcweir                                             ? TYP_FORMELFLD
316cdf0e10cSrcweir                                             : TYP_GETFLD ) ));
317cdf0e10cSrcweir     aStr += ' ';
318cdf0e10cSrcweir     aStr += GetFormula();
319cdf0e10cSrcweir     return aStr;
320cdf0e10cSrcweir }
321cdf0e10cSrcweir 
Copy() const322cdf0e10cSrcweir SwField* SwGetExpField::Copy() const
323cdf0e10cSrcweir {
324cdf0e10cSrcweir     SwGetExpField *pTmp = new SwGetExpField((SwGetExpFieldType*)GetTyp(),
325cdf0e10cSrcweir                                             GetFormula(), nSubType, GetFormat());
326cdf0e10cSrcweir     pTmp->SetLanguage(GetLanguage());
327cdf0e10cSrcweir     pTmp->SwValueField::SetValue(GetValue());
328cdf0e10cSrcweir     pTmp->sExpand       = sExpand;
329cdf0e10cSrcweir     pTmp->bIsInBodyTxt  = bIsInBodyTxt;
330cdf0e10cSrcweir     pTmp->SetAutomaticLanguage(IsAutomaticLanguage());
331cdf0e10cSrcweir     if( bLateInitialization )
332cdf0e10cSrcweir         pTmp->SetLateInitialization();
333cdf0e10cSrcweir 
334cdf0e10cSrcweir     return pTmp;
335cdf0e10cSrcweir }
336cdf0e10cSrcweir 
ChangeExpansion(const SwFrm & rFrm,const SwTxtFld & rFld)337cdf0e10cSrcweir void SwGetExpField::ChangeExpansion( const SwFrm& rFrm, const SwTxtFld& rFld )
338cdf0e10cSrcweir {
339cdf0e10cSrcweir     if( bIsInBodyTxt )      // nur Felder in Footer, Header, FootNote, Flys
340cdf0e10cSrcweir         return;
341cdf0e10cSrcweir 
342cdf0e10cSrcweir     ASSERT( !rFrm.IsInDocBody(), "Flag ist nicht richtig, Frame steht im DocBody" );
343cdf0e10cSrcweir 
344cdf0e10cSrcweir     // bestimme mal das Dokument (oder geht es noch einfacher?)
345cdf0e10cSrcweir     const SwTxtNode* pTxtNode = &rFld.GetTxtNode();
346cdf0e10cSrcweir     SwDoc& rDoc = *(SwDoc*)pTxtNode->GetDoc();
347cdf0e10cSrcweir 
348cdf0e10cSrcweir     // einen Index fuers bestimmen vom TextNode anlegen
349cdf0e10cSrcweir     SwPosition aPos( SwNodeIndex( rDoc.GetNodes() ) );
350cdf0e10cSrcweir     pTxtNode = GetBodyTxtNode( rDoc, aPos, rFrm );
351cdf0e10cSrcweir 
352cdf0e10cSrcweir     // Wenn kein Layout vorhanden, kommt es in Kopf und Fusszeilen dazu
353*721f84f2Smseidel     // das ChangeExpansion uebers Layout-Formatieren aufgerufen wird
354cdf0e10cSrcweir     // aber kein TxtNode vorhanden ist
355cdf0e10cSrcweir     //
356cdf0e10cSrcweir     if(!pTxtNode)
357cdf0e10cSrcweir         return;
358cdf0e10cSrcweir     // #i82544#
359cdf0e10cSrcweir     if( bLateInitialization )
360cdf0e10cSrcweir     {
361cdf0e10cSrcweir         SwFieldType* pSetExpFld = rDoc.GetFldType(RES_SETEXPFLD, GetFormula(), sal_False);
362cdf0e10cSrcweir         if( pSetExpFld )
363cdf0e10cSrcweir         {
364cdf0e10cSrcweir             bLateInitialization = false;
365cdf0e10cSrcweir             if( !(GetSubType() & nsSwGetSetExpType::GSE_STRING) &&
366cdf0e10cSrcweir                 static_cast< SwSetExpFieldType* >(pSetExpFld)->GetType() == nsSwGetSetExpType::GSE_STRING )
367cdf0e10cSrcweir             SetSubType( nsSwGetSetExpType::GSE_STRING );
368cdf0e10cSrcweir         }
369cdf0e10cSrcweir     }
370cdf0e10cSrcweir 
371cdf0e10cSrcweir     _SetGetExpFld aEndFld( aPos.nNode, &rFld, &aPos.nContent );
372cdf0e10cSrcweir     if(GetSubType() & nsSwGetSetExpType::GSE_STRING)
373cdf0e10cSrcweir     {
374cdf0e10cSrcweir         SwHash** ppHashTbl;
375cdf0e10cSrcweir         sal_uInt16 nSize;
376cdf0e10cSrcweir         rDoc.FldsToExpand( ppHashTbl, nSize, aEndFld );
377cdf0e10cSrcweir         LookString( ppHashTbl, nSize, GetFormula(), sExpand );
378cdf0e10cSrcweir         ::DeleteHashTable( ppHashTbl, nSize );      // HashTabelle loeschen
379cdf0e10cSrcweir     }
380cdf0e10cSrcweir     else
381cdf0e10cSrcweir     {
382cdf0e10cSrcweir         // fuelle den Calculator mit den Werten
383cdf0e10cSrcweir         SwCalc aCalc( rDoc );
384cdf0e10cSrcweir         rDoc.FldsToCalc(aCalc, aEndFld);
385cdf0e10cSrcweir 
386cdf0e10cSrcweir         // Wert berechnen
387cdf0e10cSrcweir         SetValue(aCalc.Calculate(GetFormula()).GetDouble());
388cdf0e10cSrcweir 
389cdf0e10cSrcweir         // Auswertung nach Format
390cdf0e10cSrcweir         sExpand = ((SwValueFieldType*)GetTyp())->ExpandValue(
391cdf0e10cSrcweir                                 GetValue(), GetFormat(), GetLanguage());
392cdf0e10cSrcweir     }
393cdf0e10cSrcweir }
394cdf0e10cSrcweir 
GetPar2() const395cdf0e10cSrcweir String SwGetExpField::GetPar2() const
396cdf0e10cSrcweir {
397cdf0e10cSrcweir     return GetFormula();
398cdf0e10cSrcweir }
399cdf0e10cSrcweir 
SetPar2(const String & rStr)400cdf0e10cSrcweir void SwGetExpField::SetPar2(const String& rStr)
401cdf0e10cSrcweir {
402cdf0e10cSrcweir     SetFormula(rStr);
403cdf0e10cSrcweir }
404cdf0e10cSrcweir 
GetSubType() const405cdf0e10cSrcweir sal_uInt16 SwGetExpField::GetSubType() const
406cdf0e10cSrcweir {
407cdf0e10cSrcweir     return nSubType;
408cdf0e10cSrcweir }
409cdf0e10cSrcweir 
SetSubType(sal_uInt16 nType)410cdf0e10cSrcweir void SwGetExpField::SetSubType(sal_uInt16 nType)
411cdf0e10cSrcweir {
412cdf0e10cSrcweir     nSubType = nType;
413cdf0e10cSrcweir }
414cdf0e10cSrcweir 
SetLanguage(sal_uInt16 nLng)415cdf0e10cSrcweir void SwGetExpField::SetLanguage(sal_uInt16 nLng)
416cdf0e10cSrcweir {
417cdf0e10cSrcweir     if (nSubType & nsSwExtendedSubType::SUB_CMD)
418cdf0e10cSrcweir         SwField::SetLanguage(nLng);
419cdf0e10cSrcweir     else
420cdf0e10cSrcweir         SwValueField::SetLanguage(nLng);
421cdf0e10cSrcweir }
422cdf0e10cSrcweir 
QueryValue(uno::Any & rAny,sal_uInt16 nWhichId) const423cdf0e10cSrcweir sal_Bool SwGetExpField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
424cdf0e10cSrcweir {
425cdf0e10cSrcweir     switch( nWhichId )
426cdf0e10cSrcweir     {
427cdf0e10cSrcweir     case FIELD_PROP_DOUBLE:
428cdf0e10cSrcweir         rAny <<= GetValue();
429cdf0e10cSrcweir         break;
430cdf0e10cSrcweir     case FIELD_PROP_FORMAT:
431cdf0e10cSrcweir         rAny <<= (sal_Int32)GetFormat();
432cdf0e10cSrcweir         break;
433cdf0e10cSrcweir     case FIELD_PROP_USHORT1:
434cdf0e10cSrcweir          rAny <<= (sal_Int16)nSubType;
435cdf0e10cSrcweir         break;
436cdf0e10cSrcweir     case FIELD_PROP_PAR1:
437cdf0e10cSrcweir         rAny <<= OUString( GetFormula() );
438cdf0e10cSrcweir         break;
439cdf0e10cSrcweir     case FIELD_PROP_SUBTYPE:
440cdf0e10cSrcweir         {
441cdf0e10cSrcweir             sal_Int16 nRet = lcl_SubTypeToAPI(GetSubType() & 0xff);
442cdf0e10cSrcweir             rAny <<= nRet;
443cdf0e10cSrcweir         }
444cdf0e10cSrcweir         break;
445cdf0e10cSrcweir     case FIELD_PROP_BOOL2:
446cdf0e10cSrcweir         {
447cdf0e10cSrcweir             sal_Bool bTmp = 0 != (nSubType & nsSwExtendedSubType::SUB_CMD);
448cdf0e10cSrcweir             rAny.setValue(&bTmp, ::getBooleanCppuType());
449cdf0e10cSrcweir         }
450cdf0e10cSrcweir         break;
451cdf0e10cSrcweir     case FIELD_PROP_PAR4:
452cdf0e10cSrcweir         rAny <<= rtl::OUString(GetExpStr());
453cdf0e10cSrcweir         break;
454cdf0e10cSrcweir     default:
455cdf0e10cSrcweir         return SwField::QueryValue(rAny, nWhichId);
456cdf0e10cSrcweir     }
457cdf0e10cSrcweir     return sal_True;
458cdf0e10cSrcweir }
459cdf0e10cSrcweir 
PutValue(const uno::Any & rAny,sal_uInt16 nWhichId)460cdf0e10cSrcweir sal_Bool SwGetExpField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
461cdf0e10cSrcweir {
462cdf0e10cSrcweir     sal_Int32 nTmp = 0;
463cdf0e10cSrcweir     String sTmp;
464cdf0e10cSrcweir     switch( nWhichId )
465cdf0e10cSrcweir     {
466cdf0e10cSrcweir     case FIELD_PROP_DOUBLE:
467cdf0e10cSrcweir         SwValueField::SetValue(*(double*) rAny.getValue());
468cdf0e10cSrcweir         break;
469cdf0e10cSrcweir     case FIELD_PROP_FORMAT:
470cdf0e10cSrcweir         rAny >>= nTmp;
471cdf0e10cSrcweir         SetFormat(nTmp);
472cdf0e10cSrcweir         break;
473cdf0e10cSrcweir     case FIELD_PROP_USHORT1:
474cdf0e10cSrcweir          rAny >>= nTmp;
475cdf0e10cSrcweir          nSubType = static_cast<sal_uInt16>(nTmp);
476cdf0e10cSrcweir         break;
477cdf0e10cSrcweir     case FIELD_PROP_PAR1:
478cdf0e10cSrcweir         SetFormula( ::GetString( rAny, sTmp ));
479cdf0e10cSrcweir         break;
480cdf0e10cSrcweir     case FIELD_PROP_SUBTYPE:
481cdf0e10cSrcweir         nTmp = lcl_APIToSubType(rAny);
482cdf0e10cSrcweir         if( nTmp >=0 )
483cdf0e10cSrcweir             SetSubType( static_cast<sal_uInt16>((GetSubType() & 0xff00) | nTmp));
484cdf0e10cSrcweir         break;
485cdf0e10cSrcweir     case FIELD_PROP_BOOL2:
486cdf0e10cSrcweir         if(*(sal_Bool*) rAny.getValue())
487cdf0e10cSrcweir             nSubType |= nsSwExtendedSubType::SUB_CMD;
488cdf0e10cSrcweir         else
489cdf0e10cSrcweir             nSubType &= (~nsSwExtendedSubType::SUB_CMD);
490cdf0e10cSrcweir         break;
491cdf0e10cSrcweir     case FIELD_PROP_PAR4:
492cdf0e10cSrcweir         ChgExpStr(::GetString( rAny, sTmp ));
493cdf0e10cSrcweir         break;
494cdf0e10cSrcweir     default:
495cdf0e10cSrcweir         return SwField::PutValue(rAny, nWhichId);
496cdf0e10cSrcweir     }
497cdf0e10cSrcweir     return sal_True;
498cdf0e10cSrcweir }
499cdf0e10cSrcweir 
SwSetExpFieldType(SwDoc * pDc,const String & rName,sal_uInt16 nTyp)500cdf0e10cSrcweir SwSetExpFieldType::SwSetExpFieldType( SwDoc* pDc, const String& rName, sal_uInt16 nTyp )
501cdf0e10cSrcweir     : SwValueFieldType( pDc, RES_SETEXPFLD ),
502cdf0e10cSrcweir     sName( rName ),
503cdf0e10cSrcweir     pOutlChgNd( 0 ),
504cdf0e10cSrcweir     sDelim( String::CreateFromAscii( "." ) ),
505cdf0e10cSrcweir     nType(nTyp), nLevel( UCHAR_MAX ),
506cdf0e10cSrcweir     bDeleted( sal_False )
507cdf0e10cSrcweir {
508cdf0e10cSrcweir     if( ( nsSwGetSetExpType::GSE_SEQ | nsSwGetSetExpType::GSE_STRING ) & nType )
509cdf0e10cSrcweir         EnableFormat(sal_False);    // Numberformatter nicht einsetzen
510cdf0e10cSrcweir }
511cdf0e10cSrcweir 
Copy() const512cdf0e10cSrcweir SwFieldType* SwSetExpFieldType::Copy() const
513cdf0e10cSrcweir {
514cdf0e10cSrcweir     SwSetExpFieldType* pNew = new SwSetExpFieldType(GetDoc(), sName, nType);
515cdf0e10cSrcweir     pNew->bDeleted = bDeleted;
516cdf0e10cSrcweir     pNew->sDelim = sDelim;
517cdf0e10cSrcweir     pNew->nLevel = nLevel;
518cdf0e10cSrcweir 
519cdf0e10cSrcweir     return pNew;
520cdf0e10cSrcweir }
521cdf0e10cSrcweir 
GetName() const522cdf0e10cSrcweir const String& SwSetExpFieldType::GetName() const
523cdf0e10cSrcweir {
524cdf0e10cSrcweir     return sName;
525cdf0e10cSrcweir }
526cdf0e10cSrcweir 
Modify(const SfxPoolItem *,const SfxPoolItem *)527cdf0e10cSrcweir void SwSetExpFieldType::Modify( const SfxPoolItem*, const SfxPoolItem* )
528cdf0e10cSrcweir {
529cdf0e10cSrcweir     return;     // nicht weiter expandieren
530cdf0e10cSrcweir }
531cdf0e10cSrcweir 
SetSeqFormat(sal_uLong nFmt)532cdf0e10cSrcweir void SwSetExpFieldType::SetSeqFormat(sal_uLong nFmt)
533cdf0e10cSrcweir {
534cdf0e10cSrcweir     SwIterator<SwFmtFld,SwFieldType> aIter(*this);
535c0286415SOliver-Rainer Wittmann     for( SwFmtFld* pFmtFld = aIter.First(); pFmtFld; pFmtFld = aIter.Next() )
536c0286415SOliver-Rainer Wittmann         pFmtFld->GetField()->ChangeFormat( nFmt );
537cdf0e10cSrcweir }
538cdf0e10cSrcweir 
GetSeqFormat()539cdf0e10cSrcweir sal_uLong SwSetExpFieldType::GetSeqFormat()
540cdf0e10cSrcweir {
541cdf0e10cSrcweir     if( !GetDepends() )
542cdf0e10cSrcweir         return SVX_NUM_ARABIC;
543cdf0e10cSrcweir 
544c0286415SOliver-Rainer Wittmann     SwField *pFld = ((SwFmtFld*)GetDepends())->GetField();
545cdf0e10cSrcweir     return pFld->GetFormat();
546cdf0e10cSrcweir }
547cdf0e10cSrcweir 
SetSeqRefNo(SwSetExpField & rFld)548cdf0e10cSrcweir sal_uInt16 SwSetExpFieldType::SetSeqRefNo( SwSetExpField& rFld )
549cdf0e10cSrcweir {
550cdf0e10cSrcweir     if( !GetDepends() || !(nsSwGetSetExpType::GSE_SEQ & nType) )
551cdf0e10cSrcweir         return USHRT_MAX;
552cdf0e10cSrcweir 
553cdf0e10cSrcweir extern void InsertSort( SvUShorts& rArr, sal_uInt16 nIdx, sal_uInt16* pInsPos = 0 );
554cdf0e10cSrcweir     SvUShorts aArr( 64 );
555cdf0e10cSrcweir 
556cdf0e10cSrcweir     sal_uInt16 n;
557cdf0e10cSrcweir 
558cdf0e10cSrcweir     // dann testmal, ob die Nummer schon vergeben ist oder ob eine neue
559cdf0e10cSrcweir     // bestimmt werden muss.
560cdf0e10cSrcweir     SwIterator<SwFmtFld,SwFieldType> aIter( *this );
561cdf0e10cSrcweir     const SwTxtNode* pNd;
562cdf0e10cSrcweir     for( SwFmtFld* pF = aIter.First(); pF; pF = aIter.Next() )
563c0286415SOliver-Rainer Wittmann         if( pF->GetField() != &rFld && pF->GetTxtFld() &&
564cdf0e10cSrcweir             0 != ( pNd = pF->GetTxtFld()->GetpTxtNode() ) &&
565cdf0e10cSrcweir             pNd->GetNodes().IsDocNodes() )
566c0286415SOliver-Rainer Wittmann             InsertSort( aArr, ((SwSetExpField*)pF->GetField())->GetSeqNumber() );
567cdf0e10cSrcweir 
568cdf0e10cSrcweir 
569cdf0e10cSrcweir     // teste erstmal ob die Nummer schon vorhanden ist:
570cdf0e10cSrcweir     sal_uInt16 nNum = rFld.GetSeqNumber();
571cdf0e10cSrcweir     if( USHRT_MAX != nNum )
572cdf0e10cSrcweir     {
573cdf0e10cSrcweir         for( n = 0; n < aArr.Count(); ++n )
574cdf0e10cSrcweir             if( aArr[ n ] > nNum )
575cdf0e10cSrcweir                 return nNum;            // nicht vorhanden -> also benutzen
576cdf0e10cSrcweir             else if( aArr[ n ] == nNum )
577cdf0e10cSrcweir                 break;                  // schon vorhanden -> neue erzeugen
578cdf0e10cSrcweir 
579cdf0e10cSrcweir         if( n == aArr.Count() )
580cdf0e10cSrcweir             return nNum;            // nicht vorhanden -> also benutzen
581cdf0e10cSrcweir     }
582cdf0e10cSrcweir 
583cdf0e10cSrcweir     // alle Nummern entsprechend geflag, also bestimme die richtige Nummer
584cdf0e10cSrcweir     for( n = 0; n < aArr.Count(); ++n )
585cdf0e10cSrcweir         if( n != aArr[ n ] )
586cdf0e10cSrcweir             break;
587cdf0e10cSrcweir 
588cdf0e10cSrcweir     rFld.SetSeqNumber( n );
589cdf0e10cSrcweir     return n;
590cdf0e10cSrcweir }
591cdf0e10cSrcweir 
GetSeqFldList(SwSeqFldList & rList)592cdf0e10cSrcweir sal_uInt16 SwSetExpFieldType::GetSeqFldList( SwSeqFldList& rList )
593cdf0e10cSrcweir {
594cdf0e10cSrcweir     if( rList.Count() )
595cdf0e10cSrcweir         rList.Remove( 0, rList.Count() );
596cdf0e10cSrcweir 
597cdf0e10cSrcweir     SwIterator<SwFmtFld,SwFieldType> aIter( *this );
598cdf0e10cSrcweir     const SwTxtNode* pNd;
599cdf0e10cSrcweir     for( SwFmtFld* pF = aIter.First(); pF; pF = aIter.Next() )
600cdf0e10cSrcweir         if( pF->GetTxtFld() &&
601cdf0e10cSrcweir             0 != ( pNd = pF->GetTxtFld()->GetpTxtNode() ) &&
602cdf0e10cSrcweir             pNd->GetNodes().IsDocNodes() )
603cdf0e10cSrcweir         {
604cdf0e10cSrcweir             _SeqFldLstElem* pNew = new _SeqFldLstElem(
605cdf0e10cSrcweir                     pNd->GetExpandTxt( 0, (*pF->GetTxtFld()->GetStart()) + 1 ),
606c0286415SOliver-Rainer Wittmann                     ((SwSetExpField*)pF->GetField())->GetSeqNumber() );
607cdf0e10cSrcweir             rList.InsertSort( pNew );
608cdf0e10cSrcweir         }
609cdf0e10cSrcweir 
610cdf0e10cSrcweir     return rList.Count();
611cdf0e10cSrcweir }
612cdf0e10cSrcweir 
613cdf0e10cSrcweir 
SetChapter(SwSetExpField & rFld,const SwNode & rNd)614cdf0e10cSrcweir void SwSetExpFieldType::SetChapter( SwSetExpField& rFld, const SwNode& rNd )
615cdf0e10cSrcweir {
616cdf0e10cSrcweir     const SwTxtNode* pTxtNd = rNd.FindOutlineNodeOfLevel( nLevel );
617cdf0e10cSrcweir     if( pTxtNd )
618cdf0e10cSrcweir     {
619cdf0e10cSrcweir         SwNumRule * pRule = pTxtNd->GetNumRule();
620cdf0e10cSrcweir 
621cdf0e10cSrcweir         if (pRule)
622cdf0e10cSrcweir         {
623cdf0e10cSrcweir             // --> OD 2005-11-02 #i51089 - TUNING#
624cdf0e10cSrcweir             if ( pTxtNd->GetNum() )
625cdf0e10cSrcweir             {
626cdf0e10cSrcweir                 const SwNodeNum & aNum = *(pTxtNd->GetNum());
627cdf0e10cSrcweir 
628cdf0e10cSrcweir                 // nur die Nummer besorgen, ohne Pre-/Post-fixstrings
629cdf0e10cSrcweir                 String sNumber( pRule->MakeNumString(aNum, sal_False ));
630cdf0e10cSrcweir 
631cdf0e10cSrcweir                 if( sNumber.Len() )
632cdf0e10cSrcweir                     rFld.ChgExpStr( ( sNumber += sDelim ) += rFld.GetExpStr() );
633cdf0e10cSrcweir             }
634cdf0e10cSrcweir             else
635cdf0e10cSrcweir             {
636cdf0e10cSrcweir                 ASSERT( false,
637cdf0e10cSrcweir                         "<SwSetExpFieldType::SetChapter(..)> - text node with numbering rule, but without number. This is a serious defect -> inform OD" );
638cdf0e10cSrcweir             }
639cdf0e10cSrcweir         }
640cdf0e10cSrcweir     }
641cdf0e10cSrcweir }
642cdf0e10cSrcweir 
QueryValue(uno::Any & rAny,sal_uInt16 nWhichId) const643cdf0e10cSrcweir sal_Bool SwSetExpFieldType::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
644cdf0e10cSrcweir {
645cdf0e10cSrcweir     switch( nWhichId )
646cdf0e10cSrcweir     {
647cdf0e10cSrcweir     case FIELD_PROP_SUBTYPE:
648cdf0e10cSrcweir         {
649cdf0e10cSrcweir             sal_Int16 nRet = lcl_SubTypeToAPI(GetType());
650cdf0e10cSrcweir             rAny <<= nRet;
651cdf0e10cSrcweir         }
652cdf0e10cSrcweir         break;
653cdf0e10cSrcweir     case FIELD_PROP_PAR2:
654cdf0e10cSrcweir         rAny <<= OUString(GetDelimiter());
655cdf0e10cSrcweir         break;
656cdf0e10cSrcweir     case FIELD_PROP_SHORT1:
657cdf0e10cSrcweir         {
658cdf0e10cSrcweir             sal_Int8 nRet = nLevel < MAXLEVEL? nLevel : -1;
659cdf0e10cSrcweir             rAny <<= nRet;
660cdf0e10cSrcweir         }
661cdf0e10cSrcweir         break;
662cdf0e10cSrcweir     default:
663cdf0e10cSrcweir         DBG_ERROR("illegal property");
664cdf0e10cSrcweir     }
665cdf0e10cSrcweir     return sal_True;
666cdf0e10cSrcweir }
667cdf0e10cSrcweir 
PutValue(const uno::Any & rAny,sal_uInt16 nWhichId)668cdf0e10cSrcweir sal_Bool SwSetExpFieldType::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
669cdf0e10cSrcweir {
670cdf0e10cSrcweir     switch( nWhichId )
671cdf0e10cSrcweir     {
672cdf0e10cSrcweir     case FIELD_PROP_SUBTYPE:
673cdf0e10cSrcweir         {
674cdf0e10cSrcweir             sal_Int32 nSet = lcl_APIToSubType(rAny);
675cdf0e10cSrcweir             if(nSet >=0)
676cdf0e10cSrcweir                 SetType(static_cast<sal_uInt16>(nSet));
677cdf0e10cSrcweir         }
678cdf0e10cSrcweir         break;
679cdf0e10cSrcweir     case FIELD_PROP_PAR2:
680cdf0e10cSrcweir         {
681cdf0e10cSrcweir             String sTmp;
682cdf0e10cSrcweir             if( ::GetString( rAny, sTmp ).Len() )
683cdf0e10cSrcweir //              SetDelimiter( sTmp.GetChar( 0 ));
684cdf0e10cSrcweir                 SetDelimiter( sTmp );
685cdf0e10cSrcweir             else
686cdf0e10cSrcweir                 SetDelimiter(String::CreateFromAscii( " "));
687cdf0e10cSrcweir         }
688cdf0e10cSrcweir         break;
689cdf0e10cSrcweir     case FIELD_PROP_SHORT1:
690cdf0e10cSrcweir         {
691cdf0e10cSrcweir             sal_Int8 nLvl = 0;
692cdf0e10cSrcweir             rAny >>= nLvl;
693cdf0e10cSrcweir             if(nLvl < 0 || nLvl >= MAXLEVEL)
694cdf0e10cSrcweir                 SetOutlineLvl(UCHAR_MAX);
695cdf0e10cSrcweir             else
696cdf0e10cSrcweir                 SetOutlineLvl(nLvl);
697cdf0e10cSrcweir         }
698cdf0e10cSrcweir         break;
699cdf0e10cSrcweir     default:
700cdf0e10cSrcweir         DBG_ERROR("illegal property");
701cdf0e10cSrcweir     }
702cdf0e10cSrcweir     return sal_True;
703cdf0e10cSrcweir }
704cdf0e10cSrcweir 
InsertSort(_SeqFldLstElem * pNew)705cdf0e10cSrcweir sal_Bool SwSeqFldList::InsertSort( _SeqFldLstElem* pNew )
706cdf0e10cSrcweir {
707cdf0e10cSrcweir     sal_Unicode* p = pNew->sDlgEntry.GetBufferAccess();
708cdf0e10cSrcweir     while( *p )
709cdf0e10cSrcweir     {
710cdf0e10cSrcweir         if( *p < 0x20 )
711cdf0e10cSrcweir             *p = 0x20;
712cdf0e10cSrcweir         ++p;
713cdf0e10cSrcweir     }
714cdf0e10cSrcweir 
715cdf0e10cSrcweir     sal_uInt16 nPos;
716cdf0e10cSrcweir     sal_Bool bRet = SeekEntry( *pNew, &nPos );
717cdf0e10cSrcweir     if( !bRet )
718cdf0e10cSrcweir         C40_INSERT( _SeqFldLstElem, pNew, nPos );
719cdf0e10cSrcweir     return bRet;
720cdf0e10cSrcweir }
721cdf0e10cSrcweir 
SeekEntry(const _SeqFldLstElem & rNew,sal_uInt16 * pP)722cdf0e10cSrcweir sal_Bool SwSeqFldList::SeekEntry( const _SeqFldLstElem& rNew, sal_uInt16* pP )
723cdf0e10cSrcweir {
724cdf0e10cSrcweir     sal_uInt16 nO = Count(), nM, nU = 0;
725cdf0e10cSrcweir     if( nO > 0 )
726cdf0e10cSrcweir     {
727cdf0e10cSrcweir         CollatorWrapper & rCaseColl = ::GetAppCaseCollator(),
728cdf0e10cSrcweir                         & rColl = ::GetAppCollator();
729cdf0e10cSrcweir         const CharClass& rCC = GetAppCharClass();
730cdf0e10cSrcweir 
731cdf0e10cSrcweir         //#59900# Die Sortierung soll die Nummer korrekt einordnen
732cdf0e10cSrcweir         //also "10" nach "9" und nicht "10" nach "1"
733cdf0e10cSrcweir         const String& rTmp2 = rNew.sDlgEntry;
734cdf0e10cSrcweir         xub_StrLen nFndPos2 = 0;
735cdf0e10cSrcweir         String sNum2( rTmp2.GetToken( 0, ' ', nFndPos2 ));
736cdf0e10cSrcweir         sal_Bool bIsNum2IsNumeric = rCC.isAsciiNumeric( sNum2 );
737cdf0e10cSrcweir         sal_Int32 nNum2 = bIsNum2IsNumeric ? sNum2.ToInt32() : 0;
738cdf0e10cSrcweir 
739cdf0e10cSrcweir         nO--;
740cdf0e10cSrcweir         while( nU <= nO )
741cdf0e10cSrcweir         {
742cdf0e10cSrcweir             nM = nU + ( nO - nU ) / 2;
743cdf0e10cSrcweir 
744cdf0e10cSrcweir             //#59900# Die Sortierung soll die Nummer korrekt einordnen
745cdf0e10cSrcweir             //also "10" nach "9" und nicht "10" nach "1"
746cdf0e10cSrcweir             const String& rTmp1 = (*((_SeqFldLstElem**)pData + nM))->sDlgEntry;
747cdf0e10cSrcweir             xub_StrLen nFndPos1 = 0;
748cdf0e10cSrcweir             String sNum1( rTmp1.GetToken( 0, ' ', nFndPos1 ));
749cdf0e10cSrcweir             sal_Int32 nCmp;
750cdf0e10cSrcweir 
751cdf0e10cSrcweir             if( bIsNum2IsNumeric && rCC.isNumeric( sNum1 ) )
752cdf0e10cSrcweir             {
753cdf0e10cSrcweir                 sal_Int32 nNum1 = sNum1.ToInt32();
754cdf0e10cSrcweir                 nCmp = nNum2 - nNum1;
755cdf0e10cSrcweir                 if( 0 == nCmp )
756cdf0e10cSrcweir                     nCmp = rCaseColl.compareString( rTmp2.Copy( nFndPos2 ),
757cdf0e10cSrcweir                                                       rTmp1.Copy( nFndPos1 ));
758cdf0e10cSrcweir             }
759cdf0e10cSrcweir             else
760cdf0e10cSrcweir                 nCmp = rColl.compareString( rTmp2, rTmp1 );
761cdf0e10cSrcweir 
762cdf0e10cSrcweir             if( 0 == nCmp )
763cdf0e10cSrcweir             {
764cdf0e10cSrcweir                 if( pP ) *pP = nM;
765cdf0e10cSrcweir                 return sal_True;
766cdf0e10cSrcweir             }
767cdf0e10cSrcweir             else if( 0 < nCmp )
768cdf0e10cSrcweir                 nU = nM + 1;
769cdf0e10cSrcweir             else if( nM == 0 )
770cdf0e10cSrcweir                 break;
771cdf0e10cSrcweir             else
772cdf0e10cSrcweir                 nO = nM - 1;
773cdf0e10cSrcweir         }
774cdf0e10cSrcweir     }
775cdf0e10cSrcweir     if( pP ) *pP = nU;
776cdf0e10cSrcweir     return sal_False;
777cdf0e10cSrcweir }
778cdf0e10cSrcweir 
779cdf0e10cSrcweir /*--------------------------------------------------------------------
780cdf0e10cSrcweir     Beschreibung: SwSetExpField by JP
781cdf0e10cSrcweir  --------------------------------------------------------------------*/
782cdf0e10cSrcweir 
SwSetExpField(SwSetExpFieldType * pTyp,const String & rFormel,sal_uLong nFmt)783cdf0e10cSrcweir SwSetExpField::SwSetExpField(SwSetExpFieldType* pTyp, const String& rFormel,
784cdf0e10cSrcweir                                         sal_uLong nFmt)
785cdf0e10cSrcweir     : SwFormulaField( pTyp, nFmt, 0.0 ), nSeqNo( USHRT_MAX ),
786cdf0e10cSrcweir     nSubType(0)
787cdf0e10cSrcweir {
788cdf0e10cSrcweir     SetFormula(rFormel);
789cdf0e10cSrcweir     // SubType ignorieren !!!
790cdf0e10cSrcweir     bInput = sal_False;
791cdf0e10cSrcweir     if( IsSequenceFld() )
792cdf0e10cSrcweir     {
793cdf0e10cSrcweir         SwValueField::SetValue(1.0);
794cdf0e10cSrcweir         if( !rFormel.Len() )
795cdf0e10cSrcweir         {
796cdf0e10cSrcweir             String sFormel(rFormel);
797cdf0e10cSrcweir             sFormel += pTyp->GetName();
798cdf0e10cSrcweir             sFormel += '+';
799cdf0e10cSrcweir             sFormel += '1';
800cdf0e10cSrcweir             SetFormula(sFormel);
801cdf0e10cSrcweir         }
802cdf0e10cSrcweir     }
803cdf0e10cSrcweir }
804cdf0e10cSrcweir 
Expand() const805cdf0e10cSrcweir String SwSetExpField::Expand() const
806cdf0e10cSrcweir {
807cdf0e10cSrcweir     String aStr;
808cdf0e10cSrcweir     if (nSubType & nsSwExtendedSubType::SUB_CMD)
809cdf0e10cSrcweir     {   // Der CommandString ist gefragt
810cdf0e10cSrcweir         aStr = GetTyp()->GetName();
811cdf0e10cSrcweir         aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " = " ));
812cdf0e10cSrcweir         aStr += GetFormula();
813cdf0e10cSrcweir     }
814cdf0e10cSrcweir     else if(!(nSubType & nsSwExtendedSubType::SUB_INVISIBLE))
815cdf0e10cSrcweir     {   // Der Wert ist sichtbar
816cdf0e10cSrcweir         aStr = sExpand;
817cdf0e10cSrcweir     }
818cdf0e10cSrcweir     return aStr;
819cdf0e10cSrcweir }
820cdf0e10cSrcweir 
821cdf0e10cSrcweir /*--------------------------------------------------------------------
822cdf0e10cSrcweir     @return the field name
823cdf0e10cSrcweir  --------------------------------------------------------------------*/
824cdf0e10cSrcweir 
GetFieldName() const825cdf0e10cSrcweir String SwSetExpField::GetFieldName() const
826cdf0e10cSrcweir {
827cdf0e10cSrcweir     SwFldTypesEnum const nStrType( (IsSequenceFld())
828cdf0e10cSrcweir                             ? TYP_SEQFLD
829cdf0e10cSrcweir                             : (bInput)
830cdf0e10cSrcweir                                 ? TYP_SETINPFLD
831cdf0e10cSrcweir                                 : TYP_SETFLD   );
832cdf0e10cSrcweir 
833cdf0e10cSrcweir     String aStr( SwFieldType::GetTypeStr( static_cast<sal_uInt16>(nStrType) ) );
834cdf0e10cSrcweir     aStr += ' ';
835cdf0e10cSrcweir     aStr += GetTyp()->GetName();
836cdf0e10cSrcweir 
837cdf0e10cSrcweir     // Sequence: without formula
838cdf0e10cSrcweir     if (TYP_SEQFLD != nStrType)
839cdf0e10cSrcweir     {
840cdf0e10cSrcweir         aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " = " ) );
841cdf0e10cSrcweir         aStr += GetFormula();
842cdf0e10cSrcweir     }
843cdf0e10cSrcweir     return aStr;
844cdf0e10cSrcweir }
845cdf0e10cSrcweir 
Copy() const846cdf0e10cSrcweir SwField* SwSetExpField::Copy() const
847cdf0e10cSrcweir {
848cdf0e10cSrcweir     SwSetExpField *pTmp = new SwSetExpField((SwSetExpFieldType*)GetTyp(),
849cdf0e10cSrcweir                                             GetFormula(), GetFormat());
850cdf0e10cSrcweir     pTmp->SwValueField::SetValue(GetValue());
851cdf0e10cSrcweir     pTmp->sExpand       = sExpand;
852cdf0e10cSrcweir     pTmp->SetAutomaticLanguage(IsAutomaticLanguage());
853cdf0e10cSrcweir     pTmp->SetLanguage(GetLanguage());
854cdf0e10cSrcweir     pTmp->aPText        = aPText;
855cdf0e10cSrcweir     pTmp->bInput        = bInput;
856cdf0e10cSrcweir     pTmp->nSeqNo        = nSeqNo;
857cdf0e10cSrcweir     pTmp->SetSubType(GetSubType());
858cdf0e10cSrcweir 
859cdf0e10cSrcweir     return pTmp;
860cdf0e10cSrcweir }
861cdf0e10cSrcweir 
SetSubType(sal_uInt16 nSub)862cdf0e10cSrcweir void SwSetExpField::SetSubType(sal_uInt16 nSub)
863cdf0e10cSrcweir {
864cdf0e10cSrcweir     ((SwSetExpFieldType*)GetTyp())->SetType(nSub & 0xff);
865cdf0e10cSrcweir     nSubType = nSub & 0xff00;
866cdf0e10cSrcweir 
867cdf0e10cSrcweir     DBG_ASSERT( (nSub & 0xff) != 3, "SubType ist illegal!" );
868cdf0e10cSrcweir }
869cdf0e10cSrcweir 
GetSubType() const870cdf0e10cSrcweir sal_uInt16 SwSetExpField::GetSubType() const
871cdf0e10cSrcweir {
872cdf0e10cSrcweir     return ((SwSetExpFieldType*)GetTyp())->GetType() | nSubType;
873cdf0e10cSrcweir }
874cdf0e10cSrcweir 
SetValue(const double & rAny)875cdf0e10cSrcweir void SwSetExpField::SetValue( const double& rAny )
876cdf0e10cSrcweir {
877cdf0e10cSrcweir     SwValueField::SetValue(rAny);
878cdf0e10cSrcweir 
879cdf0e10cSrcweir     if( IsSequenceFld() )
880cdf0e10cSrcweir         sExpand = FormatNumber( (sal_uInt16)GetValue(), GetFormat() );
881cdf0e10cSrcweir     else
882cdf0e10cSrcweir         sExpand = ((SwValueFieldType*)GetTyp())->ExpandValue( rAny,
883cdf0e10cSrcweir                                                 GetFormat(), GetLanguage());
884cdf0e10cSrcweir }
885cdf0e10cSrcweir 
SetValue(const double & rAny)886cdf0e10cSrcweir void SwGetExpField::SetValue( const double& rAny )
887cdf0e10cSrcweir {
888cdf0e10cSrcweir     SwValueField::SetValue(rAny);
889cdf0e10cSrcweir     sExpand = ((SwValueFieldType*)GetTyp())->ExpandValue( rAny, GetFormat(),
890cdf0e10cSrcweir                                                             GetLanguage());
891cdf0e10cSrcweir }
892cdf0e10cSrcweir /* -------------------------------------------------
893cdf0e10cSrcweir     Description: Find the index of the reference text
894cdf0e10cSrcweir     following the current field
895cdf0e10cSrcweir  --------------------------------------------------*/
GetReferenceTextPos(const SwFmtFld & rFmt,SwDoc & rDoc)896cdf0e10cSrcweir xub_StrLen SwGetExpField::GetReferenceTextPos( const SwFmtFld& rFmt, SwDoc& rDoc)
897cdf0e10cSrcweir {
898cdf0e10cSrcweir     //
899cdf0e10cSrcweir     const SwTxtFld* pTxtFld = rFmt.GetTxtFld();
900cdf0e10cSrcweir     const SwTxtNode& rTxtNode = pTxtFld->GetTxtNode();
901cdf0e10cSrcweir     //
902cdf0e10cSrcweir     xub_StrLen nRet = *pTxtFld->GetStart() + 1;
903cdf0e10cSrcweir     String sNodeText = rTxtNode.GetTxt();
904cdf0e10cSrcweir     sNodeText.Erase(0, nRet);
905cdf0e10cSrcweir     if(sNodeText.Len())
906cdf0e10cSrcweir     {
907cdf0e10cSrcweir         // now check if sNodeText starts with a non-alphanumeric character plus a blank
908cdf0e10cSrcweir         sal_uInt16 nSrcpt = pBreakIt->GetRealScriptOfText( sNodeText, 0 );
909cdf0e10cSrcweir 
910cdf0e10cSrcweir         static sal_uInt16 nIds[] =
911cdf0e10cSrcweir         {
912cdf0e10cSrcweir             RES_CHRATR_LANGUAGE, RES_CHRATR_LANGUAGE,
913cdf0e10cSrcweir             RES_CHRATR_FONT, RES_CHRATR_FONT,
914cdf0e10cSrcweir             RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CJK_LANGUAGE,
915cdf0e10cSrcweir             RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONT,
916cdf0e10cSrcweir             RES_CHRATR_CTL_LANGUAGE, RES_CHRATR_CTL_LANGUAGE,
917cdf0e10cSrcweir             RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_FONT,
918cdf0e10cSrcweir             0, 0
919cdf0e10cSrcweir         };
920cdf0e10cSrcweir         SwAttrSet aSet(rDoc.GetAttrPool(), nIds);
921cdf0e10cSrcweir         rTxtNode.GetAttr(aSet, nRet, nRet+1);
922cdf0e10cSrcweir 
923cdf0e10cSrcweir         if( RTL_TEXTENCODING_SYMBOL != ((SvxFontItem&)aSet.Get(
924cdf0e10cSrcweir                 GetWhichOfScript( RES_CHRATR_FONT, nSrcpt )) ).GetCharSet() )
925cdf0e10cSrcweir         {
926cdf0e10cSrcweir             LanguageType eLang = ((SvxLanguageItem&)aSet.Get(
927cdf0e10cSrcweir                 GetWhichOfScript( RES_CHRATR_LANGUAGE, nSrcpt )) ).GetLanguage();
928cdf0e10cSrcweir             CharClass aCC( SvxCreateLocale( eLang ));
929cdf0e10cSrcweir             sal_Unicode c0 = sNodeText.GetChar(0);
930cdf0e10cSrcweir             sal_Bool bIsAlphaNum = aCC.isAlphaNumeric( sNodeText, 0 );
931cdf0e10cSrcweir             if( !bIsAlphaNum ||
932cdf0e10cSrcweir                 (c0 == ' ' || c0 == '\t'))
933cdf0e10cSrcweir             {
934cdf0e10cSrcweir                 nRet++;
935cdf0e10cSrcweir                 if( sNodeText.Len() > 1 &&
936cdf0e10cSrcweir                     (sNodeText.GetChar(1) == ' ' ||
937cdf0e10cSrcweir                      sNodeText.GetChar(1) == '\t'))
938cdf0e10cSrcweir                     nRet++;
939cdf0e10cSrcweir             }
940cdf0e10cSrcweir         }
941cdf0e10cSrcweir     }
942cdf0e10cSrcweir     return nRet;
943cdf0e10cSrcweir }
944cdf0e10cSrcweir 
945cdf0e10cSrcweir 
946cdf0e10cSrcweir /*--------------------------------------------------------------------
947cdf0e10cSrcweir     Beschreibung: Parameter setzen
948cdf0e10cSrcweir  --------------------------------------------------------------------*/
949cdf0e10cSrcweir 
GetPar1() const950cdf0e10cSrcweir const String& SwSetExpField::GetPar1() const
951cdf0e10cSrcweir {
952cdf0e10cSrcweir     return ((SwSetExpFieldType*)GetTyp())->GetName();
953cdf0e10cSrcweir }
954cdf0e10cSrcweir 
GetPar2() const955cdf0e10cSrcweir String SwSetExpField::GetPar2() const
956cdf0e10cSrcweir {
957cdf0e10cSrcweir     sal_uInt16 nType = ((SwSetExpFieldType*)GetTyp())->GetType();
958cdf0e10cSrcweir 
959cdf0e10cSrcweir     if (nType & nsSwGetSetExpType::GSE_STRING)
960cdf0e10cSrcweir         return GetFormula();
961cdf0e10cSrcweir     return GetExpandedFormula();
962cdf0e10cSrcweir }
963cdf0e10cSrcweir 
SetPar2(const String & rStr)964cdf0e10cSrcweir void SwSetExpField::SetPar2(const String& rStr)
965cdf0e10cSrcweir {
966cdf0e10cSrcweir     sal_uInt16 nType = ((SwSetExpFieldType*)GetTyp())->GetType();
967cdf0e10cSrcweir 
968cdf0e10cSrcweir     if( !(nType & nsSwGetSetExpType::GSE_SEQ) || rStr.Len() )
969cdf0e10cSrcweir     {
970cdf0e10cSrcweir         if (nType & nsSwGetSetExpType::GSE_STRING)
971cdf0e10cSrcweir             SetFormula(rStr);
972cdf0e10cSrcweir         else
973cdf0e10cSrcweir             SetExpandedFormula(rStr);
974cdf0e10cSrcweir     }
975cdf0e10cSrcweir }
976cdf0e10cSrcweir 
977cdf0e10cSrcweir 
PutValue(const uno::Any & rAny,sal_uInt16 nWhichId)978cdf0e10cSrcweir sal_Bool SwSetExpField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
979cdf0e10cSrcweir {
980cdf0e10cSrcweir     sal_Int32 nTmp32 = 0;
981cdf0e10cSrcweir     sal_Int16 nTmp16 = 0;
982cdf0e10cSrcweir     String sTmp;
983cdf0e10cSrcweir     switch( nWhichId )
984cdf0e10cSrcweir     {
985cdf0e10cSrcweir     case FIELD_PROP_BOOL2:
986cdf0e10cSrcweir         if(*(sal_Bool*)rAny.getValue())
987cdf0e10cSrcweir             nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
988cdf0e10cSrcweir         else
989cdf0e10cSrcweir             nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
990cdf0e10cSrcweir         break;
991cdf0e10cSrcweir     case FIELD_PROP_FORMAT:
992cdf0e10cSrcweir         rAny >>= nTmp32;
993cdf0e10cSrcweir         SetFormat(nTmp32);
994cdf0e10cSrcweir         break;
995cdf0e10cSrcweir     case FIELD_PROP_USHORT2:
996cdf0e10cSrcweir         {
997cdf0e10cSrcweir             rAny >>= nTmp16;
998cdf0e10cSrcweir             if(nTmp16 <= SVX_NUMBER_NONE )
999cdf0e10cSrcweir                 SetFormat(nTmp16);
1000cdf0e10cSrcweir             else {
1001cdf0e10cSrcweir                 //exception(wrong_value)
1002cdf0e10cSrcweir                 ;
1003cdf0e10cSrcweir             }
1004cdf0e10cSrcweir         }
1005cdf0e10cSrcweir         break;
1006cdf0e10cSrcweir     case FIELD_PROP_USHORT1:
1007cdf0e10cSrcweir         rAny >>= nTmp16;
1008cdf0e10cSrcweir         nSeqNo = nTmp16;
1009cdf0e10cSrcweir         break;
1010cdf0e10cSrcweir     case FIELD_PROP_PAR1:
1011cdf0e10cSrcweir         SetPar1( SwStyleNameMapper::GetUIName(
1012cdf0e10cSrcweir                             ::GetString( rAny, sTmp ), nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL ) );
1013cdf0e10cSrcweir         break;
1014cdf0e10cSrcweir     case FIELD_PROP_PAR2:
1015cdf0e10cSrcweir         {
1016cdf0e10cSrcweir             OUString uTmp;
1017cdf0e10cSrcweir             rAny >>= uTmp;
1018cdf0e10cSrcweir             //I18N - if the formula contains only "TypeName+1"
1019cdf0e10cSrcweir             //and it's one of the initially created sequence fields
1020cdf0e10cSrcweir             //then the localized names has to be replaced by a programmatic name
1021cdf0e10cSrcweir             OUString sMyFormula = SwXFieldMaster::LocalizeFormula(*this, uTmp, sal_False);
1022cdf0e10cSrcweir             SetFormula( sMyFormula );
1023cdf0e10cSrcweir         }
1024cdf0e10cSrcweir         break;
1025cdf0e10cSrcweir     case FIELD_PROP_DOUBLE:
1026cdf0e10cSrcweir         {
1027cdf0e10cSrcweir             double fVal = 0.0;
1028cdf0e10cSrcweir             rAny >>= fVal;
1029cdf0e10cSrcweir             SetValue(fVal);
1030cdf0e10cSrcweir         }
1031cdf0e10cSrcweir         break;
1032cdf0e10cSrcweir     case FIELD_PROP_SUBTYPE:
1033cdf0e10cSrcweir         nTmp32 = lcl_APIToSubType(rAny);
1034cdf0e10cSrcweir         if(nTmp32 >= 0)
1035cdf0e10cSrcweir             SetSubType(static_cast<sal_uInt16>((GetSubType() & 0xff00) | nTmp32));
1036cdf0e10cSrcweir         break;
1037cdf0e10cSrcweir     case FIELD_PROP_PAR3:
1038cdf0e10cSrcweir         ::GetString( rAny, aPText );
1039cdf0e10cSrcweir         break;
1040cdf0e10cSrcweir     case FIELD_PROP_BOOL3:
1041cdf0e10cSrcweir         if(*(sal_Bool*) rAny.getValue())
1042cdf0e10cSrcweir             nSubType |= nsSwExtendedSubType::SUB_CMD;
1043cdf0e10cSrcweir         else
1044cdf0e10cSrcweir             nSubType &= (~nsSwExtendedSubType::SUB_CMD);
1045cdf0e10cSrcweir         break;
1046cdf0e10cSrcweir     case FIELD_PROP_BOOL1:
1047cdf0e10cSrcweir         SetInputFlag(*(sal_Bool*) rAny.getValue());
1048cdf0e10cSrcweir         break;
1049cdf0e10cSrcweir     case FIELD_PROP_PAR4:
1050cdf0e10cSrcweir         ChgExpStr( ::GetString( rAny, sTmp ));
1051cdf0e10cSrcweir         break;
1052cdf0e10cSrcweir     default:
1053cdf0e10cSrcweir         return SwField::PutValue(rAny, nWhichId);
1054cdf0e10cSrcweir     }
1055cdf0e10cSrcweir     return sal_True;
1056cdf0e10cSrcweir }
1057cdf0e10cSrcweir 
1058cdf0e10cSrcweir 
QueryValue(uno::Any & rAny,sal_uInt16 nWhichId) const105969a74367SOliver-Rainer Wittmann sal_Bool SwSetExpField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
106069a74367SOliver-Rainer Wittmann {
106169a74367SOliver-Rainer Wittmann     switch( nWhichId )
106269a74367SOliver-Rainer Wittmann     {
106369a74367SOliver-Rainer Wittmann     case FIELD_PROP_BOOL2:
106469a74367SOliver-Rainer Wittmann         {
106569a74367SOliver-Rainer Wittmann             sal_Bool bVal = 0 == (nSubType & nsSwExtendedSubType::SUB_INVISIBLE);
106669a74367SOliver-Rainer Wittmann             rAny.setValue(&bVal, ::getBooleanCppuType());
106769a74367SOliver-Rainer Wittmann         }
106869a74367SOliver-Rainer Wittmann         break;
106969a74367SOliver-Rainer Wittmann     case FIELD_PROP_FORMAT:
107069a74367SOliver-Rainer Wittmann         rAny <<= (sal_Int32)GetFormat();
107169a74367SOliver-Rainer Wittmann         break;
107269a74367SOliver-Rainer Wittmann     case FIELD_PROP_USHORT2:
107369a74367SOliver-Rainer Wittmann         rAny <<= (sal_Int16)GetFormat();
107469a74367SOliver-Rainer Wittmann         break;
107569a74367SOliver-Rainer Wittmann     case FIELD_PROP_USHORT1:
107669a74367SOliver-Rainer Wittmann         rAny <<= (sal_Int16)nSeqNo;
107769a74367SOliver-Rainer Wittmann         break;
107869a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR1:
107969a74367SOliver-Rainer Wittmann         rAny <<= OUString ( SwStyleNameMapper::GetProgName(GetPar1(), nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL ) );
108069a74367SOliver-Rainer Wittmann         break;
108169a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR2:
108269a74367SOliver-Rainer Wittmann         {
108369a74367SOliver-Rainer Wittmann             //I18N - if the formula contains only "TypeName+1"
108469a74367SOliver-Rainer Wittmann             //and it's one of the initially created sequence fields
108569a74367SOliver-Rainer Wittmann             //then the localized names has to be replaced by a programmatic name
108669a74367SOliver-Rainer Wittmann             OUString sMyFormula = SwXFieldMaster::LocalizeFormula(*this, GetFormula(), sal_True);
108769a74367SOliver-Rainer Wittmann             rAny <<= OUString( sMyFormula );
108869a74367SOliver-Rainer Wittmann         }
108969a74367SOliver-Rainer Wittmann         break;
109069a74367SOliver-Rainer Wittmann     case FIELD_PROP_DOUBLE:
109169a74367SOliver-Rainer Wittmann         rAny <<= (double)GetValue();
109269a74367SOliver-Rainer Wittmann         break;
109369a74367SOliver-Rainer Wittmann     case FIELD_PROP_SUBTYPE:
109469a74367SOliver-Rainer Wittmann         {
109569a74367SOliver-Rainer Wittmann             sal_Int16 nRet = 0;
109669a74367SOliver-Rainer Wittmann                 nRet = lcl_SubTypeToAPI(GetSubType() & 0xff);
109769a74367SOliver-Rainer Wittmann             rAny <<= nRet;
109869a74367SOliver-Rainer Wittmann         }
109969a74367SOliver-Rainer Wittmann         break;
110069a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR3:
110169a74367SOliver-Rainer Wittmann         rAny <<= OUString( aPText );
110269a74367SOliver-Rainer Wittmann         break;
110369a74367SOliver-Rainer Wittmann     case FIELD_PROP_BOOL3:
110469a74367SOliver-Rainer Wittmann         {
110569a74367SOliver-Rainer Wittmann             sal_Bool bTmp = 0 != (nSubType & nsSwExtendedSubType::SUB_CMD);
110669a74367SOliver-Rainer Wittmann             rAny.setValue(&bTmp, ::getBooleanCppuType());
110769a74367SOliver-Rainer Wittmann         }
110869a74367SOliver-Rainer Wittmann         break;
110969a74367SOliver-Rainer Wittmann     case FIELD_PROP_BOOL1:
111069a74367SOliver-Rainer Wittmann         {
111169a74367SOliver-Rainer Wittmann             sal_Bool bTmp = GetInputFlag();
111269a74367SOliver-Rainer Wittmann             rAny.setValue(&bTmp, ::getBooleanCppuType());
111369a74367SOliver-Rainer Wittmann         }
111469a74367SOliver-Rainer Wittmann         break;
111569a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR4:
111669a74367SOliver-Rainer Wittmann         rAny <<= rtl::OUString(GetExpStr());
111769a74367SOliver-Rainer Wittmann         break;
111869a74367SOliver-Rainer Wittmann     default:
111969a74367SOliver-Rainer Wittmann         return SwField::QueryValue(rAny, nWhichId);
112069a74367SOliver-Rainer Wittmann     }
112169a74367SOliver-Rainer Wittmann     return sal_True;
112269a74367SOliver-Rainer Wittmann }
112369a74367SOliver-Rainer Wittmann 
112469a74367SOliver-Rainer Wittmann 
112569a74367SOliver-Rainer Wittmann 
112669a74367SOliver-Rainer Wittmann /*--------------------------------------------------------------------
112769a74367SOliver-Rainer Wittmann     Beschreibung: Eingabefeld Type
112869a74367SOliver-Rainer Wittmann  ---------------------------------------------------------------------*/
112969a74367SOliver-Rainer Wittmann 
SwInputFieldType(SwDoc * pD)113069a74367SOliver-Rainer Wittmann SwInputFieldType::SwInputFieldType( SwDoc* pD )
113169a74367SOliver-Rainer Wittmann     : SwFieldType( RES_INPUTFLD )
113269a74367SOliver-Rainer Wittmann     , pDoc( pD )
113369a74367SOliver-Rainer Wittmann {
113469a74367SOliver-Rainer Wittmann }
113569a74367SOliver-Rainer Wittmann 
Copy() const113669a74367SOliver-Rainer Wittmann SwFieldType* SwInputFieldType::Copy() const
113769a74367SOliver-Rainer Wittmann {
113869a74367SOliver-Rainer Wittmann     SwInputFieldType* pType = new SwInputFieldType( pDoc );
113969a74367SOliver-Rainer Wittmann     return pType;
114069a74367SOliver-Rainer Wittmann }
114169a74367SOliver-Rainer Wittmann 
114269a74367SOliver-Rainer Wittmann /*--------------------------------------------------------------------
114369a74367SOliver-Rainer Wittmann     Beschreibung: Eingabefeld
114469a74367SOliver-Rainer Wittmann  --------------------------------------------------------------------*/
114569a74367SOliver-Rainer Wittmann 
SwInputField(SwInputFieldType * pFieldType,const String & rContent,const String & rPrompt,sal_uInt16 nSub,sal_uLong nFmt,bool bIsFormField)114669a74367SOliver-Rainer Wittmann SwInputField::SwInputField( SwInputFieldType* pFieldType,
114769a74367SOliver-Rainer Wittmann                             const String& rContent,
114869a74367SOliver-Rainer Wittmann                             const String& rPrompt,
114969a74367SOliver-Rainer Wittmann                             sal_uInt16 nSub,
115069a74367SOliver-Rainer Wittmann                             sal_uLong nFmt,
115169a74367SOliver-Rainer Wittmann                             bool bIsFormField )
115269a74367SOliver-Rainer Wittmann     : SwField( pFieldType, nFmt, LANGUAGE_SYSTEM, false )
115369a74367SOliver-Rainer Wittmann     , aContent(rContent)
115469a74367SOliver-Rainer Wittmann     , aPText(rPrompt)
115569a74367SOliver-Rainer Wittmann     , nSubType(nSub)
115669a74367SOliver-Rainer Wittmann     , mbIsFormField( bIsFormField )
115708357c13SPavel Janík     , mpFmtFld( NULL )
115869a74367SOliver-Rainer Wittmann {
115969a74367SOliver-Rainer Wittmann }
116069a74367SOliver-Rainer Wittmann 
~SwInputField()116169a74367SOliver-Rainer Wittmann SwInputField::~SwInputField()
116269a74367SOliver-Rainer Wittmann {
116369a74367SOliver-Rainer Wittmann }
116469a74367SOliver-Rainer Wittmann 
116569a74367SOliver-Rainer Wittmann 
SetFmtFld(SwFmtFld & rFmtFld)116669a74367SOliver-Rainer Wittmann void SwInputField::SetFmtFld( SwFmtFld& rFmtFld )
116769a74367SOliver-Rainer Wittmann {
116869a74367SOliver-Rainer Wittmann     mpFmtFld = &rFmtFld;
116969a74367SOliver-Rainer Wittmann }
117069a74367SOliver-Rainer Wittmann 
GetFmtFld()117169a74367SOliver-Rainer Wittmann SwFmtFld* SwInputField::GetFmtFld()
117269a74367SOliver-Rainer Wittmann {
117369a74367SOliver-Rainer Wittmann     return mpFmtFld;
117469a74367SOliver-Rainer Wittmann }
117569a74367SOliver-Rainer Wittmann 
117669a74367SOliver-Rainer Wittmann 
getContent() const117769a74367SOliver-Rainer Wittmann const String& SwInputField::getContent() const
117869a74367SOliver-Rainer Wittmann {
117969a74367SOliver-Rainer Wittmann     return aContent;
118069a74367SOliver-Rainer Wittmann }
118169a74367SOliver-Rainer Wittmann 
11821bf9188dSOliver-Rainer Wittmann 
LockNotifyContentChange()11831bf9188dSOliver-Rainer Wittmann void SwInputField::LockNotifyContentChange()
11841bf9188dSOliver-Rainer Wittmann {
11851bf9188dSOliver-Rainer Wittmann     if ( GetFmtFld() != NULL )
11861bf9188dSOliver-Rainer Wittmann     {
11871bf9188dSOliver-Rainer Wittmann         SwTxtInputFld* pTxtInputFld = dynamic_cast< SwTxtInputFld* >(GetFmtFld()->GetTxtFld());
11881bf9188dSOliver-Rainer Wittmann         if ( pTxtInputFld != NULL )
11891bf9188dSOliver-Rainer Wittmann         {
11901bf9188dSOliver-Rainer Wittmann             pTxtInputFld->LockNotifyContentChange();
11911bf9188dSOliver-Rainer Wittmann         }
11921bf9188dSOliver-Rainer Wittmann     }
11931bf9188dSOliver-Rainer Wittmann }
11941bf9188dSOliver-Rainer Wittmann 
11951bf9188dSOliver-Rainer Wittmann 
UnlockNotifyContentChange()11961bf9188dSOliver-Rainer Wittmann void SwInputField::UnlockNotifyContentChange()
11971bf9188dSOliver-Rainer Wittmann {
11981bf9188dSOliver-Rainer Wittmann     if ( GetFmtFld() != NULL )
11991bf9188dSOliver-Rainer Wittmann     {
12001bf9188dSOliver-Rainer Wittmann         SwTxtInputFld* pTxtInputFld = dynamic_cast< SwTxtInputFld* >(GetFmtFld()->GetTxtFld());
12011bf9188dSOliver-Rainer Wittmann         if ( pTxtInputFld != NULL )
12021bf9188dSOliver-Rainer Wittmann         {
12031bf9188dSOliver-Rainer Wittmann             pTxtInputFld->UnlockNotifyContentChange();
12041bf9188dSOliver-Rainer Wittmann         }
12051bf9188dSOliver-Rainer Wittmann     }
12061bf9188dSOliver-Rainer Wittmann }
12071bf9188dSOliver-Rainer Wittmann 
applyFieldContent(const String & rNewFieldContent)120869a74367SOliver-Rainer Wittmann void SwInputField::applyFieldContent( const String& rNewFieldContent )
120969a74367SOliver-Rainer Wittmann {
121069a74367SOliver-Rainer Wittmann     if ( (nSubType & 0x00ff) == INP_TXT )
121169a74367SOliver-Rainer Wittmann     {
121269a74367SOliver-Rainer Wittmann         aContent = rNewFieldContent;
121369a74367SOliver-Rainer Wittmann     }
121469a74367SOliver-Rainer Wittmann     else if( (nSubType & 0x00ff) == INP_USR )
121569a74367SOliver-Rainer Wittmann     {
121669a74367SOliver-Rainer Wittmann         SwUserFieldType* pUserTyp = static_cast<SwUserFieldType*>(
121769a74367SOliver-Rainer Wittmann             static_cast<SwInputFieldType*>(GetTyp())->GetDoc()->GetFldType( RES_USERFLD, getContent(), false ) );
121869a74367SOliver-Rainer Wittmann         if( pUserTyp )
121969a74367SOliver-Rainer Wittmann         {
122069a74367SOliver-Rainer Wittmann             pUserTyp->SetContent( rNewFieldContent );
12211bf9188dSOliver-Rainer Wittmann 
12221bf9188dSOliver-Rainer Wittmann             // trigger update of the corresponding User Fields and other related Input Fields
12231bf9188dSOliver-Rainer Wittmann             {
12241bf9188dSOliver-Rainer Wittmann                 LockNotifyContentChange();
12251bf9188dSOliver-Rainer Wittmann                 pUserTyp->UpdateFlds();
12261bf9188dSOliver-Rainer Wittmann                 UnlockNotifyContentChange();
12271bf9188dSOliver-Rainer Wittmann             }
122869a74367SOliver-Rainer Wittmann         }
122969a74367SOliver-Rainer Wittmann     }
123069a74367SOliver-Rainer Wittmann }
123169a74367SOliver-Rainer Wittmann 
GetFieldName() const123269a74367SOliver-Rainer Wittmann String SwInputField::GetFieldName() const
123369a74367SOliver-Rainer Wittmann {
123469a74367SOliver-Rainer Wittmann     String aStr(SwField::GetFieldName());
123569a74367SOliver-Rainer Wittmann     if ((nSubType & 0x00ff) == INP_USR)
123669a74367SOliver-Rainer Wittmann     {
123769a74367SOliver-Rainer Wittmann         aStr += GetTyp()->GetName();
123869a74367SOliver-Rainer Wittmann         aStr += ' ';
123969a74367SOliver-Rainer Wittmann         aStr += getContent();
124069a74367SOliver-Rainer Wittmann     }
124169a74367SOliver-Rainer Wittmann     return aStr;
124269a74367SOliver-Rainer Wittmann }
124369a74367SOliver-Rainer Wittmann 
Copy() const124469a74367SOliver-Rainer Wittmann SwField* SwInputField::Copy() const
124569a74367SOliver-Rainer Wittmann {
124669a74367SOliver-Rainer Wittmann     SwInputField* pFld =
124769a74367SOliver-Rainer Wittmann         new SwInputField(
124869a74367SOliver-Rainer Wittmann             static_cast<SwInputFieldType*>(GetTyp()),
124969a74367SOliver-Rainer Wittmann             getContent(),
125069a74367SOliver-Rainer Wittmann             aPText,
125169a74367SOliver-Rainer Wittmann             GetSubType(),
125269a74367SOliver-Rainer Wittmann             GetFormat(),
125369a74367SOliver-Rainer Wittmann             mbIsFormField );
125469a74367SOliver-Rainer Wittmann 
125569a74367SOliver-Rainer Wittmann     pFld->SetHelp( aHelp );
125669a74367SOliver-Rainer Wittmann     pFld->SetToolTip( aToolTip );
125769a74367SOliver-Rainer Wittmann 
125869a74367SOliver-Rainer Wittmann     pFld->SetAutomaticLanguage(IsAutomaticLanguage());
125969a74367SOliver-Rainer Wittmann     return pFld;
126069a74367SOliver-Rainer Wittmann }
126169a74367SOliver-Rainer Wittmann 
Expand() const126269a74367SOliver-Rainer Wittmann String SwInputField::Expand() const
126369a74367SOliver-Rainer Wittmann {
126469a74367SOliver-Rainer Wittmann     String sRet;
126569a74367SOliver-Rainer Wittmann     if ( (nSubType & 0x00ff) == INP_TXT )
126669a74367SOliver-Rainer Wittmann     {
126769a74367SOliver-Rainer Wittmann         sRet = getContent();
126869a74367SOliver-Rainer Wittmann     }
126969a74367SOliver-Rainer Wittmann     else if( (nSubType & 0x00ff) == INP_USR )
127069a74367SOliver-Rainer Wittmann     {
127169a74367SOliver-Rainer Wittmann         SwUserFieldType* pUserTyp = static_cast<SwUserFieldType*>(
127269a74367SOliver-Rainer Wittmann             static_cast<SwInputFieldType*>(GetTyp())->GetDoc()->GetFldType( RES_USERFLD, getContent(), false ) );
127369a74367SOliver-Rainer Wittmann         if( pUserTyp )
127469a74367SOliver-Rainer Wittmann             sRet = pUserTyp->GetContent();
127569a74367SOliver-Rainer Wittmann     }
127669a74367SOliver-Rainer Wittmann     return sRet;
127769a74367SOliver-Rainer Wittmann }
127869a74367SOliver-Rainer Wittmann 
127969a74367SOliver-Rainer Wittmann 
isFormField() const128069a74367SOliver-Rainer Wittmann bool SwInputField::isFormField() const
128169a74367SOliver-Rainer Wittmann {
128269a74367SOliver-Rainer Wittmann     return mbIsFormField
128369a74367SOliver-Rainer Wittmann            || aHelp.Len() > 0
128469a74367SOliver-Rainer Wittmann            || aToolTip.Len() > 0;
128569a74367SOliver-Rainer Wittmann }
128669a74367SOliver-Rainer Wittmann 
128769a74367SOliver-Rainer Wittmann 
QueryValue(uno::Any & rAny,sal_uInt16 nWhichId) const128869a74367SOliver-Rainer Wittmann sal_Bool SwInputField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
128969a74367SOliver-Rainer Wittmann {
129069a74367SOliver-Rainer Wittmann     switch( nWhichId )
129169a74367SOliver-Rainer Wittmann     {
129269a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR1:
129369a74367SOliver-Rainer Wittmann         rAny <<= OUString( getContent() );
129469a74367SOliver-Rainer Wittmann         break;
129569a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR2:
129669a74367SOliver-Rainer Wittmann         rAny <<= OUString( aPText );
129769a74367SOliver-Rainer Wittmann         break;
129869a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR3:
129969a74367SOliver-Rainer Wittmann         rAny <<= OUString( aHelp );
130069a74367SOliver-Rainer Wittmann         break;
130169a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR4:
130269a74367SOliver-Rainer Wittmann         rAny <<= OUString( aToolTip );
130369a74367SOliver-Rainer Wittmann         break;
130469a74367SOliver-Rainer Wittmann     default:
130569a74367SOliver-Rainer Wittmann         DBG_ERROR("illegal property");
130669a74367SOliver-Rainer Wittmann     }
130769a74367SOliver-Rainer Wittmann     return sal_True;
130869a74367SOliver-Rainer Wittmann }
130969a74367SOliver-Rainer Wittmann 
PutValue(const uno::Any & rAny,sal_uInt16 nWhichId)131069a74367SOliver-Rainer Wittmann sal_Bool SwInputField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
131169a74367SOliver-Rainer Wittmann {
131269a74367SOliver-Rainer Wittmann     switch( nWhichId )
131369a74367SOliver-Rainer Wittmann     {
131469a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR1:
131569a74367SOliver-Rainer Wittmann         {
131669a74367SOliver-Rainer Wittmann             ::GetString( rAny, aContent );
131769a74367SOliver-Rainer Wittmann         }
131869a74367SOliver-Rainer Wittmann         break;
131969a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR2:
132069a74367SOliver-Rainer Wittmann         ::GetString( rAny, aPText );
132169a74367SOliver-Rainer Wittmann         break;
132269a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR3:
132369a74367SOliver-Rainer Wittmann         ::GetString( rAny, aHelp );
132469a74367SOliver-Rainer Wittmann         break;
132569a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR4:
132669a74367SOliver-Rainer Wittmann         ::GetString( rAny, aToolTip );
132769a74367SOliver-Rainer Wittmann         break;
132869a74367SOliver-Rainer Wittmann     default:
132969a74367SOliver-Rainer Wittmann         DBG_ERROR("illegal property");
133069a74367SOliver-Rainer Wittmann     }
133169a74367SOliver-Rainer Wittmann     return sal_True;
133269a74367SOliver-Rainer Wittmann }
133369a74367SOliver-Rainer Wittmann 
133469a74367SOliver-Rainer Wittmann 
SetPar1(const String & rStr)133569a74367SOliver-Rainer Wittmann void SwInputField::SetPar1(const String& rStr)
133669a74367SOliver-Rainer Wittmann {
133769a74367SOliver-Rainer Wittmann     aContent = rStr;
133869a74367SOliver-Rainer Wittmann }
133969a74367SOliver-Rainer Wittmann 
GetPar1() const134069a74367SOliver-Rainer Wittmann const String& SwInputField::GetPar1() const
134169a74367SOliver-Rainer Wittmann {
134269a74367SOliver-Rainer Wittmann     return getContent();
134369a74367SOliver-Rainer Wittmann }
134469a74367SOliver-Rainer Wittmann 
134569a74367SOliver-Rainer Wittmann 
SetPar2(const String & rStr)134669a74367SOliver-Rainer Wittmann void SwInputField::SetPar2(const String& rStr)
134769a74367SOliver-Rainer Wittmann {
134869a74367SOliver-Rainer Wittmann     aPText = rStr;
134969a74367SOliver-Rainer Wittmann }
135069a74367SOliver-Rainer Wittmann 
GetPar2() const135169a74367SOliver-Rainer Wittmann String SwInputField::GetPar2() const
135269a74367SOliver-Rainer Wittmann {
135369a74367SOliver-Rainer Wittmann     return aPText;
135469a74367SOliver-Rainer Wittmann }
135569a74367SOliver-Rainer Wittmann 
SetHelp(const String & rStr)135669a74367SOliver-Rainer Wittmann void SwInputField::SetHelp(const String & rStr)
135769a74367SOliver-Rainer Wittmann {
135869a74367SOliver-Rainer Wittmann     aHelp = rStr;
135969a74367SOliver-Rainer Wittmann }
136069a74367SOliver-Rainer Wittmann 
GetHelp() const136169a74367SOliver-Rainer Wittmann String SwInputField::GetHelp() const
136269a74367SOliver-Rainer Wittmann {
136369a74367SOliver-Rainer Wittmann     return aHelp;
136469a74367SOliver-Rainer Wittmann }
136569a74367SOliver-Rainer Wittmann 
SetToolTip(const String & rStr)136669a74367SOliver-Rainer Wittmann void SwInputField::SetToolTip(const String & rStr)
136769a74367SOliver-Rainer Wittmann {
136869a74367SOliver-Rainer Wittmann     aToolTip = rStr;
136969a74367SOliver-Rainer Wittmann }
137069a74367SOliver-Rainer Wittmann 
GetToolTip() const137169a74367SOliver-Rainer Wittmann String SwInputField::GetToolTip() const
137269a74367SOliver-Rainer Wittmann {
137369a74367SOliver-Rainer Wittmann     return aToolTip;
137469a74367SOliver-Rainer Wittmann }
137569a74367SOliver-Rainer Wittmann 
GetSubType() const137669a74367SOliver-Rainer Wittmann sal_uInt16 SwInputField::GetSubType() const
137769a74367SOliver-Rainer Wittmann {
137869a74367SOliver-Rainer Wittmann     return nSubType;
137969a74367SOliver-Rainer Wittmann }
138069a74367SOliver-Rainer Wittmann 
SetSubType(sal_uInt16 nSub)138169a74367SOliver-Rainer Wittmann void SwInputField::SetSubType(sal_uInt16 nSub)
138269a74367SOliver-Rainer Wittmann {
138369a74367SOliver-Rainer Wittmann     nSubType = nSub;
138469a74367SOliver-Rainer Wittmann }
1385cdf0e10cSrcweir 
1386*721f84f2Smseidel /* vim: set noet sw=4 ts=4: */
1387