xref: /AOO41X/main/sw/source/ui/fldui/fldfunc.cxx (revision efeef26f81c84063fb0a91bde3856d4a51172d90)
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