1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 #ifdef SW_DLLIMPLEMENTATION
27 #undef SW_DLLIMPLEMENTATION
28 #endif
29
30
31 #include <sfx2/app.hxx>
32 #include <basic/basmgr.hxx>
33 #include <basic/sbmod.hxx>
34 #include <docsh.hxx>
35 #include <swtypes.hxx>
36 #ifndef _GLOBALS_HRC
37 #include <globals.hrc>
38 #endif
39 #include <fldbas.hxx>
40 #include <docufld.hxx>
41 #ifndef _VIEW_HXX
42 #include <view.hxx>
43 #endif
44 #include <wrtsh.hxx>
45 #include <swmodule.hxx>
46 #ifndef _FLDFUNC_HXX
47 #include <fldfunc.hxx>
48 #endif
49 #include <flddropdown.hxx>
50 #ifndef _FLDUI_HRC
51 #include <fldui.hrc>
52 #endif
53 #ifndef _FLDTDLG_HRC
54 #include <fldtdlg.hrc>
55 #endif
56
57 #define USER_DATA_VERSION_1 "1"
58 #define USER_DATA_VERSION USER_DATA_VERSION_1
59
60 using namespace ::com::sun::star;
61
62 using rtl::OUString;
63
64 /*--------------------------------------------------------------------
65 Beschreibung:
66 --------------------------------------------------------------------*/
67
SwFldFuncPage(Window * pParent,const SfxItemSet & rCoreSet)68 SwFldFuncPage::SwFldFuncPage(Window* pParent, const SfxItemSet& rCoreSet ) :
69 SwFldPage( pParent, SW_RES( TP_FLD_FUNC ), rCoreSet ),
70
71 aTypeFT (this, SW_RES(FT_FUNCTYPE)),
72 aTypeLB (this, SW_RES(LB_FUNCTYPE)),
73 aSelectionFT(this, SW_RES(FT_FUNCSELECTION)),
74 aSelectionLB(this, SW_RES(LB_FUNCSELECTION)),
75 aFormatFT (this, SW_RES(FT_FUNCFORMAT)),
76 aFormatLB (this, SW_RES(LB_FUNCFORMAT)),
77 aNameFT (this, SW_RES(FT_FUNCNAME)),
78 aNameED (this, SW_RES(ED_FUNCNAME)),
79 aValueFT (this, SW_RES(FT_FUNCVALUE)),
80 aValueED (this, SW_RES(ED_FUNCVALUE)),
81 aCond1FT (this, SW_RES(FT_FUNCCOND1)),
82 aCond1ED (this, SW_RES(ED_FUNCCOND1)),
83 aCond2FT (this, SW_RES(FT_FUNCCOND2)),
84 aCond2ED (this, SW_RES(ED_FUNCCOND2)),
85 aMacroBT (this, SW_RES(BT_FUNCMACRO)),
86 aListItemFT( this, SW_RES( FT_LISTITEM )),
87 aListItemED( this, SW_RES( ED_LISTITEM )),
88 aListAddPB( this, SW_RES( PB_LISTADD )),
89 aListItemsFT( this, SW_RES( FT_LISTITEMS )),
90 aListItemsLB( this, SW_RES( LB_LISTITEMS )),
91 aListRemovePB( this, SW_RES( PB_LISTREMOVE )),
92 aListUpPB( this, SW_RES( PB_LISTUP )),
93 aListDownPB( this, SW_RES( PB_LISTDOWN )),
94 aListNameFT( this, SW_RES( FT_LISTNAME )),
95 aListNameED( this, SW_RES( ED_LISTNAME )),
96 bDropDownLBChanged(false)
97 {
98 FreeResource();
99
100 aNameED.SetPosPixel(Point(aNameED.GetPosPixel().X(), aFormatLB.GetPosPixel().Y()));
101
102 aNameED.SetModifyHdl(LINK(this, SwFldFuncPage, ModifyHdl));
103
104 sOldValueFT = aValueFT.GetText();
105 sOldNameFT = aNameFT.GetText();
106
107 aCond1ED.ShowBrackets(sal_False);
108 aCond2ED.ShowBrackets(sal_False);
109
110 // SwWrtShell* pSh = (SwWrtShell*)ViewShell::GetCurrShell();
111 }
112
113 /*--------------------------------------------------------------------
114 Beschreibung:
115 --------------------------------------------------------------------*/
116
~SwFldFuncPage()117 SwFldFuncPage::~SwFldFuncPage()
118 {
119 }
120
121 /*--------------------------------------------------------------------
122 Beschreibung:
123 --------------------------------------------------------------------*/
124
Reset(const SfxItemSet &)125 void SwFldFuncPage::Reset(const SfxItemSet& )
126 {
127 SavePos(&aTypeLB);
128 Init(); // Allgemeine initialisierung
129
130 aTypeLB.SetUpdateMode(sal_False);
131 aTypeLB.Clear();
132
133 sal_uInt16 nPos, nTypeId;
134
135 if (!IsFldEdit())
136 {
137 // TypeListBox initialisieren
138 const SwFldGroupRgn& rRg = GetFldMgr().GetGroupRange(IsFldDlgHtmlMode(), GetGroup());
139
140 // Typ-Listbox fuellen
141 for(short i = rRg.nStart; i < rRg.nEnd; ++i)
142 {
143 nTypeId = GetFldMgr().GetTypeId(i);
144 nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(i));
145 aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
146 }
147 }
148 else
149 {
150 nTypeId = GetCurField()->GetTypeId();
151 nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(GetFldMgr().GetPos(nTypeId)));
152 aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId));
153
154 if (nTypeId == TYP_MACROFLD)
155 {
156 String sName(GetCurField()->GetPar1());
157 GetFldMgr().SetMacroPath(sName);
158 }
159 }
160
161 // alte Pos selektieren
162 RestorePos(&aTypeLB);
163
164 aTypeLB.SetDoubleClickHdl (LINK(this, SwFldFuncPage, InsertHdl));
165 aTypeLB.SetSelectHdl (LINK(this, SwFldFuncPage, TypeHdl));
166 aSelectionLB.SetSelectHdl (LINK(this, SwFldFuncPage, SelectHdl));
167 aSelectionLB.SetDoubleClickHdl (LINK(this, SwFldFuncPage, InsertMacroHdl));
168 aFormatLB.SetDoubleClickHdl (LINK(this, SwFldFuncPage, InsertHdl));
169 aMacroBT.SetClickHdl (LINK(this, SwFldFuncPage, MacroHdl));
170 Link aListModifyLk( LINK(this, SwFldFuncPage, ListModifyHdl));
171 aListAddPB.SetClickHdl(aListModifyLk);
172 aListRemovePB.SetClickHdl(aListModifyLk);
173 aListUpPB.SetClickHdl(aListModifyLk);
174 aListDownPB.SetClickHdl(aListModifyLk);
175 aListItemED.SetReturnActionLink(aListModifyLk);
176 Link aListEnableLk = LINK(this, SwFldFuncPage, ListEnableHdl);
177 aListItemED.SetModifyHdl(aListEnableLk);
178 aListItemsLB.SetSelectHdl(aListEnableLk);
179
180 if( !IsRefresh() )
181 {
182 String sUserData = GetUserData();
183 if(sUserData.GetToken(0, ';').EqualsIgnoreCaseAscii(USER_DATA_VERSION_1))
184 {
185 String sVal = sUserData.GetToken(1, ';');
186 sal_uInt16 nVal = static_cast< sal_uInt16 >(sVal.ToInt32());
187 if(nVal != USHRT_MAX)
188 {
189 for(sal_uInt16 i = 0; i < aTypeLB.GetEntryCount(); i++)
190 if(nVal == (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(i))
191 {
192 aTypeLB.SelectEntryPos(i);
193 break;
194 }
195 }
196 }
197 }
198 TypeHdl(0);
199
200 aTypeLB.SetUpdateMode(sal_True);
201
202 if (IsFldEdit())
203 {
204 aNameED.SaveValue();
205 aValueED.SaveValue();
206 aCond1ED.SaveValue();
207 aCond2ED.SaveValue();
208 nOldFormat = GetCurField()->GetFormat();
209 }
210 }
211
212 /*--------------------------------------------------------------------
213 Beschreibung:
214 --------------------------------------------------------------------*/
215
IMPL_LINK(SwFldFuncPage,TypeHdl,ListBox *,EMPTYARG)216 IMPL_LINK( SwFldFuncPage, TypeHdl, ListBox *, EMPTYARG )
217 {
218 // Alte ListBoxPos sichern
219 const sal_uInt16 nOld = GetTypeSel();
220
221 // Aktuelle ListBoxPos
222 SetTypeSel(aTypeLB.GetSelectEntryPos());
223
224 if(GetTypeSel() == LISTBOX_ENTRY_NOTFOUND)
225 {
226 SetTypeSel(0);
227 aTypeLB.SelectEntryPos(0);
228 }
229
230 if (nOld != GetTypeSel())
231 {
232 sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
233
234 // Auswahl-Listbox fuellen
235 UpdateSubType();
236
237 // Format-Listbox fuellen
238 aFormatLB.Clear();
239
240 sal_uInt16 nSize = GetFldMgr().GetFormatCount(nTypeId, sal_False, IsFldDlgHtmlMode());
241
242 for (sal_uInt16 i = 0; i < nSize; i++)
243 {
244 sal_uInt16 nPos = aFormatLB.InsertEntry(GetFldMgr().GetFormatStr(nTypeId, i));
245 aFormatLB.SetEntryData( nPos, reinterpret_cast<void*>(GetFldMgr().GetFormatId( nTypeId, i )) );
246 }
247
248 if (nSize)
249 {
250 if (IsFldEdit() && nTypeId == TYP_JUMPEDITFLD)
251 aFormatLB.SelectEntry(SW_RESSTR(FMT_MARK_BEGIN + (sal_uInt16)GetCurField()->GetFormat()));
252
253 if (!aFormatLB.GetSelectEntryCount())
254 aFormatLB.SelectEntryPos(0);
255 }
256
257 sal_Bool bValue = sal_False, bName = sal_False, bMacro = sal_False, bInsert = sal_True;
258 sal_Bool bShowSelection = sal_False;
259 sal_Bool bFormat = nSize != 0;
260
261 // fuer Conditional Text zwei Controls
262 sal_Bool bDropDown = TYP_DROPDOWN == nTypeId;
263 sal_Bool bCondTxtFld = TYP_CONDTXTFLD == nTypeId;
264
265 aCond1FT.Show(!bDropDown && bCondTxtFld);
266 aCond1ED.Show(!bDropDown && bCondTxtFld);
267 aCond2FT.Show(!bDropDown && bCondTxtFld);
268 aCond2ED.Show(!bDropDown && bCondTxtFld);
269 aValueFT.Show(!bDropDown && !bCondTxtFld);
270 aValueED.Show(!bDropDown && !bCondTxtFld);
271 aMacroBT.Show(!bDropDown);
272 aNameED.Show(!bDropDown);
273 aNameFT.Show(!bDropDown);
274
275 aListItemFT.Show(bDropDown);
276 aListItemED.Show(bDropDown);
277 aListAddPB.Show(bDropDown);
278 aListItemsFT.Show(bDropDown);
279 aListItemsLB.Show(bDropDown);
280 aListRemovePB.Show(bDropDown);
281 aListUpPB.Show(bDropDown);
282 aListDownPB.Show(bDropDown);
283 aListNameFT.Show(bDropDown);
284 aListNameED.Show(bDropDown);
285
286 aNameED.SetDropEnable(sal_False);
287
288 if (IsFldEdit())
289 {
290 if(bDropDown)
291 {
292 const SwDropDownField* pDrop = (const SwDropDownField*)GetCurField();
293 uno::Sequence<OUString> aItems = pDrop->GetItemSequence();
294 const OUString* pArray = aItems.getConstArray();
295 aListItemsLB.Clear();
296 for(sal_Int32 i = 0; i < aItems.getLength(); i++)
297 aListItemsLB.InsertEntry(pArray[i]);
298 aListItemsLB.SelectEntry(pDrop->GetSelectedItem());
299 aListNameED.SetText(pDrop->GetPar2());
300 aListNameED.SaveValue();
301 bDropDownLBChanged = false;
302 }
303 else
304 {
305 aNameED.SetText(GetCurField()->GetPar1());
306 aValueED.SetText(GetCurField()->GetPar2());
307 }
308 }
309 else
310 {
311 aNameED.SetText(aEmptyStr);
312 aValueED.SetText(aEmptyStr);
313 }
314 if(bDropDown)
315 ListEnableHdl(0);
316
317 if( aNameFT.GetText() != sOldNameFT )
318 aNameFT.SetText(sOldNameFT);
319 if (aValueFT.GetText() != sOldValueFT)
320 aValueFT.SetText(sOldValueFT);
321
322 switch (nTypeId)
323 {
324 case TYP_MACROFLD:
325 bMacro = sal_True;
326 if (GetFldMgr().GetMacroPath().Len())
327 bValue = sal_True;
328 else
329 bInsert = sal_False;
330
331 aNameFT.SetText(SW_RESSTR(STR_MACNAME));
332 aValueFT.SetText(SW_RESSTR(STR_PROMPT));
333 aNameED.SetText(GetFldMgr().GetMacroName());
334 aNameED.SetAccessibleName(aNameFT.GetText());
335 aValueED.SetAccessibleName(aValueFT.GetText());
336 break;
337
338 case TYP_HIDDENPARAFLD:
339 aNameFT.SetText(SW_RESSTR(STR_COND));
340 aNameED.SetDropEnable(sal_True);
341 bName = sal_True;
342 aNameED.SetAccessibleName(aNameFT.GetText());
343 aValueED.SetAccessibleName(aValueFT.GetText());
344 break;
345
346 case TYP_HIDDENTXTFLD:
347 {
348 aNameFT.SetText(SW_RESSTR(STR_COND));
349 aNameED.SetDropEnable(sal_True);
350 aValueFT.SetText(SW_RESSTR(STR_INSTEXT));
351 SwWrtShell* pSh = GetActiveWrtShell();
352 if (!IsFldEdit() && pSh )
353 aValueED.SetText(pSh->GetSelTxt());
354 bName = bValue = sal_True;
355 aNameED.SetAccessibleName(aNameFT.GetText());
356 aValueED.SetAccessibleName(aValueFT.GetText());
357 }
358 break;
359
360 case TYP_CONDTXTFLD:
361 aNameFT.SetText(SW_RESSTR(STR_COND));
362 aNameED.SetDropEnable(sal_True);
363 if (IsFldEdit())
364 {
365 aCond1ED.SetText(GetCurField()->GetPar2().GetToken(0, '|'));
366 aCond2ED.SetText(GetCurField()->GetPar2().GetToken(1, '|'));
367 }
368
369 bName = bValue = sal_True;
370 aNameED.SetAccessibleName(aNameFT.GetText());
371 aValueED.SetAccessibleName(aValueFT.GetText());
372 break;
373
374 case TYP_JUMPEDITFLD:
375 aNameFT.SetText(SW_RESSTR(STR_JUMPEDITFLD));
376 aValueFT.SetText(SW_RESSTR(STR_PROMPT));
377 bName = bValue = sal_True;
378 aNameED.SetAccessibleName(aNameFT.GetText());
379 aValueED.SetAccessibleName(aValueFT.GetText());
380 break;
381
382 case TYP_INPUTFLD:
383 aValueFT.SetText(SW_RESSTR(STR_PROMPT));
384 bValue = sal_True;
385 // bShowSelection = TRUE;
386 aNameED.SetAccessibleName(aNameFT.GetText());
387 aValueED.SetAccessibleName(aValueFT.GetText());
388 break;
389
390 case TYP_COMBINED_CHARS:
391 {
392 aNameFT.SetText(SW_RESSTR(STR_COMBCHRS_FT));
393 aNameED.SetDropEnable(sal_True);
394 bName = sal_True;
395
396 const sal_uInt16 nLen = aNameED.GetText().Len();
397 if( !nLen || nLen > MAX_COMBINED_CHARACTERS )
398 bInsert = sal_False;
399 aNameED.SetAccessibleName(aNameFT.GetText());
400 aValueED.SetAccessibleName(aValueFT.GetText());
401 }
402 break;
403 case TYP_DROPDOWN :
404 break;
405 default:
406 break;
407 }
408
409 if (bShowSelection)
410 {
411 aSelectionLB.Show();
412 aSelectionFT.Show();
413 aFormatLB.Hide();
414 aFormatFT.Hide();
415 }
416 else
417 {
418 aFormatLB.Show();
419 aFormatFT.Show();
420 aSelectionLB.Hide();
421 aSelectionFT.Hide();
422 }
423
424 aFormatLB.Enable(bFormat);
425 aFormatFT.Enable(bFormat);
426 aNameFT.Enable(bName);
427 aNameED.Enable(bName);
428 aValueFT.Enable(bValue);
429 aValueED.Enable(bValue);
430 aMacroBT.Enable(bMacro);
431
432 EnableInsert( bInsert );
433 }
434
435 return 0;
436 }
437
438 /*--------------------------------------------------------------------
439 Beschreibung:
440 --------------------------------------------------------------------*/
441
IMPL_LINK(SwFldFuncPage,SelectHdl,ListBox *,EMPTYARG)442 IMPL_LINK( SwFldFuncPage, SelectHdl, ListBox *, EMPTYARG )
443 {
444 sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
445
446 if( TYP_MACROFLD == nTypeId )
447 aNameED.SetText( aSelectionLB.GetSelectEntry() );
448
449 return 0;
450 }
451
452 /*--------------------------------------------------------------------
453 Beschreibung:
454 --------------------------------------------------------------------*/
455
IMPL_LINK(SwFldFuncPage,InsertMacroHdl,ListBox *,EMPTYARG)456 IMPL_LINK( SwFldFuncPage, InsertMacroHdl, ListBox *, EMPTYARG )
457 {
458 SelectHdl();
459 InsertHdl();
460
461 return 0;
462 }
463 /* -----------------16.06.2003 16:24-----------------
464
465 --------------------------------------------------*/
IMPL_LINK(SwFldFuncPage,ListModifyHdl,Control *,pControl)466 IMPL_LINK( SwFldFuncPage, ListModifyHdl, Control*, pControl)
467 {
468 aListItemsLB.SetUpdateMode(sal_False);
469 if(pControl == &aListAddPB ||
470 (pControl == &aListItemED && aListAddPB.IsEnabled()))
471 {
472 String sEntry(aListItemED.GetText());
473 aListItemsLB.InsertEntry(sEntry);
474 aListItemsLB.SelectEntry(sEntry);
475 }
476 else if(aListItemsLB.GetSelectEntryCount())
477 {
478 sal_uInt16 nSelPos = aListItemsLB.GetSelectEntryPos();
479 if(pControl == &aListRemovePB)
480 {
481 aListItemsLB.RemoveEntry(nSelPos);
482 aListItemsLB.SelectEntryPos(nSelPos ? nSelPos - 1 : 0);
483 }
484 else if(pControl == &aListUpPB)
485 {
486 if(nSelPos)
487 {
488 String sEntry = aListItemsLB.GetSelectEntry();
489 aListItemsLB.RemoveEntry(nSelPos);
490 nSelPos--;
491 aListItemsLB.InsertEntry(sEntry, nSelPos);
492 aListItemsLB.SelectEntryPos(nSelPos);
493 }
494 }
495 else if(pControl == &aListDownPB)
496 {
497 if(nSelPos < aListItemsLB.GetEntryCount() - 1)
498 {
499 String sEntry = aListItemsLB.GetSelectEntry();
500 aListItemsLB.RemoveEntry(nSelPos);
501 nSelPos++;
502 aListItemsLB.InsertEntry(sEntry, nSelPos);
503 aListItemsLB.SelectEntryPos(nSelPos);
504 }
505 }
506 }
507 bDropDownLBChanged = true;
508 aListItemsLB.SetUpdateMode(sal_True);
509 ListEnableHdl(0);
510 return 0;
511 }
512 /* -----------------17.06.2003 08:36-----------------
513
514 --------------------------------------------------*/
IMPL_LINK(SwFldFuncPage,ListEnableHdl,void *,EMPTYARG)515 IMPL_LINK( SwFldFuncPage, ListEnableHdl, void*, EMPTYARG)
516 {
517 //enable "Add" button when text is in the Edit that's not already member of the box
518 aListAddPB.Enable(aListItemED.GetText().Len() &&
519 LISTBOX_ENTRY_NOTFOUND == aListItemsLB.GetEntryPos(aListItemED.GetText()));
520 sal_Bool bEnableButtons = aListItemsLB.GetSelectEntryCount() > 0;
521 aListRemovePB.Enable(bEnableButtons);
522 aListUpPB.Enable(bEnableButtons && (aListItemsLB.GetSelectEntryPos() > 0));
523 aListDownPB.Enable(bEnableButtons &&
524 (aListItemsLB.GetSelectEntryPos() < (aListItemsLB.GetEntryCount() - 1)));
525
526 return 0;
527 }
528
529 /*--------------------------------------------------------------------
530 Beschreibung: Typen in der SelectionBox erneuern
531 --------------------------------------------------------------------*/
532
533
UpdateSubType()534 void SwFldFuncPage::UpdateSubType()
535 {
536 sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
537
538 // Auswahl-Listbox fuellen
539 aSelectionLB.SetUpdateMode(sal_False);
540 aSelectionLB.Clear();
541
542 SvStringsDtor aLst;
543 GetFldMgr().GetSubTypes(nTypeId, aLst);
544 sal_uInt16 nCount = aLst.Count();
545
546 for (sal_uInt16 i = 0; i < nCount; ++i)
547 {
548 sal_uInt16 nPos = aSelectionLB.InsertEntry(*aLst[i]);
549 aSelectionLB.SetEntryData(nPos, reinterpret_cast<void*>(i));
550 }
551
552 sal_Bool bEnable = nCount != 0;
553
554 aSelectionLB.Enable( bEnable );
555 aSelectionFT.Enable( bEnable );
556
557 if (bEnable)
558 {
559 aSelectionLB.SelectEntryPos(0);
560 }
561
562 if (nTypeId == TYP_MACROFLD)
563 {
564 sal_Bool bHasMacro = GetFldMgr().GetMacroPath().Len() != 0;
565
566 if (bHasMacro)
567 {
568 aNameED.SetText(GetFldMgr().GetMacroName());
569 aValueFT.Enable();
570 aValueED.Enable();
571 }
572 EnableInsert(bHasMacro);
573 }
574
575 aSelectionLB.SetUpdateMode(sal_True);
576 }
577
578 /*--------------------------------------------------------------------
579 Beschreibung: MacroBrowser aufrufen, Listbox mit Macros fuellen
580 --------------------------------------------------------------------*/
581
IMPL_LINK(SwFldFuncPage,MacroHdl,Button *,pBtn)582 IMPL_LINK( SwFldFuncPage, MacroHdl, Button *, pBtn )
583 {
584 Window* pDefModalDlgParent = Application::GetDefDialogParent();
585 Application::SetDefDialogParent( pBtn );
586
587 String sMacro(TurnMacroString(aNameED.GetText()));
588 while (sMacro.SearchAndReplace('.', ';') != STRING_NOTFOUND) ;
589
590 if (GetFldMgr().ChooseMacro(sMacro))
591 UpdateSubType();
592
593 Application::SetDefDialogParent( pDefModalDlgParent );
594
595 return 0;
596 }
597
598 /*--------------------------------------------------------------------
599 Beschreibung:
600 --------------------------------------------------------------------*/
601
FillItemSet(SfxItemSet &)602 sal_Bool SwFldFuncPage::FillItemSet(SfxItemSet& )
603 {
604 sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
605
606 sal_uInt16 nSubType = 0;
607
608 sal_uLong nFormat = aFormatLB.GetSelectEntryPos();
609
610 if(nFormat == LISTBOX_ENTRY_NOTFOUND)
611 nFormat = 0;
612 else
613 nFormat = (sal_uLong)aFormatLB.GetEntryData((sal_uInt16)nFormat);
614
615 String aVal(aValueED.GetText());
616 String aName(aNameED.GetText());
617
618 switch(nTypeId)
619 {
620 case TYP_INPUTFLD:
621 nSubType = INP_TXT;
622 // to prevent removal of CR/LF restore old content
623 if(!aNameED.IsModified() && IsFldEdit())
624 aName = GetCurField()->GetPar1();
625
626 break;
627
628 case TYP_MACROFLD:
629 // use the full script URL, not the name in the Edit control
630 aName = GetFldMgr().GetMacroPath();
631 break;
632
633 case TYP_CONDTXTFLD:
634 aVal = aCond1ED.GetText();
635 aVal += '|';
636 aVal += aCond2ED.GetText();
637 break;
638 case TYP_DROPDOWN :
639 {
640 aName = aListNameED.GetText();
641 for(sal_uInt16 i = 0; i < aListItemsLB.GetEntryCount(); i++)
642 {
643 if(i)
644 aVal += DB_DELIM;
645 aVal += aListItemsLB.GetEntry(i);
646 }
647 }
648 break;
649 default:
650 break;
651 }
652
653 if (!IsFldEdit() ||
654 aNameED.GetSavedValue() != aNameED.GetText() ||
655 aValueED.GetSavedValue() != aValueED.GetText() ||
656 aCond1ED.GetSavedValue() != aCond1ED.GetText() ||
657 aCond2ED.GetSavedValue() != aCond2ED.GetText() ||
658 aListNameED.GetSavedValue() != aListNameED.GetText() ||
659 bDropDownLBChanged ||
660 nOldFormat != nFormat)
661 {
662 InsertFld( nTypeId, nSubType, aName, aVal, nFormat );
663 }
664
665 ModifyHdl(); // Insert ggf enablen/disablen
666
667 return sal_False;
668 }
669
670 /*--------------------------------------------------------------------
671 Beschreibung:
672 --------------------------------------------------------------------*/
673
TurnMacroString(const String & rMacro)674 String SwFldFuncPage::TurnMacroString(const String &rMacro)
675 {
676 if (rMacro.Len())
677 {
678 // Inhalt von aName umdrehen
679 String sTmp, sBuf;
680 sal_uInt16 nPos = 0;
681
682 for (sal_uInt16 i = 0; i < 4 && nPos != STRING_NOTFOUND; i++)
683 {
684 if (i == 3)
685 sTmp = rMacro.Copy(nPos);
686 else
687 sTmp = rMacro.GetToken(0, '.', nPos);
688
689 if( sBuf.Len() )
690 sTmp += '.';
691 sBuf.Insert( sTmp, 0 );
692 }
693 return sBuf;
694 }
695
696 return rMacro;
697 }
698
699 /*--------------------------------------------------------------------
700 Beschreibung:
701 --------------------------------------------------------------------*/
702
Create(Window * pParent,const SfxItemSet & rAttrSet)703 SfxTabPage* SwFldFuncPage::Create( Window* pParent,
704 const SfxItemSet& rAttrSet )
705 {
706 return ( new SwFldFuncPage( pParent, rAttrSet ) );
707 }
708
709 /*--------------------------------------------------------------------
710 Beschreibung:
711 --------------------------------------------------------------------*/
712
GetGroup()713 sal_uInt16 SwFldFuncPage::GetGroup()
714 {
715 return GRP_FKT;
716 }
717
718 /* -----------------12.01.99 10:09-------------------
719 *
720 * --------------------------------------------------*/
FillUserData()721 void SwFldFuncPage::FillUserData()
722 {
723 String sData( String::CreateFromAscii(
724 RTL_CONSTASCII_STRINGPARAM( USER_DATA_VERSION )));
725 sData += ';';
726 sal_uInt16 nTypeSel = aTypeLB.GetSelectEntryPos();
727 if( LISTBOX_ENTRY_NOTFOUND == nTypeSel )
728 nTypeSel = USHRT_MAX;
729 else
730 nTypeSel = sal::static_int_cast< sal_uInt16 >(reinterpret_cast< sal_uIntPtr >(aTypeLB.GetEntryData( nTypeSel )));
731 sData += String::CreateFromInt32( nTypeSel );
732 SetUserData(sData);
733 }
734
IMPL_LINK(SwFldFuncPage,ModifyHdl,Edit *,EMPTYARG)735 IMPL_LINK( SwFldFuncPage, ModifyHdl, Edit *, EMPTYARG )
736 {
737 String aName(aNameED.GetText());
738 const sal_uInt16 nLen = aName.Len();
739
740 sal_Bool bEnable = sal_True;
741 sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel());
742
743 if( TYP_COMBINED_CHARS == nTypeId &&
744 (!nLen || nLen > MAX_COMBINED_CHARACTERS ))
745 bEnable = sal_False;
746
747 EnableInsert( bEnable );
748
749 return 0;
750 }
751
752
753
754
755