xref: /aoo41x/main/sw/source/core/fields/expfld.cxx (revision 1bf9188d)
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
10efeef26fSAndrew Rist  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist  *
13efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17efeef26fSAndrew Rist  * specific language governing permissions and limitations
18efeef26fSAndrew Rist  * under the License.
19efeef26fSAndrew Rist  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <hintids.hxx>
28cdf0e10cSrcweir #include <unotools/collatorwrapper.hxx>
29cdf0e10cSrcweir #include <unotools/charclass.hxx>
30cdf0e10cSrcweir #include <editeng/unolingu.hxx>
31cdf0e10cSrcweir #include <svx/pageitem.hxx>
32cdf0e10cSrcweir #include <editeng/langitem.hxx>
33cdf0e10cSrcweir #include <editeng/fontitem.hxx>
34cdf0e10cSrcweir #include <com/sun/star/text/SetVariableType.hpp>
35cdf0e10cSrcweir #include <unofield.hxx>
36cdf0e10cSrcweir #include <frmfmt.hxx>
37cdf0e10cSrcweir #include <fmtfld.hxx>
38cdf0e10cSrcweir #include <txtfld.hxx>
39cdf0e10cSrcweir #include <fmtanchr.hxx>
40cdf0e10cSrcweir #include <txtftn.hxx>
41cdf0e10cSrcweir #include <doc.hxx>
42cdf0e10cSrcweir #include <layfrm.hxx>
43cdf0e10cSrcweir #include <pagefrm.hxx>
44cdf0e10cSrcweir #include <cntfrm.hxx>
45cdf0e10cSrcweir #include <rootfrm.hxx>
46cdf0e10cSrcweir #include <tabfrm.hxx>
47cdf0e10cSrcweir #include <flyfrm.hxx>
48cdf0e10cSrcweir #include <ftnfrm.hxx>
49cdf0e10cSrcweir #include <rowfrm.hxx>
50cdf0e10cSrcweir #include <expfld.hxx>
51cdf0e10cSrcweir #include <usrfld.hxx>
52cdf0e10cSrcweir #include <ndtxt.hxx>
53cdf0e10cSrcweir #include <calc.hxx>
54cdf0e10cSrcweir #include <pam.hxx>
55cdf0e10cSrcweir #include <docfld.hxx>
56cdf0e10cSrcweir #include <swcache.hxx>
57cdf0e10cSrcweir #include <swtable.hxx>
58cdf0e10cSrcweir #include <breakit.hxx>
59cdf0e10cSrcweir #include <SwStyleNameMapper.hxx>
60cdf0e10cSrcweir #include <unofldmid.h>
61cdf0e10cSrcweir #include <numrule.hxx>
62cdf0e10cSrcweir #include <switerator.hxx>
63cdf0e10cSrcweir 
64cdf0e10cSrcweir using namespace ::com::sun::star;
65cdf0e10cSrcweir using namespace ::com::sun::star::text;
66cdf0e10cSrcweir using ::rtl::OUString;
67cdf0e10cSrcweir 
SV_IMPL_PTRARR(_SwSeqFldList,_SeqFldLstElem *)68cdf0e10cSrcweir SV_IMPL_PTRARR( _SwSeqFldList, _SeqFldLstElem* )
69cdf0e10cSrcweir 
70cdf0e10cSrcweir //-----------------------------------------------------------------------------
71cdf0e10cSrcweir sal_Int16 lcl_SubTypeToAPI(sal_uInt16 nSubType)
72cdf0e10cSrcweir {
73cdf0e10cSrcweir 		sal_Int16 nRet = 0;
74cdf0e10cSrcweir 		switch(nSubType)
75cdf0e10cSrcweir 		{
76cdf0e10cSrcweir 			case nsSwGetSetExpType::GSE_EXPR:
77cdf0e10cSrcweir                 nRet = SetVariableType::VAR;      // 0
78cdf0e10cSrcweir                 break;
79cdf0e10cSrcweir 			case nsSwGetSetExpType::GSE_SEQ:
80cdf0e10cSrcweir                 nRet = SetVariableType::SEQUENCE; // 1
81cdf0e10cSrcweir                 break;
82cdf0e10cSrcweir 			case nsSwGetSetExpType::GSE_FORMULA:
83cdf0e10cSrcweir                 nRet = SetVariableType::FORMULA;  // 2
84cdf0e10cSrcweir                 break;
85cdf0e10cSrcweir 			case nsSwGetSetExpType::GSE_STRING:
86cdf0e10cSrcweir                 nRet = SetVariableType::STRING;   // 3
87cdf0e10cSrcweir                 break;
88cdf0e10cSrcweir 		}
89cdf0e10cSrcweir 		return nRet;
90cdf0e10cSrcweir }
91cdf0e10cSrcweir //-----------------------------------------------------------------------------
lcl_APIToSubType(const uno::Any & rAny)92cdf0e10cSrcweir sal_Int32 lcl_APIToSubType(const uno::Any& rAny)
93cdf0e10cSrcweir {
94cdf0e10cSrcweir 		sal_Int16 nVal = 0;
95cdf0e10cSrcweir 		rAny >>= nVal;
96cdf0e10cSrcweir 		sal_Int32 nSet = 0;
97cdf0e10cSrcweir 		switch(nVal)
98cdf0e10cSrcweir 		{
99cdf0e10cSrcweir 			case SetVariableType::VAR:		nSet = nsSwGetSetExpType::GSE_EXPR;  break;
100cdf0e10cSrcweir 			case SetVariableType::SEQUENCE: nSet = nsSwGetSetExpType::GSE_SEQ;  break;
101cdf0e10cSrcweir 			case SetVariableType::FORMULA:  nSet = nsSwGetSetExpType::GSE_FORMULA; break;
102cdf0e10cSrcweir 			case SetVariableType::STRING:	nSet = nsSwGetSetExpType::GSE_STRING;	break;
103cdf0e10cSrcweir 			default:
104cdf0e10cSrcweir 				DBG_ERROR("wrong value");
105cdf0e10cSrcweir 				nSet = -1;
106cdf0e10cSrcweir 		}
107cdf0e10cSrcweir 		return nSet;
108cdf0e10cSrcweir }
109cdf0e10cSrcweir 
110cdf0e10cSrcweir //-----------------------------------------------------------------------------
111cdf0e10cSrcweir 
ReplacePoint(String & rTmpName,sal_Bool bWithCommandType)112cdf0e10cSrcweir void ReplacePoint( String& rTmpName, sal_Bool bWithCommandType )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir     // replace first and last (if bWithCommandType: last two) dot Ersten und letzten Punkt ersetzen, da in Tabellennamen Punkte erlaubt sind
115cdf0e10cSrcweir     // since table names may contain dots
116cdf0e10cSrcweir 
117cdf0e10cSrcweir 	xub_StrLen nLen = rTmpName.Len();
118cdf0e10cSrcweir 	sal_Unicode *pStr = rTmpName.GetBufferAccess(), *pBackStr = pStr + nLen;
119cdf0e10cSrcweir 
120cdf0e10cSrcweir     long nBackCount = bWithCommandType ? 2 : 1;
121cdf0e10cSrcweir     xub_StrLen i;
122cdf0e10cSrcweir 
123cdf0e10cSrcweir     for( i = nLen; i; --i, pBackStr-- )
124cdf0e10cSrcweir 		if( '.' == *pBackStr )
125cdf0e10cSrcweir 		{
126cdf0e10cSrcweir 			*pBackStr = DB_DELIM;
127cdf0e10cSrcweir             if(!--nBackCount)
128cdf0e10cSrcweir                 break;
129cdf0e10cSrcweir 		}
130cdf0e10cSrcweir 	for( i = 0; i < nLen; ++i, ++pStr )
131cdf0e10cSrcweir 		if( '.' == *pStr )
132cdf0e10cSrcweir 		{
133cdf0e10cSrcweir 			*pStr = DB_DELIM;
134cdf0e10cSrcweir 			break;
135cdf0e10cSrcweir 		}
136cdf0e10cSrcweir }
137cdf0e10cSrcweir 
GetFirstTxtNode(const SwDoc & rDoc,SwPosition & rPos,const SwCntntFrm * pCFrm,Point & rPt)138cdf0e10cSrcweir SwTxtNode* GetFirstTxtNode( const SwDoc& rDoc, SwPosition& rPos,
139cdf0e10cSrcweir 							const SwCntntFrm *pCFrm, Point &rPt )
140cdf0e10cSrcweir {
141cdf0e10cSrcweir 	SwTxtNode* pTxtNode = 0;
142cdf0e10cSrcweir 	if ( !pCFrm )
143cdf0e10cSrcweir 	{
144cdf0e10cSrcweir         const SwNodes& rNodes = rDoc.GetNodes();
145cdf0e10cSrcweir         rPos.nNode = *rNodes.GetEndOfContent().StartOfSectionNode();
146cdf0e10cSrcweir 		SwCntntNode* pCNd;
147cdf0e10cSrcweir         while( 0 != (pCNd = rNodes.GoNext( &rPos.nNode ) ) &&
148cdf0e10cSrcweir 				0 == ( pTxtNode = pCNd->GetTxtNode() ) )
149cdf0e10cSrcweir 						;
150cdf0e10cSrcweir 		ASSERT( pTxtNode, "wo ist der 1.TextNode" );
151cdf0e10cSrcweir 		rPos.nContent.Assign( pTxtNode, 0 );
152cdf0e10cSrcweir 	}
153cdf0e10cSrcweir 	else if ( !pCFrm->IsValid() )
154cdf0e10cSrcweir 	{
155cdf0e10cSrcweir 		pTxtNode = (SwTxtNode*)pCFrm->GetNode();
156cdf0e10cSrcweir 		rPos.nNode = *pTxtNode;
157cdf0e10cSrcweir 		rPos.nContent.Assign( pTxtNode, 0 );
158cdf0e10cSrcweir 	}
159cdf0e10cSrcweir 	else
160cdf0e10cSrcweir 	{
161cdf0e10cSrcweir 		pCFrm->GetCrsrOfst( &rPos, rPt );
162cdf0e10cSrcweir 		pTxtNode = rPos.nNode.GetNode().GetTxtNode();
163cdf0e10cSrcweir 	}
164cdf0e10cSrcweir 	return pTxtNode;
165cdf0e10cSrcweir }
166cdf0e10cSrcweir 
GetBodyTxtNode(const SwDoc & rDoc,SwPosition & rPos,const SwFrm & rFrm)167cdf0e10cSrcweir const SwTxtNode* GetBodyTxtNode( const SwDoc& rDoc, SwPosition& rPos,
168cdf0e10cSrcweir 								const SwFrm& rFrm )
169cdf0e10cSrcweir {
170cdf0e10cSrcweir 	const SwLayoutFrm* pLayout = (SwLayoutFrm*)rFrm.GetUpper();
171cdf0e10cSrcweir 	const SwTxtNode* pTxtNode = 0;
172cdf0e10cSrcweir 
173cdf0e10cSrcweir 	while( pLayout )
174cdf0e10cSrcweir 	{
175cdf0e10cSrcweir 		if( pLayout->IsFlyFrm() )
176cdf0e10cSrcweir 		{
177cdf0e10cSrcweir 			// hole das FlyFormat
178cdf0e10cSrcweir 			SwFrmFmt* pFlyFmt = ((SwFlyFrm*)pLayout)->GetFmt();
179cdf0e10cSrcweir 			ASSERT( pFlyFmt, "kein FlyFormat gefunden, wo steht das Feld" );
180cdf0e10cSrcweir 
181cdf0e10cSrcweir 			const SwFmtAnchor &rAnchor = pFlyFmt->GetAnchor();
182cdf0e10cSrcweir 
183cdf0e10cSrcweir 			if( FLY_AT_FLY == rAnchor.GetAnchorId() )
184cdf0e10cSrcweir 			{
185cdf0e10cSrcweir 				// und der Fly muss irgendwo angehaengt sein, also
186cdf0e10cSrcweir 				// den befragen
187cdf0e10cSrcweir                 pLayout = (SwLayoutFrm*)((SwFlyFrm*)pLayout)->GetAnchorFrm();
188cdf0e10cSrcweir 				continue;
189cdf0e10cSrcweir 			}
190cdf0e10cSrcweir             else if ((FLY_AT_PARA == rAnchor.GetAnchorId()) ||
191cdf0e10cSrcweir                      (FLY_AT_CHAR == rAnchor.GetAnchorId()) ||
192cdf0e10cSrcweir                      (FLY_AS_CHAR == rAnchor.GetAnchorId()))
193cdf0e10cSrcweir 			{
194cdf0e10cSrcweir 				ASSERT( rAnchor.GetCntntAnchor(), "keine gueltige Position" );
195cdf0e10cSrcweir 				rPos = *rAnchor.GetCntntAnchor();
196cdf0e10cSrcweir 				pTxtNode = rPos.nNode.GetNode().GetTxtNode();
197cdf0e10cSrcweir                 if ( FLY_AT_PARA == rAnchor.GetAnchorId() )
198cdf0e10cSrcweir                 {
199cdf0e10cSrcweir                     const_cast<SwTxtNode*>(pTxtNode)->MakeStartIndex(
200cdf0e10cSrcweir                             &rPos.nContent );
201cdf0e10cSrcweir // oder doch besser das Ende vom (Anker-)TextNode nehmen ??
202cdf0e10cSrcweir //					((SwTxtNode*)pTxtNode)->MakeEndIndex( &rPos.nContent );
203cdf0e10cSrcweir                 }
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 				// noch nicht abbrechen, kann ja auch noch im
206cdf0e10cSrcweir 				// Header/Footer/Footnote/Fly stehen !!
207cdf0e10cSrcweir                 pLayout = ((SwFlyFrm*)pLayout)->GetAnchorFrm()
208cdf0e10cSrcweir                             ? ((SwFlyFrm*)pLayout)->GetAnchorFrm()->GetUpper() : 0;
209cdf0e10cSrcweir 				continue;
210cdf0e10cSrcweir 			}
211cdf0e10cSrcweir 			else
212cdf0e10cSrcweir 			{
213cdf0e10cSrcweir 				pLayout->FindPageFrm()->GetCntntPosition(
214cdf0e10cSrcweir 												pLayout->Frm().Pos(), rPos );
215cdf0e10cSrcweir 				pTxtNode = rPos.nNode.GetNode().GetTxtNode();
216cdf0e10cSrcweir 			}
217cdf0e10cSrcweir 		}
218cdf0e10cSrcweir 		else if( pLayout->IsFtnFrm() )
219cdf0e10cSrcweir 		{
220cdf0e10cSrcweir 			// hole den Node vom Anker
221cdf0e10cSrcweir 			const SwTxtFtn* pFtn = ((SwFtnFrm*)pLayout)->GetAttr();
222cdf0e10cSrcweir 			pTxtNode = &pFtn->GetTxtNode();
223cdf0e10cSrcweir 			rPos.nNode = *pTxtNode;
224cdf0e10cSrcweir 			rPos.nContent = *pFtn->GetStart();
225cdf0e10cSrcweir 		}
226cdf0e10cSrcweir 		else if( pLayout->IsHeaderFrm() || pLayout->IsFooterFrm() )
227cdf0e10cSrcweir 		{
228cdf0e10cSrcweir 			const SwCntntFrm* pCntFrm;
229cdf0e10cSrcweir 			const SwPageFrm* pPgFrm = pLayout->FindPageFrm();
230cdf0e10cSrcweir 			if( pLayout->IsHeaderFrm() )
231cdf0e10cSrcweir 			{
232cdf0e10cSrcweir 				const SwTabFrm *pTab;
233cdf0e10cSrcweir 				if( 0 != ( pCntFrm = pPgFrm->FindFirstBodyCntnt()) &&
234cdf0e10cSrcweir 					0 != (pTab = pCntFrm->FindTabFrm()) && pTab->IsFollow() &&
235cdf0e10cSrcweir                     pTab->GetTable()->GetRowsToRepeat() > 0 &&
236cdf0e10cSrcweir                     pTab->IsInHeadline( *pCntFrm ) )
237cdf0e10cSrcweir                 {
238cdf0e10cSrcweir 					// take the next line
239cdf0e10cSrcweir                     const SwLayoutFrm* pRow = pTab->GetFirstNonHeadlineRow();
240cdf0e10cSrcweir                     pCntFrm = pRow->ContainsCntnt();
241cdf0e10cSrcweir 				}
242cdf0e10cSrcweir 			}
243cdf0e10cSrcweir 			else
244cdf0e10cSrcweir 				pCntFrm = pPgFrm->FindLastBodyCntnt();
245cdf0e10cSrcweir 
246cdf0e10cSrcweir 			if( pCntFrm )
247cdf0e10cSrcweir 			{
248cdf0e10cSrcweir 				pTxtNode = pCntFrm->GetNode()->GetTxtNode();
249cdf0e10cSrcweir 				rPos.nNode = *pTxtNode;
250cdf0e10cSrcweir 				((SwTxtNode*)pTxtNode)->MakeEndIndex( &rPos.nContent );
251cdf0e10cSrcweir 			}
252cdf0e10cSrcweir 			else
253cdf0e10cSrcweir 			{
254cdf0e10cSrcweir 				Point aPt( pLayout->Frm().Pos() );
255cdf0e10cSrcweir 				aPt.Y()++;		// aus dem Header raus
256cdf0e10cSrcweir 				pCntFrm = pPgFrm->GetCntntPos( aPt, sal_False, sal_True, sal_False );
257cdf0e10cSrcweir 				pTxtNode = GetFirstTxtNode( rDoc, rPos, pCntFrm, aPt );
258cdf0e10cSrcweir 			}
259cdf0e10cSrcweir 		}
260cdf0e10cSrcweir 		else
261cdf0e10cSrcweir 		{
262cdf0e10cSrcweir 			pLayout = pLayout->GetUpper();
263cdf0e10cSrcweir 			continue;
264cdf0e10cSrcweir 		}
265cdf0e10cSrcweir 		break;		// gefunden und beende die Schleife
266cdf0e10cSrcweir 	}
267cdf0e10cSrcweir 	return pTxtNode;
268cdf0e10cSrcweir }
269cdf0e10cSrcweir 
270cdf0e10cSrcweir /*--------------------------------------------------------------------
271cdf0e10cSrcweir 	Beschreibung: SwSetExpFieldType by JP
272cdf0e10cSrcweir  --------------------------------------------------------------------*/
273cdf0e10cSrcweir 
SwGetExpFieldType(SwDoc * pDc)274cdf0e10cSrcweir SwGetExpFieldType::SwGetExpFieldType(SwDoc* pDc)
275cdf0e10cSrcweir 	: SwValueFieldType( pDc, RES_GETEXPFLD )
276cdf0e10cSrcweir {
277cdf0e10cSrcweir }
278cdf0e10cSrcweir 
Copy() const279cdf0e10cSrcweir SwFieldType* SwGetExpFieldType::Copy() const
280cdf0e10cSrcweir {
281cdf0e10cSrcweir 	return new SwGetExpFieldType(GetDoc());
282cdf0e10cSrcweir }
283cdf0e10cSrcweir 
Modify(const SfxPoolItem *,const SfxPoolItem * pNew)284cdf0e10cSrcweir void SwGetExpFieldType::Modify( const SfxPoolItem*, const SfxPoolItem* pNew )
285cdf0e10cSrcweir {
286cdf0e10cSrcweir 	if( pNew && RES_DOCPOS_UPDATE == pNew->Which() )
287cdf0e10cSrcweir 		NotifyClients( 0, pNew );
288cdf0e10cSrcweir 	// sonst nichts weiter expandieren
289cdf0e10cSrcweir }
290cdf0e10cSrcweir 
291cdf0e10cSrcweir /*--------------------------------------------------------------------
292cdf0e10cSrcweir 	Beschreibung: SwGetExpField by JP
293cdf0e10cSrcweir  --------------------------------------------------------------------*/
294cdf0e10cSrcweir 
SwGetExpField(SwGetExpFieldType * pTyp,const String & rFormel,sal_uInt16 nSub,sal_uLong nFmt)295cdf0e10cSrcweir SwGetExpField::SwGetExpField(SwGetExpFieldType* pTyp, const String& rFormel,
296cdf0e10cSrcweir 							sal_uInt16 nSub, sal_uLong nFmt)
297cdf0e10cSrcweir 	: SwFormulaField( pTyp, nFmt, 0.0 ),
298cdf0e10cSrcweir 	bIsInBodyTxt( sal_True ),
299cdf0e10cSrcweir     nSubType(nSub),
300cdf0e10cSrcweir 	bLateInitialization( false )
301cdf0e10cSrcweir {
302cdf0e10cSrcweir 	SetFormula( rFormel );
303cdf0e10cSrcweir }
304cdf0e10cSrcweir 
Expand() const305cdf0e10cSrcweir String SwGetExpField::Expand() const
306cdf0e10cSrcweir {
307cdf0e10cSrcweir 	if(nSubType & nsSwExtendedSubType::SUB_CMD)
308cdf0e10cSrcweir 		return GetFormula();
309cdf0e10cSrcweir 	else
310cdf0e10cSrcweir 		return sExpand;
311cdf0e10cSrcweir }
312cdf0e10cSrcweir 
GetFieldName() const313cdf0e10cSrcweir String SwGetExpField::GetFieldName() const
314cdf0e10cSrcweir {
315cdf0e10cSrcweir     String aStr( SwFieldType::GetTypeStr(
316cdf0e10cSrcweir         static_cast<sal_uInt16>(((nsSwGetSetExpType::GSE_FORMULA & nSubType) != 0)
317cdf0e10cSrcweir                                             ? TYP_FORMELFLD
318cdf0e10cSrcweir                                             : TYP_GETFLD ) ));
319cdf0e10cSrcweir     aStr += ' ';
320cdf0e10cSrcweir     aStr += GetFormula();
321cdf0e10cSrcweir     return aStr;
322cdf0e10cSrcweir }
323cdf0e10cSrcweir 
Copy() const324cdf0e10cSrcweir SwField* SwGetExpField::Copy() const
325cdf0e10cSrcweir {
326cdf0e10cSrcweir 	SwGetExpField *pTmp = new SwGetExpField((SwGetExpFieldType*)GetTyp(),
327cdf0e10cSrcweir 											GetFormula(), nSubType, GetFormat());
328cdf0e10cSrcweir 	pTmp->SetLanguage(GetLanguage());
329cdf0e10cSrcweir 	pTmp->SwValueField::SetValue(GetValue());
330cdf0e10cSrcweir 	pTmp->sExpand 		= sExpand;
331cdf0e10cSrcweir 	pTmp->bIsInBodyTxt 	= bIsInBodyTxt;
332cdf0e10cSrcweir     pTmp->SetAutomaticLanguage(IsAutomaticLanguage());
333cdf0e10cSrcweir 	if( bLateInitialization )
334cdf0e10cSrcweir 		pTmp->SetLateInitialization();
335cdf0e10cSrcweir 
336cdf0e10cSrcweir 	return pTmp;
337cdf0e10cSrcweir }
338cdf0e10cSrcweir 
ChangeExpansion(const SwFrm & rFrm,const SwTxtFld & rFld)339cdf0e10cSrcweir void SwGetExpField::ChangeExpansion( const SwFrm& rFrm, const SwTxtFld& rFld )
340cdf0e10cSrcweir {
341cdf0e10cSrcweir 	if( bIsInBodyTxt )		// nur Felder in Footer, Header, FootNote, Flys
342cdf0e10cSrcweir 		return;
343cdf0e10cSrcweir 
344cdf0e10cSrcweir 	ASSERT( !rFrm.IsInDocBody(), "Flag ist nicht richtig, Frame steht im DocBody" );
345cdf0e10cSrcweir 
346cdf0e10cSrcweir 	// bestimme mal das Dokument (oder geht es noch einfacher?)
347cdf0e10cSrcweir 	const SwTxtNode* pTxtNode = &rFld.GetTxtNode();
348cdf0e10cSrcweir 	SwDoc& rDoc = *(SwDoc*)pTxtNode->GetDoc();
349cdf0e10cSrcweir 
350cdf0e10cSrcweir 	// einen Index fuers bestimmen vom TextNode anlegen
351cdf0e10cSrcweir 	SwPosition aPos( SwNodeIndex( rDoc.GetNodes() ) );
352cdf0e10cSrcweir 	pTxtNode = GetBodyTxtNode( rDoc, aPos, rFrm );
353cdf0e10cSrcweir 
354cdf0e10cSrcweir 	// Wenn kein Layout vorhanden, kommt es in Kopf und Fusszeilen dazu
355cdf0e10cSrcweir 	// das ChnageExpansion uebers Layout-Formatieren aufgerufen wird
356cdf0e10cSrcweir 	// aber kein TxtNode vorhanden ist
357cdf0e10cSrcweir 	//
358cdf0e10cSrcweir 	if(!pTxtNode)
359cdf0e10cSrcweir 		return;
360cdf0e10cSrcweir 	// #i82544#
361cdf0e10cSrcweir     if( bLateInitialization )
362cdf0e10cSrcweir 	{
363cdf0e10cSrcweir 		SwFieldType* pSetExpFld = rDoc.GetFldType(RES_SETEXPFLD, GetFormula(), sal_False);
364cdf0e10cSrcweir 		if( pSetExpFld )
365cdf0e10cSrcweir 		{
366cdf0e10cSrcweir 			bLateInitialization = false;
367cdf0e10cSrcweir 			if( !(GetSubType() & nsSwGetSetExpType::GSE_STRING) &&
368cdf0e10cSrcweir 				static_cast< SwSetExpFieldType* >(pSetExpFld)->GetType() == nsSwGetSetExpType::GSE_STRING )
369cdf0e10cSrcweir 			SetSubType( nsSwGetSetExpType::GSE_STRING );
370cdf0e10cSrcweir 		}
371cdf0e10cSrcweir 	}
372cdf0e10cSrcweir 
373cdf0e10cSrcweir 	_SetGetExpFld aEndFld( aPos.nNode, &rFld, &aPos.nContent );
374cdf0e10cSrcweir 	if(GetSubType() & nsSwGetSetExpType::GSE_STRING)
375cdf0e10cSrcweir 	{
376cdf0e10cSrcweir 		SwHash** ppHashTbl;
377cdf0e10cSrcweir 		sal_uInt16 nSize;
378cdf0e10cSrcweir 		rDoc.FldsToExpand( ppHashTbl, nSize, aEndFld );
379cdf0e10cSrcweir 		LookString( ppHashTbl, nSize, GetFormula(), sExpand );
380cdf0e10cSrcweir 		::DeleteHashTable( ppHashTbl, nSize );		// HashTabelle loeschen
381cdf0e10cSrcweir 	}
382cdf0e10cSrcweir 	else
383cdf0e10cSrcweir 	{
384cdf0e10cSrcweir 		// fuelle den Calculator mit den Werten
385cdf0e10cSrcweir 		SwCalc aCalc( rDoc );
386cdf0e10cSrcweir 		rDoc.FldsToCalc(aCalc, aEndFld);
387cdf0e10cSrcweir 
388cdf0e10cSrcweir 		// Wert berechnen
389cdf0e10cSrcweir 		SetValue(aCalc.Calculate(GetFormula()).GetDouble());
390cdf0e10cSrcweir 
391cdf0e10cSrcweir 		// Auswertung nach Format
392cdf0e10cSrcweir 		sExpand = ((SwValueFieldType*)GetTyp())->ExpandValue(
393cdf0e10cSrcweir 								GetValue(), GetFormat(), GetLanguage());
394cdf0e10cSrcweir 	}
395cdf0e10cSrcweir }
396cdf0e10cSrcweir 
GetPar2() const397cdf0e10cSrcweir String SwGetExpField::GetPar2() const
398cdf0e10cSrcweir {
399cdf0e10cSrcweir 	return GetFormula();
400cdf0e10cSrcweir }
401cdf0e10cSrcweir 
SetPar2(const String & rStr)402cdf0e10cSrcweir void SwGetExpField::SetPar2(const String& rStr)
403cdf0e10cSrcweir {
404cdf0e10cSrcweir 	SetFormula(rStr);
405cdf0e10cSrcweir }
406cdf0e10cSrcweir 
GetSubType() const407cdf0e10cSrcweir sal_uInt16 SwGetExpField::GetSubType() const
408cdf0e10cSrcweir {
409cdf0e10cSrcweir 	return nSubType;
410cdf0e10cSrcweir }
411cdf0e10cSrcweir 
SetSubType(sal_uInt16 nType)412cdf0e10cSrcweir void SwGetExpField::SetSubType(sal_uInt16 nType)
413cdf0e10cSrcweir {
414cdf0e10cSrcweir 	nSubType = nType;
415cdf0e10cSrcweir }
416cdf0e10cSrcweir 
SetLanguage(sal_uInt16 nLng)417cdf0e10cSrcweir void SwGetExpField::SetLanguage(sal_uInt16 nLng)
418cdf0e10cSrcweir {
419cdf0e10cSrcweir 	if (nSubType & nsSwExtendedSubType::SUB_CMD)
420cdf0e10cSrcweir 		SwField::SetLanguage(nLng);
421cdf0e10cSrcweir 	else
422cdf0e10cSrcweir 		SwValueField::SetLanguage(nLng);
423cdf0e10cSrcweir }
424cdf0e10cSrcweir 
QueryValue(uno::Any & rAny,sal_uInt16 nWhichId) const425cdf0e10cSrcweir sal_Bool SwGetExpField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
426cdf0e10cSrcweir {
427cdf0e10cSrcweir     switch( nWhichId )
428cdf0e10cSrcweir 	{
429cdf0e10cSrcweir 	case FIELD_PROP_DOUBLE:
430cdf0e10cSrcweir 		rAny <<= GetValue();
431cdf0e10cSrcweir 		break;
432cdf0e10cSrcweir 	case FIELD_PROP_FORMAT:
433cdf0e10cSrcweir 		rAny <<= (sal_Int32)GetFormat();
434cdf0e10cSrcweir 		break;
435cdf0e10cSrcweir 	case FIELD_PROP_USHORT1:
436cdf0e10cSrcweir 		 rAny <<= (sal_Int16)nSubType;
437cdf0e10cSrcweir 		break;
438cdf0e10cSrcweir 	case FIELD_PROP_PAR1:
439cdf0e10cSrcweir 	 	rAny <<= OUString( GetFormula() );
440cdf0e10cSrcweir 		break;
441cdf0e10cSrcweir 	case FIELD_PROP_SUBTYPE:
442cdf0e10cSrcweir 		{
443cdf0e10cSrcweir 			sal_Int16 nRet = lcl_SubTypeToAPI(GetSubType() & 0xff);
444cdf0e10cSrcweir 			rAny <<= nRet;
445cdf0e10cSrcweir 		}
446cdf0e10cSrcweir 		break;
447cdf0e10cSrcweir 	case FIELD_PROP_BOOL2:
448cdf0e10cSrcweir 		{
449cdf0e10cSrcweir 			sal_Bool bTmp = 0 != (nSubType & nsSwExtendedSubType::SUB_CMD);
450cdf0e10cSrcweir 			rAny.setValue(&bTmp, ::getBooleanCppuType());
451cdf0e10cSrcweir 		}
452cdf0e10cSrcweir 		break;
453cdf0e10cSrcweir 	case FIELD_PROP_PAR4:
454cdf0e10cSrcweir 		rAny <<= rtl::OUString(GetExpStr());
455cdf0e10cSrcweir 		break;
456cdf0e10cSrcweir 	default:
457cdf0e10cSrcweir         return SwField::QueryValue(rAny, nWhichId);
458cdf0e10cSrcweir     }
459cdf0e10cSrcweir 	return sal_True;
460cdf0e10cSrcweir }
461cdf0e10cSrcweir 
PutValue(const uno::Any & rAny,sal_uInt16 nWhichId)462cdf0e10cSrcweir sal_Bool SwGetExpField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
463cdf0e10cSrcweir {
464cdf0e10cSrcweir 	sal_Int32 nTmp = 0;
465cdf0e10cSrcweir 	String sTmp;
466cdf0e10cSrcweir     switch( nWhichId )
467cdf0e10cSrcweir 	{
468cdf0e10cSrcweir 	case FIELD_PROP_DOUBLE:
469cdf0e10cSrcweir 		SwValueField::SetValue(*(double*) rAny.getValue());
470cdf0e10cSrcweir 		break;
471cdf0e10cSrcweir 	case FIELD_PROP_FORMAT:
472cdf0e10cSrcweir 		rAny >>= nTmp;
473cdf0e10cSrcweir 		SetFormat(nTmp);
474cdf0e10cSrcweir 		break;
475cdf0e10cSrcweir 	case FIELD_PROP_USHORT1:
476cdf0e10cSrcweir 		 rAny >>= nTmp;
477cdf0e10cSrcweir 		 nSubType = static_cast<sal_uInt16>(nTmp);
478cdf0e10cSrcweir 		break;
479cdf0e10cSrcweir 	case FIELD_PROP_PAR1:
480cdf0e10cSrcweir 	 	SetFormula( ::GetString( rAny, sTmp ));
481cdf0e10cSrcweir 		break;
482cdf0e10cSrcweir 	case FIELD_PROP_SUBTYPE:
483cdf0e10cSrcweir 		nTmp = lcl_APIToSubType(rAny);
484cdf0e10cSrcweir 		if( nTmp >=0 )
485cdf0e10cSrcweir 			SetSubType( static_cast<sal_uInt16>((GetSubType() & 0xff00) | nTmp));
486cdf0e10cSrcweir 		break;
487cdf0e10cSrcweir 	case FIELD_PROP_BOOL2:
488cdf0e10cSrcweir 		if(*(sal_Bool*) rAny.getValue())
489cdf0e10cSrcweir 			nSubType |= nsSwExtendedSubType::SUB_CMD;
490cdf0e10cSrcweir 		else
491cdf0e10cSrcweir 			nSubType &= (~nsSwExtendedSubType::SUB_CMD);
492cdf0e10cSrcweir 		break;
493cdf0e10cSrcweir 	case FIELD_PROP_PAR4:
494cdf0e10cSrcweir 		ChgExpStr(::GetString( rAny, sTmp ));
495cdf0e10cSrcweir 		break;
496cdf0e10cSrcweir 	default:
497cdf0e10cSrcweir         return SwField::PutValue(rAny, nWhichId);
498cdf0e10cSrcweir     }
499cdf0e10cSrcweir 	return sal_True;
500cdf0e10cSrcweir }
501cdf0e10cSrcweir 
SwSetExpFieldType(SwDoc * pDc,const String & rName,sal_uInt16 nTyp)502cdf0e10cSrcweir SwSetExpFieldType::SwSetExpFieldType( SwDoc* pDc, const String& rName, sal_uInt16 nTyp )
503cdf0e10cSrcweir 	: SwValueFieldType( pDc, RES_SETEXPFLD ),
504cdf0e10cSrcweir 	sName( rName ),
505cdf0e10cSrcweir 	pOutlChgNd( 0 ),
506cdf0e10cSrcweir 	sDelim( String::CreateFromAscii( "." ) ),
507cdf0e10cSrcweir 	nType(nTyp), nLevel( UCHAR_MAX ),
508cdf0e10cSrcweir 	bDeleted( sal_False )
509cdf0e10cSrcweir {
510cdf0e10cSrcweir 	if( ( nsSwGetSetExpType::GSE_SEQ | nsSwGetSetExpType::GSE_STRING ) & nType )
511cdf0e10cSrcweir 		EnableFormat(sal_False);	// Numberformatter nicht einsetzen
512cdf0e10cSrcweir }
513cdf0e10cSrcweir 
Copy() const514cdf0e10cSrcweir SwFieldType* SwSetExpFieldType::Copy() const
515cdf0e10cSrcweir {
516cdf0e10cSrcweir 	SwSetExpFieldType* pNew = new SwSetExpFieldType(GetDoc(), sName, nType);
517cdf0e10cSrcweir 	pNew->bDeleted = bDeleted;
518cdf0e10cSrcweir 	pNew->sDelim = sDelim;
519cdf0e10cSrcweir 	pNew->nLevel = nLevel;
520cdf0e10cSrcweir 
521cdf0e10cSrcweir 	return pNew;
522cdf0e10cSrcweir }
523cdf0e10cSrcweir 
GetName() const524cdf0e10cSrcweir const String& SwSetExpFieldType::GetName() const
525cdf0e10cSrcweir {
526cdf0e10cSrcweir 	return sName;
527cdf0e10cSrcweir }
528cdf0e10cSrcweir 
Modify(const SfxPoolItem *,const SfxPoolItem *)529cdf0e10cSrcweir void SwSetExpFieldType::Modify( const SfxPoolItem*, const SfxPoolItem* )
530cdf0e10cSrcweir {
531cdf0e10cSrcweir 	return;		// nicht weiter expandieren
532cdf0e10cSrcweir }
533cdf0e10cSrcweir 
SetSeqFormat(sal_uLong nFmt)534cdf0e10cSrcweir void SwSetExpFieldType::SetSeqFormat(sal_uLong nFmt)
535cdf0e10cSrcweir {
536cdf0e10cSrcweir 	SwIterator<SwFmtFld,SwFieldType> aIter(*this);
537c0286415SOliver-Rainer Wittmann 	for( SwFmtFld* pFmtFld = aIter.First(); pFmtFld; pFmtFld = aIter.Next() )
538c0286415SOliver-Rainer Wittmann 		pFmtFld->GetField()->ChangeFormat( nFmt );
539cdf0e10cSrcweir }
540cdf0e10cSrcweir 
GetSeqFormat()541cdf0e10cSrcweir sal_uLong SwSetExpFieldType::GetSeqFormat()
542cdf0e10cSrcweir {
543cdf0e10cSrcweir 	if( !GetDepends() )
544cdf0e10cSrcweir 		return SVX_NUM_ARABIC;
545cdf0e10cSrcweir 
546c0286415SOliver-Rainer Wittmann 	SwField *pFld = ((SwFmtFld*)GetDepends())->GetField();
547cdf0e10cSrcweir 	return pFld->GetFormat();
548cdf0e10cSrcweir }
549cdf0e10cSrcweir 
SetSeqRefNo(SwSetExpField & rFld)550cdf0e10cSrcweir sal_uInt16 SwSetExpFieldType::SetSeqRefNo( SwSetExpField& rFld )
551cdf0e10cSrcweir {
552cdf0e10cSrcweir 	if( !GetDepends() || !(nsSwGetSetExpType::GSE_SEQ & nType) )
553cdf0e10cSrcweir 		return USHRT_MAX;
554cdf0e10cSrcweir 
555cdf0e10cSrcweir extern void InsertSort( SvUShorts& rArr, sal_uInt16 nIdx, sal_uInt16* pInsPos = 0 );
556cdf0e10cSrcweir 	SvUShorts aArr( 64 );
557cdf0e10cSrcweir 
558cdf0e10cSrcweir 	sal_uInt16 n;
559cdf0e10cSrcweir 
560cdf0e10cSrcweir 	// dann testmal, ob die Nummer schon vergeben ist oder ob eine neue
561cdf0e10cSrcweir 	// bestimmt werden muss.
562cdf0e10cSrcweir 	SwIterator<SwFmtFld,SwFieldType> aIter( *this );
563cdf0e10cSrcweir 	const SwTxtNode* pNd;
564cdf0e10cSrcweir 	for( SwFmtFld* pF = aIter.First(); pF; pF = aIter.Next() )
565c0286415SOliver-Rainer Wittmann 		if( pF->GetField() != &rFld && pF->GetTxtFld() &&
566cdf0e10cSrcweir 			0 != ( pNd = pF->GetTxtFld()->GetpTxtNode() ) &&
567cdf0e10cSrcweir 			pNd->GetNodes().IsDocNodes() )
568c0286415SOliver-Rainer Wittmann 			InsertSort( aArr, ((SwSetExpField*)pF->GetField())->GetSeqNumber() );
569cdf0e10cSrcweir 
570cdf0e10cSrcweir 
571cdf0e10cSrcweir 	// teste erstmal ob die Nummer schon vorhanden ist:
572cdf0e10cSrcweir 	sal_uInt16 nNum = rFld.GetSeqNumber();
573cdf0e10cSrcweir 	if( USHRT_MAX != nNum )
574cdf0e10cSrcweir 	{
575cdf0e10cSrcweir 		for( n = 0; n < aArr.Count(); ++n )
576cdf0e10cSrcweir 			if( aArr[ n ] > nNum )
577cdf0e10cSrcweir 				return nNum;			// nicht vorhanden -> also benutzen
578cdf0e10cSrcweir 			else if( aArr[ n ] == nNum )
579cdf0e10cSrcweir 				break;					// schon vorhanden -> neue erzeugen
580cdf0e10cSrcweir 
581cdf0e10cSrcweir 		if( n == aArr.Count() )
582cdf0e10cSrcweir 			return nNum;			// nicht vorhanden -> also benutzen
583cdf0e10cSrcweir 	}
584cdf0e10cSrcweir 
585cdf0e10cSrcweir 	// alle Nummern entsprechend geflag, also bestimme die richtige Nummer
586cdf0e10cSrcweir 	for( n = 0; n < aArr.Count(); ++n )
587cdf0e10cSrcweir 		if( n != aArr[ n ] )
588cdf0e10cSrcweir 			break;
589cdf0e10cSrcweir 
590cdf0e10cSrcweir 	rFld.SetSeqNumber( n );
591cdf0e10cSrcweir 	return n;
592cdf0e10cSrcweir }
593cdf0e10cSrcweir 
GetSeqFldList(SwSeqFldList & rList)594cdf0e10cSrcweir sal_uInt16 SwSetExpFieldType::GetSeqFldList( SwSeqFldList& rList )
595cdf0e10cSrcweir {
596cdf0e10cSrcweir 	if( rList.Count() )
597cdf0e10cSrcweir 		rList.Remove( 0, rList.Count() );
598cdf0e10cSrcweir 
599cdf0e10cSrcweir 	SwIterator<SwFmtFld,SwFieldType> aIter( *this );
600cdf0e10cSrcweir 	const SwTxtNode* pNd;
601cdf0e10cSrcweir 	for( SwFmtFld* pF = aIter.First(); pF; pF = aIter.Next() )
602cdf0e10cSrcweir 		if( pF->GetTxtFld() &&
603cdf0e10cSrcweir 			0 != ( pNd = pF->GetTxtFld()->GetpTxtNode() ) &&
604cdf0e10cSrcweir 			pNd->GetNodes().IsDocNodes() )
605cdf0e10cSrcweir 		{
606cdf0e10cSrcweir             _SeqFldLstElem* pNew = new _SeqFldLstElem(
607cdf0e10cSrcweir                     pNd->GetExpandTxt( 0, (*pF->GetTxtFld()->GetStart()) + 1 ),
608c0286415SOliver-Rainer Wittmann                     ((SwSetExpField*)pF->GetField())->GetSeqNumber() );
609cdf0e10cSrcweir 			rList.InsertSort( pNew );
610cdf0e10cSrcweir 		}
611cdf0e10cSrcweir 
612cdf0e10cSrcweir 	return rList.Count();
613cdf0e10cSrcweir }
614cdf0e10cSrcweir 
615cdf0e10cSrcweir 
SetChapter(SwSetExpField & rFld,const SwNode & rNd)616cdf0e10cSrcweir void SwSetExpFieldType::SetChapter( SwSetExpField& rFld, const SwNode& rNd )
617cdf0e10cSrcweir {
618cdf0e10cSrcweir 	const SwTxtNode* pTxtNd = rNd.FindOutlineNodeOfLevel( nLevel );
619cdf0e10cSrcweir 	if( pTxtNd )
620cdf0e10cSrcweir 	{
621cdf0e10cSrcweir         SwNumRule * pRule = pTxtNd->GetNumRule();
622cdf0e10cSrcweir 
623cdf0e10cSrcweir         if (pRule)
624cdf0e10cSrcweir         {
625cdf0e10cSrcweir             // --> OD 2005-11-02 #i51089 - TUNING#
626cdf0e10cSrcweir             if ( pTxtNd->GetNum() )
627cdf0e10cSrcweir             {
628cdf0e10cSrcweir                 const SwNodeNum & aNum = *(pTxtNd->GetNum());
629cdf0e10cSrcweir 
630cdf0e10cSrcweir                 // nur die Nummer besorgen, ohne Pre-/Post-fixstrings
631cdf0e10cSrcweir                 String sNumber( pRule->MakeNumString(aNum, sal_False ));
632cdf0e10cSrcweir 
633cdf0e10cSrcweir                 if( sNumber.Len() )
634cdf0e10cSrcweir                     rFld.ChgExpStr(  ( sNumber += sDelim ) += rFld.GetExpStr() );
635cdf0e10cSrcweir             }
636cdf0e10cSrcweir             else
637cdf0e10cSrcweir             {
638cdf0e10cSrcweir                 ASSERT( false,
639cdf0e10cSrcweir                         "<SwSetExpFieldType::SetChapter(..)> - text node with numbering rule, but without number. This is a serious defect -> inform OD" );
640cdf0e10cSrcweir             }
641cdf0e10cSrcweir         }
642cdf0e10cSrcweir 	}
643cdf0e10cSrcweir }
644cdf0e10cSrcweir 
QueryValue(uno::Any & rAny,sal_uInt16 nWhichId) const645cdf0e10cSrcweir sal_Bool SwSetExpFieldType::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
646cdf0e10cSrcweir {
647cdf0e10cSrcweir     switch( nWhichId )
648cdf0e10cSrcweir 	{
649cdf0e10cSrcweir 	case FIELD_PROP_SUBTYPE:
650cdf0e10cSrcweir 		{
651cdf0e10cSrcweir 			sal_Int16 nRet = lcl_SubTypeToAPI(GetType());
652cdf0e10cSrcweir 			rAny <<= nRet;
653cdf0e10cSrcweir 		}
654cdf0e10cSrcweir 		break;
655cdf0e10cSrcweir 	case FIELD_PROP_PAR2:
656cdf0e10cSrcweir 		rAny <<= OUString(GetDelimiter());
657cdf0e10cSrcweir 		break;
658cdf0e10cSrcweir 	case FIELD_PROP_SHORT1:
659cdf0e10cSrcweir 		{
660cdf0e10cSrcweir 			sal_Int8 nRet = nLevel < MAXLEVEL? nLevel : -1;
661cdf0e10cSrcweir 			rAny <<= nRet;
662cdf0e10cSrcweir 		}
663cdf0e10cSrcweir 		break;
664cdf0e10cSrcweir 	default:
665cdf0e10cSrcweir 		DBG_ERROR("illegal property");
666cdf0e10cSrcweir 	}
667cdf0e10cSrcweir 	return sal_True;
668cdf0e10cSrcweir }
669cdf0e10cSrcweir 
PutValue(const uno::Any & rAny,sal_uInt16 nWhichId)670cdf0e10cSrcweir sal_Bool SwSetExpFieldType::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
671cdf0e10cSrcweir {
672cdf0e10cSrcweir     switch( nWhichId )
673cdf0e10cSrcweir 	{
674cdf0e10cSrcweir 	case FIELD_PROP_SUBTYPE:
675cdf0e10cSrcweir 		{
676cdf0e10cSrcweir 			sal_Int32 nSet = lcl_APIToSubType(rAny);
677cdf0e10cSrcweir 			if(nSet >=0)
678cdf0e10cSrcweir 				SetType(static_cast<sal_uInt16>(nSet));
679cdf0e10cSrcweir 		}
680cdf0e10cSrcweir 		break;
681cdf0e10cSrcweir 	case FIELD_PROP_PAR2:
682cdf0e10cSrcweir 		{
683cdf0e10cSrcweir 			String sTmp;
684cdf0e10cSrcweir 			if( ::GetString( rAny, sTmp ).Len() )
685cdf0e10cSrcweir //				SetDelimiter( sTmp.GetChar( 0 ));
686cdf0e10cSrcweir 				SetDelimiter( sTmp );
687cdf0e10cSrcweir 			else
688cdf0e10cSrcweir 				SetDelimiter(String::CreateFromAscii( " "));
689cdf0e10cSrcweir 		}
690cdf0e10cSrcweir 		break;
691cdf0e10cSrcweir 	case FIELD_PROP_SHORT1:
692cdf0e10cSrcweir 		{
693cdf0e10cSrcweir 			sal_Int8 nLvl = 0;
694cdf0e10cSrcweir 			rAny >>= nLvl;
695cdf0e10cSrcweir 			if(nLvl < 0 || nLvl >= MAXLEVEL)
696cdf0e10cSrcweir 				SetOutlineLvl(UCHAR_MAX);
697cdf0e10cSrcweir 			else
698cdf0e10cSrcweir 				SetOutlineLvl(nLvl);
699cdf0e10cSrcweir 		}
700cdf0e10cSrcweir 		break;
701cdf0e10cSrcweir 	default:
702cdf0e10cSrcweir 		DBG_ERROR("illegal property");
703cdf0e10cSrcweir 	}
704cdf0e10cSrcweir 	return sal_True;
705cdf0e10cSrcweir }
706cdf0e10cSrcweir 
InsertSort(_SeqFldLstElem * pNew)707cdf0e10cSrcweir sal_Bool SwSeqFldList::InsertSort( _SeqFldLstElem* pNew )
708cdf0e10cSrcweir {
709cdf0e10cSrcweir 	sal_Unicode* p = pNew->sDlgEntry.GetBufferAccess();
710cdf0e10cSrcweir 	while( *p )
711cdf0e10cSrcweir 	{
712cdf0e10cSrcweir 		if( *p < 0x20 )
713cdf0e10cSrcweir 			*p = 0x20;
714cdf0e10cSrcweir 		++p;
715cdf0e10cSrcweir 	}
716cdf0e10cSrcweir 
717cdf0e10cSrcweir 	sal_uInt16 nPos;
718cdf0e10cSrcweir 	sal_Bool bRet = SeekEntry( *pNew, &nPos );
719cdf0e10cSrcweir 	if( !bRet )
720cdf0e10cSrcweir 		C40_INSERT( _SeqFldLstElem, pNew, nPos );
721cdf0e10cSrcweir 	return bRet;
722cdf0e10cSrcweir }
723cdf0e10cSrcweir 
SeekEntry(const _SeqFldLstElem & rNew,sal_uInt16 * pP)724cdf0e10cSrcweir sal_Bool SwSeqFldList::SeekEntry( const _SeqFldLstElem& rNew, sal_uInt16* pP )
725cdf0e10cSrcweir {
726cdf0e10cSrcweir 	sal_uInt16 nO = Count(), nM, nU = 0;
727cdf0e10cSrcweir 	if( nO > 0 )
728cdf0e10cSrcweir 	{
729cdf0e10cSrcweir 		CollatorWrapper & rCaseColl = ::GetAppCaseCollator(),
730cdf0e10cSrcweir 						& rColl = ::GetAppCollator();
731cdf0e10cSrcweir 		const CharClass& rCC = GetAppCharClass();
732cdf0e10cSrcweir 
733cdf0e10cSrcweir 		//#59900# Die Sortierung soll die Nummer korrekt einordnen
734cdf0e10cSrcweir 		//also "10" nach "9" und nicht "10" nach "1"
735cdf0e10cSrcweir 		const String& rTmp2 = rNew.sDlgEntry;
736cdf0e10cSrcweir 		xub_StrLen nFndPos2 = 0;
737cdf0e10cSrcweir 		String sNum2( rTmp2.GetToken( 0, ' ', nFndPos2 ));
738cdf0e10cSrcweir 		sal_Bool bIsNum2IsNumeric = rCC.isAsciiNumeric( sNum2 );
739cdf0e10cSrcweir 		sal_Int32 nNum2 = bIsNum2IsNumeric ? sNum2.ToInt32() : 0;
740cdf0e10cSrcweir 
741cdf0e10cSrcweir 		nO--;
742cdf0e10cSrcweir 		while( nU <= nO )
743cdf0e10cSrcweir 		{
744cdf0e10cSrcweir 			nM = nU + ( nO - nU ) / 2;
745cdf0e10cSrcweir 
746cdf0e10cSrcweir 			//#59900# Die Sortierung soll die Nummer korrekt einordnen
747cdf0e10cSrcweir 			//also "10" nach "9" und nicht "10" nach "1"
748cdf0e10cSrcweir 			const String& rTmp1 = (*((_SeqFldLstElem**)pData + nM))->sDlgEntry;
749cdf0e10cSrcweir 			xub_StrLen nFndPos1 = 0;
750cdf0e10cSrcweir 			String sNum1( rTmp1.GetToken( 0, ' ', nFndPos1 ));
751cdf0e10cSrcweir 			sal_Int32 nCmp;
752cdf0e10cSrcweir 
753cdf0e10cSrcweir 			if( bIsNum2IsNumeric && rCC.isNumeric( sNum1 ) )
754cdf0e10cSrcweir 			{
755cdf0e10cSrcweir 				sal_Int32 nNum1 = sNum1.ToInt32();
756cdf0e10cSrcweir 				nCmp = nNum2 - nNum1;
757cdf0e10cSrcweir 				if( 0 == nCmp )
758cdf0e10cSrcweir 					nCmp = rCaseColl.compareString( rTmp2.Copy( nFndPos2 ),
759cdf0e10cSrcweir 										 			  rTmp1.Copy( nFndPos1 ));
760cdf0e10cSrcweir 			}
761cdf0e10cSrcweir 			else
762cdf0e10cSrcweir 				nCmp = rColl.compareString( rTmp2, rTmp1 );
763cdf0e10cSrcweir 
764cdf0e10cSrcweir 			if( 0 == nCmp )
765cdf0e10cSrcweir 			{
766cdf0e10cSrcweir 				if( pP ) *pP = nM;
767cdf0e10cSrcweir 				return sal_True;
768cdf0e10cSrcweir 			}
769cdf0e10cSrcweir 			else if( 0 < nCmp )
770cdf0e10cSrcweir 				nU = nM + 1;
771cdf0e10cSrcweir 			else if( nM == 0 )
772cdf0e10cSrcweir 				break;
773cdf0e10cSrcweir 			else
774cdf0e10cSrcweir 				nO = nM - 1;
775cdf0e10cSrcweir 		}
776cdf0e10cSrcweir 	}
777cdf0e10cSrcweir 	if( pP ) *pP = nU;
778cdf0e10cSrcweir 	return sal_False;
779cdf0e10cSrcweir }
780cdf0e10cSrcweir 
781cdf0e10cSrcweir /*--------------------------------------------------------------------
782cdf0e10cSrcweir 	Beschreibung: SwSetExpField by JP
783cdf0e10cSrcweir  --------------------------------------------------------------------*/
784cdf0e10cSrcweir 
SwSetExpField(SwSetExpFieldType * pTyp,const String & rFormel,sal_uLong nFmt)785cdf0e10cSrcweir SwSetExpField::SwSetExpField(SwSetExpFieldType* pTyp, const String& rFormel,
786cdf0e10cSrcweir 										sal_uLong nFmt)
787cdf0e10cSrcweir 	: SwFormulaField( pTyp, nFmt, 0.0 ), nSeqNo( USHRT_MAX ),
788cdf0e10cSrcweir 	nSubType(0)
789cdf0e10cSrcweir {
790cdf0e10cSrcweir 	SetFormula(rFormel);
791cdf0e10cSrcweir 	// SubType ignorieren !!!
792cdf0e10cSrcweir 	bInput = sal_False;
793cdf0e10cSrcweir 	if( IsSequenceFld() )
794cdf0e10cSrcweir 	{
795cdf0e10cSrcweir 		SwValueField::SetValue(1.0);
796cdf0e10cSrcweir 		if( !rFormel.Len() )
797cdf0e10cSrcweir 		{
798cdf0e10cSrcweir 			String sFormel(rFormel);
799cdf0e10cSrcweir 			sFormel += pTyp->GetName();
800cdf0e10cSrcweir 			sFormel += '+';
801cdf0e10cSrcweir 			sFormel += '1';
802cdf0e10cSrcweir 			SetFormula(sFormel);
803cdf0e10cSrcweir 		}
804cdf0e10cSrcweir 	}
805cdf0e10cSrcweir }
806cdf0e10cSrcweir 
Expand() const807cdf0e10cSrcweir String SwSetExpField::Expand() const
808cdf0e10cSrcweir {
809cdf0e10cSrcweir 	String aStr;
810cdf0e10cSrcweir 	if (nSubType & nsSwExtendedSubType::SUB_CMD)
811cdf0e10cSrcweir 	{	// Der CommandString ist gefragt
812cdf0e10cSrcweir 		aStr = GetTyp()->GetName();
813cdf0e10cSrcweir 		aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " = " ));
814cdf0e10cSrcweir 		aStr += GetFormula();
815cdf0e10cSrcweir 	}
816cdf0e10cSrcweir 	else if(!(nSubType & nsSwExtendedSubType::SUB_INVISIBLE))
817cdf0e10cSrcweir 	{   // Der Wert ist sichtbar
818cdf0e10cSrcweir 		aStr = sExpand;
819cdf0e10cSrcweir 	}
820cdf0e10cSrcweir 	return aStr;
821cdf0e10cSrcweir }
822cdf0e10cSrcweir 
823cdf0e10cSrcweir /*--------------------------------------------------------------------
824cdf0e10cSrcweir 	@return the field name
825cdf0e10cSrcweir  --------------------------------------------------------------------*/
826cdf0e10cSrcweir 
GetFieldName() const827cdf0e10cSrcweir String SwSetExpField::GetFieldName() const
828cdf0e10cSrcweir {
829cdf0e10cSrcweir     SwFldTypesEnum const nStrType( (IsSequenceFld())
830cdf0e10cSrcweir                             ? TYP_SEQFLD
831cdf0e10cSrcweir                             : (bInput)
832cdf0e10cSrcweir                                 ? TYP_SETINPFLD
833cdf0e10cSrcweir                                 : TYP_SETFLD   );
834cdf0e10cSrcweir 
835cdf0e10cSrcweir     String aStr( SwFieldType::GetTypeStr( static_cast<sal_uInt16>(nStrType) ) );
836cdf0e10cSrcweir     aStr += ' ';
837cdf0e10cSrcweir     aStr += GetTyp()->GetName();
838cdf0e10cSrcweir 
839cdf0e10cSrcweir     // Sequence: without formula
840cdf0e10cSrcweir     if (TYP_SEQFLD != nStrType)
841cdf0e10cSrcweir     {
842cdf0e10cSrcweir         aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " = " ) );
843cdf0e10cSrcweir         aStr += GetFormula();
844cdf0e10cSrcweir     }
845cdf0e10cSrcweir     return aStr;
846cdf0e10cSrcweir }
847cdf0e10cSrcweir 
Copy() const848cdf0e10cSrcweir SwField* SwSetExpField::Copy() const
849cdf0e10cSrcweir {
850cdf0e10cSrcweir 	SwSetExpField *pTmp = new SwSetExpField((SwSetExpFieldType*)GetTyp(),
851cdf0e10cSrcweir 											GetFormula(), GetFormat());
852cdf0e10cSrcweir 	pTmp->SwValueField::SetValue(GetValue());
853cdf0e10cSrcweir 	pTmp->sExpand   	= sExpand;
854cdf0e10cSrcweir     pTmp->SetAutomaticLanguage(IsAutomaticLanguage());
855cdf0e10cSrcweir     pTmp->SetLanguage(GetLanguage());
856cdf0e10cSrcweir 	pTmp->aPText		= aPText;
857cdf0e10cSrcweir 	pTmp->bInput		= bInput;
858cdf0e10cSrcweir 	pTmp->nSeqNo		= nSeqNo;
859cdf0e10cSrcweir 	pTmp->SetSubType(GetSubType());
860cdf0e10cSrcweir 
861cdf0e10cSrcweir 	return pTmp;
862cdf0e10cSrcweir }
863cdf0e10cSrcweir 
SetSubType(sal_uInt16 nSub)864cdf0e10cSrcweir void SwSetExpField::SetSubType(sal_uInt16 nSub)
865cdf0e10cSrcweir {
866cdf0e10cSrcweir 	((SwSetExpFieldType*)GetTyp())->SetType(nSub & 0xff);
867cdf0e10cSrcweir 	nSubType = nSub & 0xff00;
868cdf0e10cSrcweir 
869cdf0e10cSrcweir 	DBG_ASSERT( (nSub & 0xff) != 3, "SubType ist illegal!" );
870cdf0e10cSrcweir }
871cdf0e10cSrcweir 
GetSubType() const872cdf0e10cSrcweir sal_uInt16 SwSetExpField::GetSubType() const
873cdf0e10cSrcweir {
874cdf0e10cSrcweir 	return ((SwSetExpFieldType*)GetTyp())->GetType() | nSubType;
875cdf0e10cSrcweir }
876cdf0e10cSrcweir 
SetValue(const double & rAny)877cdf0e10cSrcweir void SwSetExpField::SetValue( const double& rAny )
878cdf0e10cSrcweir {
879cdf0e10cSrcweir 	SwValueField::SetValue(rAny);
880cdf0e10cSrcweir 
881cdf0e10cSrcweir 	if( IsSequenceFld() )
882cdf0e10cSrcweir 		sExpand = FormatNumber( (sal_uInt16)GetValue(), GetFormat() );
883cdf0e10cSrcweir 	else
884cdf0e10cSrcweir 		sExpand = ((SwValueFieldType*)GetTyp())->ExpandValue( rAny,
885cdf0e10cSrcweir 												GetFormat(), GetLanguage());
886cdf0e10cSrcweir }
887cdf0e10cSrcweir 
SetValue(const double & rAny)888cdf0e10cSrcweir void SwGetExpField::SetValue( const double& rAny )
889cdf0e10cSrcweir {
890cdf0e10cSrcweir 	SwValueField::SetValue(rAny);
891cdf0e10cSrcweir 	sExpand = ((SwValueFieldType*)GetTyp())->ExpandValue( rAny, GetFormat(),
892cdf0e10cSrcweir 															GetLanguage());
893cdf0e10cSrcweir }
894cdf0e10cSrcweir /* -------------------------------------------------
895cdf0e10cSrcweir 	Description: Find the index of the reference text
896cdf0e10cSrcweir 	following the current field
897cdf0e10cSrcweir  --------------------------------------------------*/
GetReferenceTextPos(const SwFmtFld & rFmt,SwDoc & rDoc)898cdf0e10cSrcweir xub_StrLen SwGetExpField::GetReferenceTextPos( const SwFmtFld& rFmt, SwDoc& rDoc)
899cdf0e10cSrcweir {
900cdf0e10cSrcweir 	//
901cdf0e10cSrcweir 	const SwTxtFld* pTxtFld = rFmt.GetTxtFld();
902cdf0e10cSrcweir 	const SwTxtNode& rTxtNode = pTxtFld->GetTxtNode();
903cdf0e10cSrcweir 	//
904cdf0e10cSrcweir 	xub_StrLen nRet = *pTxtFld->GetStart() + 1;
905cdf0e10cSrcweir 	String sNodeText = rTxtNode.GetTxt();
906cdf0e10cSrcweir 	sNodeText.Erase(0, nRet);
907cdf0e10cSrcweir 	if(sNodeText.Len())
908cdf0e10cSrcweir 	{
909cdf0e10cSrcweir 		//now check if sNodeText starts with a non-alphanumeric character plus a blank
910cdf0e10cSrcweir 		sal_uInt16 nSrcpt = pBreakIt->GetRealScriptOfText( sNodeText, 0 );
911cdf0e10cSrcweir 
912cdf0e10cSrcweir 		static sal_uInt16 nIds[] =
913cdf0e10cSrcweir 		{
914cdf0e10cSrcweir 			RES_CHRATR_LANGUAGE, RES_CHRATR_LANGUAGE,
915cdf0e10cSrcweir 			RES_CHRATR_FONT, RES_CHRATR_FONT,
916cdf0e10cSrcweir 			RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CJK_LANGUAGE,
917cdf0e10cSrcweir 			RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONT,
918cdf0e10cSrcweir 			RES_CHRATR_CTL_LANGUAGE, RES_CHRATR_CTL_LANGUAGE,
919cdf0e10cSrcweir 			RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_FONT,
920cdf0e10cSrcweir 			0, 0
921cdf0e10cSrcweir 		};
922cdf0e10cSrcweir 		SwAttrSet aSet(rDoc.GetAttrPool(), nIds);
923cdf0e10cSrcweir 		rTxtNode.GetAttr(aSet, nRet, nRet+1);
924cdf0e10cSrcweir 
925cdf0e10cSrcweir 		if( RTL_TEXTENCODING_SYMBOL != ((SvxFontItem&)aSet.Get(
926cdf0e10cSrcweir 				GetWhichOfScript( RES_CHRATR_FONT, nSrcpt )) ).GetCharSet() )
927cdf0e10cSrcweir 		{
928cdf0e10cSrcweir 			LanguageType eLang = ((SvxLanguageItem&)aSet.Get(
929cdf0e10cSrcweir 				GetWhichOfScript( RES_CHRATR_LANGUAGE, nSrcpt )) ).GetLanguage();
930cdf0e10cSrcweir 			CharClass aCC( SvxCreateLocale( eLang ));
931cdf0e10cSrcweir 			sal_Unicode c0 = sNodeText.GetChar(0);
932cdf0e10cSrcweir 			sal_Bool bIsAlphaNum = aCC.isAlphaNumeric( sNodeText, 0 );
933cdf0e10cSrcweir 			if( !bIsAlphaNum ||
934cdf0e10cSrcweir 				(c0 == ' ' || c0 == '\t'))
935cdf0e10cSrcweir 			{
936cdf0e10cSrcweir 				nRet++;
937cdf0e10cSrcweir 				if( sNodeText.Len() > 1 &&
938cdf0e10cSrcweir 					(sNodeText.GetChar(1) == ' ' ||
939cdf0e10cSrcweir 					 sNodeText.GetChar(1) == '\t'))
940cdf0e10cSrcweir 					nRet++;
941cdf0e10cSrcweir 			}
942cdf0e10cSrcweir 		}
943cdf0e10cSrcweir 	}
944cdf0e10cSrcweir 	return nRet;
945cdf0e10cSrcweir }
946cdf0e10cSrcweir 
947cdf0e10cSrcweir 
948cdf0e10cSrcweir /*--------------------------------------------------------------------
949cdf0e10cSrcweir 	Beschreibung: Parameter setzen
950cdf0e10cSrcweir  --------------------------------------------------------------------*/
951cdf0e10cSrcweir 
GetPar1() const952cdf0e10cSrcweir const String& SwSetExpField::GetPar1() const
953cdf0e10cSrcweir {
954cdf0e10cSrcweir 	return ((SwSetExpFieldType*)GetTyp())->GetName();
955cdf0e10cSrcweir }
956cdf0e10cSrcweir 
GetPar2() const957cdf0e10cSrcweir String SwSetExpField::GetPar2() const
958cdf0e10cSrcweir {
959cdf0e10cSrcweir 	sal_uInt16 nType = ((SwSetExpFieldType*)GetTyp())->GetType();
960cdf0e10cSrcweir 
961cdf0e10cSrcweir 	if (nType & nsSwGetSetExpType::GSE_STRING)
962cdf0e10cSrcweir 		return GetFormula();
963cdf0e10cSrcweir 	return GetExpandedFormula();
964cdf0e10cSrcweir }
965cdf0e10cSrcweir 
SetPar2(const String & rStr)966cdf0e10cSrcweir void SwSetExpField::SetPar2(const String& rStr)
967cdf0e10cSrcweir {
968cdf0e10cSrcweir 	sal_uInt16 nType = ((SwSetExpFieldType*)GetTyp())->GetType();
969cdf0e10cSrcweir 
970cdf0e10cSrcweir 	if( !(nType & nsSwGetSetExpType::GSE_SEQ) || rStr.Len() )
971cdf0e10cSrcweir 	{
972cdf0e10cSrcweir 		if (nType & nsSwGetSetExpType::GSE_STRING)
973cdf0e10cSrcweir 			SetFormula(rStr);
974cdf0e10cSrcweir 		else
975cdf0e10cSrcweir 			SetExpandedFormula(rStr);
976cdf0e10cSrcweir 	}
977cdf0e10cSrcweir }
978cdf0e10cSrcweir 
97969a74367SOliver-Rainer Wittmann 
PutValue(const uno::Any & rAny,sal_uInt16 nWhichId)98069a74367SOliver-Rainer Wittmann sal_Bool SwSetExpField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
98169a74367SOliver-Rainer Wittmann {
98269a74367SOliver-Rainer Wittmann 	sal_Int32 nTmp32 = 0;
98369a74367SOliver-Rainer Wittmann 	sal_Int16 nTmp16 = 0;
98469a74367SOliver-Rainer Wittmann 	String sTmp;
98569a74367SOliver-Rainer Wittmann     switch( nWhichId )
98669a74367SOliver-Rainer Wittmann 	{
98769a74367SOliver-Rainer Wittmann 	case FIELD_PROP_BOOL2:
98869a74367SOliver-Rainer Wittmann 		if(*(sal_Bool*)rAny.getValue())
98969a74367SOliver-Rainer Wittmann 			nSubType &= ~nsSwExtendedSubType::SUB_INVISIBLE;
99069a74367SOliver-Rainer Wittmann 		else
99169a74367SOliver-Rainer Wittmann 			nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
99269a74367SOliver-Rainer Wittmann 		break;
99369a74367SOliver-Rainer Wittmann 	case FIELD_PROP_FORMAT:
99469a74367SOliver-Rainer Wittmann 		rAny >>= nTmp32;
99569a74367SOliver-Rainer Wittmann 		SetFormat(nTmp32);
99669a74367SOliver-Rainer Wittmann 		break;
99769a74367SOliver-Rainer Wittmann 	case FIELD_PROP_USHORT2:
99869a74367SOliver-Rainer Wittmann 		{
99969a74367SOliver-Rainer Wittmann 			rAny >>= nTmp16;
100069a74367SOliver-Rainer Wittmann 			if(nTmp16 <= SVX_NUMBER_NONE )
100169a74367SOliver-Rainer Wittmann 				SetFormat(nTmp16);
100269a74367SOliver-Rainer Wittmann 			else {
100369a74367SOliver-Rainer Wittmann 				//exception(wrong_value)
100469a74367SOliver-Rainer Wittmann 				;
100569a74367SOliver-Rainer Wittmann             }
100669a74367SOliver-Rainer Wittmann 		}
100769a74367SOliver-Rainer Wittmann 		break;
100869a74367SOliver-Rainer Wittmann 	case FIELD_PROP_USHORT1:
100969a74367SOliver-Rainer Wittmann 		rAny >>= nTmp16;
101069a74367SOliver-Rainer Wittmann 		nSeqNo = nTmp16;
101169a74367SOliver-Rainer Wittmann 		break;
101269a74367SOliver-Rainer Wittmann 	case FIELD_PROP_PAR1:
101369a74367SOliver-Rainer Wittmann 		SetPar1( SwStyleNameMapper::GetUIName(
101469a74367SOliver-Rainer Wittmann 							::GetString( rAny, sTmp ), nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL ) );
101569a74367SOliver-Rainer Wittmann 		break;
101669a74367SOliver-Rainer Wittmann 	case FIELD_PROP_PAR2:
101769a74367SOliver-Rainer Wittmann 		{
101869a74367SOliver-Rainer Wittmann 			OUString uTmp;
101969a74367SOliver-Rainer Wittmann 			rAny >>= uTmp;
102069a74367SOliver-Rainer Wittmann 			//I18N - if the formula contains only "TypeName+1"
102169a74367SOliver-Rainer Wittmann 			//and it's one of the initially created sequence fields
102269a74367SOliver-Rainer Wittmann 			//then the localized names has to be replaced by a programmatic name
102369a74367SOliver-Rainer Wittmann 			OUString sMyFormula = SwXFieldMaster::LocalizeFormula(*this, uTmp, sal_False);
102469a74367SOliver-Rainer Wittmann 			SetFormula( sMyFormula );
102569a74367SOliver-Rainer Wittmann 		}
102669a74367SOliver-Rainer Wittmann 		break;
102769a74367SOliver-Rainer Wittmann 	case FIELD_PROP_DOUBLE:
102869a74367SOliver-Rainer Wittmann 		{
102969a74367SOliver-Rainer Wittmann 			double fVal = 0.0;
103069a74367SOliver-Rainer Wittmann 			rAny >>= fVal;
103169a74367SOliver-Rainer Wittmann 			SetValue(fVal);
103269a74367SOliver-Rainer Wittmann 		}
103369a74367SOliver-Rainer Wittmann 		break;
103469a74367SOliver-Rainer Wittmann 	case FIELD_PROP_SUBTYPE:
103569a74367SOliver-Rainer Wittmann 		nTmp32 = lcl_APIToSubType(rAny);
103669a74367SOliver-Rainer Wittmann 		if(nTmp32 >= 0)
103769a74367SOliver-Rainer Wittmann 			SetSubType(static_cast<sal_uInt16>((GetSubType() & 0xff00) | nTmp32));
103869a74367SOliver-Rainer Wittmann 		break;
103969a74367SOliver-Rainer Wittmann 	case FIELD_PROP_PAR3:
104069a74367SOliver-Rainer Wittmann 		::GetString( rAny, aPText );
104169a74367SOliver-Rainer Wittmann 		break;
104269a74367SOliver-Rainer Wittmann 	case FIELD_PROP_BOOL3:
104369a74367SOliver-Rainer Wittmann 		if(*(sal_Bool*) rAny.getValue())
104469a74367SOliver-Rainer Wittmann 			nSubType |= nsSwExtendedSubType::SUB_CMD;
104569a74367SOliver-Rainer Wittmann 		else
104669a74367SOliver-Rainer Wittmann 			nSubType &= (~nsSwExtendedSubType::SUB_CMD);
104769a74367SOliver-Rainer Wittmann 		break;
104869a74367SOliver-Rainer Wittmann 	case FIELD_PROP_BOOL1:
104969a74367SOliver-Rainer Wittmann 		SetInputFlag(*(sal_Bool*) rAny.getValue());
105069a74367SOliver-Rainer Wittmann 		break;
105169a74367SOliver-Rainer Wittmann 	case FIELD_PROP_PAR4:
105269a74367SOliver-Rainer Wittmann 		ChgExpStr( ::GetString( rAny, sTmp ));
105369a74367SOliver-Rainer Wittmann 		break;
105469a74367SOliver-Rainer Wittmann 	default:
105569a74367SOliver-Rainer Wittmann         return SwField::PutValue(rAny, nWhichId);
105669a74367SOliver-Rainer Wittmann     }
105769a74367SOliver-Rainer Wittmann 	return sal_True;
105869a74367SOliver-Rainer Wittmann }
105969a74367SOliver-Rainer Wittmann 
106069a74367SOliver-Rainer Wittmann 
QueryValue(uno::Any & rAny,sal_uInt16 nWhichId) const106169a74367SOliver-Rainer Wittmann sal_Bool SwSetExpField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
106269a74367SOliver-Rainer Wittmann {
106369a74367SOliver-Rainer Wittmann     switch( nWhichId )
106469a74367SOliver-Rainer Wittmann 	{
106569a74367SOliver-Rainer Wittmann 	case FIELD_PROP_BOOL2:
106669a74367SOliver-Rainer Wittmann 		{
106769a74367SOliver-Rainer Wittmann 			sal_Bool bVal = 0 == (nSubType & nsSwExtendedSubType::SUB_INVISIBLE);
106869a74367SOliver-Rainer Wittmann 			rAny.setValue(&bVal, ::getBooleanCppuType());
106969a74367SOliver-Rainer Wittmann 		}
107069a74367SOliver-Rainer Wittmann 		break;
107169a74367SOliver-Rainer Wittmann 	case FIELD_PROP_FORMAT:
107269a74367SOliver-Rainer Wittmann 		rAny <<= (sal_Int32)GetFormat();
107369a74367SOliver-Rainer Wittmann 		break;
107469a74367SOliver-Rainer Wittmann 	case FIELD_PROP_USHORT2:
107569a74367SOliver-Rainer Wittmann 		rAny <<= (sal_Int16)GetFormat();
107669a74367SOliver-Rainer Wittmann 		break;
107769a74367SOliver-Rainer Wittmann 	case FIELD_PROP_USHORT1:
107869a74367SOliver-Rainer Wittmann 		rAny <<= (sal_Int16)nSeqNo;
107969a74367SOliver-Rainer Wittmann 		break;
108069a74367SOliver-Rainer Wittmann 	case FIELD_PROP_PAR1:
108169a74367SOliver-Rainer Wittmann 		rAny <<= OUString ( SwStyleNameMapper::GetProgName(GetPar1(), nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL ) );
108269a74367SOliver-Rainer Wittmann 		break;
108369a74367SOliver-Rainer Wittmann 	case FIELD_PROP_PAR2:
108469a74367SOliver-Rainer Wittmann 		{
108569a74367SOliver-Rainer Wittmann 			//I18N - if the formula contains only "TypeName+1"
108669a74367SOliver-Rainer Wittmann 			//and it's one of the initially created sequence fields
108769a74367SOliver-Rainer Wittmann 			//then the localized names has to be replaced by a programmatic name
108869a74367SOliver-Rainer Wittmann 			OUString sMyFormula = SwXFieldMaster::LocalizeFormula(*this, GetFormula(), sal_True);
108969a74367SOliver-Rainer Wittmann 			rAny <<= OUString( sMyFormula );
109069a74367SOliver-Rainer Wittmann 		}
109169a74367SOliver-Rainer Wittmann 		break;
109269a74367SOliver-Rainer Wittmann 	case FIELD_PROP_DOUBLE:
109369a74367SOliver-Rainer Wittmann 		rAny <<= (double)GetValue();
109469a74367SOliver-Rainer Wittmann 		break;
109569a74367SOliver-Rainer Wittmann 	case FIELD_PROP_SUBTYPE:
109669a74367SOliver-Rainer Wittmann 		{
109769a74367SOliver-Rainer Wittmann 			sal_Int16 nRet = 0;
109869a74367SOliver-Rainer Wittmann 				nRet = lcl_SubTypeToAPI(GetSubType() & 0xff);
109969a74367SOliver-Rainer Wittmann 			rAny <<= nRet;
110069a74367SOliver-Rainer Wittmann 		}
110169a74367SOliver-Rainer Wittmann 		break;
110269a74367SOliver-Rainer Wittmann 	case FIELD_PROP_PAR3:
110369a74367SOliver-Rainer Wittmann 		rAny <<= OUString( aPText );
110469a74367SOliver-Rainer Wittmann 		break;
110569a74367SOliver-Rainer Wittmann 	case FIELD_PROP_BOOL3:
110669a74367SOliver-Rainer Wittmann 		{
110769a74367SOliver-Rainer Wittmann 			sal_Bool bTmp = 0 != (nSubType & nsSwExtendedSubType::SUB_CMD);
110869a74367SOliver-Rainer Wittmann 			rAny.setValue(&bTmp, ::getBooleanCppuType());
110969a74367SOliver-Rainer Wittmann 		}
111069a74367SOliver-Rainer Wittmann 		break;
111169a74367SOliver-Rainer Wittmann 	case FIELD_PROP_BOOL1:
111269a74367SOliver-Rainer Wittmann 		{
111369a74367SOliver-Rainer Wittmann 			sal_Bool bTmp = GetInputFlag();
111469a74367SOliver-Rainer Wittmann 			rAny.setValue(&bTmp, ::getBooleanCppuType());
111569a74367SOliver-Rainer Wittmann 		}
111669a74367SOliver-Rainer Wittmann 		break;
111769a74367SOliver-Rainer Wittmann 	case FIELD_PROP_PAR4:
111869a74367SOliver-Rainer Wittmann 		rAny <<= rtl::OUString(GetExpStr());
111969a74367SOliver-Rainer Wittmann 		break;
112069a74367SOliver-Rainer Wittmann 	default:
112169a74367SOliver-Rainer Wittmann         return SwField::QueryValue(rAny, nWhichId);
112269a74367SOliver-Rainer Wittmann     }
112369a74367SOliver-Rainer Wittmann 	return sal_True;
112469a74367SOliver-Rainer Wittmann }
112569a74367SOliver-Rainer Wittmann 
112669a74367SOliver-Rainer Wittmann 
112769a74367SOliver-Rainer Wittmann 
1128cdf0e10cSrcweir /*--------------------------------------------------------------------
1129cdf0e10cSrcweir 	Beschreibung: Eingabefeld Type
1130cdf0e10cSrcweir  ---------------------------------------------------------------------*/
1131cdf0e10cSrcweir 
SwInputFieldType(SwDoc * pD)1132cdf0e10cSrcweir SwInputFieldType::SwInputFieldType( SwDoc* pD )
113369a74367SOliver-Rainer Wittmann     : SwFieldType( RES_INPUTFLD )
113469a74367SOliver-Rainer Wittmann     , pDoc( pD )
1135cdf0e10cSrcweir {
1136cdf0e10cSrcweir }
1137cdf0e10cSrcweir 
Copy() const1138cdf0e10cSrcweir SwFieldType* SwInputFieldType::Copy() const
1139cdf0e10cSrcweir {
114069a74367SOliver-Rainer Wittmann     SwInputFieldType* pType = new SwInputFieldType( pDoc );
114169a74367SOliver-Rainer Wittmann     return pType;
1142cdf0e10cSrcweir }
1143cdf0e10cSrcweir 
1144cdf0e10cSrcweir /*--------------------------------------------------------------------
1145cdf0e10cSrcweir 	Beschreibung: Eingabefeld
1146cdf0e10cSrcweir  --------------------------------------------------------------------*/
1147cdf0e10cSrcweir 
SwInputField(SwInputFieldType * pFieldType,const String & rContent,const String & rPrompt,sal_uInt16 nSub,sal_uLong nFmt,bool bIsFormField)114869a74367SOliver-Rainer Wittmann SwInputField::SwInputField( SwInputFieldType* pFieldType,
114969a74367SOliver-Rainer Wittmann                             const String& rContent,
115069a74367SOliver-Rainer Wittmann                             const String& rPrompt,
115169a74367SOliver-Rainer Wittmann                             sal_uInt16 nSub,
115269a74367SOliver-Rainer Wittmann                             sal_uLong nFmt,
115369a74367SOliver-Rainer Wittmann                             bool bIsFormField )
115469a74367SOliver-Rainer Wittmann     : SwField( pFieldType, nFmt, LANGUAGE_SYSTEM, false )
115569a74367SOliver-Rainer Wittmann     , aContent(rContent)
115669a74367SOliver-Rainer Wittmann     , aPText(rPrompt)
115769a74367SOliver-Rainer Wittmann     , nSubType(nSub)
115869a74367SOliver-Rainer Wittmann     , mbIsFormField( bIsFormField )
115908357c13SPavel Janík     , mpFmtFld( NULL )
1160cdf0e10cSrcweir {
1161cdf0e10cSrcweir }
1162cdf0e10cSrcweir 
~SwInputField()116369a74367SOliver-Rainer Wittmann SwInputField::~SwInputField()
116469a74367SOliver-Rainer Wittmann {
116569a74367SOliver-Rainer Wittmann }
116669a74367SOliver-Rainer Wittmann 
116769a74367SOliver-Rainer Wittmann 
SetFmtFld(SwFmtFld & rFmtFld)116869a74367SOliver-Rainer Wittmann void SwInputField::SetFmtFld( SwFmtFld& rFmtFld )
116969a74367SOliver-Rainer Wittmann {
117069a74367SOliver-Rainer Wittmann     mpFmtFld = &rFmtFld;
117169a74367SOliver-Rainer Wittmann }
117269a74367SOliver-Rainer Wittmann 
GetFmtFld()117369a74367SOliver-Rainer Wittmann SwFmtFld* SwInputField::GetFmtFld()
117469a74367SOliver-Rainer Wittmann {
117569a74367SOliver-Rainer Wittmann     return mpFmtFld;
117669a74367SOliver-Rainer Wittmann }
117769a74367SOliver-Rainer Wittmann 
117869a74367SOliver-Rainer Wittmann 
getContent() const117969a74367SOliver-Rainer Wittmann const String& SwInputField::getContent() const
118069a74367SOliver-Rainer Wittmann {
118169a74367SOliver-Rainer Wittmann     return aContent;
118269a74367SOliver-Rainer Wittmann }
118369a74367SOliver-Rainer Wittmann 
1184*1bf9188dSOliver-Rainer Wittmann 
LockNotifyContentChange()1185*1bf9188dSOliver-Rainer Wittmann void SwInputField::LockNotifyContentChange()
1186*1bf9188dSOliver-Rainer Wittmann {
1187*1bf9188dSOliver-Rainer Wittmann     if ( GetFmtFld() != NULL )
1188*1bf9188dSOliver-Rainer Wittmann     {
1189*1bf9188dSOliver-Rainer Wittmann         SwTxtInputFld* pTxtInputFld = dynamic_cast< SwTxtInputFld* >(GetFmtFld()->GetTxtFld());
1190*1bf9188dSOliver-Rainer Wittmann         if ( pTxtInputFld != NULL )
1191*1bf9188dSOliver-Rainer Wittmann         {
1192*1bf9188dSOliver-Rainer Wittmann             pTxtInputFld->LockNotifyContentChange();
1193*1bf9188dSOliver-Rainer Wittmann         }
1194*1bf9188dSOliver-Rainer Wittmann     }
1195*1bf9188dSOliver-Rainer Wittmann }
1196*1bf9188dSOliver-Rainer Wittmann 
1197*1bf9188dSOliver-Rainer Wittmann 
UnlockNotifyContentChange()1198*1bf9188dSOliver-Rainer Wittmann void SwInputField::UnlockNotifyContentChange()
1199*1bf9188dSOliver-Rainer Wittmann {
1200*1bf9188dSOliver-Rainer Wittmann     if ( GetFmtFld() != NULL )
1201*1bf9188dSOliver-Rainer Wittmann     {
1202*1bf9188dSOliver-Rainer Wittmann         SwTxtInputFld* pTxtInputFld = dynamic_cast< SwTxtInputFld* >(GetFmtFld()->GetTxtFld());
1203*1bf9188dSOliver-Rainer Wittmann         if ( pTxtInputFld != NULL )
1204*1bf9188dSOliver-Rainer Wittmann         {
1205*1bf9188dSOliver-Rainer Wittmann             pTxtInputFld->UnlockNotifyContentChange();
1206*1bf9188dSOliver-Rainer Wittmann         }
1207*1bf9188dSOliver-Rainer Wittmann     }
1208*1bf9188dSOliver-Rainer Wittmann }
1209*1bf9188dSOliver-Rainer Wittmann 
applyFieldContent(const String & rNewFieldContent)121069a74367SOliver-Rainer Wittmann void SwInputField::applyFieldContent( const String& rNewFieldContent )
121169a74367SOliver-Rainer Wittmann {
121269a74367SOliver-Rainer Wittmann     if ( (nSubType & 0x00ff) == INP_TXT )
121369a74367SOliver-Rainer Wittmann     {
121469a74367SOliver-Rainer Wittmann         aContent = rNewFieldContent;
121569a74367SOliver-Rainer Wittmann     }
121669a74367SOliver-Rainer Wittmann     else if( (nSubType & 0x00ff) == INP_USR )
121769a74367SOliver-Rainer Wittmann     {
121869a74367SOliver-Rainer Wittmann         SwUserFieldType* pUserTyp = static_cast<SwUserFieldType*>(
121969a74367SOliver-Rainer Wittmann             static_cast<SwInputFieldType*>(GetTyp())->GetDoc()->GetFldType( RES_USERFLD, getContent(), false ) );
122069a74367SOliver-Rainer Wittmann         if( pUserTyp )
122169a74367SOliver-Rainer Wittmann         {
122269a74367SOliver-Rainer Wittmann             pUserTyp->SetContent( rNewFieldContent );
1223*1bf9188dSOliver-Rainer Wittmann 
1224*1bf9188dSOliver-Rainer Wittmann             // trigger update of the corresponding User Fields and other related Input Fields
1225*1bf9188dSOliver-Rainer Wittmann             {
1226*1bf9188dSOliver-Rainer Wittmann                 LockNotifyContentChange();
1227*1bf9188dSOliver-Rainer Wittmann                 pUserTyp->UpdateFlds();
1228*1bf9188dSOliver-Rainer Wittmann                 UnlockNotifyContentChange();
1229*1bf9188dSOliver-Rainer Wittmann             }
123069a74367SOliver-Rainer Wittmann         }
123169a74367SOliver-Rainer Wittmann     }
123269a74367SOliver-Rainer Wittmann }
123369a74367SOliver-Rainer Wittmann 
GetFieldName() const1234cdf0e10cSrcweir String SwInputField::GetFieldName() const
1235cdf0e10cSrcweir {
1236cdf0e10cSrcweir     String aStr(SwField::GetFieldName());
1237cdf0e10cSrcweir     if ((nSubType & 0x00ff) == INP_USR)
1238cdf0e10cSrcweir     {
1239cdf0e10cSrcweir         aStr += GetTyp()->GetName();
1240cdf0e10cSrcweir         aStr += ' ';
124169a74367SOliver-Rainer Wittmann         aStr += getContent();
1242cdf0e10cSrcweir     }
1243cdf0e10cSrcweir     return aStr;
1244cdf0e10cSrcweir }
1245cdf0e10cSrcweir 
Copy() const1246cdf0e10cSrcweir SwField* SwInputField::Copy() const
1247cdf0e10cSrcweir {
124869a74367SOliver-Rainer Wittmann     SwInputField* pFld =
124969a74367SOliver-Rainer Wittmann         new SwInputField(
125069a74367SOliver-Rainer Wittmann             static_cast<SwInputFieldType*>(GetTyp()),
125169a74367SOliver-Rainer Wittmann             getContent(),
125269a74367SOliver-Rainer Wittmann             aPText,
125369a74367SOliver-Rainer Wittmann             GetSubType(),
125469a74367SOliver-Rainer Wittmann             GetFormat(),
125569a74367SOliver-Rainer Wittmann             mbIsFormField );
1256cdf0e10cSrcweir 
125769a74367SOliver-Rainer Wittmann     pFld->SetHelp( aHelp );
125869a74367SOliver-Rainer Wittmann     pFld->SetToolTip( aToolTip );
1259cdf0e10cSrcweir 
1260cdf0e10cSrcweir     pFld->SetAutomaticLanguage(IsAutomaticLanguage());
1261cdf0e10cSrcweir     return pFld;
1262cdf0e10cSrcweir }
1263cdf0e10cSrcweir 
Expand() const1264cdf0e10cSrcweir String SwInputField::Expand() const
1265cdf0e10cSrcweir {
126669a74367SOliver-Rainer Wittmann     String sRet;
126769a74367SOliver-Rainer Wittmann     if ( (nSubType & 0x00ff) == INP_TXT )
126869a74367SOliver-Rainer Wittmann     {
126969a74367SOliver-Rainer Wittmann         sRet = getContent();
127069a74367SOliver-Rainer Wittmann     }
127169a74367SOliver-Rainer Wittmann     else if( (nSubType & 0x00ff) == INP_USR )
127269a74367SOliver-Rainer Wittmann     {
127369a74367SOliver-Rainer Wittmann         SwUserFieldType* pUserTyp = static_cast<SwUserFieldType*>(
127469a74367SOliver-Rainer Wittmann             static_cast<SwInputFieldType*>(GetTyp())->GetDoc()->GetFldType( RES_USERFLD, getContent(), false ) );
127569a74367SOliver-Rainer Wittmann         if( pUserTyp )
127669a74367SOliver-Rainer Wittmann             sRet = pUserTyp->GetContent();
127769a74367SOliver-Rainer Wittmann     }
127869a74367SOliver-Rainer Wittmann     return sRet;
127969a74367SOliver-Rainer Wittmann }
1280cdf0e10cSrcweir 
128169a74367SOliver-Rainer Wittmann 
isFormField() const128269a74367SOliver-Rainer Wittmann bool SwInputField::isFormField() const
128369a74367SOliver-Rainer Wittmann {
128469a74367SOliver-Rainer Wittmann     return mbIsFormField
128569a74367SOliver-Rainer Wittmann            || aHelp.Len() > 0
128669a74367SOliver-Rainer Wittmann            || aToolTip.Len() > 0;
1287cdf0e10cSrcweir }
1288cdf0e10cSrcweir 
128969a74367SOliver-Rainer Wittmann 
QueryValue(uno::Any & rAny,sal_uInt16 nWhichId) const1290cdf0e10cSrcweir sal_Bool SwInputField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
1291cdf0e10cSrcweir {
1292cdf0e10cSrcweir     switch( nWhichId )
129369a74367SOliver-Rainer Wittmann     {
129469a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR1:
129569a74367SOliver-Rainer Wittmann         rAny <<= OUString( getContent() );
129669a74367SOliver-Rainer Wittmann         break;
129769a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR2:
129869a74367SOliver-Rainer Wittmann         rAny <<= OUString( aPText );
129969a74367SOliver-Rainer Wittmann         break;
1300cdf0e10cSrcweir     case FIELD_PROP_PAR3:
1301cdf0e10cSrcweir         rAny <<= OUString( aHelp );
1302cdf0e10cSrcweir         break;
1303cdf0e10cSrcweir     case FIELD_PROP_PAR4:
1304cdf0e10cSrcweir         rAny <<= OUString( aToolTip );
1305cdf0e10cSrcweir         break;
130669a74367SOliver-Rainer Wittmann     default:
130769a74367SOliver-Rainer Wittmann         DBG_ERROR("illegal property");
130869a74367SOliver-Rainer Wittmann     }
130969a74367SOliver-Rainer Wittmann     return sal_True;
1310cdf0e10cSrcweir }
1311cdf0e10cSrcweir 
PutValue(const uno::Any & rAny,sal_uInt16 nWhichId)1312cdf0e10cSrcweir sal_Bool SwInputField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
1313cdf0e10cSrcweir {
1314cdf0e10cSrcweir     switch( nWhichId )
131569a74367SOliver-Rainer Wittmann     {
131669a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR1:
131769a74367SOliver-Rainer Wittmann         {
131869a74367SOliver-Rainer Wittmann             ::GetString( rAny, aContent );
131969a74367SOliver-Rainer Wittmann         }
132069a74367SOliver-Rainer Wittmann         break;
132169a74367SOliver-Rainer Wittmann     case FIELD_PROP_PAR2:
132269a74367SOliver-Rainer Wittmann         ::GetString( rAny, aPText );
132369a74367SOliver-Rainer Wittmann         break;
1324cdf0e10cSrcweir     case FIELD_PROP_PAR3:
1325cdf0e10cSrcweir         ::GetString( rAny, aHelp );
1326cdf0e10cSrcweir         break;
1327cdf0e10cSrcweir     case FIELD_PROP_PAR4:
1328cdf0e10cSrcweir         ::GetString( rAny, aToolTip );
1329cdf0e10cSrcweir         break;
133069a74367SOliver-Rainer Wittmann     default:
133169a74367SOliver-Rainer Wittmann         DBG_ERROR("illegal property");
133269a74367SOliver-Rainer Wittmann     }
133369a74367SOliver-Rainer Wittmann     return sal_True;
1334cdf0e10cSrcweir }
133569a74367SOliver-Rainer Wittmann 
1336cdf0e10cSrcweir 
SetPar1(const String & rStr)1337cdf0e10cSrcweir void SwInputField::SetPar1(const String& rStr)
1338cdf0e10cSrcweir {
133969a74367SOliver-Rainer Wittmann     aContent = rStr;
1340cdf0e10cSrcweir }
1341cdf0e10cSrcweir 
GetPar1() const1342cdf0e10cSrcweir const String& SwInputField::GetPar1() const
1343cdf0e10cSrcweir {
134469a74367SOliver-Rainer Wittmann     return getContent();
1345cdf0e10cSrcweir }
1346cdf0e10cSrcweir 
1347cdf0e10cSrcweir 
SetPar2(const String & rStr)1348cdf0e10cSrcweir void SwInputField::SetPar2(const String& rStr)
1349cdf0e10cSrcweir {
1350cdf0e10cSrcweir 	aPText = rStr;
1351cdf0e10cSrcweir }
1352cdf0e10cSrcweir 
GetPar2() const1353cdf0e10cSrcweir String SwInputField::GetPar2() const
1354cdf0e10cSrcweir {
1355cdf0e10cSrcweir 	return aPText;
1356cdf0e10cSrcweir }
1357cdf0e10cSrcweir 
SetHelp(const String & rStr)1358cdf0e10cSrcweir void SwInputField::SetHelp(const String & rStr)
1359cdf0e10cSrcweir {
1360cdf0e10cSrcweir     aHelp = rStr;
1361cdf0e10cSrcweir }
1362cdf0e10cSrcweir 
GetHelp() const1363cdf0e10cSrcweir String SwInputField::GetHelp() const
1364cdf0e10cSrcweir {
1365cdf0e10cSrcweir     return aHelp;
1366cdf0e10cSrcweir }
1367cdf0e10cSrcweir 
SetToolTip(const String & rStr)1368cdf0e10cSrcweir void SwInputField::SetToolTip(const String & rStr)
1369cdf0e10cSrcweir {
1370cdf0e10cSrcweir     aToolTip = rStr;
1371cdf0e10cSrcweir }
1372cdf0e10cSrcweir 
GetToolTip() const1373cdf0e10cSrcweir String SwInputField::GetToolTip() const
1374cdf0e10cSrcweir {
1375cdf0e10cSrcweir     return aToolTip;
1376cdf0e10cSrcweir }
1377cdf0e10cSrcweir 
GetSubType() const1378cdf0e10cSrcweir sal_uInt16 SwInputField::GetSubType() const
1379cdf0e10cSrcweir {
1380cdf0e10cSrcweir 	return nSubType;
1381cdf0e10cSrcweir }
1382cdf0e10cSrcweir 
SetSubType(sal_uInt16 nSub)1383cdf0e10cSrcweir void SwInputField::SetSubType(sal_uInt16 nSub)
1384cdf0e10cSrcweir {
1385cdf0e10cSrcweir 	nSubType = nSub;
1386cdf0e10cSrcweir }
1387cdf0e10cSrcweir 
1388