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 .
20 #include <stylesfragment.hxx>
21 #include <biffhelper.hxx>
23 #include <oox/helper/attributelist.hxx>
24 #include <oox/token/namespaces.hxx>
25 #include <oox/token/tokens.hxx>
29 using namespace ::oox::core
;
31 IndexedColorsContext::IndexedColorsContext( WorkbookFragmentBase
& rFragment
) :
32 WorkbookContextBase( rFragment
)
36 ContextHandlerRef
IndexedColorsContext::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
38 switch( getCurrentElement() )
40 case XLS_TOKEN( indexedColors
):
41 if( nElement
== XLS_TOKEN( rgbColor
) ) getStyles().importPaletteColor( rAttribs
);
47 ContextHandlerRef
IndexedColorsContext::onCreateRecordContext( sal_Int32 nRecId
, SequenceInputStream
& rStrm
)
49 switch( getCurrentElement() )
51 case BIFF12_ID_INDEXEDCOLORS
:
52 if( nRecId
== BIFF12_ID_RGBCOLOR
) getStyles().importPaletteColor( rStrm
);
58 ContextHandlerRef
FontContext::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
61 mxFont
->importAttribs( nElement
, rAttribs
);
65 void BorderContext::onStartElement( const AttributeList
& rAttribs
)
67 if( mxBorder
&& (getCurrentElement() == XLS_TOKEN( border
)) )
68 mxBorder
->importBorder( rAttribs
);
71 ContextHandlerRef
BorderContext::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
73 if( mxBorder
) switch( getCurrentElement() )
75 case XLS_TOKEN( border
):
76 mxBorder
->importStyle( nElement
, rAttribs
);
80 if( nElement
== XLS_TOKEN( color
) )
81 mxBorder
->importColor( getCurrentElement(), rAttribs
);
86 ContextHandlerRef
FillContext::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
88 if( mxFill
) switch( getCurrentElement() )
90 case XLS_TOKEN( fill
):
93 case XLS_TOKEN( patternFill
): mxFill
->importPatternFill( rAttribs
); return this;
94 case XLS_TOKEN( gradientFill
): mxFill
->importGradientFill( rAttribs
); return this;
97 case XLS_TOKEN( patternFill
):
100 case XLS_TOKEN( fgColor
): mxFill
->importFgColor( rAttribs
); break;
101 case XLS_TOKEN( bgColor
): mxFill
->importBgColor( rAttribs
); break;
104 case XLS_TOKEN( gradientFill
):
105 if( nElement
== XLS_TOKEN( stop
) )
107 mfGradPos
= rAttribs
.getDouble( XML_position
, -1.0 );
111 case XLS_TOKEN( stop
):
112 if( nElement
== XLS_TOKEN( color
) )
113 mxFill
->importColor( rAttribs
, mfGradPos
);
119 void XfContext::onStartElement( const AttributeList
& rAttribs
)
121 if( mxXf
&& (getCurrentElement() == XLS_TOKEN( xf
)) )
122 mxXf
->importXf( rAttribs
, mbCellXf
);
125 ContextHandlerRef
XfContext::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
127 if( mxXf
) switch( getCurrentElement() )
129 case XLS_TOKEN( xf
):
132 case XLS_TOKEN( alignment
): mxXf
->importAlignment( rAttribs
); break;
133 case XLS_TOKEN( protection
): mxXf
->importProtection( rAttribs
); break;
140 ContextHandlerRef
DxfContext::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
142 switch( getCurrentElement() )
144 case XLS_TOKEN( dxf
):
147 case XLS_TOKEN( font
): return new FontContext( *this, mxDxf
->createFont() );
148 case XLS_TOKEN( border
): return new BorderContext( *this, mxDxf
->createBorder() );
149 case XLS_TOKEN( fill
): return new FillContext( *this, mxDxf
->createFill() );
151 case XLS_TOKEN( numFmt
): mxDxf
->importNumFmt( rAttribs
); break;
153 case XLS_TOKEN( alignment
): mxDxf
->importAlignment( rAttribs
); break;
155 case XLS_TOKEN( protection
): mxDxf
->createProtection()->importProtection( rAttribs
); break;
159 case XLS14_TOKEN( dxf
):
162 case XLS_TOKEN( font
): return new FontContext( *this, mxDxf
->createFont() );
163 case XLS_TOKEN( border
): return new BorderContext( *this, mxDxf
->createBorder() );
164 case XLS_TOKEN( fill
): return new FillContext( *this, mxDxf
->createFill() );
165 case XLS_TOKEN( numFmt
): mxDxf
->importNumFmt( rAttribs
); break;
166 case XLS_TOKEN( protection
): mxDxf
->createProtection()->importProtection( rAttribs
); break;
173 StylesFragment::StylesFragment( const WorkbookHelper
& rHelper
, const OUString
& rFragmentPath
) :
174 WorkbookFragmentBase( rHelper
, rFragmentPath
)
178 ContextHandlerRef
StylesFragment::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
180 switch( getCurrentElement() )
182 case XML_ROOT_CONTEXT
:
183 if( nElement
== XLS_TOKEN( styleSheet
) ) return this;
186 case XLS_TOKEN( styleSheet
):
189 case XLS_TOKEN( colors
):
190 case XLS_TOKEN( numFmts
):
191 case XLS_TOKEN( fonts
):
192 case XLS_TOKEN( borders
):
193 case XLS_TOKEN( fills
):
194 case XLS_TOKEN( cellXfs
):
195 case XLS_TOKEN( cellStyleXfs
):
196 case XLS_TOKEN( dxfs
):
197 case XLS_TOKEN( cellStyles
): return this;
201 case XLS_TOKEN( colors
):
202 if( nElement
== XLS_TOKEN( indexedColors
) ) return new IndexedColorsContext( *this );
204 case XLS_TOKEN( numFmts
):
205 if( nElement
== XLS_TOKEN( numFmt
) ) getStyles().importNumFmt( rAttribs
);
207 case XLS_TOKEN( fonts
):
208 if( nElement
== XLS_TOKEN( font
) ) return new FontContext( *this, getStyles().createFont() );
210 case XLS_TOKEN( borders
):
211 if( nElement
== XLS_TOKEN( border
) ) return new BorderContext( *this, getStyles().createBorder() );
213 case XLS_TOKEN( fills
):
214 if( nElement
== XLS_TOKEN( fill
) ) return new FillContext( *this, getStyles().createFill() );
216 case XLS_TOKEN( cellXfs
):
217 if( nElement
== XLS_TOKEN( xf
) ) return new XfContext( *this, getStyles().createCellXf(), true );
219 case XLS_TOKEN( cellStyleXfs
):
220 if( nElement
== XLS_TOKEN( xf
) ) return new XfContext( *this, getStyles().createStyleXf(), false );
222 case XLS_TOKEN( dxfs
):
223 if( nElement
== XLS_TOKEN( dxf
) ) return new DxfContext( *this, getStyles().createDxf() );
225 case XLS_TOKEN( cellStyles
):
226 if( nElement
== XLS_TOKEN( cellStyle
) ) getStyles().importCellStyle( rAttribs
);
232 ContextHandlerRef
StylesFragment::onCreateRecordContext( sal_Int32 nRecId
, SequenceInputStream
& rStrm
)
234 switch( getCurrentElement() )
236 case XML_ROOT_CONTEXT
:
237 if( nRecId
== BIFF12_ID_STYLESHEET
) return this;
240 case BIFF12_ID_STYLESHEET
:
243 case BIFF12_ID_COLORS
:
244 case BIFF12_ID_NUMFMTS
:
245 case BIFF12_ID_FONTS
:
246 case BIFF12_ID_BORDERS
:
247 case BIFF12_ID_FILLS
:
248 case BIFF12_ID_CELLXFS
:
249 case BIFF12_ID_CELLSTYLEXFS
:
251 case BIFF12_ID_CELLSTYLES
: return this;
255 case BIFF12_ID_COLORS
:
256 if( nRecId
== BIFF12_ID_INDEXEDCOLORS
) return new IndexedColorsContext( *this );
258 case BIFF12_ID_NUMFMTS
:
259 if( nRecId
== BIFF12_ID_NUMFMT
) getStyles().importNumFmt( rStrm
);
261 case BIFF12_ID_FONTS
:
262 if( nRecId
== BIFF12_ID_FONT
) getStyles().createFont()->importFont( rStrm
);
264 case BIFF12_ID_BORDERS
:
265 if( nRecId
== BIFF12_ID_BORDER
) getStyles().createBorder()->importBorder( rStrm
);
267 case BIFF12_ID_FILLS
:
268 if( nRecId
== BIFF12_ID_FILL
) getStyles().createFill()->importFill( rStrm
);
270 case BIFF12_ID_CELLXFS
:
271 if( nRecId
== BIFF12_ID_XF
) getStyles().createCellXf()->importXf( rStrm
, true );
273 case BIFF12_ID_CELLSTYLEXFS
:
274 if( nRecId
== BIFF12_ID_XF
) getStyles().createStyleXf()->importXf( rStrm
, false );
277 if( nRecId
== BIFF12_ID_DXF
) getStyles().createDxf()->importDxf( rStrm
);
279 case BIFF12_ID_CELLSTYLES
:
280 if( nRecId
== BIFF12_ID_CELLSTYLE
) getStyles().importCellStyle( rStrm
);
286 const RecordInfo
* StylesFragment::getRecordInfos() const
288 static const RecordInfo spRecInfos
[] =
290 { BIFF12_ID_BORDERS
, BIFF12_ID_BORDERS
+ 1 },
291 { BIFF12_ID_CELLSTYLES
, BIFF12_ID_CELLSTYLES
+ 1 },
292 { BIFF12_ID_CELLSTYLEXFS
, BIFF12_ID_CELLSTYLEXFS
+ 1 },
293 { BIFF12_ID_CELLXFS
, BIFF12_ID_CELLXFS
+ 1 },
294 { BIFF12_ID_COLORS
, BIFF12_ID_COLORS
+ 1 },
295 { BIFF12_ID_DXFS
, BIFF12_ID_DXFS
+ 1 },
296 { BIFF12_ID_FILLS
, BIFF12_ID_FILLS
+ 1 },
297 { BIFF12_ID_FONTS
, BIFF12_ID_FONTS
+ 1 },
298 { BIFF12_ID_INDEXEDCOLORS
, BIFF12_ID_INDEXEDCOLORS
+ 1 },
299 { BIFF12_ID_MRUCOLORS
, BIFF12_ID_MRUCOLORS
+ 1 },
300 { BIFF12_ID_NUMFMTS
, BIFF12_ID_NUMFMTS
+ 1 },
301 { BIFF12_ID_STYLESHEET
, BIFF12_ID_STYLESHEET
+ 1 },
302 { BIFF12_ID_TABLESTYLES
, BIFF12_ID_TABLESTYLES
+ 1 },
308 void StylesFragment::finalizeImport()
310 getStyles().finalizeImport();
313 } // namespace oox::xls
315 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */