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 if( mxDxf
) 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;
154 case XLS_TOKEN( protection
): mxDxf
->importProtection( rAttribs
); break;
160 if( mxExtDxf
) switch( getCurrentElement() )
162 case XLS14_TOKEN( dxf
):
165 case XLS_TOKEN( font
): return new FontContext( *this, mxExtDxf
->createFont() );
166 case XLS_TOKEN( border
): return new BorderContext( *this, mxExtDxf
->createBorder() );
167 case XLS_TOKEN( fill
): return new FillContext( *this, mxExtDxf
->createFill() );
168 case XLS_TOKEN( numFmt
): mxExtDxf
->importNumFmt( rAttribs
); break;
175 StylesFragment::StylesFragment( const WorkbookHelper
& rHelper
, const OUString
& rFragmentPath
) :
176 WorkbookFragmentBase( rHelper
, rFragmentPath
)
180 ContextHandlerRef
StylesFragment::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
182 switch( getCurrentElement() )
184 case XML_ROOT_CONTEXT
:
185 if( nElement
== XLS_TOKEN( styleSheet
) ) return this;
188 case XLS_TOKEN( styleSheet
):
191 case XLS_TOKEN( colors
):
192 case XLS_TOKEN( numFmts
):
193 case XLS_TOKEN( fonts
):
194 case XLS_TOKEN( borders
):
195 case XLS_TOKEN( fills
):
196 case XLS_TOKEN( cellXfs
):
197 case XLS_TOKEN( cellStyleXfs
):
198 case XLS_TOKEN( dxfs
):
199 case XLS_TOKEN( cellStyles
): return this;
203 case XLS_TOKEN( colors
):
204 if( nElement
== XLS_TOKEN( indexedColors
) ) return new IndexedColorsContext( *this );
206 case XLS_TOKEN( numFmts
):
207 if( nElement
== XLS_TOKEN( numFmt
) ) getStyles().importNumFmt( rAttribs
);
209 case XLS_TOKEN( fonts
):
210 if( nElement
== XLS_TOKEN( font
) ) return new FontContext( *this, getStyles().createFont() );
212 case XLS_TOKEN( borders
):
213 if( nElement
== XLS_TOKEN( border
) ) return new BorderContext( *this, getStyles().createBorder() );
215 case XLS_TOKEN( fills
):
216 if( nElement
== XLS_TOKEN( fill
) ) return new FillContext( *this, getStyles().createFill() );
218 case XLS_TOKEN( cellXfs
):
219 if( nElement
== XLS_TOKEN( xf
) ) return new XfContext( *this, getStyles().createCellXf(), true );
221 case XLS_TOKEN( cellStyleXfs
):
222 if( nElement
== XLS_TOKEN( xf
) ) return new XfContext( *this, getStyles().createStyleXf(), false );
224 case XLS_TOKEN( dxfs
):
225 if( nElement
== XLS_TOKEN( dxf
) ) return new DxfContext( *this, getStyles().createDxf() );
227 case XLS_TOKEN( cellStyles
):
228 if( nElement
== XLS_TOKEN( cellStyle
) ) getStyles().importCellStyle( rAttribs
);
234 ContextHandlerRef
StylesFragment::onCreateRecordContext( sal_Int32 nRecId
, SequenceInputStream
& rStrm
)
236 switch( getCurrentElement() )
238 case XML_ROOT_CONTEXT
:
239 if( nRecId
== BIFF12_ID_STYLESHEET
) return this;
242 case BIFF12_ID_STYLESHEET
:
245 case BIFF12_ID_COLORS
:
246 case BIFF12_ID_NUMFMTS
:
247 case BIFF12_ID_FONTS
:
248 case BIFF12_ID_BORDERS
:
249 case BIFF12_ID_FILLS
:
250 case BIFF12_ID_CELLXFS
:
251 case BIFF12_ID_CELLSTYLEXFS
:
253 case BIFF12_ID_CELLSTYLES
: return this;
257 case BIFF12_ID_COLORS
:
258 if( nRecId
== BIFF12_ID_INDEXEDCOLORS
) return new IndexedColorsContext( *this );
260 case BIFF12_ID_NUMFMTS
:
261 if( nRecId
== BIFF12_ID_NUMFMT
) getStyles().importNumFmt( rStrm
);
263 case BIFF12_ID_FONTS
:
264 if( nRecId
== BIFF12_ID_FONT
) getStyles().createFont()->importFont( rStrm
);
266 case BIFF12_ID_BORDERS
:
267 if( nRecId
== BIFF12_ID_BORDER
) getStyles().createBorder()->importBorder( rStrm
);
269 case BIFF12_ID_FILLS
:
270 if( nRecId
== BIFF12_ID_FILL
) getStyles().createFill()->importFill( rStrm
);
272 case BIFF12_ID_CELLXFS
:
273 if( nRecId
== BIFF12_ID_XF
) getStyles().createCellXf()->importXf( rStrm
, true );
275 case BIFF12_ID_CELLSTYLEXFS
:
276 if( nRecId
== BIFF12_ID_XF
) getStyles().createStyleXf()->importXf( rStrm
, false );
279 if( nRecId
== BIFF12_ID_DXF
) getStyles().createDxf()->importDxf( rStrm
);
281 case BIFF12_ID_CELLSTYLES
:
282 if( nRecId
== BIFF12_ID_CELLSTYLE
) getStyles().importCellStyle( rStrm
);
288 const RecordInfo
* StylesFragment::getRecordInfos() const
290 static const RecordInfo spRecInfos
[] =
292 { BIFF12_ID_BORDERS
, BIFF12_ID_BORDERS
+ 1 },
293 { BIFF12_ID_CELLSTYLES
, BIFF12_ID_CELLSTYLES
+ 1 },
294 { BIFF12_ID_CELLSTYLEXFS
, BIFF12_ID_CELLSTYLEXFS
+ 1 },
295 { BIFF12_ID_CELLXFS
, BIFF12_ID_CELLXFS
+ 1 },
296 { BIFF12_ID_COLORS
, BIFF12_ID_COLORS
+ 1 },
297 { BIFF12_ID_DXFS
, BIFF12_ID_DXFS
+ 1 },
298 { BIFF12_ID_FILLS
, BIFF12_ID_FILLS
+ 1 },
299 { BIFF12_ID_FONTS
, BIFF12_ID_FONTS
+ 1 },
300 { BIFF12_ID_INDEXEDCOLORS
, BIFF12_ID_INDEXEDCOLORS
+ 1 },
301 { BIFF12_ID_MRUCOLORS
, BIFF12_ID_MRUCOLORS
+ 1 },
302 { BIFF12_ID_NUMFMTS
, BIFF12_ID_NUMFMTS
+ 1 },
303 { BIFF12_ID_STYLESHEET
, BIFF12_ID_STYLESHEET
+ 1 },
304 { BIFF12_ID_TABLESTYLES
, BIFF12_ID_TABLESTYLES
+ 1 },
310 void StylesFragment::finalizeImport()
312 getStyles().finalizeImport();
315 } // namespace oox::xls
317 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */