1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 // MARKER(update_precomp.py): autogen include statement, do not remove 23 #include "precompiled_sw.hxx" 24 25 #include <hintids.hxx> 26 #include <sfx2/request.hxx> 27 #include <sfx2/dispatch.hxx> 28 #include <sfx2/childwin.hxx> 29 #include <unotools/useroptions.hxx> 30 #include <cppuhelper/weak.hxx> 31 #include <com/sun/star/frame/FrameSearchFlag.hpp> 32 #include <com/sun/star/view/XSelectionSupplier.hpp> 33 #include <cppuhelper/implbase1.hxx> // helper for implementations 34 #include <svx/dataaccessdescriptor.hxx> 35 #include <editeng/wghtitem.hxx> 36 #include <editeng/postitem.hxx> 37 #include <editeng/udlnitem.hxx> 38 #include <editeng/crsditem.hxx> 39 #include <editeng/cmapitem.hxx> 40 #include <editeng/colritem.hxx> 41 #include <editeng/brshitem.hxx> 42 #include <vcl/msgbox.hxx> 43 #include <swmodule.hxx> 44 #include <swtypes.hxx> 45 #include <usrpref.hxx> 46 #include <modcfg.hxx> 47 #include <view.hxx> 48 #include <pview.hxx> 49 #include <wview.hxx> 50 #include <wrtsh.hxx> 51 #include <docsh.hxx> 52 #include <dbmgr.hxx> 53 #include <uinums.hxx> 54 #include <prtopt.hxx> // fuer PrintOptions 55 #include <navicfg.hxx> 56 #include <doc.hxx> 57 #include <cmdid.h> 58 #include <app.hrc> 59 #include "helpid.h" 60 61 #include <unomid.h> 62 #include <tools/color.hxx> 63 #include "PostItMgr.hxx" 64 65 using ::rtl::OUString; 66 using namespace ::svx; 67 using namespace ::com::sun::star; 68 using namespace ::com::sun::star::uno; 69 using namespace ::com::sun::star::beans; 70 using namespace ::com::sun::star::frame; 71 using namespace ::com::sun::star::view; 72 using namespace ::com::sun::star::lang; 73 74 75 /*-----------------08/28/97 08:41pm----------------- 76 77 --------------------------------------------------*/ 78 void lcl_SetUIPrefs(const SwViewOption* pPref, SwView* pView, ViewShell* pSh ) 79 { 80 // in FrameSets kann die tatsaechliche Sichtbarkeit von der Einstellung der ViewOptions abweichen 81 sal_Bool bVScrollChanged = pPref->IsViewVScrollBar() != pSh->GetViewOptions()->IsViewVScrollBar(); 82 sal_Bool bHScrollChanged = pPref->IsViewHScrollBar() != pSh->GetViewOptions()->IsViewHScrollBar(); 83 sal_Bool bVAlignChanged = pPref->IsVRulerRight() != pSh->GetViewOptions()->IsVRulerRight(); 84 85 pSh->SetUIOptions(*pPref); 86 const SwViewOption* pNewPref = pSh->GetViewOptions(); 87 88 // Scrollbar on / off 89 if(bVScrollChanged) 90 { 91 pView->ShowVScrollbar(pNewPref->IsViewVScrollBar()); 92 } 93 if(bHScrollChanged) 94 { 95 pView->ShowHScrollbar( pNewPref->IsViewHScrollBar() || pNewPref->getBrowseMode() ); 96 } 97 // if only the position of the vertical ruler has been changed initiate an update 98 if(bVAlignChanged && !bHScrollChanged && !bVScrollChanged) 99 pView->InvalidateBorder(); 100 101 // Ruler on / off 102 if(pNewPref->IsViewVRuler()) 103 pView->CreateVRuler(); 104 else 105 pView->KillVRuler(); 106 107 // TabWindow an/aus 108 if(pNewPref->IsViewHRuler()) 109 pView->CreateTab(); 110 else 111 pView->KillTab(); 112 113 pView->GetPostItMgr()->PrepareView(true); 114 } 115 116 /*-------------------------------------------------------------------- 117 Beschreibung: Aktuelle SwWrtShell 118 --------------------------------------------------------------------*/ 119 120 SwWrtShell* GetActiveWrtShell() 121 { 122 SwView *pActive = ::GetActiveView(); 123 if( pActive ) 124 return &pActive->GetWrtShell(); 125 return 0; 126 } 127 128 /*-------------------------------------------------------------------- 129 Beschreibung: Pointer auf die aktuelle Sicht 130 --------------------------------------------------------------------*/ 131 132 SwView* GetActiveView() 133 { 134 SfxViewShell* pView = SfxViewShell::Current(); 135 return PTR_CAST( SwView, pView ); 136 } 137 /*-------------------------------------------------------------------- 138 Beschreibung: Ueber Views iterieren - static 139 --------------------------------------------------------------------*/ 140 141 SwView* SwModule::GetFirstView() 142 { 143 // liefert nur sichtbare SwViews 144 const TypeId aTypeId = TYPE(SwView); 145 SwView* pView = (SwView*)SfxViewShell::GetFirst(&aTypeId); 146 return pView; 147 } 148 149 SwView* SwModule::GetNextView(SwView* pView) 150 { 151 DBG_ASSERT(PTR_CAST(SwView, pView),"keine SwView uebergeben"); 152 const TypeId aTypeId = TYPE(SwView); 153 SwView* pNView = (SwView*)SfxViewShell::GetNext(*pView, &aTypeId, sal_True); 154 return pNView; 155 } 156 157 /*------------------------------------------------------------------------ 158 Beschreibung: Neuer Master fuer die Einstellungen wird gesetzt; 159 dieser wirkt sich auf die aktuelle Sicht und alle 160 folgenden aus. 161 ------------------------------------------------------------------------*/ 162 163 void SwModule::ApplyUsrPref(const SwViewOption &rUsrPref, SwView* pActView, 164 sal_uInt16 nDest ) 165 { 166 SwView* pCurrView = pActView; 167 ViewShell* pSh = pCurrView ? &pCurrView->GetWrtShell() : 0; 168 169 SwMasterUsrPref* pPref = (SwMasterUsrPref*)GetUsrPref( static_cast< sal_Bool >( 170 VIEWOPT_DEST_WEB == nDest ? sal_True : 171 VIEWOPT_DEST_TEXT== nDest ? sal_False : 172 pCurrView && pCurrView->ISA(SwWebView) )); 173 174 //per Uno soll nur die sdbcx::View, aber nicht das Module veraendert werden 175 sal_Bool bViewOnly = VIEWOPT_DEST_VIEW_ONLY == nDest; 176 //PreView abfruehstuecken 177 SwPagePreView* pPPView; 178 if( !pCurrView && 0 != (pPPView = PTR_CAST( SwPagePreView, SfxViewShell::Current())) ) 179 { 180 if(!bViewOnly) 181 pPref->SetUIOptions( rUsrPref ); 182 pPPView->ShowVScrollbar(pPref->IsViewVScrollBar()); 183 pPPView->ShowHScrollbar(pPref->IsViewHScrollBar()); 184 if(!bViewOnly) 185 { 186 pPref->SetPagePrevRow(rUsrPref.GetPagePrevRow()); 187 pPref->SetPagePrevCol(rUsrPref.GetPagePrevCol()); 188 } 189 return; 190 } 191 192 if(!bViewOnly) 193 { 194 pPref->SetUsrPref( rUsrPref ); 195 pPref->SetModified(); 196 } 197 198 if( !pCurrView ) 199 return; 200 201 // Weitergabe an die CORE 202 sal_Bool bReadonly; 203 const SwDocShell* pDocSh = pCurrView->GetDocShell(); 204 if (pDocSh) 205 bReadonly = pDocSh->IsReadOnly(); 206 else //Use existing option if DocShell missing 207 bReadonly = pSh->GetViewOptions()->IsReadonly(); 208 SwViewOption* pViewOpt; 209 if(!bViewOnly) 210 pViewOpt = new SwViewOption( *pPref ); 211 else 212 pViewOpt = new SwViewOption( rUsrPref ); 213 pViewOpt->SetReadonly( bReadonly ); 214 if( !(*pSh->GetViewOptions() == *pViewOpt) ) 215 { 216 //Ist evtl. nur eine ViewShell 217 pSh->StartAction(); 218 pSh->ApplyViewOptions( *pViewOpt ); 219 ((SwWrtShell*)pSh)->SetReadOnlyAvailable(pViewOpt->IsCursorInProtectedArea()); 220 pSh->EndAction(); 221 } 222 if ( pSh->GetViewOptions()->IsReadonly() != bReadonly ) 223 pSh->SetReadonlyOption(bReadonly); 224 225 lcl_SetUIPrefs(pViewOpt, pCurrView, pSh); 226 227 // zum Schluss wird das Idle-Flag wieder gesetzt 228 // #42510# 229 pPref->SetIdle(sal_True); 230 231 delete pViewOpt; 232 } 233 /* -----------------------------28.09.00 12:36-------------------------------- 234 235 ---------------------------------------------------------------------------*/ 236 void SwModule::ApplyUserMetric( FieldUnit eMetric, sal_Bool bWeb ) 237 { 238 SwMasterUsrPref* pPref; 239 if(bWeb) 240 { 241 if(!pWebUsrPref) 242 GetUsrPref(sal_True); 243 pPref = pWebUsrPref; 244 } 245 else 246 { 247 if(!pUsrPref) 248 GetUsrPref(sal_False); 249 pPref = pUsrPref; 250 } 251 FieldUnit eOldMetric = pPref->GetMetric(); 252 if(eOldMetric != eMetric) 253 pPref->SetMetric(eMetric); 254 255 FieldUnit eHScrollMetric = pPref->IsHScrollMetric() ? pPref->GetHScrollMetric() : eMetric; 256 FieldUnit eVScrollMetric = pPref->IsVScrollMetric() ? pPref->GetVScrollMetric() : eMetric; 257 258 SwView* pTmpView = SwModule::GetFirstView(); 259 // Switch Ruler for every MDI window 260 while(pTmpView) 261 { 262 if(bWeb == (0 != PTR_CAST(SwWebView, pTmpView))) 263 { 264 pTmpView->ChangeVRulerMetric(eVScrollMetric); 265 pTmpView->ChangeTabMetric(eHScrollMetric); 266 } 267 268 pTmpView = SwModule::GetNextView(pTmpView); 269 } 270 } 271 /*-- 12.11.2008 14:47:58--------------------------------------------------- 272 273 -----------------------------------------------------------------------*/ 274 void SwModule::ApplyRulerMetric( FieldUnit eMetric, sal_Bool bHorizontal, sal_Bool bWeb ) 275 { 276 SwMasterUsrPref* pPref; 277 if(bWeb) 278 { 279 if(!pWebUsrPref) 280 GetUsrPref(sal_True); 281 pPref = pWebUsrPref; 282 } 283 else 284 { 285 if(!pUsrPref) 286 GetUsrPref(sal_False); 287 pPref = pUsrPref; 288 } 289 if( bHorizontal ) 290 pPref->SetHScrollMetric(eMetric); 291 else 292 pPref->SetVScrollMetric(eMetric); 293 294 SwView* pTmpView = SwModule::GetFirstView(); 295 // switch metric at the appropriate rulers 296 while(pTmpView) 297 { 298 if(bWeb == (0 != dynamic_cast<SwWebView *>( pTmpView ))) 299 { 300 if( bHorizontal ) 301 pTmpView->ChangeTabMetric(eMetric); 302 else 303 pTmpView->ChangeVRulerMetric(eMetric); 304 } 305 pTmpView = SwModule::GetNextView(pTmpView); 306 } 307 } 308 /*-----------------13.11.96 11.57------------------- 309 310 --------------------------------------------------*/ 311 312 SwNavigationConfig* SwModule::GetNavigationConfig() 313 { 314 if(!pNavigationConfig) 315 { 316 pNavigationConfig = new SwNavigationConfig; 317 } 318 return pNavigationConfig; 319 } 320 321 /*-----------------05.02.97 08.03------------------- 322 323 --------------------------------------------------*/ 324 325 SwPrintOptions* SwModule::GetPrtOptions(sal_Bool bWeb) 326 { 327 if(bWeb && !pWebPrtOpt) 328 { 329 pWebPrtOpt = new SwPrintOptions(sal_True); 330 } 331 else if(!bWeb && !pPrtOpt) 332 { 333 pPrtOpt = new SwPrintOptions(sal_False); 334 } 335 336 return bWeb ? pWebPrtOpt : pPrtOpt; 337 } 338 339 /*-----------------26.06.97 07.52------------------- 340 341 --------------------------------------------------*/ 342 SwChapterNumRules* SwModule::GetChapterNumRules() 343 { 344 if(!pChapterNumRules) 345 pChapterNumRules = new SwChapterNumRules; 346 return pChapterNumRules; 347 } 348 349 /*-------------------------------------------------------------------- 350 Beschreibung: 351 --------------------------------------------------------------------*/ 352 353 void SwModule::ShowDBObj(SwView& rView, const SwDBData& rData, sal_Bool /*bOnlyIfAvailable*/) 354 { 355 Reference<XFrame> xFrame = rView.GetViewFrame()->GetFrame().GetFrameInterface(); 356 Reference<XDispatchProvider> xDP(xFrame, uno::UNO_QUERY); 357 358 uno::Reference<frame::XFrame> xBeamerFrame = xFrame->findFrame( 359 rtl::OUString::createFromAscii("_beamer"), 360 FrameSearchFlag::CHILDREN); 361 if (xBeamerFrame.is()) 362 { // the beamer has been opened by the SfxViewFrame 363 Reference<XController> xController = xBeamerFrame->getController(); 364 Reference<XSelectionSupplier> xControllerSelection(xController, UNO_QUERY); 365 if (xControllerSelection.is()) 366 { 367 368 ODataAccessDescriptor aSelection; 369 aSelection.setDataSource(rData.sDataSource); 370 aSelection[daCommand] <<= rData.sCommand; 371 aSelection[daCommandType] <<= rData.nCommandType; 372 xControllerSelection->select(makeAny(aSelection.createPropertyValueSequence())); 373 } 374 else { 375 DBG_ERROR("no selection supplier in the beamer!"); 376 } 377 } 378 } 379 /*-------------------------------------------------------------------- 380 Beschreibung: Redlining 381 --------------------------------------------------------------------*/ 382 383 sal_uInt16 SwModule::GetRedlineAuthor() 384 { 385 if (!bAuthorInitialised) 386 { 387 const SvtUserOptions& rOpt = GetUserOptions(); 388 if( !(sActAuthor = rOpt.GetFullName()).Len() ) 389 if( !(sActAuthor = rOpt.GetID()).Len() ) 390 sActAuthor = String( SW_RES( STR_REDLINE_UNKNOWN_AUTHOR )); 391 bAuthorInitialised = sal_True; 392 } 393 return InsertRedlineAuthor( sActAuthor ); 394 } 395 396 /*-------------------------------------------------------------------- 397 Beschreibung: 398 --------------------------------------------------------------------*/ 399 400 const String& SwModule::GetRedlineAuthor(sal_uInt16 nPos) 401 { 402 DBG_ASSERT(nPos<pAuthorNames->Count(), "author not found!"); // #i45342# RTF doc with no author table caused reader to crash 403 while (!(nPos<pAuthorNames->Count())) 404 { 405 InsertRedlineAuthor(String(RTL_CONSTASCII_USTRINGPARAM("nn"))); 406 }; 407 return *pAuthorNames->GetObject(nPos); 408 } 409 410 /*-------------------------------------------------------------------- 411 Beschreibung: 412 --------------------------------------------------------------------*/ 413 414 sal_uInt16 SwModule::InsertRedlineAuthor(const String& rAuthor) 415 { 416 sal_uInt16 nPos = 0; 417 418 while (nPos < pAuthorNames->Count() && *pAuthorNames->GetObject(nPos) != rAuthor) 419 nPos++; 420 421 if (nPos == pAuthorNames->Count()) 422 pAuthorNames->Insert(new String(rAuthor), nPos); 423 424 return nPos; 425 } 426 427 /*-------------------------------------------------------------------- 428 Beschreibung: 429 --------------------------------------------------------------------*/ 430 431 void lcl_FillAuthorAttr( sal_uInt16 nAuthor, SfxItemSet &rSet, 432 const AuthorCharAttr &rAttr ) 433 { 434 Color aCol( rAttr.nColor ); 435 436 if( COL_TRANSPARENT == rAttr.nColor ) 437 { 438 static const ColorData aColArr[] = { 439 COL_AUTHOR1_DARK, COL_AUTHOR2_DARK, COL_AUTHOR3_DARK, 440 COL_AUTHOR4_DARK, COL_AUTHOR5_DARK, COL_AUTHOR6_DARK, 441 COL_AUTHOR7_DARK, COL_AUTHOR8_DARK, COL_AUTHOR9_DARK }; 442 443 aCol.SetColor( aColArr[ nAuthor % (sizeof( aColArr ) / 444 sizeof( aColArr[0] )) ] ); 445 } 446 447 sal_Bool bBackGr = COL_NONE == rAttr.nColor; 448 449 switch (rAttr.nItemId) 450 { 451 case SID_ATTR_CHAR_WEIGHT: 452 { 453 SvxWeightItem aW( (FontWeight)rAttr.nAttr, RES_CHRATR_WEIGHT ); 454 rSet.Put( aW ); 455 aW.SetWhich( RES_CHRATR_CJK_WEIGHT ); 456 rSet.Put( aW ); 457 aW.SetWhich( RES_CHRATR_CTL_WEIGHT ); 458 rSet.Put( aW ); 459 } 460 break; 461 462 case SID_ATTR_CHAR_POSTURE: 463 { 464 SvxPostureItem aP( (FontItalic)rAttr.nAttr, RES_CHRATR_POSTURE ); 465 rSet.Put( aP ); 466 aP.SetWhich( RES_CHRATR_CJK_POSTURE ); 467 rSet.Put( aP ); 468 aP.SetWhich( RES_CHRATR_CTL_POSTURE ); 469 rSet.Put( aP ); 470 } 471 break; 472 473 case SID_ATTR_CHAR_UNDERLINE: 474 rSet.Put( SvxUnderlineItem( (FontUnderline)rAttr.nAttr, 475 RES_CHRATR_UNDERLINE)); 476 break; 477 478 case SID_ATTR_CHAR_STRIKEOUT: 479 rSet.Put(SvxCrossedOutItem( (FontStrikeout)rAttr.nAttr, 480 RES_CHRATR_CROSSEDOUT)); 481 break; 482 483 case SID_ATTR_CHAR_CASEMAP: 484 rSet.Put( SvxCaseMapItem( (SvxCaseMap)rAttr.nAttr, 485 RES_CHRATR_CASEMAP)); 486 break; 487 488 case SID_ATTR_BRUSH: 489 rSet.Put( SvxBrushItem( aCol, RES_CHRATR_BACKGROUND )); 490 bBackGr = sal_True; 491 break; 492 } 493 494 if( !bBackGr ) 495 rSet.Put( SvxColorItem( aCol, RES_CHRATR_COLOR ) ); 496 } 497 498 /*-------------------------------------------------------------------- 499 Beschreibung: 500 --------------------------------------------------------------------*/ 501 502 void SwModule::GetInsertAuthorAttr(sal_uInt16 nAuthor, SfxItemSet &rSet) 503 { 504 lcl_FillAuthorAttr(nAuthor, rSet, pModuleConfig->GetInsertAuthorAttr()); 505 } 506 507 /*-------------------------------------------------------------------- 508 Beschreibung: 509 --------------------------------------------------------------------*/ 510 511 void SwModule::GetDeletedAuthorAttr(sal_uInt16 nAuthor, SfxItemSet &rSet) 512 { 513 lcl_FillAuthorAttr(nAuthor, rSet, pModuleConfig->GetDeletedAuthorAttr()); 514 } 515 516 /*-------------------------------------------------------------------- 517 Beschreibung: Fuer zukuenftige Erweiterung: 518 --------------------------------------------------------------------*/ 519 520 void SwModule::GetFormatAuthorAttr( sal_uInt16 nAuthor, SfxItemSet &rSet ) 521 { 522 lcl_FillAuthorAttr( nAuthor, rSet, pModuleConfig->GetFormatAuthorAttr() ); 523 } 524 525 /*-------------------------------------------------------------------- 526 Beschreibung: 527 --------------------------------------------------------------------*/ 528 529 sal_uInt16 SwModule::GetRedlineMarkPos() 530 { 531 return pModuleConfig->GetMarkAlignMode(); 532 } 533 534 /*-------------------------------------------------------------------- 535 Beschreibung: 536 --------------------------------------------------------------------*/ 537 538 sal_Bool SwModule::IsInsTblFormatNum(sal_Bool bHTML) const 539 { 540 return pModuleConfig->IsInsTblFormatNum(bHTML); 541 } 542 543 sal_Bool SwModule::IsInsTblChangeNumFormat(sal_Bool bHTML) const 544 { 545 return pModuleConfig->IsInsTblChangeNumFormat(bHTML); 546 } 547 548 /*-------------------------------------------------------------------- 549 Beschreibung: 550 --------------------------------------------------------------------*/ 551 552 sal_Bool SwModule::IsInsTblAlignNum(sal_Bool bHTML) const 553 { 554 return pModuleConfig->IsInsTblAlignNum(bHTML); 555 } 556 557 /*-------------------------------------------------------------------- 558 Beschreibung: 559 --------------------------------------------------------------------*/ 560 561 const Color &SwModule::GetRedlineMarkColor() 562 { 563 return pModuleConfig->GetMarkAlignColor(); 564 } 565 566 /*-----------------03.03.98 16:47------------------- 567 568 --------------------------------------------------*/ 569 const SwViewOption* SwModule::GetViewOption(sal_Bool bWeb) 570 { 571 return GetUsrPref( bWeb ); 572 } 573 574 // returne den definierten DocStat - WordDelimiter 575 const String& SwModule::GetDocStatWordDelim() const 576 { 577 return pModuleConfig->GetWordDelimiter(); 578 } 579 /* --------------------------------------------------------------------------- 580 581 ---------------------------------------------------------------------------*/ 582 // Durchreichen der Metric von der ModuleConfig (für HTML-Export) 583 sal_uInt16 SwModule::GetMetric( sal_Bool bWeb ) const 584 { 585 SwMasterUsrPref* pPref; 586 if(bWeb) 587 { 588 if(!pWebUsrPref) 589 GetUsrPref(sal_True); 590 pPref = pWebUsrPref; 591 } 592 else 593 { 594 if(!pUsrPref) 595 GetUsrPref(sal_False); 596 pPref = pUsrPref; 597 } 598 return static_cast< sal_uInt16 >(pPref->GetMetric()); 599 } 600 /* --------------------------------------------------------------------------- 601 602 ---------------------------------------------------------------------------*/ 603 // Update-Stati durchreichen 604 sal_uInt16 SwModule::GetLinkUpdMode( sal_Bool ) const 605 { 606 if(!pUsrPref) 607 GetUsrPref(sal_False); 608 return (sal_uInt16)pUsrPref->GetUpdateLinkMode(); 609 } 610 /* --------------------------------------------------------------------------- 611 612 ---------------------------------------------------------------------------*/ 613 SwFldUpdateFlags SwModule::GetFldUpdateFlags( sal_Bool ) const 614 { 615 if(!pUsrPref) 616 GetUsrPref(sal_False); 617 return pUsrPref->GetFldUpdateFlags(); 618 } 619 /* -----------------------------28.09.00 14:18-------------------------------- 620 621 ---------------------------------------------------------------------------*/ 622 void SwModule::ApplyFldUpdateFlags(SwFldUpdateFlags eFldFlags) 623 { 624 if(!pUsrPref) 625 GetUsrPref(sal_False); 626 pUsrPref->SetFldUpdateFlags(eFldFlags); 627 } 628 /* -----------------------------28.09.00 14:18-------------------------------- 629 630 ---------------------------------------------------------------------------*/ 631 void SwModule::ApplyLinkMode(sal_Int32 nNewLinkMode) 632 { 633 if(!pUsrPref) 634 GetUsrPref(sal_False); 635 pUsrPref->SetUpdateLinkMode(nNewLinkMode); 636 } 637 /* --------------------------------------------------------------------------- 638 639 ---------------------------------------------------------------------------*/ 640 void SwModule::CheckSpellChanges( sal_Bool bOnlineSpelling, 641 sal_Bool bIsSpellWrongAgain, sal_Bool bIsSpellAllAgain, sal_Bool bSmartTags ) 642 { 643 sal_Bool bOnlyWrong = bIsSpellWrongAgain && !bIsSpellAllAgain; 644 sal_Bool bInvalid = bOnlyWrong || bIsSpellAllAgain; 645 if( bOnlineSpelling || bInvalid ) 646 { 647 TypeId aType = TYPE(SwDocShell); 648 for( SwDocShell *pDocSh = (SwDocShell*)SfxObjectShell::GetFirst(&aType); 649 pDocSh; 650 pDocSh = (SwDocShell*)SfxObjectShell::GetNext( *pDocSh, &aType ) ) 651 { 652 SwDoc* pTmp = pDocSh->GetDoc(); 653 if ( pTmp->GetCurrentViewShell() ) // swmod 071108//swmod 071225 654 { 655 pTmp->SpellItAgainSam( bInvalid, bOnlyWrong, bSmartTags ); 656 ViewShell* pViewShell = 0; 657 pTmp->GetEditShell( &pViewShell ); 658 if ( bSmartTags && pViewShell && pViewShell->GetWin() ) 659 pViewShell->GetWin()->Invalidate(); 660 } 661 } 662 // pSpell->SetSpellWrongAgain( sal_False ); 663 // pSpell->SetSpellAllAgain( sal_False ); 664 } 665 } 666 667 void SwModule::ApplyDefaultPageMode(sal_Bool bIsSquaredPageMode) 668 { 669 if(!pUsrPref) 670 GetUsrPref(sal_False); 671 pUsrPref->SetDefaultPageMode(bIsSquaredPageMode); 672 } 673 674 /* vim: set noet sw=4 ts=4: */ 675