Add a comment to clarify what kind of inputs the class handles
[LibreOffice.git] / sw / source / uibase / uiview / view0.cxx
blobdab7f898fe515e9e2f3cd6882b1adfaef7373910
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <config_features.h>
21 #include <config_wasm_strip.h>
23 #include <SwSpellDialogChildWindow.hxx>
24 #include <svl/eitem.hxx>
25 #include <unotools/configmgr.hxx>
26 #include <unotools/linguprops.hxx>
27 #include <unotools/lingucfg.hxx>
28 #include <officecfg/Office/Common.hxx>
29 #include <viewopt.hxx>
30 #include <globals.h>
31 #include <sfx2/infobar.hxx>
32 #include <sfx2/lokhelper.hxx>
33 #include <sfx2/request.hxx>
34 #include <svl/whiter.hxx>
35 #include <svx/srchdlg.hxx>
36 #include <sfx2/viewfrm.hxx>
37 #include <sfx2/bindings.hxx>
38 #include <sfx2/dispatch.hxx>
39 #include <sfx2/sidebar/SidebarChildWindow.hxx>
40 #include <uivwimp.hxx>
41 #include <unotxdoc.hxx>
42 #include <avmedia/mediaplayer.hxx>
43 #include <swmodule.hxx>
44 #include <com/sun/star/linguistic2/XLinguProperties.hpp>
45 #include <comphelper/servicehelper.hxx>
46 #include <osl/diagnose.h>
48 #include <sfx2/objface.hxx>
49 #include <wrtsh.hxx>
50 #include <edtwin.hxx>
51 #include <view.hxx>
52 #include <docsh.hxx>
53 #include <doc.hxx>
54 #include <globals.hrc>
55 #include <cmdid.h>
56 #include <globdoc.hxx>
57 #include <wview.hxx>
58 #include <OnlineAccessibilityCheck.hxx>
60 #define ShellClass_SwView
61 #define ShellClass_Text
62 #define ShellClass_TextDrawText
64 #include <sfx2/msg.hxx>
65 #include <swslots.hxx>
66 #include <PostItMgr.hxx>
68 #include <unotools/moduleoptions.hxx>
69 #include <sfx2/viewfac.hxx>
71 #include <memory>
72 #include <swabstdlg.hxx>
74 using namespace ::com::sun::star;
76 SFX_IMPL_NAMED_VIEWFACTORY(SwView, "Default")
78 if (comphelper::IsFuzzing() || SvtModuleOptions().IsWriterInstalled())
80 SFX_VIEW_REGISTRATION(SwDocShell);
81 SFX_VIEW_REGISTRATION(SwGlobalDocShell);
85 SFX_IMPL_INTERFACE(SwView, SfxViewShell)
87 void SwView::InitInterface_Impl()
89 GetStaticInterface()->RegisterChildWindow(SID_NAVIGATOR, true);
91 GetStaticInterface()->RegisterChildWindow(::sfx2::sidebar::SidebarChildWindow::GetChildWindowId());
93 GetStaticInterface()->RegisterChildWindow(SfxInfoBarContainerChild::GetChildWindowId());
94 GetStaticInterface()->RegisterChildWindow(SvxSearchDialogWrapper::GetChildWindowId());
95 GetStaticInterface()->RegisterChildWindow(SwSpellDialogChildWindow::GetChildWindowId());
96 GetStaticInterface()->RegisterChildWindow(FN_REDLINE_ACCEPT);
97 GetStaticInterface()->RegisterChildWindow(SID_HYPERLINK_DIALOG);
98 GetStaticInterface()->RegisterChildWindow(FN_WORDCOUNT_DIALOG);
99 #if HAVE_FEATURE_AVMEDIA
100 GetStaticInterface()->RegisterChildWindow(::avmedia::MediaPlayer::GetChildWindowId());
101 #endif
102 GetStaticInterface()->RegisterChildWindow(FN_INSERT_FIELD_DATA_ONLY);
104 GetStaticInterface()->RegisterChildWindow(FN_SYNC_LABELS, false, SfxShellFeature::SwChildWindowLabel);
106 GetStaticInterface()->RegisterObjectBar(SFX_OBJECTBAR_TOOLS, SfxVisibilityFlags::Standard|SfxVisibilityFlags::Server,
107 ToolbarId::Tools_Toolbox);
111 ShellMode SwView::GetShellMode() const
113 return m_pViewImpl->GetShellMode();
116 view::XSelectionSupplier* SwView::GetUNOObject()
118 return m_pViewImpl->GetUNOObject();
121 void SwView::SetMailMergeConfigItem(std::shared_ptr<SwMailMergeConfigItem> const & rConfigItem)
123 m_pViewImpl->SetMailMergeConfigItem(rConfigItem);
124 UIFeatureChanged();
127 std::shared_ptr<SwMailMergeConfigItem> const & SwView::GetMailMergeConfigItem() const
129 return m_pViewImpl->GetMailMergeConfigItem();
132 static bool lcl_IsViewMarks( const SwViewOption& rVOpt )
134 return rVOpt.IsFieldShadings();
136 static void lcl_SetViewMarks(SwViewOption& rVOpt, bool bOn )
138 rVOpt.SetAppearanceFlag(
139 ViewOptFlags::FieldShadings, bOn, true);
142 static void lcl_SetViewMetaChars( SwViewOption& rVOpt, bool bOn)
144 rVOpt.SetViewMetaChars( bOn );
145 if(bOn && !(rVOpt.IsParagraph() ||
146 rVOpt.IsTab() ||
147 rVOpt.IsLineBreak() ||
148 rVOpt.IsShowHiddenChar() ||
149 rVOpt.IsShowBookmarks() ||
150 rVOpt.IsBlank()))
152 rVOpt.SetParagraph(bOn);
153 rVOpt.SetTab(bOn);
154 rVOpt.SetLineBreak(bOn);
155 rVOpt.SetBlank(bOn);
156 rVOpt.SetShowHiddenChar(bOn);
157 rVOpt.SetShowBookmarks(bOn);
161 void SwView::RecheckBrowseMode()
163 // OS: pay attention to numerical order!
164 static sal_uInt16 const aInva[] =
166 //SID_NEWWINDOW,/*5620*/
167 SID_BROWSER_MODE, /*6313*/
168 SID_RULER_BORDERS, SID_RULER_PAGE_POS,
169 //SID_ATTR_LONG_LRSPACE,
170 SID_HTML_MODE,
171 SID_RULER_PROTECT, /* 10915 */
172 //SID_AUTOSPELL_CHECK,
173 //SID_AUTOSPELL_MARKOFF,
174 SID_TOGGLE_RESOLVED_NOTES, /* 11672*/
175 FN_RULER, /*20211*/
176 FN_VIEW_BOUNDARIES, /*20212*/
177 FN_VIEW_GRAPHIC, /*20213*/
178 FN_VIEW_BOUNDS, /**/
179 FN_VIEW_FIELDS, /*20215*/
180 FN_VLINEAL, /*20216*/
181 FN_VSCROLLBAR, /*20217*/
182 FN_HSCROLLBAR, /*20218*/
183 FN_VIEW_SECTION_BOUNDARIES, /*20219*/
184 FN_VIEW_META_CHARS, /**/
185 FN_VIEW_MARKS, /**/
186 //FN_VIEW_FIELDNAME, /**/
187 FN_VIEW_TABLEGRID, /*20227*/
188 FN_PRINT_LAYOUT, /*20237*/
189 FN_QRY_MERGE, /*20364*/
190 FN_SHADOWCURSOR, /**/
191 FN_SINGLE_PAGE_PER_ROW, /**/
192 FN_MULTIPLE_PAGES_PER_ROW, /**/
193 FN_BOOKVIEW, /**/
196 // the view must not exist!
197 GetViewFrame().GetBindings().Invalidate(aInva);
198 CheckVisArea();
200 SvxZoomType eType;
201 if( GetWrtShell().GetViewOptions()->getBrowseMode() && SvxZoomType::PERCENT != (eType =
202 GetWrtShell().GetViewOptions()->GetZoomType()) )
203 SetZoom( eType );
204 InvalidateBorder();
207 // State of view options
209 void SwView::StateViewOptions(SfxItemSet &rSet)
211 SfxWhichIter aIter(rSet);
212 sal_uInt16 nWhich = aIter.FirstWhich();
213 SfxBoolItem aBool;
214 const SwViewOption* pOpt = GetWrtShell().GetViewOptions();
216 while(nWhich)
218 bool bReadonly = GetDocShell()->IsReadOnly();
219 if (bReadonly && nWhich != FN_VIEW_GRAPHIC && nWhich != FN_HIGHLIGHT_CHAR_DF
220 && nWhich != SID_AUTOSPELL_CHECK)
222 rSet.DisableItem(nWhich);
223 nWhich = 0;
225 switch(nWhich)
227 case FN_RULER:
229 if(!pOpt->IsViewHRuler(true) && !pOpt->IsViewVRuler(true))
231 rSet.DisableItem(nWhich);
232 nWhich = 0;
234 else
235 aBool.SetValue( pOpt->IsViewAnyRuler());
237 break;
238 case SID_BROWSER_MODE:
239 case FN_PRINT_LAYOUT:
241 bool bState = pOpt->getBrowseMode();
242 if(FN_PRINT_LAYOUT == nWhich)
243 bState = !bState;
244 aBool.SetValue( bState );
246 break;
247 case FN_VIEW_BOUNDARIES:
248 aBool.SetValue( pOpt->IsShowBoundaries()); break;
249 case FN_VIEW_BOUNDS:
250 aBool.SetValue( pOpt->IsTextBoundaries()); break;
251 case FN_VIEW_SECTION_BOUNDARIES:
252 aBool.SetValue(pOpt->IsSectionBoundaries()); break;
253 case FN_VIEW_GRAPHIC:
254 aBool.SetValue( pOpt->IsGraphic() ); break;
255 case FN_VIEW_FIELDS:
256 aBool.SetValue( pOpt->IsFieldShadings() ); break;
257 case FN_VIEW_FIELDNAME:
258 aBool.SetValue( pOpt->IsFieldName() ); break;
259 case FN_VIEW_MARKS:
260 aBool.SetValue( lcl_IsViewMarks(*pOpt) ); break;
261 case FN_VIEW_META_CHARS:
262 aBool.SetValue( pOpt->IsViewMetaChars() ); break;
263 case FN_VIEW_TABLEGRID:
264 aBool.SetValue( pOpt->IsTableBoundaries() ); break;
265 case SID_TOGGLE_NOTES:
267 if (!GetPostItMgr()->HasNotes())
269 rSet.DisableItem(nWhich);
270 nWhich = 0;
272 else
273 aBool.SetValue( pOpt->IsPostIts());
274 break;
276 case SID_TOGGLE_RESOLVED_NOTES:
278 if (!GetPostItMgr()->HasNotes())
280 rSet.DisableItem(nWhich);
281 nWhich = 0;
283 else
284 aBool.SetValue( pOpt->IsResolvedPostIts());
285 break;
287 case FN_VIEW_HIDDEN_PARA:
288 aBool.SetValue( pOpt->IsShowHiddenPara()); break;
289 case FN_VIEW_HIDE_WHITESPACE:
291 if (pOpt->getBrowseMode() || !pOpt->CanHideWhitespace())
293 rSet.DisableItem(nWhich);
294 nWhich = 0;
296 else
297 aBool.SetValue(pOpt->IsHideWhitespaceMode());
298 break;
300 case FN_VIEW_SHOW_WHITESPACE:
302 aBool.SetValue(!pOpt->IsHideWhitespaceMode());
303 break;
305 case SID_GRID_VISIBLE:
306 aBool.SetValue( pOpt->IsGridVisible() ); break;
307 case SID_GRID_USE:
308 aBool.SetValue( pOpt->IsSnap() ); break;
309 case SID_HELPLINES_MOVE:
310 aBool.SetValue( pOpt->IsCrossHair() ); break;
311 case FN_VIEW_SMOOTH_SCROLL:
312 aBool.SetValue( pOpt->IsSmoothScroll()); break;
313 case FN_VLINEAL:
314 aBool.SetValue( StatVRuler() ); break;
315 case FN_HSCROLLBAR:
316 if( pOpt->getBrowseMode() )
318 rSet.DisableItem(nWhich);
319 nWhich = 0;
321 else
322 aBool.SetValue( IsHScrollbarVisible() );
323 break;
324 case FN_VSCROLLBAR:
325 aBool.SetValue( IsVScrollbarVisible() ); break;
326 case SID_AUTOSPELL_CHECK:
327 aBool.SetValue( pOpt->IsOnlineSpell() );
328 break;
329 case SID_ACCESSIBILITY_CHECK_ONLINE:
331 bool bOnlineAccessibilityCheck = officecfg::Office::Common::Accessibility::OnlineAccessibilityCheck::get();
332 aBool.SetValue(bOnlineAccessibilityCheck);
334 break;
335 case FN_SHADOWCURSOR:
336 if ( pOpt->getBrowseMode() )
338 rSet.DisableItem( nWhich );
339 nWhich = 0;
341 else
342 aBool.SetValue( pOpt->IsShadowCursor() );
343 break;
344 case FN_SHOW_INLINETOOLTIPS:
345 aBool.SetValue( pOpt->IsShowInlineTooltips() );
346 break;
347 case FN_USE_HEADERFOOTERMENU:
348 aBool.SetValue( pOpt->IsUseHeaderFooterMenu() );
349 break;
350 case FN_SHOW_OUTLINECONTENTVISIBILITYBUTTON:
351 aBool.SetValue( pOpt->IsShowOutlineContentVisibilityButton() );
352 break;
353 case FN_SHOW_CHANGES_IN_MARGIN:
354 aBool.SetValue( pOpt->IsShowChangesInMargin() );
355 break;
356 case FN_HIGHLIGHT_CHAR_DF:
357 aBool.SetValue(m_bIsHighlightCharDF);
358 break;
359 case SID_SPOTLIGHT_PARASTYLES:
360 aBool.SetValue(m_bIsSpotlightParaStyles);
361 break;
362 case SID_SPOTLIGHT_CHARSTYLES:
363 aBool.SetValue(m_bIsSpotlightCharStyles);
364 break;
365 case FN_SINGLE_PAGE_PER_ROW:
366 aBool.SetValue( !pOpt->IsMultipageView());
367 break;
368 case FN_MULTIPLE_PAGES_PER_ROW:
369 aBool.SetValue( pOpt->GetViewLayoutColumns() == 0);
370 break;
371 case FN_BOOKVIEW:
372 aBool.SetValue( pOpt->IsViewLayoutBookMode());
373 break;
376 if( nWhich )
378 aBool.SetWhich( nWhich );
379 rSet.Put( aBool );
381 nWhich = aIter.NextWhich();
385 // execute view options
387 void SwView::ExecViewOptions(SfxRequest &rReq)
389 std::optional<SwViewOption> pOpt( *GetWrtShell().GetViewOptions() );
390 bool bModified = GetWrtShell().IsModified();
392 int eState = STATE_TOGGLE;
393 bool bSet = false;
394 bool bBrowseModeChanged = false;
396 const SfxItemSet *pArgs = rReq.GetArgs();
397 sal_uInt16 nSlot = rReq.GetSlot();
398 const SfxPoolItem* pAttr=nullptr;
400 if( pArgs && SfxItemState::SET == pArgs->GetItemState( nSlot , false, &pAttr ))
402 bSet = static_cast<const SfxBoolItem*>(pAttr)->GetValue();
403 eState = bSet ? STATE_ON : STATE_OFF;
406 bool bFlag = STATE_ON == eState;
407 uno::Reference< linguistic2::XLinguProperties > xLngProp( ::GetLinguPropertySet() );
409 switch ( nSlot )
411 case FN_VIEW_GRAPHIC:
412 if( STATE_TOGGLE == eState )
413 bFlag = !pOpt->IsGraphic();
414 pOpt->SetGraphic( bFlag );
415 break;
417 case FN_VIEW_FIELDS:
418 if( STATE_TOGGLE == eState )
419 bFlag = !pOpt->IsFieldShadings() ;
420 pOpt->SetAppearanceFlag(ViewOptFlags::FieldShadings, bFlag, true );
421 break;
423 case FN_VIEW_BOUNDS:
424 if( STATE_TOGGLE == eState )
425 bFlag = !pOpt->IsTextBoundaries();
426 pOpt->SetTextBoundaries( bFlag );
427 break;
429 case FN_VIEW_SECTION_BOUNDARIES:
430 if( STATE_TOGGLE == eState )
431 bFlag = !pOpt->IsSectionBoundaries();
432 pOpt->SetSectionBoundaries( bFlag );
433 break;
435 case FN_VIEW_TABLEGRID:
436 if( STATE_TOGGLE == eState )
437 bFlag = !pOpt->IsTableBoundaries();
438 pOpt->SetTableBoundaries( bFlag );
439 break;
441 case FN_VIEW_BOUNDARIES:
442 if( STATE_TOGGLE == eState )
443 bFlag = !pOpt->IsShowBoundaries();
444 pOpt->SetShowBoundaries( bFlag );
445 break;
447 case SID_GRID_VISIBLE:
448 if( STATE_TOGGLE == eState )
449 bFlag = !pOpt->IsGridVisible();
451 pOpt->SetGridVisible( bFlag );
452 break;
454 case SID_GRID_USE:
455 if( STATE_TOGGLE == eState )
456 bFlag = !pOpt->IsSnap();
458 pOpt->SetSnap( bFlag );
459 break;
461 case SID_HELPLINES_MOVE:
462 if( STATE_TOGGLE == eState )
463 bFlag = !pOpt->IsCrossHair();
465 pOpt->SetCrossHair( bFlag );
466 break;
468 case SID_BROWSER_MODE:
469 bBrowseModeChanged = !pOpt->getBrowseMode();
470 pOpt->setBrowseMode(true );
471 break;
473 case FN_PRINT_LAYOUT:
474 bBrowseModeChanged = pOpt->getBrowseMode();
475 pOpt->setBrowseMode( false );
476 break;
478 case SID_TOGGLE_NOTES:
479 if ( STATE_TOGGLE == eState )
480 bFlag = !pOpt->IsPostIts();
482 GetPostItMgr()->SetLayout();
483 pOpt->SetPostIts( bFlag );
484 if (pOpt->IsPostIts())
485 GetPostItMgr()->CheckMetaText();
486 break;
488 case SID_TOGGLE_RESOLVED_NOTES:
489 if ( STATE_TOGGLE == eState )
490 bFlag = pOpt->IsResolvedPostIts();
492 GetPostItMgr()->ShowHideResolvedNotes(!bFlag);
494 GetPostItMgr()->SetLayout();
495 pOpt->SetResolvedPostIts( !bFlag );
497 break;
499 case FN_VIEW_HIDDEN_PARA:
500 if ( STATE_TOGGLE == eState )
501 bFlag = !pOpt->IsShowHiddenPara();
503 pOpt->SetShowHiddenPara( bFlag );
504 break;
506 case FN_VIEW_HIDE_WHITESPACE:
507 if ( STATE_TOGGLE == eState )
508 bFlag = !pOpt->IsHideWhitespaceMode();
510 pOpt->SetHideWhitespaceMode(bFlag);
511 break;
513 case FN_VIEW_SHOW_WHITESPACE:
514 if ( STATE_TOGGLE == eState )
515 bFlag = pOpt->IsHideWhitespaceMode();
517 pOpt->SetHideWhitespaceMode(!bFlag);
518 break;
520 case FN_VIEW_SMOOTH_SCROLL:
522 if ( STATE_TOGGLE == eState )
523 bFlag = !pOpt->IsSmoothScroll();
525 pOpt->SetSmoothScroll( bFlag );
526 break;
528 case FN_VLINEAL:
529 if( STATE_TOGGLE == eState )
530 bFlag = !pOpt->IsViewVRuler();
532 pOpt->SetViewVRuler( bFlag );
533 break;
535 case FN_VSCROLLBAR:
536 if( STATE_TOGGLE == eState )
537 bFlag = !pOpt->IsViewVScrollBar();
539 pOpt->SetViewVScrollBar( bFlag );
540 break;
542 case FN_HSCROLLBAR:
543 if( STATE_TOGGLE == eState )
544 bFlag = !pOpt->IsViewHScrollBar();
546 pOpt->SetViewHScrollBar( bFlag );
547 break;
549 case FN_RULER:
550 if( STATE_TOGGLE == eState )
551 bFlag = !pOpt->IsViewAnyRuler();
553 pOpt->SetViewAnyRuler( bFlag );
554 break;
555 case FN_VIEW_FIELDNAME:
556 if( STATE_TOGGLE == eState )
557 bFlag = !pOpt->IsFieldName() ;
559 pOpt->SetFieldName( bFlag );
560 break;
562 case FN_VIEW_MARKS:
563 if( STATE_TOGGLE == eState )
564 bFlag = !lcl_IsViewMarks(*pOpt) ;
566 lcl_SetViewMarks( *pOpt, bFlag );
567 break;
569 case FN_HIGHLIGHT_CHAR_DF:
570 if (STATE_TOGGLE == eState)
571 bFlag = !m_bIsHighlightCharDF;
572 m_bIsHighlightCharDF = bFlag;
573 break;
575 case SID_SPOTLIGHT_PARASTYLES:
576 if (!comphelper::LibreOfficeKit::isActive())
578 if (!pArgs || !pArgs->HasItem(FN_PARAM_1))
580 const SfxStringItem sDeckName(SID_SIDEBAR_DECK, u"StyleListDeck"_ustr);
581 GetDispatcher().ExecuteList(SID_SIDEBAR_DECK, SfxCallMode::SYNCHRON, { &sDeckName });
584 if (STATE_TOGGLE == eState)
585 bFlag = !m_bIsSpotlightParaStyles;
586 m_bIsSpotlightParaStyles = bFlag;
587 break;
589 case SID_SPOTLIGHT_CHARSTYLES:
590 if (!comphelper::LibreOfficeKit::isActive())
592 if (!pArgs || !pArgs->HasItem(FN_PARAM_1))
594 const SfxStringItem sDeckName(SID_SIDEBAR_DECK, u"StyleListDeck"_ustr);
595 GetDispatcher().ExecuteList(SID_SIDEBAR_DECK, SfxCallMode::SYNCHRON, { &sDeckName });
598 if (STATE_TOGGLE == eState)
599 bFlag = !m_bIsSpotlightCharStyles;
600 m_bIsSpotlightCharStyles = bFlag;
601 break;
603 case FN_VIEW_META_CHARS:
604 if( STATE_TOGGLE == eState )
605 bFlag = !pOpt->IsViewMetaChars();
607 lcl_SetViewMetaChars( *pOpt, bFlag );
608 break;
610 case SID_AUTOSPELL_CHECK:
611 const SfxPoolItem* pItem;
613 if (pArgs && pArgs->HasItem(FN_PARAM_1, &pItem))
614 bSet = static_cast<const SfxBoolItem*>(pItem)->GetValue();
615 else if( STATE_TOGGLE == eState )
617 bFlag = !pOpt->IsOnlineSpell();
618 bSet = bFlag;
621 pOpt->SetOnlineSpell(bSet);
623 SvtLinguConfig aCfg;
624 aCfg.SetProperty( UPN_IS_SPELL_AUTO, uno::Any( bSet ) );
626 if (xLngProp.is())
627 xLngProp->setIsSpellAuto( bSet );
629 // for the time being we do not have a specific option for grammarchecking.
630 // thus we'll use the one for spell checking...
631 if (bSet)
633 SwDocShell *pDocSh = GetDocShell();
634 SwDoc *pDoc = pDocSh? pDocSh->GetDoc() : nullptr;
636 // right now we don't have view options for automatic grammar checking. Thus...
637 bool bIsAutoGrammar = false;
638 aCfg.GetProperty( UPN_IS_GRAMMAR_AUTO ) >>= bIsAutoGrammar;
640 if (pDoc && bIsAutoGrammar)
641 pDoc->StartGrammarChecking();
644 break;
646 case SID_ACCESSIBILITY_CHECK_ONLINE:
648 if (pArgs && pArgs->HasItem(FN_PARAM_1, &pItem))
650 bSet = static_cast<const SfxBoolItem*>(pItem)->GetValue();
652 else if (STATE_TOGGLE == eState)
654 bool bOnlineCheck = officecfg::Office::Common::Accessibility::OnlineAccessibilityCheck::get();
655 bSet = !bOnlineCheck;
657 std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create());
658 officecfg::Office::Common::Accessibility::OnlineAccessibilityCheck::set(bSet, batch);
659 batch->commit();
661 SwDocShell *pDocSh = GetDocShell();
662 SwDoc* pDocument = pDocSh? pDocSh->GetDoc() : nullptr;
663 if (pDocument)
664 pDocument->getOnlineAccessibilityCheck()->updateCheckerActivity();
666 break;
668 case FN_SHADOWCURSOR:
669 if( STATE_TOGGLE == eState )
671 bFlag = !pOpt->IsShadowCursor();
672 bSet = bFlag;
675 pOpt->SetShadowCursor(bSet);
676 break;
678 case FN_SHOW_INLINETOOLTIPS:
679 if( STATE_TOGGLE == eState )
680 bFlag = !pOpt->IsShowInlineTooltips();
682 pOpt->SetShowInlineTooltips( bFlag );
683 break;
685 case FN_USE_HEADERFOOTERMENU:
686 if( STATE_TOGGLE == eState )
687 bFlag = !pOpt->IsUseHeaderFooterMenu();
689 pOpt->SetUseHeaderFooterMenu( bFlag );
690 break;
692 case FN_SHOW_OUTLINECONTENTVISIBILITYBUTTON:
694 if( STATE_TOGGLE == eState )
695 bFlag = !pOpt->IsShowOutlineContentVisibilityButton();
697 SwWrtShell &rSh = GetWrtShell();
699 if (!bFlag) // Outline folding is being turned ON!
700 rSh.MakeAllFoldedOutlineContentVisible();
702 pOpt->SetShowOutlineContentVisibilityButton(bFlag);
704 // Apply option change here so if toggling the outline folding feature ON
705 // the invalidate function will see this.
706 rSh.StartAction();
707 rSh.ApplyViewOptions(*pOpt);
708 rSh.EndAction();
710 if (bFlag) // Outline folding is being turned OFF!
711 rSh.MakeAllFoldedOutlineContentVisible(false);
713 break;
716 case FN_SHOW_CHANGES_IN_MARGIN:
717 if( STATE_TOGGLE == eState )
718 bFlag = !pOpt->IsShowChangesInMargin();
720 pOpt->SetShowChangesInMargin( bFlag );
721 break;
723 case FN_SINGLE_PAGE_PER_ROW:
724 pOpt->SetViewLayoutBookMode( false );
725 pOpt->SetViewLayoutColumns( 1 );
726 break;
728 case FN_MULTIPLE_PAGES_PER_ROW:
729 pOpt->SetViewLayoutBookMode( false );
730 pOpt->SetViewLayoutColumns( 0 );
731 break;
733 case FN_BOOKVIEW:
734 pOpt->SetViewLayoutColumns( 2 );
735 pOpt->SetViewLayoutBookMode( true );
736 break;
738 default:
739 OSL_FAIL("wrong request method");
740 return;
743 // Set UserPrefs, mark request as modified
744 bool bWebView = dynamic_cast<const SwWebView*>(this) != nullptr;
745 SwWrtShell &rSh = GetWrtShell();
746 rSh.StartAction();
747 SwModule* pModule = SwModule::get();
748 if( *rSh.GetViewOptions() != *pOpt )
750 rSh.ApplyViewOptions( *pOpt );
751 if( bBrowseModeChanged )
753 GetDocShell()->ToggleLayoutMode(this);
756 // The UsrPref must be marked as modified.
757 // call for initialization
758 pModule->GetUsrPref(bWebView);
759 SwModule::CheckSpellChanges( pOpt->IsOnlineSpell(), false, false, false );
761 //OS: Set back modified again, because view/fields sets the Doc modified.
762 if( !bModified )
763 rSh.ResetModified();
765 pModule->ApplyUsrPref( *pOpt, this, bWebView ? SvViewOpt::DestWeb : SvViewOpt::DestText );
767 if (nSlot == SID_SPOTLIGHT_CHARSTYLES || nSlot == SID_SPOTLIGHT_PARASTYLES)
769 SwXTextDocument* pModel = comphelper::getFromUnoTunnel<SwXTextDocument>(GetCurrentDocument());
770 SfxLokHelper::notifyViewRenderState(this, pModel);
771 if (vcl::Window *pMyWin = rSh.GetWin())
772 pMyWin->Invalidate();
775 // #i6193# let postits know about new spellcheck setting
776 if ( nSlot == SID_AUTOSPELL_CHECK )
777 GetPostItMgr()->SetSpellChecking();
779 const bool bLockedView = rSh.IsViewLocked();
780 rSh.LockView( true ); //lock visible section
781 GetWrtShell().EndAction();
782 if( bBrowseModeChanged && !bFlag )
783 CalcVisArea( GetEditWin().GetOutputSizePixel() );
784 rSh.LockView( bLockedView );
786 pOpt.reset();
787 Invalidate(rReq.GetSlot());
788 if(!pArgs)
789 rReq.AppendItem(SfxBoolItem(nSlot, bFlag));
790 rReq.Done();
793 void SwView::ExecFormatFootnote()
795 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
796 VclPtr<VclAbstractDialog> pDlg(pFact->CreateSwFootNoteOptionDlg(GetFrameWeld(), GetWrtShell()));
797 pDlg->StartExecuteAsync(
798 [pDlg] (sal_Int32 /*nResult*/)->void
800 pDlg->disposeOnce();
805 void SwView::ExecNumberingOutline(SfxItemPool & rPool)
807 SfxItemSet aTmp(SfxItemSet::makeFixedSfxItemSet<FN_PARAM_1, FN_PARAM_1>(rPool));
808 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
809 VclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateOutlineTabDialog(GetFrameWeld(), &aTmp, GetWrtShell()));
810 pDlg->StartExecuteAsync(
811 [pDlg] (sal_Int32 /*nResult*/)->void
813 pDlg->disposeOnce();
818 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */