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