1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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 .
21 #include "document.hxx"
22 #include "scextopt.hxx"
23 #include "viewopti.hxx"
25 #include "xestyle.hxx"
27 using namespace ::oox
;
30 // Workbook view settings records =============================================
32 XclExpWindow1::XclExpWindow1( const XclExpRoot
& rRoot
) :
33 XclExpRecord( EXC_ID_WINDOW1
, 18 ),
37 const ScViewOptions
& rViewOpt
= rRoot
.GetDoc().GetViewOptions();
38 ::set_flag( mnFlags
, EXC_WIN1_HOR_SCROLLBAR
, rViewOpt
.GetOption( VOPT_HSCROLL
) );
39 ::set_flag( mnFlags
, EXC_WIN1_VER_SCROLLBAR
, rViewOpt
.GetOption( VOPT_VSCROLL
) );
40 ::set_flag( mnFlags
, EXC_WIN1_TABBAR
, rViewOpt
.GetOption( VOPT_TABCONTROLS
) );
42 double fTabBarWidth
= rRoot
.GetExtDocOptions().GetDocSettings().mfTabBarWidth
;
43 if( (0.0 <= fTabBarWidth
) && (fTabBarWidth
<= 1.0) )
44 mnTabBarSize
= static_cast< sal_uInt16
>( fTabBarWidth
* 1000.0 + 0.5 );
47 void XclExpWindow1::SaveXml( XclExpXmlStream
& rStrm
)
49 const XclExpTabInfo
& rTabInfo
= rStrm
.GetRoot().GetTabInfo();
51 rStrm
.GetCurrentStream()->singleElement( XML_workbookView
,
52 // OOXTODO: XML_visibility, // ST_visibilty
53 // OOXTODO: XML_minimized, // bool
54 XML_showHorizontalScroll
, XclXmlUtils::ToPsz( ::get_flag( mnFlags
, EXC_WIN1_HOR_SCROLLBAR
) ),
55 XML_showVerticalScroll
, XclXmlUtils::ToPsz( ::get_flag( mnFlags
, EXC_WIN1_VER_SCROLLBAR
) ),
56 XML_showSheetTabs
, XclXmlUtils::ToPsz( ::get_flag( mnFlags
, EXC_WIN1_TABBAR
) ),
59 XML_windowWidth
, OString::valueOf( (sal_Int32
)0x4000 ).getStr(),
60 XML_windowHeight
, OString::valueOf( (sal_Int32
)0x2000 ).getStr(),
61 XML_tabRatio
, OString::valueOf( (sal_Int32
)mnTabBarSize
).getStr(),
62 XML_firstSheet
, OString::valueOf( (sal_Int32
)rTabInfo
.GetFirstVisXclTab() ).getStr(),
63 XML_activeTab
, OString::valueOf( (sal_Int32
)rTabInfo
.GetDisplayedXclTab() ).getStr(),
64 // OOXTODO: XML_autoFilterDateGrouping, // bool; AUTOFILTER12? 87Eh
68 void XclExpWindow1::WriteBody( XclExpStream
& rStrm
)
70 const XclExpTabInfo
& rTabInfo
= rStrm
.GetRoot().GetTabInfo();
72 rStrm
<< sal_uInt16( 0 ) // X position of the window
73 << sal_uInt16( 0 ) // Y position of the window
74 << sal_uInt16( 0x4000 ) // width of the window
75 << sal_uInt16( 0x2000 ) // height of the window
77 << rTabInfo
.GetDisplayedXclTab()
78 << rTabInfo
.GetFirstVisXclTab()
79 << rTabInfo
.GetXclSelectedCount()
83 // Sheet view settings records ================================================
85 XclExpWindow2::XclExpWindow2( const XclExpRoot
& rRoot
,
86 const XclTabViewData
& rData
, sal_uInt32 nGridColorId
) :
87 XclExpRecord( EXC_ID_WINDOW2
, (rRoot
.GetBiff() == EXC_BIFF8
) ? 18 : 10 ),
88 maGridColor( rData
.maGridColor
),
89 mnGridColorId( nGridColorId
),
91 maFirstXclPos( rData
.maFirstXclPos
),
92 mnNormalZoom( rData
.mnNormalZoom
),
93 mnPageZoom( rData
.mnPageZoom
)
95 ::set_flag( mnFlags
, EXC_WIN2_SHOWFORMULAS
, rData
.mbShowFormulas
);
96 ::set_flag( mnFlags
, EXC_WIN2_SHOWGRID
, rData
.mbShowGrid
);
97 ::set_flag( mnFlags
, EXC_WIN2_SHOWHEADINGS
, rData
.mbShowHeadings
);
98 ::set_flag( mnFlags
, EXC_WIN2_FROZEN
, rData
.mbFrozenPanes
);
99 ::set_flag( mnFlags
, EXC_WIN2_SHOWZEROS
, rData
.mbShowZeros
);
100 ::set_flag( mnFlags
, EXC_WIN2_DEFGRIDCOLOR
, rData
.mbDefGridColor
);
101 ::set_flag( mnFlags
, EXC_WIN2_MIRRORED
, rData
.mbMirrored
);
102 ::set_flag( mnFlags
, EXC_WIN2_SHOWOUTLINE
, rData
.mbShowOutline
);
103 ::set_flag( mnFlags
, EXC_WIN2_FROZENNOSPLIT
, rData
.mbFrozenPanes
);
104 ::set_flag( mnFlags
, EXC_WIN2_SELECTED
, rData
.mbSelected
);
105 ::set_flag( mnFlags
, EXC_WIN2_DISPLAYED
, rData
.mbDisplayed
);
106 ::set_flag( mnFlags
, EXC_WIN2_PAGEBREAKMODE
, rData
.mbPageMode
);
109 void XclExpWindow2::WriteBody( XclExpStream
& rStrm
)
111 const XclExpRoot
& rRoot
= rStrm
.GetRoot();
116 switch( rRoot
.GetBiff() )
121 rStrm
<< maGridColor
;
124 rStrm
<< rRoot
.GetPalette().GetColorIndex( mnGridColorId
)
130 default: DBG_ERROR_BIFF();
134 // ----------------------------------------------------------------------------
136 XclExpScl::XclExpScl( sal_uInt16 nZoom
) :
137 XclExpRecord( EXC_ID_SCL
, 4 ),
145 void XclExpScl::Shorten( sal_uInt16 nFactor
)
147 while( (mnNum
% nFactor
== 0) && (mnDenom
% nFactor
== 0) )
149 mnNum
= mnNum
/ nFactor
;
150 mnDenom
= mnDenom
/ nFactor
;
154 void XclExpScl::WriteBody( XclExpStream
& rStrm
)
156 OSL_ENSURE_BIFF( rStrm
.GetRoot().GetBiff() >= EXC_BIFF4
);
157 rStrm
<< mnNum
<< mnDenom
;
160 // ----------------------------------------------------------------------------
162 XclExpPane::XclExpPane( const XclTabViewData
& rData
) :
163 XclExpRecord( EXC_ID_PANE
, 10 ),
164 mnSplitX( rData
.mnSplitX
),
165 mnSplitY( rData
.mnSplitY
),
166 maSecondXclPos( rData
.maSecondXclPos
),
167 mnActivePane( rData
.mnActivePane
),
168 mbFrozenPanes( rData
.mbFrozenPanes
)
170 OSL_ENSURE( rData
.IsSplit(), "XclExpPane::XclExpPane - no PANE record for unsplit view" );
173 static const char* lcl_GetActivePane( sal_uInt8 nActivePane
)
175 switch( nActivePane
)
177 case EXC_PANE_TOPLEFT
: return "topLeft"; //break;
178 case EXC_PANE_TOPRIGHT
: return "topRight"; //break;
179 case EXC_PANE_BOTTOMLEFT
: return "bottomLeft"; //break;
180 case EXC_PANE_BOTTOMRIGHT
: return "bottomRight"; //break;
182 return "**error: lcl_GetActivePane";
185 void XclExpPane::SaveXml( XclExpXmlStream
& rStrm
)
187 rStrm
.GetCurrentStream()->singleElement( XML_pane
,
188 XML_xSplit
, OString::valueOf( (sal_Int32
)mnSplitX
).getStr(),
189 XML_ySplit
, OString::valueOf( (sal_Int32
)mnSplitY
).getStr(),
190 XML_topLeftCell
, XclXmlUtils::ToOString( maSecondXclPos
).getStr(),
191 XML_activePane
, lcl_GetActivePane( mnActivePane
),
192 XML_state
, mbFrozenPanes
? "frozen" : "split",
196 void XclExpPane::WriteBody( XclExpStream
& rStrm
)
199 << static_cast<sal_uInt16
>( mnSplitY
)
202 if( rStrm
.GetRoot().GetBiff() >= EXC_BIFF5
)
203 rStrm
<< sal_uInt8( 0 );
206 // ----------------------------------------------------------------------------
208 XclExpSelection::XclExpSelection( const XclTabViewData
& rData
, sal_uInt8 nPane
) :
209 XclExpRecord( EXC_ID_SELECTION
, 15 ),
212 if( const XclSelectionData
* pSelData
= rData
.GetSelectionData( nPane
) )
213 maSelData
= *pSelData
;
215 // find the cursor position in the selection list (or add it)
216 XclRangeList
& rXclSel
= maSelData
.maXclSelection
;
218 for( XclRangeList::const_iterator aIt
= rXclSel
.begin(), aEnd
= rXclSel
.end(); !bFound
&& (aIt
!= aEnd
); ++aIt
)
219 if( (bFound
= aIt
->Contains( maSelData
.maXclCursor
)) == true )
220 maSelData
.mnCursorIdx
= static_cast< sal_uInt16
>( aIt
- rXclSel
.begin() );
221 /* Cursor cell not found in list? (e.g. inactive pane, or removed in
222 ConvertRangeList(), because Calc cursor on invalid pos)
223 -> insert the valid Excel cursor. */
226 maSelData
.mnCursorIdx
= static_cast< sal_uInt16
>( rXclSel
.size() );
227 rXclSel
.push_back( XclRange( maSelData
.maXclCursor
) );
231 void XclExpSelection::SaveXml( XclExpXmlStream
& rStrm
)
233 rStrm
.GetCurrentStream()->singleElement( XML_selection
,
234 XML_pane
, lcl_GetActivePane( mnPane
),
235 XML_activeCell
, XclXmlUtils::ToOString( maSelData
.maXclCursor
).getStr(),
236 XML_activeCellId
, OString::valueOf( (sal_Int32
) maSelData
.mnCursorIdx
).getStr(),
237 XML_sqref
, XclXmlUtils::ToOString( maSelData
.maXclSelection
).getStr(),
241 void XclExpSelection::WriteBody( XclExpStream
& rStrm
)
243 rStrm
<< mnPane
// pane for this selection
244 << maSelData
.maXclCursor
// cell cursor
245 << maSelData
.mnCursorIdx
; // index to range containing cursor
246 maSelData
.maXclSelection
.Write( rStrm
, false );
249 // ----------------------------------------------------------------------------
251 XclExpTabBgColor::XclExpTabBgColor( const XclTabViewData
& rTabViewData
) :
252 XclExpRecord( EXC_ID_SHEETEXT
, 18 ),
253 mrTabViewData( rTabViewData
)
256 //TODO Fix savexml...
257 /*void XclExpTabBgColor::SaveXml( XclExpXmlStream& rStrm )
261 void XclExpTabBgColor::WriteBody( XclExpStream
& rStrm
)
263 if ( mrTabViewData
.IsDefaultTabBgColor() )
265 sal_uInt16 rt
= 0x0862; //rt
266 sal_uInt16 grbitFrt
= 0x0000; //grbit must be set to 0
267 sal_uInt32 unused
= 0x00000000; //Use twice...
268 sal_uInt32 cb
= 0x00000014; // Record Size, may be larger in future...
269 sal_uInt16 reserved
= 0x0000; //trailing bits are 0
270 sal_uInt16 TabBgColorIndex
;
271 XclExpPalette
& rPal
= rStrm
.GetRoot().GetPalette();
272 TabBgColorIndex
= rPal
.GetColorIndex(mrTabViewData
.mnTabBgColorId
);
273 if (TabBgColorIndex
< 8 || TabBgColorIndex
> 63 ) // only numbers 8 - 63 are valid numbers
274 TabBgColorIndex
= 127; //Excel specs: 127 makes excel ignore tab color information.
275 rStrm
<< rt
<< grbitFrt
<< unused
<< unused
<< cb
<< TabBgColorIndex
<< reserved
;
278 // Sheet view settings ========================================================
282 /** Converts a Calc zoom factor into an Excel zoom factor. Returns 0 for a default zoom value. */
283 sal_uInt16
lclGetXclZoom( long nScZoom
, sal_uInt16 nDefXclZoom
)
285 sal_uInt16 nXclZoom
= limit_cast
< sal_uInt16
>( nScZoom
, EXC_ZOOM_MIN
, EXC_ZOOM_MAX
);
286 return (nXclZoom
== nDefXclZoom
) ? 0 : nXclZoom
;
291 // ----------------------------------------------------------------------------
293 XclExpTabViewSettings::XclExpTabViewSettings( const XclExpRoot
& rRoot
, SCTAB nScTab
) :
295 mnGridColorId( XclExpPalette::GetColorIdFromIndex( EXC_COLOR_WINDOWTEXT
) )
297 // *** sheet flags ***
299 const XclExpTabInfo
& rTabInfo
= GetTabInfo();
300 maData
.mbSelected
= rTabInfo
.IsSelectedTab( nScTab
);
301 maData
.mbDisplayed
= rTabInfo
.IsDisplayedTab( nScTab
);
302 maData
.mbMirrored
= rTabInfo
.IsMirroredTab( nScTab
);
304 const ScViewOptions
& rViewOpt
= GetDoc().GetViewOptions();
305 maData
.mbShowFormulas
= rViewOpt
.GetOption( VOPT_FORMULAS
);
306 maData
.mbShowHeadings
= rViewOpt
.GetOption( VOPT_HEADER
);
307 maData
.mbShowZeros
= rViewOpt
.GetOption( VOPT_NULLVALS
);
308 maData
.mbShowOutline
= rViewOpt
.GetOption( VOPT_OUTLINER
);
310 // *** sheet options: cursor, selection, splits, grid color, zoom ***
312 if( const ScExtTabSettings
* pTabSett
= GetExtDocOptions().GetTabSettings( nScTab
) )
314 const ScExtTabSettings
& rTabSett
= *pTabSett
;
315 XclExpAddressConverter
& rAddrConv
= GetAddressConverter();
317 // first visible cell in top-left pane
318 if( (rTabSett
.maFirstVis
.Col() >= 0) && (rTabSett
.maFirstVis
.Row() >= 0) )
319 maData
.maFirstXclPos
= rAddrConv
.CreateValidAddress( rTabSett
.maFirstVis
, false );
321 // first visible cell in additional pane(s)
322 if( (rTabSett
.maSecondVis
.Col() >= 0) && (rTabSett
.maSecondVis
.Row() >= 0) )
323 maData
.maSecondXclPos
= rAddrConv
.CreateValidAddress( rTabSett
.maSecondVis
, false );
326 switch( rTabSett
.meActivePane
)
328 case SCEXT_PANE_TOPLEFT
: maData
.mnActivePane
= EXC_PANE_TOPLEFT
; break;
329 case SCEXT_PANE_TOPRIGHT
: maData
.mnActivePane
= EXC_PANE_TOPRIGHT
; break;
330 case SCEXT_PANE_BOTTOMLEFT
: maData
.mnActivePane
= EXC_PANE_BOTTOMLEFT
; break;
331 case SCEXT_PANE_BOTTOMRIGHT
: maData
.mnActivePane
= EXC_PANE_BOTTOMRIGHT
; break;
334 // freeze/split position
335 maData
.mbFrozenPanes
= rTabSett
.mbFrozenPanes
;
336 if( maData
.mbFrozenPanes
)
338 /* Frozen panes: handle split position as row/column positions.
339 #i35812# Excel uses number of visible rows/columns, Calc uses position of freeze. */
340 SCCOL nFreezeScCol
= rTabSett
.maFreezePos
.Col();
341 if( (0 < nFreezeScCol
) && (nFreezeScCol
<= GetXclMaxPos().Col()) )
342 maData
.mnSplitX
= static_cast< sal_uInt16
>( nFreezeScCol
) - maData
.maFirstXclPos
.mnCol
;
343 SCROW nFreezeScRow
= rTabSett
.maFreezePos
.Row();
344 if( (0 < nFreezeScRow
) && (nFreezeScRow
<= GetXclMaxPos().Row()) )
345 maData
.mnSplitY
= static_cast< sal_uInt32
>( nFreezeScRow
) - maData
.maFirstXclPos
.mnRow
;
346 // if both splits are left out (address overflow), remove the frozen flag
347 maData
.mbFrozenPanes
= maData
.IsSplit();
349 // #i20671# frozen panes: mostright/mostbottom pane is active regardless of cursor position
350 if( maData
.HasPane( EXC_PANE_BOTTOMRIGHT
) )
351 maData
.mnActivePane
= EXC_PANE_BOTTOMRIGHT
;
352 else if( maData
.HasPane( EXC_PANE_TOPRIGHT
) )
353 maData
.mnActivePane
= EXC_PANE_TOPRIGHT
;
354 else if( maData
.HasPane( EXC_PANE_BOTTOMLEFT
) )
355 maData
.mnActivePane
= EXC_PANE_BOTTOMLEFT
;
359 // split window: position is in twips
360 maData
.mnSplitX
= static_cast<sal_uInt16
>(rTabSett
.maSplitPos
.X());
361 maData
.mnSplitY
= static_cast<sal_uInt32
>(rTabSett
.maSplitPos
.Y());
365 CreateSelectionData( EXC_PANE_TOPLEFT
, rTabSett
.maCursor
, rTabSett
.maSelection
);
366 CreateSelectionData( EXC_PANE_TOPRIGHT
, rTabSett
.maCursor
, rTabSett
.maSelection
);
367 CreateSelectionData( EXC_PANE_BOTTOMLEFT
, rTabSett
.maCursor
, rTabSett
.maSelection
);
368 CreateSelectionData( EXC_PANE_BOTTOMRIGHT
, rTabSett
.maCursor
, rTabSett
.maSelection
);
371 const Color
& rGridColor
= rTabSett
.maGridColor
;
372 maData
.mbDefGridColor
= rGridColor
.GetColor() == COL_AUTO
;
373 if( !maData
.mbDefGridColor
)
375 if( GetBiff() == EXC_BIFF8
)
376 mnGridColorId
= GetPalette().InsertColor( rGridColor
, EXC_COLOR_GRID
);
378 maData
.maGridColor
= rGridColor
;
380 maData
.mbShowGrid
= rTabSett
.mbShowGrid
;
382 // view mode and zoom
383 maData
.mbPageMode
= (GetBiff() == EXC_BIFF8
) && rTabSett
.mbPageMode
;
384 maData
.mnNormalZoom
= lclGetXclZoom( rTabSett
.mnNormalZoom
, EXC_WIN2_NORMALZOOM_DEF
);
385 maData
.mnPageZoom
= lclGetXclZoom( rTabSett
.mnPageZoom
, EXC_WIN2_PAGEZOOM_DEF
);
386 maData
.mnCurrentZoom
= maData
.mbPageMode
? maData
.mnPageZoom
: maData
.mnNormalZoom
;
390 if ( GetBiff() == EXC_BIFF8
&& !GetDoc().IsDefaultTabBgColor(nScTab
) )
392 XclExpPalette
& rPal
= GetPalette();
393 maData
.maTabBgColor
= GetDoc().GetTabBgColor(nScTab
);
394 maData
.mnTabBgColorId
= rPal
.InsertColor(maData
.maTabBgColor
, EXC_COLOR_TABBG
, EXC_COLOR_NOTABBG
);
398 void XclExpTabViewSettings::Save( XclExpStream
& rStrm
)
400 WriteWindow2( rStrm
);
403 WriteSelection( rStrm
, EXC_PANE_TOPLEFT
);
404 WriteSelection( rStrm
, EXC_PANE_TOPRIGHT
);
405 WriteSelection( rStrm
, EXC_PANE_BOTTOMLEFT
);
406 WriteSelection( rStrm
, EXC_PANE_BOTTOMRIGHT
);
407 WriteTabBgColor( rStrm
);
410 static void lcl_WriteSelection( XclExpXmlStream
& rStrm
, const XclTabViewData
& rData
, sal_uInt8 nPane
)
412 if( rData
.HasPane( nPane
) )
413 XclExpSelection( rData
, nPane
).SaveXml( rStrm
);
416 static OString
lcl_GetZoom( sal_uInt16 nZoom
)
419 return OString::valueOf( (sal_Int32
)nZoom
);
420 return OString( "100" );
423 void XclExpTabViewSettings::SaveXml( XclExpXmlStream
& rStrm
)
425 sax_fastparser::FSHelperPtr
& rWorksheet
= rStrm
.GetCurrentStream();
426 rWorksheet
->startElement( XML_sheetViews
, FSEND
);
427 rWorksheet
->startElement( XML_sheetView
,
428 XML_windowProtection
, XclXmlUtils::ToPsz( maData
.mbFrozenPanes
),
429 XML_showFormulas
, XclXmlUtils::ToPsz( maData
.mbShowFormulas
),
430 XML_showGridLines
, XclXmlUtils::ToPsz( maData
.mbShowGrid
),
431 XML_showRowColHeaders
, XclXmlUtils::ToPsz( maData
.mbShowHeadings
),
432 XML_showZeros
, XclXmlUtils::ToPsz( maData
.mbShowZeros
),
433 XML_rightToLeft
, XclXmlUtils::ToPsz( maData
.mbMirrored
),
434 XML_tabSelected
, XclXmlUtils::ToPsz( maData
.mbSelected
),
435 // OOXTODO: XML_showRuler,
436 XML_showOutlineSymbols
, XclXmlUtils::ToPsz( maData
.mbShowOutline
),
437 XML_defaultGridColor
, mnGridColorId
== XclExpPalette::GetColorIdFromIndex( EXC_COLOR_WINDOWTEXT
) ? "true" : "false",
438 // OOXTODO: XML_showWhiteSpace,
439 XML_view
, maData
.mbPageMode
? "pageBreakPreview" : "normal", // OOXTODO: pageLayout
440 XML_topLeftCell
, XclXmlUtils::ToOString( maData
.maFirstXclPos
).getStr(),
441 XML_colorId
, OString::valueOf( (sal_Int32
) rStrm
.GetRoot().GetPalette().GetColorIndex( mnGridColorId
) ).getStr(),
442 XML_zoomScale
, lcl_GetZoom( maData
.mnCurrentZoom
).getStr(),
443 XML_zoomScaleNormal
, lcl_GetZoom( maData
.mnNormalZoom
).getStr(),
444 // OOXTODO: XML_zoomScaleSheetLayoutView,
445 XML_zoomScalePageLayoutView
, lcl_GetZoom( maData
.mnPageZoom
).getStr(),
446 XML_workbookViewId
, "0", // OOXTODO? 0-based index of document(xl/workbook.xml)/workbook/bookviews/workbookView
447 // should always be 0, as we only generate 1 such element.
449 if( maData
.IsSplit() )
451 XclExpPane
aPane( maData
);
452 aPane
.SaveXml( rStrm
);
454 lcl_WriteSelection( rStrm
, maData
, EXC_PANE_TOPLEFT
);
455 lcl_WriteSelection( rStrm
, maData
, EXC_PANE_TOPRIGHT
);
456 lcl_WriteSelection( rStrm
, maData
, EXC_PANE_BOTTOMLEFT
);
457 lcl_WriteSelection( rStrm
, maData
, EXC_PANE_BOTTOMRIGHT
);
458 rWorksheet
->endElement( XML_sheetView
);
459 // OOXTODO: XML_extLst
460 rWorksheet
->endElement( XML_sheetViews
);
463 // private --------------------------------------------------------------------
465 void XclExpTabViewSettings::CreateSelectionData( sal_uInt8 nPane
,
466 const ScAddress
& rCursor
, const ScRangeList
& rSelection
)
468 if( maData
.HasPane( nPane
) )
470 XclSelectionData
& rSelData
= maData
.CreateSelectionData( nPane
);
472 // first step: use top-left visible cell as cursor
473 rSelData
.maXclCursor
.mnCol
= ((nPane
== EXC_PANE_TOPLEFT
) || (nPane
== EXC_PANE_BOTTOMLEFT
)) ?
474 maData
.maFirstXclPos
.mnCol
: maData
.maSecondXclPos
.mnCol
;
475 rSelData
.maXclCursor
.mnRow
= ((nPane
== EXC_PANE_TOPLEFT
) || (nPane
== EXC_PANE_TOPRIGHT
)) ?
476 maData
.maFirstXclPos
.mnRow
: maData
.maSecondXclPos
.mnRow
;
478 // second step, active pane: create actual selection data with current cursor position
479 if( nPane
== maData
.mnActivePane
)
481 XclExpAddressConverter
& rAddrConv
= GetAddressConverter();
482 // cursor position (keep top-left pane position from above, if rCursor is invalid)
483 if( (rCursor
.Col() >= 0) && (rCursor
.Row() >= 0) )
484 rSelData
.maXclCursor
= rAddrConv
.CreateValidAddress( rCursor
, false );
486 rAddrConv
.ConvertRangeList( rSelData
.maXclSelection
, rSelection
, false );
491 void XclExpTabViewSettings::WriteWindow2( XclExpStream
& rStrm
) const
493 // #i43553# GCC 3.3 parse error
494 // XclExpWindow2( GetRoot(), maData, mnGridColorId ).Save( rStrm );
495 XclExpWindow2
aWindow2( GetRoot(), maData
, mnGridColorId
);
496 aWindow2
.Save( rStrm
);
499 void XclExpTabViewSettings::WriteScl( XclExpStream
& rStrm
) const
501 if( maData
.mnCurrentZoom
!= 0 )
502 XclExpScl( maData
.mnCurrentZoom
).Save( rStrm
);
505 void XclExpTabViewSettings::WritePane( XclExpStream
& rStrm
) const
507 if( maData
.IsSplit() )
508 // #i43553# GCC 3.3 parse error
509 // XclExpPane( GetRoot(), maData ).Save( rStrm );
511 XclExpPane
aPane( maData
);
516 void XclExpTabViewSettings::WriteSelection( XclExpStream
& rStrm
, sal_uInt8 nPane
) const
518 if( maData
.HasPane( nPane
) )
519 XclExpSelection( maData
, nPane
).Save( rStrm
);
522 void XclExpTabViewSettings::WriteTabBgColor( XclExpStream
& rStrm
) const
524 if ( !maData
.IsDefaultTabBgColor() )
525 XclExpTabBgColor( maData
).Save( rStrm
);
527 // ============================================================================
529 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */