xref: /trunk/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