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 <swtypes.hxx> 32 #include <sfx2/linkmgr.hxx> 33 #include <usrfld.hxx> 34 #include <docufld.hxx> 35 #include <expfld.hxx> 36 #include <ddefld.hxx> 37 #include <view.hxx> 38 #include <wrtsh.hxx> 39 #include <doc.hxx> 40 #include <docary.hxx> 41 #include <swmodule.hxx> 42 #include <fldvar.hxx> 43 #include <calc.hxx> 44 #include <svl/zformat.hxx> 45 #include <globals.hrc> 46 #include <fldui.hrc> 47 #include <fldtdlg.hrc> 48 49 #define USER_DATA_VERSION_1 "1" 50 #define USER_DATA_VERSION USER_DATA_VERSION_1 51 /*-------------------------------------------------------------------- 52 Beschreibung: 53 --------------------------------------------------------------------*/ 54 55 SwFldVarPage::SwFldVarPage(Window* pParent, const SfxItemSet& rCoreSet ) : 56 SwFldPage ( pParent, SW_RES( TP_FLD_VAR ), rCoreSet ), 57 aTypeFT (this, SW_RES(FT_VARTYPE)), 58 aTypeLB (this, SW_RES(LB_VARTYPE)), 59 aSelectionFT (this, SW_RES(FT_VARSELECTION)), 60 aSelectionLB (this, SW_RES(LB_VARSELECTION)), 61 aNameFT (this, SW_RES(FT_VARNAME)), 62 aNameED (this, SW_RES(ED_VARNAME)), 63 aValueFT (this, SW_RES(FT_VARVALUE)), 64 aValueED (this, SW_RES(ED_VARVALUE)), 65 aFormatFT (this, SW_RES(FT_VARFORMAT)), 66 aNumFormatLB (this, SW_RES(LB_VARNUMFORMAT)), 67 aFormatLB (this, SW_RES(LB_VARFORMAT)), 68 aChapterHeaderFT(this, SW_RES(FT_VARCHAPTERHEADER)), 69 aChapterLevelFT (this, SW_RES(FT_VARCHAPTERLEVEL)), 70 aChapterLevelLB (this, SW_RES(LB_VARCHAPTERLEVEL)), 71 aInvisibleCB (this, SW_RES(CB_VARINVISIBLE)), 72 aSeparatorFT (this, SW_RES(FT_VARSEPARATOR)), 73 aSeparatorED (this, SW_RES(ED_VARSEPARATOR)), 74 aNewDelTBX (this, SW_RES(TBX_VARNEWDEL)), 75 bInit (sal_True) 76 { 77 FreeResource(); 78 79 aNewDelTBX.SetSizePixel( aNewDelTBX.CalcWindowSizePixel() ); 80 81 long nDelta = ( aValueED.GetSizePixel().Height() - 82 aNewDelTBX.GetSizePixel().Height() ) / 2; 83 Point aNewPnt = aNewDelTBX.GetPosPixel(); 84 aNewPnt.Y() += nDelta; 85 aNewDelTBX.SetPosPixel( aNewPnt ); 86 87 sOldValueFT = aValueFT.GetText(); 88 sOldNameFT = aNameFT.GetText(); 89 90 for (sal_uInt16 i = 1; i <= MAXLEVEL; i++) 91 aChapterLevelLB.InsertEntry(String::CreateFromInt32(i)); 92 93 aChapterLevelLB.SelectEntryPos(0); 94 //enable 'active' language selection 95 aNumFormatLB.SetShowLanguageControl(sal_True); 96 } 97 98 /*-------------------------------------------------------------------- 99 Beschreibung: 100 --------------------------------------------------------------------*/ 101 102 SwFldVarPage::~SwFldVarPage() 103 { 104 } 105 106 /*-------------------------------------------------------------------- 107 Beschreibung: 108 --------------------------------------------------------------------*/ 109 110 void SwFldVarPage::Reset(const SfxItemSet& ) 111 { 112 SavePos(&aTypeLB); 113 114 Init(); // Allgemeine initialisierung 115 116 aTypeLB.SetUpdateMode(sal_False); 117 aTypeLB.Clear(); 118 119 sal_uInt16 nPos, nTypeId; 120 121 if (!IsFldEdit()) 122 { 123 // TypeListBox initialisieren 124 const SwFldGroupRgn& rRg = GetFldMgr().GetGroupRange(IsFldDlgHtmlMode(), GetGroup()); 125 126 for (short i = rRg.nStart; i < rRg.nEnd; ++i) 127 { 128 nTypeId = GetFldMgr().GetTypeId(i); 129 nPos = aTypeLB.InsertEntry(GetFldMgr().GetTypeStr(i)); 130 aTypeLB.SetEntryData(nPos, reinterpret_cast<void*>(nTypeId)); 131 } 132 } 133 else 134 { 135 const SwField* pCurField = GetCurField(); 136 ASSERT( pCurField != NULL, 137 "<SwFldVarPage::Reset(..)> - <SwField> instance missing!" ); 138 nTypeId = pCurField->GetTypeId(); 139 if ( nTypeId == TYP_SETINPFLD ) 140 nTypeId = TYP_INPUTFLD; 141 nPos = aTypeLB.InsertEntry( GetFldMgr().GetTypeStr( GetFldMgr().GetPos( nTypeId ) ) ); 142 aTypeLB.SetEntryData( nPos, reinterpret_cast< void* >( nTypeId ) ); 143 aNumFormatLB.SetAutomaticLanguage( pCurField->IsAutomaticLanguage() ); 144 SwWrtShell *pSh = GetWrtShell(); 145 if ( !pSh ) 146 pSh = ::GetActiveWrtShell(); 147 if ( pSh ) 148 { 149 const SvNumberformat* pFormat = pSh->GetNumberFormatter()->GetEntry( pCurField->GetFormat() ); 150 if ( pFormat ) 151 aNumFormatLB.SetLanguage( pFormat->GetLanguage() ); 152 } 153 } 154 155 // alte Pos selektieren 156 RestorePos(&aTypeLB); 157 158 aTypeLB.SetDoubleClickHdl (LINK(this, SwFldVarPage, InsertHdl)); 159 aTypeLB.SetSelectHdl (LINK(this, SwFldVarPage, TypeHdl)); 160 aSelectionLB.SetSelectHdl (LINK(this, SwFldVarPage, SubTypeHdl)); 161 aSelectionLB.SetDoubleClickHdl (LINK(this, SwFldVarPage, InsertHdl)); 162 aFormatLB.SetDoubleClickHdl (LINK(this, SwFldVarPage, InsertHdl)); 163 aNumFormatLB.SetDoubleClickHdl (LINK(this, SwFldVarPage, InsertHdl)); 164 aNameED.SetModifyHdl (LINK(this, SwFldVarPage, ModifyHdl)); 165 aValueED.SetModifyHdl (LINK(this, SwFldVarPage, ModifyHdl)); 166 aNewDelTBX.SetClickHdl (LINK(this, SwFldVarPage, TBClickHdl)); 167 aChapterLevelLB.SetSelectHdl (LINK(this, SwFldVarPage, ChapterHdl)); 168 aSeparatorED.SetModifyHdl (LINK(this, SwFldVarPage, SeparatorHdl)); 169 170 if( !IsRefresh() ) 171 { 172 String sUserData = GetUserData(); 173 if(!IsRefresh() && sUserData.GetToken(0, ';').EqualsIgnoreCaseAscii(USER_DATA_VERSION_1)) 174 { 175 String sVal = sUserData.GetToken(1, ';'); 176 sal_uInt16 nVal = (sal_uInt16)sVal.ToInt32(); 177 if( USHRT_MAX != nVal ) 178 { 179 for(sal_uInt16 i = 0; i < aTypeLB.GetEntryCount(); i++) 180 if(nVal == (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(i)) 181 { 182 aTypeLB.SelectEntryPos(i); 183 break; 184 } 185 } 186 } 187 } 188 TypeHdl(0); 189 190 aTypeLB.SetUpdateMode(sal_True); 191 192 if (IsFldEdit()) 193 { 194 aSelectionLB.SaveValue(); 195 aFormatLB.SaveValue(); 196 nOldFormat = aNumFormatLB.GetFormat(); 197 aNameED.SaveValue(); 198 aValueED.SaveValue(); 199 aInvisibleCB.SaveValue(); 200 aChapterLevelLB.SaveValue(); 201 aSeparatorED.SaveValue(); 202 } 203 } 204 205 /*-------------------------------------------------------------------- 206 Beschreibung: 207 --------------------------------------------------------------------*/ 208 209 IMPL_LINK( SwFldVarPage, TypeHdl, ListBox *, EMPTYARG ) 210 { 211 // Alte ListBoxPos sichern 212 const sal_uInt16 nOld = GetTypeSel(); 213 214 // Aktuelle ListBoxPos 215 SetTypeSel(aTypeLB.GetSelectEntryPos()); 216 217 if(GetTypeSel() == LISTBOX_ENTRY_NOTFOUND) 218 { 219 SetTypeSel(0); 220 aTypeLB.SelectEntryPos(0); 221 } 222 223 if (nOld != GetTypeSel() || nOld == LISTBOX_ENTRY_NOTFOUND) 224 { 225 bInit = sal_True; 226 if (nOld != LISTBOX_ENTRY_NOTFOUND) 227 { 228 aNameED.SetText(aEmptyStr); 229 aValueED.SetText(aEmptyStr); 230 } 231 232 aValueED.SetDropEnable(sal_False); 233 UpdateSubType(); // Auswahl-Listboxen initialisieren 234 } 235 236 bInit = sal_False; 237 238 return 0; 239 } 240 241 /*-------------------------------------------------------------------- 242 Beschreibung: 243 --------------------------------------------------------------------*/ 244 245 IMPL_LINK( SwFldVarPage, SubTypeHdl, ListBox *, pBox ) 246 { 247 sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel()); 248 sal_uInt16 nSelPos = aSelectionLB.GetSelectEntryPos(); 249 250 if (nSelPos != LISTBOX_ENTRY_NOTFOUND) 251 nSelPos = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nSelPos); 252 253 if (IsFldEdit() && (!pBox || bInit)) 254 { 255 if (nTypeId != TYP_FORMELFLD) 256 aNameED.SetText(GetFldMgr().GetCurFldPar1()); 257 258 aValueED.SetText(GetFldMgr().GetCurFldPar2()); 259 } 260 261 if (aNameFT.GetText() != sOldNameFT) 262 aNameFT.SetText(sOldNameFT); 263 if (aValueFT.GetText() != sOldValueFT) 264 aValueFT.SetText(sOldValueFT); 265 266 aNumFormatLB.SetUpdateMode(sal_False); 267 aFormatLB.SetUpdateMode(sal_False); 268 FillFormatLB(nTypeId); 269 270 sal_uInt16 nSize = aFormatLB.GetEntryCount(); 271 272 sal_Bool bValue = sal_False, bName = sal_False, bNumFmt = sal_False, 273 bInvisible = sal_False, bSeparator = sal_False, bChapterLevel = sal_False; 274 sal_Bool bFormat = nSize != 0; 275 276 switch ( nTypeId ) 277 { 278 case TYP_USERFLD: 279 { 280 // Benutzertyp aendern oder anlegen 281 SwUserFieldType* pType = (SwUserFieldType*) 282 GetFldMgr().GetFldType( RES_USERFLD, nSelPos ); 283 284 if ( pType ) 285 { 286 if ( !IsFldEdit() ) 287 { 288 if ( pBox || ( bInit && !IsRefresh() ) ) // Nur bei Interaktion mit Maus 289 { 290 aNameED.SetText( pType->GetName() ); 291 292 if ( pType->GetType() == UF_STRING ) 293 { 294 aValueED.SetText( pType->GetContent() ); 295 aNumFormatLB.SelectEntryPos( 0 ); 296 } 297 else 298 aValueED.SetText( pType->GetContent() ); 299 // aValueED.SetText(pType->GetContent(aNumFormatLB.GetFormat())); 300 } 301 } 302 else 303 aValueED.SetText( pType->GetContent() ); 304 } 305 else 306 { 307 if ( pBox ) // Nur bei Interaktion mit Maus 308 { 309 aNameED.SetText( aEmptyStr ); 310 aValueED.SetText( aEmptyStr ); 311 } 312 } 313 bValue = bName = bNumFmt = bInvisible = sal_True; 314 315 aValueED.SetDropEnable( sal_True ); 316 break; 317 } 318 319 case TYP_SETFLD: 320 bValue = sal_True; 321 322 bNumFmt = bInvisible = sal_True; 323 324 if ( !IsFldDlgHtmlMode() ) 325 bName = sal_True; 326 else 327 { 328 aNumFormatLB.Clear(); 329 sal_uInt16 nPos = aNumFormatLB.InsertEntry( SW_RESSTR( FMT_SETVAR_TEXT ), 0 ); 330 aNumFormatLB.SetEntryData( nPos, (void *) ULONG_MAX ); 331 aNumFormatLB.SelectEntryPos( 0 ); 332 } 333 // gibt es ein entprechendes SetField 334 if ( IsFldEdit() || pBox ) // Nur bei Interaktion mit Maus 335 { 336 if ( nSelPos != LISTBOX_ENTRY_NOTFOUND ) 337 { 338 String sName( aSelectionLB.GetSelectEntry() ); 339 aNameED.SetText( sName ); 340 341 if ( !IsFldDlgHtmlMode() ) 342 { 343 SwWrtShell *pSh = GetWrtShell(); 344 if ( !pSh ) 345 pSh = ::GetActiveWrtShell(); 346 if ( pSh ) 347 { 348 SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*) 349 pSh->GetFldType( RES_SETEXPFLD, sName ); 350 351 if ( pSetTyp && pSetTyp->GetType() == nsSwGetSetExpType::GSE_STRING ) 352 aNumFormatLB.SelectEntryPos( 0 ); // Textuell 353 } 354 } 355 } 356 } 357 if ( GetCurField() != NULL && IsFldEdit() ) 358 { 359 // GetFormula fuehrt bei Datumsformaten zu Problemen, 360 // da nur der numerische Wert ohne Formatierung returned wird. 361 // Muss aber verwendet werden, da sonst bei GetPar2 nur der vom 362 // Kalkulator errechnete Wert angezeigt werden wuerde 363 // (statt test2 = test + 1) 364 aValueED.SetText( ( (SwSetExpField*) GetCurField() )->GetFormula() ); 365 } 366 aValueED.SetDropEnable( sal_True ); 367 break; 368 369 case TYP_FORMELFLD: 370 { 371 bValue = sal_True; 372 bNumFmt = sal_True; 373 aValueFT.SetText( SW_RESSTR( STR_FORMULA ) ); 374 aValueED.SetDropEnable( sal_True ); 375 } 376 break; 377 378 case TYP_GETFLD: 379 { 380 if ( !IsFldEdit() ) 381 { 382 aNameED.SetText( aEmptyStr ); 383 aValueED.SetText( aEmptyStr ); 384 } 385 386 if ( nSelPos != LISTBOX_ENTRY_NOTFOUND ) 387 { 388 String sName( aSelectionLB.GetSelectEntry() ); 389 if ( !IsFldEdit() ) 390 aNameED.SetText( sName ); 391 392 // gibt es ein entprechendes SetField 393 SwWrtShell *pSh = GetWrtShell(); 394 if ( !pSh ) 395 pSh = ::GetActiveWrtShell(); 396 if ( pSh ) 397 { 398 SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*) 399 pSh->GetFldType( RES_SETEXPFLD, sName ); 400 401 if ( pSetTyp ) 402 { 403 if ( pSetTyp->GetType() & nsSwGetSetExpType::GSE_STRING ) // Textuell? 404 bFormat = sal_True; 405 else 406 // Numerisch 407 bNumFmt = sal_True; 408 } 409 } 410 } 411 else 412 bFormat = sal_False; 413 414 EnableInsert( bFormat | bNumFmt ); 415 } 416 break; 417 418 case TYP_INPUTFLD: 419 aValueFT.SetText( SW_RESSTR( STR_PROMPT ) ); 420 421 if ( nSelPos != LISTBOX_ENTRY_NOTFOUND ) 422 { 423 bValue = bNumFmt = sal_True; 424 425 String sName; 426 427 sName = aSelectionLB.GetSelectEntry(); 428 aNameED.SetText( sName ); 429 430 // User- oder SetField ? 431 sal_uInt16 nInpType = 0; 432 nInpType = static_cast< sal_uInt16 >( GetFldMgr().GetFldType( RES_USERFLD, sName ) ? 0 : TYP_SETINPFLD ); 433 434 if ( nInpType ) // SETEXPFLD 435 { 436 // gibt es ein entprechendes SetField 437 SwSetExpFieldType* pSetTyp = (SwSetExpFieldType*) 438 GetFldMgr().GetFldType( RES_SETEXPFLD, sName ); 439 440 if ( pSetTyp ) 441 { 442 if ( pSetTyp->GetType() == nsSwGetSetExpType::GSE_STRING ) // Textuell? 443 { 444 aNumFormatLB.Clear(); 445 446 sal_uInt16 nPos = aNumFormatLB.InsertEntry( SW_RESSTR( FMT_USERVAR_TEXT ), 0 ); 447 aNumFormatLB.SetEntryData( nPos, (void *) ULONG_MAX ); 448 aNumFormatLB.SelectEntryPos( 0 ); 449 } 450 } 451 if ( GetCurField() != NULL 452 && IsFldEdit() && ( !pBox || bInit ) ) 453 { 454 aValueED.SetText( ( (SwSetExpField*) GetCurField() )->GetPromptText() ); 455 } 456 } 457 else 458 // USERFLD 459 bFormat = bNumFmt = sal_False; 460 } 461 break; 462 463 case TYP_DDEFLD: 464 aValueFT.SetText( SW_RESSTR( STR_DDE_CMD ) ); 465 466 if ( IsFldEdit() || pBox ) // Nur bei Interaktion mit Maus 467 { 468 if ( nSelPos != LISTBOX_ENTRY_NOTFOUND ) 469 { 470 SwDDEFieldType* pType = 471 (SwDDEFieldType*) GetFldMgr().GetFldType( RES_DDEFLD, nSelPos ); 472 473 if ( pType ) 474 { 475 aNameED.SetText( pType->GetName() ); 476 477 //JP 28.08.95: DDE-Topics/-Items koennen Blanks in ihren 478 // Namen haben! Wird hier noch nicht beachtet 479 String sCmd( pType->GetCmd() ); 480 sal_uInt16 nTmpPos = sCmd.SearchAndReplace( sfx2::cTokenSeperator, ' ' ); 481 sCmd.SearchAndReplace( sfx2::cTokenSeperator, ' ', nTmpPos ); 482 483 aValueED.SetText( sCmd ); 484 aFormatLB.SelectEntryPos( pType->GetType() ); 485 } 486 } 487 } 488 bName = bValue = sal_True; 489 break; 490 491 case TYP_SEQFLD: 492 { 493 // aNumRB.Check(sal_True); 494 bName = bValue = bSeparator = bChapterLevel = sal_True; 495 496 SwFieldType* pFldTyp; 497 if ( GetCurField() != NULL && IsFldEdit() ) 498 pFldTyp = GetCurField()->GetTyp(); 499 else 500 { 501 String sFldTypeName( aSelectionLB.GetEntry( nSelPos ) ); 502 if ( sFldTypeName.Len() ) 503 pFldTyp = GetFldMgr().GetFldType( RES_SETEXPFLD, sFldTypeName ); 504 else 505 pFldTyp = 0; 506 } 507 508 if ( GetCurField() != NULL && IsFldEdit() ) 509 aValueED.SetText( ( (SwSetExpField*) GetCurField() )-> GetFormula() ); 510 511 if ( IsFldEdit() || pBox ) // Nur bei Interaktion mit Maus 512 aNameED.SetText( aSelectionLB.GetSelectEntry() ); 513 514 if ( pFldTyp ) 515 { 516 sal_uInt8 nLevel = ( (SwSetExpFieldType*) pFldTyp )->GetOutlineLvl(); 517 if ( 0x7f == nLevel ) 518 aChapterLevelLB.SelectEntryPos( 0 ); 519 else 520 aChapterLevelLB.SelectEntryPos( nLevel + 1 ); 521 String sDelim = ( (SwSetExpFieldType*) pFldTyp )->GetDelimiter(); 522 aSeparatorED.SetText( sDelim ); 523 ChapterHdl(); 524 } 525 } 526 break; 527 528 case TYP_SETREFPAGEFLD: 529 { 530 bValue = sal_False; 531 aValueFT.SetText( SW_RESSTR( STR_OFFSET ) ); 532 533 if ( IsFldEdit() || pBox ) // Nur bei Interaktion mit Maus 534 aNameED.SetText( aEmptyStr ); 535 536 if ( nSelPos != 0 && nSelPos != LISTBOX_ENTRY_NOTFOUND ) 537 { 538 bValue = sal_True; // SubType OFF - kennt keinen Offset 539 if ( GetCurField() != NULL && IsFldEdit() ) 540 aValueED.SetText( String::CreateFromInt32( ( (SwRefPageSetField*) GetCurField() )->GetOffset() ) ); 541 } 542 } 543 break; 544 545 case TYP_GETREFPAGEFLD: 546 aNameED.SetText( aEmptyStr ); 547 aValueED.SetText( aEmptyStr ); 548 break; 549 } 550 551 aNumFormatLB.Show( bNumFmt ); 552 aFormatLB.Show( !bNumFmt ); 553 554 if ( IsFldEdit() ) 555 bName = sal_False; 556 557 aFormatLB.Enable( bFormat ); 558 aFormatFT.Enable( bFormat | bNumFmt ); 559 aNameFT.Enable( bName ); 560 aNameED.Enable( bName ); 561 aValueFT.Enable( bValue ); 562 aValueED.Enable( bValue ); 563 564 Size aSz( aFormatLB.GetSizePixel() ); 565 if ( bChapterLevel ) 566 aSz.Height() = aFormatLB.LogicToPixel( Size( 1, 94 ), MAP_APPFONT ).Height(); 567 else 568 aSz.Height() = aFormatLB.LogicToPixel( Size( 1, 123 ), MAP_APPFONT ).Height(); 569 aFormatLB.SetSizePixel( aSz ); 570 571 aInvisibleCB.Show( !bSeparator ); 572 aSeparatorFT.Show( bSeparator ); 573 aSeparatorED.Show( bSeparator ); 574 aChapterHeaderFT.Show( bChapterLevel ); 575 aChapterLevelFT.Show( bChapterLevel ); 576 aChapterLevelLB.Show( bChapterLevel ); 577 aInvisibleCB.Enable( bInvisible ); 578 579 ModifyHdl(); // Anwenden/Einfuegen/Loeschen Status update 580 581 aNumFormatLB.SetUpdateMode( sal_True ); 582 aFormatLB.SetUpdateMode( sal_True ); 583 584 if ( aSelectionLB.IsCallAddSelection() ) 585 { 586 nTypeId = (sal_uInt16) (sal_uLong) aTypeLB.GetEntryData( GetTypeSel() ); 587 588 switch ( nTypeId ) 589 { 590 case TYP_FORMELFLD: 591 { 592 nSelPos = aSelectionLB.GetSelectEntryPos(); 593 594 if ( nSelPos != LISTBOX_ENTRY_NOTFOUND ) 595 nSelPos = (sal_uInt16) (sal_uLong) aSelectionLB.GetEntryData( nSelPos ); 596 597 if ( nSelPos != LISTBOX_ENTRY_NOTFOUND && pBox && !bInit ) 598 { 599 aValueED.ReplaceSelected( aSelectionLB.GetSelectEntry() ); 600 ModifyHdl(); 601 } 602 } 603 break; 604 } 605 aSelectionLB.ResetCallAddSelection(); 606 } 607 return 0; 608 } 609 610 /*-------------------------------------------------------------------- 611 Beschreibung: Typen in der SelectionBox erneuern 612 --------------------------------------------------------------------*/ 613 614 void SwFldVarPage::UpdateSubType() 615 { 616 SetSelectionSel( aSelectionLB.GetSelectEntryPos() ); 617 618 String sOldSel; 619 if ( GetSelectionSel() != LISTBOX_ENTRY_NOTFOUND ) 620 sOldSel = aSelectionLB.GetEntry( GetSelectionSel() ); 621 622 // Auswahl-Listbox fuellen 623 aSelectionLB.SetUpdateMode( sal_False ); 624 aSelectionLB.Clear(); 625 626 const sal_uInt16 nTypeId = (sal_uInt16) (sal_uLong) aTypeLB.GetEntryData( GetTypeSel() ); 627 SvStringsDtor aList; 628 GetFldMgr().GetSubTypes( nTypeId, aList ); 629 const sal_uInt16 nCount = aList.Count(); 630 for ( sal_uInt16 i = 0; i < nCount; ++i ) 631 { 632 if ( nTypeId != TYP_INPUTFLD || i ) 633 { 634 if ( !IsFldEdit() ) 635 { 636 const sal_uInt16 nPos = aSelectionLB.InsertEntry( *aList[i] ); 637 aSelectionLB.SetEntryData( nPos, reinterpret_cast< void* >( i ) ); 638 } 639 else 640 { 641 sal_Bool bInsert = sal_False; 642 643 switch ( nTypeId ) 644 { 645 case TYP_INPUTFLD: 646 if ( GetCurField() != NULL && *aList[i] == GetCurField()->GetPar1() ) 647 bInsert = sal_True; 648 break; 649 650 case TYP_FORMELFLD: 651 bInsert = sal_True; 652 break; 653 654 case TYP_GETFLD: 655 if ( GetCurField() != NULL && *aList[i] == ( (SwFormulaField*) GetCurField() )->GetFormula() ) 656 bInsert = sal_True; 657 break; 658 659 case TYP_SETFLD: 660 case TYP_USERFLD: 661 if ( GetCurField() != NULL && *aList[i] == GetCurField()->GetTyp()->GetName() ) 662 { 663 bInsert = sal_True; 664 if ( GetCurField()->GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE ) 665 aInvisibleCB.Check(); 666 } 667 break; 668 669 case TYP_SETREFPAGEFLD: 670 { 671 if ( GetCurField() != NULL 672 && ( ( ( (SwRefPageSetField*) GetCurField() )->IsOn() && i ) 673 || ( !( (SwRefPageSetField*) GetCurField() )->IsOn() && !i ) ) ) 674 { 675 sOldSel = *aList[i]; 676 } 677 678 // Alle Eintr?ge zur Auswahl zulassen: 679 const sal_uInt16 nPos = aSelectionLB.InsertEntry( *aList[i] ); 680 aSelectionLB.SetEntryData( nPos, reinterpret_cast< void* >( i ) ); 681 } 682 break; 683 684 default: 685 if ( GetCurField() != NULL && *aList[i] == GetCurField()->GetPar1() ) 686 bInsert = sal_True; 687 break; 688 } 689 690 if ( bInsert ) 691 { 692 const sal_uInt16 nPos = aSelectionLB.InsertEntry( *aList[i] ); 693 aSelectionLB.SetEntryData( nPos, reinterpret_cast< void* >( i ) ); 694 if ( nTypeId != TYP_FORMELFLD ) 695 break; 696 } 697 } 698 } 699 } 700 701 const sal_Bool bEnable = aSelectionLB.GetEntryCount() != 0; 702 ListBox *pLB = 0; 703 704 if ( bEnable ) 705 { 706 aSelectionLB.SelectEntry( sOldSel ); 707 if ( !aSelectionLB.GetSelectEntryCount() ) 708 { 709 aSelectionLB.SelectEntryPos( 0 ); 710 pLB = &aSelectionLB; // Alle Controls neu initialisieren 711 } 712 } 713 714 aSelectionLB.Enable( bEnable ); 715 aSelectionFT.Enable( bEnable ); 716 717 SubTypeHdl( pLB ); 718 aSelectionLB.SetUpdateMode( sal_True ); 719 } 720 721 /*-------------------------------------------------------------------- 722 Beschreibung: 723 --------------------------------------------------------------------*/ 724 725 sal_uInt16 SwFldVarPage::FillFormatLB(sal_uInt16 nTypeId) 726 { 727 String sOldSel; 728 const sal_uInt16 nFormatSel = aFormatLB.GetSelectEntryPos(); 729 if ( nFormatSel != LISTBOX_ENTRY_NOTFOUND ) 730 sOldSel = aFormatLB.GetEntry( nFormatSel ); 731 732 String sOldNumSel; 733 sal_uLong nOldNumFormat = 0; 734 sal_uInt16 nNumFormatSel = aNumFormatLB.GetSelectEntryPos(); 735 if ( nNumFormatSel != LISTBOX_ENTRY_NOTFOUND ) 736 { 737 sOldNumSel = aNumFormatLB.GetEntry( nNumFormatSel ); 738 nOldNumFormat = aNumFormatLB.GetFormat(); 739 } 740 741 // Format-Listbox fuellen 742 aFormatLB.Clear(); 743 aNumFormatLB.Clear(); 744 bool bSpecialFmt = false; 745 746 if ( TYP_GETREFPAGEFLD != nTypeId ) 747 { 748 if ( GetCurField() != NULL && IsFldEdit() ) 749 { 750 bSpecialFmt = GetCurField()->GetFormat() == SAL_MAX_UINT32; 751 752 if ( !bSpecialFmt ) 753 { 754 aNumFormatLB.SetDefFormat( GetCurField()->GetFormat() ); 755 sOldNumSel = aEmptyStr; 756 } 757 else if ( nTypeId == TYP_GETFLD || nTypeId == TYP_FORMELFLD ) 758 { 759 aNumFormatLB.SetFormatType( NUMBERFORMAT_NUMBER ); 760 } 761 } 762 else 763 { 764 if ( nOldNumFormat && nOldNumFormat != ULONG_MAX ) 765 aNumFormatLB.SetDefFormat( nOldNumFormat ); 766 else 767 aNumFormatLB.SetFormatType( NUMBERFORMAT_NUMBER ); 768 } 769 } 770 771 switch ( nTypeId ) 772 { 773 case TYP_USERFLD: 774 { 775 if ( !IsFldEdit() || bSpecialFmt ) 776 { 777 sal_uInt16 nPos = aNumFormatLB.InsertEntry( SW_RESSTR( FMT_MARK_TEXT ), 0 ); 778 aNumFormatLB.SetEntryData( nPos, (void *) ULONG_MAX ); 779 nPos = aNumFormatLB.InsertEntry( SW_RESSTR( FMT_USERVAR_CMD ), 1 ); 780 aNumFormatLB.SetEntryData( nPos, (void *) ULONG_MAX ); 781 } 782 } 783 break; 784 785 case TYP_SETFLD: 786 { 787 if ( !IsFldEdit() || bSpecialFmt ) 788 { 789 sal_uInt16 nPos = aNumFormatLB.InsertEntry( SW_RESSTR( FMT_SETVAR_TEXT ), 0 ); 790 aNumFormatLB.SetEntryData( nPos, (void *) ULONG_MAX ); 791 } 792 } 793 break; 794 795 case TYP_FORMELFLD: 796 { 797 sal_uInt16 nPos = aNumFormatLB.InsertEntry( SW_RESSTR( FMT_GETVAR_NAME ), 0 ); 798 aNumFormatLB.SetEntryData( nPos, (void *) ULONG_MAX ); 799 } 800 break; 801 802 case TYP_GETFLD: 803 { 804 sal_uInt16 nPos = aNumFormatLB.InsertEntry( SW_RESSTR( FMT_GETVAR_NAME ), 0 ); 805 aNumFormatLB.SetEntryData( nPos, (void *) ULONG_MAX ); 806 } 807 break; 808 } 809 810 if ( IsFldEdit() && bSpecialFmt ) 811 { 812 if ( nTypeId == TYP_USERFLD && ( GetCurField()->GetSubType() & nsSwExtendedSubType::SUB_CMD ) ) 813 aNumFormatLB.SelectEntryPos( 1 ); 814 else 815 aNumFormatLB.SelectEntryPos( 0 ); 816 } 817 else 818 { 819 if ( !nOldNumFormat && ( nNumFormatSel = aNumFormatLB.GetEntryPos( sOldNumSel ) ) != LISTBOX_ENTRY_NOTFOUND ) 820 aNumFormatLB.SelectEntryPos( nNumFormatSel ); 821 else if ( nOldNumFormat && nOldNumFormat == ULONG_MAX ) 822 aNumFormatLB.SelectEntry( sOldSel ); 823 } 824 825 const sal_uInt16 nSize = GetFldMgr().GetFormatCount(nTypeId, sal_False, IsFldDlgHtmlMode()); 826 827 for ( sal_uInt16 i = 0; i < nSize; i++ ) 828 { 829 const sal_uInt16 nPos = aFormatLB.InsertEntry( GetFldMgr().GetFormatStr( nTypeId, i ) ); 830 const sal_uInt16 nFldId = GetFldMgr().GetFormatId( nTypeId, i ); 831 aFormatLB.SetEntryData( nPos, reinterpret_cast< void* >( nFldId ) ); 832 if ( IsFldEdit() 833 && GetCurField() != NULL 834 && nFldId == GetCurField()->GetFormat() ) 835 { 836 aFormatLB.SelectEntryPos( nPos ); 837 } 838 } 839 840 if ( nSize && ( !IsFldEdit() || !aFormatLB.GetSelectEntryCount() ) ) 841 { 842 aFormatLB.SelectEntry( sOldSel ); 843 844 if ( !aFormatLB.GetSelectEntryCount() ) 845 { 846 aFormatLB.SelectEntry( SW_RESSTR( FMT_NUM_PAGEDESC ) ); 847 if ( !aFormatLB.GetSelectEntryCount() ) 848 { 849 aFormatLB.SelectEntry( SW_RESSTR( FMT_NUM_ARABIC ) ); 850 if ( !aFormatLB.GetSelectEntryCount() ) 851 aFormatLB.SelectEntryPos( 0 ); 852 } 853 } 854 } 855 856 return nSize; 857 } 858 859 /*-------------------------------------------------------------------- 860 Beschreibung: Modify 861 --------------------------------------------------------------------*/ 862 863 IMPL_LINK( SwFldVarPage, ModifyHdl, Edit *, EMPTYARG ) 864 { 865 String sValue(aValueED.GetText()); 866 sal_Bool bHasValue = sValue.Len() != 0; 867 sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel()); 868 sal_Bool bInsert = sal_False, bApply = sal_False, bDelete = sal_False; 869 870 String sName( aNameED.GetText() ); 871 xub_StrLen nLen = sName.Len(); 872 873 switch( nTypeId ) 874 { 875 case TYP_DDEFLD: 876 case TYP_USERFLD: 877 case TYP_SETFLD: 878 case TYP_SEQFLD: 879 SwCalc::IsValidVarName( sName, &sName ); 880 if( sName.Len() != nLen ) 881 { 882 nLen = sName.Len(); 883 Selection aSel(aNameED.GetSelection()); 884 aNameED.SetText( sName ); 885 aNameED.SetSelection( aSel ); // Cursorpos restaurieren 886 } 887 break; 888 } 889 890 891 // Buttons ueberpruefen 892 switch (nTypeId) 893 { 894 case TYP_DDEFLD: 895 if( nLen ) 896 { 897 // Gibts schon einen entsprechenden Type 898 bInsert = bApply = sal_True; 899 900 SwFieldType* pType = GetFldMgr().GetFldType(RES_DDEFLD, sName); 901 902 SwWrtShell *pSh = GetWrtShell(); 903 if(!pSh) 904 pSh = ::GetActiveWrtShell(); 905 if(pSh && pType) 906 bDelete = !pSh->IsUsed( *pType ); 907 } 908 break; 909 910 case TYP_USERFLD: 911 if( nLen ) 912 { 913 // Gibts schon einen entsprechenden Type 914 SwFieldType* pType = GetFldMgr().GetFldType(RES_USERFLD, sName); 915 916 SwWrtShell *pSh = GetWrtShell(); 917 if(!pSh) 918 pSh = ::GetActiveWrtShell(); 919 if(pSh && pType) 920 bDelete = !pSh->IsUsed( *pType ); 921 922 pType = GetFldMgr().GetFldType(RES_SETEXPFLD, sName); 923 if (!pType) // Kein Namenskonflikt mit Variablen 924 { 925 // Benutzerfelder duerfen auch ohne Inhalt eingefuegt werden! 926 // Bug #56845 927 bInsert = bApply = sal_True; 928 } 929 } 930 break; 931 932 default: 933 bInsert = sal_True; 934 935 if (nTypeId == TYP_SETFLD || nTypeId == TYP_SEQFLD) 936 { 937 SwSetExpFieldType* pFldType = (SwSetExpFieldType*) 938 GetFldMgr().GetFldType(RES_SETEXPFLD, sName); 939 940 if (pFldType) 941 { 942 943 SwWrtShell *pSh = GetWrtShell(); 944 if(!pSh) 945 pSh = ::GetActiveWrtShell(); 946 if(pSh) 947 { 948 const SwFldTypes* p = pSh->GetDoc()->GetFldTypes(); 949 sal_uInt16 i; 950 951 for (i = 0; i < INIT_FLDTYPES; i++) 952 { 953 SwFieldType* pType = (*p)[ i ]; 954 if (pType == pFldType) 955 break; 956 } 957 958 if (i >= INIT_FLDTYPES && !pSh->IsUsed(*pFldType)) 959 bDelete = sal_True; 960 961 if (nTypeId == TYP_SEQFLD && !(pFldType->GetType() & nsSwGetSetExpType::GSE_SEQ)) 962 bInsert = sal_False; 963 964 if (nTypeId == TYP_SETFLD && (pFldType->GetType() & nsSwGetSetExpType::GSE_SEQ)) 965 bInsert = sal_False; 966 } 967 } 968 if (GetFldMgr().GetFldType(RES_USERFLD, sName)) 969 bInsert = sal_False; 970 } 971 972 if( !nLen && ( nTypeId == TYP_SETFLD || 973 (!IsFldEdit() && nTypeId == TYP_GETFLD ) ) ) 974 bInsert = sal_False; 975 976 if( (nTypeId == TYP_SETFLD || nTypeId == TYP_FORMELFLD) && 977 !bHasValue ) 978 bInsert = sal_False; 979 break; 980 } 981 982 aNewDelTBX.EnableItem(BT_VARAPPLY, bApply); 983 aNewDelTBX.EnableItem(BT_VARDELETE, bDelete); 984 EnableInsert(bInsert); 985 986 return 0; 987 } 988 989 /*-------------------------------------------------------------------- 990 Beschreibung: 991 --------------------------------------------------------------------*/ 992 993 IMPL_LINK( SwFldVarPage, TBClickHdl, ToolBox *, pBox ) 994 { 995 sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel()); 996 997 switch (pBox->GetCurItemId()) 998 { 999 case BT_VARDELETE: 1000 { 1001 if( nTypeId == TYP_USERFLD ) 1002 GetFldMgr().RemoveFldType(RES_USERFLD, aSelectionLB.GetSelectEntry()); 1003 else 1004 { 1005 sal_uInt16 nWhich; 1006 1007 switch(nTypeId) 1008 { 1009 case TYP_SETFLD: 1010 case TYP_SEQFLD: 1011 nWhich = RES_SETEXPFLD; 1012 break; 1013 default: 1014 nWhich = RES_DDEFLD; 1015 break; 1016 } 1017 1018 GetFldMgr().RemoveFldType(nWhich, aSelectionLB.GetSelectEntry()); 1019 } 1020 1021 UpdateSubType(); 1022 SwWrtShell *pSh = GetWrtShell(); 1023 if(!pSh) 1024 pSh = ::GetActiveWrtShell(); 1025 if(pSh) 1026 { 1027 pSh->SetModified(); 1028 } 1029 } 1030 break; 1031 1032 case BT_VARAPPLY: 1033 { 1034 String sName(aNameED.GetText()), sValue(aValueED.GetText()); 1035 SwFieldType* pType = 0; 1036 sal_uInt16 nId = 0; 1037 sal_uInt16 nNumFormatPos = aNumFormatLB.GetSelectEntryPos(); 1038 1039 switch (nTypeId) 1040 { 1041 case TYP_USERFLD: nId = RES_USERFLD; break; 1042 case TYP_DDEFLD: nId = RES_DDEFLD; break; 1043 case TYP_SETFLD: nId = RES_SETEXPFLD;break; 1044 } 1045 pType = GetFldMgr().GetFldType(nId, sName); 1046 1047 sal_uLong nFormat = aFormatLB.GetSelectEntryPos(); 1048 if (nFormat != LISTBOX_ENTRY_NOTFOUND) 1049 nFormat = (sal_uLong)aFormatLB.GetEntryData((sal_uInt16)nFormat); 1050 1051 if (pType) // Aendern 1052 { 1053 SwWrtShell *pSh = GetWrtShell(); 1054 if(!pSh) 1055 pSh = ::GetActiveWrtShell(); 1056 if(pSh) 1057 { 1058 pSh->StartAllAction(); 1059 1060 if (nTypeId == TYP_USERFLD) 1061 { 1062 if (nNumFormatPos != LISTBOX_ENTRY_NOTFOUND) 1063 { 1064 sal_uLong nFmt = nNumFormatPos == 0 ? 0 : aNumFormatLB.GetFormat(); 1065 if (nFmt) 1066 { // Sprache auf Office-Sprache umstellen, da String im Office 1067 // Format vom Kalkulator erwartet wird und so in den Dlg 1068 // eingegeben werden sollte 1069 nFmt = SwValueField::GetSystemFormat(pSh->GetNumberFormatter(), nFmt); 1070 } 1071 ((SwUserFieldType*)pType)->SetContent(aValueED.GetText(), nFmt); 1072 ((SwUserFieldType*)pType)->SetType( 1073 nNumFormatPos == 0 ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR ); 1074 } 1075 } 1076 else 1077 { 1078 if (nFormat != LISTBOX_ENTRY_NOTFOUND) 1079 { 1080 //JP 28.08.95: DDE-Topics/-Items koennen Blanks in ihren 1081 // Namen haben! Wird hier noch nicht beachtet. 1082 sal_uInt16 nTmpPos = sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator ); 1083 sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator, nTmpPos ); 1084 ((SwDDEFieldType*)pType)->SetCmd(sValue); 1085 ((SwDDEFieldType*)pType)->SetType((sal_uInt16)nFormat); 1086 } 1087 } 1088 pType->UpdateFlds(); 1089 1090 pSh->EndAllAction(); 1091 } 1092 } 1093 else // Neu 1094 { 1095 if(nTypeId == TYP_USERFLD) 1096 { 1097 SwWrtShell *pSh = GetWrtShell(); 1098 if(!pSh) 1099 pSh = ::GetActiveWrtShell(); 1100 if(pSh) 1101 { 1102 SwUserFieldType aType( pSh->GetDoc(), sName ); 1103 1104 if (nNumFormatPos != LISTBOX_ENTRY_NOTFOUND) 1105 { 1106 aType.SetType(nNumFormatPos == 0 ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR); 1107 aType.SetContent( sValue, nNumFormatPos == 0 ? 0 : aNumFormatLB.GetFormat() ); 1108 aSelectionLB.InsertEntry(sName); 1109 aSelectionLB.SelectEntry(sName); 1110 GetFldMgr().InsertFldType( aType ); // Userfld Neu 1111 } 1112 } 1113 } 1114 else 1115 { 1116 if (nFormat != LISTBOX_ENTRY_NOTFOUND) 1117 { 1118 //JP 28.08.95: DDE-Topics/-Items koennen Blanks in ihren 1119 // Namen haben! Wird hier noch nicht beachtet. 1120 sal_uInt16 nTmpPos = sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator ); 1121 sValue.SearchAndReplace( ' ', sfx2::cTokenSeperator, nTmpPos ); 1122 1123 SwDDEFieldType aType(sName, sValue, (sal_uInt16)nFormat); 1124 aSelectionLB.InsertEntry(sName); 1125 aSelectionLB.SelectEntry(sName); 1126 GetFldMgr().InsertFldType(aType); // DDE-Feld Neu 1127 } 1128 } 1129 } 1130 if (IsFldEdit()) 1131 GetFldMgr().GetCurFld(); // FieldManager Updaten 1132 1133 UpdateSubType(); 1134 } 1135 break; 1136 } 1137 1138 return sal_True; 1139 } 1140 1141 /*-------------------------------------------------------------------- 1142 Beschreibung: 1143 --------------------------------------------------------------------*/ 1144 1145 IMPL_LINK( SwFldVarPage, ChapterHdl, ListBox *, EMPTYARG ) 1146 { 1147 sal_Bool bEnable = aChapterLevelLB.GetSelectEntryPos() != 0; 1148 1149 aSeparatorED.Enable(bEnable); 1150 aSeparatorFT.Enable(bEnable); 1151 SeparatorHdl(); 1152 1153 return 0; 1154 } 1155 1156 /*-------------------------------------------------------------------- 1157 Beschreibung: 1158 --------------------------------------------------------------------*/ 1159 1160 IMPL_LINK( SwFldVarPage, SeparatorHdl, Edit *, EMPTYARG ) 1161 { 1162 sal_Bool bEnable = aSeparatorED.GetText().Len() != 0 || 1163 aChapterLevelLB.GetSelectEntryPos() == 0; 1164 EnableInsert(bEnable); 1165 1166 return 0; 1167 } 1168 1169 /*-------------------------------------------------------------------- 1170 Beschreibung: 1171 --------------------------------------------------------------------*/ 1172 1173 sal_Bool SwFldVarPage::FillItemSet(SfxItemSet& ) 1174 { 1175 sal_uInt16 nTypeId = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData(GetTypeSel()); 1176 1177 String aVal(aValueED.GetText()); 1178 String aName(aNameED.GetText()); 1179 1180 sal_uInt16 nSubType = aSelectionLB.GetSelectEntryPos(); 1181 if(nSubType == LISTBOX_ENTRY_NOTFOUND) 1182 nSubType = 0; 1183 else 1184 nSubType = (sal_uInt16)(sal_uLong)aSelectionLB.GetEntryData(nSubType); 1185 1186 sal_uLong nFormat; 1187 1188 if (!aNumFormatLB.IsVisible()) 1189 { 1190 nFormat = aFormatLB.GetSelectEntryPos(); 1191 1192 if(nFormat == LISTBOX_ENTRY_NOTFOUND) 1193 nFormat = 0; 1194 else 1195 nFormat = (sal_uLong)aFormatLB.GetEntryData((sal_uInt16)nFormat); 1196 } 1197 else 1198 { 1199 nFormat = aNumFormatLB.GetFormat(); 1200 1201 if (nFormat && nFormat != ULONG_MAX && aNumFormatLB.IsAutomaticLanguage()) 1202 { 1203 // Sprache auf Office-Sprache umstellen, da String im Office- 1204 // Format vom Kalkulator erwartet wird und so in den Dlg 1205 // eingegeben werden sollte 1206 SwWrtShell *pSh = GetWrtShell(); 1207 if(!pSh) 1208 pSh = ::GetActiveWrtShell(); 1209 if(pSh) 1210 { 1211 nFormat = SwValueField::GetSystemFormat(pSh->GetNumberFormatter(), nFormat); 1212 } 1213 } 1214 } 1215 sal_Unicode cSeparator = ' '; 1216 switch (nTypeId) 1217 { 1218 case TYP_USERFLD: 1219 { 1220 nSubType = (nFormat == ULONG_MAX) ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR; 1221 1222 if (nFormat == ULONG_MAX && aNumFormatLB.GetSelectEntry() == SW_RESSTR(FMT_USERVAR_CMD)) 1223 nSubType |= nsSwExtendedSubType::SUB_CMD; 1224 1225 if (aInvisibleCB.IsChecked()) 1226 nSubType |= nsSwExtendedSubType::SUB_INVISIBLE; 1227 break; 1228 } 1229 case TYP_FORMELFLD: 1230 { 1231 nSubType = nsSwGetSetExpType::GSE_FORMULA; 1232 if (aNumFormatLB.IsVisible() && nFormat == ULONG_MAX) 1233 nSubType |= nsSwExtendedSubType::SUB_CMD; 1234 break; 1235 } 1236 case TYP_GETFLD: 1237 { 1238 nSubType &= 0xff00; 1239 if (aNumFormatLB.IsVisible() && nFormat == ULONG_MAX) 1240 nSubType |= nsSwExtendedSubType::SUB_CMD; 1241 break; 1242 } 1243 case TYP_INPUTFLD: 1244 { 1245 SwFieldType* pType = GetFldMgr().GetFldType(RES_USERFLD, aName); 1246 nSubType = static_cast< sal_uInt16 >((nSubType & 0xff00) | ((pType) ? INP_USR : INP_VAR)); 1247 break; 1248 } 1249 1250 case TYP_SETFLD: 1251 { 1252 if (IsFldDlgHtmlMode()) 1253 { 1254 nSubType = 0x0100; 1255 nSubType = (nSubType & 0xff00) | nsSwGetSetExpType::GSE_STRING; 1256 } 1257 else 1258 nSubType = (nSubType & 0xff00) | ((nFormat == ULONG_MAX) ? nsSwGetSetExpType::GSE_STRING : nsSwGetSetExpType::GSE_EXPR); 1259 1260 if (aInvisibleCB.IsChecked()) 1261 nSubType |= nsSwExtendedSubType::SUB_INVISIBLE; 1262 break; 1263 } 1264 case TYP_SEQFLD: 1265 { 1266 // nSubType = nsSwGetSetExpType::GSE_SEQ; // nsSwGetSetExpType::GSE_SEQ wird im Fldmgr fest gesetzt, kann also entfallen 1267 nSubType = aChapterLevelLB.GetSelectEntryPos(); 1268 if (nSubType == 0) 1269 nSubType = 0x7f; 1270 else 1271 { 1272 nSubType--; 1273 String sSeparator(aSeparatorED.GetText().GetChar(0)); 1274 cSeparator = sSeparator.Len() ? sSeparator.GetChar(0) : ' '; 1275 //nSubType |= (sal_uInt16)(((sal_uInt8)) << 8); 1276 } 1277 break; 1278 } 1279 case TYP_GETREFPAGEFLD: 1280 if( SVX_NUM_CHAR_SPECIAL == nFormat ) 1281 aVal = aValueED.GetText(); 1282 break; 1283 } 1284 1285 if (!IsFldEdit() || 1286 aNameED.GetSavedValue() != aNameED.GetText() || 1287 aValueED.GetSavedValue() != aValueED.GetText() || 1288 aSelectionLB.GetSavedValue() != aSelectionLB.GetSelectEntryPos() || 1289 aFormatLB.GetSavedValue() != aFormatLB.GetSelectEntryPos() || 1290 nOldFormat != aNumFormatLB.GetFormat() || 1291 aInvisibleCB.GetState() != aInvisibleCB.GetSavedValue() || 1292 aChapterLevelLB.GetSavedValue() != aChapterLevelLB.GetSelectEntryPos() || 1293 aSeparatorED.GetSavedValue() != aSeparatorED.GetText()) 1294 { 1295 InsertFld( nTypeId, nSubType, aName, aVal, nFormat, 1296 cSeparator, aNumFormatLB.IsAutomaticLanguage() ); 1297 } 1298 1299 UpdateSubType(); 1300 1301 return sal_False; 1302 } 1303 1304 1305 /*-------------------------------------------------------------------- 1306 Beschreibung: 1307 --------------------------------------------------------------------*/ 1308 1309 SfxTabPage* SwFldVarPage::Create( Window* pParent, 1310 const SfxItemSet& rAttrSet ) 1311 { 1312 return ( new SwFldVarPage( pParent, rAttrSet ) ); 1313 } 1314 1315 /*-------------------------------------------------------------------- 1316 Beschreibung: 1317 --------------------------------------------------------------------*/ 1318 1319 sal_uInt16 SwFldVarPage::GetGroup() 1320 { 1321 return GRP_VAR; 1322 } 1323 1324 /*-------------------------------------------------------------------- 1325 Beschreibung: 1326 --------------------------------------------------------------------*/ 1327 1328 SelectionListBox::SelectionListBox( SwFldVarPage* pDialog, const ResId& rResId ) : 1329 ListBox (pDialog, rResId), 1330 pDlg (pDialog), 1331 bCallAddSelection(sal_False) 1332 { 1333 } 1334 1335 /*-------------------------------------------------------------------- 1336 Beschreibung: 1337 --------------------------------------------------------------------*/ 1338 1339 long SelectionListBox::PreNotify( NotifyEvent& rNEvt ) 1340 { 1341 long nHandled = ListBox::PreNotify( rNEvt ); 1342 //sal_Bool bAddSel = sal_False; 1343 if ( rNEvt.GetType() == EVENT_KEYUP ) 1344 { 1345 const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); 1346 const KeyCode aKeyCode = pKEvt->GetKeyCode(); 1347 const sal_uInt16 nModifier = aKeyCode.GetModifier(); 1348 if( aKeyCode.GetCode() == KEY_SPACE && !nModifier) 1349 // bAddSel = sal_True; 1350 bCallAddSelection = sal_True; 1351 } 1352 if ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN ) 1353 { 1354 const MouseEvent* pMEvt = rNEvt.GetMouseEvent(); 1355 1356 if (pMEvt && (pMEvt->IsMod1() || pMEvt->IsMod2())) // Alt oder Ctrl 1357 //bAddSel = sal_True; 1358 bCallAddSelection = sal_True; 1359 } 1360 1361 // if (bAddSel) 1362 // pDlg->AddSelection(this); 1363 1364 return nHandled; 1365 } 1366 /* -----------------12.01.99 11:14------------------- 1367 * 1368 * --------------------------------------------------*/ 1369 void SwFldVarPage::FillUserData() 1370 { 1371 String sData(String::CreateFromAscii(USER_DATA_VERSION)); 1372 sData += ';'; 1373 sal_uInt16 nTypeSel = aTypeLB.GetSelectEntryPos(); 1374 if( LISTBOX_ENTRY_NOTFOUND == nTypeSel ) 1375 nTypeSel = USHRT_MAX; 1376 else 1377 nTypeSel = (sal_uInt16)(sal_uLong)aTypeLB.GetEntryData( nTypeSel ); 1378 sData += String::CreateFromInt32( nTypeSel ); 1379 SetUserData(sData); 1380 } 1381 1382