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 #include "swuiidxmrk.hxx" 31 #include <hintids.hxx> 32 #include <helpid.h> 33 #define _SVSTDARR_STRINGSSORT 34 #include <svl/svstdarr.hxx> 35 #include <comphelper/processfactory.hxx> 36 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 37 #include <com/sun/star/beans/PropertyValue.hpp> 38 #include <com/sun/star/beans/XPropertySet.hpp> 39 #include <com/sun/star/util/SearchOptions.hpp> 40 #include <com/sun/star/util/SearchFlags.hpp> 41 #include <com/sun/star/i18n/TransliterationModules.hpp> 42 #include <svl/stritem.hxx> 43 #include <vcl/msgbox.hxx> 44 #include <sfx2/dispatch.hxx> 45 #include <svl/eitem.hxx> 46 #include <svtools/txtcmp.hxx> 47 #include <editeng/scripttypeitem.hxx> 48 #include <svl/itemset.hxx> 49 #include <editeng/langitem.hxx> 50 #include "editeng/unolingu.hxx" 51 #include <swtypes.hxx> 52 #include <idxmrk.hxx> 53 #include <txttxmrk.hxx> 54 #include <wrtsh.hxx> 55 #include <view.hxx> 56 #include <multmrk.hxx> 57 #include <swundo.hxx> // fuer Undo-Ids 58 #include <cmdid.h> 59 #include <index.hrc> 60 #include <idxmrk.hrc> 61 #include <swmodule.hxx> 62 #include <fldmgr.hxx> 63 #include <fldbas.hxx> 64 #include <utlui.hrc> 65 #include <swcont.hxx> 66 #include <svl/cjkoptions.hxx> 67 #include <ndtxt.hxx> 68 #include <breakit.hxx> 69 #include <SwRewriter.hxx> 70 71 #include "swuiidxmrk.hxx" 72 #include <unomid.h> 73 74 75 #define POS_CONTENT 0 76 #define POS_INDEX 1 77 #define POS_USER 2 78 79 static sal_uInt16 nTypePos = 1; // TOX_INDEX as standard 80 static sal_uInt16 nKey1Pos = USHRT_MAX; 81 82 static sal_uInt16 nKey2Pos = USHRT_MAX; 83 84 using namespace com::sun::star; 85 using namespace com::sun::star::i18n; 86 using namespace com::sun::star::lang; 87 using namespace com::sun::star::util; 88 using namespace com::sun::star::i18n; 89 using ::rtl::OUString; 90 using namespace ::comphelper; 91 using namespace ::com::sun::star; 92 93 /*-------------------------------------------------------------------- 94 Beschreibung: Dialog zum Einfuegen einer Verzeichnismarkierung 95 --------------------------------------------------------------------*/ 96 SwIndexMarkDlg::SwIndexMarkDlg(Window *pParent, 97 sal_Bool bNewDlg, 98 const ResId& rResId, 99 sal_Int32 _nOptionsId, SwWrtShell& rWrtShell ) : 100 Window(pParent, rResId), 101 aIndexFL(this, SW_RES(FL_INDEX )), 102 aTypeFT (this, SW_RES(LBL_INDEX )), 103 aTypeDCB(this, SW_RES(DCB_INDEX )), 104 aNewBT(this, SW_RES(BT_NEW )), 105 106 aEntryFT(this, SW_RES(LBL_ENTRY )), 107 aEntryED(this, SW_RES(SL_ENTRY )), 108 aPhoneticFT0(this, SW_RES(FT_PHONETIC_1 )), 109 aPhoneticED0(this, SW_RES(ED_PHONETIC_1 )), 110 111 aKeyFT(this, SW_RES(LBL_KEY )), 112 aKeyDCB(this, SW_RES(DCB_KEY )), 113 aPhoneticFT1(this, SW_RES(FT_PHONETIC_2 )), 114 aPhoneticED1(this, SW_RES(ED_PHONETIC_2 )), 115 116 aKey2FT(this, SW_RES(LBL_KEY2 )), 117 aKey2DCB(this, SW_RES(DCB_KEY2 )), 118 aPhoneticFT2(this, SW_RES(FT_PHONETIC_3 )), 119 aPhoneticED2(this, SW_RES(ED_PHONETIC_3 )), 120 121 aLevelFT(this, SW_RES(LBL_LEVEL )), 122 aLevelED(this, SW_RES(SL_LEVEL )), 123 aMainEntryCB(this, SW_RES(CB_MAIN_ENTRY )), 124 aApplyToAllCB(this,SW_RES(CB_APPLY_TO_ALL)), 125 aSearchCaseSensitiveCB(this, SW_RES(CB_CASESENSITIVE )), 126 aSearchCaseWordOnlyCB(this, SW_RES(CB_WORDONLY )), 127 128 129 aOKBT(this, SW_RES(BT_OK )), 130 aCancelBT(this, SW_RES(BT_CANCEL )), 131 aHelpBT(this, SW_RES(BT_HELP )), 132 aDelBT(this, SW_RES(BT_DEL )), 133 134 aPrevSameBT(this,SW_RES(BT_PREVSAME)), 135 aNextSameBT(this,SW_RES(BT_NXTSAME)), 136 aPrevBT(this, SW_RES(BT_PREV )), 137 aNextBT(this, SW_RES(BT_NXT )), 138 139 nOptionsId( _nOptionsId ), 140 bDel(sal_False), 141 bNewMark(bNewDlg), 142 bSelected(sal_False), 143 144 bPhoneticED0_ChangedByUser(sal_False), 145 bPhoneticED1_ChangedByUser(sal_False), 146 bPhoneticED2_ChangedByUser(sal_False), 147 nLangForPhoneticReading(2052), 148 bIsPhoneticReadingEnabled(sal_False), 149 xExtendedIndexEntrySupplier(NULL), 150 pTOXMgr(0), 151 pSh(&rWrtShell) 152 { 153 aNewBT.SetAccessibleRelationMemberOf(&aIndexFL); 154 155 if( SvtCJKOptions().IsCJKFontEnabled() ) 156 { 157 uno::Reference< lang::XMultiServiceFactory > xMSF = getProcessServiceFactory(); 158 159 xExtendedIndexEntrySupplier = 160 uno::Reference< i18n::XExtendedIndexEntrySupplier > ( 161 xMSF->createInstance( C2U("com.sun.star.i18n.IndexEntrySupplier") ), 162 uno::UNO_QUERY ); 163 } 164 165 SetStyle(GetStyle()|WB_DIALOGCONTROL); 166 FreeResource(); 167 aOKBT .SetHelpId(HID_INSERT_IDX_MRK_OK ); 168 aCancelBT .SetHelpId(HID_INSERT_IDX_MRK_CLOSE ); 169 aDelBT .SetHelpId(HID_INSERT_IDX_MRK_DELETE ); 170 aNewBT .SetHelpId(HID_INSERT_IDX_MRK_NEW ); 171 aPrevBT .SetHelpId(HID_INSERT_IDX_MRK_PREV ); 172 aPrevSameBT .SetHelpId(HID_INSERT_IDX_MRK_PREV_SAME ); 173 aNextBT .SetHelpId(HID_INSERT_IDX_MRK_NEXT ); 174 aNextSameBT .SetHelpId(HID_INSERT_IDX_MRK_NEXT_SAME ); 175 aTypeDCB .SetHelpId(HID_INSERT_IDX_MRK_TYPE ); 176 aEntryED .SetHelpId(HID_INSERT_IDX_MRK_ENTRY ); 177 aKeyDCB .SetHelpId(HID_INSERT_IDX_MRK_PRIM_KEY ); 178 aKey2DCB .SetHelpId(HID_INSERT_IDX_MRK_SEC_KEY ); 179 aLevelED .SetHelpId(HID_INSERT_IDX_MRK_LEVEL ); 180 aMainEntryCB .SetHelpId(HID_INSERT_IDX_MRK_MAIN_ENTRY); 181 aApplyToAllCB .SetHelpId(HID_INSERT_IDX_MRK_APPLY_ALL ); 182 aPhoneticED0 .SetHelpId(HID_INSERT_IDX_MRK_PHONETIC_READING ); 183 aPhoneticED1 .SetHelpId(HID_INSERT_IDX_MRK_PHONETIC_READING ); 184 aPhoneticED2 .SetHelpId(HID_INSERT_IDX_MRK_PHONETIC_READING ); 185 186 aSearchCaseSensitiveCB.SetHelpId( HID_INSERT_IDX_MRK_SRCH_CASESENSITIVE ); 187 aSearchCaseWordOnlyCB.SetHelpId( HID_INSERT_IDX_MRK_SRCH_WORDONLY ); 188 189 190 GetParent()->SetText( SW_RESSTR( bNewMark ? STR_IDXMRK_INSERT : STR_IDXMRK_EDIT)); 191 192 aDelBT.SetClickHdl(LINK(this,SwIndexMarkDlg, DelHdl)); 193 aPrevBT.SetClickHdl(LINK(this,SwIndexMarkDlg, PrevHdl)); 194 aPrevSameBT.SetClickHdl(LINK(this,SwIndexMarkDlg, PrevSameHdl)); 195 aNextBT.SetClickHdl(LINK(this,SwIndexMarkDlg, NextHdl)); 196 aNextSameBT.SetClickHdl(LINK(this,SwIndexMarkDlg, NextSameHdl)); 197 //aTypeDCB.SetModifyHdl(LINK(this,SwIndexMarkDlg, ModifyHdl)); 198 aTypeDCB.SetSelectHdl(LINK(this,SwIndexMarkDlg, ModifyHdl)); 199 aKeyDCB.SetModifyHdl(LINK(this,SwIndexMarkDlg, KeyDCBModifyHdl)); 200 aKey2DCB.SetModifyHdl(LINK(this,SwIndexMarkDlg, KeyDCBModifyHdl)); 201 aOKBT.SetClickHdl(LINK(this,SwIndexMarkDlg, InsertHdl)); 202 aCancelBT.SetClickHdl(LINK(this,SwIndexMarkDlg, CloseHdl)); 203 aEntryED.SetModifyHdl(LINK(this,SwIndexMarkDlg, ModifyHdl)); 204 aNewBT.SetClickHdl(LINK(this, SwIndexMarkDlg, NewUserIdxHdl)); 205 aApplyToAllCB.SetClickHdl(LINK(this, SwIndexMarkDlg, SearchTypeHdl)); 206 aPhoneticED0.SetModifyHdl(LINK(this,SwIndexMarkDlg, PhoneticEDModifyHdl)); 207 aPhoneticED1.SetModifyHdl(LINK(this,SwIndexMarkDlg, PhoneticEDModifyHdl)); 208 aPhoneticED2.SetModifyHdl(LINK(this,SwIndexMarkDlg, PhoneticEDModifyHdl)); 209 210 if(bNewMark) 211 { 212 aDelBT.Hide(); 213 214 { 215 ImageList aTempList( SW_RES( IMG_NAVI_ENTRYBMPH ) ); 216 aNewBT.SetModeImage( aTempList.GetImage( SID_SW_START + CONTENT_TYPE_INDEX ), BMP_COLOR_HIGHCONTRAST ); 217 } 218 219 { 220 ImageList aTempList( SW_RES( IMG_NAVI_ENTRYBMP ) ); 221 aNewBT.SetModeImage( aTempList.GetImage( SID_SW_START + CONTENT_TYPE_INDEX ), BMP_COLOR_NORMAL ); 222 } 223 } 224 else 225 { 226 aNewBT.Hide(); 227 OKButton aTmp(this, WB_HIDE); 228 aOKBT.SetText( aTmp.GetText() ); 229 } 230 231 aEntryED.GrabFocus(); 232 } 233 234 /*-------------------------------------------------------------------- 235 Beschreibung: Controls neu initialisieren mit der aktuellen 236 Markierung 237 --------------------------------------------------------------------*/ 238 239 240 void SwIndexMarkDlg::InitControls() 241 { 242 DBG_ASSERT(pSh && pTOXMgr, "Shell nicht da?"); 243 // Inhalts-Verzeichnis 244 const SwTOXType* pType = pTOXMgr->GetTOXType(TOX_CONTENT, 0); 245 ASSERT(pType, "Kein Verzeichnistyp !!"); 246 String sTmpTypeSelection; 247 if(aTypeDCB.GetSelectEntryCount()) 248 sTmpTypeSelection = aTypeDCB.GetSelectEntry(); 249 aTypeDCB.Clear(); 250 aTypeDCB.InsertEntry(pType->GetTypeName()); 251 252 // Stichwort-Verzeichnis 253 pType = pTOXMgr->GetTOXType(TOX_INDEX, 0); 254 ASSERT(pType, "Kein Verzeichnistyp !!"); 255 aTypeDCB.InsertEntry(pType->GetTypeName()); 256 257 // Benutzerverzeichnisse 258 sal_uInt16 nCount = pSh->GetTOXTypeCount(TOX_USER); 259 sal_uInt16 i; 260 for( i = 0; i < nCount; ++i ) 261 aTypeDCB.InsertEntry( pSh->GetTOXType(TOX_USER, i)->GetTypeName() ); 262 263 // KeyWords Primary einlesen 264 SvStringsSort aArr; 265 nCount = pSh->GetTOIKeys( TOI_PRIMARY, aArr ); 266 for(i=0; i < nCount; ++i) 267 aKeyDCB.InsertEntry( *aArr[ i ] ); 268 269 // KeyWords Secondary einlesen 270 nCount = pSh->GetTOIKeys( TOI_SECONDARY, aArr ); 271 for(i=0; i < nCount; ++i) 272 aKey2DCB.InsertEntry( *aArr[ i ] ); 273 274 UpdateLanguageDependenciesForPhoneticReading(); 275 276 // Aktueller Eintrag 277 const SwTOXMark* pMark = pTOXMgr->GetCurTOXMark(); 278 if( pMark && !bNewMark) 279 { 280 // Controls-Handling 281 282 // nur wenn mehr als eins vorhanden 283 // wenn gleich landet es auf dem gleichen Eintrag 284 pSh->SttCrsrMove(); 285 286 const SwTOXMark* pMoveMark; 287 sal_Bool bShow = sal_False; 288 289 pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_PRV ); 290 if( pMoveMark != pMark ) 291 pSh->GotoTOXMark( *pMoveMark, TOX_NXT ), bShow = sal_True; 292 aPrevBT.Enable( pMoveMark != pMark ); 293 pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_NXT ); 294 if( pMoveMark != pMark ) 295 pSh->GotoTOXMark( *pMoveMark, TOX_PRV ), bShow = sal_True; 296 aNextBT.Enable( pMoveMark != pMark ); 297 if( bShow ) 298 { 299 aPrevBT.Show(); 300 aNextBT.Show(); 301 bShow = sal_False; 302 } 303 304 pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_SAME_PRV ); 305 if( pMoveMark != pMark ) 306 pSh->GotoTOXMark( *pMoveMark, TOX_SAME_NXT ), bShow = sal_True; 307 aPrevSameBT.Enable( pMoveMark != pMark ); 308 pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_SAME_NXT ); 309 if( pMoveMark != pMark ) 310 pSh->GotoTOXMark( *pMoveMark, TOX_SAME_PRV ), bShow = sal_True; 311 aNextSameBT.Enable( pMoveMark != pMark ); 312 if( bShow ) 313 { 314 aNextSameBT.Show(); 315 aPrevSameBT.Show(); 316 } 317 pSh->EndCrsrMove(); 318 319 aTypeFT.Show(); 320 321 aTypeDCB.Enable(sal_False); 322 aTypeFT.Enable(sal_False); 323 324 UpdateDialog(); 325 } 326 else 327 { // aktuelle Selektion (1.Element) anzeigen ???? 328 sal_uInt16 nCnt = pSh->GetCrsrCnt(); 329 if (nCnt < 2) 330 { 331 bSelected = !pSh->HasSelection(); 332 aOrgStr = pSh->GetView().GetSelectionTextParam(sal_True, sal_False); 333 aEntryED.SetText(aOrgStr); 334 335 //alle gleichen Eintraege aufzunehmen darf nur im Body und auch da nur 336 //bei vorhandener einfacher Selektion erlaubt werden 337 const sal_uInt16 nFrmType = pSh->GetFrmType(0,sal_True); 338 aApplyToAllCB.Show(); 339 aSearchCaseSensitiveCB.Show(); 340 aSearchCaseWordOnlyCB.Show(); 341 aApplyToAllCB.Enable(0 != aOrgStr.Len() && 342 0 == (nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER | FRMTYPE_FLY_ANY ))); 343 SearchTypeHdl(&aApplyToAllCB); 344 } 345 346 // Verzeichnistyp ist default 347 if( sTmpTypeSelection.Len() && 348 LISTBOX_ENTRY_NOTFOUND != aTypeDCB.GetEntryPos( sTmpTypeSelection ) ) 349 aTypeDCB.SelectEntry(sTmpTypeSelection); 350 else 351 aTypeDCB.SelectEntry(aTypeDCB.GetEntry(nTypePos)); 352 ModifyHdl(&aTypeDCB); 353 } 354 } 355 356 void SwIndexMarkDlg::UpdateLanguageDependenciesForPhoneticReading() 357 { 358 //no phonetic reading if no global cjk support 359 if( !xExtendedIndexEntrySupplier.is() ) 360 { 361 bIsPhoneticReadingEnabled = sal_False; 362 return; 363 } 364 bIsPhoneticReadingEnabled = sal_True; 365 366 //get the current language 367 if(!bNewMark) //if dialog is opened to iterate existing marks 368 { 369 ASSERT(pTOXMgr, "need TOXMgr") 370 if(!pTOXMgr) 371 return; 372 SwTOXMark* pMark = pTOXMgr->GetCurTOXMark(); 373 ASSERT(pMark, "need current SwTOXMark"); 374 if(!pMark) 375 return; 376 SwTxtTOXMark* pTxtTOXMark = pMark->GetTxtTOXMark(); 377 ASSERT(pTxtTOXMark, "need current SwTxtTOXMark"); 378 if(!pTxtTOXMark) 379 return; 380 const SwTxtNode* pTxtNode = pTxtTOXMark->GetpTxtNd(); 381 ASSERT(pTxtNode, "need current SwTxtNode"); 382 if(!pTxtNode) 383 return; 384 xub_StrLen nTextIndex = *pTxtTOXMark->GetStart(); 385 nLangForPhoneticReading = pTxtNode->GetLang( nTextIndex ); 386 } 387 else //if dialog is opened to create a new mark 388 { 389 sal_uInt16 nScriptType = pSh->GetScriptType(); 390 sal_uInt16 nWhich; 391 switch(nScriptType) 392 { 393 case SCRIPTTYPE_ASIAN: nWhich = RES_CHRATR_CJK_LANGUAGE; break; 394 case SCRIPTTYPE_COMPLEX:nWhich = RES_CHRATR_CTL_LANGUAGE; break; 395 //case SCRIPTTYPE_LATIN: 396 default:nWhich = RES_CHRATR_LANGUAGE; break; 397 } 398 SfxItemSet aLangSet(pSh->GetAttrPool(), nWhich, nWhich); 399 pSh->GetCurAttr(aLangSet); 400 nLangForPhoneticReading = ((const SvxLanguageItem&)aLangSet.Get(nWhich)).GetLanguage(); 401 } 402 403 /* 404 //enable phonetic reading dependent on the current language 405 { 406 lang::Locale aLocale( SvxCreateLocale( LanguageType( nLangForPhoneticReading ) ) ); 407 bIsPhoneticReadingEnabled = xExtendedIndexEntrySupplier->usePhoneticEntry( aLocale ); 408 } 409 */ 410 } 411 412 String SwIndexMarkDlg::GetDefaultPhoneticReading( const String& rText ) 413 { 414 if( !bIsPhoneticReadingEnabled ) 415 return aEmptyStr; 416 417 lang::Locale aLocale( SvxCreateLocale( LanguageType( nLangForPhoneticReading ) ) ); 418 return xExtendedIndexEntrySupplier->getPhoneticCandidate(rText, aLocale); 419 } 420 421 /* -----------------07.09.99 10:43------------------- 422 Change the content of aEntryED if text is selected 423 --------------------------------------------------*/ 424 425 void SwIndexMarkDlg::Activate() 426 { 427 // aktuelle Selektion (1.Element) anzeigen ???? 428 if(bNewMark) 429 { 430 sal_uInt16 nCnt = pSh->GetCrsrCnt(); 431 if (nCnt < 2) 432 { 433 bSelected = !pSh->HasSelection(); 434 aOrgStr = pSh->GetView().GetSelectionTextParam(sal_True, sal_False); 435 aEntryED.SetText(aOrgStr); 436 437 //alle gleichen Eintraege aufzunehmen darf nur im Body und auch da nur 438 //bei vorhandener einfacher Selektion erlaubt werden 439 const sal_uInt16 nFrmType = pSh->GetFrmType(0,sal_True); 440 aApplyToAllCB.Show(); 441 aSearchCaseSensitiveCB.Show(); 442 aSearchCaseWordOnlyCB.Show(); 443 aApplyToAllCB.Enable(0 != aOrgStr.Len() && 444 0 == (nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER | FRMTYPE_FLY_ANY ))); 445 SearchTypeHdl(&aApplyToAllCB); 446 } 447 ModifyHdl(&aTypeDCB); 448 } 449 } 450 451 /*-------------------------------------------------------------------- 452 Beschreibung: Ok-Button auswerten 453 --------------------------------------------------------------------*/ 454 void SwIndexMarkDlg::Apply() 455 { 456 InsertUpdate(); 457 if(bSelected) 458 pSh->ResetSelect(0, sal_False); 459 } 460 461 /*-------------------------------------------------------------------- 462 Beschreibung: Aenderungen uebernehmen 463 --------------------------------------------------------------------*/ 464 465 466 void SwIndexMarkDlg::InsertUpdate() 467 { 468 pSh->StartUndo(bDel ? UNDO_INDEX_ENTRY_DELETE : UNDO_INDEX_ENTRY_INSERT); 469 pSh->StartAllAction(); 470 471 SwRewriter aRewriter; 472 473 if( bNewMark ) 474 { 475 InsertMark(); 476 477 if ( pTOXMgr->GetCurTOXMark()) 478 aRewriter.AddRule(UNDO_ARG1, pTOXMgr->GetCurTOXMark()->GetText()); 479 } 480 else if( !pSh->HasReadonlySel() ) 481 { 482 if ( pTOXMgr->GetCurTOXMark()) 483 aRewriter.AddRule(UNDO_ARG1, 484 pTOXMgr->GetCurTOXMark()->GetText()); 485 486 if( bDel ) 487 pTOXMgr->DeleteTOXMark(); 488 else if( pTOXMgr->GetCurTOXMark() ) 489 UpdateMark(); 490 } 491 492 pSh->EndAllAction(); 493 pSh->EndUndo(bDel ? UNDO_INDEX_ENTRY_DELETE : UNDO_INDEX_ENTRY_INSERT); 494 495 if((nTypePos = aTypeDCB.GetEntryPos(aTypeDCB.GetSelectEntry())) == LISTBOX_ENTRY_NOTFOUND) 496 nTypePos = 0; 497 498 nKey1Pos = aKeyDCB.GetEntryPos(aKeyDCB.GetText()); 499 nKey2Pos = aKey2DCB.GetEntryPos(aKey2DCB.GetText()); 500 } 501 502 /*-------------------------------------------------------------------- 503 Beschreibung: Marke einfuegen 504 --------------------------------------------------------------------*/ 505 static void lcl_SelectSameStrings(SwWrtShell& rSh, sal_Bool bWordOnly, sal_Bool bCaseSensitive) 506 { 507 rSh.Push(); 508 509 SearchOptions aSearchOpt( 510 SearchAlgorithms_ABSOLUTE, 511 ( bWordOnly ? SearchFlags::NORM_WORD_ONLY : 0 ), 512 rSh.GetSelTxt(), OUString(), 513 SvxCreateLocale( GetAppLanguage() ), 514 0, 0, 0, 515 (bCaseSensitive 516 ? 0 517 : TransliterationModules_IGNORE_CASE) ); 518 519 rSh.ClearMark(); 520 sal_Bool bCancel; 521 522 //todo/mba: assuming that notes should not be searched 523 sal_Bool bSearchInNotes = sal_False; 524 rSh.Find( aSearchOpt, bSearchInNotes, DOCPOS_START, DOCPOS_END, bCancel, 525 (FindRanges)(FND_IN_SELALL|FND_IN_BODYONLY), sal_False ); 526 } 527 528 529 void SwIndexMarkDlg::InsertMark() 530 { 531 sal_uInt16 nPos = aTypeDCB.GetEntryPos(aTypeDCB.GetSelectEntry()); 532 TOXTypes eType = nPos == POS_CONTENT ? TOX_CONTENT : 533 nPos == POS_INDEX ? TOX_INDEX : TOX_USER; 534 535 SwTOXMarkDescription aDesc(eType); 536 537 sal_uInt16 nLevel = (sal_uInt16)aLevelED.Denormalize(aLevelED.GetValue()); 538 switch(nPos) 539 { 540 case POS_CONTENT : break; 541 case POS_INDEX: // Stichwortverzeichnismarke 542 { 543 UpdateKeyBoxes(); 544 String aPrim(aKeyDCB.GetText()); 545 String aSec(aKey2DCB.GetText()); 546 aDesc.SetPrimKey(aPrim); 547 aDesc.SetSecKey(aSec); 548 aDesc.SetMainEntry(aMainEntryCB.IsChecked()); 549 aDesc.SetPhoneticReadingOfAltStr(aPhoneticED0.GetText()); 550 aDesc.SetPhoneticReadingOfPrimKey(aPhoneticED1.GetText()); 551 aDesc.SetPhoneticReadingOfSecKey(aPhoneticED2.GetText()); 552 } 553 break; 554 default: // Userdefinedverz.-Marke 555 { 556 String aName(aTypeDCB.GetSelectEntry()); 557 aDesc.SetTOUName(aName); 558 } 559 } 560 if (aOrgStr != aEntryED.GetText()) 561 aDesc.SetAltStr(aEntryED.GetText()); 562 sal_Bool bApplyAll = aApplyToAllCB.IsChecked(); 563 sal_Bool bWordOnly = aSearchCaseWordOnlyCB.IsChecked(); 564 sal_Bool bCaseSensitive = aSearchCaseSensitiveCB.IsChecked(); 565 566 pSh->StartAllAction(); 567 // hier muessen alle gleichen Strings selektiert werden 568 // damit der Eintrag auf alle gleichen Strings angewandt wird 569 if(bApplyAll) 570 { 571 lcl_SelectSameStrings(*pSh, bWordOnly, bCaseSensitive); 572 } 573 aDesc.SetLevel(nLevel); 574 SwTOXMgr aMgr(pSh); 575 aMgr.InsertTOXMark(aDesc); 576 if(bApplyAll) 577 pSh->Pop(sal_False); 578 579 pSh->EndAllAction(); 580 } 581 582 /*-------------------------------------------------------------------- 583 Beschreibung: Marke Updaten 584 --------------------------------------------------------------------*/ 585 586 587 void SwIndexMarkDlg::UpdateMark() 588 { 589 String aAltText(aEntryED.GetText()); 590 String* pAltText = aOrgStr != aEntryED.GetText() ? &aAltText : 0; 591 //empty alternative texts are not allowed 592 if(pAltText && !pAltText->Len()) 593 return; 594 595 UpdateKeyBoxes(); 596 597 sal_uInt16 nPos = aTypeDCB.GetEntryPos(aTypeDCB.GetSelectEntry()); 598 TOXTypes eType = TOX_USER; 599 if(POS_CONTENT == nPos) 600 eType = TOX_CONTENT; 601 else if(POS_INDEX == nPos) 602 eType = TOX_INDEX; 603 604 SwTOXMarkDescription aDesc(eType); 605 aDesc.SetLevel( static_cast< int >(aLevelED.GetValue()) ); 606 if(pAltText) 607 aDesc.SetAltStr(*pAltText); 608 609 String aPrim(aKeyDCB.GetText()); 610 if(aPrim.Len()) 611 aDesc.SetPrimKey(aPrim); 612 String aSec(aKey2DCB.GetText()); 613 if(aSec.Len()) 614 aDesc.SetSecKey(aSec); 615 616 if(eType == TOX_INDEX) 617 { 618 aDesc.SetPhoneticReadingOfAltStr(aPhoneticED0.GetText()); 619 aDesc.SetPhoneticReadingOfPrimKey(aPhoneticED1.GetText()); 620 aDesc.SetPhoneticReadingOfSecKey(aPhoneticED2.GetText()); 621 } 622 aDesc.SetMainEntry(aMainEntryCB.IsVisible() && aMainEntryCB.IsChecked()); 623 pTOXMgr->UpdateTOXMark(aDesc); 624 } 625 626 /*-------------------------------------------------------------------- 627 Beschreibung: Neue Keys eintragen 628 --------------------------------------------------------------------*/ 629 630 631 void SwIndexMarkDlg::UpdateKeyBoxes() 632 { 633 String aKey(aKeyDCB.GetText()); 634 sal_uInt16 nPos = aKeyDCB.GetEntryPos(aKey); 635 636 if(nPos == LISTBOX_ENTRY_NOTFOUND && aKey.Len() > 0) 637 { // neuen Key erzeugen 638 aKeyDCB.InsertEntry(aKey); 639 } 640 641 aKey = aKey2DCB.GetText(); 642 nPos = aKey2DCB.GetEntryPos(aKey); 643 644 if(nPos == LISTBOX_ENTRY_NOTFOUND && aKey.Len() > 0) 645 { // neuen Key erzeugen 646 aKey2DCB.InsertEntry(aKey); 647 } 648 } 649 /* -----------------13.10.99 15:10------------------- 650 651 --------------------------------------------------*/ 652 class SwNewUserIdxDlg : public ModalDialog 653 { 654 OKButton aOKPB; 655 CancelButton aCancelPB; 656 HelpButton aHelpPB; 657 FixedLine aNameFL; 658 FixedText aNameFT; 659 Edit aNameED; 660 661 SwIndexMarkDlg* pDlg; 662 663 DECL_LINK( ModifyHdl, Edit*); 664 665 public: 666 SwNewUserIdxDlg(SwIndexMarkDlg* pParent) : 667 ModalDialog(pParent, SW_RES(DLG_NEW_USER_IDX)), 668 aOKPB(this, SW_RES( PB_OK )), 669 aCancelPB(this, SW_RES( PB_CANCEL )), 670 aHelpPB(this, SW_RES( PB_HELP )), 671 aNameFL(this, SW_RES( FL_NAME )), 672 aNameFT(this, SW_RES( FT_NAME )), 673 aNameED(this, SW_RES( ED_NAME )), 674 pDlg(pParent) 675 { 676 FreeResource(); 677 aNameED.SetModifyHdl(LINK(this, SwNewUserIdxDlg, ModifyHdl)); 678 aOKPB.Enable(sal_False); 679 aNameED.GrabFocus(); 680 } 681 682 virtual void Apply(); 683 String GetName(){return aNameED.GetText();} 684 }; 685 void SwNewUserIdxDlg::Apply() 686 { 687 } 688 689 IMPL_LINK( SwNewUserIdxDlg, ModifyHdl, Edit*, pEdit) 690 { 691 aOKPB.Enable(pEdit->GetText().Len() && !pDlg->IsTOXType(pEdit->GetText())); 692 return 0; 693 } 694 695 IMPL_LINK( SwIndexMarkDlg, NewUserIdxHdl, Button*, EMPTYARG) 696 { 697 SwNewUserIdxDlg* pDlg = new SwNewUserIdxDlg(this); 698 if(RET_OK == pDlg->Execute()) 699 { 700 String sNewName(pDlg->GetName()); 701 aTypeDCB.InsertEntry(sNewName); 702 aTypeDCB.SelectEntry(sNewName); 703 } 704 delete pDlg; 705 return 0; 706 } 707 /* -----------------------------17.01.00 12:18-------------------------------- 708 709 ---------------------------------------------------------------------------*/ 710 IMPL_LINK( SwIndexMarkDlg, SearchTypeHdl, CheckBox*, pBox) 711 { 712 sal_Bool bEnable = pBox->IsChecked() && pBox->IsEnabled(); 713 aSearchCaseWordOnlyCB.Enable(bEnable); 714 aSearchCaseSensitiveCB.Enable(bEnable); 715 return 0; 716 } 717 /* -----------------07.09.99 10:30------------------- 718 719 --------------------------------------------------*/ 720 IMPL_LINK( SwIndexMarkDlg, InsertHdl, Button *, pButton ) 721 { 722 Apply(); 723 //close the dialog if only one entry is available 724 if(!bNewMark && !aPrevBT.IsVisible() && !aNextBT.IsVisible()) 725 CloseHdl(pButton); 726 return 0; 727 } 728 /* -----------------07.09.99 10:29------------------- 729 730 --------------------------------------------------*/ 731 IMPL_LINK( SwIndexMarkDlg, CloseHdl, Button *, EMPTYARG ) 732 { 733 if(bNewMark) 734 { 735 sal_uInt16 nSlot = FN_INSERT_IDX_ENTRY_DLG; 736 SfxViewFrame::Current()->GetDispatcher()->Execute(nSlot, 737 SFX_CALLMODE_ASYNCHRON|SFX_CALLMODE_RECORD); 738 } 739 else 740 { 741 ((SwIndexMarkModalDlg*)GetParent())->EndDialog(RET_CANCEL); 742 } 743 return 0; 744 } 745 /*-------------------------------------------------------------------- 746 Beschreibung: VerzeichnisTyp auswaehlen nur bei Einfuegen 747 --------------------------------------------------------------------*/ 748 IMPL_LINK( SwIndexMarkDlg, ModifyHdl, ListBox *, pBox ) 749 { 750 if(&aTypeDCB == pBox) 751 { 752 // Verzeichnistyp setzen 753 sal_uInt16 nPos = aTypeDCB.GetEntryPos(aTypeDCB.GetSelectEntry()); 754 sal_Bool bLevelEnable = sal_False, 755 bKeyEnable = sal_False, 756 bSetKey2 = sal_False, 757 bKey2Enable = sal_False, 758 bEntryHasText = sal_False, 759 bKey1HasText = sal_False, 760 bKey2HasText = sal_False; 761 if(nPos == POS_INDEX) 762 { 763 if(aEntryED.GetText().Len()) 764 bEntryHasText = sal_True; 765 aPhoneticED0.SetText(GetDefaultPhoneticReading(aEntryED.GetText())); 766 767 bKeyEnable = sal_True; 768 aKeyDCB.SetText(aKeyDCB.GetEntry(nKey1Pos)); 769 aPhoneticED1.SetText(GetDefaultPhoneticReading(aKeyDCB.GetText())); 770 if(aKeyDCB.GetText().Len() > 0) 771 { 772 bKey1HasText = bSetKey2 = bKey2Enable = sal_True; 773 aKey2DCB.SetText(aKey2DCB.GetEntry(nKey2Pos)); 774 aPhoneticED2.SetText(GetDefaultPhoneticReading(aKey2DCB.GetText())); 775 if(aKey2DCB.GetText().Len()) 776 bKey2HasText = sal_True; 777 } 778 } 779 else 780 { 781 bLevelEnable = sal_True; 782 aLevelED.SetMax(MAXLEVEL); 783 aLevelED.SetValue(aLevelED.Normalize(0)); 784 bSetKey2 = sal_True; 785 } 786 aLevelFT.Show(bLevelEnable); 787 aLevelED.Show(bLevelEnable); 788 aMainEntryCB.Show(nPos == POS_INDEX); 789 790 aKeyFT.Enable(bKeyEnable); 791 aKeyDCB.Enable(bKeyEnable); 792 if ( bSetKey2 ) 793 { 794 aKey2DCB.Enable(bKey2Enable); 795 aKey2FT.Enable(bKey2Enable); 796 } 797 aPhoneticFT0.Enable(bKeyEnable&&bEntryHasText&&bIsPhoneticReadingEnabled); 798 aPhoneticED0.Enable(bKeyEnable&&bEntryHasText&&bIsPhoneticReadingEnabled); 799 aPhoneticFT1.Enable(bKeyEnable&&bKey1HasText&&bIsPhoneticReadingEnabled); 800 aPhoneticED1.Enable(bKeyEnable&&bKey1HasText&&bIsPhoneticReadingEnabled); 801 aPhoneticFT2.Enable(bKeyEnable&&bKey2HasText&&bIsPhoneticReadingEnabled); 802 aPhoneticED2.Enable(bKeyEnable&&bKey2HasText&&bIsPhoneticReadingEnabled); 803 } 804 else //aEntryED !!aEntryED is not a ListBox but a Edit 805 { 806 sal_Bool bHasText = (aEntryED.GetText().Len()>0); 807 if(!bHasText) 808 { 809 aPhoneticED0.SetText(aEmptyStr); 810 bPhoneticED0_ChangedByUser = sal_False; 811 } 812 else if(!bPhoneticED0_ChangedByUser) 813 aPhoneticED0.SetText(GetDefaultPhoneticReading(aEntryED.GetText())); 814 815 aPhoneticFT0.Enable(bHasText&&bIsPhoneticReadingEnabled); 816 aPhoneticED0.Enable(bHasText&&bIsPhoneticReadingEnabled); 817 } 818 aOKBT.Enable(!pSh->HasReadonlySel() && 819 (aEntryED.GetText().Len() || pSh->GetCrsrCnt(sal_False))); 820 return 0; 821 } 822 823 /*-------------------------------------------------------------------- 824 Beschreibung: 825 --------------------------------------------------------------------*/ 826 827 828 IMPL_LINK_INLINE_START( SwIndexMarkDlg, NextHdl, Button *, EMPTYARG ) 829 { 830 InsertUpdate(); 831 pTOXMgr->NextTOXMark(); 832 UpdateDialog(); 833 return 0; 834 } 835 IMPL_LINK_INLINE_END( SwIndexMarkDlg, NextHdl, Button *, EMPTYARG ) 836 837 838 IMPL_LINK_INLINE_START( SwIndexMarkDlg, NextSameHdl, Button *, EMPTYARG ) 839 { 840 InsertUpdate(); 841 pTOXMgr->NextTOXMark(sal_True); 842 UpdateDialog(); 843 return 0; 844 } 845 IMPL_LINK_INLINE_END( SwIndexMarkDlg, NextSameHdl, Button *, EMPTYARG ) 846 847 848 IMPL_LINK_INLINE_START( SwIndexMarkDlg, PrevHdl, Button *, EMPTYARG ) 849 { 850 InsertUpdate(); 851 pTOXMgr->PrevTOXMark(); 852 UpdateDialog(); 853 return 0; 854 } 855 IMPL_LINK_INLINE_END( SwIndexMarkDlg, PrevHdl, Button *, EMPTYARG ) 856 857 858 IMPL_LINK_INLINE_START( SwIndexMarkDlg, PrevSameHdl, Button *, EMPTYARG ) 859 { 860 InsertUpdate(); 861 pTOXMgr->PrevTOXMark(sal_True); 862 UpdateDialog(); 863 864 return 0; 865 } 866 IMPL_LINK_INLINE_END( SwIndexMarkDlg, PrevSameHdl, Button *, EMPTYARG ) 867 868 869 IMPL_LINK( SwIndexMarkDlg, DelHdl, Button *, EMPTYARG ) 870 { 871 bDel = sal_True; 872 InsertUpdate(); 873 bDel = sal_False; 874 875 if(pTOXMgr->GetCurTOXMark()) 876 UpdateDialog(); 877 else 878 { 879 CloseHdl(&aCancelBT); 880 SfxViewFrame::Current()->GetBindings().Invalidate(FN_EDIT_IDX_ENTRY_DLG); 881 } 882 return 0; 883 } 884 885 /*-------------------------------------------------------------------- 886 Beschreibung: Dialoganzeige erneuern 887 --------------------------------------------------------------------*/ 888 889 890 void SwIndexMarkDlg::UpdateDialog() 891 { 892 DBG_ASSERT(pSh && pTOXMgr, "Shell nicht da?"); 893 SwTOXMark* pMark = pTOXMgr->GetCurTOXMark(); 894 ASSERT(pMark, "Keine aktuelle Markierung"); 895 if(!pMark) 896 return; 897 898 ViewShell::SetCareWin( GetParent() ); 899 900 aOrgStr = pMark->GetText(); 901 aEntryED.SetText(aOrgStr); 902 903 // Verzeichnistyp setzen 904 sal_Bool bLevelEnable = sal_True, 905 bKeyEnable = sal_False, 906 bKey2Enable = sal_False, 907 bEntryHasText = sal_False, 908 bKey1HasText = sal_False, 909 bKey2HasText = sal_False; 910 911 TOXTypes eCurType = pMark->GetTOXType()->GetType(); 912 if(TOX_INDEX == eCurType) 913 { 914 bLevelEnable = sal_False; 915 bKeyEnable = sal_True; 916 bKey1HasText = bKey2Enable = 0 != pMark->GetPrimaryKey().Len(); 917 bKey2HasText = 0 != pMark->GetSecondaryKey().Len(); 918 bEntryHasText = 0 != pMark->GetText().Len(); 919 aKeyDCB.SetText( pMark->GetPrimaryKey() ); 920 aKey2DCB.SetText( pMark->GetSecondaryKey() ); 921 aPhoneticED0.SetText( pMark->GetTextReading() ); 922 aPhoneticED1.SetText( pMark->GetPrimaryKeyReading() ); 923 aPhoneticED2.SetText( pMark->GetSecondaryKeyReading() ); 924 aMainEntryCB.Check(pMark->IsMainEntry()); 925 } 926 else if(TOX_CONTENT == eCurType || TOX_USER == eCurType) 927 { 928 aLevelED.SetValue(aLevelED.Normalize(pMark->GetLevel())); 929 } 930 aKeyFT.Enable(bKeyEnable); 931 aKeyDCB.Enable(bKeyEnable); 932 aLevelED.SetMax(MAXLEVEL); 933 aLevelFT.Show(bLevelEnable); 934 aLevelED.Show(bLevelEnable); 935 aMainEntryCB.Show(!bLevelEnable); 936 aKey2FT.Enable(bKey2Enable); 937 aKey2DCB.Enable(bKey2Enable); 938 939 UpdateLanguageDependenciesForPhoneticReading(); 940 aPhoneticFT0.Enable(bKeyEnable&&bEntryHasText&&bIsPhoneticReadingEnabled); 941 aPhoneticED0.Enable(bKeyEnable&&bEntryHasText&&bIsPhoneticReadingEnabled); 942 aPhoneticFT1.Enable(bKeyEnable&&bKey1HasText&&bIsPhoneticReadingEnabled); 943 aPhoneticED1.Enable(bKeyEnable&&bKey1HasText&&bIsPhoneticReadingEnabled); 944 aPhoneticFT2.Enable(bKeyEnable&&bKey2HasText&&bIsPhoneticReadingEnabled); 945 aPhoneticED2.Enable(bKeyEnable&&bKey2HasText&&bIsPhoneticReadingEnabled); 946 947 // Verzeichnis-Typ setzen 948 aTypeDCB.SelectEntry(pMark->GetTOXType()->GetTypeName()); 949 950 // Next - Prev - Buttons setzen 951 pSh->SttCrsrMove(); 952 if( aPrevBT.IsVisible() ) 953 { 954 const SwTOXMark* pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_PRV ); 955 if( pMoveMark != pMark ) 956 pSh->GotoTOXMark( *pMoveMark, TOX_NXT ); 957 aPrevBT.Enable( pMoveMark != pMark ); 958 pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_NXT ); 959 if( pMoveMark != pMark ) 960 pSh->GotoTOXMark( *pMoveMark, TOX_PRV ); 961 aNextBT.Enable( pMoveMark != pMark ); 962 } 963 964 if( aPrevSameBT.IsVisible() ) 965 { 966 const SwTOXMark* pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_SAME_PRV ); 967 if( pMoveMark != pMark ) 968 pSh->GotoTOXMark( *pMoveMark, TOX_SAME_NXT ); 969 aPrevSameBT.Enable( pMoveMark != pMark ); 970 pMoveMark = &pSh->GotoTOXMark( *pMark, TOX_SAME_NXT ); 971 if( pMoveMark != pMark ) 972 pSh->GotoTOXMark( *pMoveMark, TOX_SAME_PRV ); 973 aNextSameBT.Enable( pMoveMark != pMark ); 974 } 975 976 sal_Bool bEnable = !pSh->HasReadonlySel(); 977 aOKBT.Enable( bEnable ); 978 aDelBT.Enable( bEnable ); 979 aEntryED.SetReadOnly( !bEnable ); 980 aLevelED.SetReadOnly( !bEnable ); 981 aKeyDCB.SetReadOnly( !bEnable ); 982 aKey2DCB.SetReadOnly( !bEnable ); 983 984 pSh->SelectTxtAttr( RES_TXTATR_TOXMARK, pMark->GetTxtTOXMark() ); 985 // we need the point at the start of the attribut 986 pSh->SwapPam(); 987 988 pSh->EndCrsrMove(); 989 } 990 991 /*-------------------------------------------------------------------- 992 Remind wether the edit boxes for Phonetic reading are changed manually 993 --------------------------------------------------------------------*/ 994 995 IMPL_LINK( SwIndexMarkDlg, PhoneticEDModifyHdl, Edit *, pEdit ) 996 { 997 if(&aPhoneticED0 == pEdit) 998 { 999 bPhoneticED0_ChangedByUser = pEdit->GetText().Len()>0; 1000 } 1001 else if(&aPhoneticED1 == pEdit) 1002 { 1003 bPhoneticED1_ChangedByUser = pEdit->GetText().Len()>0; 1004 } 1005 else if(&aPhoneticED2 == pEdit) 1006 { 1007 bPhoneticED2_ChangedByUser = pEdit->GetText().Len()>0; 1008 } 1009 return 0; 1010 } 1011 1012 /*-------------------------------------------------------------------- 1013 Beschreibung: Enable Disable des 2. Schluessels 1014 --------------------------------------------------------------------*/ 1015 1016 IMPL_LINK( SwIndexMarkDlg, KeyDCBModifyHdl, ComboBox *, pBox ) 1017 { 1018 if(&aKeyDCB == pBox) 1019 { 1020 sal_Bool bEnable = pBox->GetText().Len() > 0; 1021 if(!bEnable) 1022 { 1023 aKey2DCB.SetText(aEmptyStr); 1024 aPhoneticED1.SetText(aEmptyStr); 1025 aPhoneticED2.SetText(aEmptyStr); 1026 bPhoneticED1_ChangedByUser = sal_False; 1027 bPhoneticED2_ChangedByUser = sal_False; 1028 } 1029 else 1030 { 1031 if(pBox->IsInDropDown()) 1032 { 1033 //reset bPhoneticED1_ChangedByUser if a completly new string is selected 1034 bPhoneticED1_ChangedByUser = sal_False; 1035 } 1036 if(!bPhoneticED1_ChangedByUser) 1037 aPhoneticED1.SetText(GetDefaultPhoneticReading(pBox->GetText())); 1038 } 1039 aKey2DCB.Enable(bEnable); 1040 aKey2FT.Enable(bEnable); 1041 } 1042 else if(&aKey2DCB == pBox) 1043 { 1044 if(!(pBox->GetText().Len()>0)) 1045 { 1046 aPhoneticED2.SetText(aEmptyStr); 1047 bPhoneticED2_ChangedByUser = sal_False; 1048 } 1049 else 1050 { 1051 if(pBox->IsInDropDown()) 1052 { 1053 //reset bPhoneticED1_ChangedByUser if a completly new string is selected 1054 bPhoneticED2_ChangedByUser = sal_False; 1055 } 1056 if(!bPhoneticED2_ChangedByUser) 1057 aPhoneticED2.SetText(GetDefaultPhoneticReading(pBox->GetText())); 1058 } 1059 } 1060 sal_Bool bKey1HasText = (0 != aKeyDCB.GetText().Len()); 1061 sal_Bool bKey2HasText = (0 != aKey2DCB.GetText().Len()); 1062 1063 aPhoneticFT1.Enable(bKey1HasText&&bIsPhoneticReadingEnabled); 1064 aPhoneticED1.Enable(bKey1HasText&bIsPhoneticReadingEnabled); 1065 aPhoneticFT2.Enable(bKey2HasText&bIsPhoneticReadingEnabled); 1066 aPhoneticED2.Enable(bKey2HasText&bIsPhoneticReadingEnabled); 1067 1068 return 0; 1069 } 1070 1071 /*-----------------25.02.94 21:19------------------- 1072 dtor ueberladen 1073 --------------------------------------------------*/ 1074 1075 1076 SwIndexMarkDlg::~SwIndexMarkDlg() 1077 { 1078 delete pTOXMgr; 1079 ViewShell::SetCareWin( 0 ); 1080 } 1081 /* -----------------07.09.99 08:41------------------- 1082 1083 --------------------------------------------------*/ 1084 void SwIndexMarkDlg::ReInitDlg(SwWrtShell& rWrtShell, SwTOXMark* pCurTOXMark) 1085 { 1086 pSh = &rWrtShell; 1087 delete pTOXMgr; 1088 pTOXMgr = new SwTOXMgr(pSh); 1089 if(pCurTOXMark) 1090 { 1091 for(sal_uInt16 i = 0; i < pTOXMgr->GetTOXMarkCount(); i++) 1092 if(pTOXMgr->GetTOXMark(i) == pCurTOXMark) 1093 { 1094 pTOXMgr->SetCurTOXMark(i); 1095 break; 1096 } 1097 } 1098 InitControls(); 1099 } 1100 /* -----------------06.10.99 10:00------------------- 1101 1102 --------------------------------------------------*/ 1103 SwIndexMarkFloatDlg::SwIndexMarkFloatDlg(SfxBindings* _pBindings, 1104 SfxChildWindow* pChild, 1105 Window *pParent, 1106 SfxChildWinInfo* pInfo, 1107 sal_Bool bNew) : 1108 SfxModelessDialog(_pBindings, pChild, pParent, SvtCJKOptions().IsCJKFontEnabled()?SW_RES(DLG_INSIDXMARK_CJK):SW_RES(DLG_INSIDXMARK)), 1109 aDlg(this, bNew, SW_RES(WIN_DLG), SvtCJKOptions().IsCJKFontEnabled()?DLG_INSIDXMARK_CJK:DLG_INSIDXMARK, *::GetActiveWrtShell()) 1110 { 1111 FreeResource(); 1112 aDlg.ReInitDlg(*::GetActiveWrtShell()); 1113 Initialize(pInfo); 1114 } 1115 /* -----------------06.10.99 10:27------------------- 1116 1117 --------------------------------------------------*/ 1118 void SwIndexMarkFloatDlg::Activate() 1119 { 1120 SfxModelessDialog::Activate(); 1121 aDlg.Activate(); 1122 } 1123 1124 void SwIndexMarkFloatDlg::ReInitDlg(SwWrtShell& rWrtShell) 1125 { 1126 aDlg.ReInitDlg( rWrtShell ); 1127 } 1128 1129 /* -----------------06.10.99 10:35------------------- 1130 1131 --------------------------------------------------*/ 1132 SwIndexMarkModalDlg::SwIndexMarkModalDlg(Window *pParent, SwWrtShell& rSh, SwTOXMark* pCurTOXMark) : 1133 SvxStandardDialog(pParent, SvtCJKOptions().IsCJKFontEnabled()?SW_RES(DLG_EDIT_IDXMARK_CJK):SW_RES(DLG_EDIT_IDXMARK)), 1134 aDlg(this, sal_False, SW_RES(WIN_DLG), SvtCJKOptions().IsCJKFontEnabled()?DLG_EDIT_IDXMARK_CJK:DLG_EDIT_IDXMARK, rSh) 1135 { 1136 FreeResource(); 1137 aDlg.ReInitDlg(rSh, pCurTOXMark); 1138 } 1139 /* -----------------06.10.99 10:46------------------- 1140 1141 --------------------------------------------------*/ 1142 void SwIndexMarkModalDlg::Apply() 1143 { 1144 aDlg.Apply(); 1145 } 1146 /* -----------------16.09.99 14:19------------------- 1147 1148 --------------------------------------------------*/ 1149 class SwCreateAuthEntryDlg_Impl : public ModalDialog 1150 { 1151 FixedLine aEntriesFL; 1152 1153 FixedText* pFixedTexts[AUTH_FIELD_END]; 1154 ListBox* pTypeListBox; 1155 ComboBox* pIdentifierBox; 1156 Edit* pEdits[AUTH_FIELD_END]; 1157 1158 OKButton aOKBT; 1159 CancelButton aCancelBT; 1160 HelpButton aHelpBT; 1161 1162 Link aShortNameCheckLink; 1163 1164 SwWrtShell& rWrtSh; 1165 1166 sal_Bool m_bNewEntryMode; 1167 sal_Bool m_bNameAllowed; 1168 1169 DECL_LINK(IdentifierHdl, ComboBox*); 1170 DECL_LINK(ShortNameHdl, Edit*); 1171 DECL_LINK(EnableHdl, ListBox* pBox); 1172 1173 public: 1174 SwCreateAuthEntryDlg_Impl(Window* pParent, 1175 const String pFields[], 1176 SwWrtShell& rSh, 1177 sal_Bool bNewEntry, 1178 sal_Bool bCreate); 1179 ~SwCreateAuthEntryDlg_Impl(); 1180 1181 String GetEntryText(ToxAuthorityField eField) const; 1182 1183 void SetCheckNameHdl(const Link& rLink) {aShortNameCheckLink = rLink;} 1184 1185 }; 1186 /*-- 15.09.99 08:43:24--------------------------------------------------- 1187 1188 -----------------------------------------------------------------------*/ 1189 struct TextInfo 1190 { 1191 sal_uInt16 nToxField; 1192 const char* pHelpId; 1193 }; 1194 1195 static const TextInfo aTextInfoArr[] = 1196 { 1197 {AUTH_FIELD_IDENTIFIER, HID_AUTH_FIELD_IDENTIFIER }, 1198 {AUTH_FIELD_AUTHORITY_TYPE, HID_AUTH_FIELD_AUTHORITY_TYPE }, 1199 {AUTH_FIELD_AUTHOR, HID_AUTH_FIELD_AUTHOR }, 1200 {AUTH_FIELD_TITLE, HID_AUTH_FIELD_TITLE }, 1201 {AUTH_FIELD_YEAR, HID_AUTH_FIELD_YEAR }, 1202 {AUTH_FIELD_PUBLISHER, HID_AUTH_FIELD_PUBLISHER }, 1203 {AUTH_FIELD_ADDRESS, HID_AUTH_FIELD_ADDRESS }, 1204 {AUTH_FIELD_ISBN, HID_AUTH_FIELD_ISBN }, 1205 {AUTH_FIELD_CHAPTER, HID_AUTH_FIELD_CHAPTER }, 1206 {AUTH_FIELD_PAGES, HID_AUTH_FIELD_PAGES }, 1207 {AUTH_FIELD_EDITOR, HID_AUTH_FIELD_EDITOR }, 1208 {AUTH_FIELD_EDITION, HID_AUTH_FIELD_EDITION }, 1209 {AUTH_FIELD_BOOKTITLE, HID_AUTH_FIELD_BOOKTITLE }, 1210 {AUTH_FIELD_VOLUME, HID_AUTH_FIELD_VOLUME }, 1211 {AUTH_FIELD_HOWPUBLISHED, HID_AUTH_FIELD_HOWPUBLISHED }, 1212 {AUTH_FIELD_ORGANIZATIONS, HID_AUTH_FIELD_ORGANIZATIONS }, 1213 {AUTH_FIELD_INSTITUTION, HID_AUTH_FIELD_INSTITUTION }, 1214 {AUTH_FIELD_SCHOOL, HID_AUTH_FIELD_SCHOOL }, 1215 {AUTH_FIELD_REPORT_TYPE, HID_AUTH_FIELD_REPORT_TYPE }, 1216 {AUTH_FIELD_MONTH, HID_AUTH_FIELD_MONTH }, 1217 {AUTH_FIELD_JOURNAL, HID_AUTH_FIELD_JOURNAL }, 1218 {AUTH_FIELD_NUMBER, HID_AUTH_FIELD_NUMBER }, 1219 {AUTH_FIELD_SERIES, HID_AUTH_FIELD_SERIES }, 1220 {AUTH_FIELD_ANNOTE, HID_AUTH_FIELD_ANNOTE }, 1221 {AUTH_FIELD_NOTE, HID_AUTH_FIELD_NOTE }, 1222 {AUTH_FIELD_URL, HID_AUTH_FIELD_URL }, 1223 {AUTH_FIELD_CUSTOM1, HID_AUTH_FIELD_CUSTOM1 }, 1224 {AUTH_FIELD_CUSTOM2, HID_AUTH_FIELD_CUSTOM2 }, 1225 {AUTH_FIELD_CUSTOM3, HID_AUTH_FIELD_CUSTOM3 }, 1226 {AUTH_FIELD_CUSTOM4, HID_AUTH_FIELD_CUSTOM4 }, 1227 {AUTH_FIELD_CUSTOM5, HID_AUTH_FIELD_CUSTOM5 } 1228 }; 1229 1230 sal_Bool SwAuthMarkDlg::bIsFromComponent = sal_True; 1231 1232 SwAuthMarkDlg::SwAuthMarkDlg( Window *pParent, 1233 const ResId& rResId, 1234 sal_Bool bNewDlg) : 1235 Window(pParent, rResId), 1236 aFromComponentRB( this, ResId(RB_FROMCOMPONENT, *rResId.GetResMgr() )), 1237 aFromDocContentRB( this, ResId(RB_FROMDOCCONTENT, *rResId.GetResMgr() )), 1238 1239 aAuthorFT( this, ResId(FT_AUTHOR, *rResId.GetResMgr() )), 1240 aAuthorFI( this, ResId(FI_AUTHOR, *rResId.GetResMgr() )), 1241 aTitleFT( this, ResId(FT_TITLE, *rResId.GetResMgr() )), 1242 aTitleFI( this, ResId(FI_TITLE, *rResId.GetResMgr() )), 1243 aEntryFT( this, ResId(FT_ENTRY, *rResId.GetResMgr() )), 1244 aEntryED( this, ResId(ED_ENTRY, *rResId.GetResMgr() )), 1245 aEntryLB( this, ResId(LB_ENTRY, *rResId.GetResMgr() )), 1246 1247 aEntryFL( this, ResId(FL_ENTRY, *rResId.GetResMgr() )), 1248 1249 aOKBT( this, ResId(PB_OK, *rResId.GetResMgr() )), 1250 aCancelBT( this, ResId(PB_CANCEL, *rResId.GetResMgr() )), 1251 aHelpBT( this, ResId(PB_HELP, *rResId.GetResMgr() )), 1252 aCreateEntryPB(this,ResId(PB_CREATEENTRY, *rResId.GetResMgr())), 1253 aEditEntryPB(this, ResId(PB_EDITENTRY, *rResId.GetResMgr())), 1254 1255 sChangeST( ResId(ST_CHANGE, *rResId.GetResMgr())), 1256 bNewEntry(bNewDlg), 1257 bBibAccessInitialized(sal_False), 1258 1259 pSh(0) 1260 { 1261 SetStyle(GetStyle()|WB_DIALOGCONTROL); 1262 FreeResource(); 1263 1264 aFromComponentRB.SetHelpId(HID_AUTH_MARK_DLG_FROM_COMP_RB); 1265 aFromDocContentRB.SetHelpId(HID_AUTH_MARK_DLG_FROM_DOC_RB ); 1266 aEntryED.SetHelpId(HID_AUTH_MARK_DLG_ID_LISTBOX ); 1267 aEntryLB.SetHelpId(HID_AUTH_MARK_DLG_ID_LISTBOX ); 1268 1269 aFromComponentRB.Show(bNewEntry); 1270 aFromDocContentRB.Show(bNewEntry); 1271 aFromComponentRB.Check(bIsFromComponent); 1272 aFromDocContentRB.Check(!bIsFromComponent); 1273 1274 aOKBT .SetHelpId(HID_INSERT_AUTH_MRK_OK ); 1275 aCancelBT .SetHelpId(HID_INSERT_AUTH_MRK_CLOSE); 1276 aEntryED .SetHelpId(HID_INSERT_AUTH_MRK_ENTRY ); 1277 aCreateEntryPB .SetHelpId(HID_INSERT_AUTH_MRK_CREATE_ENTRY ); 1278 aEditEntryPB .SetHelpId(HID_INSERT_AUTH_MRK_EDIT_ENTRY ); 1279 1280 aOKBT.SetClickHdl(LINK(this,SwAuthMarkDlg, InsertHdl)); 1281 aCancelBT.SetClickHdl(LINK(this,SwAuthMarkDlg, CloseHdl)); 1282 aCreateEntryPB.SetClickHdl(LINK(this,SwAuthMarkDlg, CreateEntryHdl)); 1283 aEditEntryPB.SetClickHdl(LINK(this,SwAuthMarkDlg, CreateEntryHdl)); 1284 aFromComponentRB.SetClickHdl(LINK(this,SwAuthMarkDlg, ChangeSourceHdl)); 1285 aFromDocContentRB.SetClickHdl(LINK(this,SwAuthMarkDlg, ChangeSourceHdl)); 1286 aEntryED.SetModifyHdl(LINK(this,SwAuthMarkDlg, EditModifyHdl)); 1287 1288 GetParent()->SetText(String(SW_RES( 1289 bNewEntry ? STR_AUTHMRK_INSERT : STR_AUTHMRK_EDIT))); 1290 aEntryED.Show(!bNewEntry); 1291 aEntryLB.Show(bNewEntry); 1292 if(!bNewEntry) 1293 { 1294 aOKBT.SetText(sChangeST); 1295 } 1296 else 1297 { 1298 aEntryLB.SetSelectHdl(LINK(this, SwAuthMarkDlg, CompEntryHdl)); 1299 } 1300 } 1301 /*-- 15.09.99 08:43:25--------------------------------------------------- 1302 1303 -----------------------------------------------------------------------*/ 1304 SwAuthMarkDlg::~SwAuthMarkDlg() 1305 { 1306 } 1307 /*-- 15.09.99 08:43:25--------------------------------------------------- 1308 1309 -----------------------------------------------------------------------*/ 1310 void SwAuthMarkDlg::ReInitDlg(SwWrtShell& rWrtShell) 1311 { 1312 pSh = &rWrtShell; 1313 InitControls(); 1314 } 1315 /* -----------------15.09.99 08:57------------------- 1316 1317 --------------------------------------------------*/ 1318 IMPL_LINK( SwAuthMarkDlg, CloseHdl, PushButton *, EMPTYARG ) 1319 { 1320 if(bNewEntry) 1321 { 1322 sal_uInt16 nSlot = FN_INSERT_AUTH_ENTRY_DLG; 1323 SfxViewFrame::Current()->GetDispatcher()->Execute(nSlot, 1324 SFX_CALLMODE_ASYNCHRON|SFX_CALLMODE_RECORD); 1325 } 1326 else 1327 { 1328 ((SwAuthMarkModalDlg*)GetParent())->EndDialog(RET_CANCEL); 1329 } 1330 return 0; 1331 } 1332 /* -----------------06.12.99 13:54------------------- 1333 1334 --------------------------------------------------*/ 1335 static String lcl_FindColumnEntry(const beans::PropertyValue* pFields, sal_Int32 nLen, const String& rColumnTitle) 1336 { 1337 String sRet; 1338 OUString uColumnTitle = rColumnTitle; 1339 for(sal_uInt16 i = 0; i < nLen; i++) 1340 { 1341 OUString uTmp; 1342 if(pFields[i].Name == uColumnTitle && 1343 (pFields[i].Value >>= uTmp)) 1344 { 1345 sRet = String(uTmp); 1346 break; 1347 } 1348 } 1349 return sRet; 1350 } 1351 /* -----------------------------07.12.99 15:39-------------------------------- 1352 1353 ---------------------------------------------------------------------------*/ 1354 IMPL_LINK( SwAuthMarkDlg, CompEntryHdl, ListBox*, pBox) 1355 { 1356 String sEntry(pBox->GetSelectEntry()); 1357 if(bIsFromComponent) 1358 { 1359 if(xBibAccess.is() && sEntry.Len()) 1360 { 1361 OUString uEntry(sEntry); 1362 if(xBibAccess->hasByName(uEntry)) 1363 { 1364 uno::Any aEntry(xBibAccess->getByName(uEntry)); 1365 uno::Sequence<beans::PropertyValue> aFieldProps; 1366 if(aEntry >>= aFieldProps) 1367 { 1368 const beans::PropertyValue* pProps = aFieldProps.getConstArray(); 1369 for(sal_uInt16 i = 0; i < AUTH_FIELD_END && i < aFieldProps.getLength(); i++) 1370 { 1371 m_sFields[i] = lcl_FindColumnEntry( 1372 pProps, aFieldProps.getLength(), m_sColumnTitles[i]); 1373 } 1374 } 1375 } 1376 } 1377 } 1378 else 1379 { 1380 if(sEntry.Len()) 1381 { 1382 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) 1383 pSh->GetFldType(RES_AUTHORITY, aEmptyStr); 1384 const SwAuthEntry* pEntry = pFType ? pFType->GetEntryByIdentifier(sEntry) : 0; 1385 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1386 m_sFields[i] = pEntry ? 1387 pEntry->GetAuthorField((ToxAuthorityField)i) : aEmptyStr; 1388 } 1389 } 1390 if(!pBox->GetSelectEntry().Len()) 1391 { 1392 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1393 m_sFields[i] = aEmptyStr; 1394 } 1395 aAuthorFI.SetText(m_sFields[AUTH_FIELD_AUTHOR]); 1396 aTitleFI.SetText(m_sFields[AUTH_FIELD_TITLE]); 1397 return 0; 1398 } 1399 1400 /* -----------------15.09.99 08:57------------------- 1401 1402 --------------------------------------------------*/ 1403 IMPL_LINK( SwAuthMarkDlg, InsertHdl, PushButton *, EMPTYARG ) 1404 { 1405 //insert or update the SwAuthorityField... 1406 if(pSh) 1407 { 1408 sal_Bool bDifferent = sal_False; 1409 DBG_ASSERT(m_sFields[AUTH_FIELD_IDENTIFIER].Len() , "No Id is set!"); 1410 DBG_ASSERT(m_sFields[AUTH_FIELD_AUTHORITY_TYPE].Len() , "No authority type is set!"); 1411 //check if the entry already exists with different content 1412 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) 1413 pSh->GetFldType(RES_AUTHORITY, aEmptyStr); 1414 const SwAuthEntry* pEntry = pFType ? 1415 pFType->GetEntryByIdentifier( m_sFields[AUTH_FIELD_IDENTIFIER]) 1416 : 0; 1417 if(pEntry) 1418 { 1419 for(sal_uInt16 i = 0; i < AUTH_FIELD_END && !bDifferent; i++) 1420 bDifferent |= m_sFields[i] != pEntry->GetAuthorField((ToxAuthorityField)i); 1421 if(bDifferent) 1422 { 1423 QueryBox aQuery(this, SW_RES(DLG_CHANGE_AUTH_ENTRY)); 1424 if(RET_YES != aQuery.Execute()) 1425 return 0; 1426 } 1427 } 1428 1429 SwFldMgr aMgr(pSh); 1430 String sFields; 1431 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1432 { 1433 sFields += m_sFields[i]; 1434 sFields += TOX_STYLE_DELIMITER; 1435 } 1436 if(bNewEntry) 1437 { 1438 if(bDifferent) 1439 { 1440 SwAuthEntry aNewData; 1441 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1442 aNewData.SetAuthorField((ToxAuthorityField)i, m_sFields[i]); 1443 pSh->ChangeAuthorityData(&aNewData); 1444 } 1445 SwInsertFld_Data aData(TYP_AUTHORITY, 0, sFields, aEmptyStr, 0 ); 1446 aMgr.InsertFld( aData ); 1447 } 1448 else if(aMgr.GetCurFld()) 1449 { 1450 aMgr.UpdateCurFld(0, sFields, aEmptyStr); 1451 } 1452 } 1453 if(!bNewEntry) 1454 CloseHdl(0); 1455 return 0; 1456 } 1457 /* -----------------17.09.99 13:06------------------- 1458 1459 --------------------------------------------------*/ 1460 IMPL_LINK(SwAuthMarkDlg, CreateEntryHdl, PushButton*, pButton) 1461 { 1462 sal_Bool bCreate = pButton == &aCreateEntryPB; 1463 String sOldId = m_sCreatedEntry[0]; 1464 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1465 m_sCreatedEntry[i] = bCreate ? aEmptyStr : m_sFields[i]; 1466 SwCreateAuthEntryDlg_Impl aDlg(pButton, 1467 bCreate ? m_sCreatedEntry : m_sFields, 1468 *pSh, bNewEntry, bCreate); 1469 if(bNewEntry) 1470 { 1471 aDlg.SetCheckNameHdl(LINK(this, SwAuthMarkDlg, IsEntryAllowedHdl)); 1472 } 1473 if(RET_OK == aDlg.Execute()) 1474 { 1475 if(bCreate && sOldId.Len()) 1476 { 1477 aEntryLB.RemoveEntry(sOldId); 1478 } 1479 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1480 { 1481 m_sFields[i] = aDlg.GetEntryText((ToxAuthorityField)i); 1482 m_sCreatedEntry[i] = m_sFields[i]; 1483 } 1484 if(bNewEntry && !aFromDocContentRB.IsChecked()) 1485 { 1486 aFromDocContentRB.Check(sal_True); 1487 ChangeSourceHdl(&aFromDocContentRB); 1488 } 1489 if(bCreate) 1490 { 1491 DBG_ASSERT(LISTBOX_ENTRY_NOTFOUND == 1492 aEntryLB.GetEntryPos(m_sFields[AUTH_FIELD_IDENTIFIER]), 1493 "entry exists!"); 1494 aEntryLB.InsertEntry(m_sFields[AUTH_FIELD_IDENTIFIER]); 1495 aEntryLB.SelectEntry(m_sFields[AUTH_FIELD_IDENTIFIER]); 1496 } 1497 aEntryED.SetText(m_sFields[AUTH_FIELD_IDENTIFIER]); 1498 aAuthorFI.SetText(m_sFields[AUTH_FIELD_AUTHOR]); 1499 aTitleFI.SetText(m_sFields[AUTH_FIELD_TITLE]); 1500 aOKBT.Enable(); 1501 } 1502 return 0; 1503 } 1504 /* -----------------------------20.12.99 14:26-------------------------------- 1505 1506 ---------------------------------------------------------------------------*/ 1507 IMPL_LINK(SwAuthMarkDlg, ChangeSourceHdl, RadioButton*, pButton) 1508 { 1509 sal_Bool bFromComp = (pButton == &aFromComponentRB); 1510 bIsFromComponent = bFromComp; 1511 aCreateEntryPB.Enable(!bIsFromComponent); 1512 aEntryLB.Clear(); 1513 if(bIsFromComponent) 1514 { 1515 if(!bBibAccessInitialized) 1516 { 1517 uno::Reference< lang::XMultiServiceFactory > xMSF = getProcessServiceFactory(); 1518 xBibAccess = uno::Reference< container::XNameAccess > ( 1519 xMSF->createInstance( C2U("com.sun.star.frame.Bibliography") ), 1520 uno::UNO_QUERY ); 1521 uno::Reference< beans::XPropertySet > xPropSet(xBibAccess, uno::UNO_QUERY); 1522 OUString uPropName(C2U("BibliographyDataFieldNames")); 1523 if(xPropSet.is() && xPropSet->getPropertySetInfo()->hasPropertyByName(uPropName)) 1524 { 1525 uno::Any aNames = xPropSet->getPropertyValue(uPropName); 1526 uno::Sequence<beans::PropertyValue> aSeq; 1527 if( aNames >>= aSeq) 1528 { 1529 const beans::PropertyValue* pArr = aSeq.getConstArray(); 1530 for(sal_uInt16 i = 0; i < aSeq.getLength(); i++) 1531 { 1532 String sTitle = pArr[i].Name; 1533 sal_Int16 nField = 0; 1534 pArr[i].Value >>= nField; 1535 if(nField >= 0 && nField < AUTH_FIELD_END) 1536 m_sColumnTitles[nField] = sTitle; 1537 } 1538 } 1539 } 1540 bBibAccessInitialized = sal_True; 1541 } 1542 if(xBibAccess.is()) 1543 { 1544 uno::Sequence<OUString> aIdentifiers = xBibAccess->getElementNames(); 1545 const OUString* pNames = aIdentifiers.getConstArray(); 1546 for(sal_uInt16 i = 0; i < aIdentifiers.getLength(); i++) 1547 { 1548 aEntryLB.InsertEntry(pNames[i]); 1549 } 1550 } 1551 } 1552 else 1553 { 1554 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) 1555 pSh->GetFldType(RES_AUTHORITY, aEmptyStr); 1556 if(pFType) 1557 { 1558 SvStringsDtor aIds; 1559 pFType->GetAllEntryIdentifiers( aIds ); 1560 for(sal_uInt16 n = 0; n < aIds.Count(); n++) 1561 aEntryLB.InsertEntry(*aIds.GetObject(n)); 1562 } 1563 if(m_sCreatedEntry[AUTH_FIELD_IDENTIFIER].Len()) 1564 aEntryLB.InsertEntry(m_sCreatedEntry[AUTH_FIELD_IDENTIFIER]); 1565 } 1566 aEntryLB.SelectEntryPos(0); 1567 CompEntryHdl(&aEntryLB); 1568 return 0; 1569 } 1570 /* -----------------15.10.2002 13:16----------------- 1571 * 1572 * --------------------------------------------------*/ 1573 IMPL_LINK(SwAuthMarkDlg, EditModifyHdl, Edit*, pEdit) 1574 { 1575 Link aAllowed = LINK(this, SwAuthMarkDlg, IsEntryAllowedHdl); 1576 long nResult = aAllowed.Call(pEdit); 1577 aOKBT.Enable(nResult > 0); 1578 if(nResult) 1579 { 1580 String sEntry(pEdit->GetText()); 1581 m_sFields[AUTH_FIELD_IDENTIFIER] = sEntry; 1582 m_sCreatedEntry[AUTH_FIELD_IDENTIFIER] = sEntry; 1583 } 1584 return 0; 1585 }; 1586 /* -----------------------------20.12.99 15:11-------------------------------- 1587 1588 ---------------------------------------------------------------------------*/ 1589 IMPL_LINK(SwAuthMarkDlg, IsEntryAllowedHdl, Edit*, pEdit) 1590 { 1591 String sEntry = pEdit->GetText(); 1592 sal_Bool bAllowed = sal_False; 1593 if(sEntry.Len()) 1594 { 1595 if(aEntryLB.GetEntryPos(sEntry) != LISTBOX_ENTRY_NOTFOUND) 1596 return 0; 1597 else if(bIsFromComponent) 1598 { 1599 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) 1600 pSh->GetFldType(RES_AUTHORITY, aEmptyStr); 1601 bAllowed = !pFType || !pFType->GetEntryByIdentifier(sEntry); 1602 } 1603 else 1604 { 1605 bAllowed = !xBibAccess.is() || !xBibAccess->hasByName(sEntry); 1606 } 1607 } 1608 return bAllowed; 1609 } 1610 /* -----------------21.09.99 14:19------------------- 1611 1612 --------------------------------------------------*/ 1613 void SwAuthMarkDlg::InitControls() 1614 { 1615 DBG_ASSERT(pSh, "Shell nicht da?"); 1616 SwField* pField = pSh->GetCurFld(); 1617 ASSERT(bNewEntry || pField, "Keine aktuelle Markierung"); 1618 if(bNewEntry) 1619 { 1620 ChangeSourceHdl(aFromComponentRB.IsChecked() ? &aFromComponentRB : &aFromDocContentRB); 1621 aCreateEntryPB.Enable(!aFromComponentRB.IsChecked()); 1622 if(!aFromComponentRB.IsChecked() && m_sCreatedEntry[0].Len()) 1623 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1624 m_sFields[i] = m_sCreatedEntry[i]; 1625 } 1626 if(bNewEntry || !pField || pField->GetTyp()->Which() != RES_AUTHORITY) 1627 return; 1628 1629 const SwAuthEntry* pEntry = ((SwAuthorityFieldType*)pField->GetTyp())-> 1630 GetEntryByHandle(((SwAuthorityField*)pField)->GetHandle()); 1631 1632 DBG_ASSERT(pEntry, "No authority entry found"); 1633 if(!pEntry) 1634 return; 1635 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1636 m_sFields[i] = pEntry->GetAuthorField((ToxAuthorityField)i); 1637 1638 aEntryED.SetText(pEntry->GetAuthorField(AUTH_FIELD_IDENTIFIER)); 1639 aAuthorFI.SetText(pEntry->GetAuthorField(AUTH_FIELD_AUTHOR)); 1640 aTitleFI.SetText(pEntry->GetAuthorField(AUTH_FIELD_TITLE)); 1641 } 1642 /* -----------------------------05.09.2002 09:44------------------------------ 1643 1644 ---------------------------------------------------------------------------*/ 1645 void SwAuthMarkDlg::Activate() 1646 { 1647 aOKBT.Enable(!pSh->HasReadonlySel()); 1648 Window::Activate(); 1649 } 1650 /* -----------------16.09.99 14:27------------------- 1651 1652 --------------------------------------------------*/ 1653 SwCreateAuthEntryDlg_Impl::SwCreateAuthEntryDlg_Impl(Window* pParent, 1654 const String pFields[], 1655 SwWrtShell& rSh, 1656 sal_Bool bNewEntry, 1657 sal_Bool bCreate) : 1658 ModalDialog(pParent, SW_RES(DLG_CREATE_AUTH_ENTRY)), 1659 aEntriesFL(this, SW_RES(FL_ENTRIES )), 1660 pTypeListBox(0), 1661 pIdentifierBox(0), 1662 aOKBT(this, SW_RES(PB_OK )), 1663 aCancelBT(this, SW_RES(PB_CANCEL )), 1664 aHelpBT(this, SW_RES(PB_HELP )), 1665 rWrtSh(rSh), 1666 m_bNewEntryMode(bNewEntry), 1667 m_bNameAllowed(sal_True) 1668 { 1669 FreeResource(); 1670 Point aFLPos(aEntriesFL.GetPosPixel()); 1671 Point aTL1(aFLPos); 1672 Size aFLSz(aEntriesFL.GetSizePixel().Width(), GetSizePixel().Height()); 1673 long nControlSpace = aFLSz.Width() / 4; 1674 long nControlWidth = nControlSpace - 2 * aTL1.X(); 1675 aTL1.X() *= 2; 1676 aTL1.Y() *= 5; 1677 Point aTR1(aTL1); 1678 aTR1.X() += nControlSpace; 1679 Point aTL2(aTR1); 1680 aTL2.X() += nControlSpace; 1681 Point aTR2(aTL2); 1682 aTR2.X() += nControlSpace; 1683 Size aFixedTextSize(aFLSz); 1684 Size aTmpSz(8,10); 1685 aTmpSz = LogicToPixel(aTmpSz, MAP_APPFONT); 1686 aFixedTextSize.Height() = aTmpSz.Width(); 1687 Size aEditSize(aFixedTextSize); 1688 aFixedTextSize.Width() = nControlWidth + aFLPos.X(); 1689 aEditSize.Height() = aTmpSz.Height(); 1690 aEditSize.Width() = nControlWidth; 1691 1692 sal_uInt16 nOffset = static_cast< sal_uInt16 >(aTmpSz.Width() * 3 / 2); 1693 sal_Bool bLeft = sal_True; 1694 Window* pRefWindow = 0; 1695 for(sal_uInt16 nIndex = 0; nIndex < AUTH_FIELD_END; nIndex++) 1696 { 1697 const TextInfo aCurInfo = aTextInfoArr[nIndex]; 1698 1699 pFixedTexts[nIndex] = new FixedText(this); 1700 if(nIndex) 1701 pFixedTexts[nIndex]->SetZOrder( pRefWindow, WINDOW_ZORDER_BEHIND ); 1702 else 1703 pFixedTexts[nIndex]->SetZOrder( 0, WINDOW_ZORDER_FIRST ); 1704 1705 pRefWindow = pFixedTexts[nIndex]; 1706 1707 pFixedTexts[nIndex]->SetSizePixel(aFixedTextSize); 1708 pFixedTexts[nIndex]->SetPosPixel(bLeft ? aTL1 : aTL2); 1709 pFixedTexts[nIndex]->SetText(SW_RES(STR_AUTH_FIELD_START + aCurInfo.nToxField)); 1710 pFixedTexts[nIndex]->Show(); 1711 pEdits[nIndex] = 0; 1712 if( AUTH_FIELD_AUTHORITY_TYPE == aCurInfo.nToxField ) 1713 { 1714 pTypeListBox = new ListBox(this, WB_DROPDOWN|WB_BORDER); 1715 pTypeListBox->SetZOrder( pRefWindow, WINDOW_ZORDER_BEHIND ); 1716 pRefWindow = pTypeListBox; 1717 for(sal_uInt16 j = 0; j < AUTH_TYPE_END; j++) 1718 pTypeListBox->InsertEntry(String(SW_RES(STR_AUTH_TYPE_START + j))); 1719 if(pFields[aCurInfo.nToxField].Len()) 1720 { 1721 sal_uInt16 nIndexPos = static_cast< sal_uInt16 >(pFields[aCurInfo.nToxField].ToInt32()); 1722 pTypeListBox->SelectEntryPos(nIndexPos); 1723 } 1724 Size aTmp(aEditSize); 1725 aTmp.Height() *= 4; 1726 pTypeListBox->SetSizePixel(aTmp); 1727 pTypeListBox->SetPosPixel(bLeft ? aTR1 : aTR2); 1728 pTypeListBox->Show(); 1729 pTypeListBox->SetSelectHdl(LINK(this, SwCreateAuthEntryDlg_Impl, EnableHdl)); 1730 pTypeListBox->SetHelpId(aCurInfo.pHelpId); 1731 1732 } 1733 else if(AUTH_FIELD_IDENTIFIER == aCurInfo.nToxField && !m_bNewEntryMode) 1734 { 1735 pIdentifierBox = new ComboBox(this, WB_BORDER|WB_DROPDOWN); 1736 pIdentifierBox->SetZOrder( pRefWindow, WINDOW_ZORDER_BEHIND ); 1737 pRefWindow = pIdentifierBox; 1738 1739 pIdentifierBox->SetSelectHdl(LINK(this, 1740 SwCreateAuthEntryDlg_Impl, IdentifierHdl)); 1741 1742 1743 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) 1744 rSh.GetFldType(RES_AUTHORITY, aEmptyStr); 1745 if(pFType) 1746 { 1747 SvStringsDtor aIds; 1748 pFType->GetAllEntryIdentifiers( aIds ); 1749 for(sal_uInt16 n = 0; n < aIds.Count(); n++) 1750 pIdentifierBox->InsertEntry(*aIds.GetObject(n)); 1751 } 1752 pIdentifierBox->SetText(pFields[aCurInfo.nToxField]); 1753 Size aTmp(aEditSize); 1754 aTmp.Height() *= 4; 1755 pIdentifierBox->SetSizePixel(aTmp); 1756 pIdentifierBox->SetPosPixel(bLeft ? aTR1 : aTR2); 1757 pIdentifierBox->Show(); 1758 pIdentifierBox->SetHelpId(aCurInfo.pHelpId); 1759 } 1760 else 1761 { 1762 pEdits[nIndex] = new Edit(this, WB_BORDER); 1763 pEdits[nIndex]->SetZOrder( pRefWindow, WINDOW_ZORDER_BEHIND ); 1764 pRefWindow = pEdits[nIndex]; 1765 pEdits[nIndex]->SetSizePixel(aEditSize); 1766 pEdits[nIndex]->SetPosPixel(bLeft ? aTR1 : aTR2); 1767 pEdits[nIndex]->SetText(pFields[aCurInfo.nToxField]); 1768 pEdits[nIndex]->Show(); 1769 pEdits[nIndex]->SetHelpId(aCurInfo.pHelpId); 1770 if(AUTH_FIELD_IDENTIFIER == aCurInfo.nToxField) 1771 { 1772 pEdits[nIndex]->SetModifyHdl(LINK(this, SwCreateAuthEntryDlg_Impl, ShortNameHdl)); 1773 m_bNameAllowed = pFields[nIndex].Len() > 0; 1774 if(!bCreate) 1775 { 1776 pFixedTexts[nIndex]->Enable(sal_False); 1777 pEdits[nIndex]->Enable(sal_False); 1778 } 1779 } 1780 } 1781 if(bLeft) 1782 { 1783 aTL1.Y() += nOffset; 1784 aTR1.Y() += nOffset; 1785 } 1786 else 1787 { 1788 aTL2.Y() += nOffset; 1789 aTR2.Y() += nOffset; 1790 } 1791 bLeft = !bLeft; 1792 } 1793 EnableHdl(pTypeListBox); 1794 1795 long nHeightDiff = - aFLSz.Height(); 1796 aFLSz.Height() = aTL1.Y(); 1797 nHeightDiff += aFLSz.Height(); 1798 // aEntriesFL.SetSizePixel(aFLSz); 1799 Size aDlgSize(GetSizePixel()); 1800 aDlgSize.Height() += nHeightDiff; 1801 SetSizePixel(aDlgSize); 1802 1803 } 1804 /* -----------------16.09.99 14:47------------------- 1805 1806 --------------------------------------------------*/ 1807 SwCreateAuthEntryDlg_Impl::~SwCreateAuthEntryDlg_Impl() 1808 { 1809 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1810 { 1811 delete pFixedTexts[i]; 1812 delete pEdits[i]; 1813 } 1814 delete pTypeListBox; 1815 delete pIdentifierBox; 1816 } 1817 /* -----------------16.09.99 14:27------------------- 1818 1819 --------------------------------------------------*/ 1820 String SwCreateAuthEntryDlg_Impl::GetEntryText(ToxAuthorityField eField) const 1821 { 1822 String sRet; 1823 if( AUTH_FIELD_AUTHORITY_TYPE == eField ) 1824 { 1825 DBG_ASSERT(pTypeListBox, "No ListBox"); 1826 sRet = String::CreateFromInt32(pTypeListBox->GetSelectEntryPos()); 1827 } 1828 else if( AUTH_FIELD_IDENTIFIER == eField && !m_bNewEntryMode) 1829 { 1830 DBG_ASSERT(pIdentifierBox, "No ComboBox"); 1831 sRet = pIdentifierBox->GetText(); 1832 } 1833 else 1834 { 1835 for(sal_uInt16 nIndex = 0; nIndex < AUTH_FIELD_END; nIndex++) 1836 { 1837 const TextInfo aCurInfo = aTextInfoArr[nIndex]; 1838 if(aCurInfo.nToxField == eField) 1839 { 1840 sRet = pEdits[nIndex]->GetText(); 1841 break; 1842 } 1843 } 1844 } 1845 return sRet; 1846 } 1847 /* -----------------21.09.99 13:54------------------- 1848 1849 --------------------------------------------------*/ 1850 IMPL_LINK(SwCreateAuthEntryDlg_Impl, IdentifierHdl, ComboBox*, pBox) 1851 { 1852 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) 1853 rWrtSh.GetFldType(RES_AUTHORITY, aEmptyStr); 1854 if(pFType) 1855 { 1856 const SwAuthEntry* pEntry = pFType->GetEntryByIdentifier( 1857 pBox->GetText()); 1858 if(pEntry) 1859 { 1860 for(sal_uInt16 i = 0; i < AUTH_FIELD_END; i++) 1861 { 1862 if(AUTH_FIELD_IDENTIFIER == i) 1863 continue; 1864 if(AUTH_FIELD_AUTHORITY_TYPE == i) 1865 pTypeListBox->SelectEntry( 1866 pEntry->GetAuthorField((ToxAuthorityField)i)); 1867 else 1868 pEdits[i]->SetText( 1869 pEntry->GetAuthorField((ToxAuthorityField)i)); 1870 } 1871 } 1872 } 1873 return 0; 1874 } 1875 /* -----------------------------20.12.99 15:07-------------------------------- 1876 1877 ---------------------------------------------------------------------------*/ 1878 1879 IMPL_LINK(SwCreateAuthEntryDlg_Impl, ShortNameHdl, Edit*, pEdit) 1880 { 1881 if(aShortNameCheckLink.IsSet()) 1882 { 1883 sal_Bool bEnable = 0 != aShortNameCheckLink.Call(pEdit); 1884 m_bNameAllowed |= bEnable; 1885 aOKBT.Enable(pTypeListBox->GetSelectEntryCount() && bEnable); 1886 } 1887 return 0; 1888 } 1889 /* -----------------------------20.12.99 15:54-------------------------------- 1890 1891 ---------------------------------------------------------------------------*/ 1892 IMPL_LINK(SwCreateAuthEntryDlg_Impl, EnableHdl, ListBox*, pBox) 1893 { 1894 aOKBT.Enable(m_bNameAllowed && pBox->GetSelectEntryCount()); 1895 return 0; 1896 }; 1897 /* -----------------06.10.99 10:00------------------- 1898 1899 --------------------------------------------------*/ 1900 SwAuthMarkFloatDlg::SwAuthMarkFloatDlg(SfxBindings* _pBindings, 1901 SfxChildWindow* pChild, 1902 Window *pParent, 1903 SfxChildWinInfo* pInfo, 1904 sal_Bool bNew) : 1905 SfxModelessDialog(_pBindings, pChild, pParent, SW_RES(DLG_INSAUTHMARK)), 1906 aDlg(this, SW_RES(WIN_DLG), bNew) 1907 { 1908 FreeResource(); 1909 Initialize(pInfo); 1910 SwWrtShell* pWrtShell = ::GetActiveWrtShell(); 1911 DBG_ASSERT(pWrtShell, "No shell?"); 1912 aDlg.ReInitDlg(*pWrtShell); 1913 } 1914 /* -----------------06.10.99 10:27------------------- 1915 1916 --------------------------------------------------*/ 1917 void SwAuthMarkFloatDlg::Activate() 1918 { 1919 SfxModelessDialog::Activate(); 1920 aDlg.Activate(); 1921 } 1922 1923 void SwAuthMarkFloatDlg::ReInitDlg(SwWrtShell& rWrtShell) 1924 { 1925 aDlg.ReInitDlg( rWrtShell ); 1926 } 1927 1928 /* -----------------06.10.99 10:35------------------- 1929 1930 --------------------------------------------------*/ 1931 SwAuthMarkModalDlg::SwAuthMarkModalDlg(Window *pParent, SwWrtShell& rSh) : 1932 SvxStandardDialog(pParent, SW_RES(DLG_EDIT_AUTHMARK)), 1933 aDlg(this, SW_RES(WIN_DLG), sal_False) 1934 { 1935 FreeResource(); 1936 aDlg.ReInitDlg(rSh); 1937 } 1938 /* -----------------06.10.99 10:46------------------- 1939 1940 --------------------------------------------------*/ 1941 void SwAuthMarkModalDlg::Apply() 1942 { 1943 aDlg.InsertHdl(0); 1944 } 1945 1946