1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
4 *
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/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
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 .
18 */
19
20 #include <sfx2/htmlmode.hxx>
21 #include <svtools/htmlcfg.hxx>
22
23 #include <editeng/editids.hrc>
24 #include <editeng/svxacorr.hxx>
25 #include <officecfg/Office/Common.hxx>
26 #include <unotools/localedatawrapper.hxx>
27 #include <vcl/outdev.hxx>
28 #include <swmodule.hxx>
29 #include <viewopt.hxx>
30 #include <wdocsh.hxx>
31 #include <swrect.hxx>
32 #include <crstate.hxx>
33 #include <authratr.hxx>
34 #include <svtools/colorcfg.hxx>
35 #include <svtools/accessibilityoptions.hxx>
36 #include <unotools/configmgr.hxx>
37 #include <unotools/syslocale.hxx>
38
39 #include <editeng/acorrcfg.hxx>
40 #include <comphelper/lok.hxx>
41 #include <comphelper/configurationlistener.hxx>
42
43 Color SwViewOption::s_aDocBoundColor(COL_LIGHTGRAY);
44 Color SwViewOption::s_aObjectBoundColor(COL_LIGHTGRAY);
45 Color SwViewOption::s_aDocColor(COL_LIGHTGRAY);
46 Color SwViewOption::s_aAppBackgroundColor(COL_LIGHTGRAY);
47 Color SwViewOption::s_aTableBoundColor(COL_LIGHTGRAY);
48 Color SwViewOption::s_aIndexShadingsColor(COL_LIGHTGRAY);
49 Color SwViewOption::s_aLinksColor(COL_BLUE);
50 Color SwViewOption::s_aVisitedLinksColor(COL_RED);
51 Color SwViewOption::s_aDirectCursorColor(COL_BLUE);
52 Color SwViewOption::s_aTextGridColor(COL_LIGHTGRAY);
53 Color SwViewOption::s_aSpellColor(COL_LIGHTRED);
54 Color SwViewOption::s_aSmarttagColor(COL_LIGHTMAGENTA);
55 Color SwViewOption::s_aFontColor(COL_BLACK);
56 Color SwViewOption::s_aFieldShadingsColor(COL_LIGHTGRAY);
57 Color SwViewOption::s_aSectionBoundColor(COL_LIGHTGRAY);
58 Color SwViewOption::s_aPageBreakColor(COL_BLUE);
59 Color SwViewOption::s_aScriptIndicatorColor(COL_GREEN);
60 Color SwViewOption::s_aShadowColor(COL_GRAY);
61 Color SwViewOption::s_aHeaderFooterMarkColor(COL_BLUE);
62
63 ViewOptFlags SwViewOption::s_nAppearanceFlags = ViewOptFlags::DocBoundaries|ViewOptFlags::ObjectBoundaries;
64 sal_uInt16 SwViewOption::s_nPixelTwips = 0; // one pixel on the screen
65
IsEqualFlags(const SwViewOption & rOpt) const66 bool SwViewOption::IsEqualFlags( const SwViewOption &rOpt ) const
67 {
68 return m_nCoreOptions == rOpt.m_nCoreOptions
69 && m_nCore2Options == rOpt.m_nCore2Options
70 && m_aSnapSize == rOpt.m_aSnapSize
71 && mnViewLayoutColumns == rOpt.mnViewLayoutColumns
72 && m_nDivisionX == rOpt.GetDivisionX()
73 && m_nDivisionY == rOpt.GetDivisionY()
74 && m_nPagePreviewRow == rOpt.GetPagePrevRow()
75 && m_nPagePreviewCol == rOpt.GetPagePrevCol()
76 && m_aRetouchColor == rOpt.GetRetoucheColor()
77 && mbFormView == rOpt.IsFormView()
78 && mbBrowseMode == rOpt.getBrowseMode()
79 && mbViewLayoutBookMode == rOpt.mbViewLayoutBookMode
80 && mbHideWhitespaceMode == rOpt.mbHideWhitespaceMode
81 && m_bShowPlaceHolderFields == rOpt.m_bShowPlaceHolderFields
82 && m_bIdle == rOpt.m_bIdle
83 && m_nDefaultAnchor == rOpt.m_nDefaultAnchor
84 #ifdef DBG_UTIL
85 // correspond to the statements in ui/config/cfgvw.src
86 && m_bTest1 == rOpt.IsTest1()
87 && m_bTest2 == rOpt.IsTest2()
88 && m_bTest3 == rOpt.IsTest3()
89 && m_bTest4 == rOpt.IsTest4()
90 && m_bTest5 == rOpt.IsTest5()
91 && m_bTest6 == rOpt.IsTest6()
92 && m_bTest7 == rOpt.IsTest7()
93 && m_bTest8 == rOpt.IsTest8()
94 && m_bTest10 == rOpt.IsTest10()
95 #endif
96 ;
97 }
98
IsShowOutlineContentVisibilityButton() const99 bool SwViewOption::IsShowOutlineContentVisibilityButton() const
100 {
101 return officecfg::Office::Common::Misc::ExperimentalMode::get() &&
102 (m_nCoreOptions & ViewOptFlags1::ShowOutlineContentVisibilityButton);
103 }
104
IsTreatSubOutlineLevelsAsContent() const105 bool SwViewOption::IsTreatSubOutlineLevelsAsContent() const
106 {
107 return officecfg::Office::Common::Misc::ExperimentalMode::get() &&
108 (m_nCoreOptions & ViewOptFlags1::TreatSubOutlineLevelsAsContent);
109 }
110
DrawRect(OutputDevice * pOut,const SwRect & rRect,::Color nCol)111 void SwViewOption::DrawRect( OutputDevice *pOut,
112 const SwRect &rRect, ::Color nCol )
113 {
114 if ( pOut->GetOutDevType() != OUTDEV_PRINTER )
115 {
116 const Color aCol( nCol );
117 const Color aOldColor( pOut->GetFillColor() );
118 pOut->SetFillColor( aCol );
119 pOut->DrawRect( rRect.SVRect() );
120 pOut->SetFillColor( aOldColor );
121 }
122 else
123 DrawRectPrinter( pOut, rRect );
124 }
125
DrawRectPrinter(OutputDevice * pOut,const SwRect & rRect)126 void SwViewOption::DrawRectPrinter( OutputDevice *pOut,
127 const SwRect &rRect )
128 {
129 Color aOldColor(pOut->GetLineColor());
130 Color aOldFillColor( pOut->GetFillColor() );
131 pOut->SetLineColor( COL_BLACK );
132 pOut->SetFillColor( COL_TRANSPARENT);
133 pOut->DrawRect( rRect.SVRect() );
134 pOut->SetFillColor( aOldFillColor );
135 pOut->SetLineColor( aOldColor );
136 }
137
GetPostItsWidth(const OutputDevice * pOut)138 sal_uInt16 SwViewOption::GetPostItsWidth( const OutputDevice *pOut )
139 {
140 assert(pOut && "no Outdev");
141 return sal_uInt16(pOut->GetTextWidth(" "));
142 }
143
PaintPostIts(OutputDevice * pOut,const SwRect & rRect,bool bIsScript)144 void SwViewOption::PaintPostIts( OutputDevice *pOut, const SwRect &rRect, bool bIsScript )
145 {
146 if( !(pOut && bIsScript) )
147 return;
148
149 Color aOldLineColor( pOut->GetLineColor() );
150 pOut->SetLineColor( COL_GRAY );
151 // to make it look nice, we subtract two pixels everywhere
152 sal_uInt16 nPix = s_nPixelTwips * 2;
153 if( rRect.Width() <= 2 * nPix || rRect.Height() <= 2 * nPix )
154 nPix = 0;
155 const Point aTopLeft( rRect.Left() + nPix, rRect.Top() + nPix );
156 const Point aBotRight( rRect.Right() - nPix, rRect.Bottom() - nPix );
157 const SwRect aRect( aTopLeft, aBotRight );
158 DrawRect( pOut, aRect, s_aScriptIndicatorColor );
159 pOut->SetLineColor( aOldLineColor );
160 }
161
SwViewOption()162 SwViewOption::SwViewOption() :
163 m_sSymbolFont( "symbol" ),
164 m_aRetouchColor( COL_TRANSPARENT ),
165 mnViewLayoutColumns( 0 ),
166 m_nPagePreviewRow( 1 ),
167 m_nPagePreviewCol( 2 ),
168 m_nShadowCursorFillMode( SwFillMode::Tab ),
169 m_bReadonly(false),
170 m_bStarOneSetting(false),
171 m_bIsPagePreview(false),
172 m_bSelectionInReadonly(false),
173 mbFormView(false),
174 mbBrowseMode(false),
175 mbBookView(false),
176 mbViewLayoutBookMode(false),
177 mbHideWhitespaceMode(false),
178 m_bShowPlaceHolderFields( true ),
179 m_nZoom( 100 ),
180 m_eZoom( SvxZoomType::PERCENT ),
181 m_nTableDestination(TBL_DEST_CELL)
182 {
183 // Initialisation is a little simpler now
184 // all Bits to 0
185 m_nCoreOptions =
186 ViewOptFlags1::HardBlank |
187 ViewOptFlags1::SoftHyph |
188 ViewOptFlags1::Ref |
189 ViewOptFlags1::Graphic |
190 ViewOptFlags1::Table |
191 ViewOptFlags1::Draw |
192 ViewOptFlags1::Control |
193 ViewOptFlags1::Pageback |
194 ViewOptFlags1::Postits;
195
196 m_nCore2Options =
197 ViewOptCoreFlags2::BlackFont |
198 ViewOptCoreFlags2::HiddenPara;
199
200 m_nUIOptions =
201 ViewOptFlags2::Modified |
202 ViewOptFlags2::GrfKeepZoom |
203 ViewOptFlags2::ResolvedPostits |
204 ViewOptFlags2::AnyRuler;
205
206 if (!utl::ConfigManager::IsFuzzing() && MeasurementSystem::Metric != SvtSysLocale().GetLocaleData().getMeasurementSystemEnum())
207 {
208 m_aSnapSize.setWidth(720); // 1/2"
209 m_aSnapSize.setHeight(720); // 1/2"
210
211 }
212 else
213 {
214 m_aSnapSize.setWidth(567); // 1 cm
215 m_aSnapSize.setHeight(567); // 1 cm
216 }
217 m_nDivisionX = m_nDivisionY = 1;
218
219 m_bSelectionInReadonly = !utl::ConfigManager::IsFuzzing() && SW_MOD()->GetAccessibilityOptions().IsSelectionInReadonly();
220
221 m_bIdle = true;
222
223 m_nDefaultAnchor = 1; //FLY_TO_CHAR
224
225 #ifdef DBG_UTIL
226 // correspond to the statements in ui/config/cfgvw.src
227 m_bTest1 = m_bTest2 = m_bTest3 = m_bTest4 =
228 m_bTest5 = m_bTest6 = m_bTest7 = m_bTest8 = m_bTest10 = false;
229 #endif
230 if (comphelper::LibreOfficeKit::isActive())
231 s_aAppBackgroundColor = COL_TRANSPARENT;
232 }
233
SwViewOption(const SwViewOption & rVOpt)234 SwViewOption::SwViewOption(const SwViewOption& rVOpt)
235 {
236 m_bReadonly = false;
237 m_bSelectionInReadonly = false;
238 // #114856# Form view
239 mbFormView = rVOpt.mbFormView;
240 m_nZoom = rVOpt.m_nZoom ;
241 m_aSnapSize = rVOpt.m_aSnapSize ;
242 mnViewLayoutColumns = rVOpt.mnViewLayoutColumns ;
243 m_nDivisionX = rVOpt.m_nDivisionX ;
244 m_nDivisionY = rVOpt.m_nDivisionY ;
245 m_nPagePreviewRow = rVOpt.m_nPagePreviewRow;
246 m_nPagePreviewCol = rVOpt.m_nPagePreviewCol;
247 m_bIsPagePreview = rVOpt.m_bIsPagePreview;
248 m_eZoom = rVOpt.m_eZoom ;
249 m_nTableDestination = rVOpt.m_nTableDestination ;
250 m_nUIOptions = rVOpt.m_nUIOptions ;
251 m_nCoreOptions = rVOpt.m_nCoreOptions ;
252 m_nCore2Options = rVOpt.m_nCore2Options ;
253 m_aRetouchColor = rVOpt.GetRetoucheColor();
254 m_sSymbolFont = rVOpt.m_sSymbolFont;
255 m_nShadowCursorFillMode = rVOpt.m_nShadowCursorFillMode;
256 m_bStarOneSetting = rVOpt.m_bStarOneSetting;
257 mbBookView = rVOpt.mbBookView;
258 mbBrowseMode = rVOpt.mbBrowseMode;
259 mbViewLayoutBookMode = rVOpt.mbViewLayoutBookMode;
260 mbHideWhitespaceMode = rVOpt.mbHideWhitespaceMode;
261 m_bShowPlaceHolderFields = rVOpt.m_bShowPlaceHolderFields;
262 m_bIdle = rVOpt.m_bIdle;
263 m_nDefaultAnchor = rVOpt.m_nDefaultAnchor;
264
265 #ifdef DBG_UTIL
266 m_bTest1 = rVOpt.m_bTest1;
267 m_bTest2 = rVOpt.m_bTest2;
268 m_bTest3 = rVOpt.m_bTest3;
269 m_bTest4 = rVOpt.m_bTest4;
270 m_bTest5 = rVOpt.m_bTest5;
271 m_bTest6 = rVOpt.m_bTest6;
272 m_bTest7 = rVOpt.m_bTest7;
273 m_bTest8 = rVOpt.m_bTest8;
274 m_bTest10 = rVOpt.m_bTest10;
275 #endif
276 }
277
operator =(const SwViewOption & rVOpt)278 SwViewOption& SwViewOption::operator=( const SwViewOption &rVOpt )
279 {
280 // #114856# Form view
281 mbFormView = rVOpt.mbFormView ;
282 m_nZoom = rVOpt.m_nZoom ;
283 m_aSnapSize = rVOpt.m_aSnapSize ;
284 mnViewLayoutColumns = rVOpt.mnViewLayoutColumns ;
285 m_nDivisionX = rVOpt.m_nDivisionX ;
286 m_nDivisionY = rVOpt.m_nDivisionY ;
287 m_nPagePreviewRow = rVOpt.m_nPagePreviewRow;
288 m_nPagePreviewCol = rVOpt.m_nPagePreviewCol;
289 m_bIsPagePreview = rVOpt.m_bIsPagePreview;
290 m_eZoom = rVOpt.m_eZoom ;
291 m_nTableDestination = rVOpt.m_nTableDestination ;
292 m_nUIOptions = rVOpt.m_nUIOptions ;
293 m_nCoreOptions = rVOpt.m_nCoreOptions;
294 m_nCore2Options = rVOpt.m_nCore2Options;
295 m_aRetouchColor = rVOpt.GetRetoucheColor();
296 m_sSymbolFont = rVOpt.m_sSymbolFont;
297 m_nShadowCursorFillMode = rVOpt.m_nShadowCursorFillMode;
298 m_bStarOneSetting = rVOpt.m_bStarOneSetting;
299 mbBookView = rVOpt.mbBookView;
300 mbBrowseMode = rVOpt.mbBrowseMode;
301 mbViewLayoutBookMode = rVOpt.mbViewLayoutBookMode;
302 mbHideWhitespaceMode = rVOpt.mbHideWhitespaceMode;
303 m_bShowPlaceHolderFields = rVOpt.m_bShowPlaceHolderFields;
304 m_bIdle = rVOpt.m_bIdle;
305 m_nDefaultAnchor = rVOpt.m_nDefaultAnchor;
306
307 #ifdef DBG_UTIL
308 m_bTest1 = rVOpt.m_bTest1;
309 m_bTest2 = rVOpt.m_bTest2;
310 m_bTest3 = rVOpt.m_bTest3;
311 m_bTest4 = rVOpt.m_bTest4;
312 m_bTest5 = rVOpt.m_bTest5;
313 m_bTest6 = rVOpt.m_bTest6;
314 m_bTest7 = rVOpt.m_bTest7;
315 m_bTest8 = rVOpt.m_bTest8;
316 m_bTest10 = rVOpt.m_bTest10;
317 #endif
318 return *this;
319 }
320
~SwViewOption()321 SwViewOption::~SwViewOption()
322 {
323 }
324
Init(const OutputDevice * pWin)325 void SwViewOption::Init(const OutputDevice* pWin)
326 {
327 if( !s_nPixelTwips && pWin )
328 {
329 s_nPixelTwips = o3tl::narrowing<sal_uInt16>(pWin->PixelToLogic( Size(1,1) ).Height());
330 }
331 }
332
IsAutoCompleteWords()333 bool SwViewOption::IsAutoCompleteWords()
334 {
335 const SvxSwAutoFormatFlags& rFlags = SvxAutoCorrCfg::Get().GetAutoCorrect()->GetSwFlags();
336 return rFlags.bAutoCmpltCollectWords;
337 }
338
SetOnlineSpell(bool b)339 void SwViewOption::SetOnlineSpell(bool b)
340 {
341 if (b)
342 m_nCoreOptions |= ViewOptFlags1::OnlineSpell;
343 else
344 m_nCoreOptions &= ~ViewOptFlags1::OnlineSpell;
345 }
346
AuthorCharAttr()347 AuthorCharAttr::AuthorCharAttr() :
348 m_nItemId (SID_ATTR_CHAR_UNDERLINE),
349 m_nAttr (LINESTYLE_SINGLE),
350 m_nColor (COL_TRANSPARENT)
351 {
352 }
353
GetHtmlMode(const SwDocShell * pShell)354 sal_uInt16 GetHtmlMode(const SwDocShell* pShell)
355 {
356 sal_uInt16 nRet = 0;
357 if(!pShell || dynamic_cast<const SwWebDocShell*>( pShell) )
358 {
359 nRet = HTMLMODE_ON | HTMLMODE_SOME_STYLES;
360 SvxHtmlOptions& rHtmlOpt = SvxHtmlOptions::Get();
361 switch ( rHtmlOpt.GetExportMode() )
362 {
363 case HTML_CFG_MSIE:
364 nRet |= HTMLMODE_FULL_STYLES;
365 break;
366 case HTML_CFG_NS40:
367 // no special features for this browser
368 break;
369 case HTML_CFG_WRITER:
370 nRet |= HTMLMODE_FULL_STYLES;
371 break;
372 }
373 }
374 return nRet;
375 }
376
GetDefaultAnchorType() const377 RndStdIds SwViewOption::GetDefaultAnchorType() const
378 {
379 switch ( m_nDefaultAnchor )
380 {
381 case 0:
382 return RndStdIds::FLY_AT_PARA; //0
383 case 1:
384 return RndStdIds::FLY_AT_CHAR; //4
385 case 2:
386 return RndStdIds::FLY_AS_CHAR; //1
387 default:
388 return RndStdIds::FLY_AT_CHAR; //4
389 }//switch
390 }
391
GetDocColor()392 Color& SwViewOption::GetDocColor()
393 {
394 return s_aDocColor;
395 }
396
GetDocBoundariesColor()397 Color& SwViewOption::GetDocBoundariesColor()
398 {
399 return s_aDocBoundColor;
400 }
401
GetObjectBoundariesColor()402 Color& SwViewOption::GetObjectBoundariesColor()
403 {
404 return s_aObjectBoundColor;
405 }
406
GetAppBackgroundColor()407 Color& SwViewOption::GetAppBackgroundColor()
408 {
409 return s_aAppBackgroundColor;
410 }
411
GetTableBoundariesColor()412 Color& SwViewOption::GetTableBoundariesColor()
413 {
414 return s_aTableBoundColor;
415 }
416
GetIndexShadingsColor()417 Color& SwViewOption::GetIndexShadingsColor()
418 {
419 return s_aIndexShadingsColor;
420 }
421
GetLinksColor()422 Color& SwViewOption::GetLinksColor()
423 {
424 return s_aLinksColor;
425 }
426
GetVisitedLinksColor()427 Color& SwViewOption::GetVisitedLinksColor()
428 {
429 return s_aVisitedLinksColor;
430 }
431
GetDirectCursorColor()432 Color& SwViewOption::GetDirectCursorColor()
433 {
434 return s_aDirectCursorColor;
435 }
436
GetTextGridColor()437 Color& SwViewOption::GetTextGridColor()
438 {
439 return s_aTextGridColor;
440 }
441
GetSpellColor()442 Color& SwViewOption::GetSpellColor()
443 {
444 return s_aSpellColor;
445 }
446
GetSmarttagColor()447 Color& SwViewOption::GetSmarttagColor()
448 {
449 return s_aSmarttagColor;
450 }
451
GetShadowColor()452 Color& SwViewOption::GetShadowColor()
453 {
454 return s_aShadowColor;
455 }
456
GetFontColor()457 Color& SwViewOption::GetFontColor()
458 {
459 return s_aFontColor;
460 }
461
GetFieldShadingsColor()462 Color& SwViewOption::GetFieldShadingsColor()
463 {
464 return s_aFieldShadingsColor;
465 }
466
GetSectionBoundColor()467 Color& SwViewOption::GetSectionBoundColor()
468 {
469 return s_aSectionBoundColor;
470 }
471
GetPageBreakColor()472 Color& SwViewOption::GetPageBreakColor()
473 {
474 return s_aPageBreakColor;
475 }
476
GetHeaderFooterMarkColor()477 Color& SwViewOption::GetHeaderFooterMarkColor()
478 {
479 return s_aHeaderFooterMarkColor;
480 }
481
ApplyColorConfigValues(const svtools::ColorConfig & rConfig)482 void SwViewOption::ApplyColorConfigValues(const svtools::ColorConfig& rConfig )
483 {
484 s_aDocColor = rConfig.GetColorValue(svtools::DOCCOLOR).nColor;
485
486 svtools::ColorConfigValue aValue = rConfig.GetColorValue(svtools::DOCBOUNDARIES);
487 s_aDocBoundColor = aValue.nColor;
488 s_nAppearanceFlags = ViewOptFlags::NONE;
489 if(aValue.bIsVisible)
490 s_nAppearanceFlags |= ViewOptFlags::DocBoundaries;
491
492 s_aAppBackgroundColor = rConfig.GetColorValue(svtools::APPBACKGROUND).nColor;
493
494 aValue = rConfig.GetColorValue(svtools::OBJECTBOUNDARIES);
495 s_aObjectBoundColor = aValue.nColor;
496 if(aValue.bIsVisible)
497 s_nAppearanceFlags |= ViewOptFlags::ObjectBoundaries;
498
499 aValue = rConfig.GetColorValue(svtools::TABLEBOUNDARIES);
500 s_aTableBoundColor = aValue.nColor;
501 if(aValue.bIsVisible)
502 s_nAppearanceFlags |= ViewOptFlags::TableBoundaries;
503
504 aValue = rConfig.GetColorValue(svtools::WRITERIDXSHADINGS);
505 s_aIndexShadingsColor = aValue.nColor;
506 if(aValue.bIsVisible)
507 s_nAppearanceFlags |= ViewOptFlags::IndexShadings;
508
509 aValue = rConfig.GetColorValue(svtools::LINKS);
510 s_aLinksColor = aValue.nColor;
511 if(aValue.bIsVisible)
512 s_nAppearanceFlags |= ViewOptFlags::Links;
513
514 aValue = rConfig.GetColorValue(svtools::LINKSVISITED);
515 s_aVisitedLinksColor = aValue.nColor;
516 if(aValue.bIsVisible)
517 s_nAppearanceFlags |= ViewOptFlags::VisitedLinks;
518
519 aValue = rConfig.GetColorValue(svtools::SHADOWCOLOR);
520 s_aShadowColor = aValue.nColor;
521 if(aValue.bIsVisible)
522 s_nAppearanceFlags |= ViewOptFlags::Shadow;
523
524 s_aDirectCursorColor = rConfig.GetColorValue(svtools::WRITERDIRECTCURSOR).nColor;
525
526 s_aTextGridColor = rConfig.GetColorValue(svtools::WRITERTEXTGRID).nColor;
527
528 s_aSpellColor = rConfig.GetColorValue(svtools::SPELL).nColor;
529
530 s_aSmarttagColor = rConfig.GetColorValue(svtools::SMARTTAGS).nColor;
531
532 s_aFontColor = rConfig.GetColorValue(svtools::FONTCOLOR).nColor;
533
534 aValue = rConfig.GetColorValue(svtools::WRITERFIELDSHADINGS);
535 s_aFieldShadingsColor = aValue.nColor;
536 if(aValue.bIsVisible)
537 s_nAppearanceFlags |= ViewOptFlags::FieldShadings;
538
539 aValue = rConfig.GetColorValue(svtools::WRITERSECTIONBOUNDARIES);
540 s_aSectionBoundColor = aValue.nColor;
541 if(aValue.bIsVisible)
542 s_nAppearanceFlags |= ViewOptFlags::SectionBoundaries;
543
544 aValue = rConfig.GetColorValue(svtools::WRITERPAGEBREAKS);
545 s_aPageBreakColor = aValue.nColor;
546
547 aValue = rConfig.GetColorValue(svtools::WRITERHEADERFOOTERMARK);
548 s_aHeaderFooterMarkColor = aValue.nColor;
549
550 s_aScriptIndicatorColor = rConfig.GetColorValue(svtools::WRITERSCRIPTINDICATOR).nColor;
551 }
552
SetAppearanceFlag(ViewOptFlags nFlag,bool bSet,bool bSaveInConfig)553 void SwViewOption::SetAppearanceFlag(ViewOptFlags nFlag, bool bSet, bool bSaveInConfig )
554 {
555 if(bSet)
556 s_nAppearanceFlags |= nFlag;
557 else
558 s_nAppearanceFlags &= ~nFlag;
559 if(!bSaveInConfig)
560 return;
561
562 //create an editable svtools::ColorConfig and store the change
563 svtools::EditableColorConfig aEditableConfig;
564 struct FlagToConfig_Impl
565 {
566 ViewOptFlags nFlag;
567 svtools::ColorConfigEntry eEntry;
568 };
569 static const FlagToConfig_Impl aFlags[] =
570 {
571 { ViewOptFlags::DocBoundaries , svtools::DOCBOUNDARIES },
572 { ViewOptFlags::ObjectBoundaries , svtools::OBJECTBOUNDARIES },
573 { ViewOptFlags::TableBoundaries , svtools::TABLEBOUNDARIES },
574 { ViewOptFlags::IndexShadings , svtools::WRITERIDXSHADINGS },
575 { ViewOptFlags::Links , svtools::LINKS },
576 { ViewOptFlags::VisitedLinks , svtools::LINKSVISITED },
577 { ViewOptFlags::FieldShadings , svtools::WRITERFIELDSHADINGS },
578 { ViewOptFlags::SectionBoundaries , svtools::WRITERSECTIONBOUNDARIES },
579 { ViewOptFlags::Shadow , svtools::SHADOWCOLOR },
580 { ViewOptFlags::NONE , svtools::ColorConfigEntryCount }
581 };
582 sal_uInt16 nPos = 0;
583 while(aFlags[nPos].nFlag != ViewOptFlags::NONE)
584 {
585 if(nFlag & aFlags[nPos].nFlag)
586 {
587 svtools::ColorConfigValue aValue = aEditableConfig.GetColorValue(aFlags[nPos].eEntry);
588 aValue.bIsVisible = bSet;
589 aEditableConfig.SetColorValue(aFlags[nPos].eEntry, aValue);
590 }
591 nPos++;
592 }
593 }
594
IsAppearanceFlag(ViewOptFlags nFlag)595 bool SwViewOption::IsAppearanceFlag(ViewOptFlags nFlag)
596 {
597 return bool(s_nAppearanceFlags & nFlag);
598 }
599
600 namespace{
getWCOptionListener()601 rtl::Reference<comphelper::ConfigurationListener> const & getWCOptionListener()
602 {
603 static rtl::Reference<comphelper::ConfigurationListener> xListener(new comphelper::ConfigurationListener("/org.openoffice.Office.Writer/Cursor/Option"));
604 return xListener;
605 }
606 }
607
IsIgnoreProtectedArea()608 bool SwViewOption::IsIgnoreProtectedArea()
609 {
610 static comphelper::ConfigurationListenerProperty<bool> gIgnoreProtectedArea(getWCOptionListener(), "IgnoreProtectedArea");
611 return gIgnoreProtectedArea.get();
612 }
613
614 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
615