1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_sw.hxx" 30 #ifdef SW_DLLIMPLEMENTATION 31 #undef SW_DLLIMPLEMENTATION 32 #endif 33 34 35 #include <rsc/rscsfx.hxx> 36 #include <vcl/msgbox.hxx> 37 #include <vcl/help.hxx> 38 #include <svl/stritem.hxx> 39 #include <svl/urihelper.hxx> 40 #include <unotools/pathoptions.hxx> 41 #include <sfx2/request.hxx> 42 #include <sfx2/viewfrm.hxx> 43 #include <sfx2/dispatch.hxx> 44 #include <sfx2/docfile.hxx> 45 #include <svx/dialogs.hrc> 46 #include <svx/svxdlg.hxx> 47 #include <svx/flagsdef.hxx> 48 #include <svx/simptabl.hxx> 49 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp> 50 #include <com/sun/star/ui/dialogs/XFilePicker.hpp> 51 #include <com/sun/star/ui/dialogs/XFilterManager.hpp> 52 #include <svtools/indexentryres.hxx> 53 #include <editeng/unolingu.hxx> 54 #include <column.hxx> 55 #include <fmtfsize.hxx> 56 #include <shellio.hxx> 57 #include <authfld.hxx> 58 #include <swtypes.hxx> 59 #include <wrtsh.hxx> 60 #ifndef _VIEW_HXX 61 #include <view.hxx> 62 #endif 63 #ifndef _BASESH_HXX 64 #include <basesh.hxx> 65 #endif 66 #include <outline.hxx> 67 #include <cnttab.hxx> 68 #include <swuicnttab.hxx> 69 #include <formedt.hxx> 70 #include <poolfmt.hxx> 71 #ifndef _POOLFMT_HRC 72 #include <poolfmt.hrc> 73 #endif 74 #include <uitool.hxx> 75 #include <fmtcol.hxx> 76 #include <fldbas.hxx> 77 #include <expfld.hxx> 78 #include <unotools.hxx> 79 #include <unotxdoc.hxx> 80 #include <docsh.hxx> 81 #include <swmodule.hxx> 82 #include <modcfg.hxx> 83 84 #ifndef _CMDID_H 85 #include <cmdid.h> 86 #endif 87 #ifndef _HELPID_H 88 #include <helpid.h> 89 #endif 90 #ifndef _UTLUI_HRC 91 #include <utlui.hrc> 92 #endif 93 #ifndef _INDEX_HRC 94 #include <index.hrc> 95 #endif 96 #ifndef _CNTTAB_HRC 97 #include <cnttab.hrc> 98 #endif 99 #ifndef _GLOBALS_HRC 100 #include <globals.hrc> 101 #endif 102 #include <SwStyleNameMapper.hxx> 103 #include <sfx2/filedlghelper.hxx> 104 #ifndef _TOXHLP_HXX 105 #include <toxwrap.hxx> 106 #endif 107 #include <chpfld.hxx> 108 109 #ifndef _UTLUI_HRC 110 #include "utlui.hrc" 111 #endif 112 113 #include <sfx2/app.hxx> 114 115 #include <unomid.h> 116 using namespace ::com::sun::star; 117 using namespace ::com::sun::star::lang; 118 using namespace ::com::sun::star::uno; 119 using namespace com::sun::star::ui::dialogs; 120 using ::rtl::OUString; 121 using namespace ::sfx2; 122 #include <svtools/editbrowsebox.hxx> 123 124 static const sal_Unicode aDeliStart = '['; //fuer die form 125 static const sal_Unicode aDeliEnd = ']'; //fuer die form 126 127 #define POS_GRF 0 128 #define POS_OLE 1 129 #define POS_TABLE 2 130 #define POS_FRAME 3 131 132 #define IDX_FILE_EXTENSION String::CreateFromAscii( \ 133 RTL_CONSTASCII_STRINGPARAM( "*.sdi" )) 134 135 136 /* -----------------14.06.99 13:10------------------- 137 138 --------------------------------------------------*/ 139 String lcl_CreateAutoMarkFileDlg( const String& rURL, 140 const String& rFileString, sal_Bool bOpen ) 141 { 142 String sRet; 143 144 FileDialogHelper aDlgHelper( bOpen ? 145 TemplateDescription::FILEOPEN_SIMPLE : TemplateDescription::FILESAVE_AUTOEXTENSION, 0 ); 146 uno::Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker(); 147 148 uno::Reference<XFilterManager> xFltMgr(xFP, UNO_QUERY); 149 String sCurFltr( IDX_FILE_EXTENSION ); 150 xFltMgr->appendFilter( rFileString, sCurFltr ); 151 xFltMgr->setCurrentFilter( rFileString ) ; 152 153 String& rLastSaveDir = (String&)SFX_APP()->GetLastSaveDirectory(); 154 String sSaveDir = rLastSaveDir; 155 156 if( rURL.Len() ) 157 xFP->setDisplayDirectory( rURL ); 158 else 159 { 160 SvtPathOptions aPathOpt; 161 xFP->setDisplayDirectory( aPathOpt.GetUserConfigPath() ); 162 } 163 164 if( aDlgHelper.Execute() == ERRCODE_NONE ) 165 { 166 sRet = xFP->getFiles().getConstArray()[0]; 167 } 168 rLastSaveDir = sSaveDir; 169 return sRet; 170 } 171 /* -----------------------------19.01.00 11:09-------------------------------- 172 173 ---------------------------------------------------------------------------*/ 174 struct AutoMarkEntry 175 { 176 String sSearch; 177 String sAlternative; 178 String sPrimKey; 179 String sSecKey; 180 String sComment; 181 sal_Bool bCase; 182 sal_Bool bWord; 183 184 AutoMarkEntry() : 185 bCase(sal_False), 186 bWord(sal_False){} 187 }; 188 typedef AutoMarkEntry* AutoMarkEntryPtr; 189 SV_DECL_PTRARR_DEL(AutoMarkEntryArr, AutoMarkEntryPtr, 0, 4) 190 SV_IMPL_PTRARR(AutoMarkEntryArr, AutoMarkEntryPtr); 191 192 typedef ::svt::EditBrowseBox SwEntryBrowseBox_Base; 193 class SwEntryBrowseBox : public SwEntryBrowseBox_Base 194 { 195 Edit aCellEdit; 196 ::svt::CheckBoxControl aCellCheckBox; 197 198 String sSearch; 199 String sAlternative; 200 String sPrimKey; 201 String sSecKey; 202 String sComment; 203 String sCaseSensitive; 204 String sWordOnly; 205 String sYes; 206 String sNo; 207 208 AutoMarkEntryArr aEntryArr; 209 210 ::svt::CellControllerRef xController; 211 ::svt::CellControllerRef xCheckController; 212 213 long nCurrentRow; 214 sal_Bool bModified; 215 216 217 void SetModified() {bModified = sal_True;} 218 219 protected: 220 virtual sal_Bool SeekRow( long nRow ); 221 // virtual void PaintField( OutputDevice& rDev, const awt::Rectangle& rRect, 222 // sal_uInt16 nColumnId ) const; 223 virtual void PaintCell(OutputDevice& rDev, const Rectangle& rRect, sal_uInt16 nColId) const; 224 virtual void InitController(::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol); 225 virtual ::svt::CellController* GetController(long nRow, sal_uInt16 nCol); 226 virtual sal_Bool SaveModified(); 227 228 public: 229 SwEntryBrowseBox(Window* pParent, const ResId& rId, 230 BrowserMode nMode = 0 ); 231 void ReadEntries(SvStream& rInStr); 232 void WriteEntries(SvStream& rOutStr); 233 234 sal_Bool IsModified()const; 235 236 virtual String GetCellText( long nRow, sal_uInt16 nColumn ) const; 237 }; 238 239 class SwAutoMarkDlg_Impl : public ModalDialog 240 { 241 OKButton aOKPB; 242 CancelButton aCancelPB; 243 HelpButton aHelpPB; 244 245 SwEntryBrowseBox aEntriesBB; 246 FixedLine aEntriesFL; 247 248 String sAutoMarkURL; 249 const String sAutoMarkType; 250 251 sal_Bool bCreateMode; 252 253 DECL_LINK(OkHdl, OKButton*); 254 public: 255 SwAutoMarkDlg_Impl(Window* pParent, const String& rAutoMarkURL, 256 const String& rAutoMarkType, sal_Bool bCreate); 257 ~SwAutoMarkDlg_Impl(); 258 259 }; 260 /* -----------------04.11.99 11:02------------------- 261 262 --------------------------------------------------*/ 263 sal_uInt16 CurTOXType::GetFlatIndex() const 264 { 265 sal_uInt16 nRet = static_cast< sal_uInt16 >(eType); 266 if(eType == TOX_USER && nIndex) 267 { 268 nRet = static_cast< sal_uInt16 >(TOX_AUTHORITIES + nIndex); 269 } 270 return nRet; 271 } 272 /************************************************************************* 273 274 *************************************************************************/ 275 #define EDIT_MINWIDTH 15 276 277 /* -----------------14.06.99 12:12------------------- 278 279 --------------------------------------------------*/ 280 SwMultiTOXTabDialog::SwMultiTOXTabDialog(Window* pParent, const SfxItemSet& rSet, 281 SwWrtShell &rShell, 282 SwTOXBase* pCurTOX, 283 sal_uInt16 nToxType, sal_Bool bGlobal) : 284 SfxTabDialog( pParent, SW_RES(DLG_MULTI_TOX), &rSet), 285 aExampleContainerWIN(this, SW_RES(WIN_EXAMPLE)), 286 aExampleWIN( &aExampleContainerWIN, 0 ), 287 aShowExampleCB( this, SW_RES(CB_SHOWEXAMPLE)), 288 pMgr( new SwTOXMgr( &rShell ) ), 289 rSh(rShell), 290 pExampleFrame(0), 291 pParamTOXBase(pCurTOX), 292 sUserDefinedIndex(SW_RES(ST_USERDEFINEDINDEX)), 293 nInitialTOXType(nToxType), 294 295 bEditTOX(sal_False), 296 bExampleCreated(sal_False), 297 bGlobalFlag(bGlobal) 298 { 299 FreeResource(); 300 301 aExampleWIN.SetPosSizePixel(aExampleContainerWIN.GetPosPixel(), 302 aExampleContainerWIN.GetSizePixel()); 303 304 eCurrentTOXType.eType = TOX_CONTENT; 305 eCurrentTOXType.nIndex = 0; 306 307 sal_uInt16 nUserTypeCount = rSh.GetTOXTypeCount(TOX_USER); 308 nTypeCount = nUserTypeCount + 6; 309 pFormArr = new SwForm*[nTypeCount]; 310 pDescArr = new SwTOXDescription*[nTypeCount]; 311 pxIndexSectionsArr = new SwIndexSections_Impl*[nTypeCount]; 312 //the standard user index is on position TOX_USER 313 //all user user indexes follow after position TOX_AUTHORITIES 314 if(pCurTOX) 315 { 316 bEditTOX = sal_True; 317 } 318 for(int i = nTypeCount - 1; i > -1; i--) 319 { 320 pFormArr[i] = 0; 321 pDescArr[i] = 0; 322 pxIndexSectionsArr[i] = new SwIndexSections_Impl; 323 if(pCurTOX) 324 { 325 eCurrentTOXType.eType = pCurTOX->GetType(); 326 sal_uInt16 nArrayIndex = static_cast< sal_uInt16 >(eCurrentTOXType.eType); 327 if(eCurrentTOXType.eType == TOX_USER) 328 { 329 //which user type is it? 330 for(sal_uInt16 nUser = 0; nUser < nUserTypeCount; nUser++) 331 { 332 const SwTOXType* pTemp = rSh.GetTOXType(TOX_USER, nUser); 333 if(pCurTOX->GetTOXType() == pTemp) 334 { 335 eCurrentTOXType.nIndex = nUser; 336 nArrayIndex = static_cast< sal_uInt16 >(nUser > 0 ? TOX_AUTHORITIES + nUser : TOX_USER); 337 break; 338 } 339 } 340 } 341 pFormArr[nArrayIndex] = new SwForm(pCurTOX->GetTOXForm()); 342 pDescArr[nArrayIndex] = CreateTOXDescFromTOXBase(pCurTOX); 343 if(TOX_AUTHORITIES == eCurrentTOXType.eType) 344 { 345 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) 346 rSh.GetFldType(RES_AUTHORITY, aEmptyStr); 347 if(pFType) 348 { 349 String sBrackets; 350 if(pFType->GetPrefix()) 351 sBrackets += pFType->GetPrefix(); 352 if(pFType->GetSuffix()) 353 sBrackets += pFType->GetSuffix(); 354 pDescArr[nArrayIndex]->SetAuthBrackets(sBrackets); 355 pDescArr[nArrayIndex]->SetAuthSequence(pFType->IsSequence()); 356 } 357 else 358 { 359 pDescArr[nArrayIndex]->SetAuthBrackets(C2S("[]")); 360 } 361 } 362 } 363 } 364 SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); 365 DBG_ASSERT(pFact, "Dialogdiet fail!"); 366 AddTabPage(TP_TOX_SELECT, SwTOXSelectTabPage::Create, 0); 367 AddTabPage(TP_TOX_STYLES, SwTOXStylesTabPage::Create, 0); 368 AddTabPage(TP_COLUMN, SwColumnPage::Create, 0); 369 AddTabPage(TP_BACKGROUND, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), 0 ); 370 AddTabPage(TP_TOX_ENTRY, SwTOXEntryTabPage::Create, 0); 371 if(!pCurTOX) 372 SetCurPageId(TP_TOX_SELECT); 373 374 aShowExampleCB.SetClickHdl(LINK(this, SwMultiTOXTabDialog, ShowPreviewHdl)); 375 376 aShowExampleCB.Check( SW_MOD()->GetModuleConfig()->IsShowIndexPreview()); 377 378 aExampleContainerWIN.SetAccessibleName(aShowExampleCB.GetText()); 379 SetViewAlign( WINDOWALIGN_LEFT ); 380 // SetViewWindow does not work if the dialog is visible! 381 382 if(!aShowExampleCB.IsChecked()) 383 SetViewWindow( &aExampleContainerWIN ); 384 385 Point aOldPos = GetPosPixel(); 386 ShowPreviewHdl(0); 387 Point aNewPos = GetPosPixel(); 388 //72040: initial position may be left of the view - that has to be corrected 389 if(aNewPos.X() < 0) 390 SetPosPixel(aOldPos); 391 } 392 /*-- 14.06.99 13:11:40--------------------------------------------------- 393 394 -----------------------------------------------------------------------*/ 395 SwMultiTOXTabDialog::~SwMultiTOXTabDialog() 396 { 397 SW_MOD()->GetModuleConfig()->SetShowIndexPreview(aShowExampleCB.IsChecked()); 398 399 for(sal_uInt16 i = 0; i < nTypeCount; i++) 400 { 401 delete pFormArr[i]; 402 delete pDescArr[i]; 403 delete pxIndexSectionsArr[i]; 404 } 405 delete[] pxIndexSectionsArr; 406 407 delete[] pFormArr; 408 delete[] pDescArr; 409 delete pMgr; 410 delete pExampleFrame; 411 } 412 /*-- 14.06.99 13:11:40--------------------------------------------------- 413 414 -----------------------------------------------------------------------*/ 415 void SwMultiTOXTabDialog::PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) 416 { 417 if( TP_BACKGROUND == nId ) 418 { 419 SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); 420 aSet.Put (SfxUInt32Item(SID_FLAG_TYPE, SVX_SHOW_SELECTOR)); 421 rPage.PageCreated(aSet); 422 } 423 else if(TP_COLUMN == nId ) 424 { 425 const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)GetInputSetImpl()->Get(RES_FRM_SIZE); 426 427 ((SwColumnPage&)rPage).SetPageWidth(rSize.GetWidth()); 428 } 429 else if(TP_TOX_ENTRY == nId) 430 ((SwTOXEntryTabPage&)rPage).SetWrtShell(rSh); 431 if(TP_TOX_SELECT == nId) 432 { 433 ((SwTOXSelectTabPage&)rPage).SetWrtShell(rSh); 434 if(USHRT_MAX != nInitialTOXType) 435 ((SwTOXSelectTabPage&)rPage).SelectType((TOXTypes)nInitialTOXType); 436 } 437 } 438 /*-- 14.06.99 13:11:40--------------------------------------------------- 439 440 -----------------------------------------------------------------------*/ 441 short SwMultiTOXTabDialog::Ok() 442 { 443 short nRet = SfxTabDialog::Ok(); 444 SwTOXDescription& rDesc = GetTOXDescription(eCurrentTOXType); 445 SwTOXBase aNewDef(*rSh.GetDefaultTOXBase( eCurrentTOXType.eType, sal_True )); 446 447 sal_uInt16 nIndex = static_cast< sal_uInt16 >(eCurrentTOXType.eType); 448 if(eCurrentTOXType.eType == TOX_USER && eCurrentTOXType.nIndex) 449 { 450 nIndex = static_cast< sal_uInt16 >(TOX_AUTHORITIES + eCurrentTOXType.nIndex); 451 } 452 453 if(pFormArr[nIndex]) 454 { 455 rDesc.SetForm(*pFormArr[nIndex]); 456 aNewDef.SetTOXForm(*pFormArr[nIndex]); 457 } 458 rDesc.ApplyTo(aNewDef); 459 if(!bGlobalFlag) 460 pMgr->UpdateOrInsertTOX( 461 rDesc, 0, GetOutputItemSet()); 462 else if(bEditTOX) 463 pMgr->UpdateOrInsertTOX( 464 rDesc, &pParamTOXBase, GetOutputItemSet()); 465 466 if(!eCurrentTOXType.nIndex) 467 rSh.SetDefaultTOXBase(aNewDef); 468 469 return nRet; 470 } 471 /* -----------------16.06.99 11:59------------------- 472 473 --------------------------------------------------*/ 474 SwForm* SwMultiTOXTabDialog::GetForm(CurTOXType eType) 475 { 476 sal_uInt16 nIndex = eType.GetFlatIndex(); 477 if(!pFormArr[nIndex]) 478 pFormArr[nIndex] = new SwForm(eType.eType); 479 return pFormArr[nIndex]; 480 } 481 /* -----------------09.09.99 11:29------------------- 482 483 --------------------------------------------------*/ 484 SwTOXDescription& SwMultiTOXTabDialog::GetTOXDescription(CurTOXType eType) 485 { 486 sal_uInt16 nIndex = eType.GetFlatIndex(); 487 if(!pDescArr[nIndex]) 488 { 489 const SwTOXBase* pDef = rSh.GetDefaultTOXBase( eType.eType ); 490 if(pDef) 491 pDescArr[nIndex] = CreateTOXDescFromTOXBase(pDef); 492 else 493 { 494 pDescArr[nIndex] = new SwTOXDescription(eType.eType); 495 if(eType.eType == TOX_USER) 496 pDescArr[nIndex]->SetTitle(sUserDefinedIndex); 497 else 498 pDescArr[nIndex]->SetTitle( 499 rSh.GetTOXType(eType.eType, 0)->GetTypeName()); 500 } 501 if(TOX_AUTHORITIES == eType.eType) 502 { 503 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) 504 rSh.GetFldType(RES_AUTHORITY, aEmptyStr); 505 if(pFType) 506 { 507 String sBrackets(pFType->GetPrefix()); 508 sBrackets += pFType->GetSuffix(); 509 pDescArr[nIndex]->SetAuthBrackets(sBrackets); 510 pDescArr[nIndex]->SetAuthSequence(pFType->IsSequence()); 511 } 512 else 513 { 514 pDescArr[nIndex]->SetAuthBrackets(C2S("[]")); 515 } 516 } 517 else if(TOX_INDEX == eType.eType) 518 pDescArr[nIndex]->SetMainEntryCharStyle(SW_RESSTR(STR_POOLCHR_IDX_MAIN_ENTRY)); 519 520 } 521 return *pDescArr[nIndex]; 522 } 523 /* -----------------09.09.99 11:36------------------- 524 525 --------------------------------------------------*/ 526 SwTOXDescription* SwMultiTOXTabDialog::CreateTOXDescFromTOXBase( 527 const SwTOXBase*pCurTOX) 528 { 529 SwTOXDescription * pDesc = new SwTOXDescription(pCurTOX->GetType()); 530 for(sal_uInt16 i = 0; i < MAXLEVEL; i++) 531 pDesc->SetStyleNames(pCurTOX->GetStyleNames(i), i); 532 pDesc->SetAutoMarkURL(rSh.GetTOIAutoMarkURL()); 533 pDesc->SetTitle(pCurTOX->GetTitle()); 534 535 536 pDesc->SetContentOptions(pCurTOX->GetCreateType()); 537 if(pDesc->GetTOXType() == TOX_INDEX) 538 pDesc->SetIndexOptions(pCurTOX->GetOptions()); 539 pDesc->SetMainEntryCharStyle(pCurTOX->GetMainEntryCharStyle()); 540 if(pDesc->GetTOXType() != TOX_INDEX) 541 pDesc->SetLevel((sal_uInt8)pCurTOX->GetLevel()); 542 pDesc->SetCreateFromObjectNames(pCurTOX->IsFromObjectNames()); 543 pDesc->SetSequenceName(pCurTOX->GetSequenceName()); 544 pDesc->SetCaptionDisplay(pCurTOX->GetCaptionDisplay()); 545 pDesc->SetFromChapter(pCurTOX->IsFromChapter()); 546 pDesc->SetReadonly(pCurTOX->IsProtected()); 547 pDesc->SetOLEOptions(pCurTOX->GetOLEOptions()); 548 pDesc->SetLevelFromChapter(pCurTOX->IsLevelFromChapter()); 549 pDesc->SetLanguage(pCurTOX->GetLanguage()); 550 pDesc->SetSortAlgorithm(pCurTOX->GetSortAlgorithm()); 551 return pDesc; 552 } 553 554 /* -----------------------------29.12.99 09:53-------------------------------- 555 556 ---------------------------------------------------------------------------*/ 557 558 IMPL_LINK( SwMultiTOXTabDialog, ShowPreviewHdl, CheckBox *, pBox ) 559 { 560 if(aShowExampleCB.IsChecked()) 561 { 562 if(!pExampleFrame && !bExampleCreated) 563 { 564 bExampleCreated = sal_True; 565 String sTemplate( String::CreateFromAscii( 566 RTL_CONSTASCII_STRINGPARAM("internal")) ); 567 sTemplate += INET_PATH_TOKEN; 568 sTemplate.AppendAscii( RTL_CONSTASCII_STRINGPARAM("idxexample") ); 569 String sTemplateWithoutExt( sTemplate ); 570 #ifndef MAC_WITHOUT_EXT 571 sTemplate.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".odt") ); 572 #endif 573 574 SvtPathOptions aOpt; 575 // 6.0 (extension .sxw) 576 sal_Bool bExist = aOpt.SearchFile( sTemplate, SvtPathOptions::PATH_TEMPLATE ); 577 578 #ifndef MAC_WITHOUT_EXT 579 if( !bExist ) 580 { 581 // 6.0 (extension .sxw) 582 sTemplate = sTemplateWithoutExt; 583 sTemplate.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".sxw") ); 584 bExist = aOpt.SearchFile( sTemplate, SvtPathOptions::PATH_TEMPLATE ); 585 } 586 if( !bExist ) 587 { 588 // 5.0 (extension .vor) 589 sTemplate = sTemplateWithoutExt; 590 sTemplate.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".sdw") ); 591 bExist = aOpt.SearchFile( sTemplate, SvtPathOptions::PATH_TEMPLATE ); 592 } 593 #endif 594 595 if(!bExist) 596 { 597 String sInfo(SW_RES(STR_FILE_NOT_FOUND)); 598 sInfo.SearchAndReplaceAscii( "%1", sTemplate ); 599 sInfo.SearchAndReplaceAscii( "%2", aOpt.GetTemplatePath() ); 600 InfoBox aInfo(GetParent(), sInfo); 601 aInfo.Execute(); 602 } 603 else 604 { 605 Link aLink(LINK(this, SwMultiTOXTabDialog, CreateExample_Hdl)); 606 pExampleFrame = new SwOneExampleFrame( 607 aExampleWIN, EX_SHOW_ONLINE_LAYOUT, &aLink, &sTemplate); 608 609 if(!pExampleFrame->IsServiceAvailable()) 610 { 611 pExampleFrame->CreateErrorMessage(0); 612 } 613 } 614 aShowExampleCB.Show(pExampleFrame && pExampleFrame->IsServiceAvailable()); 615 } 616 } 617 sal_Bool bSetViewWindow = aShowExampleCB.IsChecked() 618 && pExampleFrame && pExampleFrame->IsServiceAvailable(); 619 620 aExampleContainerWIN.Show( bSetViewWindow ); 621 SetViewWindow( bSetViewWindow ? &aExampleContainerWIN : 0 ); 622 623 Window *pTopmostParent = this; 624 while(pTopmostParent->GetParent()) 625 pTopmostParent = pTopmostParent->GetParent(); 626 ::Rectangle aRect(GetClientWindowExtentsRelative(pTopmostParent)); 627 ::Point aPos = aRect.TopLeft(); 628 Size aSize = GetSizePixel(); 629 if(pBox) 630 AdjustLayout(); 631 long nDiffWidth = GetSizePixel().Width() - aSize.Width(); 632 aPos.X() -= nDiffWidth; 633 SetPosPixel(aPos); 634 635 return 0; 636 } 637 638 639 /* -----------------05.07.99 09:49------------------- 640 641 --------------------------------------------------*/ 642 sal_Bool SwMultiTOXTabDialog::IsNoNum(SwWrtShell& rSh, const String& rName) 643 { 644 SwTxtFmtColl* pColl = rSh.GetParaStyle(rName); 645 //if(pColl && pColl->GetOutlineLevel() == NO_NUMBERING) //#outline level,zhaojianwei 646 if(pColl && ! pColl->IsAssignedToListLevelOfOutlineStyle()) //<-end,zhaojianwei 647 return sal_True; 648 649 sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName(rName, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL); 650 if(nId != USHRT_MAX && 651 //rSh.GetTxtCollFromPool(nId)->GetOutlineLevel() == NO_NUMBERING) //#outline level,zhaojianwei 652 ! rSh.GetTxtCollFromPool(nId)->IsAssignedToListLevelOfOutlineStyle()) //<-end,zhaojianwei 653 return sal_True; 654 655 return sal_False; 656 } 657 /* -----------------14.07.99 16:01------------------- 658 659 --------------------------------------------------*/ 660 class SwIndexTreeLB : public SvTreeListBox 661 { 662 const HeaderBar* pHeaderBar; 663 public: 664 SwIndexTreeLB(Window* pWin, const ResId& rResId) : 665 SvTreeListBox(pWin, rResId), pHeaderBar(0){} 666 667 virtual void KeyInput( const KeyEvent& rKEvt ); 668 virtual long GetTabPos( SvLBoxEntry*, SvLBoxTab* ); 669 void SetHeaderBar(const HeaderBar* pHB) {pHeaderBar = pHB;} 670 }; 671 /* -----------------14.07.99 16:03------------------- 672 673 --------------------------------------------------*/ 674 long SwIndexTreeLB::GetTabPos( SvLBoxEntry* pEntry, SvLBoxTab* pTab) 675 { 676 long nData = (long)pEntry->GetUserData(); 677 if(nData != USHRT_MAX) 678 { 679 long nPos = pHeaderBar->GetItemRect( static_cast< sal_uInt16 >(101 + nData) ).TopLeft().X(); 680 nData = nPos; 681 } 682 else 683 nData = 0; 684 nData += pTab->GetPos(); 685 return nData; 686 } 687 /* -----------------25.08.99 11:14------------------- 688 689 --------------------------------------------------*/ 690 void SwIndexTreeLB::KeyInput( const KeyEvent& rKEvt ) 691 { 692 SvLBoxEntry* pEntry = FirstSelected(); 693 KeyCode aCode = rKEvt.GetKeyCode(); 694 sal_Bool bChanged = sal_False; 695 if(pEntry) 696 { 697 long nLevel = (long)pEntry->GetUserData(); 698 if(aCode.GetCode() == KEY_ADD ) 699 { 700 if(nLevel < MAXLEVEL - 1) 701 nLevel++; 702 else if(nLevel == USHRT_MAX) 703 nLevel = 0; 704 bChanged = sal_True; 705 } 706 else if(aCode.GetCode() == KEY_SUBTRACT) 707 { 708 if(!nLevel) 709 nLevel = USHRT_MAX; 710 else if(nLevel != USHRT_MAX) 711 nLevel--; 712 bChanged = sal_True; 713 } 714 if(bChanged) 715 { 716 pEntry->SetUserData((void*)nLevel); 717 Invalidate(); 718 } 719 } 720 if(!bChanged) 721 SvTreeListBox::KeyInput(rKEvt); 722 } 723 724 /* -----------------16.07.99 10:01------------------- 725 726 --------------------------------------------------*/ 727 class SwHeaderTree : public Control 728 { 729 HeaderBar aStylesHB; 730 SwIndexTreeLB aStylesTLB; 731 732 public: 733 SwHeaderTree(Window* pParent, const ResId rResId); 734 735 HeaderBar& GetHeaderBar() {return aStylesHB;} 736 SwIndexTreeLB& GetTreeListBox() { return aStylesTLB;} 737 738 virtual void GetFocus(); 739 }; 740 /* -----------------16.07.99 10:11------------------- 741 742 --------------------------------------------------*/ 743 SwHeaderTree::SwHeaderTree(Window* pParent, const ResId rResId) : 744 Control(pParent, rResId), 745 aStylesHB( this, ResId(HB_STYLES, *rResId.GetResMgr())), 746 aStylesTLB( this, ResId(TLB_STYLES, *rResId.GetResMgr())) 747 { 748 FreeResource(); 749 aStylesHB.SetStyle(aStylesHB.GetStyle()|WB_BUTTONSTYLE|WB_TABSTOP|WB_BORDER); 750 Size aHBSize(aStylesHB.GetSizePixel()); 751 aHBSize.Height() = aStylesHB.CalcWindowSizePixel().Height(); 752 aStylesHB.SetSizePixel(aHBSize); 753 aStylesTLB.SetPosPixel(Point(0, aHBSize.Height())); 754 Size aTLBSize(aStylesHB.GetSizePixel()); 755 aTLBSize.Height() = GetOutputSizePixel().Height() - aHBSize.Height(); 756 aStylesTLB.SetSizePixel(aTLBSize); 757 aStylesTLB.SetHeaderBar(&aStylesHB); 758 } 759 /* -----------------25.08.99 10:38------------------- 760 761 --------------------------------------------------*/ 762 void SwHeaderTree::GetFocus() 763 { 764 Control::GetFocus(); 765 aStylesTLB.GrabFocus(); 766 } 767 /* -----------------13.07.99 15:29------------------- 768 769 --------------------------------------------------*/ 770 class SwAddStylesDlg_Impl : public SfxModalDialog 771 { 772 OKButton aOk; 773 CancelButton aCancel; 774 HelpButton aHelp; 775 776 FixedLine aStylesFL; 777 SwHeaderTree aHeaderTree; 778 ImageButton aLeftPB; 779 ImageButton aRightPB; 780 781 String sHBFirst; 782 String* pStyleArr; 783 784 DECL_LINK(OkHdl, OKButton*); 785 DECL_LINK(LeftRightHdl, PushButton*); 786 DECL_LINK(HeaderDragHdl, HeaderBar*); 787 788 public: 789 SwAddStylesDlg_Impl(Window* pParent, SwWrtShell& rWrtSh, String rStringArr[]); 790 ~SwAddStylesDlg_Impl(); 791 }; 792 /* -----------------13.07.99 15:39------------------- 793 794 --------------------------------------------------*/ 795 SwAddStylesDlg_Impl::SwAddStylesDlg_Impl(Window* pParent, 796 SwWrtShell& rWrtSh, String rStringArr[]) : 797 SfxModalDialog(pParent, SW_RES(DLG_ADD_IDX_STYLES)), 798 aOk( this, SW_RES(PB_OK )), 799 aCancel( this, SW_RES(PB_CANCEL )), 800 aHelp( this, SW_RES(PB_HELP )), 801 802 aStylesFL( this, SW_RES(FL_STYLES )), 803 aHeaderTree(this, SW_RES(TR_HEADER )), 804 aLeftPB( this, SW_RES(PB_LEFT )), 805 aRightPB( this, SW_RES(PB_RIGHT )), 806 807 sHBFirst( SW_RES(ST_HB_FIRST)), 808 pStyleArr(rStringArr) 809 { 810 FreeResource(); 811 812 aHeaderTree.SetAccessibleRelationMemberOf(&aStylesFL); 813 aLeftPB.SetAccessibleRelationMemberOf(&aStylesFL); 814 aRightPB.SetAccessibleRelationMemberOf(&aStylesFL); 815 816 aLeftPB.SetModeImage( Image( SW_RES( IMG_ALL_LEFT_HC ) ), BMP_COLOR_HIGHCONTRAST ); 817 aRightPB.SetModeImage( Image( SW_RES( IMG_ALL_RIGHT_HC ) ), BMP_COLOR_HIGHCONTRAST ); 818 819 aOk.SetClickHdl(LINK(this, SwAddStylesDlg_Impl, OkHdl)); 820 aLeftPB.SetClickHdl(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl)); 821 aRightPB.SetClickHdl(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl)); 822 823 HeaderBar& rHB = aHeaderTree.GetHeaderBar(); 824 rHB.SetEndDragHdl(LINK(this, SwAddStylesDlg_Impl, HeaderDragHdl)); 825 826 long nWidth = rHB.GetSizePixel().Width(); 827 sal_uInt16 i; 828 829 nWidth /= 14; 830 nWidth--; 831 rHB.InsertItem( 100, sHBFirst, 4 * nWidth ); 832 for( i = 1; i <= MAXLEVEL; i++) 833 rHB.InsertItem( 100 + i, String::CreateFromInt32(i), nWidth ); 834 rHB.Show(); 835 836 SwIndexTreeLB& rTLB = aHeaderTree.GetTreeListBox(); 837 rTLB.SetStyle(rTLB.GetStyle()|WB_CLIPCHILDREN|WB_SORT); 838 //aStylesTLB.SetSelectHdl(LINK(this, SwAddStylesDlg_Impl, SelectHdl)); 839 rTLB.GetModel()->SetSortMode(SortAscending); 840 for(i = 0; i < MAXLEVEL; ++i) 841 { 842 String sStyles(rStringArr[i]); 843 for(sal_uInt16 nToken = 0; nToken < sStyles.GetTokenCount(TOX_STYLE_DELIMITER); nToken++) 844 { 845 String sTmp(sStyles.GetToken(nToken, TOX_STYLE_DELIMITER)); 846 SvLBoxEntry* pEntry = rTLB.InsertEntry(sTmp); 847 pEntry->SetUserData(reinterpret_cast<void*>(i)); 848 } 849 } 850 // now the other styles 851 // 852 const SwTxtFmtColl *pColl = 0; 853 const sal_uInt16 nSz = rWrtSh.GetTxtFmtCollCount(); 854 855 for ( sal_uInt16 j = 0;j < nSz; ++j ) 856 { 857 pColl = &rWrtSh.GetTxtFmtColl(j); 858 if(pColl->IsDefault()) 859 continue; 860 861 const String& rName = pColl->GetName(); 862 863 if(rName.Len() > 0) 864 { 865 SvLBoxEntry* pEntry = rTLB.First(); 866 sal_Bool bFound = sal_False; 867 while(pEntry && !bFound) 868 { 869 if(rTLB.GetEntryText(pEntry) == rName) 870 bFound = sal_True; 871 pEntry = rTLB.Next(pEntry); 872 } 873 if(!bFound) 874 { 875 rTLB.InsertEntry(rName)->SetUserData((void*)USHRT_MAX); 876 } 877 } 878 } 879 rTLB.GetModel()->Resort(); 880 } 881 882 /* -----------------13.07.99 15:39------------------- 883 884 --------------------------------------------------*/ 885 SwAddStylesDlg_Impl::~SwAddStylesDlg_Impl() 886 { 887 } 888 /* -----------------13.07.99 15:39------------------- 889 890 --------------------------------------------------*/ 891 IMPL_LINK(SwAddStylesDlg_Impl, OkHdl, OKButton*, EMPTYARG) 892 { 893 for(sal_uInt16 i = 0; i < MAXLEVEL; i++) 894 pStyleArr[i].Erase(); 895 896 SwIndexTreeLB& rTLB = aHeaderTree.GetTreeListBox(); 897 SvLBoxEntry* pEntry = rTLB.First(); 898 while(pEntry) 899 { 900 long nLevel = (long)pEntry->GetUserData(); 901 if(nLevel != USHRT_MAX) 902 { 903 String sName(rTLB.GetEntryText(pEntry)); 904 if(pStyleArr[nLevel].Len()) 905 pStyleArr[nLevel] += TOX_STYLE_DELIMITER; 906 pStyleArr[nLevel] += sName; 907 } 908 pEntry = rTLB.Next(pEntry); 909 } 910 911 //TODO write back style names 912 EndDialog(RET_OK); 913 return 0; 914 } 915 /* -----------------16.07.99 09:27------------------- 916 917 --------------------------------------------------*/ 918 IMPL_LINK(SwAddStylesDlg_Impl, HeaderDragHdl, HeaderBar*, EMPTYARG) 919 { 920 aHeaderTree.GetTreeListBox().Invalidate(); 921 return 0; 922 } 923 /* -----------------13.07.99 15:39------------------- 924 925 --------------------------------------------------*/ 926 IMPL_LINK(SwAddStylesDlg_Impl, LeftRightHdl, PushButton*, pBtn) 927 { 928 sal_Bool bLeft = pBtn == &aLeftPB; 929 SvLBoxEntry* pEntry = aHeaderTree.GetTreeListBox().FirstSelected(); 930 if(pEntry) 931 { 932 long nLevel = (long)pEntry->GetUserData(); 933 if(bLeft) 934 { 935 if(!nLevel) 936 nLevel = USHRT_MAX; 937 else if(nLevel != USHRT_MAX) 938 nLevel--; 939 } 940 else 941 { 942 if(nLevel < MAXLEVEL - 1) 943 nLevel++; 944 else if(nLevel == USHRT_MAX) 945 nLevel = 0; 946 } 947 pEntry->SetUserData((void*)nLevel); 948 aHeaderTree.GetTreeListBox().Invalidate(); 949 } 950 return 0; 951 } 952 953 /*-- 14.06.99 13:11:40--------------------------------------------------- 954 955 -----------------------------------------------------------------------*/ 956 SwTOXSelectTabPage::SwTOXSelectTabPage(Window* pParent, const SfxItemSet& rAttrSet) : 957 SfxTabPage(pParent, SW_RES(TP_TOX_SELECT), rAttrSet), 958 959 aTypeTitleFL( this, SW_RES(FL_TYPETITLE )), 960 aTitleFT( this, SW_RES(FT_TITLE )), 961 aTitleED( this, SW_RES(ED_TITLE )), 962 aTypeFT( this, SW_RES(FT_TYPE )), 963 aTypeLB( this, SW_RES(LB_TYPE )), 964 aReadOnlyCB( this, SW_RES(CB_READONLY )), 965 966 aAreaFL( this, SW_RES(FL_AREA )), 967 aAreaFT( this, SW_RES(FT_AREA )), 968 aAreaLB( this, SW_RES(LB_AREA )), 969 aLevelFT( this, SW_RES(FT_LEVEL )), 970 aLevelNF( this, SW_RES(NF_LEVEL )), 971 972 aCreateFromFL( this, SW_RES(FL_CREATEFROM )), 973 aFromHeadingsCB( this, SW_RES(CB_FROMHEADINGS )), 974 // aChapterDlgPB( this, SW_RES(PB_CHAPTERDLG )),//#outline level,removed by zhaojianwei 975 aAddStylesCB( this, SW_RES(CB_ADDSTYLES )), 976 aAddStylesPB( this, SW_RES(PB_ADDSTYLES )), 977 978 aFromTablesCB( this, SW_RES(CB_FROMTABLES )), 979 aFromFramesCB( this, SW_RES(CB_FROMFRAMES )), 980 aFromGraphicsCB( this, SW_RES(CB_FROMGRAPHICS )), 981 aFromOLECB( this, SW_RES(CB_FROMOLE )), 982 aLevelFromChapterCB(this, SW_RES(CB_LEVELFROMCHAPTER )), 983 984 aFromCaptionsRB( this, SW_RES(RB_FROMCAPTIONS )), 985 aFromObjectNamesRB( this, SW_RES(RB_FROMOBJECTNAMES )), 986 987 aCaptionSequenceFT( this, SW_RES(FT_CAPTIONSEQUENCE )), 988 aCaptionSequenceLB( this, SW_RES(LB_CAPTIONSEQUENCE )), 989 aDisplayTypeFT( this, SW_RES(FT_DISPLAYTYPE )), 990 aDisplayTypeLB( this, SW_RES(LB_DISPLAYTYPE )), 991 992 aTOXMarksCB( this, SW_RES(CB_TOXMARKS )), 993 994 aIdxOptionsFL( this, SW_RES(FL_IDXOPTIONS )), 995 aCollectSameCB( this, SW_RES(CB_COLLECTSAME )), 996 aUseFFCB( this, SW_RES(CB_USEFF )), 997 aUseDashCB( this, SW_RES(CB_USE_DASH )), 998 aCaseSensitiveCB( this, SW_RES(CB_CASESENSITIVE )), 999 aInitialCapsCB( this, SW_RES(CB_INITIALCAPS )), 1000 aKeyAsEntryCB( this, SW_RES(CB_KEYASENTRY )), 1001 aFromFileCB( this, SW_RES(CB_FROMFILE )), 1002 aAutoMarkPB( this, SW_RES(MB_AUTOMARK )), 1003 1004 aFromNames( SW_RES(RES_SRCTYPES )), 1005 aFromObjCLB( this, SW_RES(CLB_FROMOBJ )), 1006 aFromObjFL( this, SW_RES(FL_FROMOBJ )), 1007 1008 aSequenceCB( this, SW_RES(CB_SEQUENCE )), 1009 aBracketFT( this, SW_RES(FT_BRACKET )), 1010 aBracketLB( this, SW_RES(LB_BRACKET )), 1011 aAuthorityFormatFL( this, SW_RES(FL_AUTHORITY )), 1012 1013 aSortOptionsFL( this, SW_RES(FL_SORTOPTIONS )), 1014 aLanguageFT( this, SW_RES(FT_LANGUAGE )), 1015 aLanguageLB( this, SW_RES(LB_LANGUAGE )), 1016 aSortAlgorithmFT( this, SW_RES(FT_SORTALG )), 1017 aSortAlgorithmLB( this, SW_RES(LB_SORTALG )), 1018 1019 pIndexRes(0), 1020 1021 sAutoMarkType(SW_RES(ST_AUTOMARK_TYPE)), 1022 sAddStyleUser(SW_RES(ST_USER_ADDSTYLE)), 1023 bFirstCall(sal_True) 1024 { 1025 aBracketLB.InsertEntry(String(SW_RES(ST_NO_BRACKET)), 0); 1026 1027 aAddStylesPB.SetAccessibleRelationMemberOf(&aCreateFromFL); 1028 aAddStylesPB.SetAccessibleRelationLabeledBy(&aAddStylesCB); 1029 aAddStylesPB.SetAccessibleName(aAddStylesCB.GetText()); 1030 1031 FreeResource(); 1032 1033 pIndexEntryWrapper = new IndexEntrySupplierWrapper(); 1034 1035 aLanguageLB.SetLanguageList( LANG_LIST_ALL | LANG_LIST_ONLY_KNOWN, 1036 sal_False, sal_False, sal_False ); 1037 1038 sAddStyleContent = aAddStylesCB.GetText(); 1039 1040 aCBLeftPos1 = aFromHeadingsCB.GetPosPixel(); 1041 aCBLeftPos2 = aAddStylesCB.GetPosPixel(); 1042 aCBLeftPos3 = aTOXMarksCB.GetPosPixel(); 1043 1044 ResStringArray& rNames = aFromNames.GetNames(); 1045 for(sal_uInt16 i = 0; i < rNames.Count(); i++) 1046 { 1047 aFromObjCLB.InsertEntry(rNames.GetString(i)); 1048 aFromObjCLB.SetEntryData( i, (void*)rNames.GetValue(i) ); 1049 } 1050 aFromObjCLB.SetHelpId(HID_OLE_CHECKLB); 1051 1052 SetExchangeSupport(); 1053 aTypeLB.SetSelectHdl(LINK(this, SwTOXSelectTabPage, TOXTypeHdl)); 1054 1055 aAddStylesPB.SetClickHdl(LINK(this, SwTOXSelectTabPage, AddStylesHdl)); 1056 //aChapterDlgPB.SetClickHdl(LINK(this, SwTOXSelectTabPage, ChapterHdl));//#outline level,removed by zhaojianwei 1057 1058 PopupMenu* pMenu = aAutoMarkPB.GetPopupMenu(); 1059 pMenu->SetActivateHdl(LINK(this, SwTOXSelectTabPage, MenuEnableHdl)); 1060 pMenu->SetSelectHdl(LINK(this, SwTOXSelectTabPage, MenuExecuteHdl)); 1061 1062 Link aLk = LINK(this, SwTOXSelectTabPage, CheckBoxHdl); 1063 aAddStylesCB .SetClickHdl(aLk); 1064 aFromHeadingsCB .SetClickHdl(aLk); 1065 aTOXMarksCB .SetClickHdl(aLk); 1066 aFromFileCB .SetClickHdl(aLk); 1067 aCollectSameCB .SetClickHdl(aLk); 1068 aUseFFCB .SetClickHdl(aLk); 1069 aUseDashCB .SetClickHdl(aLk); 1070 aInitialCapsCB .SetClickHdl(aLk); 1071 aKeyAsEntryCB .SetClickHdl(aLk); 1072 1073 Link aModifyLk = LINK(this, SwTOXSelectTabPage, ModifyHdl); 1074 aTitleED.SetModifyHdl(aModifyLk); 1075 aLevelNF.SetModifyHdl(aModifyLk); 1076 aSortAlgorithmLB.SetSelectHdl(aModifyLk); 1077 1078 aLk = LINK(this, SwTOXSelectTabPage, RadioButtonHdl); 1079 aFromCaptionsRB.SetClickHdl(aLk); 1080 aFromObjectNamesRB.SetClickHdl(aLk); 1081 RadioButtonHdl(&aFromCaptionsRB); 1082 1083 aLanguageLB.SetSelectHdl(LINK(this, SwTOXSelectTabPage, LanguageHdl)); 1084 aTypeLB.SelectEntryPos(0); 1085 aTitleED.SaveValue(); 1086 } 1087 /*-- 14.06.99 13:11:41--------------------------------------------------- 1088 1089 -----------------------------------------------------------------------*/ 1090 SwTOXSelectTabPage::~SwTOXSelectTabPage() 1091 { 1092 delete pIndexRes; 1093 delete pIndexEntryWrapper; 1094 } 1095 /* -----------------21.10.99 17:03------------------- 1096 1097 --------------------------------------------------*/ 1098 void SwTOXSelectTabPage::SetWrtShell(SwWrtShell& rSh) 1099 { 1100 sal_uInt16 nUserTypeCount = rSh.GetTOXTypeCount(TOX_USER); 1101 if(nUserTypeCount > 1) 1102 { 1103 //insert all new user indexes names after the standard user index 1104 sal_uInt16 nPos = aTypeLB.GetEntryPos((void*)(sal_uInt32)TO_USER); 1105 nPos++; 1106 for(sal_uInt16 nUser = 1; nUser < nUserTypeCount; nUser++) 1107 { 1108 nPos = aTypeLB.InsertEntry(rSh.GetTOXType(TOX_USER, nUser)->GetTypeName(), nPos); 1109 sal_uInt32 nEntryData = nUser << 8; 1110 nEntryData |= TO_USER; 1111 aTypeLB.SetEntryData(nPos, (void*)nEntryData); 1112 } 1113 } 1114 } 1115 /* -----------------14.06.99 13:10------------------- 1116 1117 --------------------------------------------------*/ 1118 sal_Bool SwTOXSelectTabPage::FillItemSet( SfxItemSet& ) 1119 { 1120 return sal_True; 1121 } 1122 /* -----------------25.08.99 14:31------------------- 1123 1124 --------------------------------------------------*/ 1125 long lcl_TOXTypesToUserData(CurTOXType eType) 1126 { 1127 sal_uInt16 nRet = TOX_INDEX; 1128 switch(eType.eType) 1129 { 1130 case TOX_INDEX : nRet = TO_INDEX; break; 1131 case TOX_USER : 1132 { 1133 nRet = eType.nIndex << 8; 1134 nRet |= TO_USER; 1135 } 1136 break; 1137 case TOX_CONTENT : nRet = TO_CONTENT; break; 1138 case TOX_ILLUSTRATIONS:nRet = TO_ILLUSTRATION; break; 1139 case TOX_OBJECTS : nRet = TO_OBJECT; break; 1140 case TOX_TABLES : nRet = TO_TABLE; break; 1141 case TOX_AUTHORITIES : nRet = TO_AUTHORITIES; break; 1142 } 1143 return nRet; 1144 } 1145 //----------------------------------------------------------------- 1146 void SwTOXSelectTabPage::SelectType(TOXTypes eSet) 1147 { 1148 CurTOXType eCurType (eSet, 0); 1149 1150 long nData = lcl_TOXTypesToUserData(eCurType); 1151 aTypeLB.SelectEntryPos(aTypeLB.GetEntryPos((void*)nData)); 1152 aTypeFT.Enable(sal_False); 1153 aTypeLB.Enable(sal_False); 1154 TOXTypeHdl(&aTypeLB); 1155 } 1156 1157 /*-- 14.06.99 13:10:45--------------------------------------------------- 1158 1159 -----------------------------------------------------------------------*/ 1160 //----------------------------------------------------------------- 1161 CurTOXType lcl_UserData2TOXTypes(sal_uInt16 nData) 1162 { 1163 CurTOXType eRet; 1164 1165 switch(nData&0xff) 1166 { 1167 case TO_INDEX : eRet.eType = TOX_INDEX; break; 1168 case TO_USER : 1169 { 1170 eRet.eType = TOX_USER; 1171 eRet.nIndex = (nData&0xff00) >> 8; 1172 } 1173 break; 1174 case TO_CONTENT : eRet.eType = TOX_CONTENT; break; 1175 case TO_ILLUSTRATION: eRet.eType = TOX_ILLUSTRATIONS; break; 1176 case TO_OBJECT : eRet.eType = TOX_OBJECTS; break; 1177 case TO_TABLE : eRet.eType = TOX_TABLES; break; 1178 case TO_AUTHORITIES : eRet.eType = TOX_AUTHORITIES; break; 1179 default: DBG_ERROR("what a type?"); 1180 } 1181 return eRet; 1182 } 1183 /* -----------------02.09.99 08:16------------------- 1184 1185 --------------------------------------------------*/ 1186 void SwTOXSelectTabPage::ApplyTOXDescription() 1187 { 1188 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 1189 const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); 1190 SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType); 1191 aReadOnlyCB.Check(rDesc.IsReadonly()); 1192 if(aTitleED.GetText() == aTitleED.GetSavedValue()) 1193 { 1194 if(rDesc.GetTitle()) 1195 aTitleED.SetText(*rDesc.GetTitle()); 1196 else 1197 aTitleED.SetText(aEmptyStr); 1198 aTitleED.SaveValue(); 1199 } 1200 1201 aAreaLB.SelectEntryPos(rDesc.IsFromChapter() ? 1 : 0); 1202 1203 if(aCurType.eType != TOX_INDEX) 1204 aLevelNF.SetValue(rDesc.GetLevel()); //content, user 1205 1206 sal_uInt16 nCreateType = rDesc.GetContentOptions(); 1207 1208 //user + content 1209 sal_Bool bHasStyleNames = sal_False; 1210 sal_uInt16 i; 1211 1212 for( i = 0; i < MAXLEVEL; i++) 1213 if(rDesc.GetStyleNames(i).Len()) 1214 { 1215 bHasStyleNames = sal_True; 1216 break; 1217 } 1218 aAddStylesCB.Check(bHasStyleNames && (nCreateType & nsSwTOXElement::TOX_TEMPLATE)); 1219 1220 aFromOLECB. Check( 0 != (nCreateType & nsSwTOXElement::TOX_OLE) ); 1221 aFromTablesCB. Check( 0 != (nCreateType & nsSwTOXElement::TOX_TABLE) ); 1222 aFromGraphicsCB.Check( 0 != (nCreateType & nsSwTOXElement::TOX_GRAPHIC) ); 1223 aFromFramesCB. Check( 0 != (nCreateType & nsSwTOXElement::TOX_FRAME) ); 1224 1225 aLevelFromChapterCB.Check(rDesc.IsLevelFromChapter()); 1226 1227 //all but illustration and table 1228 aTOXMarksCB.Check( 0 != (nCreateType & nsSwTOXElement::TOX_MARK) ); 1229 1230 //content 1231 if(TOX_CONTENT == aCurType.eType) 1232 { 1233 aFromHeadingsCB.Check( 0 != (nCreateType & nsSwTOXElement::TOX_OUTLINELEVEL) ); 1234 //aChapterDlgPB.Enable(aFromHeadingsCB.IsChecked());//#outline level,removed by zhaojianwei 1235 aAddStylesCB.SetText(sAddStyleContent); 1236 aAddStylesPB.Enable(aAddStylesCB.IsChecked()); 1237 } 1238 //index only 1239 else if(TOX_INDEX == aCurType.eType) 1240 { 1241 sal_uInt16 nIndexOptions = rDesc.GetIndexOptions(); 1242 aCollectSameCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_SAME_ENTRY) ); 1243 aUseFFCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_FF) ); 1244 aUseDashCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_DASH) ); 1245 if(aUseFFCB.IsChecked()) 1246 aUseDashCB.Enable(sal_False); 1247 else if(aUseDashCB.IsChecked()) 1248 aUseFFCB.Enable(sal_False); 1249 1250 aCaseSensitiveCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_CASE_SENSITIVE) ); 1251 aInitialCapsCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_INITIAL_CAPS) ); 1252 aKeyAsEntryCB. Check( 0 != (nIndexOptions & nsSwTOIOptions::TOI_KEY_AS_ENTRY) ); 1253 } 1254 else if(TOX_ILLUSTRATIONS == aCurType.eType || 1255 TOX_TABLES == aCurType.eType) 1256 { 1257 aFromObjectNamesRB.Check(rDesc.IsCreateFromObjectNames()); 1258 aFromCaptionsRB.Check(!rDesc.IsCreateFromObjectNames()); 1259 aCaptionSequenceLB.SelectEntry(rDesc.GetSequenceName()); 1260 aDisplayTypeLB.SelectEntryPos( static_cast< sal_uInt16 >(rDesc.GetCaptionDisplay()) ); 1261 RadioButtonHdl(&aFromCaptionsRB); 1262 1263 } 1264 else if(TOX_OBJECTS == aCurType.eType) 1265 { 1266 long nOLEData = rDesc.GetOLEOptions(); 1267 for(sal_uInt16 nFromObj = 0; nFromObj < aFromObjCLB.GetEntryCount(); nFromObj++) 1268 { 1269 long nData = (long)aFromObjCLB.GetEntryData(nFromObj); 1270 aFromObjCLB.CheckEntryPos(nFromObj, 0 != (nData & nOLEData)); 1271 } 1272 } 1273 else if(TOX_AUTHORITIES == aCurType.eType) 1274 { 1275 String sBrackets(rDesc.GetAuthBrackets()); 1276 if(!sBrackets.Len() || sBrackets.EqualsAscii(" ")) 1277 aBracketLB.SelectEntryPos(0); 1278 else 1279 aBracketLB.SelectEntry(sBrackets); 1280 aSequenceCB.Check(rDesc.IsAuthSequence()); 1281 } 1282 aAutoMarkPB.Enable(aFromFileCB.IsChecked()); 1283 1284 for(i = 0; i < MAXLEVEL; i++) 1285 aStyleArr[i] = rDesc.GetStyleNames(i); 1286 1287 aLanguageLB.SelectLanguage(rDesc.GetLanguage()); 1288 LanguageHdl(0); 1289 for( long nCnt = 0; nCnt < aSortAlgorithmLB.GetEntryCount(); ++nCnt ) 1290 { 1291 const String* pEntryData = (const String*)aSortAlgorithmLB.GetEntryData( (sal_uInt16)nCnt ); 1292 DBG_ASSERT(pEntryData, "no entry data available"); 1293 if( pEntryData && *pEntryData == rDesc.GetSortAlgorithm()) 1294 { 1295 aSortAlgorithmLB.SelectEntryPos( (sal_uInt16)nCnt ); 1296 break; 1297 } 1298 } 1299 } 1300 /* -----------------09.09.99 11:57------------------- 1301 1302 --------------------------------------------------*/ 1303 void SwTOXSelectTabPage::FillTOXDescription() 1304 { 1305 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 1306 CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); 1307 SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType); 1308 rDesc.SetTitle(aTitleED.GetText()); 1309 rDesc.SetFromChapter(1 == aAreaLB.GetSelectEntryPos()); 1310 sal_uInt16 nContentOptions = 0; 1311 if(aTOXMarksCB.IsVisible() && aTOXMarksCB.IsChecked()) 1312 nContentOptions |= nsSwTOXElement::TOX_MARK; 1313 1314 sal_uInt16 nIndexOptions = rDesc.GetIndexOptions()&nsSwTOIOptions::TOI_ALPHA_DELIMITTER; 1315 switch(rDesc.GetTOXType()) 1316 { 1317 case TOX_CONTENT: 1318 if(aFromHeadingsCB.IsChecked()) 1319 nContentOptions |= nsSwTOXElement::TOX_OUTLINELEVEL; 1320 break; 1321 case TOX_USER: 1322 { 1323 rDesc.SetTOUName(aTypeLB.GetSelectEntry()); 1324 1325 if(aFromOLECB.IsChecked()) 1326 nContentOptions |= nsSwTOXElement::TOX_OLE; 1327 if(aFromTablesCB.IsChecked()) 1328 nContentOptions |= nsSwTOXElement::TOX_TABLE; 1329 if(aFromFramesCB.IsChecked()) 1330 nContentOptions |= nsSwTOXElement::TOX_FRAME; 1331 if(aFromGraphicsCB.IsChecked()) 1332 nContentOptions |= nsSwTOXElement::TOX_GRAPHIC; 1333 } 1334 break; 1335 case TOX_INDEX: 1336 { 1337 nContentOptions = nsSwTOXElement::TOX_MARK; 1338 1339 if(aCollectSameCB.IsChecked()) 1340 nIndexOptions |= nsSwTOIOptions::TOI_SAME_ENTRY; 1341 if(aUseFFCB.IsChecked()) 1342 nIndexOptions |= nsSwTOIOptions::TOI_FF; 1343 if(aUseDashCB.IsChecked()) 1344 nIndexOptions |= nsSwTOIOptions::TOI_DASH; 1345 if(aCaseSensitiveCB.IsChecked()) 1346 nIndexOptions |= nsSwTOIOptions::TOI_CASE_SENSITIVE; 1347 if(aInitialCapsCB.IsChecked()) 1348 nIndexOptions |= nsSwTOIOptions::TOI_INITIAL_CAPS; 1349 if(aKeyAsEntryCB.IsChecked()) 1350 nIndexOptions |= nsSwTOIOptions::TOI_KEY_AS_ENTRY; 1351 if(aFromFileCB.IsChecked()) 1352 rDesc.SetAutoMarkURL(sAutoMarkURL); 1353 else 1354 rDesc.SetAutoMarkURL(aEmptyStr); 1355 } 1356 break; 1357 case TOX_ILLUSTRATIONS: 1358 case TOX_TABLES : 1359 rDesc.SetCreateFromObjectNames(aFromObjectNamesRB.IsChecked()); 1360 rDesc.SetSequenceName(aCaptionSequenceLB.GetSelectEntry()); 1361 rDesc.SetCaptionDisplay((SwCaptionDisplay)aDisplayTypeLB.GetSelectEntryPos()); 1362 break; 1363 case TOX_OBJECTS: 1364 { 1365 long nOLEData = 0; 1366 for(sal_uInt16 i = 0; i < aFromObjCLB.GetEntryCount(); i++) 1367 { 1368 if(aFromObjCLB.IsChecked(i)) 1369 { 1370 long nData = (long)aFromObjCLB.GetEntryData(i); 1371 nOLEData |= nData; 1372 } 1373 } 1374 rDesc.SetOLEOptions((sal_uInt16)nOLEData); 1375 } 1376 break; 1377 case TOX_AUTHORITIES: 1378 { 1379 if(aBracketLB.GetSelectEntryPos()) 1380 rDesc.SetAuthBrackets(aBracketLB.GetSelectEntry()); 1381 else 1382 rDesc.SetAuthBrackets(aEmptyStr); 1383 rDesc.SetAuthSequence(aSequenceCB.IsChecked()); 1384 } 1385 break; 1386 } 1387 1388 rDesc.SetLevelFromChapter( aLevelFromChapterCB.IsVisible() && 1389 aLevelFromChapterCB.IsChecked()); 1390 if(aTOXMarksCB.IsChecked() && aTOXMarksCB.IsVisible()) 1391 nContentOptions |= nsSwTOXElement::TOX_MARK; 1392 if(aFromHeadingsCB.IsChecked() && aFromHeadingsCB.IsVisible()) 1393 nContentOptions |= nsSwTOXElement::TOX_OUTLINELEVEL; 1394 if(aAddStylesCB.IsChecked() && aAddStylesCB.IsVisible()) 1395 nContentOptions |= nsSwTOXElement::TOX_TEMPLATE; 1396 1397 rDesc.SetContentOptions(nContentOptions); 1398 rDesc.SetIndexOptions(nIndexOptions); 1399 rDesc.SetLevel( static_cast< sal_uInt8 >(aLevelNF.GetValue()) ); 1400 1401 rDesc.SetReadonly(aReadOnlyCB.IsChecked()); 1402 1403 for(sal_uInt16 i = 0; i < MAXLEVEL; i++) 1404 rDesc.SetStyleNames(aStyleArr[i], i); 1405 1406 rDesc.SetLanguage(aLanguageLB.GetSelectLanguage()); 1407 const String* pEntryData = (const String*)aSortAlgorithmLB.GetEntryData( 1408 aSortAlgorithmLB.GetSelectEntryPos() ); 1409 DBG_ASSERT(pEntryData, "no entry data available"); 1410 if(pEntryData) 1411 rDesc.SetSortAlgorithm(*pEntryData); 1412 } 1413 /* -----------------05.07.99 15:09------------------- 1414 1415 --------------------------------------------------*/ 1416 void SwTOXSelectTabPage::Reset( const SfxItemSet& ) 1417 { 1418 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 1419 SwWrtShell& rSh = pTOXDlg->GetWrtShell(); 1420 const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); 1421 long nData = lcl_TOXTypesToUserData(aCurType); 1422 aTypeLB.SelectEntryPos(aTypeLB.GetEntryPos((void*)nData)); 1423 1424 sAutoMarkURL = INetURLObject::decode( rSh.GetTOIAutoMarkURL(), 1425 INET_HEX_ESCAPE, 1426 INetURLObject::DECODE_UNAMBIGUOUS, 1427 RTL_TEXTENCODING_UTF8 ); 1428 aFromFileCB.Check( 0 != sAutoMarkURL.Len() ); 1429 1430 aCaptionSequenceLB.Clear(); 1431 sal_uInt16 i, nCount = rSh.GetFldTypeCount(RES_SETEXPFLD); 1432 for (i = 0; i < nCount; i++) 1433 { 1434 SwFieldType *pType = rSh.GetFldType( i, RES_SETEXPFLD ); 1435 if( pType->Which() == RES_SETEXPFLD && 1436 ((SwSetExpFieldType *) pType)->GetType() & nsSwGetSetExpType::GSE_SEQ ) 1437 aCaptionSequenceLB.InsertEntry(pType->GetName()); 1438 } 1439 1440 if(pTOXDlg->IsTOXEditMode()) 1441 { 1442 aTypeFT.Enable(sal_False); 1443 aTypeLB.Enable(sal_False); 1444 } 1445 TOXTypeHdl(&aTypeLB); 1446 CheckBoxHdl(&aAddStylesCB); 1447 } 1448 /*-- 14.06.99 13:10:52--------------------------------------------------- 1449 1450 -----------------------------------------------------------------------*/ 1451 void SwTOXSelectTabPage::ActivatePage( const SfxItemSet& ) 1452 { 1453 //nothing to do 1454 } 1455 /*-- 14.06.99 13:11:00--------------------------------------------------- 1456 1457 -----------------------------------------------------------------------*/ 1458 int SwTOXSelectTabPage::DeactivatePage( SfxItemSet* _pSet ) 1459 { 1460 if(_pSet) 1461 _pSet->Put(SfxUInt16Item(FN_PARAM_TOX_TYPE, 1462 (sal_uInt16)(long)aTypeLB.GetEntryData( aTypeLB.GetSelectEntryPos() ))); 1463 FillTOXDescription(); 1464 return LEAVE_PAGE; 1465 } 1466 /* -----------------14.06.99 13:10------------------- 1467 1468 --------------------------------------------------*/ 1469 SfxTabPage* SwTOXSelectTabPage::Create( Window* pParent, const SfxItemSet& rAttrSet) 1470 { 1471 return new SwTOXSelectTabPage(pParent, rAttrSet); 1472 } 1473 /* -----------------14.06.99 13:10------------------- 1474 1475 --------------------------------------------------*/ 1476 IMPL_LINK(SwTOXSelectTabPage, TOXTypeHdl, ListBox*, pBox) 1477 { 1478 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 1479 if(!bFirstCall) 1480 { 1481 // save current values into the proper TOXDescription 1482 FillTOXDescription(); 1483 } 1484 bFirstCall = sal_False; 1485 const sal_uInt16 nType = sal::static_int_cast< sal_uInt16 >(reinterpret_cast< sal_uIntPtr >( 1486 pBox->GetEntryData( pBox->GetSelectEntryPos() ))); 1487 CurTOXType eCurType = lcl_UserData2TOXTypes(nType); 1488 pTOXDlg->SetCurrentTOXType(eCurType); 1489 1490 aAreaLB.Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) ); 1491 aLevelFT.Show( 0 != (nType & (TO_CONTENT)) ); 1492 aLevelNF.Show( 0 != (nType & (TO_CONTENT)) ); 1493 aLevelFromChapterCB.Show( 0 != (nType & (TO_USER)) ); 1494 aAreaFT.Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) ); 1495 aAreaFL.Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_INDEX|TO_TABLE|TO_OBJECT)) ); 1496 1497 aFromHeadingsCB.Show( 0 != (nType & (TO_CONTENT)) ); 1498 // aChapterDlgPB.Show( 0 != (nType & (TO_CONTENT)) );//#outline level,removed by zhaojianwei 1499 aAddStylesCB.Show( 0 != (nType & (TO_CONTENT|TO_USER)) ); 1500 aAddStylesPB.Show( 0 != (nType & (TO_CONTENT|TO_USER)) ); 1501 1502 aFromTablesCB.Show( 0 != (nType & (TO_USER)) ); 1503 aFromFramesCB.Show( 0 != (nType & (TO_USER)) ); 1504 aFromGraphicsCB.Show( 0 != (nType & (TO_USER)) ); 1505 aFromOLECB.Show( 0 != (nType & (TO_USER)) ); 1506 1507 aFromCaptionsRB.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); 1508 aFromObjectNamesRB.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); 1509 1510 aTOXMarksCB.Show( 0 != (nType & (TO_CONTENT|TO_USER)) ); 1511 1512 aCreateFromFL.Show( 0 != (nType & (TO_CONTENT|TO_ILLUSTRATION|TO_USER|TO_TABLE)) ); 1513 aCaptionSequenceFT.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); 1514 aCaptionSequenceLB.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); 1515 aDisplayTypeFT.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); 1516 aDisplayTypeLB.Show( 0 != (nType & (TO_ILLUSTRATION|TO_TABLE)) ); 1517 1518 aSequenceCB.Show( 0 != (nType & TO_AUTHORITIES) ); 1519 aBracketFT.Show( 0 != (nType & TO_AUTHORITIES) ); 1520 aBracketLB.Show( 0 != (nType & TO_AUTHORITIES) ); 1521 aAuthorityFormatFL.Show( 0 != (nType & TO_AUTHORITIES) ); 1522 1523 sal_Bool bEnableSortLanguage = 0 != (nType & (TO_INDEX|TO_AUTHORITIES)); 1524 aSortOptionsFL.Show(bEnableSortLanguage); 1525 aLanguageFT.Show(bEnableSortLanguage); 1526 aLanguageLB.Show(bEnableSortLanguage); 1527 aSortAlgorithmFT.Show(bEnableSortLanguage); 1528 aSortAlgorithmLB.Show(bEnableSortLanguage); 1529 1530 //if(nType & TO_CONTENT) //#outline level,removed by zhaojianwei 1531 //{ 1532 //Point aPos(aAddStylesPB.GetPosPixel()); 1533 //aPos.X() = aChapterDlgPB.GetPosPixel().X(); 1534 //aAddStylesPB.SetPosPixel(aPos); 1535 //} 1536 //else if( nType & TO_ILLUSTRATION )//<-removed end. 1537 // initialize button positions 1538 1539 //#i111993# add styles button has two different positions 1540 if( !aAddStylesPosDef.X() ) 1541 { 1542 aAddStylesPosDef = ( aAddStylesPB.GetPosPixel() ); 1543 // move left! 1544 Point aPos(aAddStylesPosDef); 1545 aPos.X() -= 2 * aAddStylesPB.GetSizePixel().Width(); 1546 aAddStylesPosUser = aPos; 1547 } 1548 1549 if( nType & TO_ILLUSTRATION ) //add by zhaojianwei 1550 aCaptionSequenceLB.SelectEntry( SwStyleNameMapper::GetUIName( 1551 RES_POOLCOLL_LABEL_ABB, aEmptyStr )); 1552 else if( nType & TO_TABLE ) 1553 aCaptionSequenceLB.SelectEntry( SwStyleNameMapper::GetUIName( 1554 RES_POOLCOLL_LABEL_TABLE, aEmptyStr )); 1555 else if( nType & TO_USER ) 1556 { 1557 aAddStylesCB.SetText(sAddStyleUser); 1558 aAddStylesPB.SetPosPixel(aAddStylesPosUser); 1559 } 1560 else if( nType & TO_CONTENT ) 1561 { 1562 aAddStylesPB.SetPosPixel(aAddStylesPosDef); 1563 } 1564 1565 aCollectSameCB.Show( 0 != (nType & TO_INDEX) ); 1566 aUseFFCB.Show( 0 != (nType & TO_INDEX) ); 1567 aUseDashCB.Show( 0 != (nType & TO_INDEX) ); 1568 aCaseSensitiveCB.Show( 0 != (nType & TO_INDEX) ); 1569 aInitialCapsCB.Show( 0 != (nType & TO_INDEX) ); 1570 aKeyAsEntryCB.Show( 0 != (nType & TO_INDEX) ); 1571 aFromFileCB.Show( 0 != (nType & TO_INDEX) ); 1572 aAutoMarkPB.Show( 0 != (nType & TO_INDEX) ); 1573 // aCreateAutoMarkPB.Show(nType &TO_INDEX); 1574 // aEditAutoMarkPB.Show(nType & TO_INDEX); 1575 1576 aIdxOptionsFL.Show( 0 != (nType & TO_INDEX) ); 1577 1578 //object index 1579 aFromObjCLB.Show( 0 != (nType & TO_OBJECT) ); 1580 aFromObjFL.Show( 0 != (nType & TO_OBJECT) ); 1581 1582 //move controls 1583 aAddStylesCB.SetPosPixel(nType & TO_USER ? aCBLeftPos1 : aCBLeftPos2); 1584 Point aPBPos(aAddStylesPB.GetPosPixel()); 1585 aPBPos.Y() = nType & TO_USER ? aCBLeftPos1.Y() : aCBLeftPos2.Y(); 1586 aAddStylesPB.SetPosPixel(aPBPos); 1587 aTOXMarksCB.SetPosPixel(nType & TO_USER ? aCBLeftPos2 : aCBLeftPos3); 1588 //set control values from the proper TOXDescription 1589 { 1590 ApplyTOXDescription(); 1591 } 1592 ModifyHdl(0); 1593 return 0; 1594 } 1595 /* -----------------30.11.99 12:48------------------- 1596 1597 --------------------------------------------------*/ 1598 IMPL_LINK(SwTOXSelectTabPage, ModifyHdl, void*, EMPTYARG) 1599 { 1600 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 1601 if(pTOXDlg) 1602 { 1603 FillTOXDescription(); 1604 pTOXDlg->CreateOrUpdateExample(pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_SELECT); 1605 } 1606 return 0; 1607 } 1608 /* -----------------05.07.99 10:13------------------- 1609 1610 --------------------------------------------------*/ 1611 IMPL_LINK(SwTOXSelectTabPage, CheckBoxHdl, CheckBox*, pBox ) 1612 { 1613 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 1614 const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); 1615 if(TOX_CONTENT == aCurType.eType) 1616 { 1617 //at least one of the three CheckBoxes must be checked 1618 if(!aAddStylesCB.IsChecked() && !aFromHeadingsCB.IsChecked() && !aTOXMarksCB.IsChecked()) 1619 { 1620 //TODO: InfoBox? 1621 pBox->Check(sal_True); 1622 } 1623 aAddStylesPB.Enable(aAddStylesCB.IsChecked()); 1624 //aChapterDlgPB.Enable(aFromHeadingsCB.IsChecked());//#outline level,removed by zhaojianwei 1625 } 1626 if(TOX_USER == aCurType.eType) 1627 { 1628 aAddStylesPB.Enable(aAddStylesCB.IsChecked()); 1629 } 1630 else if(TOX_INDEX == aCurType.eType) 1631 { 1632 aAutoMarkPB.Enable(aFromFileCB.IsChecked()); 1633 aUseFFCB.Enable(aCollectSameCB.IsChecked() && !aUseDashCB.IsChecked()); 1634 aUseDashCB.Enable(aCollectSameCB.IsChecked() && !aUseFFCB.IsChecked()); 1635 aCaseSensitiveCB.Enable(aCollectSameCB.IsChecked()); 1636 } 1637 ModifyHdl(0); 1638 return 0; 1639 }; 1640 /* -----------------14.07.99 14:21------------------- 1641 1642 --------------------------------------------------*/ 1643 IMPL_LINK(SwTOXSelectTabPage, RadioButtonHdl, RadioButton*, EMPTYARG ) 1644 { 1645 sal_Bool bEnable = aFromCaptionsRB.IsChecked(); 1646 aCaptionSequenceFT.Enable(bEnable); 1647 aCaptionSequenceLB.Enable(bEnable); 1648 aDisplayTypeFT.Enable(bEnable); 1649 aDisplayTypeLB.Enable(bEnable); 1650 ModifyHdl(0); 1651 return 0; 1652 } 1653 /* -----------------------------06.06.01 09:33-------------------------------- 1654 1655 ---------------------------------------------------------------------------*/ 1656 IMPL_LINK(SwTOXSelectTabPage, LanguageHdl, ListBox*, pBox) 1657 { 1658 Locale aLcl( SvxCreateLocale( aLanguageLB.GetSelectLanguage() ) ); 1659 Sequence< OUString > aSeq = pIndexEntryWrapper->GetAlgorithmList( aLcl ); 1660 1661 if( !pIndexRes ) 1662 pIndexRes = new IndexEntryRessource(); 1663 1664 String sOldString; 1665 void* pUserData; 1666 if( 0 != (pUserData = aSortAlgorithmLB.GetEntryData( aSortAlgorithmLB.GetSelectEntryPos())) ) 1667 sOldString = *(String*)pUserData; 1668 void* pDel; 1669 sal_uInt16 nEnd = aSortAlgorithmLB.GetEntryCount(); 1670 for( sal_uInt16 n = 0; n < nEnd; ++n ) 1671 if( 0 != ( pDel = aSortAlgorithmLB.GetEntryData( n )) ) 1672 delete (String*)pDel; 1673 aSortAlgorithmLB.Clear(); 1674 1675 sal_uInt16 nInsPos; 1676 String sAlg, sUINm; 1677 nEnd = static_cast< sal_uInt16 >(aSeq.getLength()); 1678 for( sal_uInt16 nCnt = 0; nCnt < nEnd; ++nCnt ) 1679 { 1680 sUINm = pIndexRes->GetTranslation( sAlg = aSeq[ nCnt ] ); 1681 nInsPos = aSortAlgorithmLB.InsertEntry( sUINm ); 1682 aSortAlgorithmLB.SetEntryData( nInsPos, new String( sAlg )); 1683 if( sAlg == sOldString ) 1684 aSortAlgorithmLB.SelectEntryPos( nInsPos ); 1685 } 1686 1687 if( LISTBOX_ENTRY_NOTFOUND == aSortAlgorithmLB.GetSelectEntryPos() ) 1688 aSortAlgorithmLB.SelectEntryPos( 0 ); 1689 1690 if(pBox) 1691 ModifyHdl(0); 1692 return 0; 1693 }; 1694 /* -----------------14.06.99 13:10------------------- 1695 1696 --------------------------------------------------*/ 1697 IMPL_LINK(SwTOXSelectTabPage, TOXAreaHdl, ListBox*, pBox) 1698 { 1699 DBG_WARNING("not implemented"); 1700 switch((long)pBox->GetEntryData( pBox->GetSelectEntryPos() )) 1701 { 1702 case AREA_DOCUMENT : break; 1703 case AREA_CHAPTER : break; 1704 } 1705 return 0; 1706 } 1707 1708 //#outline level, removed by zhaojianwei 1709 //It is no longer used! 1710 ///* -----------------14.06.99 13:10------------------- 1711 // 1712 // --------------------------------------------------*/ 1713 //IMPL_LINK(SwTOXSelectTabPage, ChapterHdl, PushButton*, pButton) 1714 //{ 1715 // SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 1716 // SwWrtShell& rSh = pTOXDlg->GetWrtShell(); 1717 // 1718 // SfxItemSet aTmp(rSh.GetView().GetPool(), FN_PARAM_1, FN_PARAM_1); 1719 // SwOutlineTabDialog* pDlg = new SwOutlineTabDialog(pButton, &aTmp, rSh); 1720 // 1721 // if(RET_OK == pDlg->Execute()) 1722 // { 1723 // CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); 1724 // SwForm* pForm = ((SwMultiTOXTabDialog*)GetTabDialog())->GetForm(aCurType); 1725 // // jetzt muss ueberprueft werden, ob dem sdbcx::Index Ueberschriftenvorlagen 1726 // // zugewiesen wurden 1727 // String sStr; 1728 // for(sal_uInt16 i = 0; i < MAXLEVEL; i++) 1729 // { 1730 // sal_Bool bNum = !SwMultiTOXTabDialog::IsNoNum(rSh, pForm->GetTemplate( i + 1 )); 1731 // if(bNum) 1732 // { 1733 // //es gibt getrennte Resourcebereiche fuer die Inhaltsverzeichnisse 1734 // if(i < 5) 1735 // SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_TOX_CNTNT1 + i), sStr ); 1736 // else 1737 // SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(RES_POOLCOLL_TOX_CNTNT6 + i - 5), sStr ); 1738 // pForm->SetTemplate( i + 1, sStr ); 1739 // } 1740 // } 1741 // 1742 // } 1743 // delete pDlg; 1744 // return 0; 1745 //} 1746 /* -----------------14.06.99 13:10------------------- 1747 1748 --------------------------------------------------*/ 1749 IMPL_LINK(SwTOXSelectTabPage, AddStylesHdl, PushButton*, pButton) 1750 { 1751 SwAddStylesDlg_Impl* pDlg = new SwAddStylesDlg_Impl(pButton, 1752 ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(), 1753 aStyleArr); 1754 pDlg->Execute(); 1755 delete pDlg; 1756 ModifyHdl(0); 1757 return 0; 1758 } 1759 /* -----------------------------19.01.00 10:59-------------------------------- 1760 1761 ---------------------------------------------------------------------------*/ 1762 1763 IMPL_LINK(SwTOXSelectTabPage, MenuEnableHdl, Menu*, pMenu) 1764 { 1765 pMenu->EnableItem(MN_AUTOMARK_EDIT, sAutoMarkURL.Len() > 0); 1766 return 0; 1767 } 1768 1769 IMPL_LINK(SwTOXSelectTabPage, MenuExecuteHdl, Menu*, pMenu) 1770 { 1771 const String sSaveAutoMarkURL = sAutoMarkURL; 1772 switch(pMenu->GetCurItemId()) 1773 { 1774 case MN_AUTOMARK_OPEN: 1775 sAutoMarkURL = lcl_CreateAutoMarkFileDlg( 1776 sAutoMarkURL, sAutoMarkType, sal_True); 1777 break; 1778 case MN_AUTOMARK_NEW : 1779 sAutoMarkURL = lcl_CreateAutoMarkFileDlg( 1780 sAutoMarkURL, sAutoMarkType, sal_False); 1781 if( !sAutoMarkURL.Len() ) 1782 break; 1783 //no break 1784 case MN_AUTOMARK_EDIT: 1785 { 1786 sal_Bool bNew = pMenu->GetCurItemId()== MN_AUTOMARK_NEW; 1787 SwAutoMarkDlg_Impl* pAutoMarkDlg = new SwAutoMarkDlg_Impl( 1788 &aAutoMarkPB, sAutoMarkURL, sAutoMarkType, bNew ); 1789 1790 if( RET_OK != pAutoMarkDlg->Execute() && bNew ) 1791 sAutoMarkURL = sSaveAutoMarkURL; 1792 delete pAutoMarkDlg; 1793 1794 } 1795 break; 1796 } 1797 return 0; 1798 } 1799 1800 /* -----------------16.06.99 10:46------------------- 1801 1802 --------------------------------------------------*/ 1803 class SwTOXEdit : public Edit 1804 { 1805 SwFormToken aFormToken; 1806 Link aPrevNextControlLink; 1807 sal_Bool bNextControl; 1808 SwTokenWindow* m_pParent; 1809 public: 1810 SwTOXEdit( Window* pParent, SwTokenWindow* pTokenWin, 1811 const SwFormToken& aToken) 1812 : Edit( pParent, WB_BORDER|WB_TABSTOP|WB_CENTER), 1813 aFormToken(aToken), 1814 bNextControl(sal_False), 1815 m_pParent( pTokenWin ) 1816 { 1817 SetHelpId( HID_TOX_ENTRY_EDIT ); 1818 } 1819 1820 virtual void KeyInput( const KeyEvent& rKEvt ); 1821 virtual void RequestHelp( const HelpEvent& rHEvt ); 1822 1823 sal_Bool IsNextControl() const {return bNextControl;} 1824 void SetPrevNextLink( const Link& rLink ) {aPrevNextControlLink = rLink;} 1825 1826 const SwFormToken& GetFormToken() 1827 { 1828 aFormToken.sText = GetText(); 1829 return aFormToken; 1830 } 1831 1832 void SetCharStyleName(const String& rSet, sal_uInt16 nPoolId) 1833 { 1834 aFormToken.sCharStyleName = rSet; 1835 aFormToken.nPoolId = nPoolId; 1836 } 1837 1838 void AdjustSize(); 1839 }; 1840 1841 //--------------------------------------------------- 1842 void SwTOXEdit::RequestHelp( const HelpEvent& rHEvt ) 1843 { 1844 if(!m_pParent->CreateQuickHelp(this, aFormToken, rHEvt)) 1845 Edit::RequestHelp(rHEvt); 1846 } 1847 //--------------------------------------------------- 1848 void SwTOXEdit::KeyInput( const KeyEvent& rKEvt ) 1849 { 1850 const Selection& rSel = GetSelection(); 1851 sal_uInt16 nTextLen = GetText().Len(); 1852 if( (rSel.A() == rSel.B() && 1853 !rSel.A() ) || rSel.A() == nTextLen ) 1854 { 1855 sal_Bool bCall = sal_False; 1856 KeyCode aCode = rKEvt.GetKeyCode(); 1857 if(aCode.GetCode() == KEY_RIGHT && rSel.A() == nTextLen) 1858 { 1859 bNextControl = sal_True; 1860 bCall = sal_True; 1861 } 1862 else if(aCode.GetCode() == KEY_LEFT && !rSel.A() ) 1863 { 1864 bNextControl = sal_False; 1865 bCall = sal_True; 1866 } 1867 1868 if(bCall && aPrevNextControlLink.IsSet()) 1869 aPrevNextControlLink.Call(this); 1870 1871 } 1872 Edit::KeyInput(rKEvt); 1873 } 1874 /* -----------------16.07.99 12:41------------------- 1875 1876 --------------------------------------------------*/ 1877 void SwTOXEdit::AdjustSize() 1878 { 1879 Size aSize(GetSizePixel()); 1880 Size aTextSize(GetTextWidth(GetText()), GetTextHeight()); 1881 aTextSize = LogicToPixel(aTextSize); 1882 aSize.Width() = aTextSize.Width() + EDIT_MINWIDTH; 1883 SetSizePixel(aSize); 1884 } 1885 1886 //--------------------------------------------------- 1887 //--------------------------------------------------- 1888 class SwTOXButton : public PushButton 1889 { 1890 SwFormToken aFormToken; 1891 Link aPrevNextControlLink; 1892 sal_Bool bNextControl; 1893 SwTokenWindow* m_pParent; 1894 public: 1895 SwTOXButton( Window* pParent, SwTokenWindow* pTokenWin, 1896 const SwFormToken& rToken) 1897 : PushButton(pParent, WB_BORDER|WB_TABSTOP), 1898 aFormToken(rToken), 1899 bNextControl(sal_False), 1900 m_pParent(pTokenWin) 1901 { 1902 SetHelpId(HID_TOX_ENTRY_BUTTON); 1903 } 1904 1905 virtual void KeyInput( const KeyEvent& rKEvt ); 1906 virtual void RequestHelp( const HelpEvent& rHEvt ); 1907 1908 sal_Bool IsNextControl() const {return bNextControl;} 1909 void SetPrevNextLink(const Link& rLink) {aPrevNextControlLink = rLink;} 1910 const SwFormToken& GetFormToken() const {return aFormToken;} 1911 1912 void SetCharStyleName(const String& rSet, sal_uInt16 nPoolId) 1913 { 1914 aFormToken.sCharStyleName = rSet; 1915 aFormToken.nPoolId = nPoolId; 1916 } 1917 1918 void SetTabPosition(SwTwips nSet) 1919 { aFormToken.nTabStopPosition = nSet; } 1920 1921 void SetFillChar( sal_Unicode cSet ) 1922 { aFormToken.cTabFillChar = cSet; } 1923 1924 void SetTabAlign(SvxTabAdjust eAlign) 1925 { aFormToken.eTabAlign = eAlign;} 1926 1927 //---> i89791 1928 //used for entry number format, in TOC only 1929 //needed for different UI dialog position 1930 void SetEntryNumberFormat(sal_uInt16 nSet) { 1931 switch(nSet) 1932 { 1933 default: 1934 case 0: 1935 aFormToken.nChapterFormat = CF_NUMBER; 1936 break; 1937 case 1: 1938 aFormToken.nChapterFormat = CF_NUM_NOPREPST_TITLE; 1939 break; 1940 } 1941 } 1942 1943 void SetChapterInfo(sal_uInt16 nSet) { 1944 switch(nSet) 1945 { 1946 default: 1947 case 0: 1948 aFormToken.nChapterFormat = CF_NUM_NOPREPST_TITLE; 1949 break; 1950 case 1: 1951 aFormToken.nChapterFormat = CF_TITLE; 1952 break; 1953 case 2: 1954 aFormToken.nChapterFormat = CF_NUMBER_NOPREPST; 1955 break; 1956 } 1957 } 1958 //<--- 1959 sal_uInt16 GetChapterInfo() const{ return aFormToken.nChapterFormat;} 1960 1961 void SetOutlineLevel( sal_uInt16 nSet ) { aFormToken.nOutlineLevel = nSet;}//i53420 1962 sal_uInt16 GetOutlineLevel() const{ return aFormToken.nOutlineLevel;} 1963 1964 void SetLinkEnd() 1965 { 1966 DBG_ASSERT(TOKEN_LINK_START == aFormToken.eTokenType, 1967 "call SetLinkEnd for link start only!"); 1968 aFormToken.eTokenType = TOKEN_LINK_END; 1969 aFormToken.sText.AssignAscii(SwForm::aFormLinkEnd); 1970 SetText(aFormToken.sText); 1971 } 1972 void SetLinkStart() 1973 { 1974 DBG_ASSERT(TOKEN_LINK_END == aFormToken.eTokenType, 1975 "call SetLinkStart for link start only!"); 1976 aFormToken.eTokenType = TOKEN_LINK_START; 1977 aFormToken.sText.AssignAscii(SwForm::aFormLinkStt); 1978 SetText(aFormToken.sText); 1979 } 1980 }; 1981 1982 //--------------------------------------------------- 1983 void SwTOXButton::KeyInput( const KeyEvent& rKEvt ) 1984 { 1985 sal_Bool bCall = sal_False; 1986 KeyCode aCode = rKEvt.GetKeyCode(); 1987 if(aCode.GetCode() == KEY_RIGHT) 1988 { 1989 bNextControl = sal_True; 1990 bCall = sal_True; 1991 } 1992 else if(aCode.GetCode() == KEY_LEFT ) 1993 { 1994 bNextControl = sal_False; 1995 bCall = sal_True; 1996 } 1997 else if(aCode.GetCode() == KEY_DELETE) 1998 { 1999 m_pParent->RemoveControl(this, sal_True); 2000 //this is invalid here 2001 return; 2002 } 2003 if(bCall && aPrevNextControlLink.IsSet()) 2004 aPrevNextControlLink.Call(this); 2005 else 2006 PushButton::KeyInput(rKEvt); 2007 } 2008 //--------------------------------------------------- 2009 void SwTOXButton::RequestHelp( const HelpEvent& rHEvt ) 2010 { 2011 if(!m_pParent->CreateQuickHelp(this, aFormToken, rHEvt)) 2012 Button::RequestHelp(rHEvt); 2013 } 2014 /* -----------------------------23.12.99 14:28-------------------------------- 2015 2016 ---------------------------------------------------------------------------*/ 2017 SwIdxTreeListBox::SwIdxTreeListBox(SwTOXEntryTabPage* pPar, const ResId& rResId) : 2018 SvTreeListBox(pPar, rResId), 2019 pParent(pPar) 2020 { 2021 } 2022 /* -----------------------------23.12.99 14:19-------------------------------- 2023 2024 ---------------------------------------------------------------------------*/ 2025 void SwIdxTreeListBox::RequestHelp( const HelpEvent& rHEvt ) 2026 { 2027 if( rHEvt.GetMode() & HELPMODE_QUICK ) 2028 { 2029 Point aPos( ScreenToOutputPixel( rHEvt.GetMousePosPixel() )); 2030 SvLBoxEntry* pEntry = GetEntry( aPos ); 2031 if( pEntry ) 2032 { 2033 sal_uInt16 nLevel = static_cast< sal_uInt16 >(GetModel()->GetAbsPos(pEntry)); 2034 String sEntry = pParent->GetLevelHelp(++nLevel); 2035 if('*' == sEntry) 2036 sEntry = GetEntryText(pEntry); 2037 if(sEntry.Len()) 2038 { 2039 SvLBoxTab* pTab; 2040 SvLBoxItem* pItem = GetItem( pEntry, aPos.X(), &pTab ); 2041 if( pItem && SV_ITEM_ID_LBOXSTRING == pItem->IsA()) 2042 { 2043 aPos = GetEntryPosition( pEntry ); 2044 2045 aPos.X() = GetTabPos( pEntry, pTab ); 2046 Size aSize( pItem->GetSize( this, pEntry ) ); 2047 2048 if((aPos.X() + aSize.Width()) > GetSizePixel().Width()) 2049 aSize.Width() = GetSizePixel().Width() - aPos.X(); 2050 2051 aPos = OutputToScreenPixel(aPos); 2052 Rectangle aItemRect( aPos, aSize ); 2053 Help::ShowQuickHelp( this, aItemRect, sEntry, 2054 QUICKHELP_LEFT|QUICKHELP_VCENTER ); 2055 } 2056 } 2057 } 2058 } 2059 else 2060 SvTreeListBox::RequestHelp(rHEvt); 2061 } 2062 //--------------------------------------------------- 2063 SwTOXEntryTabPage::SwTOXEntryTabPage(Window* pParent, const SfxItemSet& rAttrSet) : 2064 SfxTabPage(pParent, SW_RES(TP_TOX_ENTRY), rAttrSet), 2065 aLevelFT(this, SW_RES(FT_LEVEL )), 2066 aLevelLB(this, SW_RES(LB_LEVEL )), 2067 aEntryFL(this, SW_RES(FL_ENTRY )), 2068 2069 aTokenFT(this, SW_RES(FT_TOKEN )), 2070 aTokenWIN(this, SW_RES(WIN_TOKEN )), 2071 aAllLevelsPB(this, SW_RES(PB_ALL_LEVELS )), 2072 2073 aEntryNoPB(this, SW_RES(PB_ENTRYNO )), 2074 aEntryPB(this, SW_RES(PB_ENTRY )), 2075 aTabPB(this, SW_RES(PB_TAB )), 2076 aChapterInfoPB(this, SW_RES(PB_CHAPTERINFO )), 2077 aPageNoPB(this, SW_RES(PB_PAGENO )), 2078 aHyperLinkPB(this, SW_RES(PB_HYPERLINK )), 2079 2080 aAuthFieldsLB(this, SW_RES(LB_AUTHFIELD )), 2081 aAuthInsertPB(this, SW_RES(PB_AUTHINSERT )), 2082 aAuthRemovePB(this, SW_RES(PB_AUTHREMOVE )), 2083 2084 aCharStyleFT(this, SW_RES(FT_CHARSTYLE )), 2085 aCharStyleLB(this, SW_RES(LB_CHARSTYLE )), 2086 aEditStylePB(this, SW_RES(PB_EDITSTYLE )), 2087 2088 aChapterEntryFT(this, SW_RES(FT_CHAPTERENTRY )), 2089 aChapterEntryLB(this, SW_RES(LB_CHAPTERENTRY )), 2090 2091 aNumberFormatFT(this, SW_RES(FT_ENTRY_NO )),//i53420 2092 aNumberFormatLB(this, SW_RES(LB_ENTRY_NO )), 2093 aEntryOutlineLevelFT(this, SW_RES(FT_LEVEL_OL )),//i53420 2094 aEntryOutlineLevelNF(this, SW_RES(NF_LEVEL_OL )), 2095 2096 aFillCharFT(this, SW_RES(FT_FILLCHAR )), 2097 aFillCharCB(this, SW_RES(CB_FILLCHAR )), 2098 aTabPosFT(this, SW_RES(FT_TABPOS )), 2099 aTabPosMF(this, SW_RES(MF_TABPOS )), 2100 aAutoRightCB(this, SW_RES(CB_AUTORIGHT )), 2101 aFormatFL(this, SW_RES(FL_FORMAT )), 2102 2103 2104 aRelToStyleCB(this, SW_RES(CB_RELTOSTYLE )), 2105 aMainEntryStyleFT(this, SW_RES(FT_MAIN_ENTRY_STYLE)), 2106 aMainEntryStyleLB(this, SW_RES(LB_MAIN_ENTRY_STYLE)), 2107 aAlphaDelimCB(this, SW_RES(CB_ALPHADELIM )), 2108 aCommaSeparatedCB(this, SW_RES(CB_COMMASEPARATED )), 2109 2110 aSortDocPosRB(this, SW_RES(RB_DOCPOS )), 2111 aSortContentRB(this, SW_RES(RB_SORTCONTENT )), 2112 aSortingFL(this, SW_RES(FL_SORTING )), 2113 2114 aFirstKeyFT(this, SW_RES(FT_FIRSTKEY )), 2115 aFirstKeyLB(this, SW_RES(LB_FIRSTKEY )), 2116 aFirstSortUpRB(this, SW_RES(RB_SORTUP1 )), 2117 aFirstSortDownRB(this, SW_RES(RB_SORTDOWN1 )), 2118 2119 aSecondKeyFT(this, SW_RES(FT_SECONDKEY )), 2120 aSecondKeyLB(this, SW_RES(LB_SECONDKEY )), 2121 aSecondSortUpRB(this, SW_RES(RB_SORTUP2 )), 2122 aSecondSortDownRB(this, SW_RES(RB_SORTDOWN2 )), 2123 2124 aThirdKeyFT(this, SW_RES(FT_THIRDDKEY )), 2125 aThirdKeyLB(this, SW_RES(LB_THIRDKEY )), 2126 aThirdSortUpRB(this, SW_RES(RB_SORTUP3 )), 2127 aThirdSortDownRB(this, SW_RES(RB_SORTDOWN3 )), 2128 2129 aSortKeyFL(this, SW_RES(FL_SORTKEY )), 2130 2131 sDelimStr( SW_RES(STR_DELIM)), 2132 sAuthTypeStr( SW_RES(ST_AUTHTYPE)), 2133 2134 sNoCharStyle( SW_RES(STR_NO_CHAR_STYLE)), 2135 sNoCharSortKey( SW_RES(STR_NOSORTKEY )), 2136 m_pCurrentForm(0), 2137 bInLevelHdl(sal_False) 2138 { 2139 aEditStylePB.SetAccessibleRelationMemberOf(&aEntryFL); 2140 aHyperLinkPB.SetAccessibleRelationMemberOf(&aEntryFL); 2141 aPageNoPB.SetAccessibleRelationMemberOf(&aEntryFL); 2142 aTabPB.SetAccessibleRelationMemberOf(&aEntryFL); 2143 aEntryPB.SetAccessibleRelationMemberOf(&aEntryFL); 2144 aEntryNoPB.SetAccessibleRelationMemberOf(&aEntryFL); 2145 aAllLevelsPB.SetAccessibleRelationMemberOf(&aEntryFL); 2146 aTokenWIN.SetAccessibleRelationMemberOf(&aEntryFL); 2147 aTokenWIN.SetAccessibleRelationLabeledBy(&aTokenFT); 2148 2149 Image aSortUpHC(SW_RES(IMG_SORTUP_HC )); 2150 aFirstSortUpRB.SetModeRadioImage(aSortUpHC,BMP_COLOR_HIGHCONTRAST); 2151 aSecondSortUpRB.SetModeRadioImage(aSortUpHC,BMP_COLOR_HIGHCONTRAST); 2152 aThirdSortUpRB.SetModeRadioImage(aSortUpHC,BMP_COLOR_HIGHCONTRAST); 2153 2154 Image aSortDownHC(SW_RES(IMG_SORTDOWN_HC )); 2155 aFirstSortDownRB.SetModeRadioImage(aSortDownHC,BMP_COLOR_HIGHCONTRAST); 2156 aSecondSortDownRB.SetModeRadioImage(aSortDownHC,BMP_COLOR_HIGHCONTRAST); 2157 aThirdSortDownRB.SetModeRadioImage(aSortDownHC,BMP_COLOR_HIGHCONTRAST); 2158 FreeResource(); 2159 2160 sLevelStr = aLevelFT.GetText(); 2161 aLevelLB.SetStyle( aLevelLB.GetStyle() | WB_HSCROLL ); 2162 aLevelLB.SetSpaceBetweenEntries(0); 2163 aLevelLB.SetSelectionMode( SINGLE_SELECTION ); 2164 aLevelLB.SetHighlightRange(); // select full width 2165 aLevelLB.SetHelpId(HID_INSERT_INDEX_ENTRY_LEVEL_LB); 2166 aLevelLB.Show(); 2167 2168 aLastTOXType.eType = (TOXTypes)USHRT_MAX; 2169 aLastTOXType.nIndex = 0; 2170 //aLevelGBSize = aLevelGB.GetSizePixel(); 2171 aLevelFLSize = aLevelFT.GetSizePixel(); 2172 2173 SetExchangeSupport(); 2174 aEntryNoPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); 2175 aEntryPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); 2176 aChapterInfoPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); 2177 aPageNoPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); 2178 aTabPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); 2179 aHyperLinkPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, InsertTokenHdl)); 2180 aEditStylePB.SetClickHdl(LINK(this, SwTOXEntryTabPage, EditStyleHdl)); 2181 aLevelLB.SetSelectHdl(LINK(this, SwTOXEntryTabPage, LevelHdl)); 2182 aTokenWIN.SetButtonSelectedHdl(LINK(this, SwTOXEntryTabPage, TokenSelectedHdl)); 2183 aTokenWIN.SetModifyHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl)); 2184 aCharStyleLB.SetSelectHdl(LINK(this, SwTOXEntryTabPage, StyleSelectHdl)); 2185 aCharStyleLB.InsertEntry(sNoCharStyle); 2186 aChapterEntryLB.SetSelectHdl(LINK(this, SwTOXEntryTabPage, ChapterInfoHdl)); 2187 aEntryOutlineLevelNF.SetModifyHdl(LINK(this, SwTOXEntryTabPage, ChapterInfoOutlineHdl)); 2188 aNumberFormatLB.SetSelectHdl(LINK(this, SwTOXEntryTabPage, NumberFormatHdl)); 2189 2190 aTabPosMF.SetModifyHdl(LINK(this, SwTOXEntryTabPage, TabPosHdl)); 2191 aFillCharCB.SetModifyHdl(LINK(this, SwTOXEntryTabPage, FillCharHdl)); 2192 aAutoRightCB.SetClickHdl(LINK(this, SwTOXEntryTabPage, AutoRightHdl)); 2193 aAuthInsertPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, RemoveInsertAuthHdl)); 2194 aAuthRemovePB.SetClickHdl(LINK(this, SwTOXEntryTabPage, RemoveInsertAuthHdl)); 2195 aSortDocPosRB.SetClickHdl(LINK(this, SwTOXEntryTabPage, SortKeyHdl)); 2196 aSortContentRB.SetClickHdl(LINK(this, SwTOXEntryTabPage, SortKeyHdl)); 2197 aAllLevelsPB.SetClickHdl(LINK(this, SwTOXEntryTabPage, AllLevelsHdl)); 2198 2199 aAlphaDelimCB.SetClickHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl)); 2200 aCommaSeparatedCB.SetClickHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl)); 2201 aRelToStyleCB.SetClickHdl(LINK(this, SwTOXEntryTabPage, ModifyHdl)); 2202 2203 FieldUnit aMetric = ::GetDfltMetric(sal_False); 2204 SetMetric(aTabPosMF, aMetric); 2205 2206 aSortDocPosRB.Check(); 2207 2208 aFillCharCB.SetMaxTextLen(1); 2209 aFillCharCB.InsertEntry(' '); 2210 aFillCharCB.InsertEntry('.'); 2211 aFillCharCB.InsertEntry('-'); 2212 aFillCharCB.InsertEntry('_'); 2213 2214 aButtonPositions[0] = aEntryNoPB.GetPosPixel(); 2215 aButtonPositions[1] = aEntryPB.GetPosPixel(); 2216 aButtonPositions[2] = aChapterInfoPB.GetPosPixel(); 2217 aButtonPositions[3] = aPageNoPB.GetPosPixel(); 2218 aButtonPositions[4] = aTabPB.GetPosPixel(); 2219 2220 aRelToStylePos = aRelToStyleCB.GetPosPixel(); 2221 aRelToStyleIdxPos = aCommaSeparatedCB.GetPosPixel(); 2222 aRelToStyleIdxPos.Y() += 2223 (aRelToStyleIdxPos.Y() - aAlphaDelimCB.GetPosPixel().Y()); 2224 aEditStylePB.Enable(sal_False); 2225 2226 //get position for Numbering and other stuff 2227 aChapterEntryFTPosition = aChapterEntryFT.GetPosPixel(); 2228 aEntryOutlineLevelFTPosition = aEntryOutlineLevelFT.GetPosPixel(); 2229 nBiasToEntryPoint = aEntryOutlineLevelNF.GetPosPixel().X() - 2230 aEntryOutlineLevelFT.GetPosPixel().X(); 2231 2232 //fill the types in 2233 sal_uInt16 i; 2234 for( i = 0; i < AUTH_FIELD_END; i++) 2235 { 2236 String sTmp(SW_RES(STR_AUTH_FIELD_START + i)); 2237 sal_uInt16 nPos = aAuthFieldsLB.InsertEntry(sTmp); 2238 aAuthFieldsLB.SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(i))); 2239 } 2240 sal_uInt16 nPos = aFirstKeyLB.InsertEntry(sNoCharSortKey); 2241 aFirstKeyLB.SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(USHRT_MAX))); 2242 nPos = aSecondKeyLB.InsertEntry(sNoCharSortKey); 2243 aSecondKeyLB.SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(USHRT_MAX))); 2244 nPos = aThirdKeyLB.InsertEntry(sNoCharSortKey); 2245 aThirdKeyLB.SetEntryData(nPos, reinterpret_cast< void * >(sal::static_int_cast< sal_uIntPtr >(USHRT_MAX))); 2246 2247 for( i = 0; i < AUTH_FIELD_END; i++) 2248 { 2249 String sTmp(aAuthFieldsLB.GetEntry(i)); 2250 void* pEntryData = aAuthFieldsLB.GetEntryData(i); 2251 nPos = aFirstKeyLB.InsertEntry(sTmp); 2252 aFirstKeyLB.SetEntryData(nPos, pEntryData); 2253 nPos = aSecondKeyLB.InsertEntry(sTmp); 2254 aSecondKeyLB.SetEntryData(nPos, pEntryData); 2255 nPos = aThirdKeyLB.InsertEntry(sTmp); 2256 aThirdKeyLB.SetEntryData(nPos, pEntryData); 2257 } 2258 aFirstKeyLB.SelectEntryPos(0); 2259 aSecondKeyLB.SelectEntryPos(0); 2260 aThirdKeyLB.SelectEntryPos(0); 2261 } 2262 /* -----------------30.11.99 13:37------------------- 2263 pVoid is used as signal to change all levels of the example 2264 --------------------------------------------------*/ 2265 IMPL_LINK(SwTOXEntryTabPage, ModifyHdl, void*, pVoid) 2266 { 2267 UpdateDescriptor(); 2268 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 2269 2270 if(pTOXDlg) 2271 { 2272 sal_uInt16 nCurLevel = static_cast< sal_uInt16 >(aLevelLB.GetModel()->GetAbsPos(aLevelLB.FirstSelected()) + 1); 2273 if(aLastTOXType.eType == TOX_CONTENT && pVoid) 2274 nCurLevel = USHRT_MAX; 2275 pTOXDlg->CreateOrUpdateExample( 2276 pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_ENTRY, nCurLevel); 2277 } 2278 return 0; 2279 } 2280 2281 /*-- 16.06.99 10:47:33--------------------------------------------------- 2282 2283 -----------------------------------------------------------------------*/ 2284 SwTOXEntryTabPage::~SwTOXEntryTabPage() 2285 { 2286 } 2287 /*-- 16.06.99 10:47:33--------------------------------------------------- 2288 2289 -----------------------------------------------------------------------*/ 2290 sal_Bool SwTOXEntryTabPage::FillItemSet( SfxItemSet& ) 2291 { 2292 // nothing to do 2293 return sal_True; 2294 } 2295 /*-- 16.06.99 10:47:34--------------------------------------------------- 2296 2297 -----------------------------------------------------------------------*/ 2298 void SwTOXEntryTabPage::Reset( const SfxItemSet& ) 2299 { 2300 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 2301 const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); 2302 m_pCurrentForm = pTOXDlg->GetForm(aCurType); 2303 if(TOX_INDEX == aCurType.eType) 2304 { 2305 SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aCurType); 2306 String sMainEntryCharStyle = rDesc.GetMainEntryCharStyle(); 2307 if(sMainEntryCharStyle.Len()) 2308 { 2309 if( LISTBOX_ENTRY_NOTFOUND == 2310 aMainEntryStyleLB.GetEntryPos(sMainEntryCharStyle)) 2311 aMainEntryStyleLB.InsertEntry( 2312 sMainEntryCharStyle); 2313 aMainEntryStyleLB.SelectEntry(sMainEntryCharStyle); 2314 } 2315 else 2316 aMainEntryStyleLB.SelectEntry(sNoCharStyle); 2317 aAlphaDelimCB.Check( 0 != (rDesc.GetIndexOptions() & nsSwTOIOptions::TOI_ALPHA_DELIMITTER) ); 2318 } 2319 aRelToStyleCB.Check(m_pCurrentForm->IsRelTabPos()); 2320 aCommaSeparatedCB.Check(m_pCurrentForm->IsCommaSeparated()); 2321 } 2322 /*-- 16.06.99 10:47:34--------------------------------------------------- 2323 2324 -----------------------------------------------------------------------*/ 2325 void lcl_ChgWidth(Window& rWin, long nDiff) 2326 { 2327 Size aTempSz(rWin.GetSizePixel()); 2328 aTempSz.Width() += nDiff; 2329 rWin.SetSizePixel(aTempSz); 2330 } 2331 /* ---------------------------------------------------------------------- 2332 2333 -----------------------------------------------------------------------*/ 2334 void lcl_ChgXPos(Window& rWin, long nDiff) 2335 { 2336 Point aTempPos(rWin.GetPosPixel()); 2337 aTempPos.X() += nDiff; 2338 rWin.SetPosPixel(aTempPos); 2339 } 2340 /* ---------------------------------------------------------------------- 2341 2342 -----------------------------------------------------------------------*/ 2343 void SwTOXEntryTabPage::ActivatePage( const SfxItemSet& /*rSet*/) 2344 { 2345 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 2346 const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); 2347 2348 m_pCurrentForm = pTOXDlg->GetForm(aCurType); 2349 if( !( aLastTOXType == aCurType )) 2350 { 2351 sal_Bool bToxIsAuthorities = TOX_AUTHORITIES == aCurType.eType; 2352 sal_Bool bToxIsIndex = TOX_INDEX == aCurType.eType; 2353 sal_Bool bToxIsContent = TOX_CONTENT == aCurType.eType; 2354 2355 aLevelLB.Clear(); 2356 for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++) 2357 { 2358 if(bToxIsAuthorities) 2359 aLevelLB.InsertEntry( SwAuthorityFieldType::GetAuthTypeName( 2360 (ToxAuthorityType) (i - 1)) ); 2361 else if( bToxIsIndex ) 2362 { 2363 if(i == 1) 2364 aLevelLB.InsertEntry( sDelimStr ); 2365 else 2366 aLevelLB.InsertEntry( String::CreateFromInt32(i - 1) ); 2367 } 2368 else 2369 aLevelLB.InsertEntry(String::CreateFromInt32(i)); 2370 } 2371 if(bToxIsAuthorities) 2372 { 2373 // 2374 SwWrtShell& rSh = pTOXDlg->GetWrtShell(); 2375 const SwAuthorityFieldType* pFType = (const SwAuthorityFieldType*) 2376 rSh.GetFldType(RES_AUTHORITY, aEmptyStr); 2377 if(pFType) 2378 { 2379 if(pFType->IsSortByDocument()) 2380 aSortDocPosRB.Check(); 2381 else 2382 { 2383 aSortContentRB.Check(); 2384 sal_uInt16 nKeyCount = pFType->GetSortKeyCount(); 2385 if(0 < nKeyCount) 2386 { 2387 const SwTOXSortKey* pKey = pFType->GetSortKey(0); 2388 aFirstKeyLB.SelectEntryPos( 2389 aFirstKeyLB.GetEntryPos((void*)(sal_uInt32)pKey->eField)); 2390 aFirstSortUpRB.Check(pKey->bSortAscending); 2391 aFirstSortDownRB.Check(!pKey->bSortAscending); 2392 } 2393 if(1 < nKeyCount) 2394 { 2395 const SwTOXSortKey* pKey = pFType->GetSortKey(1); 2396 aSecondKeyLB.SelectEntryPos( 2397 aSecondKeyLB.GetEntryPos((void*)(sal_uInt32)pKey->eField)); 2398 aSecondSortUpRB.Check(pKey->bSortAscending); 2399 aSecondSortDownRB.Check(!pKey->bSortAscending); 2400 } 2401 if(2 < nKeyCount) 2402 { 2403 const SwTOXSortKey* pKey = pFType->GetSortKey(2); 2404 aThirdKeyLB.SelectEntryPos( 2405 aThirdKeyLB.GetEntryPos((void*)(sal_uInt32)pKey->eField)); 2406 aThirdSortUpRB.Check(pKey->bSortAscending); 2407 aThirdSortDownRB.Check(!pKey->bSortAscending); 2408 } 2409 } 2410 } 2411 SortKeyHdl(aSortDocPosRB.IsChecked() ? &aSortDocPosRB : &aSortContentRB); 2412 aLevelFT.SetText(sAuthTypeStr); 2413 } 2414 else 2415 aLevelFT.SetText(sLevelStr); 2416 2417 long nDiff = 0; 2418 if( bToxIsAuthorities ? aLevelFT.GetSizePixel() == aLevelFLSize 2419 : aLevelFT.GetSizePixel() != aLevelFLSize ) 2420 { 2421 nDiff = aLevelFLSize.Width(); 2422 if( !bToxIsAuthorities ) 2423 nDiff *= -1; 2424 } 2425 2426 if(nDiff) 2427 { 2428 // lcl_ChgWidth(aLevelFL, nDiff); 2429 lcl_ChgWidth(aLevelFT, nDiff); 2430 lcl_ChgWidth(aLevelLB, nDiff); 2431 lcl_ChgXPos(aCharStyleFT, nDiff); 2432 lcl_ChgXPos(aCharStyleLB, nDiff); 2433 lcl_ChgWidth(aCharStyleLB, -nDiff); 2434 // lcl_ChgXPos(aEditStylePB, -nDiff); 2435 lcl_ChgXPos(aFillCharFT, nDiff); 2436 lcl_ChgXPos(aFillCharCB, nDiff); 2437 lcl_ChgXPos(aTabPosFT, nDiff); 2438 lcl_ChgXPos(aTabPosMF, nDiff); 2439 lcl_ChgXPos(aAutoRightCB, nDiff); 2440 lcl_ChgXPos(aAuthFieldsLB, nDiff); 2441 lcl_ChgXPos(aAuthInsertPB, nDiff); 2442 lcl_ChgXPos(aAuthRemovePB, nDiff); 2443 lcl_ChgXPos(aTokenFT, nDiff); 2444 lcl_ChgXPos(aTokenWIN, nDiff); 2445 lcl_ChgWidth(aTokenWIN, -nDiff); 2446 lcl_ChgXPos(aSortDocPosRB, nDiff); 2447 lcl_ChgXPos(aSortContentRB, nDiff); 2448 lcl_ChgXPos(aFormatFL, nDiff); 2449 lcl_ChgWidth(aFormatFL, -nDiff); 2450 lcl_ChgXPos(aSortingFL, nDiff); 2451 lcl_ChgWidth(aSortingFL, -nDiff); 2452 lcl_ChgXPos(aEntryFL, nDiff); 2453 lcl_ChgWidth(aEntryFL, -nDiff); 2454 2455 lcl_ChgXPos(aFirstKeyFT, nDiff); 2456 lcl_ChgXPos(aFirstKeyLB, nDiff); 2457 lcl_ChgXPos(aSecondKeyFT, nDiff); 2458 lcl_ChgXPos(aSecondKeyLB, nDiff); 2459 lcl_ChgXPos(aThirdKeyFT, nDiff); 2460 lcl_ChgXPos(aThirdKeyLB, nDiff); 2461 lcl_ChgXPos(aSortKeyFL, nDiff); 2462 2463 lcl_ChgWidth(aFirstKeyLB, -nDiff); 2464 lcl_ChgWidth(aSecondKeyLB, -nDiff); 2465 lcl_ChgWidth(aThirdKeyLB, -nDiff); 2466 lcl_ChgWidth(aSortKeyFL, -nDiff); 2467 } 2468 Link aLink = aLevelLB.GetSelectHdl(); 2469 aLevelLB.SetSelectHdl(Link()); 2470 aLevelLB.Select( aLevelLB.GetEntry( bToxIsIndex ? 1 : 0 ) ); 2471 aLevelLB.SetSelectHdl(aLink); 2472 2473 // sort token buttons 2474 aEntryNoPB.SetPosPixel(aButtonPositions[0]); 2475 aEntryPB.SetPosPixel(aButtonPositions[ bToxIsContent ? 1 : 0]); 2476 aChapterInfoPB.SetPosPixel(aButtonPositions[2]); 2477 aPageNoPB.SetPosPixel(aButtonPositions[3]); 2478 sal_uInt16 nBtPos = 1; 2479 if( bToxIsContent ) 2480 nBtPos = 2; 2481 else if( bToxIsAuthorities ) 2482 nBtPos = 4; 2483 aTabPB.SetPosPixel(aButtonPositions[nBtPos]); 2484 aHyperLinkPB.SetPosPixel(aButtonPositions[4]); 2485 2486 //show or hide controls 2487 aEntryNoPB.Show( bToxIsContent ); 2488 aHyperLinkPB.Show( bToxIsContent ); 2489 aRelToStyleCB.Show( !bToxIsAuthorities ); 2490 aChapterInfoPB.Show( !bToxIsContent && !bToxIsAuthorities); 2491 aEntryPB.Show( !bToxIsAuthorities ); 2492 aPageNoPB.Show( !bToxIsAuthorities ); 2493 aAuthFieldsLB.Show( bToxIsAuthorities ); 2494 aAuthInsertPB.Show( bToxIsAuthorities ); 2495 aAuthRemovePB.Show( bToxIsAuthorities ); 2496 aFormatFL.Show( !bToxIsAuthorities ); 2497 aSortDocPosRB.Show( bToxIsAuthorities ); 2498 aSortContentRB.Show( bToxIsAuthorities ); 2499 aSortingFL.Show( bToxIsAuthorities ); 2500 aFirstKeyFT.Show( bToxIsAuthorities ); 2501 aFirstKeyLB.Show( bToxIsAuthorities ); 2502 aSecondKeyFT.Show( bToxIsAuthorities ); 2503 aSecondKeyLB.Show( bToxIsAuthorities ); 2504 aThirdKeyFT.Show( bToxIsAuthorities ); 2505 aThirdKeyLB.Show( bToxIsAuthorities ); 2506 aSortKeyFL.Show( bToxIsAuthorities ); 2507 aFirstSortUpRB.Show( bToxIsAuthorities ); 2508 aFirstSortDownRB.Show( bToxIsAuthorities ); 2509 aSecondSortUpRB.Show( bToxIsAuthorities ); 2510 aSecondSortDownRB.Show( bToxIsAuthorities ); 2511 aThirdSortUpRB.Show( bToxIsAuthorities ); 2512 aThirdSortDownRB.Show( bToxIsAuthorities ); 2513 2514 aRelToStyleCB.SetPosPixel( bToxIsIndex ? aRelToStyleIdxPos 2515 : aRelToStylePos ); 2516 2517 // aRecalcTabCB.Show( aCurType.eType == TOX_CONTENT); 2518 2519 aMainEntryStyleFT.Show( bToxIsIndex ); 2520 aMainEntryStyleLB.Show( bToxIsIndex ); 2521 aAlphaDelimCB.Show( bToxIsIndex ); 2522 aCommaSeparatedCB.Show( bToxIsIndex ); 2523 } 2524 aLastTOXType = aCurType; 2525 2526 //invalidate PatternWindow 2527 aTokenWIN.SetInvalid(); 2528 LevelHdl(&aLevelLB); 2529 } 2530 /* -----------------30.11.99 15:04------------------- 2531 2532 --------------------------------------------------*/ 2533 void SwTOXEntryTabPage::UpdateDescriptor() 2534 { 2535 WriteBackLevel(); 2536 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 2537 SwTOXDescription& rDesc = pTOXDlg->GetTOXDescription(aLastTOXType); 2538 if(TOX_INDEX == aLastTOXType.eType) 2539 { 2540 String sTemp(aMainEntryStyleLB.GetSelectEntry()); 2541 rDesc.SetMainEntryCharStyle(sNoCharStyle == sTemp ? aEmptyStr : sTemp); 2542 sal_uInt16 nIdxOptions = rDesc.GetIndexOptions() & ~nsSwTOIOptions::TOI_ALPHA_DELIMITTER; 2543 if(aAlphaDelimCB.IsChecked()) 2544 nIdxOptions |= nsSwTOIOptions::TOI_ALPHA_DELIMITTER; 2545 rDesc.SetIndexOptions(nIdxOptions); 2546 } 2547 else if(TOX_AUTHORITIES == aLastTOXType.eType) 2548 { 2549 rDesc.SetSortByDocument(aSortDocPosRB.IsChecked()); 2550 SwTOXSortKey aKey1, aKey2, aKey3; 2551 aKey1.eField = (ToxAuthorityField)(sal_uIntPtr)aFirstKeyLB.GetEntryData( 2552 aFirstKeyLB.GetSelectEntryPos()); 2553 aKey1.bSortAscending = aFirstSortUpRB.IsChecked(); 2554 aKey2.eField = (ToxAuthorityField)(sal_uIntPtr)aSecondKeyLB.GetEntryData( 2555 aSecondKeyLB.GetSelectEntryPos()); 2556 aKey2.bSortAscending = aSecondSortUpRB.IsChecked(); 2557 aKey3.eField = (ToxAuthorityField)(sal_uIntPtr)aThirdKeyLB.GetEntryData( 2558 aThirdKeyLB.GetSelectEntryPos()); 2559 aKey3.bSortAscending = aThirdSortUpRB.IsChecked(); 2560 2561 2562 rDesc.SetSortKeys(aKey1, aKey2, aKey3); 2563 } 2564 SwForm* pCurrentForm = pTOXDlg->GetForm(aLastTOXType); 2565 if(aRelToStyleCB.IsVisible()) 2566 { 2567 pCurrentForm->SetRelTabPos(aRelToStyleCB.IsChecked()); 2568 } 2569 if(aCommaSeparatedCB.IsVisible()) 2570 pCurrentForm->SetCommaSeparated(aCommaSeparatedCB.IsChecked()); 2571 } 2572 /*-- 16.06.99 10:47:34--------------------------------------------------- 2573 2574 -----------------------------------------------------------------------*/ 2575 int SwTOXEntryTabPage::DeactivatePage( SfxItemSet* /*pSet*/) 2576 { 2577 UpdateDescriptor(); 2578 return LEAVE_PAGE; 2579 } 2580 /*-- 16.06.99 10:47:34--------------------------------------------------- 2581 2582 -----------------------------------------------------------------------*/ 2583 SfxTabPage* SwTOXEntryTabPage::Create( Window* pParent, const SfxItemSet& rAttrSet) 2584 { 2585 return new SwTOXEntryTabPage(pParent, rAttrSet); 2586 } 2587 /*-- 16.06.99 10:47:35--------------------------------------------------- 2588 2589 -----------------------------------------------------------------------*/ 2590 IMPL_LINK(SwTOXEntryTabPage, EditStyleHdl, PushButton*, pBtn) 2591 { 2592 if( LISTBOX_ENTRY_NOTFOUND != aCharStyleLB.GetSelectEntryPos()) 2593 { 2594 SfxStringItem aStyle(SID_STYLE_EDIT, aCharStyleLB.GetSelectEntry()); 2595 SfxUInt16Item aFamily(SID_STYLE_FAMILY, SFX_STYLE_FAMILY_CHAR); 2596 // TODO: WrtShell? 2597 // SwPtrItem aShell(FN_PARAM_WRTSHELL, pWrtShell); 2598 Window* pDefDlgParent = Application::GetDefDialogParent(); 2599 Application::SetDefDialogParent( pBtn ); 2600 ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(). 2601 GetView().GetViewFrame()->GetDispatcher()->Execute( 2602 SID_STYLE_EDIT, SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_MODAL, 2603 &aStyle, &aFamily/*, &aShell*/, 0L); 2604 Application::SetDefDialogParent( pDefDlgParent ); 2605 } 2606 return 0; 2607 } 2608 /* -----------------04.10.99 11:34------------------- 2609 2610 --------------------------------------------------*/ 2611 IMPL_LINK(SwTOXEntryTabPage, RemoveInsertAuthHdl, PushButton*, pButton) 2612 { 2613 sal_Bool bInsert = pButton == &aAuthInsertPB; 2614 if(bInsert) 2615 { 2616 sal_uInt16 nSelPos = aAuthFieldsLB.GetSelectEntryPos(); 2617 String sToInsert(aAuthFieldsLB.GetSelectEntry()); 2618 SwFormToken aInsert(TOKEN_AUTHORITY); 2619 aInsert.nAuthorityField = (sal_uInt16)(sal_uIntPtr)aAuthFieldsLB.GetEntryData(nSelPos); 2620 aTokenWIN.InsertAtSelection(String::CreateFromAscii( 2621 SwForm::aFormAuth), aInsert); 2622 aAuthFieldsLB.RemoveEntry(sToInsert); 2623 aAuthFieldsLB.SelectEntryPos( nSelPos ? nSelPos - 1 : 0); 2624 } 2625 else 2626 { 2627 Control* pCtrl = aTokenWIN.GetActiveControl(); 2628 DBG_ASSERT(WINDOW_EDIT != pCtrl->GetType(), "Remove should be disabled"); 2629 if( WINDOW_EDIT != pCtrl->GetType() ) 2630 { 2631 //fill it into the ListBox 2632 const SwFormToken& rToken = ((SwTOXButton*)pCtrl)->GetFormToken(); 2633 PreTokenButtonRemoved(rToken); 2634 aTokenWIN.RemoveControl((SwTOXButton*)pCtrl); 2635 } 2636 } 2637 ModifyHdl(0); 2638 return 0; 2639 } 2640 /* -----------------------------17.01.00 13:44-------------------------------- 2641 2642 ---------------------------------------------------------------------------*/ 2643 void SwTOXEntryTabPage::PreTokenButtonRemoved(const SwFormToken& rToken) 2644 { 2645 //fill it into the ListBox 2646 sal_uInt32 nData = rToken.nAuthorityField; 2647 String sTemp(SW_RES(STR_AUTH_FIELD_START + nData)); 2648 sal_uInt16 nPos = aAuthFieldsLB.InsertEntry(sTemp); 2649 aAuthFieldsLB.SetEntryData(nPos, (void*)(nData)); 2650 } 2651 /*-- 16.06.99 10:47:35--------------------------------------------------- 2652 2653 This function inizializes the default value in the Token 2654 put here the UI dependent initializations 2655 -----------------------------------------------------------------------*/ 2656 IMPL_LINK(SwTOXEntryTabPage, InsertTokenHdl, PushButton*, pBtn) 2657 { 2658 String sText; 2659 FormTokenType eTokenType = TOKEN_ENTRY_NO; 2660 String sCharStyle; 2661 sal_uInt16 nChapterFormat = CF_NUMBER; // i89791 2662 if(pBtn == &aEntryNoPB) 2663 { 2664 sText.AssignAscii(SwForm::aFormEntryNum); 2665 eTokenType = TOKEN_ENTRY_NO; 2666 } 2667 else if(pBtn == &aEntryPB) 2668 { 2669 if( TOX_CONTENT == m_pCurrentForm->GetTOXType() ) 2670 { 2671 sText.AssignAscii( SwForm::aFormEntryTxt ); 2672 eTokenType = TOKEN_ENTRY_TEXT; 2673 } 2674 else 2675 { 2676 sText.AssignAscii( SwForm::aFormEntry); 2677 eTokenType = TOKEN_ENTRY; 2678 } 2679 } 2680 else if(pBtn == &aChapterInfoPB) 2681 { 2682 sText.AssignAscii( SwForm::aFormChapterMark); 2683 eTokenType = TOKEN_CHAPTER_INFO; 2684 nChapterFormat = CF_NUM_NOPREPST_TITLE; // i89791 2685 } 2686 else if(pBtn == &aPageNoPB) 2687 { 2688 sText.AssignAscii(SwForm::aFormPageNums); 2689 eTokenType = TOKEN_PAGE_NUMS; 2690 } 2691 else if(pBtn == &aHyperLinkPB) 2692 { 2693 sText.AssignAscii(SwForm::aFormLinkStt); 2694 eTokenType = TOKEN_LINK_START; 2695 sCharStyle = String(SW_RES(STR_POOLCHR_INET_NORMAL)); 2696 } 2697 else if(pBtn == &aTabPB) 2698 { 2699 sText.AssignAscii(SwForm::aFormTab); 2700 eTokenType = TOKEN_TAB_STOP; 2701 } 2702 SwFormToken aInsert(eTokenType); 2703 aInsert.sCharStyleName = sCharStyle; 2704 aInsert.nTabStopPosition = 0; 2705 aInsert.nChapterFormat = nChapterFormat; // i89791 2706 aTokenWIN.InsertAtSelection(sText, aInsert); 2707 ModifyHdl(0); 2708 return 0; 2709 } 2710 /* -----------------------------14.01.00 11:53-------------------------------- 2711 2712 ---------------------------------------------------------------------------*/ 2713 IMPL_LINK(SwTOXEntryTabPage, AllLevelsHdl, PushButton*, EMPTYARG) 2714 { 2715 //get current level 2716 //write it into all levels 2717 if(aTokenWIN.IsValid()) 2718 { 2719 String sNewToken = aTokenWIN.GetPattern(); 2720 for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++) 2721 m_pCurrentForm->SetPattern(i, sNewToken); 2722 // 2723 ModifyHdl(this); 2724 } 2725 return 0; 2726 } 2727 2728 /* -----------------02.12.99 12:40------------------- 2729 2730 --------------------------------------------------*/ 2731 void SwTOXEntryTabPage::WriteBackLevel() 2732 { 2733 if(aTokenWIN.IsValid()) 2734 { 2735 String sNewToken = aTokenWIN.GetPattern(); 2736 sal_uInt16 nLastLevel = aTokenWIN.GetLastLevel(); 2737 if(nLastLevel != USHRT_MAX) 2738 m_pCurrentForm->SetPattern(nLastLevel + 1, sNewToken ); 2739 } 2740 } 2741 /*-- 16.06.99 10:47:35--------------------------------------------------- 2742 2743 -----------------------------------------------------------------------*/ 2744 IMPL_LINK(SwTOXEntryTabPage, LevelHdl, SvTreeListBox*, pBox) 2745 { 2746 if(bInLevelHdl) 2747 return 0; 2748 bInLevelHdl = sal_True; 2749 WriteBackLevel(); 2750 2751 sal_uInt16 nLevel = static_cast< sal_uInt16 >(pBox->GetModel()->GetAbsPos(pBox->FirstSelected())); 2752 aTokenWIN.SetForm(*m_pCurrentForm, nLevel); 2753 if(TOX_AUTHORITIES == m_pCurrentForm->GetTOXType()) 2754 { 2755 //fill the types in 2756 aAuthFieldsLB.Clear(); 2757 for( sal_uInt32 i = 0; i < AUTH_FIELD_END; i++) 2758 { 2759 String sTmp(SW_RES(STR_AUTH_FIELD_START + i)); 2760 sal_uInt16 nPos = aAuthFieldsLB.InsertEntry(sTmp); 2761 aAuthFieldsLB.SetEntryData(nPos, (void*)(i)); 2762 } 2763 2764 // #i21237# 2765 SwFormTokens aPattern = m_pCurrentForm->GetPattern(nLevel + 1); 2766 SwFormTokens::iterator aIt = aPattern.begin();; 2767 2768 while(aIt != aPattern.end()) 2769 { 2770 SwFormToken aToken = *aIt; // #i21237# 2771 if(TOKEN_AUTHORITY == aToken.eTokenType) 2772 { 2773 sal_uInt32 nSearch = aToken.nAuthorityField; 2774 sal_uInt16 nLstBoxPos = aAuthFieldsLB.GetEntryPos( (void*) nSearch ); 2775 DBG_ASSERT(LISTBOX_ENTRY_NOTFOUND != nLstBoxPos, "Entry not found?"); 2776 aAuthFieldsLB.RemoveEntry(nLstBoxPos); 2777 } 2778 2779 aIt++; // #i21237# 2780 } 2781 aAuthFieldsLB.SelectEntryPos(0); 2782 } 2783 bInLevelHdl = sal_False; 2784 pBox->GrabFocus(); 2785 return 0; 2786 } 2787 /* -----------------20.10.99 13:16------------------- 2788 2789 --------------------------------------------------*/ 2790 IMPL_LINK(SwTOXEntryTabPage, SortKeyHdl, RadioButton*, pButton) 2791 { 2792 sal_Bool bEnable = &aSortContentRB == pButton; 2793 aFirstKeyFT.Enable(bEnable); 2794 aFirstKeyLB.Enable(bEnable); 2795 aSecondKeyFT.Enable(bEnable); 2796 aSecondKeyLB.Enable(bEnable); 2797 aThirdKeyFT.Enable(bEnable); 2798 aThirdKeyLB.Enable(bEnable); 2799 aSortKeyFL.Enable(bEnable); 2800 aFirstSortUpRB.Enable(bEnable); 2801 aFirstSortDownRB.Enable(bEnable); 2802 aSecondSortUpRB.Enable(bEnable); 2803 aSecondSortDownRB.Enable(bEnable); 2804 aThirdSortUpRB.Enable(bEnable); 2805 aThirdSortDownRB.Enable(bEnable); 2806 return 0; 2807 } 2808 /* -----------------01.07.99 12:21------------------- 2809 2810 --------------------------------------------------*/ 2811 IMPL_LINK(SwTOXEntryTabPage, TokenSelectedHdl, SwFormToken*, pToken) 2812 { 2813 if(pToken->sCharStyleName.Len()) 2814 aCharStyleLB.SelectEntry(pToken->sCharStyleName); 2815 else 2816 aCharStyleLB.SelectEntry(sNoCharStyle); 2817 //StyleSelectHdl(&aCharStyleLB); 2818 2819 String sEntry = aCharStyleLB.GetSelectEntry(); 2820 aEditStylePB.Enable(sEntry != sNoCharStyle); 2821 2822 if(pToken->eTokenType == TOKEN_CHAPTER_INFO) 2823 { 2824 //---> i89791 2825 switch(pToken->nChapterFormat) 2826 { 2827 default: 2828 aChapterEntryLB.SetNoSelection();//to alert the user 2829 break; 2830 case CF_NUM_NOPREPST_TITLE: 2831 aChapterEntryLB.SelectEntryPos(0); 2832 break; 2833 case CF_TITLE: 2834 aChapterEntryLB.SelectEntryPos(1); 2835 break; 2836 case CF_NUMBER_NOPREPST: 2837 aChapterEntryLB.SelectEntryPos(2); 2838 break; 2839 } 2840 //<--- 2841 //i53420 2842 //move into position the fixed text 2843 // aEntryOutlineLevelFT.SetPosPixel( aEntryOutlineLevelFTPosition ); 2844 // // then the entry 2845 // Point aPoint; 2846 // aPoint.Y() = aEntryOutlineLevelFTPosition.Y(); 2847 // aPoint.X() = aEntryOutlineLevelFTPosition.X() + nBiasToEntryPoint; 2848 // aEntryOutlineLevelNF.SetPosPixel( aPoint ); 2849 2850 aEntryOutlineLevelNF.SetValue(pToken->nOutlineLevel); 2851 } 2852 2853 //i53420 2854 if(pToken->eTokenType == TOKEN_ENTRY_NO) 2855 { 2856 //move into position the fixed text 2857 // aEntryOutlineLevelFT.SetPosPixel( aChapterEntryFTPosition ); 2858 // // then the entry 2859 // Point aPoint; 2860 // aPoint.Y() = aChapterEntryFTPosition.Y(); 2861 // aPoint.X() = aChapterEntryFTPosition.X() + nBiasToEntryPoint; 2862 // aEntryOutlineLevelNF.SetPosPixel( aPoint ); 2863 2864 aEntryOutlineLevelNF.SetValue(pToken->nOutlineLevel); 2865 sal_uInt16 nFormat = 0; 2866 if( pToken->nChapterFormat == CF_NUM_NOPREPST_TITLE ) 2867 nFormat = 1; 2868 aNumberFormatLB.SelectEntryPos(nFormat); 2869 } 2870 2871 sal_Bool bTabStop = TOKEN_TAB_STOP == pToken->eTokenType; 2872 aFillCharFT.Show(bTabStop); 2873 aFillCharCB.Show(bTabStop); 2874 aTabPosFT.Show(bTabStop); 2875 aTabPosMF.Show(bTabStop); 2876 aAutoRightCB.Show(bTabStop); 2877 aAutoRightCB.Enable(bTabStop); 2878 if(bTabStop) 2879 { 2880 aTabPosMF.SetValue(aTabPosMF.Normalize(pToken->nTabStopPosition), FUNIT_TWIP); 2881 aAutoRightCB.Check(SVX_TAB_ADJUST_END == pToken->eTabAlign); 2882 aFillCharCB.SetText(pToken->cTabFillChar); 2883 aTabPosFT.Enable(!aAutoRightCB.IsChecked()); 2884 aTabPosMF.Enable(!aAutoRightCB.IsChecked()); 2885 } 2886 else 2887 { 2888 aTabPosMF.Enable(sal_False); 2889 } 2890 2891 sal_Bool bIsChapterInfo = pToken->eTokenType == TOKEN_CHAPTER_INFO; 2892 sal_Bool bIsEntryNumber = pToken->eTokenType == TOKEN_ENTRY_NO; 2893 aChapterEntryFT.Show( bIsChapterInfo ); 2894 aChapterEntryLB.Show( bIsChapterInfo ); 2895 aEntryOutlineLevelFT.Show( bIsChapterInfo || bIsEntryNumber ); 2896 aEntryOutlineLevelNF.Show( bIsChapterInfo || bIsEntryNumber ); 2897 aNumberFormatFT.Show( bIsEntryNumber ); 2898 aNumberFormatLB.Show( bIsEntryNumber ); 2899 2900 2901 //now enable the visible buttons 2902 //- inserting the same type of control is not allowed 2903 //- some types of controls can only appear once (EntryText EntryNumber) 2904 2905 if(aEntryNoPB.IsVisible()) 2906 { 2907 aEntryNoPB.Enable(TOKEN_ENTRY_NO != pToken->eTokenType ); 2908 } 2909 if(aEntryPB.IsVisible()) 2910 { 2911 aEntryPB.Enable(TOKEN_ENTRY_TEXT != pToken->eTokenType && 2912 !aTokenWIN.Contains(TOKEN_ENTRY_TEXT) 2913 && !aTokenWIN.Contains(TOKEN_ENTRY)); 2914 } 2915 2916 if(aChapterInfoPB.IsVisible()) 2917 { 2918 aChapterInfoPB.Enable(TOKEN_CHAPTER_INFO != pToken->eTokenType); 2919 } 2920 if(aPageNoPB.IsVisible()) 2921 { 2922 aPageNoPB.Enable(TOKEN_PAGE_NUMS != pToken->eTokenType && 2923 !aTokenWIN.Contains(TOKEN_PAGE_NUMS)); 2924 } 2925 if(aTabPB.IsVisible()) 2926 { 2927 aTabPB.Enable(!bTabStop); 2928 } 2929 if(aHyperLinkPB.IsVisible()) 2930 { 2931 aHyperLinkPB.Enable(TOKEN_LINK_START != pToken->eTokenType && 2932 TOKEN_LINK_END != pToken->eTokenType); 2933 } 2934 //table of authorities 2935 if(aAuthInsertPB.IsVisible()) 2936 { 2937 sal_Bool bText = TOKEN_TEXT == pToken->eTokenType; 2938 aAuthInsertPB.Enable(bText && aAuthFieldsLB.GetSelectEntry().Len()); 2939 aAuthRemovePB.Enable(!bText); 2940 } 2941 2942 return 0; 2943 } 2944 /* -----------------01.07.99 12:36------------------- 2945 2946 --------------------------------------------------*/ 2947 IMPL_LINK(SwTOXEntryTabPage, StyleSelectHdl, ListBox*, pBox) 2948 { 2949 String sEntry = pBox->GetSelectEntry(); 2950 sal_uInt16 nId = (sal_uInt16)(long)pBox->GetEntryData(pBox->GetSelectEntryPos()); 2951 aEditStylePB.Enable(sEntry != sNoCharStyle); 2952 if(sEntry == sNoCharStyle) 2953 sEntry.Erase(); 2954 Control* pCtrl = aTokenWIN.GetActiveControl(); 2955 DBG_ASSERT(pCtrl, "no active control?"); 2956 if(pCtrl) 2957 { 2958 if(WINDOW_EDIT == pCtrl->GetType()) 2959 ((SwTOXEdit*)pCtrl)->SetCharStyleName(sEntry, nId); 2960 else 2961 ((SwTOXButton*)pCtrl)->SetCharStyleName(sEntry, nId); 2962 2963 } 2964 ModifyHdl(0); 2965 return 0; 2966 } 2967 /* -----------------------------11.01.00 12:54-------------------------------- 2968 2969 ---------------------------------------------------------------------------*/ 2970 IMPL_LINK(SwTOXEntryTabPage, ChapterInfoHdl, ListBox*, pBox) 2971 { 2972 sal_uInt16 nPos = pBox->GetSelectEntryPos(); 2973 if(LISTBOX_ENTRY_NOTFOUND != nPos) 2974 { 2975 Control* pCtrl = aTokenWIN.GetActiveControl(); 2976 DBG_ASSERT(pCtrl, "no active control?"); 2977 if(pCtrl && WINDOW_EDIT != pCtrl->GetType()) 2978 ((SwTOXButton*)pCtrl)->SetChapterInfo(nPos); 2979 2980 ModifyHdl(0); 2981 } 2982 return 0; 2983 } 2984 2985 IMPL_LINK(SwTOXEntryTabPage, ChapterInfoOutlineHdl, NumericField*, pField) 2986 { 2987 const sal_uInt16 nLevel = static_cast<sal_uInt8>(pField->GetValue()); 2988 2989 Control* pCtrl = aTokenWIN.GetActiveControl(); 2990 DBG_ASSERT(pCtrl, "no active control?"); 2991 if(pCtrl && WINDOW_EDIT != pCtrl->GetType()) 2992 ((SwTOXButton*)pCtrl)->SetOutlineLevel(nLevel); 2993 2994 ModifyHdl(0); 2995 return 0; 2996 } 2997 2998 IMPL_LINK(SwTOXEntryTabPage, NumberFormatHdl, ListBox*, pBox) 2999 { 3000 const sal_uInt16 nPos = pBox->GetSelectEntryPos(); 3001 3002 if(LISTBOX_ENTRY_NOTFOUND != nPos) 3003 { 3004 Control* pCtrl = aTokenWIN.GetActiveControl(); 3005 DBG_ASSERT(pCtrl, "no active control?"); 3006 if(pCtrl && WINDOW_EDIT != pCtrl->GetType()) 3007 { 3008 ((SwTOXButton*)pCtrl)->SetEntryNumberFormat(nPos);//i89791 3009 } 3010 ModifyHdl(0); 3011 } 3012 return 0; 3013 } 3014 3015 /* -----------------19.08.99 15:37------------------- 3016 3017 --------------------------------------------------*/ 3018 IMPL_LINK(SwTOXEntryTabPage, TabPosHdl, MetricField*, pField) 3019 { 3020 Control* pCtrl = aTokenWIN.GetActiveControl(); 3021 DBG_ASSERT(pCtrl && WINDOW_EDIT != pCtrl->GetType() && 3022 TOKEN_TAB_STOP == ((SwTOXButton*)pCtrl)->GetFormToken().eTokenType, 3023 "no active style::TabStop control?"); 3024 if( pCtrl && WINDOW_EDIT != pCtrl->GetType() ) 3025 { 3026 ((SwTOXButton*)pCtrl)->SetTabPosition( static_cast< SwTwips >( 3027 pField->Denormalize( pField->GetValue( FUNIT_TWIP )))); 3028 } 3029 ModifyHdl(0); 3030 return 0; 3031 } 3032 /* -----------------09.09.99 15:37------------------- 3033 3034 --------------------------------------------------*/ 3035 IMPL_LINK(SwTOXEntryTabPage, FillCharHdl, ComboBox*, pBox) 3036 { 3037 Control* pCtrl = aTokenWIN.GetActiveControl(); 3038 DBG_ASSERT(pCtrl && WINDOW_EDIT != pCtrl->GetType() && 3039 TOKEN_TAB_STOP == ((SwTOXButton*)pCtrl)->GetFormToken().eTokenType, 3040 "no active style::TabStop control?"); 3041 if(pCtrl && WINDOW_EDIT != pCtrl->GetType()) 3042 { 3043 sal_Unicode cSet; 3044 if( pBox->GetText().Len() ) 3045 cSet = pBox->GetText().GetChar(0); 3046 else 3047 cSet = ' '; 3048 ((SwTOXButton*)pCtrl)->SetFillChar( cSet ); 3049 } 3050 ModifyHdl(0); 3051 return 0; 3052 } 3053 3054 /*-- 16.06.99 10:47:36--------------------------------------------------- 3055 3056 -----------------------------------------------------------------------*/ 3057 IMPL_LINK(SwTOXEntryTabPage, AutoRightHdl, CheckBox*, pBox) 3058 { 3059 //the most right style::TabStop is usually right aligned 3060 Control* pCurCtrl = aTokenWIN.GetActiveControl(); 3061 DBG_ASSERT(WINDOW_EDIT != pCurCtrl->GetType() && 3062 ((SwTOXButton*)pCurCtrl)->GetFormToken().eTokenType == TOKEN_TAB_STOP, 3063 "no style::TabStop selected!"); 3064 3065 const SwFormToken& rToken = ((SwTOXButton*)pCurCtrl)->GetFormToken(); 3066 sal_Bool bChecked = pBox->IsChecked(); 3067 if(rToken.eTokenType == TOKEN_TAB_STOP) 3068 ((SwTOXButton*)pCurCtrl)->SetTabAlign( 3069 bChecked ? SVX_TAB_ADJUST_END : SVX_TAB_ADJUST_LEFT); 3070 aTabPosFT.Enable(!bChecked); 3071 aTabPosMF.Enable(!bChecked); 3072 ModifyHdl(0); 3073 return 0; 3074 } 3075 /* -----------------16.06.99 11:00------------------- 3076 3077 --------------------------------------------------*/ 3078 void SwTOXEntryTabPage::SetWrtShell(SwWrtShell& rSh) 3079 { 3080 SwDocShell* pDocSh = rSh.GetView().GetDocShell(); 3081 ::FillCharStyleListBox(aCharStyleLB, pDocSh, sal_True, sal_True); 3082 const String sDefault(SW_RES(STR_POOLCOLL_STANDARD)); 3083 for(sal_uInt16 i = 0; i < aCharStyleLB.GetEntryCount(); i++) 3084 { 3085 String sEntry = aCharStyleLB.GetEntry(i); 3086 if(sDefault != sEntry) 3087 { 3088 aMainEntryStyleLB.InsertEntry( sEntry ); 3089 aMainEntryStyleLB.SetEntryData(i, aCharStyleLB.GetEntryData(i)); 3090 } 3091 } 3092 aMainEntryStyleLB.SelectEntry( SwStyleNameMapper::GetUIName( 3093 RES_POOLCHR_IDX_MAIN_ENTRY, aEmptyStr )); 3094 } 3095 /* -----------------------------23.12.99 14:23-------------------------------- 3096 3097 ---------------------------------------------------------------------------*/ 3098 String SwTOXEntryTabPage::GetLevelHelp(sal_uInt16 nLevel) const 3099 { 3100 String sRet; 3101 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 3102 const CurTOXType aCurType = pTOXDlg->GetCurrentTOXType(); 3103 if( TOX_INDEX == aCurType.eType ) 3104 SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(1 == nLevel ? RES_POOLCOLL_TOX_IDXBREAK 3105 : RES_POOLCOLL_TOX_IDX1 + nLevel-2), sRet ); 3106 3107 else if( TOX_AUTHORITIES == aCurType.eType ) 3108 { 3109 //wildcard -> show entry text 3110 sRet = '*'; 3111 } 3112 return sRet; 3113 } 3114 /* -----------------16.06.99 15:18------------------- 3115 3116 --------------------------------------------------*/ 3117 3118 SwTokenWindow::SwTokenWindow(SwTOXEntryTabPage* pParent, const ResId& rResId) : 3119 Window( pParent, rResId ), 3120 aLeftScrollWin(this, ResId(WIN_LEFT_SCROLL, *rResId.GetResMgr() )), 3121 aCtrlParentWin(this, ResId(WIN_CTRL_PARENT, *rResId.GetResMgr() )), 3122 aRightScrollWin(this, ResId(WIN_RIGHT_SCROLL, *rResId.GetResMgr() )), 3123 pForm(0), 3124 nLevel(0), 3125 bValid(sal_False), 3126 sCharStyle(ResId(STR_CHARSTYLE, *rResId.GetResMgr())), 3127 pActiveCtrl(0), 3128 m_pParent(pParent) 3129 { 3130 SetStyle(GetStyle()|WB_TABSTOP|WB_DIALOGCONTROL); 3131 SetHelpId(HID_TOKEN_WINDOW); 3132 for(sal_uInt16 i = 0; i < TOKEN_END; i++) 3133 { 3134 sal_uInt16 nTextId = STR_BUTTON_TEXT_START + i; 3135 if( STR_TOKEN_ENTRY_TEXT == nTextId ) 3136 nTextId = STR_TOKEN_ENTRY; 3137 aButtonTexts[i] = String(ResId(nTextId, *rResId.GetResMgr())); 3138 3139 sal_uInt16 nHelpId = STR_BUTTON_HELP_TEXT_START + i; 3140 if(STR_TOKEN_HELP_ENTRY_TEXT == nHelpId) 3141 nHelpId = STR_TOKEN_HELP_ENTRY; 3142 aButtonHelpTexts[i] = String(ResId(nHelpId, *rResId.GetResMgr())); 3143 } 3144 3145 FreeResource(); 3146 3147 Link aLink(LINK(this, SwTokenWindow, ScrollHdl)); 3148 aLeftScrollWin.SetClickHdl(aLink); 3149 aRightScrollWin.SetClickHdl(aLink); 3150 } 3151 /* -----------------01.07.99 12:17------------------- 3152 3153 --------------------------------------------------*/ 3154 SwTokenWindow::~SwTokenWindow() 3155 { 3156 // for(sal_uInt16 i = GetItemCount(); i ; i--) 3157 // RemoveItem(i - 1); 3158 3159 for( sal_uInt32 n = 0; n < aControlList.Count(); ++n ) 3160 { 3161 Control* pControl = aControlList.GetObject( n ); 3162 pControl->SetGetFocusHdl( Link() ); 3163 pControl->SetLoseFocusHdl( Link() ); 3164 } 3165 3166 for( sal_uLong i = aControlList.Count(); i; ) 3167 { 3168 Control* pControl = aControlList.Remove( --i ); 3169 delete pControl; 3170 } 3171 } 3172 /* -----------------16.06.99 13:56------------------- 3173 3174 --------------------------------------------------*/ 3175 void SwTokenWindow::SetForm(SwForm& rForm, sal_uInt16 nL) 3176 { 3177 SetActiveControl(0); 3178 bValid = sal_True; 3179 if(pForm) 3180 { 3181 //apply current level settings to the form 3182 for( sal_uLong i = aControlList.Count(); i; ) 3183 { 3184 Control* pControl = aControlList.Remove( --i ); 3185 delete pControl; 3186 } 3187 } 3188 nLevel = nL; 3189 pForm = &rForm; 3190 //now the display 3191 if(nLevel < MAXLEVEL || rForm.GetTOXType() == TOX_AUTHORITIES) 3192 { 3193 Size aToolBoxSize = GetSizePixel(); 3194 3195 // #i21237# 3196 SwFormTokens aPattern = pForm->GetPattern(nLevel + 1); 3197 SwFormTokens::iterator aIt = aPattern.begin(); 3198 sal_Bool bLastWasText = sal_False; //assure alternating text - code - text 3199 3200 Control* pSetActiveControl = 0; 3201 while(aIt != aPattern.end()) // #i21237# 3202 { 3203 SwFormToken aToken(*aIt); // #i21237# 3204 3205 if(TOKEN_TEXT == aToken.eTokenType) 3206 { 3207 DBG_ASSERT(!bLastWasText, "text following text is invalid"); 3208 Control* pCtrl = InsertItem(aToken.sText, aToken); 3209 bLastWasText = sal_True; 3210 if(!GetActiveControl()) 3211 SetActiveControl(pCtrl); 3212 } 3213 else 3214 { 3215 if( !bLastWasText ) 3216 { 3217 bLastWasText = sal_True; 3218 SwFormToken aTemp(TOKEN_TEXT); 3219 Control* pCtrl = InsertItem(aEmptyStr, aTemp); 3220 if(!pSetActiveControl) 3221 pSetActiveControl = pCtrl; 3222 } 3223 const sal_Char* pTmp = 0; 3224 switch( aToken.eTokenType ) 3225 { 3226 case TOKEN_ENTRY_NO: pTmp = SwForm::aFormEntryNum; break; 3227 case TOKEN_ENTRY_TEXT: pTmp = SwForm::aFormEntryTxt; break; 3228 case TOKEN_ENTRY: pTmp = SwForm::aFormEntry; break; 3229 case TOKEN_TAB_STOP: pTmp = SwForm::aFormTab; break; 3230 case TOKEN_PAGE_NUMS: pTmp = SwForm::aFormPageNums; break; 3231 case TOKEN_CHAPTER_INFO:pTmp = SwForm::aFormChapterMark; break; 3232 case TOKEN_LINK_START: pTmp = SwForm::aFormLinkStt; break; 3233 case TOKEN_LINK_END: pTmp = SwForm::aFormLinkEnd; break; 3234 case TOKEN_AUTHORITY: pTmp = SwForm::aFormAuth; break; 3235 default:; //prevent warning 3236 } 3237 3238 InsertItem( pTmp ? String::CreateFromAscii(pTmp) 3239 : aEmptyStr, aToken ); 3240 bLastWasText = sal_False; 3241 } 3242 3243 aIt++; // #i21237# 3244 } 3245 if(!bLastWasText) 3246 { 3247 bLastWasText = sal_True; 3248 SwFormToken aTemp(TOKEN_TEXT); 3249 Control* pCtrl = InsertItem(aEmptyStr, aTemp); 3250 if(!pSetActiveControl) 3251 pSetActiveControl = pCtrl; 3252 } 3253 SetActiveControl(pSetActiveControl); 3254 } 3255 AdjustScrolling(); 3256 } 3257 /* -----------------19.08.99 13:00------------------- 3258 3259 --------------------------------------------------*/ 3260 void SwTokenWindow::SetActiveControl(Control* pSet) 3261 { 3262 if( pSet != pActiveCtrl ) 3263 { 3264 pActiveCtrl = pSet; 3265 if( pActiveCtrl ) 3266 { 3267 pActiveCtrl->GrabFocus(); 3268 //it must be a SwTOXEdit 3269 const SwFormToken* pFToken; 3270 if( WINDOW_EDIT == pActiveCtrl->GetType() ) 3271 pFToken = &((SwTOXEdit*)pActiveCtrl)->GetFormToken(); 3272 else 3273 pFToken = &((SwTOXButton*)pActiveCtrl)->GetFormToken(); 3274 3275 SwFormToken aTemp( *pFToken ); 3276 aButtonSelectedHdl.Call( &aTemp ); 3277 } 3278 } 3279 } 3280 3281 /* -----------------17.06.99 09:53------------------- 3282 3283 --------------------------------------------------*/ 3284 Control* SwTokenWindow::InsertItem(const String& rText, const SwFormToken& rToken) 3285 { 3286 Control* pRet = 0; 3287 Control* pLast = aControlList.Last(); 3288 Size aControlSize(GetOutputSizePixel()); 3289 Point aControlPos; 3290 if( pLast ) 3291 { 3292 aControlSize = pLast->GetSizePixel(); 3293 aControlPos = pLast->GetPosPixel(); 3294 aControlPos.X() += aControlSize.Width(); 3295 } 3296 if(TOKEN_TEXT == rToken.eTokenType) 3297 { 3298 SwTOXEdit* pEdit = new SwTOXEdit(&aCtrlParentWin, this, rToken); 3299 pEdit->SetPosPixel(aControlPos); 3300 aControlList.Insert(pEdit, aControlList.Count()); 3301 pEdit->SetText(rText); 3302 Size aEditSize(aControlSize); 3303 aEditSize.Width() = pEdit->GetTextWidth(rText) + EDIT_MINWIDTH; 3304 pEdit->SetSizePixel(aEditSize); 3305 pEdit->SetModifyHdl(LINK(this, SwTokenWindow, EditResize )); 3306 pEdit->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemHdl)); 3307 pEdit->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusHdl)); 3308 pEdit->Show(); 3309 pRet = pEdit; 3310 } 3311 else 3312 { 3313 SwTOXButton* pButton = new SwTOXButton(&aCtrlParentWin, this, rToken); 3314 pButton->SetPosPixel(aControlPos); 3315 aControlList.Insert(pButton, aControlList.Count()); 3316 Size aEditSize(aControlSize); 3317 aEditSize.Width() = pButton->GetTextWidth(rText) + 5; 3318 // pButton->SetControlBackground(aCtrlColor); 3319 // pButton->SetControlForeground(aTextColor); 3320 pButton->SetSizePixel(aEditSize); 3321 pButton->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemBtnHdl)); 3322 pButton->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusBtnHdl)); 3323 if(TOKEN_AUTHORITY != rToken.eTokenType) 3324 pButton->SetText(aButtonTexts[rToken.eTokenType]); 3325 else 3326 { 3327 //use the first two chars as symbol 3328 String sTmp(SwAuthorityFieldType::GetAuthFieldName( 3329 (ToxAuthorityField)rToken.nAuthorityField)); 3330 pButton->SetText(sTmp.Copy(0, 2)); 3331 } 3332 pButton->Show(); 3333 pRet = pButton; 3334 } 3335 return pRet; 3336 } 3337 /* -----------------16.07.99 11:50------------------- 3338 3339 --------------------------------------------------*/ 3340 void SwTokenWindow::InsertAtSelection( 3341 const String& rText, 3342 const SwFormToken& rToken) 3343 { 3344 DBG_ASSERT(pActiveCtrl, "no active control!"); 3345 if(!pActiveCtrl) 3346 return; 3347 SwFormToken aToInsertToken(rToken); 3348 if(TOKEN_LINK_START == aToInsertToken.eTokenType) 3349 { 3350 //determine if start or end of hyperlink is appropriate 3351 //eventually change a following link start into a link end 3352 // groups of LS LE should be ignored 3353 // <insert> 3354 //LS <insert> 3355 //LE <insert> 3356 //<insert> LS 3357 //<insert> LE 3358 //<insert> 3359 sal_Bool bPreStartLinkFound = sal_False; // 3360 sal_Bool bPreEndLinkFound = sal_False; 3361 3362 const Control* pControl = aControlList.First(); 3363 const Control* pExchange = 0; 3364 while( pControl && pActiveCtrl != pControl ) 3365 { 3366 if( WINDOW_EDIT != pControl->GetType()) 3367 { 3368 const SwFormToken& rNewToken = 3369 ((SwTOXButton*)pControl)->GetFormToken(); 3370 if( TOKEN_LINK_START == rNewToken.eTokenType ) 3371 { 3372 bPreStartLinkFound = sal_True; 3373 pExchange = 0; 3374 } 3375 else if(TOKEN_LINK_END == rNewToken.eTokenType) 3376 { 3377 if( bPreStartLinkFound ) 3378 bPreStartLinkFound = sal_False; 3379 else 3380 { 3381 bPreEndLinkFound = sal_False; 3382 pExchange = pControl; 3383 } 3384 } 3385 } 3386 pControl = aControlList.Next(); 3387 } 3388 3389 sal_Bool bPostLinkEndFound = sal_False; 3390 sal_Bool bPostLinkStartFound = sal_False; 3391 if(!bPreStartLinkFound && !bPreEndLinkFound) 3392 while(pControl) 3393 { 3394 if( pControl != pActiveCtrl && 3395 WINDOW_EDIT != pControl->GetType()) 3396 { 3397 const SwFormToken& rNewToken = 3398 ((SwTOXButton*)pControl)->GetFormToken(); 3399 if( TOKEN_LINK_START == rNewToken.eTokenType ) 3400 { 3401 if(bPostLinkStartFound) 3402 break; 3403 bPostLinkStartFound = sal_True; 3404 pExchange = pControl; 3405 } 3406 else if(TOKEN_LINK_END == rNewToken.eTokenType ) 3407 { 3408 if(bPostLinkStartFound) 3409 { 3410 bPostLinkStartFound = sal_False; 3411 pExchange = 0; 3412 } 3413 else 3414 { 3415 bPostLinkEndFound = sal_True; 3416 } 3417 break; 3418 } 3419 } 3420 pControl = aControlList.Next(); 3421 } 3422 3423 if(bPreStartLinkFound) 3424 { 3425 aToInsertToken.eTokenType = TOKEN_LINK_END; 3426 aToInsertToken.sText = aButtonTexts[TOKEN_LINK_END]; 3427 } 3428 3429 if(bPostLinkStartFound) 3430 { 3431 DBG_ASSERT(pExchange, "no control to exchange?"); 3432 if(pExchange) 3433 { 3434 ((SwTOXButton*)pExchange)->SetLinkEnd(); 3435 ((SwTOXButton*)pExchange)->SetText(aButtonTexts[TOKEN_LINK_END]); 3436 } 3437 } 3438 3439 if(bPreEndLinkFound) 3440 { 3441 DBG_ASSERT(pExchange, "no control to exchange?"); 3442 if(pExchange) 3443 { 3444 ((SwTOXButton*)pExchange)->SetLinkStart(); 3445 ((SwTOXButton*)pExchange)->SetText(aButtonTexts[TOKEN_LINK_START]); 3446 } 3447 } 3448 } 3449 3450 //if the active control is text then insert a new button at the selection 3451 //else replace the button 3452 sal_uInt32 nActivePos = aControlList.GetPos(pActiveCtrl); 3453 sal_uInt32 nInsertPos = nActivePos; 3454 3455 Size aControlSize(GetOutputSizePixel()); 3456 if( WINDOW_EDIT == pActiveCtrl->GetType()) 3457 { 3458 nInsertPos++; 3459 Selection aSel = ((SwTOXEdit*)pActiveCtrl)->GetSelection(); 3460 aSel.Justify(); 3461 String sEditText = ((SwTOXEdit*)pActiveCtrl)->GetText(); 3462 String sLeft = sEditText.Copy( 0, static_cast< sal_uInt16 >(aSel.A()) ); 3463 String sRight = sEditText.Copy( static_cast< sal_uInt16 >(aSel.B()), 3464 static_cast< sal_uInt16 >(sEditText.Len() - aSel.B())); 3465 3466 ((SwTOXEdit*)pActiveCtrl)->SetText(sLeft); 3467 ((SwTOXEdit*)pActiveCtrl)->AdjustSize(); 3468 3469 SwFormToken aTmpToken(TOKEN_TEXT); 3470 SwTOXEdit* pEdit = new SwTOXEdit(&aCtrlParentWin, this, aTmpToken); 3471 aControlList.Insert(pEdit, nActivePos + 1); 3472 pEdit->SetText(sRight); 3473 pEdit->SetSizePixel(aControlSize); 3474 pEdit->AdjustSize(); 3475 pEdit->SetModifyHdl(LINK(this, SwTokenWindow, EditResize )); 3476 pEdit->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemHdl)); 3477 pEdit->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusHdl)); 3478 pEdit->Show(); 3479 } 3480 else 3481 { 3482 aControlList.Remove(pActiveCtrl); 3483 pActiveCtrl->Hide(); 3484 delete pActiveCtrl; 3485 } 3486 3487 //now the new button 3488 SwTOXButton* pButton = new SwTOXButton(&aCtrlParentWin, this, aToInsertToken); 3489 aControlList.Insert(pButton, nInsertPos); 3490 pButton->SetPrevNextLink(LINK(this, SwTokenWindow, NextItemBtnHdl)); 3491 pButton->SetGetFocusHdl(LINK(this, SwTokenWindow, TbxFocusBtnHdl)); 3492 if(TOKEN_AUTHORITY != aToInsertToken.eTokenType) 3493 pButton->SetText(aButtonTexts[aToInsertToken.eTokenType]); 3494 else 3495 { 3496 //use the first two chars as symbol 3497 String sTmp(SwAuthorityFieldType::GetAuthFieldName( 3498 (ToxAuthorityField)aToInsertToken.nAuthorityField)); 3499 pButton->SetText(sTmp.Copy(0, 2)); 3500 } 3501 3502 Size aEditSize(GetOutputSizePixel()); 3503 aEditSize.Width() = pButton->GetTextWidth(rText) + 5; 3504 pButton->SetSizePixel(aEditSize); 3505 pButton->Check(sal_True); 3506 pButton->Show(); 3507 SetActiveControl(pButton); 3508 3509 AdjustPositions(); 3510 } 3511 /* -----------------19.08.99 12:42------------------- 3512 3513 --------------------------------------------------*/ 3514 void SwTokenWindow::RemoveControl(SwTOXButton* pDel, sal_Bool bInternalCall ) 3515 { 3516 if(bInternalCall && TOX_AUTHORITIES == pForm->GetTOXType()) 3517 m_pParent->PreTokenButtonRemoved(pDel->GetFormToken()); 3518 3519 sal_uInt32 nActivePos = aControlList.GetPos(pDel); 3520 DBG_ASSERT(nActivePos != 0xffffffff, "Control does not exist!"); 3521 // the two neighbours of the box must be merged 3522 // the properties of the right one will be lost 3523 DBG_ASSERT(nActivePos && nActivePos < aControlList.Count() - 1, 3524 "Button at first or last position?"); 3525 aControlList.Seek(nActivePos - 1); 3526 Control* pLeftEdit = aControlList.GetCurObject(); 3527 aControlList.Seek(nActivePos + 1); 3528 Control* pRightEdit = aControlList.GetCurObject(); 3529 String sTemp(((SwTOXEdit*)pLeftEdit)->GetText()); 3530 sTemp += ((SwTOXEdit*)pRightEdit)->GetText(); 3531 ((SwTOXEdit*)pLeftEdit)->SetText(sTemp); 3532 ((SwTOXEdit*)pLeftEdit)->AdjustSize(); 3533 3534 aControlList.Remove(pRightEdit); 3535 delete pRightEdit; 3536 3537 aControlList.Remove(pDel); 3538 pActiveCtrl->Hide(); 3539 delete pActiveCtrl; 3540 SetActiveControl(pLeftEdit); 3541 AdjustPositions(); 3542 if(aModifyHdl.IsSet()) 3543 aModifyHdl.Call(0); 3544 } 3545 3546 /* -----------------16.07.99 12:39------------------- 3547 3548 --------------------------------------------------*/ 3549 void SwTokenWindow::AdjustPositions() 3550 { 3551 if(aControlList.Count() > 1) 3552 { 3553 Control* pCtrl = aControlList.First(); 3554 Point aNextPos = pCtrl->GetPosPixel(); 3555 aNextPos.X() += pCtrl->GetSizePixel().Width(); 3556 while(0 != (pCtrl = aControlList.Next())) 3557 { 3558 pCtrl->SetPosPixel(aNextPos); 3559 aNextPos.X() += pCtrl->GetSizePixel().Width(); 3560 } 3561 AdjustScrolling(); 3562 } 3563 }; 3564 /* -----------------------------16.08.00 13:22-------------------------------- 3565 3566 ---------------------------------------------------------------------------*/ 3567 void SwTokenWindow::MoveControls(long nOffset) 3568 { 3569 // move the complete list 3570 Control* pCtrl = aControlList.First(); 3571 do 3572 { 3573 Point aPos = pCtrl->GetPosPixel(); 3574 aPos.X() += nOffset; 3575 pCtrl->SetPosPixel(aPos); 3576 }while(0 != (pCtrl = aControlList.Next())); 3577 } 3578 /* -----------------------------14.01.00 13:03-------------------------------- 3579 3580 ---------------------------------------------------------------------------*/ 3581 void SwTokenWindow::AdjustScrolling() 3582 { 3583 if(aControlList.Count() > 1) 3584 { 3585 //validate scroll buttons 3586 Control* pLastCtrl = aControlList.Last(); 3587 Control* pFirstCtrl = aControlList.First(); 3588 long nSpace = aCtrlParentWin.GetSizePixel().Width(); 3589 long nWidth = pLastCtrl->GetPosPixel().X() - pFirstCtrl->GetPosPixel().X() 3590 + pLastCtrl->GetSizePixel().Width(); 3591 sal_Bool bEnable = nWidth > nSpace; 3592 //the active control must be visible 3593 if(bEnable && pActiveCtrl) 3594 { 3595 Point aActivePos(pActiveCtrl->GetPosPixel()); 3596 long nMove = 0; 3597 if(aActivePos.X() < 0) 3598 nMove = -aActivePos.X(); 3599 else if((aActivePos.X() + pActiveCtrl->GetSizePixel().Width()) > nSpace) 3600 nMove = -(aActivePos.X() + pActiveCtrl->GetSizePixel().Width() - nSpace); 3601 if(nMove) 3602 MoveControls(nMove); 3603 aLeftScrollWin.Enable(aControlList.First()->GetPosPixel().X() < 0); 3604 Control* pCtrl = aControlList.Last(); 3605 aRightScrollWin.Enable((pCtrl->GetPosPixel().X() + pCtrl->GetSizePixel().Width()) > nSpace); 3606 } 3607 else 3608 { 3609 if(pFirstCtrl) 3610 { 3611 //if the control fits into the space then the first control must be at postion 0 3612 long nFirstPos = pFirstCtrl->GetPosPixel().X(); 3613 if(nFirstPos != 0) 3614 MoveControls(-nFirstPos); 3615 } 3616 aRightScrollWin.Enable(sal_False); 3617 aLeftScrollWin.Enable(sal_False); 3618 } 3619 } 3620 } 3621 /* -----------------------------14.01.00 13:57-------------------------------- 3622 3623 ---------------------------------------------------------------------------*/ 3624 IMPL_LINK(SwTokenWindow, ScrollHdl, ImageButton*, pBtn ) 3625 { 3626 if(aControlList.Count()) 3627 { 3628 const long nSpace = aCtrlParentWin.GetSizePixel().Width(); 3629 #if OSL_DEBUG_LEVEL > 1 3630 //find all start/end positions and print it 3631 String sMessage(String::CreateFromAscii("Space: ")); 3632 sMessage += String::CreateFromInt32(nSpace); 3633 sMessage += String::CreateFromAscii(" | "); 3634 Control* pDebugCtrl = aControlList.First(); 3635 do 3636 { 3637 long nDebugXPos = pDebugCtrl->GetPosPixel().X(); 3638 long nDebugWidth = pDebugCtrl->GetSizePixel().Width(); 3639 sMessage += String::CreateFromInt32( nDebugXPos ); 3640 sMessage += String::CreateFromAscii(" "); 3641 sMessage += String::CreateFromInt32(nDebugXPos + nDebugWidth); 3642 sMessage += String::CreateFromAscii(" | "); 3643 3644 }while(0 != (pDebugCtrl = aControlList.Next())); 3645 3646 #endif 3647 3648 long nMove = 0; 3649 if(pBtn == &aLeftScrollWin) 3650 { 3651 //find the first completely visible control (left edge visible) 3652 for(sal_uInt16 i = 0; i < aControlList.Count(); i++ ) 3653 { 3654 Control* pCtrl = aControlList.GetObject(i); 3655 long nXPos = pCtrl->GetPosPixel().X(); 3656 if(nXPos >= 0) 3657 { 3658 if(!i) 3659 //move the current control to the left edge 3660 nMove = -nXPos; 3661 else 3662 //move the left neighbor to the start position 3663 nMove = -aControlList.GetObject(i - 1)->GetPosPixel().X(); 3664 break; 3665 } 3666 } 3667 } 3668 else 3669 { 3670 //find the first completely visible control (left edge visible) 3671 for(sal_uLong i = aControlList.Count(); i; i-- ) 3672 { 3673 Control* pCtrl = aControlList.GetObject(i - 1); 3674 long nCtrlWidth = pCtrl->GetSizePixel().Width(); 3675 long nXPos = pCtrl->GetPosPixel().X() + nCtrlWidth; 3676 if(nXPos <= nSpace) 3677 { 3678 if( i < aControlList.Count()) 3679 { 3680 //move the right neighbor to the right edge right aligned 3681 Control* pRight = aControlList.GetObject(i); 3682 nMove = nSpace - pRight->GetPosPixel().X() - pRight->GetSizePixel().Width(); 3683 } 3684 break; 3685 } 3686 } 3687 3688 //move it left until it's completely visible 3689 } 3690 if(nMove) 3691 { 3692 // move the complete list 3693 Control* pCtrl = aControlList.First(); 3694 do 3695 { 3696 Point aPos = pCtrl->GetPosPixel(); 3697 aPos.X() += nMove; 3698 pCtrl->SetPosPixel(aPos); 3699 }while(0 != (pCtrl = aControlList.Next())); 3700 aLeftScrollWin.Enable(aControlList.First()->GetPosPixel().X() < 0); 3701 pCtrl = aControlList.Last(); 3702 aRightScrollWin.Enable((pCtrl->GetPosPixel().X() + pCtrl->GetSizePixel().Width()) > nSpace); 3703 3704 #if OSL_DEBUG_LEVEL > 1 3705 sMessage.AppendAscii("Move: "); 3706 sMessage += String::CreateFromInt32(nMove); 3707 GetParent()->GetParent()->GetParent()->SetText(sMessage); 3708 #endif 3709 } 3710 } 3711 return 0; 3712 } 3713 /* -----------------17.06.99 11:59------------------- 3714 3715 --------------------------------------------------*/ 3716 String SwTokenWindow::GetPattern() const 3717 { 3718 String sRet; 3719 const Control* pControl = ((SwTokenWindow*)this)->aControlList.First(); 3720 while(pControl) 3721 { 3722 const SwFormToken& rNewToken = WINDOW_EDIT == pControl->GetType() 3723 ? ((SwTOXEdit*)pControl)->GetFormToken() 3724 : ((SwTOXButton*)pControl)->GetFormToken(); 3725 3726 //TODO: prevent input of TOX_STYLE_DELIMITER in KeyInput 3727 sRet += rNewToken.GetString(); 3728 3729 pControl = ((SwTokenWindow*)this)->aControlList.Next(); 3730 } 3731 return sRet; 3732 } 3733 /* -----------------19.08.99 11:27------------------- 3734 Description: Check if a control of the specified 3735 TokenType is already contained in the list 3736 --------------------------------------------------*/ 3737 sal_Bool SwTokenWindow::Contains(FormTokenType eSearchFor) const 3738 { 3739 sal_Bool bRet = sal_False; 3740 const Control* pControl = ((SwTokenWindow*)this)->aControlList.First(); 3741 while(pControl) 3742 { 3743 const SwFormToken& rNewToken = WINDOW_EDIT == pControl->GetType() 3744 ? ((SwTOXEdit*)pControl)->GetFormToken() 3745 : ((SwTOXButton*)pControl)->GetFormToken(); 3746 3747 if(eSearchFor == rNewToken.eTokenType) 3748 { 3749 bRet = sal_True; 3750 break; 3751 } 3752 pControl = ((SwTokenWindow*)this)->aControlList.Next(); 3753 } 3754 return bRet; 3755 } 3756 //--------------------------------------------------- 3757 sal_Bool SwTokenWindow::CreateQuickHelp(Control* pCtrl, 3758 const SwFormToken& rToken, 3759 const HelpEvent& rHEvt) 3760 { 3761 sal_Bool bRet = sal_False; 3762 if( rHEvt.GetMode() & HELPMODE_QUICK ) 3763 { 3764 sal_Bool bBalloon = Help::IsBalloonHelpEnabled(); 3765 String sEntry; 3766 if(bBalloon || rToken.eTokenType != TOKEN_AUTHORITY) 3767 sEntry = (aButtonHelpTexts[rToken.eTokenType]); 3768 if(rToken.eTokenType == TOKEN_AUTHORITY ) 3769 { 3770 sEntry += SwAuthorityFieldType::GetAuthFieldName( 3771 (ToxAuthorityField) rToken.nAuthorityField); 3772 } 3773 3774 Point aPos = OutputToScreenPixel(pCtrl->GetPosPixel()); 3775 Rectangle aItemRect( aPos, pCtrl->GetSizePixel() ); 3776 if(rToken.eTokenType == TOKEN_TAB_STOP ) 3777 { 3778 // sEntry += '\n'; 3779 // sEntry += rToken.nTabStopPosition; 3780 } 3781 else 3782 { 3783 if(rToken.sCharStyleName.Len()) 3784 { 3785 if(bBalloon) 3786 sEntry += '\n'; 3787 else 3788 sEntry += ' '; 3789 sEntry += sCharStyle; 3790 sEntry += rToken.sCharStyleName; 3791 } 3792 } 3793 if(bBalloon) 3794 { 3795 Help::ShowBalloon( this, aPos, aItemRect, sEntry ); 3796 } 3797 else 3798 Help::ShowQuickHelp( this, aItemRect, sEntry, 3799 QUICKHELP_LEFT|QUICKHELP_VCENTER ); 3800 bRet = sal_True; 3801 } 3802 return bRet; 3803 } 3804 /* -----------------------------14.01.00 12:22-------------------------------- 3805 3806 ---------------------------------------------------------------------------*/ 3807 void SwTokenWindow::Resize() 3808 { 3809 Size aCompleteSize(GetOutputSizePixel()); 3810 3811 Point aRightPos(aRightScrollWin.GetPosPixel()); 3812 Size aRightSize(aRightScrollWin.GetSizePixel()); 3813 3814 Size aMiddleSize(aCtrlParentWin.GetSizePixel()); 3815 3816 long nMove = aCompleteSize.Width() - aRightSize.Width() - aRightPos.X(); 3817 3818 aRightPos.X() += nMove; 3819 aRightScrollWin.SetPosPixel(aRightPos); 3820 aMiddleSize.Width() += nMove; 3821 aCtrlParentWin.SetSizePixel(aMiddleSize); 3822 } 3823 3824 /* -----------------16.06.99 15:23------------------- 3825 3826 --------------------------------------------------*/ 3827 IMPL_LINK(SwTokenWindow, EditResize, Edit*, pEdit) 3828 { 3829 ((SwTOXEdit*)pEdit)->AdjustSize(); 3830 AdjustPositions(); 3831 if(aModifyHdl.IsSet()) 3832 aModifyHdl.Call(0); 3833 return 0; 3834 } 3835 /* -----------------16.06.99 15:56------------------- 3836 3837 --------------------------------------------------*/ 3838 IMPL_LINK(SwTokenWindow, NextItemHdl, SwTOXEdit*, pEdit) 3839 { 3840 sal_uInt16 nPos = (sal_uInt16)aControlList.GetPos(pEdit); 3841 if( (nPos && !pEdit->IsNextControl()) || 3842 (nPos < aControlList.Count() - 1 && pEdit->IsNextControl())) 3843 { 3844 aControlList.Seek(nPos); 3845 Control* pNextPrev = pEdit->IsNextControl() ? aControlList.Next() : aControlList.Prev(); 3846 nPos += pEdit->IsNextControl() ? 1 : -1; 3847 pNextPrev->GrabFocus(); 3848 ((SwTOXButton*)pNextPrev)->Check(); 3849 AdjustScrolling(); 3850 } 3851 return 0; 3852 } 3853 /* -----------------17.06.99 08:58------------------- 3854 3855 --------------------------------------------------*/ 3856 IMPL_LINK(SwTokenWindow, TbxFocusHdl, SwTOXEdit*, pEdit) 3857 { 3858 for(sal_uInt16 i = 0; i < aControlList.Count(); i++) 3859 { 3860 Control* pControl = aControlList.First(); 3861 while(pControl) 3862 { 3863 if(WINDOW_EDIT != pControl->GetType() ) 3864 ((SwTOXButton*)pControl)->Check(sal_False); 3865 pControl = aControlList.Next(); 3866 } 3867 } 3868 SetActiveControl(pEdit); 3869 return 0; 3870 } 3871 /* -----------------17.06.99 10:05------------------- 3872 3873 --------------------------------------------------*/ 3874 IMPL_LINK(SwTokenWindow, NextItemBtnHdl, SwTOXButton*, pBtn ) 3875 { 3876 sal_uInt16 nPos = (sal_uInt16)aControlList.GetPos(pBtn); 3877 if( (nPos && !pBtn->IsNextControl()) || 3878 (nPos < aControlList.Count() - 1 && pBtn->IsNextControl())) 3879 { 3880 aControlList.Seek(nPos); 3881 sal_Bool bNext = pBtn->IsNextControl(); 3882 Control* pNextPrev = bNext ? aControlList.Next() : aControlList.Prev(); 3883 pNextPrev->GrabFocus(); 3884 Selection aSel(0, 0); 3885 if(!bNext) 3886 { 3887 sal_uInt16 nLen = ((SwTOXEdit*)pNextPrev)->GetText().Len(); 3888 aSel.A() = nLen; 3889 aSel.B() = nLen; 3890 } 3891 ((SwTOXEdit*)pNextPrev)->SetSelection(aSel); 3892 pBtn->Check(sal_False); 3893 AdjustScrolling(); 3894 } 3895 return 0; 3896 } 3897 3898 /* -----------------17.06.99 10:04------------------- 3899 3900 --------------------------------------------------*/ 3901 IMPL_LINK(SwTokenWindow, TbxFocusBtnHdl, SwTOXButton*, pBtn ) 3902 { 3903 for(sal_uInt16 i = 0; i < aControlList.Count(); i++) 3904 { 3905 Control* pControl = aControlList.First(); 3906 while(pControl) 3907 { 3908 if(WINDOW_EDIT != pControl->GetType() ) 3909 ((SwTOXButton*)pControl)->Check(pBtn == pControl); 3910 pControl = aControlList.Next(); 3911 } 3912 } 3913 SetActiveControl(pBtn); 3914 return 0; 3915 } 3916 /* -----------------------------28.01.2002 12:22------------------------------ 3917 3918 ---------------------------------------------------------------------------*/ 3919 void SwTokenWindow::GetFocus() 3920 { 3921 if(GETFOCUS_TAB & GetGetFocusFlags()) 3922 { 3923 Control* pFirst = aControlList.First(); 3924 if(pFirst) 3925 { 3926 pFirst->GrabFocus(); 3927 SetActiveControl(pFirst); 3928 AdjustScrolling(); 3929 } 3930 } 3931 } 3932 /* -----------------25.03.99 15:17------------------- 3933 * 3934 * --------------------------------------------------*/ 3935 SwTOXStylesTabPage::SwTOXStylesTabPage(Window* pParent, const SfxItemSet& rAttrSet ) : 3936 SfxTabPage(pParent, SW_RES(TP_TOX_STYLES), rAttrSet), 3937 aFormatFL(this, SW_RES(FL_FORMAT )), 3938 aLevelFT2(this, SW_RES(FT_LEVEL )), 3939 aLevelLB(this, SW_RES(LB_LEVEL )), 3940 aAssignBT(this, SW_RES(BT_ASSIGN )), 3941 aTemplateFT(this, SW_RES(FT_TEMPLATE)), 3942 aParaLayLB(this, SW_RES(LB_PARALAY )), 3943 aStdBT(this, SW_RES(BT_STD )), 3944 aEditStyleBT(this, SW_RES(BT_EDIT_STYLE )), 3945 m_pCurrentForm(0) 3946 { 3947 FreeResource(); 3948 3949 SetExchangeSupport( sal_True ); 3950 3951 aAssignBT.SetModeImage( Image( SW_RES( IMG_ONE_LEFT_HC ) ), BMP_COLOR_HIGHCONTRAST ); 3952 3953 aEditStyleBT.SetClickHdl (LINK( this, SwTOXStylesTabPage, EditStyleHdl)); 3954 aAssignBT.SetClickHdl (LINK( this, SwTOXStylesTabPage, AssignHdl)); 3955 aStdBT.SetClickHdl (LINK( this, SwTOXStylesTabPage, StdHdl)); 3956 aParaLayLB.SetSelectHdl (LINK( this, SwTOXStylesTabPage, EnableSelectHdl)); 3957 aLevelLB.SetSelectHdl (LINK( this, SwTOXStylesTabPage, EnableSelectHdl)); 3958 aParaLayLB.SetDoubleClickHdl(LINK( this, SwTOXStylesTabPage, DoubleClickHdl)); 3959 3960 aStdBT.SetAccessibleRelationMemberOf(&aFormatFL); 3961 aAssignBT.SetAccessibleRelationMemberOf(&aFormatFL); 3962 aEditStyleBT.SetAccessibleRelationMemberOf(&aFormatFL); 3963 3964 } 3965 /* -----------------25.03.99 15:17------------------- 3966 * 3967 * --------------------------------------------------*/ 3968 SwTOXStylesTabPage::~SwTOXStylesTabPage() 3969 { 3970 delete m_pCurrentForm; 3971 } 3972 /* -----------------25.03.99 15:17------------------- 3973 * 3974 * --------------------------------------------------*/ 3975 sal_Bool SwTOXStylesTabPage::FillItemSet( SfxItemSet& ) 3976 { 3977 return sal_True; 3978 } 3979 /* -----------------25.03.99 15:17------------------- 3980 * 3981 * --------------------------------------------------*/ 3982 void SwTOXStylesTabPage::Reset( const SfxItemSet& rSet ) 3983 { 3984 ActivatePage(rSet); 3985 } 3986 /* -----------------25.03.99 15:17------------------- 3987 * 3988 * --------------------------------------------------*/ 3989 void SwTOXStylesTabPage::ActivatePage( const SfxItemSet& ) 3990 { 3991 m_pCurrentForm = new SwForm(GetForm()); 3992 aParaLayLB.Clear(); 3993 aLevelLB.Clear(); 3994 3995 // kein Hyperlink fuer Benutzerverzeichnisse 3996 3997 sal_uInt16 i, nSize = m_pCurrentForm->GetFormMax(); 3998 3999 // form-Pattern anzeigen ohne Titel 4000 4001 //1. TemplateEntry anzeigen 4002 String aStr( SW_RES( STR_TITLE )); 4003 if( m_pCurrentForm->GetTemplate( 0 ).Len() ) 4004 { 4005 aStr += ' '; 4006 aStr += aDeliStart; 4007 aStr += m_pCurrentForm->GetTemplate( 0 ); 4008 aStr += aDeliEnd; 4009 } 4010 aLevelLB.InsertEntry(aStr); 4011 4012 for( i=1; i < nSize; ++i ) 4013 { 4014 if( TOX_INDEX == m_pCurrentForm->GetTOXType() && 4015 FORM_ALPHA_DELIMITTER == i ) 4016 aStr = SW_RESSTR(STR_ALPHA); 4017 else 4018 { 4019 aStr = SW_RESSTR(STR_LEVEL); 4020 aStr += String::CreateFromInt32( 4021 TOX_INDEX == m_pCurrentForm->GetTOXType() ? i - 1 : i ); 4022 } 4023 String aCpy( aStr ); 4024 4025 if( m_pCurrentForm->GetTemplate( i ).Len() ) 4026 { 4027 aCpy += ' '; 4028 aCpy += aDeliStart; 4029 aCpy += m_pCurrentForm->GetTemplate( i ); 4030 aCpy += aDeliEnd; 4031 } 4032 aLevelLB.InsertEntry( aCpy ); 4033 } 4034 4035 // Templates initialisieren 4036 const SwTxtFmtColl *pColl; 4037 SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(); 4038 const sal_uInt16 nSz = rSh.GetTxtFmtCollCount(); 4039 4040 for( i = 0; i < nSz; ++i ) 4041 if( !(pColl = &rSh.GetTxtFmtColl( i ))->IsDefault() ) 4042 aParaLayLB.InsertEntry( pColl->GetName() ); 4043 4044 // Pool-Collections abfragen und fuer das Verzeichnis setzen 4045 for( i = 0; i < m_pCurrentForm->GetFormMax(); ++i ) 4046 { 4047 aStr = m_pCurrentForm->GetTemplate( i ); 4048 if( aStr.Len() && 4049 LISTBOX_ENTRY_NOTFOUND == aParaLayLB.GetEntryPos( aStr )) 4050 aParaLayLB.InsertEntry( aStr ); 4051 } 4052 4053 EnableSelectHdl(&aParaLayLB); 4054 } 4055 /* -----------------25.03.99 15:17------------------- 4056 * 4057 * --------------------------------------------------*/ 4058 int SwTOXStylesTabPage::DeactivatePage( SfxItemSet* /*pSet*/ ) 4059 { 4060 GetForm() = *m_pCurrentForm; 4061 return LEAVE_PAGE; 4062 } 4063 4064 /* -----------------25.03.99 15:17------------------- 4065 * 4066 * --------------------------------------------------*/ 4067 SfxTabPage* SwTOXStylesTabPage::Create( Window* pParent, 4068 const SfxItemSet& rAttrSet) 4069 { 4070 return new SwTOXStylesTabPage(pParent, rAttrSet); 4071 } 4072 /* -----------------26.03.99 12:47------------------- 4073 * 4074 * --------------------------------------------------*/ 4075 IMPL_LINK( SwTOXStylesTabPage, EditStyleHdl, Button *, pBtn ) 4076 { 4077 if( LISTBOX_ENTRY_NOTFOUND != aParaLayLB.GetSelectEntryPos()) 4078 { 4079 SfxStringItem aStyle(SID_STYLE_EDIT, aParaLayLB.GetSelectEntry()); 4080 SfxUInt16Item aFamily(SID_STYLE_FAMILY, SFX_STYLE_FAMILY_PARA); 4081 // SwPtrItem aShell(FN_PARAM_WRTSHELL, pWrtShell); 4082 Window* pDefDlgParent = Application::GetDefDialogParent(); 4083 Application::SetDefDialogParent( pBtn ); 4084 SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(); 4085 rSh.GetView().GetViewFrame()->GetDispatcher()->Execute( 4086 SID_STYLE_EDIT, SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_MODAL, 4087 &aStyle, &aFamily/*, &aShell*/, 0L); 4088 Application::SetDefDialogParent( pDefDlgParent ); 4089 } 4090 return 0; 4091 } 4092 /*-------------------------------------------------------------------- 4093 Beschreibung: Vorlagen zuweisen 4094 --------------------------------------------------------------------*/ 4095 IMPL_LINK( SwTOXStylesTabPage, AssignHdl, Button *, EMPTYARG ) 4096 { 4097 sal_uInt16 nLevPos = aLevelLB.GetSelectEntryPos(); 4098 sal_uInt16 nTemplPos = aParaLayLB.GetSelectEntryPos(); 4099 if(nLevPos != LISTBOX_ENTRY_NOTFOUND && 4100 nTemplPos != LISTBOX_ENTRY_NOTFOUND) 4101 { 4102 String aStr(aLevelLB.GetEntry(nLevPos)); 4103 sal_uInt16 nDelPos = aStr.Search(aDeliStart); 4104 if(nDelPos != STRING_NOTFOUND) 4105 aStr.Erase(nDelPos-1); 4106 aStr += ' '; 4107 aStr += aDeliStart; 4108 aStr += aParaLayLB.GetSelectEntry(); 4109 4110 m_pCurrentForm->SetTemplate(nLevPos, aParaLayLB.GetSelectEntry()); 4111 4112 aStr += aDeliEnd; 4113 4114 aLevelLB.RemoveEntry(nLevPos); 4115 aLevelLB.InsertEntry(aStr, nLevPos); 4116 aLevelLB.SelectEntry(aStr); 4117 ModifyHdl(0); 4118 } 4119 return 0; 4120 } 4121 /* -----------------26.03.99 09:10------------------- 4122 * 4123 * --------------------------------------------------*/ 4124 IMPL_LINK( SwTOXStylesTabPage, StdHdl, Button *, EMPTYARG ) 4125 { 4126 sal_uInt16 nPos = aLevelLB.GetSelectEntryPos(); 4127 if(nPos != LISTBOX_ENTRY_NOTFOUND) 4128 { String aStr(aLevelLB.GetEntry(nPos)); 4129 sal_uInt16 nDelPos = aStr.Search(aDeliStart); 4130 if(nDelPos != STRING_NOTFOUND) 4131 aStr.Erase(nDelPos-1); 4132 aLevelLB.RemoveEntry(nPos); 4133 aLevelLB.InsertEntry(aStr, nPos); 4134 aLevelLB.SelectEntry(aStr); 4135 m_pCurrentForm->SetTemplate(nPos, aEmptyStr); 4136 ModifyHdl(0); 4137 } 4138 return 0; 4139 } 4140 /* -----------------26.03.99 09:11------------------- 4141 * 4142 * --------------------------------------------------*/ 4143 IMPL_LINK_INLINE_START( SwTOXStylesTabPage, DoubleClickHdl, Button *, EMPTYARG ) 4144 { 4145 String aTmpName( aParaLayLB.GetSelectEntry() ); 4146 SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(); 4147 4148 if(aParaLayLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND && 4149 (aLevelLB.GetSelectEntryPos() == 0 || SwMultiTOXTabDialog::IsNoNum(rSh, aTmpName))) 4150 AssignHdl(&aAssignBT); 4151 return 0; 4152 } 4153 IMPL_LINK_INLINE_END( SwTOXStylesTabPage, DoubleClickHdl, Button *, EMPTYARG ) 4154 /*-------------------------------------------------------------------- 4155 Beschreibung: nur wenn selektiert enable 4156 --------------------------------------------------------------------*/ 4157 IMPL_LINK( SwTOXStylesTabPage, EnableSelectHdl, ListBox *, EMPTYARG ) 4158 { 4159 //UpdatePattern(); 4160 aStdBT.Enable(aLevelLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND); 4161 4162 SwWrtShell& rSh = ((SwMultiTOXTabDialog*)GetTabDialog())->GetWrtShell(); 4163 String aTmpName(aParaLayLB.GetSelectEntry()); 4164 aAssignBT.Enable(aParaLayLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND && 4165 LISTBOX_ENTRY_NOTFOUND != aLevelLB.GetSelectEntryPos() && 4166 (aLevelLB.GetSelectEntryPos() == 0 || SwMultiTOXTabDialog::IsNoNum(rSh, aTmpName))); 4167 aEditStyleBT.Enable(aParaLayLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND ); 4168 return 0; 4169 } 4170 /* -----------------------------18.01.00 16:54-------------------------------- 4171 4172 ---------------------------------------------------------------------------*/ 4173 IMPL_LINK(SwTOXStylesTabPage, ModifyHdl, void*, EMPTYARG) 4174 { 4175 SwMultiTOXTabDialog* pTOXDlg = (SwMultiTOXTabDialog*)GetTabDialog(); 4176 if(pTOXDlg) 4177 { 4178 GetForm() = *m_pCurrentForm; 4179 pTOXDlg->CreateOrUpdateExample(pTOXDlg->GetCurrentTOXType().eType, TOX_PAGE_STYLES); 4180 } 4181 return 0; 4182 } 4183 /****************************************************************************** 4184 4185 ******************************************************************************/ 4186 #define ITEM_SEARCH 1 4187 #define ITEM_ALTERNATIVE 2 4188 #define ITEM_PRIM_KEY 3 4189 #define ITEM_SEC_KEY 4 4190 #define ITEM_COMMENT 5 4191 #define ITEM_CASE 6 4192 #define ITEM_WORDONLY 7 4193 4194 4195 SwEntryBrowseBox::SwEntryBrowseBox(Window* pParent, const ResId& rId, 4196 BrowserMode nMode ) : 4197 SwEntryBrowseBox_Base( pParent, rId, nMode, 4198 BROWSER_KEEPSELECTION | 4199 BROWSER_COLUMNSELECTION | 4200 BROWSER_MULTISELECTION | 4201 BROWSER_TRACKING_TIPS | 4202 BROWSER_HLINESFULL | 4203 BROWSER_VLINESFULL | 4204 BROWSER_AUTO_VSCROLL| 4205 BROWSER_HIDECURSOR ), 4206 aCellEdit(&GetDataWindow(), 0), 4207 aCellCheckBox(&GetDataWindow()), 4208 4209 sSearch( ResId(ST_SEARCH, *rId.GetResMgr() )), 4210 sAlternative( ResId(ST_ALTERNATIVE, *rId.GetResMgr() )), 4211 sPrimKey( ResId(ST_PRIMKEY, *rId.GetResMgr() )), 4212 sSecKey( ResId(ST_SECKEY, *rId.GetResMgr() )), 4213 sComment( ResId(ST_COMMENT, *rId.GetResMgr() )), 4214 sCaseSensitive( ResId(ST_CASESENSITIVE, *rId.GetResMgr() )), 4215 sWordOnly( ResId(ST_WORDONLY, *rId.GetResMgr() )), 4216 sYes( ResId(ST_TRUE, *rId.GetResMgr() )), 4217 sNo( ResId(ST_FALSE, *rId.GetResMgr() )), 4218 bModified(sal_False) 4219 { 4220 FreeResource(); 4221 aCellCheckBox.GetBox().EnableTriState(sal_False); 4222 xController = new ::svt::EditCellController(&aCellEdit); 4223 xCheckController = new ::svt::CheckBoxCellController(&aCellCheckBox); 4224 4225 ////////////////////////////////////////////////////////////////////// 4226 // HACK: BrowseBox invalidiert nicht ihre Childs, wie es eigentlich sein sollte. 4227 // Deshalb wird WB_CLIPCHILDREN zurueckgesetzt, wodurch das Invalidieren 4228 // der Childs erzwungen wird. 4229 WinBits aStyle = GetStyle(); 4230 if( aStyle & WB_CLIPCHILDREN ) 4231 { 4232 aStyle &= ~WB_CLIPCHILDREN; 4233 SetStyle( aStyle ); 4234 } 4235 const String* aTitles[7] = 4236 { 4237 &sSearch, 4238 &sAlternative, 4239 &sPrimKey, 4240 &sSecKey, 4241 &sComment, 4242 &sCaseSensitive, 4243 &sWordOnly 4244 }; 4245 4246 long nWidth = GetSizePixel().Width(); 4247 nWidth /=7; 4248 --nWidth; 4249 for(sal_uInt16 i = 1; i < 8; i++) 4250 InsertDataColumn( i, *aTitles[i - 1], nWidth, 4251 HIB_STDSTYLE, HEADERBAR_APPEND ); 4252 4253 } 4254 /* -----------------------------19.01.00 11:29-------------------------------- 4255 4256 ---------------------------------------------------------------------------*/ 4257 sal_Bool SwEntryBrowseBox::SeekRow( long nRow ) 4258 { 4259 nCurrentRow = nRow; 4260 return sal_True; 4261 } 4262 /* -----------------------------19.01.00 15:32-------------------------------- 4263 4264 ---------------------------------------------------------------------------*/ 4265 String SwEntryBrowseBox::GetCellText(long nRow, sal_uInt16 nColumn) const 4266 { 4267 const String* pRet = &aEmptyStr; 4268 if(aEntryArr.Count() > nRow) 4269 { 4270 AutoMarkEntry* pEntry = aEntryArr[ static_cast< sal_uInt16 >(nRow) ]; 4271 switch(nColumn) 4272 { 4273 case ITEM_SEARCH :pRet = &pEntry->sSearch; break; 4274 case ITEM_ALTERNATIVE :pRet = &pEntry->sAlternative; break; 4275 case ITEM_PRIM_KEY :pRet = &pEntry->sPrimKey ; break; 4276 case ITEM_SEC_KEY :pRet = &pEntry->sSecKey ; break; 4277 case ITEM_COMMENT :pRet = &pEntry->sComment ; break; 4278 case ITEM_CASE :pRet = pEntry->bCase ? &sYes : &sNo; break; 4279 case ITEM_WORDONLY :pRet = pEntry->bWord ? &sYes : &sNo; break; 4280 } 4281 } 4282 return *pRet; 4283 } 4284 4285 /* -----------------------------19.01.00 11:29-------------------------------- 4286 4287 ---------------------------------------------------------------------------*/ 4288 void SwEntryBrowseBox::PaintCell(OutputDevice& rDev, 4289 const Rectangle& rRect, sal_uInt16 nColumnId) const 4290 { 4291 String sPaint = GetCellText( nCurrentRow, nColumnId ); 4292 sal_uInt16 nStyle = TEXT_DRAW_CLIP | TEXT_DRAW_CENTER; 4293 rDev.DrawText( rRect, sPaint, nStyle ); 4294 } 4295 /* -----------------------------19.01.00 14:51-------------------------------- 4296 4297 ---------------------------------------------------------------------------*/ 4298 ::svt::CellController* SwEntryBrowseBox::GetController(long /*nRow*/, sal_uInt16 nCol) 4299 { 4300 return nCol < ITEM_CASE ? xController : xCheckController; 4301 } 4302 /* -----------------------------19.01.00 15:36-------------------------------- 4303 4304 ---------------------------------------------------------------------------*/ 4305 sal_Bool SwEntryBrowseBox::SaveModified() 4306 { 4307 SetModified(); 4308 sal_uInt16 nRow = static_cast< sal_uInt16 >(GetCurRow()); 4309 sal_uInt16 nCol = GetCurColumnId(); 4310 4311 String sNew; 4312 sal_Bool bVal = sal_False; 4313 ::svt::CellController* pController = 0; 4314 if(nCol < ITEM_CASE) 4315 { 4316 pController = xController; 4317 sNew = ((::svt::EditCellController*)pController)->GetEditImplementation()->GetText( LINEEND_LF ); 4318 } 4319 else 4320 { 4321 pController = xCheckController; 4322 bVal = ((::svt::CheckBoxCellController*)pController)->GetCheckBox().IsChecked(); 4323 } 4324 AutoMarkEntry* pEntry = nRow >= aEntryArr.Count() ? new AutoMarkEntry 4325 : aEntryArr[nRow]; 4326 switch(nCol) 4327 { 4328 case ITEM_SEARCH : pEntry->sSearch = sNew; break; 4329 case ITEM_ALTERNATIVE : pEntry->sAlternative = sNew; break; 4330 case ITEM_PRIM_KEY : pEntry->sPrimKey = sNew; break; 4331 case ITEM_SEC_KEY : pEntry->sSecKey = sNew; break; 4332 case ITEM_COMMENT : pEntry->sComment = sNew; break; 4333 case ITEM_CASE : pEntry->bCase = bVal; break; 4334 case ITEM_WORDONLY : pEntry->bWord = bVal; break; 4335 } 4336 if(nRow >= aEntryArr.Count()) 4337 { 4338 aEntryArr.Insert( pEntry, aEntryArr.Count() ); 4339 RowInserted(nRow, 1, sal_True, sal_True); 4340 if(nCol < ITEM_WORDONLY) 4341 { 4342 pController->ClearModified(); 4343 GoToRow( nRow ); 4344 } 4345 } 4346 return sal_True; 4347 } 4348 /* -----------------------------19.01.00 14:32-------------------------------- 4349 4350 ---------------------------------------------------------------------------*/ 4351 void SwEntryBrowseBox::InitController( 4352 ::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol) 4353 { 4354 String rTxt = GetCellText( nRow, nCol ); 4355 if(nCol < ITEM_CASE) 4356 { 4357 rController = xController; 4358 ::svt::CellController* pController = xController; 4359 ((::svt::EditCellController*)pController)->GetEditImplementation()->SetText( rTxt ); 4360 } 4361 else 4362 { 4363 rController = xCheckController; 4364 ::svt::CellController* pController = xCheckController; 4365 ((::svt::CheckBoxCellController*)pController)->GetCheckBox().Check( 4366 rTxt == sYes ); 4367 } 4368 } 4369 /* -----------------------------19.01.00 12:19-------------------------------- 4370 4371 ---------------------------------------------------------------------------*/ 4372 void SwEntryBrowseBox::ReadEntries(SvStream& rInStr) 4373 { 4374 AutoMarkEntry* pToInsert = 0; 4375 const String sZero('0'); 4376 rtl_TextEncoding eTEnc = gsl_getSystemTextEncoding(); 4377 while( !rInStr.GetError() && !rInStr.IsEof() ) 4378 { 4379 String sLine; 4380 rInStr.ReadByteStringLine( sLine, eTEnc ); 4381 4382 // # -> comment 4383 // ; -> delimiter between entries -> 4384 // Format: TextToSearchFor;AlternativeString;PrimaryKey;SecondaryKey 4385 // Leading and trailing blanks are ignored 4386 if( sLine.Len() ) 4387 { 4388 //comments are contained in separate lines but are put into the struct of the following data 4389 //line (if available) 4390 if( '#' != sLine.GetChar(0) ) 4391 { 4392 if( !pToInsert ) 4393 pToInsert = new AutoMarkEntry; 4394 4395 sal_uInt16 nSttPos = 0; 4396 pToInsert->sSearch = sLine.GetToken(0, ';', nSttPos ); 4397 pToInsert->sAlternative = sLine.GetToken(0, ';', nSttPos ); 4398 pToInsert->sPrimKey = sLine.GetToken(0, ';', nSttPos ); 4399 pToInsert->sSecKey = sLine.GetToken(0, ';', nSttPos ); 4400 4401 String sStr = sLine.GetToken(0, ';', nSttPos ); 4402 pToInsert->bCase = sStr.Len() && sStr != sZero; 4403 4404 sStr = sLine.GetToken(0, ';', nSttPos ); 4405 pToInsert->bWord = sStr.Len() && sStr != sZero; 4406 4407 aEntryArr.Insert( pToInsert, aEntryArr.Count() ); 4408 pToInsert = 0; 4409 } 4410 else 4411 { 4412 if(pToInsert) 4413 aEntryArr.Insert(pToInsert, aEntryArr.Count()); 4414 pToInsert = new AutoMarkEntry; 4415 pToInsert->sComment = sLine; 4416 pToInsert->sComment.Erase(0, 1); 4417 } 4418 } 4419 } 4420 if( pToInsert ) 4421 aEntryArr.Insert(pToInsert, aEntryArr.Count()); 4422 RowInserted(0, aEntryArr.Count() + 1, sal_True); 4423 } 4424 /* -----------------------------19.01.00 12:19-------------------------------- 4425 4426 ---------------------------------------------------------------------------*/ 4427 void SwEntryBrowseBox::WriteEntries(SvStream& rOutStr) 4428 { 4429 //check if the current controller is modified 4430 sal_uInt16 nCol = GetCurColumnId(); 4431 ::svt::CellController* pController; 4432 if(nCol < ITEM_CASE) 4433 pController = xController; 4434 else 4435 pController = xCheckController; 4436 if(pController ->IsModified()) 4437 GoToColumnId(nCol < ITEM_CASE ? ++nCol : --nCol ); 4438 4439 rtl_TextEncoding eTEnc = gsl_getSystemTextEncoding(); 4440 for(sal_uInt16 i = 0; i < aEntryArr.Count();i++) 4441 { 4442 AutoMarkEntry* pEntry = aEntryArr[i]; 4443 if(pEntry->sComment.Len()) 4444 { 4445 String sWrite('#'); 4446 sWrite += pEntry->sComment; 4447 rOutStr.WriteByteStringLine( sWrite, eTEnc ); 4448 } 4449 4450 String sWrite( pEntry->sSearch ); 4451 sWrite += ';'; 4452 sWrite += pEntry->sAlternative; 4453 sWrite += ';'; 4454 sWrite += pEntry->sPrimKey; 4455 sWrite += ';'; 4456 sWrite += pEntry->sSecKey; 4457 sWrite += ';'; 4458 sWrite += pEntry->bCase ? '1' : '0'; 4459 sWrite += ';'; 4460 sWrite += pEntry->bWord ? '1' : '0'; 4461 4462 if( sWrite.Len() > 5 ) 4463 rOutStr.WriteByteStringLine( sWrite, eTEnc ); 4464 } 4465 } 4466 /* -----------------------------21.01.00 11:49-------------------------------- 4467 4468 ---------------------------------------------------------------------------*/ 4469 sal_Bool SwEntryBrowseBox::IsModified()const 4470 { 4471 if(bModified) 4472 return sal_True; 4473 4474 4475 //check if the current controller is modified 4476 sal_uInt16 nCol = GetCurColumnId(); 4477 ::svt::CellController* pController; 4478 if(nCol < ITEM_CASE) 4479 pController = xController; 4480 else 4481 pController = xCheckController; 4482 return pController ->IsModified(); 4483 } 4484 /* -----------------------------19.01.00 11:29-------------------------------- 4485 4486 ---------------------------------------------------------------------------*/ 4487 SwAutoMarkDlg_Impl::SwAutoMarkDlg_Impl(Window* pParent, const String& rAutoMarkURL, 4488 const String& rAutoMarkType, sal_Bool bCreate) : 4489 ModalDialog(pParent, SW_RES(DLG_CREATE_AUTOMARK)), 4490 aOKPB( this, SW_RES(PB_OK )), 4491 aCancelPB( this, SW_RES(PB_CANCEL )), 4492 aHelpPB( this, SW_RES(PB_HELP )), 4493 aEntriesBB( this, SW_RES(BB_ENTRIES )), 4494 aEntriesFL( this, SW_RES(FL_ENTRIES )), 4495 sAutoMarkURL(rAutoMarkURL), 4496 sAutoMarkType(rAutoMarkType), 4497 bCreateMode(bCreate) 4498 { 4499 FreeResource(); 4500 aOKPB.SetClickHdl(LINK(this, SwAutoMarkDlg_Impl, OkHdl)); 4501 4502 String sTitle = GetText(); 4503 sTitle.AppendAscii( RTL_CONSTASCII_STRINGPARAM(": ")); 4504 sTitle += sAutoMarkURL; 4505 SetText(sTitle); 4506 sal_Bool bError = sal_False; 4507 if( bCreateMode ) 4508 aEntriesBB.RowInserted(0, 1, sal_True); 4509 else 4510 { 4511 SfxMedium aMed( sAutoMarkURL, STREAM_STD_READ, sal_False ); 4512 if( aMed.GetInStream() && !aMed.GetInStream()->GetError() ) 4513 aEntriesBB.ReadEntries( *aMed.GetInStream() ); 4514 else 4515 bError = sal_True; 4516 } 4517 4518 if(bError) 4519 EndDialog(RET_CANCEL); 4520 } 4521 /* -----------------------------19.01.00 11:12-------------------------------- 4522 4523 ---------------------------------------------------------------------------*/ 4524 SwAutoMarkDlg_Impl::~SwAutoMarkDlg_Impl() 4525 { 4526 } 4527 /* -----------------------------19.01.00 16:43-------------------------------- 4528 4529 ---------------------------------------------------------------------------*/ 4530 IMPL_LINK(SwAutoMarkDlg_Impl, OkHdl, OKButton*, EMPTYARG) 4531 { 4532 sal_Bool bError = sal_False; 4533 if(aEntriesBB.IsModified() || bCreateMode) 4534 { 4535 SfxMedium aMed( sAutoMarkURL, 4536 bCreateMode ? STREAM_WRITE 4537 : STREAM_WRITE| STREAM_TRUNC, 4538 sal_False ); 4539 SvStream* pStrm = aMed.GetOutStream(); 4540 pStrm->SetStreamCharSet( RTL_TEXTENCODING_MS_1253 ); 4541 if( !pStrm->GetError() ) 4542 { 4543 aEntriesBB.WriteEntries( *pStrm ); 4544 aMed.Commit(); 4545 } 4546 else 4547 bError = sal_True; 4548 } 4549 if( !bError ) 4550 EndDialog(RET_OK); 4551 return 0; 4552 } 4553 4554