xref: /AOO41X/main/sw/source/ui/fldui/fldvar.cxx (revision efeef26f81c84063fb0a91bde3856d4a51172d90)
1*efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*efeef26fSAndrew Rist  * distributed with this work for additional information
6*efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17*efeef26fSAndrew Rist  * specific language governing permissions and limitations
18*efeef26fSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*efeef26fSAndrew Rist  *************************************************************/
21*efeef26fSAndrew Rist 
22*efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir #ifdef SW_DLLIMPLEMENTATION
27cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION
28cdf0e10cSrcweir #endif
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include <swtypes.hxx>
32cdf0e10cSrcweir #include <sfx2/linkmgr.hxx>
33cdf0e10cSrcweir #include <usrfld.hxx>
34cdf0e10cSrcweir #include <docufld.hxx>
35cdf0e10cSrcweir #include <expfld.hxx>
36cdf0e10cSrcweir #include <ddefld.hxx>
37cdf0e10cSrcweir #ifndef _VIEW_HXX
38cdf0e10cSrcweir #include <view.hxx>
39cdf0e10cSrcweir #endif
40cdf0e10cSrcweir #include <wrtsh.hxx>
41cdf0e10cSrcweir #include <doc.hxx>
42cdf0e10cSrcweir #include <docary.hxx>
43cdf0e10cSrcweir #include <swmodule.hxx>
44cdf0e10cSrcweir #ifndef _FLDVAR_HXX
45cdf0e10cSrcweir #include <fldvar.hxx>
46cdf0e10cSrcweir #endif
47cdf0e10cSrcweir #include <calc.hxx>
48cdf0e10cSrcweir #include <svl/zformat.hxx>
49cdf0e10cSrcweir #ifndef _GLOBALS_HRC
50cdf0e10cSrcweir #include <globals.hrc>
51cdf0e10cSrcweir #endif
52cdf0e10cSrcweir #ifndef _FLDUI_HRC
53cdf0e10cSrcweir #include <fldui.hrc>
54cdf0e10cSrcweir #endif
55cdf0e10cSrcweir #ifndef _FLDTDLG_HRC
56cdf0e10cSrcweir #include <fldtdlg.hrc>
57cdf0e10cSrcweir #endif
58cdf0e10cSrcweir 
59cdf0e10cSrcweir #define USER_DATA_VERSION_1 "1"
60cdf0e10cSrcweir #define USER_DATA_VERSION USER_DATA_VERSION_1
61cdf0e10cSrcweir /*--------------------------------------------------------------------
62cdf0e10cSrcweir 	Beschreibung:
63cdf0e10cSrcweir  --------------------------------------------------------------------*/
64cdf0e10cSrcweir 
65cdf0e10cSrcweir SwFldVarPage::SwFldVarPage(Window* pParent, const SfxItemSet& rCoreSet ) :
66cdf0e10cSrcweir 	SwFldPage		( pParent, SW_RES( TP_FLD_VAR ), rCoreSet ),
67cdf0e10cSrcweir 	aTypeFT			(this, SW_RES(FT_VARTYPE)),
68cdf0e10cSrcweir 	aTypeLB			(this, SW_RES(LB_VARTYPE)),
69cdf0e10cSrcweir 	aSelectionFT	(this, SW_RES(FT_VARSELECTION)),
70cdf0e10cSrcweir 	aSelectionLB	(this, SW_RES(LB_VARSELECTION)),
71cdf0e10cSrcweir 	aNameFT			(this, SW_RES(FT_VARNAME)),
72cdf0e10cSrcweir 	aNameED			(this, SW_RES(ED_VARNAME)),
73cdf0e10cSrcweir 	aValueFT		(this, SW_RES(FT_VARVALUE)),
74cdf0e10cSrcweir 	aValueED		(this, SW_RES(ED_VARVALUE)),
75cdf0e10cSrcweir 	aFormatFT		(this, SW_RES(FT_VARFORMAT)),
76cdf0e10cSrcweir 	aNumFormatLB	(this, SW_RES(LB_VARNUMFORMAT)),
77cdf0e10cSrcweir 	aFormatLB		(this, SW_RES(LB_VARFORMAT)),
78cdf0e10cSrcweir 	aChapterHeaderFT(this, SW_RES(FT_VARCHAPTERHEADER)),
79cdf0e10cSrcweir 	aChapterLevelFT	(this, SW_RES(FT_VARCHAPTERLEVEL)),
80cdf0e10cSrcweir 	aChapterLevelLB	(this, SW_RES(LB_VARCHAPTERLEVEL)),
81cdf0e10cSrcweir 	aInvisibleCB	(this, SW_RES(CB_VARINVISIBLE)),
82cdf0e10cSrcweir 	aSeparatorFT	(this, SW_RES(FT_VARSEPARATOR)),
83cdf0e10cSrcweir 	aSeparatorED	(this, SW_RES(ED_VARSEPARATOR)),
84cdf0e10cSrcweir 	aNewDelTBX		(this, SW_RES(TBX_VARNEWDEL)),
85cdf0e10cSrcweir 	bInit			(sal_True)
86cdf0e10cSrcweir {
87cdf0e10cSrcweir 	FreeResource();
88cdf0e10cSrcweir 
89cdf0e10cSrcweir 	aNewDelTBX.SetSizePixel( aNewDelTBX.CalcWindowSizePixel() );
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 	long nDelta = ( aValueED.GetSizePixel().Height() -
92cdf0e10cSrcweir 					aNewDelTBX.GetSizePixel().Height() ) / 2;
93cdf0e10cSrcweir 	Point aNewPnt = aNewDelTBX.GetPosPixel();
94cdf0e10cSrcweir 	aNewPnt.Y() += nDelta;
95cdf0e10cSrcweir 	aNewDelTBX.SetPosPixel( aNewPnt );
96cdf0e10cSrcweir 
97cdf0e10cSrcweir 	sOldValueFT = aValueFT.GetText();
98cdf0e10cSrcweir 	sOldNameFT = aNameFT.GetText();
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 	for (sal_uInt16 i = 1; i <= MAXLEVEL; i++)
101cdf0e10cSrcweir 		aChapterLevelLB.InsertEntry(String::CreateFromInt32(i));
102cdf0e10cSrcweir 
103cdf0e10cSrcweir 	aChapterLevelLB.SelectEntryPos(0);
104cdf0e10cSrcweir     //enable 'active' language selection
105cdf0e10cSrcweir     aNumFormatLB.SetShowLanguageControl(sal_True);
106cdf0e10cSrcweir }
107cdf0e10cSrcweir 
108cdf0e10cSrcweir /*--------------------------------------------------------------------
109cdf0e10cSrcweir 	Beschreibung:
110cdf0e10cSrcweir  --------------------------------------------------------------------*/
111cdf0e10cSrcweir 
112cdf0e10cSrcweir SwFldVarPage::~SwFldVarPage()
113cdf0e10cSrcweir {
114cdf0e10cSrcweir }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir /*--------------------------------------------------------------------
117cdf0e10cSrcweir 	Beschreibung:
118cdf0e10cSrcweir  --------------------------------------------------------------------*/
119cdf0e10cSrcweir 
120cdf0e10cSrcweir void SwFldVarPage::Reset(const SfxItemSet& )
121cdf0e10cSrcweir {
122cdf0e10cSrcweir 	SavePos(&aTypeLB);
123cdf0e10cSrcweir 
124cdf0e10cSrcweir 	Init();	// Allgemeine initialisierung
125cdf0e10cSrcweir 
126cdf0e10cSrcweir 	aTypeLB.SetUpdateMode(sal_False);
127cdf0e10cSrcweir 	aTypeLB.Clear();
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 	sal_uInt16 nPos, nTypeId;
130cdf0e10cSrcweir 
131cdf0e10cSrcweir 	if (!IsFldEdit())
132cdf0e10cSrcweir 	{
133cdf0e10cSrcweir 		// TypeListBox initialisieren
134cdf0e10cSrcweir 		const SwFldGroupRgn& rRg = GetFldMgr().GetGroupRange(IsFldDlgHtmlMode(), GetGroup());
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 		for (short i = rRg.nStart; i < rRg.nEnd; ++i)
137cdf0e10cSrcweir 		{
138cdf0e10cSrcweir 			nTypeId = GetFldMgr().GetTypeId(i);
139cdf0e10cSrcweir 			nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(i));
140cdf0e10cSrcweir 			aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
141cdf0e10cSrcweir 		}
142cdf0e10cSrcweir 	}
143cdf0e10cSrcweir 	else
144cdf0e10cSrcweir 	{
145cdf0e10cSrcweir         SwField* pCurField = GetCurField();
146cdf0e10cSrcweir         nTypeId = pCurField->GetTypeId();
147cdf0e10cSrcweir 		if (nTypeId == TYP_SETINPFLD)
148cdf0e10cSrcweir 			nTypeId = TYP_INPUTFLD;
149cdf0e10cSrcweir 		nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(GetFldMgr().GetPos(nTypeId)));
150cdf0e10cSrcweir         aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
151cdf0e10cSrcweir         aNumFormatLB.SetAutomaticLanguage(pCurField->IsAutomaticLanguage());
152cdf0e10cSrcweir         SwWrtShell *pSh = GetWrtShell();
153cdf0e10cSrcweir         if(!pSh)
154cdf0e10cSrcweir             pSh = ::GetActiveWrtShell();
155cdf0e10cSrcweir         if(pSh)
156cdf0e10cSrcweir         {
157cdf0e10cSrcweir             const SvNumberformat* pFormat = pSh->GetNumberFormatter()->GetEntry(pCurField->GetFormat());
158cdf0e10cSrcweir             if(pFormat)
159cdf0e10cSrcweir                 aNumFormatLB.SetLanguage(pFormat->GetLanguage());
160cdf0e10cSrcweir         }
161cdf0e10cSrcweir     }
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 	// alte Pos selektieren
164cdf0e10cSrcweir 	RestorePos(&aTypeLB);
165cdf0e10cSrcweir 
166cdf0e10cSrcweir 	aTypeLB.SetDoubleClickHdl		(LINK(this, SwFldVarPage, InsertHdl));
167cdf0e10cSrcweir 	aTypeLB.SetSelectHdl			(LINK(this, SwFldVarPage, TypeHdl));
168cdf0e10cSrcweir 	aSelectionLB.SetSelectHdl		(LINK(this, SwFldVarPage, SubTypeHdl));
169cdf0e10cSrcweir 	aSelectionLB.SetDoubleClickHdl	(LINK(this, SwFldVarPage, InsertHdl));
170cdf0e10cSrcweir 	aFormatLB.SetDoubleClickHdl		(LINK(this, SwFldVarPage, InsertHdl));
171cdf0e10cSrcweir 	aNumFormatLB.SetDoubleClickHdl	(LINK(this, SwFldVarPage, InsertHdl));
172cdf0e10cSrcweir 	aNameED.SetModifyHdl			(LINK(this, SwFldVarPage, ModifyHdl));
173cdf0e10cSrcweir 	aValueED.SetModifyHdl			(LINK(this, SwFldVarPage, ModifyHdl));
174cdf0e10cSrcweir 	aNewDelTBX.SetClickHdl			(LINK(this, SwFldVarPage, TBClickHdl));
175cdf0e10cSrcweir 	aChapterLevelLB.SetSelectHdl	(LINK(this, SwFldVarPage, ChapterHdl));
176cdf0e10cSrcweir 	aSeparatorED.SetModifyHdl		(LINK(this, SwFldVarPage, SeparatorHdl));
177cdf0e10cSrcweir 
178cdf0e10cSrcweir 	if( !IsRefresh() )
179cdf0e10cSrcweir 	{
180cdf0e10cSrcweir 		String sUserData = GetUserData();
181cdf0e10cSrcweir 		if(!IsRefresh() && sUserData.GetToken(0, ';').EqualsIgnoreCaseAscii(USER_DATA_VERSION_1))
182cdf0e10cSrcweir 		{
183cdf0e10cSrcweir 			String sVal = sUserData.GetToken(1, ';');
184cdf0e10cSrcweir 			sal_uInt16 nVal = (sal_uInt16)sVal.ToInt32();
185cdf0e10cSrcweir 			if( USHRT_MAX != nVal )
186cdf0e10cSrcweir 			{
187cdf0e10cSrcweir 				for(sal_uInt16 i = 0; i < aTypeLB.GetEntryCount(); i++)
188cdf0e10cSrcweir 					if(nVal == (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(i))
189cdf0e10cSrcweir 					{
190cdf0e10cSrcweir 						aTypeLB.SelectEntryPos(i);
191cdf0e10cSrcweir 						break;
192cdf0e10cSrcweir 					}
193cdf0e10cSrcweir 			}
194cdf0e10cSrcweir 		}
195cdf0e10cSrcweir 	}
196cdf0e10cSrcweir 	TypeHdl(0);
197cdf0e10cSrcweir 
198cdf0e10cSrcweir 	aTypeLB.SetUpdateMode(sal_True);
199cdf0e10cSrcweir 
200cdf0e10cSrcweir 	if (IsFldEdit())
201cdf0e10cSrcweir 	{
202cdf0e10cSrcweir 		aSelectionLB.SaveValue();
203cdf0e10cSrcweir 		aFormatLB.SaveValue();
204cdf0e10cSrcweir 		nOldFormat = aNumFormatLB.GetFormat();
205cdf0e10cSrcweir 		aNameED.SaveValue();
206cdf0e10cSrcweir 		aValueED.SaveValue();
207cdf0e10cSrcweir 		aInvisibleCB.SaveValue();
208cdf0e10cSrcweir 		aChapterLevelLB.SaveValue();
209cdf0e10cSrcweir 		aSeparatorED.SaveValue();
210cdf0e10cSrcweir 	}
211cdf0e10cSrcweir }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir /*--------------------------------------------------------------------
214cdf0e10cSrcweir 	Beschreibung:
215cdf0e10cSrcweir  --------------------------------------------------------------------*/
216cdf0e10cSrcweir 
217cdf0e10cSrcweir IMPL_LINK( SwFldVarPage, TypeHdl, ListBox *, EMPTYARG )
218cdf0e10cSrcweir {
219cdf0e10cSrcweir 	// Alte ListBoxPos sichern
220cdf0e10cSrcweir 	const sal_uInt16 nOld = GetTypeSel();
221cdf0e10cSrcweir 
222cdf0e10cSrcweir 	// Aktuelle ListBoxPos
223cdf0e10cSrcweir 	SetTypeSel(aTypeLB.GetSelectEntryPos());
224cdf0e10cSrcweir 
225cdf0e10cSrcweir 	if(GetTypeSel() == LISTBOX_ENTRY_NOTFOUND)
226cdf0e10cSrcweir 	{
227cdf0e10cSrcweir 		SetTypeSel(0);
228cdf0e10cSrcweir 		aTypeLB.SelectEntryPos(0);
229cdf0e10cSrcweir 	}
230cdf0e10cSrcweir 
231cdf0e10cSrcweir 	if (nOld != GetTypeSel() || nOld == LISTBOX_ENTRY_NOTFOUND)
232cdf0e10cSrcweir 	{
233cdf0e10cSrcweir 		bInit = sal_True;
234cdf0e10cSrcweir 		if (nOld != LISTBOX_ENTRY_NOTFOUND)
235cdf0e10cSrcweir 		{
236cdf0e10cSrcweir 			aNameED.SetText(aEmptyStr);
237cdf0e10cSrcweir 			aValueED.SetText(aEmptyStr);
238cdf0e10cSrcweir 		}
239cdf0e10cSrcweir 
240cdf0e10cSrcweir 		aValueED.SetDropEnable(sal_False);
241cdf0e10cSrcweir 		UpdateSubType();	// Auswahl-Listboxen initialisieren
242cdf0e10cSrcweir 	}
243cdf0e10cSrcweir 
244cdf0e10cSrcweir 	bInit = sal_False;
245cdf0e10cSrcweir 
246cdf0e10cSrcweir 	return 0;
247cdf0e10cSrcweir }
248cdf0e10cSrcweir 
249cdf0e10cSrcweir /*--------------------------------------------------------------------
250cdf0e10cSrcweir 	Beschreibung:
251cdf0e10cSrcweir  --------------------------------------------------------------------*/
252cdf0e10cSrcweir 
253cdf0e10cSrcweir IMPL_LINK( SwFldVarPage, SubTypeHdl, ListBox *, pBox )
254cdf0e10cSrcweir {
255cdf0e10cSrcweir 	sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
256cdf0e10cSrcweir 	sal_uInt16 nSelPos = aSelectionLB.GetSelectEntryPos();
257cdf0e10cSrcweir 
258cdf0e10cSrcweir 	if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
259cdf0e10cSrcweir 		nSelPos = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nSelPos);
260cdf0e10cSrcweir 
261cdf0e10cSrcweir 	if (IsFldEdit() && (!pBox || bInit))
262cdf0e10cSrcweir 	{
263cdf0e10cSrcweir 		if (nTypeId != TYP_FORMELFLD)
264cdf0e10cSrcweir 			aNameED.SetText(GetFldMgr().GetCurFldPar1());
265cdf0e10cSrcweir 
266cdf0e10cSrcweir 		aValueED.SetText(GetFldMgr().GetCurFldPar2());
267cdf0e10cSrcweir 	}
268cdf0e10cSrcweir 
269cdf0e10cSrcweir 	if (aNameFT.GetText() != sOldNameFT)
270cdf0e10cSrcweir 		aNameFT.SetText(sOldNameFT);
271cdf0e10cSrcweir 	if (aValueFT.GetText() != sOldValueFT)
272cdf0e10cSrcweir 		aValueFT.SetText(sOldValueFT);
273cdf0e10cSrcweir 
274cdf0e10cSrcweir 	aNumFormatLB.SetUpdateMode(sal_False);
275cdf0e10cSrcweir 	aFormatLB.SetUpdateMode(sal_False);
276cdf0e10cSrcweir 	FillFormatLB(nTypeId);
277cdf0e10cSrcweir 
278cdf0e10cSrcweir 	sal_uInt16 nSize = aFormatLB.GetEntryCount();
279cdf0e10cSrcweir 
280cdf0e10cSrcweir 	sal_Bool bValue = sal_False, bName = sal_False, bNumFmt = sal_False,
281cdf0e10cSrcweir 			bInvisible = sal_False, bSeparator = sal_False, bChapterLevel = sal_False;
282cdf0e10cSrcweir 	sal_Bool bFormat = nSize != 0;
283cdf0e10cSrcweir 
284cdf0e10cSrcweir 	switch (nTypeId)
285cdf0e10cSrcweir 	{
286cdf0e10cSrcweir 		case TYP_USERFLD:
287cdf0e10cSrcweir 		{
288cdf0e10cSrcweir 			// Benutzertyp aendern oder anlegen
289cdf0e10cSrcweir 			SwUserFieldType* pType = (SwUserFieldType*)
290cdf0e10cSrcweir 				GetFldMgr().GetFldType(RES_USERFLD, nSelPos);
291cdf0e10cSrcweir 
292cdf0e10cSrcweir 			if (pType)
293cdf0e10cSrcweir 			{
294cdf0e10cSrcweir 				if (!IsFldEdit())
295cdf0e10cSrcweir 				{
296cdf0e10cSrcweir 					if (pBox || (bInit && !IsRefresh()))	// Nur bei Interaktion mit Maus
297cdf0e10cSrcweir 					{
298cdf0e10cSrcweir 						aNameED.SetText(pType->GetName());
299cdf0e10cSrcweir 
300cdf0e10cSrcweir 						if (pType->GetType() == UF_STRING)
301cdf0e10cSrcweir 						{
302cdf0e10cSrcweir 							aValueED.SetText(pType->GetContent());
303cdf0e10cSrcweir 							aNumFormatLB.SelectEntryPos(0);
304cdf0e10cSrcweir 						}
305cdf0e10cSrcweir 						else
306cdf0e10cSrcweir 							aValueED.SetText(pType->GetContent());
307cdf0e10cSrcweir //							aValueED.SetText(pType->GetContent(aNumFormatLB.GetFormat()));
308cdf0e10cSrcweir 					}
309cdf0e10cSrcweir 				}
310cdf0e10cSrcweir 				else
311cdf0e10cSrcweir 					aValueED.SetText(pType->GetContent());
312cdf0e10cSrcweir 			}
313cdf0e10cSrcweir 			else
314cdf0e10cSrcweir 			{
315cdf0e10cSrcweir 				if (pBox)	// Nur bei Interaktion mit Maus
316cdf0e10cSrcweir 				{
317cdf0e10cSrcweir 					aNameED.SetText(aEmptyStr);
318cdf0e10cSrcweir 					aValueED.SetText(aEmptyStr);
319cdf0e10cSrcweir 				}
320cdf0e10cSrcweir 			}
321cdf0e10cSrcweir 			bValue = bName = bNumFmt = bInvisible = sal_True;
322cdf0e10cSrcweir 
323cdf0e10cSrcweir 			aValueED.SetDropEnable(sal_True);
324cdf0e10cSrcweir 			break;
325cdf0e10cSrcweir 		}
326cdf0e10cSrcweir 
327cdf0e10cSrcweir 		case TYP_SETFLD:
328cdf0e10cSrcweir 			bValue = sal_True;
329cdf0e10cSrcweir 
330cdf0e10cSrcweir 			bNumFmt = bInvisible = sal_True;
331cdf0e10cSrcweir 
332cdf0e10cSrcweir 			if (!IsFldDlgHtmlMode())
333cdf0e10cSrcweir 				bName = sal_True;
334cdf0e10cSrcweir 			else
335cdf0e10cSrcweir 			{
336cdf0e10cSrcweir 				aNumFormatLB.Clear();
337cdf0e10cSrcweir 				sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_SETVAR_TEXT), 0);
338cdf0e10cSrcweir                 aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
339cdf0e10cSrcweir 				aNumFormatLB.SelectEntryPos(0);
340cdf0e10cSrcweir 			}
341cdf0e10cSrcweir 			// gibt es ein entprechendes SetField
342cdf0e10cSrcweir 			if (IsFldEdit() || pBox)	// Nur bei Interaktion mit Maus
343cdf0e10cSrcweir 			{
344cdf0e10cSrcweir 				if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
345cdf0e10cSrcweir 				{
346cdf0e10cSrcweir 					String sName(aSelectionLB.GetSelectEntry());
347cdf0e10cSrcweir 					aNameED.SetText(sName);
348cdf0e10cSrcweir 
349cdf0e10cSrcweir 					if (!IsFldDlgHtmlMode())
350cdf0e10cSrcweir 					{
351cdf0e10cSrcweir                         SwWrtShell *pSh = GetWrtShell();
352cdf0e10cSrcweir                         if(!pSh)
353cdf0e10cSrcweir                             pSh = ::GetActiveWrtShell();
354cdf0e10cSrcweir                         if(pSh)
355cdf0e10cSrcweir                         {
356cdf0e10cSrcweir                             SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*)
357cdf0e10cSrcweir                                     pSh->GetFldType(RES_SETEXPFLD, sName);
358cdf0e10cSrcweir 
359cdf0e10cSrcweir                             if (pSetTyp && pSetTyp->GetType() == nsSwGetSetExpType::GSE_STRING)
360cdf0e10cSrcweir                                 aNumFormatLB.SelectEntryPos(0); // Textuell
361cdf0e10cSrcweir                         }
362cdf0e10cSrcweir 					}
363cdf0e10cSrcweir 				}
364cdf0e10cSrcweir 			}
365cdf0e10cSrcweir 			if (IsFldEdit())
366cdf0e10cSrcweir 			{
367cdf0e10cSrcweir 				// GetFormula fuehrt bei Datumsformaten zu Problemen,
368cdf0e10cSrcweir 				// da nur der numerische Wert ohne Formatierung returned wird.
369cdf0e10cSrcweir 				// Muss aber verwendet werden, da sonst bei GetPar2 nur der vom
370cdf0e10cSrcweir 				// Kalkulator errechnete Wert angezeigt werden wuerde
371cdf0e10cSrcweir 				// (statt test2 = test + 1)
372cdf0e10cSrcweir 				aValueED.SetText(((SwSetExpField*)GetCurField())->GetFormula());
373cdf0e10cSrcweir 			}
374cdf0e10cSrcweir 			aValueED.SetDropEnable(sal_True);
375cdf0e10cSrcweir 			break;
376cdf0e10cSrcweir 
377cdf0e10cSrcweir 		case TYP_FORMELFLD:
378cdf0e10cSrcweir 			{
379cdf0e10cSrcweir 				bValue = sal_True;
380cdf0e10cSrcweir 				bNumFmt = sal_True;
381cdf0e10cSrcweir 				aValueFT.SetText(SW_RESSTR(STR_FORMULA));
382cdf0e10cSrcweir 				aValueED.SetDropEnable(sal_True);
383cdf0e10cSrcweir 			}
384cdf0e10cSrcweir 			break;
385cdf0e10cSrcweir 
386cdf0e10cSrcweir 		case TYP_GETFLD:
387cdf0e10cSrcweir 			{
388cdf0e10cSrcweir 				if (!IsFldEdit())
389cdf0e10cSrcweir 				{
390cdf0e10cSrcweir 					aNameED.SetText(aEmptyStr);
391cdf0e10cSrcweir 					aValueED.SetText(aEmptyStr);
392cdf0e10cSrcweir 				}
393cdf0e10cSrcweir 
394cdf0e10cSrcweir 				if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
395cdf0e10cSrcweir 				{
396cdf0e10cSrcweir 					String sName(aSelectionLB.GetSelectEntry());
397cdf0e10cSrcweir 					if (!IsFldEdit())
398cdf0e10cSrcweir 						aNameED.SetText(sName);
399cdf0e10cSrcweir 
400cdf0e10cSrcweir 					// gibt es ein entprechendes SetField
401cdf0e10cSrcweir                     SwWrtShell *pSh = GetWrtShell();
402cdf0e10cSrcweir                     if(!pSh)
403cdf0e10cSrcweir                         pSh = ::GetActiveWrtShell();
404cdf0e10cSrcweir                     if(pSh)
405cdf0e10cSrcweir                     {
406cdf0e10cSrcweir                         SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*)
407cdf0e10cSrcweir                                 pSh->GetFldType(RES_SETEXPFLD, sName);
408cdf0e10cSrcweir 
409cdf0e10cSrcweir                         if(pSetTyp)
410cdf0e10cSrcweir                         {
411cdf0e10cSrcweir                             if (pSetTyp->GetType() & nsSwGetSetExpType::GSE_STRING)    // Textuell?
412cdf0e10cSrcweir                                 bFormat = sal_True;
413cdf0e10cSrcweir                             else                    // Numerisch
414cdf0e10cSrcweir                                 bNumFmt = sal_True;
415cdf0e10cSrcweir                         }
416cdf0e10cSrcweir                     }
417cdf0e10cSrcweir 				}
418cdf0e10cSrcweir 				else
419cdf0e10cSrcweir 					bFormat = sal_False;
420cdf0e10cSrcweir 
421cdf0e10cSrcweir 				EnableInsert(bFormat|bNumFmt);
422cdf0e10cSrcweir 			}
423cdf0e10cSrcweir 			break;
424cdf0e10cSrcweir 
425cdf0e10cSrcweir 		case TYP_INPUTFLD:
426cdf0e10cSrcweir 			aValueFT.SetText(SW_RESSTR(STR_PROMPT));
427cdf0e10cSrcweir 
428cdf0e10cSrcweir 			if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
429cdf0e10cSrcweir 			{
430cdf0e10cSrcweir 				bValue = bNumFmt = sal_True;
431cdf0e10cSrcweir 
432cdf0e10cSrcweir 				String sName;
433cdf0e10cSrcweir 
434cdf0e10cSrcweir 				sName = aSelectionLB.GetSelectEntry();
435cdf0e10cSrcweir 				aNameED.SetText( sName );
436cdf0e10cSrcweir 
437cdf0e10cSrcweir 				// User- oder SetField ?
438cdf0e10cSrcweir 				sal_uInt16 nInpType = 0;
439cdf0e10cSrcweir                 nInpType = static_cast< sal_uInt16 >(GetFldMgr().GetFldType(RES_USERFLD, sName) ? 0 : TYP_SETINPFLD);
440cdf0e10cSrcweir 
441cdf0e10cSrcweir 				if (nInpType)	// SETEXPFLD
442cdf0e10cSrcweir 				{
443cdf0e10cSrcweir 					// gibt es ein entprechendes SetField
444cdf0e10cSrcweir 					SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*)
445cdf0e10cSrcweir 								GetFldMgr().GetFldType(RES_SETEXPFLD, sName);
446cdf0e10cSrcweir 
447cdf0e10cSrcweir 					if(pSetTyp)
448cdf0e10cSrcweir 					{
449cdf0e10cSrcweir 						if (pSetTyp->GetType() == nsSwGetSetExpType::GSE_STRING)	// Textuell?
450cdf0e10cSrcweir 						{
451cdf0e10cSrcweir 							aNumFormatLB.Clear();
452cdf0e10cSrcweir 
453cdf0e10cSrcweir 							sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_USERVAR_TEXT), 0);
454cdf0e10cSrcweir 							aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
455cdf0e10cSrcweir 							aNumFormatLB.SelectEntryPos(0);
456cdf0e10cSrcweir 						}
457cdf0e10cSrcweir 					}
458cdf0e10cSrcweir 					if (IsFldEdit() && (!pBox || bInit) )
459cdf0e10cSrcweir 						aValueED.SetText(((SwSetExpField*)GetCurField())->GetPromptText());
460cdf0e10cSrcweir 				}
461cdf0e10cSrcweir 				else	// USERFLD
462cdf0e10cSrcweir 					bFormat = bNumFmt = sal_False;
463cdf0e10cSrcweir 			}
464cdf0e10cSrcweir 			break;
465cdf0e10cSrcweir 
466cdf0e10cSrcweir 		case TYP_DDEFLD:
467cdf0e10cSrcweir 			aValueFT.SetText(SW_RESSTR(STR_DDE_CMD));
468cdf0e10cSrcweir 
469cdf0e10cSrcweir 			if (IsFldEdit() || pBox)	// Nur bei Interaktion mit Maus
470cdf0e10cSrcweir 			{
471cdf0e10cSrcweir 				if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
472cdf0e10cSrcweir 				{
473cdf0e10cSrcweir 					SwDDEFieldType* pType =
474cdf0e10cSrcweir 						(SwDDEFieldType*) GetFldMgr().GetFldType(RES_DDEFLD, nSelPos);
475cdf0e10cSrcweir 
476cdf0e10cSrcweir 					if(pType)
477cdf0e10cSrcweir 					{
478cdf0e10cSrcweir 						aNameED.SetText(pType->GetName());
479cdf0e10cSrcweir 
480cdf0e10cSrcweir 						//JP 28.08.95: DDE-Topics/-Items koennen Blanks in ihren
481cdf0e10cSrcweir 						//				Namen haben! Wird hier noch nicht beachtet
482cdf0e10cSrcweir 						String sCmd( pType->GetCmd() );
483cdf0e10cSrcweir                         sal_uInt16 nTmpPos = sCmd.SearchAndReplace( sfx2::cTokenSeperator, ' ' );
484cdf0e10cSrcweir                         sCmd.SearchAndReplace( sfx2::cTokenSeperator, ' ', nTmpPos );
485cdf0e10cSrcweir 
486cdf0e10cSrcweir 						aValueED.SetText( sCmd );
487cdf0e10cSrcweir 						aFormatLB.SelectEntryPos(pType->GetType());
488cdf0e10cSrcweir 					}
489cdf0e10cSrcweir 				}
490cdf0e10cSrcweir 			}
491cdf0e10cSrcweir 			bName = bValue = sal_True;
492cdf0e10cSrcweir 			break;
493cdf0e10cSrcweir 
494cdf0e10cSrcweir 		case TYP_SEQFLD:
495cdf0e10cSrcweir 			{
496cdf0e10cSrcweir 				// aNumRB.Check(sal_True);
497cdf0e10cSrcweir 				bName = bValue = bSeparator = bChapterLevel = sal_True;
498cdf0e10cSrcweir 
499cdf0e10cSrcweir 				SwFieldType* pFldTyp;
500cdf0e10cSrcweir 				if( IsFldEdit() )
501cdf0e10cSrcweir 					pFldTyp = GetCurField()->GetTyp();
502cdf0e10cSrcweir 				else
503cdf0e10cSrcweir 				{
504cdf0e10cSrcweir 					String sFldTypeName( aSelectionLB.GetEntry( nSelPos ));
505cdf0e10cSrcweir 					if( sFldTypeName.Len() )
506cdf0e10cSrcweir 						pFldTyp = GetFldMgr().GetFldType( RES_SETEXPFLD,
507cdf0e10cSrcweir 														  sFldTypeName );
508cdf0e10cSrcweir 					else
509cdf0e10cSrcweir 						pFldTyp = 0;
510cdf0e10cSrcweir 				}
511cdf0e10cSrcweir 
512cdf0e10cSrcweir 				if( IsFldEdit() )
513cdf0e10cSrcweir 					aValueED.SetText( ((SwSetExpField*)GetCurField())->
514cdf0e10cSrcweir 										GetFormula() );
515cdf0e10cSrcweir 
516cdf0e10cSrcweir 				if( IsFldEdit() || pBox )	// Nur bei Interaktion mit Maus
517cdf0e10cSrcweir 					aNameED.SetText( aSelectionLB.GetSelectEntry() );
518cdf0e10cSrcweir 
519cdf0e10cSrcweir 				if( pFldTyp )
520cdf0e10cSrcweir 				{
521cdf0e10cSrcweir 					sal_uInt8 nLevel = ((SwSetExpFieldType*)pFldTyp)->GetOutlineLvl();
522cdf0e10cSrcweir 					if( 0x7f == nLevel )
523cdf0e10cSrcweir 						aChapterLevelLB.SelectEntryPos( 0 );
524cdf0e10cSrcweir 					else
525cdf0e10cSrcweir 						aChapterLevelLB.SelectEntryPos( nLevel + 1 );
526cdf0e10cSrcweir 					String sDelim = ((SwSetExpFieldType*)pFldTyp)->GetDelimiter();
527cdf0e10cSrcweir 					aSeparatorED.SetText( sDelim );
528cdf0e10cSrcweir 					ChapterHdl();
529cdf0e10cSrcweir 				}
530cdf0e10cSrcweir 			}
531cdf0e10cSrcweir 			break;
532cdf0e10cSrcweir 
533cdf0e10cSrcweir 		case TYP_SETREFPAGEFLD:
534cdf0e10cSrcweir 			{
535cdf0e10cSrcweir 				bValue = sal_False;
536cdf0e10cSrcweir 				aValueFT.SetText( SW_RESSTR( STR_OFFSET ));
537cdf0e10cSrcweir 
538cdf0e10cSrcweir 				if (IsFldEdit() || pBox)	// Nur bei Interaktion mit Maus
539cdf0e10cSrcweir 					aNameED.SetText(aEmptyStr);
540cdf0e10cSrcweir 
541cdf0e10cSrcweir 				if (nSelPos != 0 && nSelPos != LISTBOX_ENTRY_NOTFOUND)
542cdf0e10cSrcweir 				{
543cdf0e10cSrcweir 					bValue = sal_True;		// SubType OFF - kennt keinen Offset
544cdf0e10cSrcweir 					if (IsFldEdit())
545cdf0e10cSrcweir 						aValueED.SetText(String::CreateFromInt32(((SwRefPageSetField*)GetCurField())->GetOffset()));
546cdf0e10cSrcweir 				}
547cdf0e10cSrcweir 			}
548cdf0e10cSrcweir 			break;
549cdf0e10cSrcweir 
550cdf0e10cSrcweir 		case TYP_GETREFPAGEFLD:
551cdf0e10cSrcweir 			aNameED.SetText(aEmptyStr);
552cdf0e10cSrcweir 			aValueED.SetText(aEmptyStr);
553cdf0e10cSrcweir 			break;
554cdf0e10cSrcweir 	}
555cdf0e10cSrcweir 
556cdf0e10cSrcweir 	aNumFormatLB.Show(bNumFmt);
557cdf0e10cSrcweir 	aFormatLB.Show(!bNumFmt);
558cdf0e10cSrcweir 
559cdf0e10cSrcweir 	if (IsFldEdit())
560cdf0e10cSrcweir 		bName = sal_False;
561cdf0e10cSrcweir 
562cdf0e10cSrcweir 	aFormatLB.Enable(bFormat);
563cdf0e10cSrcweir 	aFormatFT.Enable(bFormat|bNumFmt);
564cdf0e10cSrcweir 	aNameFT.Enable(bName);
565cdf0e10cSrcweir 	aNameED.Enable(bName);
566cdf0e10cSrcweir 	aValueFT.Enable(bValue);
567cdf0e10cSrcweir 	aValueED.Enable(bValue);
568cdf0e10cSrcweir 
569cdf0e10cSrcweir 	Size aSz(aFormatLB.GetSizePixel());
570cdf0e10cSrcweir 
571cdf0e10cSrcweir 	if (bChapterLevel)
572cdf0e10cSrcweir 		aSz.Height() = aFormatLB.LogicToPixel(Size(1, 94), MAP_APPFONT).Height();
573cdf0e10cSrcweir 	else
574cdf0e10cSrcweir 		aSz.Height() = aFormatLB.LogicToPixel(Size(1, 123), MAP_APPFONT).Height();
575cdf0e10cSrcweir 
576cdf0e10cSrcweir 	aFormatLB.SetSizePixel(aSz);
577cdf0e10cSrcweir 
578cdf0e10cSrcweir 	aInvisibleCB.Show(!bSeparator);
579cdf0e10cSrcweir 	aSeparatorFT.Show(bSeparator);
580cdf0e10cSrcweir 	aSeparatorED.Show(bSeparator);
581cdf0e10cSrcweir 	aChapterHeaderFT.Show(bChapterLevel);
582cdf0e10cSrcweir 	aChapterLevelFT.Show(bChapterLevel);
583cdf0e10cSrcweir 	aChapterLevelLB.Show(bChapterLevel);
584cdf0e10cSrcweir 	aInvisibleCB.Enable(bInvisible);
585cdf0e10cSrcweir 
586cdf0e10cSrcweir 	ModifyHdl();	// Anwenden/Einfuegen/Loeschen Status update
587cdf0e10cSrcweir 
588cdf0e10cSrcweir 	aNumFormatLB.SetUpdateMode(sal_True);
589cdf0e10cSrcweir 	aFormatLB.SetUpdateMode(sal_True);
590cdf0e10cSrcweir 
591cdf0e10cSrcweir 	if(aSelectionLB.IsCallAddSelection())
592cdf0e10cSrcweir 	{
593cdf0e10cSrcweir         nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
594cdf0e10cSrcweir 
595cdf0e10cSrcweir 		switch (nTypeId)
596cdf0e10cSrcweir 		{
597cdf0e10cSrcweir 			case TYP_FORMELFLD:
598cdf0e10cSrcweir 				{
599cdf0e10cSrcweir                     nSelPos = aSelectionLB.GetSelectEntryPos();
600cdf0e10cSrcweir 
601cdf0e10cSrcweir 					if (nSelPos != LISTBOX_ENTRY_NOTFOUND)
602cdf0e10cSrcweir 						nSelPos = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nSelPos);
603cdf0e10cSrcweir 
604cdf0e10cSrcweir 					if (nSelPos != LISTBOX_ENTRY_NOTFOUND && pBox && !bInit)
605cdf0e10cSrcweir 					{
606cdf0e10cSrcweir 						aValueED.ReplaceSelected(aSelectionLB.GetSelectEntry());
607cdf0e10cSrcweir 						ModifyHdl();
608cdf0e10cSrcweir 					}
609cdf0e10cSrcweir 				}
610cdf0e10cSrcweir 				break;
611cdf0e10cSrcweir 		}
612cdf0e10cSrcweir 		aSelectionLB.ResetCallAddSelection();
613cdf0e10cSrcweir 	}
614cdf0e10cSrcweir 	return 0;
615cdf0e10cSrcweir }
616cdf0e10cSrcweir 
617cdf0e10cSrcweir /*--------------------------------------------------------------------
618cdf0e10cSrcweir 	 Beschreibung: Typen in der SelectionBox erneuern
619cdf0e10cSrcweir  --------------------------------------------------------------------*/
620cdf0e10cSrcweir 
621cdf0e10cSrcweir void SwFldVarPage::UpdateSubType()
622cdf0e10cSrcweir {
623cdf0e10cSrcweir 	String sOldSel;
624cdf0e10cSrcweir 	sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
625cdf0e10cSrcweir 
626cdf0e10cSrcweir 	SetSelectionSel(aSelectionLB.GetSelectEntryPos());
627cdf0e10cSrcweir 	if(GetSelectionSel() != LISTBOX_ENTRY_NOTFOUND)
628cdf0e10cSrcweir 		sOldSel = aSelectionLB.GetEntry(GetSelectionSel());
629cdf0e10cSrcweir 
630cdf0e10cSrcweir 	// Auswahl-Listbox fuellen
631cdf0e10cSrcweir 	aSelectionLB.SetUpdateMode(sal_False);
632cdf0e10cSrcweir 	aSelectionLB.Clear();
633cdf0e10cSrcweir 
634cdf0e10cSrcweir     SvStringsDtor aList;
635cdf0e10cSrcweir     GetFldMgr().GetSubTypes(nTypeId, aList);
636cdf0e10cSrcweir     sal_uInt16 nCount = aList.Count();
637cdf0e10cSrcweir 	sal_uInt16 nPos;
638cdf0e10cSrcweir 
639cdf0e10cSrcweir 	for (sal_uInt16 i = 0; i < nCount; ++i)
640cdf0e10cSrcweir 	{
641cdf0e10cSrcweir 		if (nTypeId != TYP_INPUTFLD || i)
642cdf0e10cSrcweir 		{
643cdf0e10cSrcweir 			if (!IsFldEdit())
644cdf0e10cSrcweir 			{
645cdf0e10cSrcweir                 nPos = aSelectionLB.InsertEntry(*aList[i]);
646cdf0e10cSrcweir                 aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
647cdf0e10cSrcweir 			}
648cdf0e10cSrcweir 			else
649cdf0e10cSrcweir 			{
650cdf0e10cSrcweir 				sal_Bool bInsert = sal_False;
651cdf0e10cSrcweir 
652cdf0e10cSrcweir 				switch (nTypeId)
653cdf0e10cSrcweir 				{
654cdf0e10cSrcweir 					case TYP_INPUTFLD:
655cdf0e10cSrcweir                         if (*aList[i] == GetCurField()->GetPar1())
656cdf0e10cSrcweir 							bInsert = sal_True;
657cdf0e10cSrcweir 						break;
658cdf0e10cSrcweir 
659cdf0e10cSrcweir 					case TYP_FORMELFLD:
660cdf0e10cSrcweir 						bInsert = sal_True;
661cdf0e10cSrcweir 						break;
662cdf0e10cSrcweir 
663cdf0e10cSrcweir 					case TYP_GETFLD:
664cdf0e10cSrcweir                         if (*aList[i] == ((SwFormulaField*)GetCurField())->GetFormula())
665cdf0e10cSrcweir 							bInsert = sal_True;
666cdf0e10cSrcweir 						break;
667cdf0e10cSrcweir 
668cdf0e10cSrcweir 					case TYP_SETFLD:
669cdf0e10cSrcweir 					case TYP_USERFLD:
670cdf0e10cSrcweir                         if (*aList[i] == GetCurField()->GetTyp()->GetName())
671cdf0e10cSrcweir 						{
672cdf0e10cSrcweir 							bInsert = sal_True;
673cdf0e10cSrcweir 							if (GetCurField()->GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE)
674cdf0e10cSrcweir 								aInvisibleCB.Check();
675cdf0e10cSrcweir 						}
676cdf0e10cSrcweir 						break;
677cdf0e10cSrcweir 
678cdf0e10cSrcweir 					case TYP_SETREFPAGEFLD:
679cdf0e10cSrcweir 						if ((((SwRefPageSetField*)GetCurField())->IsOn() && i) ||
680cdf0e10cSrcweir 							(!((SwRefPageSetField*)GetCurField())->IsOn() && !i))
681cdf0e10cSrcweir                             sOldSel = *aList[i];
682cdf0e10cSrcweir 
683cdf0e10cSrcweir 						// Alle Eintr?ge zur Auswahl zulassen:
684cdf0e10cSrcweir                         nPos = aSelectionLB.InsertEntry(*aList[i]);
685cdf0e10cSrcweir                         aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
686cdf0e10cSrcweir 						break;
687cdf0e10cSrcweir 
688cdf0e10cSrcweir 					default:
689cdf0e10cSrcweir                         if (*aList[i] == GetCurField()->GetPar1())
690cdf0e10cSrcweir 							bInsert = sal_True;
691cdf0e10cSrcweir 						break;
692cdf0e10cSrcweir 				}
693cdf0e10cSrcweir 				if (bInsert)
694cdf0e10cSrcweir 				{
695cdf0e10cSrcweir                     nPos = aSelectionLB.InsertEntry(*aList[i]);
696cdf0e10cSrcweir                     aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
697cdf0e10cSrcweir 					if (nTypeId != TYP_FORMELFLD)
698cdf0e10cSrcweir 						break;
699cdf0e10cSrcweir 				}
700cdf0e10cSrcweir 			}
701cdf0e10cSrcweir 		}
702cdf0e10cSrcweir 	}
703cdf0e10cSrcweir 
704cdf0e10cSrcweir 	sal_Bool bEnable = aSelectionLB.GetEntryCount() != 0;
705cdf0e10cSrcweir 	ListBox *pLB = 0;
706cdf0e10cSrcweir 
707cdf0e10cSrcweir 	if (bEnable)
708cdf0e10cSrcweir 	{
709cdf0e10cSrcweir 		aSelectionLB.SelectEntry(sOldSel);
710cdf0e10cSrcweir 		if (!aSelectionLB.GetSelectEntryCount())
711cdf0e10cSrcweir 		{
712cdf0e10cSrcweir 			aSelectionLB.SelectEntryPos(0);
713cdf0e10cSrcweir 			pLB = &aSelectionLB;	// Alle Controls neu initialisieren
714cdf0e10cSrcweir 		}
715cdf0e10cSrcweir 	}
716cdf0e10cSrcweir 
717cdf0e10cSrcweir 	aSelectionLB.Enable( bEnable );
718cdf0e10cSrcweir 	aSelectionFT.Enable( bEnable );
719cdf0e10cSrcweir 
720cdf0e10cSrcweir 	SubTypeHdl(pLB);
721cdf0e10cSrcweir 	aSelectionLB.SetUpdateMode(sal_True);
722cdf0e10cSrcweir }
723cdf0e10cSrcweir 
724cdf0e10cSrcweir /*--------------------------------------------------------------------
725cdf0e10cSrcweir 	Beschreibung:
726cdf0e10cSrcweir  --------------------------------------------------------------------*/
727cdf0e10cSrcweir 
728cdf0e10cSrcweir sal_uInt16 SwFldVarPage::FillFormatLB(sal_uInt16 nTypeId)
729cdf0e10cSrcweir {
730cdf0e10cSrcweir 	String sOldSel, sOldNumSel;
731cdf0e10cSrcweir 	sal_uLong nOldNumFormat = 0;
732cdf0e10cSrcweir 
733cdf0e10cSrcweir 	sal_uInt16 nFormatSel = aFormatLB.GetSelectEntryPos();
734cdf0e10cSrcweir 	if (nFormatSel != LISTBOX_ENTRY_NOTFOUND)
735cdf0e10cSrcweir 		sOldSel = aFormatLB.GetEntry(nFormatSel);
736cdf0e10cSrcweir 
737cdf0e10cSrcweir 	sal_uInt16 nNumFormatSel = aNumFormatLB.GetSelectEntryPos();
738cdf0e10cSrcweir 	if (nNumFormatSel != LISTBOX_ENTRY_NOTFOUND)
739cdf0e10cSrcweir 	{
740cdf0e10cSrcweir 		sOldNumSel = aNumFormatLB.GetEntry(nNumFormatSel);
741cdf0e10cSrcweir 		nOldNumFormat = aNumFormatLB.GetFormat();
742cdf0e10cSrcweir 	}
743cdf0e10cSrcweir 
744cdf0e10cSrcweir 	// Format-Listbox fuellen
745cdf0e10cSrcweir 	aFormatLB.Clear();
746cdf0e10cSrcweir 	aNumFormatLB.Clear();
747cdf0e10cSrcweir 	sal_Bool bSpecialFmt = sal_False;
748cdf0e10cSrcweir 
749cdf0e10cSrcweir 	if( TYP_GETREFPAGEFLD != nTypeId )
750cdf0e10cSrcweir 	{
751cdf0e10cSrcweir 		if (IsFldEdit())
752cdf0e10cSrcweir 		{
753cdf0e10cSrcweir             bSpecialFmt = GetCurField()->GetFormat() == SAL_MAX_UINT32;
754cdf0e10cSrcweir 
755cdf0e10cSrcweir 			if (!bSpecialFmt)
756cdf0e10cSrcweir 			{
757cdf0e10cSrcweir 				aNumFormatLB.SetDefFormat(GetCurField()->GetFormat());
758cdf0e10cSrcweir 				sOldNumSel = aEmptyStr;
759cdf0e10cSrcweir 			}
760cdf0e10cSrcweir 			else
761cdf0e10cSrcweir 				if (nTypeId == TYP_GETFLD || nTypeId == TYP_FORMELFLD)
762cdf0e10cSrcweir 					aNumFormatLB.SetFormatType(NUMBERFORMAT_NUMBER);
763cdf0e10cSrcweir 		}
764cdf0e10cSrcweir 		else
765cdf0e10cSrcweir 		{
766cdf0e10cSrcweir 			if (nOldNumFormat && nOldNumFormat != ULONG_MAX)
767cdf0e10cSrcweir 				aNumFormatLB.SetDefFormat(nOldNumFormat);
768cdf0e10cSrcweir 			else
769cdf0e10cSrcweir 				aNumFormatLB.SetFormatType(NUMBERFORMAT_NUMBER);
770cdf0e10cSrcweir 		}
771cdf0e10cSrcweir 	}
772cdf0e10cSrcweir 
773cdf0e10cSrcweir 	switch (nTypeId)
774cdf0e10cSrcweir 	{
775cdf0e10cSrcweir 		case TYP_USERFLD:
776cdf0e10cSrcweir 		{
777cdf0e10cSrcweir 			if (!IsFldEdit() || bSpecialFmt)
778cdf0e10cSrcweir 			{
779cdf0e10cSrcweir 				sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_MARK_TEXT), 0);
780cdf0e10cSrcweir 				aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
781cdf0e10cSrcweir 				nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_USERVAR_CMD), 1);
782cdf0e10cSrcweir 				aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
783cdf0e10cSrcweir 			}
784cdf0e10cSrcweir 		}
785cdf0e10cSrcweir 		break;
786cdf0e10cSrcweir 
787cdf0e10cSrcweir 		case TYP_SETFLD:
788cdf0e10cSrcweir 		{
789cdf0e10cSrcweir 			if (!IsFldEdit() || bSpecialFmt)
790cdf0e10cSrcweir 			{
791cdf0e10cSrcweir 				sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_SETVAR_TEXT), 0);
792cdf0e10cSrcweir 				aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
793cdf0e10cSrcweir 			}
794cdf0e10cSrcweir 		}
795cdf0e10cSrcweir 		break;
796cdf0e10cSrcweir 
797cdf0e10cSrcweir 		case TYP_FORMELFLD:
798cdf0e10cSrcweir 		{
799cdf0e10cSrcweir 			sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_GETVAR_NAME), 0);
800cdf0e10cSrcweir 			aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
801cdf0e10cSrcweir 		}
802cdf0e10cSrcweir 		break;
803cdf0e10cSrcweir 
804cdf0e10cSrcweir 		case TYP_GETFLD:
805cdf0e10cSrcweir 		{
806cdf0e10cSrcweir 			sal_uInt16 nPos = aNumFormatLB.InsertEntry(SW_RESSTR(FMT_GETVAR_NAME), 0);
807cdf0e10cSrcweir 			aNumFormatLB.SetEntryData(nPos, (void *)ULONG_MAX);
808cdf0e10cSrcweir 		}
809cdf0e10cSrcweir 		break;
810cdf0e10cSrcweir 	}
811cdf0e10cSrcweir 
812cdf0e10cSrcweir 	if (IsFldEdit() && bSpecialFmt)
813cdf0e10cSrcweir 	{
814cdf0e10cSrcweir 		if (nTypeId == TYP_USERFLD && (GetCurField()->GetSubType() & nsSwExtendedSubType::SUB_CMD))
815cdf0e10cSrcweir 			aNumFormatLB.SelectEntryPos(1);
816cdf0e10cSrcweir 		else
817cdf0e10cSrcweir 			aNumFormatLB.SelectEntryPos(0);
818cdf0e10cSrcweir 	}
819cdf0e10cSrcweir 	else
820cdf0e10cSrcweir 	{
821cdf0e10cSrcweir 		if (!nOldNumFormat && (nNumFormatSel = aNumFormatLB.GetEntryPos(sOldNumSel)) != LISTBOX_ENTRY_NOTFOUND)
822cdf0e10cSrcweir 			aNumFormatLB.SelectEntryPos(nNumFormatSel);
823cdf0e10cSrcweir 		else if (nOldNumFormat && nOldNumFormat == ULONG_MAX)
824cdf0e10cSrcweir 			aNumFormatLB.SelectEntry(sOldSel);
825cdf0e10cSrcweir 	}
826cdf0e10cSrcweir 
827cdf0e10cSrcweir 	sal_uInt16 nSize = GetFldMgr().GetFormatCount(nTypeId, sal_False, IsFldDlgHtmlMode());
828cdf0e10cSrcweir 
829cdf0e10cSrcweir 	for (sal_uInt16 i = 0; i < nSize; i++)
830cdf0e10cSrcweir 	{
831cdf0e10cSrcweir 		sal_uInt16 nPos = aFormatLB.InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
832cdf0e10cSrcweir 		sal_uInt16 nFldId = GetFldMgr().GetFormatId( nTypeId, i );
833cdf0e10cSrcweir         aFormatLB.SetEntryData( nPos, reinterpret_cast<void*>(nFldId) );
834cdf0e10cSrcweir 		if (IsFldEdit() && nFldId == GetCurField()->GetFormat())
835cdf0e10cSrcweir 			aFormatLB.SelectEntryPos( nPos );
836cdf0e10cSrcweir 	}
837cdf0e10cSrcweir 
838cdf0e10cSrcweir 	if (nSize && (!IsFldEdit() || !aFormatLB.GetSelectEntryCount()))
839cdf0e10cSrcweir 	{
840cdf0e10cSrcweir 		aFormatLB.SelectEntry(sOldSel);
841cdf0e10cSrcweir 
842cdf0e10cSrcweir 		if (!aFormatLB.GetSelectEntryCount())
843cdf0e10cSrcweir 		{
844cdf0e10cSrcweir 			aFormatLB.SelectEntry(SW_RESSTR(FMT_NUM_PAGEDESC));
845cdf0e10cSrcweir 			if (!aFormatLB.GetSelectEntryCount())
846cdf0e10cSrcweir 			{
847cdf0e10cSrcweir 				aFormatLB.SelectEntry(SW_RESSTR(FMT_NUM_ARABIC));
848cdf0e10cSrcweir 				if (!aFormatLB.GetSelectEntryCount())
849cdf0e10cSrcweir 					aFormatLB.SelectEntryPos(0);
850cdf0e10cSrcweir 			}
851cdf0e10cSrcweir 		}
852cdf0e10cSrcweir 	}
853cdf0e10cSrcweir 
854cdf0e10cSrcweir 	return nSize;
855cdf0e10cSrcweir }
856cdf0e10cSrcweir 
857cdf0e10cSrcweir /*--------------------------------------------------------------------
858cdf0e10cSrcweir 	Beschreibung: Modify
859cdf0e10cSrcweir  --------------------------------------------------------------------*/
860cdf0e10cSrcweir 
861cdf0e10cSrcweir IMPL_LINK( SwFldVarPage, ModifyHdl, Edit *, EMPTYARG )
862cdf0e10cSrcweir {
863cdf0e10cSrcweir 	String sValue(aValueED.GetText());
864cdf0e10cSrcweir 	sal_Bool bHasValue = sValue.Len() != 0;
865cdf0e10cSrcweir 	sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
866cdf0e10cSrcweir 	sal_Bool bInsert = sal_False, bApply = sal_False, bDelete = sal_False;
867cdf0e10cSrcweir 
868cdf0e10cSrcweir 	String sName( aNameED.GetText() );
869cdf0e10cSrcweir 	xub_StrLen nLen = sName.Len();
870cdf0e10cSrcweir 
871cdf0e10cSrcweir 	switch( nTypeId )
872cdf0e10cSrcweir 	{
873cdf0e10cSrcweir 	case TYP_DDEFLD:
874cdf0e10cSrcweir 	case TYP_USERFLD:
875cdf0e10cSrcweir 	case TYP_SETFLD:
876cdf0e10cSrcweir 	case TYP_SEQFLD:
877cdf0e10cSrcweir 		SwCalc::IsValidVarName( sName, &sName );
878cdf0e10cSrcweir 		if( sName.Len() != nLen )
879cdf0e10cSrcweir 		{
880cdf0e10cSrcweir 			nLen = sName.Len();
881cdf0e10cSrcweir 			Selection aSel(aNameED.GetSelection());
882cdf0e10cSrcweir 			aNameED.SetText( sName );
883cdf0e10cSrcweir 			aNameED.SetSelection( aSel );	// Cursorpos restaurieren
884cdf0e10cSrcweir 		}
885cdf0e10cSrcweir 		break;
886cdf0e10cSrcweir 	}
887cdf0e10cSrcweir 
888cdf0e10cSrcweir 
889cdf0e10cSrcweir 	// Buttons ueberpruefen
890cdf0e10cSrcweir 	switch (nTypeId)
891cdf0e10cSrcweir 	{
892cdf0e10cSrcweir 	case TYP_DDEFLD:
893cdf0e10cSrcweir 		if( nLen )
894cdf0e10cSrcweir 		{
895cdf0e10cSrcweir 			// Gibts schon einen entsprechenden Type
896cdf0e10cSrcweir 			bInsert = bApply = sal_True;
897cdf0e10cSrcweir 
898cdf0e10cSrcweir 			SwFieldType* pType = GetFldMgr().GetFldType(RES_DDEFLD, sName);
899cdf0e10cSrcweir 
900cdf0e10cSrcweir             SwWrtShell *pSh = GetWrtShell();
901cdf0e10cSrcweir             if(!pSh)
902cdf0e10cSrcweir                 pSh = ::GetActiveWrtShell();
903cdf0e10cSrcweir             if(pSh && pType)
904cdf0e10cSrcweir                 bDelete = !pSh->IsUsed( *pType );
905cdf0e10cSrcweir 		}
906cdf0e10cSrcweir 		break;
907cdf0e10cSrcweir 
908cdf0e10cSrcweir 	case TYP_USERFLD:
909cdf0e10cSrcweir 		if( nLen )
910cdf0e10cSrcweir 		{
911cdf0e10cSrcweir 			// Gibts schon einen entsprechenden Type
912cdf0e10cSrcweir 			SwFieldType* pType = GetFldMgr().GetFldType(RES_USERFLD, sName);
913cdf0e10cSrcweir 
914cdf0e10cSrcweir             SwWrtShell *pSh = GetWrtShell();
915cdf0e10cSrcweir             if(!pSh)
916cdf0e10cSrcweir                 pSh = ::GetActiveWrtShell();
917cdf0e10cSrcweir             if(pSh && pType)
918cdf0e10cSrcweir                 bDelete = !pSh->IsUsed( *pType );
919cdf0e10cSrcweir 
920cdf0e10cSrcweir 			pType = GetFldMgr().GetFldType(RES_SETEXPFLD, sName);
921cdf0e10cSrcweir 			if (!pType)	// Kein Namenskonflikt mit Variablen
922cdf0e10cSrcweir 			{
923cdf0e10cSrcweir 				// Benutzerfelder duerfen auch ohne Inhalt eingefuegt werden!
924cdf0e10cSrcweir 				// Bug #56845
925cdf0e10cSrcweir 				bInsert = bApply = sal_True;
926cdf0e10cSrcweir 			}
927cdf0e10cSrcweir 		}
928cdf0e10cSrcweir 		break;
929cdf0e10cSrcweir 
930cdf0e10cSrcweir 	default:
931cdf0e10cSrcweir 		bInsert = sal_True;
932cdf0e10cSrcweir 
933cdf0e10cSrcweir 		if (nTypeId == TYP_SETFLD || nTypeId == TYP_SEQFLD)
934cdf0e10cSrcweir 		{
935cdf0e10cSrcweir 			SwSetExpFieldType* pFldType = (SwSetExpFieldType*)
936cdf0e10cSrcweir 				GetFldMgr().GetFldType(RES_SETEXPFLD, sName);
937cdf0e10cSrcweir 
938cdf0e10cSrcweir 			if (pFldType)
939cdf0e10cSrcweir 			{
940cdf0e10cSrcweir 
941cdf0e10cSrcweir                 SwWrtShell *pSh = GetWrtShell();
942cdf0e10cSrcweir                 if(!pSh)
943cdf0e10cSrcweir                     pSh = ::GetActiveWrtShell();
944cdf0e10cSrcweir                 if(pSh)
945cdf0e10cSrcweir                 {
946cdf0e10cSrcweir                     const SwFldTypes* p = pSh->GetDoc()->GetFldTypes();
947cdf0e10cSrcweir                     sal_uInt16 i;
948cdf0e10cSrcweir 
949cdf0e10cSrcweir                     for (i = 0; i < INIT_FLDTYPES; i++)
950cdf0e10cSrcweir                     {
951cdf0e10cSrcweir                         SwFieldType* pType = (*p)[ i ];
952cdf0e10cSrcweir                         if (pType == pFldType)
953cdf0e10cSrcweir                             break;
954cdf0e10cSrcweir                     }
955cdf0e10cSrcweir 
956cdf0e10cSrcweir                     if (i >= INIT_FLDTYPES && !pSh->IsUsed(*pFldType))
957cdf0e10cSrcweir                         bDelete = sal_True;
958cdf0e10cSrcweir 
959cdf0e10cSrcweir                     if (nTypeId == TYP_SEQFLD && !(pFldType->GetType() & nsSwGetSetExpType::GSE_SEQ))
960cdf0e10cSrcweir                         bInsert = sal_False;
961cdf0e10cSrcweir 
962cdf0e10cSrcweir                     if (nTypeId == TYP_SETFLD && (pFldType->GetType() & nsSwGetSetExpType::GSE_SEQ))
963cdf0e10cSrcweir                         bInsert = sal_False;
964cdf0e10cSrcweir                 }
965cdf0e10cSrcweir 			}
966cdf0e10cSrcweir 			if (GetFldMgr().GetFldType(RES_USERFLD, sName))
967cdf0e10cSrcweir 				bInsert = sal_False;
968cdf0e10cSrcweir 		}
969cdf0e10cSrcweir 
970cdf0e10cSrcweir 		if( !nLen && ( nTypeId == TYP_SETFLD ||
971cdf0e10cSrcweir 						(!IsFldEdit() && nTypeId == TYP_GETFLD ) ) )
972cdf0e10cSrcweir 			bInsert = sal_False;
973cdf0e10cSrcweir 
974cdf0e10cSrcweir 		if( (nTypeId == TYP_SETFLD || nTypeId == TYP_FORMELFLD) &&
975cdf0e10cSrcweir 			!bHasValue )
976cdf0e10cSrcweir 			bInsert = sal_False;
977cdf0e10cSrcweir 		break;
978cdf0e10cSrcweir 	}
979cdf0e10cSrcweir 
980cdf0e10cSrcweir 	aNewDelTBX.EnableItem(BT_VARAPPLY, bApply);
981cdf0e10cSrcweir 	aNewDelTBX.EnableItem(BT_VARDELETE, bDelete);
982cdf0e10cSrcweir 	EnableInsert(bInsert);
983cdf0e10cSrcweir 
984cdf0e10cSrcweir 	return 0;
985cdf0e10cSrcweir }
986cdf0e10cSrcweir 
987cdf0e10cSrcweir /*--------------------------------------------------------------------
988cdf0e10cSrcweir 	Beschreibung:
989cdf0e10cSrcweir  --------------------------------------------------------------------*/
990cdf0e10cSrcweir 
991cdf0e10cSrcweir IMPL_LINK( SwFldVarPage, TBClickHdl, ToolBox *, pBox )
992cdf0e10cSrcweir {
993cdf0e10cSrcweir 	sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
994cdf0e10cSrcweir 
995cdf0e10cSrcweir 	switch (pBox->GetCurItemId())
996cdf0e10cSrcweir 	{
997cdf0e10cSrcweir 		case BT_VARDELETE:
998cdf0e10cSrcweir 		{
999cdf0e10cSrcweir 			if( nTypeId == TYP_USERFLD )
1000cdf0e10cSrcweir 				GetFldMgr().RemoveFldType(RES_USERFLD, aSelectionLB.GetSelectEntry());
1001cdf0e10cSrcweir 			else
1002cdf0e10cSrcweir 			{
1003cdf0e10cSrcweir 				sal_uInt16 nWhich;
1004cdf0e10cSrcweir 
1005cdf0e10cSrcweir 				switch(nTypeId)
1006cdf0e10cSrcweir 				{
1007cdf0e10cSrcweir 					case TYP_SETFLD:
1008cdf0e10cSrcweir 					case TYP_SEQFLD:
1009cdf0e10cSrcweir 						nWhich = RES_SETEXPFLD;
1010cdf0e10cSrcweir 						break;
1011cdf0e10cSrcweir 					default:
1012cdf0e10cSrcweir 						nWhich = RES_DDEFLD;
1013cdf0e10cSrcweir 						break;
1014cdf0e10cSrcweir 				}
1015cdf0e10cSrcweir 
1016cdf0e10cSrcweir 				GetFldMgr().RemoveFldType(nWhich, aSelectionLB.GetSelectEntry());
1017cdf0e10cSrcweir 			}
1018cdf0e10cSrcweir 
1019cdf0e10cSrcweir 			UpdateSubType();
1020cdf0e10cSrcweir             SwWrtShell *pSh = GetWrtShell();
1021cdf0e10cSrcweir             if(!pSh)
1022cdf0e10cSrcweir                 pSh = ::GetActiveWrtShell();
1023cdf0e10cSrcweir             if(pSh)
1024cdf0e10cSrcweir             {
1025cdf0e10cSrcweir                 pSh->SetModified();
1026cdf0e10cSrcweir             }
1027cdf0e10cSrcweir 		}
1028cdf0e10cSrcweir 		break;
1029cdf0e10cSrcweir 
1030cdf0e10cSrcweir 		case BT_VARAPPLY:
1031cdf0e10cSrcweir 		{
1032cdf0e10cSrcweir 			String sName(aNameED.GetText()), sValue(aValueED.GetText());
1033cdf0e10cSrcweir 			SwFieldType* pType = 0;
1034cdf0e10cSrcweir             sal_uInt16 nId = 0;
1035cdf0e10cSrcweir 			sal_uInt16 nNumFormatPos = aNumFormatLB.GetSelectEntryPos();
1036cdf0e10cSrcweir 
1037cdf0e10cSrcweir 			switch (nTypeId)
1038cdf0e10cSrcweir 			{
1039cdf0e10cSrcweir 				case TYP_USERFLD:	nId = RES_USERFLD;	break;
1040cdf0e10cSrcweir 				case TYP_DDEFLD:	nId = RES_DDEFLD;	break;
1041cdf0e10cSrcweir 				case TYP_SETFLD:	nId = RES_SETEXPFLD;break;
1042cdf0e10cSrcweir 			}
1043cdf0e10cSrcweir 			pType = GetFldMgr().GetFldType(nId, sName);
1044cdf0e10cSrcweir 
1045cdf0e10cSrcweir 			sal_uLong nFormat = aFormatLB.GetSelectEntryPos();
1046cdf0e10cSrcweir 			if (nFormat != LISTBOX_ENTRY_NOTFOUND)
1047cdf0e10cSrcweir 				nFormat = (sal_uLong)aFormatLB.GetEntryData((sal_uInt16)nFormat);
1048cdf0e10cSrcweir 
1049cdf0e10cSrcweir 			if (pType)	// Aendern
1050cdf0e10cSrcweir 			{
1051cdf0e10cSrcweir                 SwWrtShell *pSh = GetWrtShell();
1052cdf0e10cSrcweir                 if(!pSh)
1053cdf0e10cSrcweir                     pSh = ::GetActiveWrtShell();
1054cdf0e10cSrcweir                 if(pSh)
1055cdf0e10cSrcweir                 {
1056cdf0e10cSrcweir                     pSh->StartAllAction();
1057cdf0e10cSrcweir 
1058cdf0e10cSrcweir                     if (nTypeId == TYP_USERFLD)
1059cdf0e10cSrcweir                     {
1060cdf0e10cSrcweir                         if (nNumFormatPos != LISTBOX_ENTRY_NOTFOUND)
1061cdf0e10cSrcweir                         {
1062cdf0e10cSrcweir                             sal_uLong nFmt = nNumFormatPos == 0 ? 0 : aNumFormatLB.GetFormat();
1063cdf0e10cSrcweir                             if (nFmt)
1064cdf0e10cSrcweir                             {   // Sprache auf Office-Sprache umstellen, da String im Office
1065cdf0e10cSrcweir                                 // Format vom Kalkulator erwartet wird und so in den Dlg
1066cdf0e10cSrcweir                                 // eingegeben werden sollte
1067cdf0e10cSrcweir                                 nFmt = SwValueField::GetSystemFormat(pSh->GetNumberFormatter(), nFmt);
1068cdf0e10cSrcweir                             }
1069cdf0e10cSrcweir                             ((SwUserFieldType*)pType)->SetContent(aValueED.GetText(), nFmt);
1070cdf0e10cSrcweir                             ((SwUserFieldType*)pType)->SetType(
1071cdf0e10cSrcweir                                 nNumFormatPos == 0 ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR );
1072cdf0e10cSrcweir                         }
1073cdf0e10cSrcweir                     }
1074cdf0e10cSrcweir                     else
1075cdf0e10cSrcweir                     {
1076cdf0e10cSrcweir                         if (nFormat != LISTBOX_ENTRY_NOTFOUND)
1077cdf0e10cSrcweir                         {
1078cdf0e10cSrcweir                             //JP 28.08.95: DDE-Topics/-Items koennen Blanks in ihren
1079cdf0e10cSrcweir                             //              Namen haben! Wird hier noch nicht beachtet.
1080cdf0e10cSrcweir                             sal_uInt16 nTmpPos = sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator );
1081cdf0e10cSrcweir                             sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator, nTmpPos );
1082cdf0e10cSrcweir                             ((SwDDEFieldType*)pType)->SetCmd(sValue);
1083cdf0e10cSrcweir                             ((SwDDEFieldType*)pType)->SetType((sal_uInt16)nFormat);
1084cdf0e10cSrcweir                         }
1085cdf0e10cSrcweir                     }
1086cdf0e10cSrcweir                     pType->UpdateFlds();
1087cdf0e10cSrcweir 
1088cdf0e10cSrcweir                     pSh->EndAllAction();
1089cdf0e10cSrcweir                 }
1090cdf0e10cSrcweir 			}
1091cdf0e10cSrcweir 			else		// Neu
1092cdf0e10cSrcweir 			{
1093cdf0e10cSrcweir 				if(nTypeId == TYP_USERFLD)
1094cdf0e10cSrcweir 				{
1095cdf0e10cSrcweir                     SwWrtShell *pSh = GetWrtShell();
1096cdf0e10cSrcweir                     if(!pSh)
1097cdf0e10cSrcweir                         pSh = ::GetActiveWrtShell();
1098cdf0e10cSrcweir                     if(pSh)
1099cdf0e10cSrcweir                     {
1100cdf0e10cSrcweir                         SwUserFieldType aType( pSh->GetDoc(), sName );
1101cdf0e10cSrcweir 
1102cdf0e10cSrcweir                         if (nNumFormatPos != LISTBOX_ENTRY_NOTFOUND)
1103cdf0e10cSrcweir                         {
1104cdf0e10cSrcweir                             aType.SetType(nNumFormatPos == 0 ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR);
1105cdf0e10cSrcweir                             aType.SetContent( sValue, nNumFormatPos == 0 ? 0 : aNumFormatLB.GetFormat() );
1106cdf0e10cSrcweir                             aSelectionLB.InsertEntry(sName);
1107cdf0e10cSrcweir                             aSelectionLB.SelectEntry(sName);
1108cdf0e10cSrcweir                             GetFldMgr().InsertFldType( aType ); // Userfld Neu
1109cdf0e10cSrcweir                         }
1110cdf0e10cSrcweir                     }
1111cdf0e10cSrcweir 				}
1112cdf0e10cSrcweir 				else
1113cdf0e10cSrcweir 				{
1114cdf0e10cSrcweir 					if (nFormat != LISTBOX_ENTRY_NOTFOUND)
1115cdf0e10cSrcweir 					{
1116cdf0e10cSrcweir 						//JP 28.08.95: DDE-Topics/-Items koennen Blanks in ihren
1117cdf0e10cSrcweir 						//				Namen haben! Wird hier noch nicht beachtet.
1118cdf0e10cSrcweir                         sal_uInt16 nTmpPos = sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator );
1119cdf0e10cSrcweir                         sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator, nTmpPos );
1120cdf0e10cSrcweir 
1121cdf0e10cSrcweir 						SwDDEFieldType aType(sName, sValue, (sal_uInt16)nFormat);
1122cdf0e10cSrcweir 						aSelectionLB.InsertEntry(sName);
1123cdf0e10cSrcweir 						aSelectionLB.SelectEntry(sName);
1124cdf0e10cSrcweir 						GetFldMgr().InsertFldType(aType);	// DDE-Feld Neu
1125cdf0e10cSrcweir 					}
1126cdf0e10cSrcweir 				}
1127cdf0e10cSrcweir 			}
1128cdf0e10cSrcweir 			if (IsFldEdit())
1129cdf0e10cSrcweir 				GetFldMgr().GetCurFld();	// FieldManager Updaten
1130cdf0e10cSrcweir 
1131cdf0e10cSrcweir 			UpdateSubType();
1132cdf0e10cSrcweir 		}
1133cdf0e10cSrcweir 		break;
1134cdf0e10cSrcweir 	}
1135cdf0e10cSrcweir 
1136cdf0e10cSrcweir 	return sal_True;
1137cdf0e10cSrcweir }
1138cdf0e10cSrcweir 
1139cdf0e10cSrcweir /*--------------------------------------------------------------------
1140cdf0e10cSrcweir 	Beschreibung:
1141cdf0e10cSrcweir  --------------------------------------------------------------------*/
1142cdf0e10cSrcweir 
1143cdf0e10cSrcweir IMPL_LINK( SwFldVarPage, ChapterHdl, ListBox *, EMPTYARG )
1144cdf0e10cSrcweir {
1145cdf0e10cSrcweir 	sal_Bool bEnable = aChapterLevelLB.GetSelectEntryPos() != 0;
1146cdf0e10cSrcweir 
1147cdf0e10cSrcweir 	aSeparatorED.Enable(bEnable);
1148cdf0e10cSrcweir 	aSeparatorFT.Enable(bEnable);
1149cdf0e10cSrcweir 	SeparatorHdl();
1150cdf0e10cSrcweir 
1151cdf0e10cSrcweir 	return 0;
1152cdf0e10cSrcweir }
1153cdf0e10cSrcweir 
1154cdf0e10cSrcweir /*--------------------------------------------------------------------
1155cdf0e10cSrcweir 	Beschreibung:
1156cdf0e10cSrcweir  --------------------------------------------------------------------*/
1157cdf0e10cSrcweir 
1158cdf0e10cSrcweir IMPL_LINK( SwFldVarPage, SeparatorHdl, Edit *, EMPTYARG )
1159cdf0e10cSrcweir {
1160cdf0e10cSrcweir 	sal_Bool bEnable = aSeparatorED.GetText().Len() != 0 ||
1161cdf0e10cSrcweir 					aChapterLevelLB.GetSelectEntryPos() == 0;
1162cdf0e10cSrcweir 	EnableInsert(bEnable);
1163cdf0e10cSrcweir 
1164cdf0e10cSrcweir 	return 0;
1165cdf0e10cSrcweir }
1166cdf0e10cSrcweir 
1167cdf0e10cSrcweir /*--------------------------------------------------------------------
1168cdf0e10cSrcweir 	Beschreibung:
1169cdf0e10cSrcweir  --------------------------------------------------------------------*/
1170cdf0e10cSrcweir 
1171cdf0e10cSrcweir sal_Bool SwFldVarPage::FillItemSet(SfxItemSet& )
1172cdf0e10cSrcweir {
1173cdf0e10cSrcweir 	sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
1174cdf0e10cSrcweir 
1175cdf0e10cSrcweir 	String aVal(aValueED.GetText());
1176cdf0e10cSrcweir 	String aName(aNameED.GetText());
1177cdf0e10cSrcweir 
1178cdf0e10cSrcweir 	sal_uInt16 nSubType = aSelectionLB.GetSelectEntryPos();
1179cdf0e10cSrcweir 	if(nSubType == LISTBOX_ENTRY_NOTFOUND)
1180cdf0e10cSrcweir 		nSubType = 0;
1181cdf0e10cSrcweir 	else
1182cdf0e10cSrcweir 		nSubType = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nSubType);
1183cdf0e10cSrcweir 
1184cdf0e10cSrcweir 	sal_uLong nFormat;
1185cdf0e10cSrcweir 
1186cdf0e10cSrcweir 	if (!aNumFormatLB.IsVisible())
1187cdf0e10cSrcweir 	{
1188cdf0e10cSrcweir 		nFormat = aFormatLB.GetSelectEntryPos();
1189cdf0e10cSrcweir 
1190cdf0e10cSrcweir 		if(nFormat == LISTBOX_ENTRY_NOTFOUND)
1191cdf0e10cSrcweir 			nFormat = 0;
1192cdf0e10cSrcweir 		else
1193cdf0e10cSrcweir 			nFormat = (sal_uLong)aFormatLB.GetEntryData((sal_uInt16)nFormat);
1194cdf0e10cSrcweir 	}
1195cdf0e10cSrcweir 	else
1196cdf0e10cSrcweir 	{
1197cdf0e10cSrcweir 		nFormat = aNumFormatLB.GetFormat();
1198cdf0e10cSrcweir 
1199cdf0e10cSrcweir 		if (nFormat && nFormat != ULONG_MAX && aNumFormatLB.IsAutomaticLanguage())
1200cdf0e10cSrcweir 		{
1201cdf0e10cSrcweir 			// Sprache auf Office-Sprache umstellen, da String im Office-
1202cdf0e10cSrcweir 			// Format vom Kalkulator erwartet wird und so in den Dlg
1203cdf0e10cSrcweir 			// eingegeben werden sollte
1204cdf0e10cSrcweir             SwWrtShell *pSh = GetWrtShell();
1205cdf0e10cSrcweir             if(!pSh)
1206cdf0e10cSrcweir                 pSh = ::GetActiveWrtShell();
1207cdf0e10cSrcweir             if(pSh)
1208cdf0e10cSrcweir             {
1209cdf0e10cSrcweir                 nFormat = SwValueField::GetSystemFormat(pSh->GetNumberFormatter(), nFormat);
1210cdf0e10cSrcweir             }
1211cdf0e10cSrcweir 		}
1212cdf0e10cSrcweir 	}
1213cdf0e10cSrcweir 	sal_Unicode cSeparator = ' ';
1214cdf0e10cSrcweir 	switch (nTypeId)
1215cdf0e10cSrcweir 	{
1216cdf0e10cSrcweir 		case TYP_USERFLD:
1217cdf0e10cSrcweir 		{
1218cdf0e10cSrcweir 			nSubType = (nFormat == ULONG_MAX) ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR;
1219cdf0e10cSrcweir 
1220cdf0e10cSrcweir 			if (nFormat == ULONG_MAX && aNumFormatLB.GetSelectEntry() == SW_RESSTR(FMT_USERVAR_CMD))
1221cdf0e10cSrcweir 				nSubType |= nsSwExtendedSubType::SUB_CMD;
1222cdf0e10cSrcweir 
1223cdf0e10cSrcweir 			if (aInvisibleCB.IsChecked())
1224cdf0e10cSrcweir 				nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
1225cdf0e10cSrcweir 			break;
1226cdf0e10cSrcweir 		}
1227cdf0e10cSrcweir 		case TYP_FORMELFLD:
1228cdf0e10cSrcweir 		{
1229cdf0e10cSrcweir 			nSubType = nsSwGetSetExpType::GSE_FORMULA;
1230cdf0e10cSrcweir 			if (aNumFormatLB.IsVisible() && nFormat == ULONG_MAX)
1231cdf0e10cSrcweir 				nSubType |= nsSwExtendedSubType::SUB_CMD;
1232cdf0e10cSrcweir 			break;
1233cdf0e10cSrcweir 		}
1234cdf0e10cSrcweir 		case TYP_GETFLD:
1235cdf0e10cSrcweir 		{
1236cdf0e10cSrcweir 			nSubType &= 0xff00;
1237cdf0e10cSrcweir 			if (aNumFormatLB.IsVisible() && nFormat == ULONG_MAX)
1238cdf0e10cSrcweir 				nSubType |= nsSwExtendedSubType::SUB_CMD;
1239cdf0e10cSrcweir 			break;
1240cdf0e10cSrcweir 		}
1241cdf0e10cSrcweir 		case TYP_INPUTFLD:
1242cdf0e10cSrcweir 		{
1243cdf0e10cSrcweir 			SwFieldType* pType = GetFldMgr().GetFldType(RES_USERFLD, aName);
1244cdf0e10cSrcweir             nSubType = static_cast< sal_uInt16 >((nSubType & 0xff00) | ((pType) ? INP_USR : INP_VAR));
1245cdf0e10cSrcweir 			break;
1246cdf0e10cSrcweir 		}
1247cdf0e10cSrcweir 
1248cdf0e10cSrcweir 		case TYP_SETFLD:
1249cdf0e10cSrcweir 		{
1250cdf0e10cSrcweir 			if (IsFldDlgHtmlMode())
1251cdf0e10cSrcweir 			{
1252cdf0e10cSrcweir 				nSubType = 0x0100;
1253cdf0e10cSrcweir 				nSubType = (nSubType & 0xff00) | nsSwGetSetExpType::GSE_STRING;
1254cdf0e10cSrcweir 			}
1255cdf0e10cSrcweir 			else
1256cdf0e10cSrcweir 				nSubType = (nSubType & 0xff00) | ((nFormat == ULONG_MAX) ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR);
1257cdf0e10cSrcweir 
1258cdf0e10cSrcweir 			if (aInvisibleCB.IsChecked())
1259cdf0e10cSrcweir 				nSubType |= nsSwExtendedSubType::SUB_INVISIBLE;
1260cdf0e10cSrcweir 			break;
1261cdf0e10cSrcweir 		}
1262cdf0e10cSrcweir 		case TYP_SEQFLD:
1263cdf0e10cSrcweir 		{
1264cdf0e10cSrcweir 			// nSubType = nsSwGetSetExpType::GSE_SEQ;	// nsSwGetSetExpType::GSE_SEQ wird im Fldmgr fest gesetzt, kann also entfallen
1265cdf0e10cSrcweir 			nSubType = aChapterLevelLB.GetSelectEntryPos();
1266cdf0e10cSrcweir 			if (nSubType == 0)
1267cdf0e10cSrcweir 				nSubType = 0x7f;
1268cdf0e10cSrcweir 			else
1269cdf0e10cSrcweir 			{
1270cdf0e10cSrcweir 				nSubType--;
1271cdf0e10cSrcweir 				String sSeparator(aSeparatorED.GetText().GetChar(0));
1272cdf0e10cSrcweir 				cSeparator = sSeparator.Len() ? sSeparator.GetChar(0) : ' ';
1273cdf0e10cSrcweir 				//nSubType |= (sal_uInt16)(((sal_uInt8)) << 8);
1274cdf0e10cSrcweir 			}
1275cdf0e10cSrcweir 			break;
1276cdf0e10cSrcweir 		}
1277cdf0e10cSrcweir 		case TYP_GETREFPAGEFLD:
1278cdf0e10cSrcweir 			if( SVX_NUM_CHAR_SPECIAL == nFormat )
1279cdf0e10cSrcweir 				aVal = aValueED.GetText();
1280cdf0e10cSrcweir 			break;
1281cdf0e10cSrcweir 	}
1282cdf0e10cSrcweir 
1283cdf0e10cSrcweir 	if (!IsFldEdit() ||
1284cdf0e10cSrcweir 		aNameED.GetSavedValue() != aNameED.GetText() ||
1285cdf0e10cSrcweir 		aValueED.GetSavedValue() != aValueED.GetText() ||
1286cdf0e10cSrcweir 		aSelectionLB.GetSavedValue() != aSelectionLB.GetSelectEntryPos() ||
1287cdf0e10cSrcweir 		aFormatLB.GetSavedValue() != aFormatLB.GetSelectEntryPos() ||
1288cdf0e10cSrcweir 		nOldFormat != aNumFormatLB.GetFormat() ||
1289cdf0e10cSrcweir 		aInvisibleCB.GetState() != aInvisibleCB.GetSavedValue() ||
1290cdf0e10cSrcweir 		aChapterLevelLB.GetSavedValue() != aChapterLevelLB.GetSelectEntryPos() ||
1291cdf0e10cSrcweir 		aSeparatorED.GetSavedValue() != aSeparatorED.GetText())
1292cdf0e10cSrcweir 	{
1293cdf0e10cSrcweir         InsertFld( nTypeId, nSubType, aName, aVal, nFormat,
1294cdf0e10cSrcweir                     cSeparator, aNumFormatLB.IsAutomaticLanguage() );
1295cdf0e10cSrcweir 	}
1296cdf0e10cSrcweir 
1297cdf0e10cSrcweir 	UpdateSubType();
1298cdf0e10cSrcweir 
1299cdf0e10cSrcweir 	return sal_False;
1300cdf0e10cSrcweir }
1301cdf0e10cSrcweir 
1302cdf0e10cSrcweir 
1303cdf0e10cSrcweir /*--------------------------------------------------------------------
1304cdf0e10cSrcweir 	Beschreibung:
1305cdf0e10cSrcweir  --------------------------------------------------------------------*/
1306cdf0e10cSrcweir 
1307cdf0e10cSrcweir SfxTabPage* SwFldVarPage::Create( 	Window* pParent,
1308cdf0e10cSrcweir 						const SfxItemSet& rAttrSet )
1309cdf0e10cSrcweir {
1310cdf0e10cSrcweir 	return ( new SwFldVarPage( pParent, rAttrSet ) );
1311cdf0e10cSrcweir }
1312cdf0e10cSrcweir 
1313cdf0e10cSrcweir /*--------------------------------------------------------------------
1314cdf0e10cSrcweir 	Beschreibung:
1315cdf0e10cSrcweir  --------------------------------------------------------------------*/
1316cdf0e10cSrcweir 
1317cdf0e10cSrcweir sal_uInt16 SwFldVarPage::GetGroup()
1318cdf0e10cSrcweir {
1319cdf0e10cSrcweir 	return GRP_VAR;
1320cdf0e10cSrcweir }
1321cdf0e10cSrcweir 
1322cdf0e10cSrcweir /*--------------------------------------------------------------------
1323cdf0e10cSrcweir 	Beschreibung:
1324cdf0e10cSrcweir  --------------------------------------------------------------------*/
1325cdf0e10cSrcweir 
1326cdf0e10cSrcweir SelectionListBox::SelectionListBox( SwFldVarPage* pDialog, const ResId& rResId ) :
1327cdf0e10cSrcweir 	ListBox	(pDialog, rResId),
1328cdf0e10cSrcweir 	pDlg	(pDialog),
1329cdf0e10cSrcweir 	bCallAddSelection(sal_False)
1330cdf0e10cSrcweir {
1331cdf0e10cSrcweir }
1332cdf0e10cSrcweir 
1333cdf0e10cSrcweir /*--------------------------------------------------------------------
1334cdf0e10cSrcweir 	Beschreibung:
1335cdf0e10cSrcweir  --------------------------------------------------------------------*/
1336cdf0e10cSrcweir 
1337cdf0e10cSrcweir long SelectionListBox::PreNotify( NotifyEvent& rNEvt )
1338cdf0e10cSrcweir {
1339cdf0e10cSrcweir 	long nHandled = ListBox::PreNotify( rNEvt );
1340cdf0e10cSrcweir 	//sal_Bool bAddSel = sal_False;
1341cdf0e10cSrcweir 	if ( rNEvt.GetType() == EVENT_KEYUP )
1342cdf0e10cSrcweir 	{
1343cdf0e10cSrcweir 		const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
1344cdf0e10cSrcweir 		const KeyCode aKeyCode = pKEvt->GetKeyCode();
1345cdf0e10cSrcweir 		const sal_uInt16 nModifier = aKeyCode.GetModifier();
1346cdf0e10cSrcweir 		if( aKeyCode.GetCode() == KEY_SPACE && !nModifier)
1347cdf0e10cSrcweir //			bAddSel = sal_True;
1348cdf0e10cSrcweir 			bCallAddSelection = sal_True;
1349cdf0e10cSrcweir 	}
1350cdf0e10cSrcweir 	if ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
1351cdf0e10cSrcweir 	{
1352cdf0e10cSrcweir 		const MouseEvent* pMEvt = rNEvt.GetMouseEvent();
1353cdf0e10cSrcweir 
1354cdf0e10cSrcweir 		if (pMEvt && (pMEvt->IsMod1() || pMEvt->IsMod2()))	// Alt oder Ctrl
1355cdf0e10cSrcweir 			//bAddSel = sal_True;
1356cdf0e10cSrcweir 			bCallAddSelection = sal_True;
1357cdf0e10cSrcweir 	}
1358cdf0e10cSrcweir 
1359cdf0e10cSrcweir //	if (bAddSel)
1360cdf0e10cSrcweir //		pDlg->AddSelection(this);
1361cdf0e10cSrcweir 
1362cdf0e10cSrcweir 	return nHandled;
1363cdf0e10cSrcweir }
1364cdf0e10cSrcweir /* -----------------12.01.99 11:14-------------------
1365cdf0e10cSrcweir  *
1366cdf0e10cSrcweir  * --------------------------------------------------*/
1367cdf0e10cSrcweir void SwFldVarPage::FillUserData()
1368cdf0e10cSrcweir {
1369cdf0e10cSrcweir 	String sData(String::CreateFromAscii(USER_DATA_VERSION));
1370cdf0e10cSrcweir 	sData += ';';
1371cdf0e10cSrcweir 	sal_uInt16 nTypeSel = aTypeLB.GetSelectEntryPos();
1372cdf0e10cSrcweir 	if( LISTBOX_ENTRY_NOTFOUND == nTypeSel )
1373cdf0e10cSrcweir 		nTypeSel = USHRT_MAX;
1374cdf0e10cSrcweir 	else
1375cdf0e10cSrcweir 		nTypeSel = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData( nTypeSel );
1376cdf0e10cSrcweir 	sData += String::CreateFromInt32( nTypeSel );
1377cdf0e10cSrcweir 	SetUserData(sData);
1378cdf0e10cSrcweir }
1379cdf0e10cSrcweir 
1380