xref: /trunk/main/sw/source/ui/config/viewopt.cxx (revision cdf0e10c)
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 
31 
32 #include <svx/htmlmode.hxx>
33 #include <svtools/htmlcfg.hxx>
34 
35 #ifndef _SVX_SVXIDS_HRC //autogen
36 #include <svx/svxids.hrc>
37 #endif
38 #include <editeng/svxenum.hxx>
39 #include <editeng/svxacorr.hxx>
40 #include <unotools/localedatawrapper.hxx>
41 #ifndef _REGION_HXX //autogen
42 #include <vcl/region.hxx>
43 #endif
44 #ifndef _OUTDEV_HXX //autogen
45 #include <vcl/outdev.hxx>
46 #endif
47 #include <vcl/window.hxx>
48 #include <swmodule.hxx>
49 #include <swtypes.hxx>
50 #include <viewopt.hxx>
51 #ifndef _WDOCSH_HXX
52 #include <wdocsh.hxx>
53 #endif
54 #include <swrect.hxx>
55 #include <crstate.hxx>
56 #include <svtools/colorcfg.hxx>
57 #include <svtools/accessibilityoptions.hxx>
58 #include <unotools/syslocale.hxx>
59 
60 #include <editeng/acorrcfg.hxx>
61 
62 #ifdef DBG_UTIL
63 sal_Bool   SwViewOption::bTest9 = sal_False;		//DrawingLayerNotLoading
64 #endif
65 Color SwViewOption::aDocBoundColor(COL_LIGHTGRAY);
66 Color SwViewOption::aObjectBoundColor(COL_LIGHTGRAY);
67 Color SwViewOption::aDocColor(COL_LIGHTGRAY);
68 Color SwViewOption::aAppBackgroundColor(COL_LIGHTGRAY);
69 Color SwViewOption::aTableBoundColor(COL_LIGHTGRAY);
70 Color SwViewOption::aIndexShadingsColor(COL_LIGHTGRAY);
71 Color SwViewOption::aLinksColor(COL_BLUE);
72 Color SwViewOption::aVisitedLinksColor(COL_RED);
73 Color SwViewOption::aDirectCursorColor(COL_BLUE);
74 Color SwViewOption::aTextGridColor(COL_LIGHTGRAY);
75 Color SwViewOption::aSpellColor(COL_LIGHTRED);
76 Color SwViewOption::aSmarttagColor(COL_LIGHTMAGENTA);
77 Color SwViewOption::aFontColor(COL_BLACK);
78 Color SwViewOption::aFieldShadingsColor(COL_LIGHTGRAY);
79 Color SwViewOption::aSectionBoundColor(COL_LIGHTGRAY);
80 Color SwViewOption::aPageBreakColor(COL_BLUE);
81 Color SwViewOption::aScriptIndicatorColor(COL_GREEN);
82 
83 sal_Int32 SwViewOption::nAppearanceFlags = VIEWOPT_DOC_BOUNDARIES|VIEWOPT_OBJECT_BOUNDARIES;
84 sal_uInt16 SwViewOption::nPixelTwips = 0;   //ein Pixel auf dem Bildschirm
85 
86 
87 #define LINEBREAK_SIZE 12, 8
88 #define TAB_SIZE 12, 6
89 
90 #define MIN_BLANKWIDTH		 40
91 #define MIN_BLANKHEIGHT 	 40
92 #define MIN_TABWIDTH		120
93 #define MIN_TABHEIGHT		200
94 
95 static const char __FAR_DATA aPostItStr[] = "  ";
96 
97 /*************************************************************************
98  *					  SwViewOption::IsEqualFlags()
99  *************************************************************************/
100 
101 sal_Bool SwViewOption::IsEqualFlags( const SwViewOption &rOpt ) const
102 {
103 	return	nCoreOptions == rOpt.nCoreOptions
104 			&& nCore2Options == rOpt.nCore2Options
105 			&& aSnapSize	== rOpt.aSnapSize
106             && mnViewLayoutColumns == rOpt.mnViewLayoutColumns
107 			&& nDivisionX	== rOpt.GetDivisionX()
108 			&& nDivisionY	== rOpt.GetDivisionY()
109 			&& nPagePrevRow == rOpt.GetPagePrevRow()
110 			&& nPagePrevCol == rOpt.GetPagePrevCol()
111 			&& aRetoucheColor == rOpt.GetRetoucheColor()
112             && mbFormView == rOpt.IsFormView()
113             && mbBrowseMode == rOpt.getBrowseMode()
114             && mbViewLayoutBookMode == rOpt.mbViewLayoutBookMode
115             && bShowPlaceHolderFields == rOpt.bShowPlaceHolderFields
116             && bIdle == rOpt.bIdle
117 #ifdef DBG_UTIL
118 			// korrespondieren zu den Angaben in ui/config/cfgvw.src
119 			&& bTest1 == rOpt.IsTest1()
120 			&& bTest2 == rOpt.IsTest2()
121 			&& bTest3 == rOpt.IsTest3()
122 			&& bTest4 == rOpt.IsTest4()
123 			&& bTest5 == rOpt.IsTest5()
124 			&& bTest6 == rOpt.IsTest6()
125 			&& bTest7 == rOpt.IsTest7()
126 			&& bTest8 == rOpt.IsTest8()
127 			&& bTest10 == rOpt.IsTest10()
128 #endif
129 			;
130 }
131 
132 /*************************************************************************
133  *					  SwViewOption::DrawRect()
134  *************************************************************************/
135 
136 void SwViewOption::DrawRect( OutputDevice *pOut,
137 							 const SwRect &rRect, long nCol ) const
138 {
139 	if ( pOut->GetOutDevType() != OUTDEV_PRINTER )
140 	{
141 		const Color aCol( nCol );
142 		const Color aOldColor( pOut->GetFillColor() );
143 		pOut->SetFillColor( aCol );
144 		pOut->DrawRect( rRect.SVRect() );
145 		pOut->SetFillColor( aOldColor );
146 	}
147 	else
148 		DrawRectPrinter( pOut, rRect );
149 }
150 
151 /*************************************************************************
152  *					  SwViewOption::DrawRectPrinter()
153  *************************************************************************/
154 
155 void SwViewOption::DrawRectPrinter( OutputDevice *pOut,
156 									const SwRect &rRect ) const
157 {
158 	Color aOldColor(pOut->GetLineColor());
159 	Color aOldFillColor( pOut->GetFillColor() );
160 	pOut->SetLineColor( Color(COL_BLACK) );
161 	pOut->SetFillColor( Color(COL_TRANSPARENT ));
162 	pOut->DrawRect( rRect.SVRect() );
163 	pOut->SetFillColor( aOldFillColor );
164 	pOut->SetLineColor( aOldColor );
165 }
166 
167 /*************************************************************************
168  *					  SwViewOption::GetPostItsWidth()
169  *************************************************************************/
170 
171 sal_uInt16 SwViewOption::GetPostItsWidth( const OutputDevice *pOut ) const
172 {
173 	ASSERT( pOut, "no Outdev" );
174 	return sal_uInt16(pOut->GetTextWidth( String::CreateFromAscii(aPostItStr )));
175 }
176 
177 /*************************************************************************
178  *					  SwViewOption::PaintPostIts()
179  *************************************************************************/
180 
181 void SwViewOption::PaintPostIts( OutputDevice *pOut, const SwRect &rRect, sal_Bool bIsScript ) const
182 {
183 	if( pOut && bIsScript )
184 	{
185         	Color aOldLineColor( pOut->GetLineColor() );
186 		pOut->SetLineColor( Color(COL_GRAY ) );
187 		// Wir ziehen ueberall zwei Pixel ab, damit es schick aussieht
188 		sal_uInt16 nPix = GetPixelTwips() * 2;
189 		if( rRect.Width() <= 2 * nPix || rRect.Height() <= 2 * nPix )
190 			nPix = 0;
191 		const Point aTopLeft(  rRect.Left()  + nPix, rRect.Top()	+ nPix );
192 		const Point aBotRight( rRect.Right() - nPix, rRect.Bottom() - nPix );
193 		const SwRect aRect( aTopLeft, aBotRight );
194         DrawRect( pOut, aRect, aScriptIndicatorColor.GetColor() );
195 	pOut->SetLineColor( aOldLineColor );
196 	}
197 }
198 
199 
200 /*************************************************************************
201 |*
202 |*	ViewOption::ViewOption()
203 |*
204 |*	Letzte Aenderung	MA 04. Aug. 93
205 |*
206 |*************************************************************************/
207 
208 SwViewOption::SwViewOption() :
209     aRetoucheColor( COL_TRANSPARENT ),
210     mnViewLayoutColumns( 0 ),
211     nPagePrevRow( 1 ),
212     nPagePrevCol( 2 ),
213     nShdwCrsrFillMode( FILL_TAB ),
214     bReadonly(sal_False),
215     bStarOneSetting(sal_False),
216     bIsPagePreview(sal_False),
217     bSelectionInReadonly(sal_False),
218     mbFormView(sal_False),
219 	mbBrowseMode(sal_False),
220     mbBookView(sal_False),
221     mbViewLayoutBookMode(sal_False),
222     bShowPlaceHolderFields( sal_True ),
223 
224     nZoom( 100 ),
225     eZoom( SVX_ZOOM_PERCENT ),
226     nTblDest(TBL_DEST_CELL)
227 {
228 	// Initialisierung ist jetzt etwas einfacher
229 	// alle Bits auf 0
230     nCoreOptions =  VIEWOPT_1_HARDBLANK | VIEWOPT_1_SOFTHYPH |
231                     VIEWOPT_1_REF |
232                     VIEWOPT_1_GRAPHIC |
233 					VIEWOPT_1_TABLE	   | VIEWOPT_1_DRAW | VIEWOPT_1_CONTROL	|
234                     VIEWOPT_1_PAGEBACK |
235 					VIEWOPT_1_SOLIDMARKHDL | VIEWOPT_1_POSTITS;
236     nCore2Options = VIEWOPT_CORE2_BLACKFONT | VIEWOPT_CORE2_HIDDENPARA;
237     nUIOptions    = VIEWOPT_2_MODIFIED | VIEWOPT_2_GRFKEEPZOOM |VIEWOPT_2_ANY_RULER;
238 
239 	if(MEASURE_METRIC != SvtSysLocale().GetLocaleData().getMeasurementSystemEnum())
240 		aSnapSize.Width() = aSnapSize.Height() = 720;	// 1/2"
241 	else
242 		aSnapSize.Width() = aSnapSize.Height() = 567;	// 1 cm
243 	nDivisionX = nDivisionY = 1;
244 
245     bSelectionInReadonly = SW_MOD()->GetAccessibilityOptions().IsSelectionInReadonly();
246 
247     bIdle = true;
248 
249 #ifdef DBG_UTIL
250 	// korrespondieren zu den Angaben in ui/config/cfgvw.src
251 	bTest1 = bTest2 = bTest3 = bTest4 =
252 			 bTest5 = bTest6 = bTest7 = bTest8 = bTest10 = sal_False;
253 #endif
254 }
255 
256 SwViewOption::SwViewOption(const SwViewOption& rVOpt)
257 {
258 	bReadonly = sal_False;
259     bSelectionInReadonly = sal_False;
260     // --> FME 2004-06-29 #114856# Formular view
261     mbFormView       = rVOpt.mbFormView;
262     // <--
263     nZoom           = rVOpt.nZoom       ;
264 	aSnapSize   	= rVOpt.aSnapSize   ;
265     mnViewLayoutColumns = rVOpt.mnViewLayoutColumns ;
266 	nDivisionX  	= rVOpt.nDivisionX  ;
267 	nDivisionY  	= rVOpt.nDivisionY  ;
268 	nPagePrevRow	= rVOpt.nPagePrevRow;
269 	nPagePrevCol	= rVOpt.nPagePrevCol;
270     bIsPagePreview  = rVOpt.bIsPagePreview;
271 	eZoom      		= rVOpt.eZoom       ;
272 	nTblDest    	= rVOpt.nTblDest    ;
273 	nUIOptions		= rVOpt.nUIOptions  ;
274 	nCoreOptions	= rVOpt.nCoreOptions  ;
275 	nCore2Options	= rVOpt.nCore2Options  ;
276 	aRetoucheColor	= rVOpt.GetRetoucheColor();
277 	sSymbolFont 	= rVOpt.sSymbolFont;
278 	nShdwCrsrFillMode = rVOpt.nShdwCrsrFillMode;
279 	bStarOneSetting = rVOpt.bStarOneSetting;
280 	mbBookView	    = rVOpt.mbBookView;
281 	mbBrowseMode	= rVOpt.mbBrowseMode;
282     mbViewLayoutBookMode = rVOpt.mbViewLayoutBookMode;
283     bShowPlaceHolderFields = rVOpt.bShowPlaceHolderFields;
284     bIdle           = rVOpt.bIdle;
285 
286 #ifdef DBG_UTIL
287 	bTest1          = rVOpt.bTest1      ;
288 	bTest2          = rVOpt.bTest2      ;
289 	bTest3          = rVOpt.bTest3      ;
290 	bTest4          = rVOpt.bTest4      ;
291 	bTest5          = rVOpt.bTest5      ;
292 	bTest6          = rVOpt.bTest6      ;
293 	bTest7          = rVOpt.bTest7      ;
294 	bTest8          = rVOpt.bTest8      ;
295 	bTest10         = rVOpt.bTest10     ;
296 #endif
297 }
298 
299 
300 SwViewOption& SwViewOption::operator=( const SwViewOption &rVOpt )
301 {
302     // --> DVO FME 2004-06-29 #114856# Formular view
303     mbFormView       = rVOpt.mbFormView   ;
304     // <--
305 	nZoom   		= rVOpt.nZoom   	;
306 	aSnapSize   	= rVOpt.aSnapSize   ;
307     mnViewLayoutColumns = rVOpt.mnViewLayoutColumns ;
308 	nDivisionX  	= rVOpt.nDivisionX  ;
309 	nDivisionY  	= rVOpt.nDivisionY  ;
310 	nPagePrevRow	= rVOpt.nPagePrevRow;
311 	nPagePrevCol	= rVOpt.nPagePrevCol;
312     bIsPagePreview  = rVOpt.bIsPagePreview;
313 	eZoom      		= rVOpt.eZoom       ;
314 	nTblDest    	= rVOpt.nTblDest    ;
315 	nUIOptions		= rVOpt.nUIOptions  ;
316 	nCoreOptions	= rVOpt.nCoreOptions;
317 	nCore2Options	= rVOpt.nCore2Options;
318 	aRetoucheColor	= rVOpt.GetRetoucheColor();
319 	sSymbolFont 	= rVOpt.sSymbolFont;
320 	nShdwCrsrFillMode = rVOpt.nShdwCrsrFillMode;
321 	bStarOneSetting = rVOpt.bStarOneSetting;
322 	mbBookView	    = rVOpt.mbBookView;
323 	mbBrowseMode	= rVOpt.mbBrowseMode;
324     mbViewLayoutBookMode = rVOpt.mbViewLayoutBookMode;
325     bShowPlaceHolderFields = rVOpt.bShowPlaceHolderFields;
326     bIdle           = rVOpt.bIdle;
327 
328 #ifdef DBG_UTIL
329 	bTest1          = rVOpt.bTest1      ;
330 	bTest2          = rVOpt.bTest2      ;
331 	bTest3          = rVOpt.bTest3      ;
332 	bTest4          = rVOpt.bTest4      ;
333 	bTest5          = rVOpt.bTest5      ;
334 	bTest6          = rVOpt.bTest6      ;
335 	bTest7          = rVOpt.bTest7      ;
336 	bTest8          = rVOpt.bTest8      ;
337 	bTest10         = rVOpt.bTest10     ;
338 #endif
339 	return *this;
340 }
341 
342 
343 SwViewOption::~SwViewOption()
344 {
345 }
346 
347 /*************************************************************************
348 |*
349 |*	ViewOption::Init()
350 |*
351 |*	Letzte Aenderung	MA 04. Aug. 93
352 |*
353 |*************************************************************************/
354 
355 void SwViewOption::Init( Window *pWin )
356 {
357 	if( !nPixelTwips && pWin )
358 	{
359 		nPixelTwips = (sal_uInt16)pWin->PixelToLogic( Size(1,1) ).Height();
360 	}
361 }
362 
363 sal_Bool SwViewOption::IsAutoCompleteWords() const
364 {
365 	const SvxSwAutoFmtFlags& rFlags = SvxAutoCorrCfg::Get()->GetAutoCorrect()->GetSwFlags();
366 	return /*rFlags.bAutoCompleteWords &&*/ rFlags.bAutoCmpltCollectWords;
367 }
368 
369 /*************************************************************************/
370 /*                                                                       */
371 /*************************************************************************/
372 
373 AuthorCharAttr::AuthorCharAttr() :
374 	nItemId	(SID_ATTR_CHAR_UNDERLINE),
375 	nAttr	(UNDERLINE_SINGLE),
376 	nColor	(COL_TRANSPARENT)
377 {
378 }
379 
380 /*-----------------07.01.97 13.50-------------------
381 
382 --------------------------------------------------*/
383 
384 sal_uInt16		GetHtmlMode(const SwDocShell* pShell)
385 {
386 	sal_uInt16 nRet = 0;
387 	if(!pShell || PTR_CAST(SwWebDocShell, pShell))
388 	{
389 		nRet = HTMLMODE_ON;
390 		SvxHtmlOptions* pHtmlOpt = SvxHtmlOptions::Get();
391 		switch ( pHtmlOpt->GetExportMode() )
392 		{
393 			case HTML_CFG_MSIE_40:
394 				nRet |= HTMLMODE_PARA_BORDER|HTMLMODE_SMALL_CAPS|
395 						HTMLMODE_SOME_STYLES|
396 						HTMLMODE_FULL_STYLES|HTMLMODE_GRAPH_POS|
397 						HTMLMODE_FULL_ABS_POS|HTMLMODE_SOME_ABS_POS;
398 			break;
399 			case HTML_CFG_NS40:
400 				nRet |= HTMLMODE_PARA_BORDER|HTMLMODE_SOME_STYLES|
401 						HTMLMODE_FRM_COLUMNS|HTMLMODE_BLINK|HTMLMODE_GRAPH_POS|
402 						HTMLMODE_SOME_ABS_POS;
403 			break;
404 			case HTML_CFG_WRITER:
405 				nRet |= HTMLMODE_PARA_BORDER|HTMLMODE_SMALL_CAPS|
406 						HTMLMODE_SOME_STYLES|
407 						HTMLMODE_FRM_COLUMNS|HTMLMODE_FULL_STYLES|
408 						HTMLMODE_BLINK|HTMLMODE_DROPCAPS|HTMLMODE_GRAPH_POS|
409 						HTMLMODE_FULL_ABS_POS|HTMLMODE_SOME_ABS_POS;
410 			break;
411 			case HTML_CFG_HTML32:
412 			break;
413 		}
414 	}
415 	return nRet;
416 }
417 /* -----------------------------24.04.2002 10:20------------------------------
418 
419  ---------------------------------------------------------------------------*/
420 Color&   SwViewOption::GetDocColor()
421 {
422     return aDocColor;
423 }
424 /* -----------------------------23.04.2002 17:18------------------------------
425 
426  ---------------------------------------------------------------------------*/
427 Color&   SwViewOption::GetDocBoundariesColor()
428 {
429     return aDocBoundColor;
430 }
431 /* -----------------------------23.04.2002 17:53------------------------------
432 
433  ---------------------------------------------------------------------------*/
434 Color&   SwViewOption::GetObjectBoundariesColor()
435 {
436     return aObjectBoundColor;
437 }
438 /* -----------------------------24.04.2002 10:41------------------------------
439 
440  ---------------------------------------------------------------------------*/
441 Color& SwViewOption::GetAppBackgroundColor()
442 {
443     return aAppBackgroundColor;
444 }
445 /*-- 24.04.2002 10:50:11---------------------------------------------------
446 
447   -----------------------------------------------------------------------*/
448 Color&   SwViewOption::GetTableBoundariesColor()
449 {
450     return aTableBoundColor;
451 }
452 /*-- 24.04.2002 10:50:12---------------------------------------------------
453 
454   -----------------------------------------------------------------------*/
455 Color&   SwViewOption::GetIndexShadingsColor()
456 {
457     return aIndexShadingsColor;
458 }
459 /*-- 24.04.2002 10:50:12---------------------------------------------------
460 
461   -----------------------------------------------------------------------*/
462 Color&   SwViewOption::GetLinksColor()
463 {
464     return aLinksColor;
465 }
466 /*-- 24.04.2002 10:50:13---------------------------------------------------
467 
468   -----------------------------------------------------------------------*/
469 Color&   SwViewOption::GetVisitedLinksColor()
470 {
471     return aVisitedLinksColor;
472 }
473 /*-- 24.04.2002 10:50:13---------------------------------------------------
474 
475   -----------------------------------------------------------------------*/
476 Color&   SwViewOption::GetDirectCursorColor()
477 {
478     return aDirectCursorColor;
479 }
480 /*-- 24.04.2002 10:50:14---------------------------------------------------
481 
482   -----------------------------------------------------------------------*/
483 Color&   SwViewOption::GetTextGridColor()
484 {
485     return aTextGridColor;
486 }
487 /*-- 24.04.2002 10:50:14---------------------------------------------------
488 
489   -----------------------------------------------------------------------*/
490 Color&   SwViewOption::GetSpellColor()
491 {
492     return aSpellColor;
493 }
494 /*-- 24.04.2007 10:50:14---------------------------------------------------
495 
496   -----------------------------------------------------------------------*/
497 Color&   SwViewOption::GetSmarttagColor()
498 {
499     return aSmarttagColor;
500 }
501 /*-- 06.12.2002 10:50:11---------------------------------------------------
502 
503   -----------------------------------------------------------------------*/
504 Color&   SwViewOption::GetFontColor()
505 {
506     return aFontColor;
507 }
508 /*-- 24.04.2002 10:50:15---------------------------------------------------
509 
510   -----------------------------------------------------------------------*/
511 Color&   SwViewOption::GetFieldShadingsColor()
512 {
513     return aFieldShadingsColor;
514 }
515 /*-- 24.04.2002 10:50:15---------------------------------------------------
516 
517   -----------------------------------------------------------------------*/
518 Color&   SwViewOption::GetSectionBoundColor()
519 {
520     return aSectionBoundColor;
521 }
522 /* -----------------------------2002/07/31 14:00------------------------------
523 
524  ---------------------------------------------------------------------------*/
525 Color& SwViewOption::GetPageBreakColor()
526 {
527     return aPageBreakColor;
528 }
529 
530 /* -----------------------------23.04.2002 17:41------------------------------
531 
532  ---------------------------------------------------------------------------*/
533 void SwViewOption::ApplyColorConfigValues(const svtools::ColorConfig& rConfig )
534 {
535     aDocColor.SetColor(rConfig.GetColorValue(svtools::DOCCOLOR).nColor);
536 
537     svtools::ColorConfigValue aValue = rConfig.GetColorValue(svtools::DOCBOUNDARIES);
538     aDocBoundColor.SetColor(aValue.nColor);
539     nAppearanceFlags = 0;
540     if(aValue.bIsVisible)
541         nAppearanceFlags |= VIEWOPT_DOC_BOUNDARIES;
542 
543     aAppBackgroundColor.SetColor(rConfig.GetColorValue(svtools::APPBACKGROUND).nColor);
544 
545     aValue = rConfig.GetColorValue(svtools::OBJECTBOUNDARIES);
546     aObjectBoundColor.SetColor(aValue.nColor);
547     if(aValue.bIsVisible)
548         nAppearanceFlags |= VIEWOPT_OBJECT_BOUNDARIES;
549 
550     aValue = rConfig.GetColorValue(svtools::TABLEBOUNDARIES);
551     aTableBoundColor.SetColor(aValue.nColor);
552     if(aValue.bIsVisible)
553         nAppearanceFlags |= VIEWOPT_TABLE_BOUNDARIES;
554 
555     aValue = rConfig.GetColorValue(svtools::WRITERIDXSHADINGS);
556     aIndexShadingsColor.SetColor(aValue.nColor);
557     if(aValue.bIsVisible)
558         nAppearanceFlags |= VIEWOPT_INDEX_SHADINGS;
559 
560     aValue = rConfig.GetColorValue(svtools::LINKS);
561     aLinksColor.SetColor(aValue.nColor);
562     if(aValue.bIsVisible)
563         nAppearanceFlags |= VIEWOPT_LINKS;
564 
565     aValue = rConfig.GetColorValue(svtools::LINKSVISITED);
566     aVisitedLinksColor.SetColor(aValue.nColor);
567     if(aValue.bIsVisible)
568         nAppearanceFlags |= VIEWOPT_VISITED_LINKS;
569 
570     aDirectCursorColor.SetColor(rConfig.GetColorValue(svtools::WRITERDIRECTCURSOR).nColor);
571 
572     aTextGridColor.SetColor(rConfig.GetColorValue(svtools::WRITERTEXTGRID).nColor);
573 
574     aSpellColor.SetColor(rConfig.GetColorValue(svtools::SPELL).nColor);
575 
576     aSmarttagColor.SetColor(rConfig.GetColorValue(svtools::SMARTTAGS).nColor);
577 
578     aFontColor.SetColor(rConfig.GetColorValue(svtools::FONTCOLOR).nColor);
579 
580     aValue = rConfig.GetColorValue(svtools::WRITERFIELDSHADINGS);
581     aFieldShadingsColor.SetColor(aValue.nColor);
582     if(aValue.bIsVisible)
583         nAppearanceFlags |= VIEWOPT_FIELD_SHADINGS;
584 
585     aValue = rConfig.GetColorValue(svtools::WRITERSECTIONBOUNDARIES);
586     aSectionBoundColor.SetColor(aValue.nColor);
587     if(aValue.bIsVisible)
588         nAppearanceFlags |= VIEWOPT_SECTION_BOUNDARIES;
589 
590     aValue = rConfig.GetColorValue(svtools::WRITERPAGEBREAKS);
591     aPageBreakColor.SetColor(aValue.nColor);
592 
593     aScriptIndicatorColor.SetColor(rConfig.GetColorValue(svtools::WRITERSCRIPTINDICATOR).nColor);
594 }
595 /* -----------------------------23.04.2002 17:48------------------------------
596 
597  ---------------------------------------------------------------------------*/
598 void SwViewOption::SetAppearanceFlag(sal_Int32 nFlag, sal_Bool bSet, sal_Bool bSaveInConfig )
599 {
600     if(bSet)
601         nAppearanceFlags |= nFlag;
602     else
603         nAppearanceFlags &= ~nFlag;
604     if(bSaveInConfig)
605     {
606         //create an editable svtools::ColorConfig and store the change
607         svtools::EditableColorConfig aEditableConfig;
608         struct FlagToConfig_Impl
609         {
610             sal_Int32               nFlag;
611             svtools::ColorConfigEntry   eEntry;
612         };
613         static const FlagToConfig_Impl aFlags[] =
614         {
615             { VIEWOPT_DOC_BOUNDARIES     ,   svtools::DOCBOUNDARIES },
616             { VIEWOPT_OBJECT_BOUNDARIES  ,   svtools::OBJECTBOUNDARIES },
617             { VIEWOPT_TABLE_BOUNDARIES   ,   svtools::TABLEBOUNDARIES },
618             { VIEWOPT_INDEX_SHADINGS     ,   svtools::WRITERIDXSHADINGS },
619             { VIEWOPT_LINKS              ,   svtools::LINKS },
620             { VIEWOPT_VISITED_LINKS      ,   svtools::LINKSVISITED },
621             { VIEWOPT_FIELD_SHADINGS     ,   svtools::WRITERFIELDSHADINGS },
622             { VIEWOPT_SECTION_BOUNDARIES ,   svtools::WRITERSECTIONBOUNDARIES },
623             { 0                          ,   svtools::ColorConfigEntryCount }
624         };
625         sal_uInt16 nPos = 0;
626         while(aFlags[nPos].nFlag)
627         {
628             if(0 != (nFlag&aFlags[nPos].nFlag))
629             {
630                 svtools::ColorConfigValue aValue = aEditableConfig.GetColorValue(aFlags[nPos].eEntry);
631                 aValue.bIsVisible = bSet;
632                 aEditableConfig.SetColorValue(aFlags[nPos].eEntry, aValue);
633             }
634             nPos++;
635         }
636     }
637 }
638 /* -----------------------------24.04.2002 10:42------------------------------
639 
640  ---------------------------------------------------------------------------*/
641 sal_Bool SwViewOption::IsAppearanceFlag(sal_Int32 nFlag)
642 {
643     return 0 != (nAppearanceFlags & nFlag);
644 }
645 
646