1 From 534eb41b5bb0b86382a262e7410700016d62a834 Mon Sep 17 00:00:00 2001
2 From: Jan Nieuwenhuizen <janneke@gnu.org>
3 Date: Tue, 21 Apr 2009 15:50:51 +0200
4 Subject: [PATCH] OOXML: eradicate SheetViewSettings::maSheetDatas vector. Fixes n#494603.
6 Keeping gratituous rData = maSheetData references and gratituous
7 blocks (eg ::importPane) to minimize maSheetDatas -> mxSheetData diff.
8 When this passes all tests etc., feel free to remove, rename and
11 oox/inc/oox/xls/viewsettings.hxx | 6 +---
12 oox/source/xls/viewsettings.cxx | 63 ++++++++++++-------------------------
13 2 files changed, 22 insertions(+), 47 deletions(-)
15 diff --git oox/inc/oox/xls/viewsettings.hxx oox/inc/oox/xls/viewsettings.hxx
16 index 8b9c604..750866b 100644
17 --- oox/inc/oox/xls/viewsettings.hxx
18 +++ oox/inc/oox/xls/viewsettings.hxx
19 @@ -146,11 +146,7 @@ public:
20 void finalizeImport();
23 - OoxSheetViewDataRef createSheetViewData();
26 - typedef RefVector< OoxSheetViewData > SheetViewDataVec;
27 - SheetViewDataVec maSheetDatas;
28 + OoxSheetViewDataRef mxSheetData;
31 // ============================================================================
32 diff --git oox/source/xls/viewsettings.cxx oox/source/xls/viewsettings.cxx
33 index e19fa0d..3d56af7 100644
34 --- oox/source/xls/viewsettings.cxx
35 +++ oox/source/xls/viewsettings.cxx
36 @@ -270,14 +270,18 @@ OoxSheetSelectionData& OoxSheetViewData::createSelectionData( sal_Int32 nPaneId
38 // ----------------------------------------------------------------------------
40 -SheetViewSettings::SheetViewSettings( const WorksheetHelper& rHelper ) :
41 - WorksheetHelper( rHelper )
42 +SheetViewSettings::SheetViewSettings( const WorksheetHelper& rHelper )
43 + : WorksheetHelper( rHelper )
44 + , mxSheetData( new OoxSheetViewData )
48 void SheetViewSettings::importSheetView( const AttributeList& rAttribs )
50 - OoxSheetViewData& rData = *createSheetViewData();
51 + /* Use rData and keep gratituous blocks (eg ::importPane) to
52 + minimize maSheetDatas -> mxSheetData diff. When this passes
53 + all tests etc., feel free to rename and reindent. */
54 + OoxSheetViewData& rData = *mxSheetData;
55 rData.maGridColor.setIndexed( rAttribs.getInteger( XML_colorId, OOX_COLOR_WINDOWTEXT ) );
56 rData.maFirstPos = getAddressConverter().createValidCellAddress( rAttribs.getString( XML_topLeftCell, OUString() ), getSheetIndex(), false );
57 rData.mnWorkbookViewId = rAttribs.getToken( XML_workbookViewId, 0 );
58 @@ -298,16 +302,14 @@ void SheetViewSettings::importSheetView( const AttributeList& rAttribs )
60 void SheetViewSettings::importTabColor( const AttributeList& rAttribs )
62 - OoxSheetViewData& rData = maSheetDatas.empty() ? *createSheetViewData() : *maSheetDatas.back();
63 + OoxSheetViewData& rData = *mxSheetData;
64 rData.maTabColor.importColor( rAttribs );
67 void SheetViewSettings::importPane( const AttributeList& rAttribs )
69 - OSL_ENSURE( !maSheetDatas.empty(), "SheetViewSettings::importPane - missing view data" );
70 - if( !maSheetDatas.empty() )
72 - OoxSheetViewData& rData = *maSheetDatas.back();
73 + OoxSheetViewData& rData = *mxSheetData;
74 rData.maSecondPos = getAddressConverter().createValidCellAddress( rAttribs.getString( XML_topLeftCell, OUString() ), getSheetIndex(), false );
75 rData.mnActivePaneId = rAttribs.getToken( XML_activePane, XML_topLeft );
76 rData.mnPaneState = rAttribs.getToken( XML_state, XML_split );
77 @@ -318,12 +320,10 @@ void SheetViewSettings::importPane( const AttributeList& rAttribs )
79 void SheetViewSettings::importSelection( const AttributeList& rAttribs )
81 - OSL_ENSURE( !maSheetDatas.empty(), "SheetViewSettings::importSelection - missing view data" );
82 - if( !maSheetDatas.empty() )
84 // pane this selection belongs to
85 sal_Int32 nPaneId = rAttribs.getToken( XML_pane, XML_topLeft );
86 - OoxSheetSelectionData& rSelData = maSheetDatas.back()->createSelectionData( nPaneId );
87 + OoxSheetSelectionData& rSelData = mxSheetData->createSelectionData( nPaneId );
89 rSelData.maActiveCell = getAddressConverter().createValidCellAddress( rAttribs.getString( XML_activeCell, OUString() ), getSheetIndex(), false );
90 rSelData.mnActiveCellId = rAttribs.getInteger( XML_activeCellId, 0 );
91 @@ -335,7 +335,7 @@ void SheetViewSettings::importSelection( const AttributeList& rAttribs )
93 void SheetViewSettings::importChartSheetView( const AttributeList& rAttribs )
95 - OoxSheetViewData& rData = *createSheetViewData();
96 + OoxSheetViewData& rData = *mxSheetData;
97 rData.mnWorkbookViewId = rAttribs.getToken( XML_workbookViewId, 0 );
98 rData.mnCurrentZoom = rAttribs.getInteger( XML_zoomScale, 100 );
99 rData.mbSelected = rAttribs.getBool( XML_tabSelected, false );
100 @@ -344,7 +344,7 @@ void SheetViewSettings::importChartSheetView( const AttributeList& rAttribs )
102 void SheetViewSettings::importSheetView( RecordInputStream& rStrm )
104 - OoxSheetViewData& rData = *createSheetViewData();
105 + OoxSheetViewData& rData = *mxSheetData;
108 BinAddress aFirstPos;
109 @@ -371,16 +371,14 @@ void SheetViewSettings::importSheetView( RecordInputStream& rStrm )
111 void SheetViewSettings::importTabColor( RecordInputStream& rStrm )
113 - OoxSheetViewData& rData = maSheetDatas.empty() ? *createSheetViewData() : *maSheetDatas.back();
114 + OoxSheetViewData& rData = *mxSheetData;
115 rData.maTabColor.importColor( rStrm );
118 void SheetViewSettings::importPane( RecordInputStream& rStrm )
120 - OSL_ENSURE( !maSheetDatas.empty(), "SheetViewSettings::importPane - missing view data" );
121 - if( !maSheetDatas.empty() )
123 - OoxSheetViewData& rData = *maSheetDatas.back();
124 + OoxSheetViewData& rData = *mxSheetData;
126 BinAddress aSecondPos;
127 sal_Int32 nActivePaneId;
128 @@ -395,12 +393,10 @@ void SheetViewSettings::importPane( RecordInputStream& rStrm )
130 void SheetViewSettings::importSelection( RecordInputStream& rStrm )
132 - OSL_ENSURE( !maSheetDatas.empty(), "SheetViewSettings::importSelection - missing view data" );
133 - if( !maSheetDatas.empty() )
135 // pane this selection belongs to
136 sal_Int32 nPaneId = rStrm.readInt32();
137 - OoxSheetSelectionData& rSelData = maSheetDatas.back()->createSelectionData( lclGetOoxPaneId( nPaneId, -1 ) );
138 + OoxSheetSelectionData& rSelData = mxSheetData->createSelectionData( lclGetOoxPaneId( nPaneId, -1 ) );
140 BinAddress aActiveCell;
141 rStrm >> aActiveCell >> rSelData.mnActiveCellId;
142 @@ -415,7 +411,7 @@ void SheetViewSettings::importSelection( RecordInputStream& rStrm )
144 void SheetViewSettings::importChartSheetView( RecordInputStream& rStrm )
146 - OoxSheetViewData& rData = *createSheetViewData();
147 + OoxSheetViewData& rData = *mxSheetData;
149 rStrm >> nFlags >> rData.mnCurrentZoom >> rData.mnWorkbookViewId;
151 @@ -425,8 +421,7 @@ void SheetViewSettings::importChartSheetView( RecordInputStream& rStrm )
153 void SheetViewSettings::importWindow2( BiffInputStream& rStrm )
155 - OSL_ENSURE( maSheetDatas.empty(), "SheetViewSettings::importWindow2 - multiple WINDOW2 records" );
156 - OoxSheetViewData& rData = *createSheetViewData();
157 + OoxSheetViewData& rData = *mxSheetData;
158 if( getBiff() == BIFF2 )
160 rData.mbShowFormulas = rStrm.readuInt8() != 0;
161 @@ -481,15 +476,13 @@ void SheetViewSettings::importWindow2( BiffInputStream& rStrm )
163 void SheetViewSettings::importPane( BiffInputStream& rStrm )
165 - OSL_ENSURE( !maSheetDatas.empty(), "SheetViewSettings::importPane - missing leading WINDOW2 record" );
166 - if( !maSheetDatas.empty() )
168 sal_uInt8 nActivePaneId;
169 sal_uInt16 nSplitX, nSplitY;
170 BinAddress aSecondPos;
171 rStrm >> nSplitX >> nSplitY >> aSecondPos >> nActivePaneId;
173 - OoxSheetViewData& rData = *maSheetDatas.back();
174 + OoxSheetViewData& rData = *mxSheetData;
175 rData.mfSplitX = nSplitX;
176 rData.mfSplitY = nSplitY;
177 rData.maSecondPos = getAddressConverter().createValidCellAddress( aSecondPos, getSheetIndex(), false );
178 @@ -499,25 +492,21 @@ void SheetViewSettings::importPane( BiffInputStream& rStrm )
180 void SheetViewSettings::importScl( BiffInputStream& rStrm )
182 - OSL_ENSURE( !maSheetDatas.empty(), "SheetViewSettings::importScl - missing leading WINDOW2 record" );
183 - if( !maSheetDatas.empty() )
185 sal_uInt16 nNum, nDenom;
186 rStrm >> nNum >> nDenom;
187 OSL_ENSURE( nDenom > 0, "SheetViewSettings::importScl - invalid denominator" );
189 - maSheetDatas.back()->mnCurrentZoom = getLimitedValue< sal_Int32, sal_uInt16 >( (nNum * 100) / nDenom, 10, 400 );
190 + mxSheetData->mnCurrentZoom = getLimitedValue< sal_Int32, sal_uInt16 >( (nNum * 100) / nDenom, 10, 400 );
194 void SheetViewSettings::importSelection( BiffInputStream& rStrm )
196 - OSL_ENSURE( !maSheetDatas.empty(), "SheetViewSettings::importPane - missing leading WINDOW2 record" );
197 - if( !maSheetDatas.empty() )
199 // pane this selection belongs to
200 sal_uInt8 nPaneId = rStrm.readuInt8();
201 - OoxSheetSelectionData& rSelData = maSheetDatas.back()->createSelectionData( lclGetOoxPaneId( nPaneId, -1 ) );
202 + OoxSheetSelectionData& rSelData = mxSheetData->createSelectionData( lclGetOoxPaneId( nPaneId, -1 ) );
204 BinAddress aActiveCell;
205 sal_uInt16 nActiveCellId;
206 @@ -534,8 +523,7 @@ void SheetViewSettings::importSelection( BiffInputStream& rStrm )
208 void SheetViewSettings::finalizeImport()
210 - // force creation of sheet view data to get the Excel defaults
211 - OoxSheetViewDataRef xData = maSheetDatas.empty() ? createSheetViewData() : maSheetDatas.front();
212 + OoxSheetViewDataRef xData = mxSheetData;
214 // #i59590# #158194# special handling for chart sheets (Excel ignores some settings in chart sheets)
215 if( getSheetType() == SHEETTYPE_CHARTSHEET )
216 @@ -658,15 +646,6 @@ void SheetViewSettings::finalizeImport()
217 getViewSettings().setSheetViewSettings( getSheetIndex(), xData, Any( aSheetProps.createPropertySequence() ) );
220 -// private --------------------------------------------------------------------
222 -OoxSheetViewDataRef SheetViewSettings::createSheetViewData()
224 - OoxSheetViewDataRef xData( new OoxSheetViewData );
225 - maSheetDatas.push_back( xData );
229 // ============================================================================
231 OoxWorkbookViewData::OoxWorkbookViewData() :