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