1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #include "oox/drawingml/chart/axiscontext.hxx" 25 26 #include "oox/drawingml/shapepropertiescontext.hxx" 27 #include "oox/drawingml/textbodycontext.hxx" 28 #include "oox/drawingml/chart/axismodel.hxx" 29 #include "oox/drawingml/chart/titlecontext.hxx" 30 31 namespace oox { 32 namespace drawingml { 33 namespace chart { 34 35 // ============================================================================ 36 37 using ::oox::core::ContextHandlerRef; 38 using ::oox::core::ContextHandler2Helper; 39 using ::rtl::OUString; 40 41 // ============================================================================ 42 43 AxisDispUnitsContext::AxisDispUnitsContext( ContextHandler2Helper& rParent, AxisDispUnitsModel& rModel ) : 44 ContextBase< AxisDispUnitsModel >( rParent, rModel ) 45 { 46 } 47 48 AxisDispUnitsContext::~AxisDispUnitsContext() 49 { 50 } 51 52 ContextHandlerRef AxisDispUnitsContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) 53 { 54 switch( getCurrentElement() ) 55 { 56 case C_TOKEN( dispUnits ): 57 switch( nElement ) 58 { 59 case C_TOKEN( builtInUnit ): 60 mrModel.mnBuiltInUnit = rAttribs.getToken( XML_val, XML_thousands ); 61 return 0; 62 case C_TOKEN( custUnit ): 63 mrModel.mfCustomUnit = rAttribs.getDouble( XML_val, 0.0 ); 64 return 0; 65 case C_TOKEN( dispUnitsLbl ): 66 return this; 67 } 68 break; 69 70 case C_TOKEN( dispUnitsLbl ): 71 switch( nElement ) 72 { 73 case C_TOKEN( layout ): 74 return new LayoutContext( *this, mrModel.mxLayout.create() ); 75 case C_TOKEN( spPr ): 76 return new ShapePropertiesContext( *this, mrModel.mxShapeProp.create() ); 77 case C_TOKEN( tx ): 78 return new TextContext( *this, mrModel.mxText.create() ); 79 case C_TOKEN( txPr ): 80 return new TextBodyContext( *this, mrModel.mxTextProp.create() ); 81 } 82 break; 83 } 84 return 0; 85 } 86 87 // ============================================================================ 88 89 AxisContextBase::AxisContextBase( ContextHandler2Helper& rParent, AxisModel& rModel ) : 90 ContextBase< AxisModel >( rParent, rModel ) 91 { 92 } 93 94 AxisContextBase::~AxisContextBase() 95 { 96 } 97 98 ContextHandlerRef AxisContextBase::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) 99 { 100 switch( getCurrentElement() ) 101 { 102 case C_TOKEN( catAx ): 103 case C_TOKEN( dateAx ): 104 case C_TOKEN( serAx ): 105 case C_TOKEN( valAx ): 106 switch( nElement ) 107 { 108 case C_TOKEN( axId ): 109 mrModel.mnAxisId = rAttribs.getInteger( XML_val, -1 ); 110 return 0; 111 case C_TOKEN( crossAx ): 112 mrModel.mnCrossAxisId = rAttribs.getInteger( XML_val, -1 ); 113 return 0; 114 case C_TOKEN( crosses ): 115 mrModel.mnCrossMode = rAttribs.getToken( XML_val, XML_autoZero ); 116 return 0; 117 case C_TOKEN( crossesAt ): 118 mrModel.mofCrossesAt = rAttribs.getDouble( XML_val, 0.0 ); 119 return 0; 120 case C_TOKEN( delete ): 121 // default is 'false', not 'true' as specified 122 mrModel.mbDeleted = rAttribs.getBool( XML_val, false ); 123 return 0; 124 case C_TOKEN( majorGridlines ): 125 return new ShapePrWrapperContext( *this, mrModel.mxMajorGridLines.create() ); 126 case C_TOKEN( majorTickMark ): 127 // default is 'out', not 'cross' as specified 128 mrModel.mnMajorTickMark = rAttribs.getToken( XML_val, XML_out ); 129 return 0; 130 case C_TOKEN( minorGridlines ): 131 return new ShapePrWrapperContext( *this, mrModel.mxMinorGridLines.create() ); 132 case C_TOKEN( minorTickMark ): 133 // default is 'none', not 'cross' as specified 134 mrModel.mnMinorTickMark = rAttribs.getToken( XML_val, XML_none ); 135 return 0; 136 case C_TOKEN( numFmt ): 137 mrModel.maNumberFormat.setAttributes( rAttribs ); 138 return 0; 139 case C_TOKEN( scaling ): 140 return this; 141 case C_TOKEN( spPr ): 142 return new ShapePropertiesContext( *this, mrModel.mxShapeProp.create() ); 143 case C_TOKEN( tickLblPos ): 144 mrModel.mnTickLabelPos = rAttribs.getToken( XML_val, XML_nextTo ); 145 return 0; 146 case C_TOKEN( title ): 147 return new TitleContext( *this, mrModel.mxTitle.create() ); 148 case C_TOKEN( txPr ): 149 return new TextBodyContext( *this, mrModel.mxTextProp.create() ); 150 } 151 break; 152 153 case C_TOKEN( scaling ): 154 switch( nElement ) 155 { 156 case C_TOKEN( logBase ): 157 mrModel.mofLogBase = rAttribs.getDouble( XML_val, 0.0 ); 158 return 0; 159 case C_TOKEN( max ): 160 mrModel.mofMax = rAttribs.getDouble( XML_val, 0.0 ); 161 return 0; 162 case C_TOKEN( min ): 163 mrModel.mofMin = rAttribs.getDouble( XML_val, 0.0 ); 164 return 0; 165 case C_TOKEN( orientation ): 166 mrModel.mnOrientation = rAttribs.getToken( XML_val, XML_minMax ); 167 return 0; 168 } 169 break; 170 } 171 return 0; 172 } 173 174 // ============================================================================ 175 176 CatAxisContext::CatAxisContext( ContextHandler2Helper& rParent, AxisModel& rModel ) : 177 AxisContextBase( rParent, rModel ) 178 { 179 } 180 181 CatAxisContext::~CatAxisContext() 182 { 183 } 184 185 ContextHandlerRef CatAxisContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) 186 { 187 if( isRootElement() ) switch( nElement ) 188 { 189 case C_TOKEN( auto ): 190 // default is 'false', not 'true' as specified 191 mrModel.mbAuto = rAttribs.getBool( XML_val, false ); 192 return 0; 193 case C_TOKEN( axPos ): 194 mrModel.mnAxisPos = rAttribs.getToken( XML_val, XML_TOKEN_INVALID ); 195 return 0; 196 case C_TOKEN( lblAlgn ): 197 mrModel.mnLabelAlign = rAttribs.getToken( XML_val, XML_ctr ); 198 return 0; 199 case C_TOKEN( lblOffset ): 200 mrModel.mnLabelOffset = rAttribs.getInteger( XML_val, 100 ); 201 return 0; 202 case C_TOKEN( noMultiLvlLbl ): 203 // default is 'false', not 'true' as specified 204 mrModel.mbNoMultiLevel = rAttribs.getBool( XML_val, false ); 205 return 0; 206 case C_TOKEN( tickLblSkip ): 207 mrModel.mnTickLabelSkip = rAttribs.getInteger( XML_val, 0 ); 208 return 0; 209 case C_TOKEN( tickMarkSkip ): 210 mrModel.mnTickMarkSkip = rAttribs.getInteger( XML_val, 0 ); 211 return 0; 212 } 213 return AxisContextBase::onCreateContext( nElement, rAttribs ); 214 } 215 216 // ============================================================================ 217 218 DateAxisContext::DateAxisContext( ContextHandler2Helper& rParent, AxisModel& rModel ) : 219 AxisContextBase( rParent, rModel ) 220 { 221 } 222 223 DateAxisContext::~DateAxisContext() 224 { 225 } 226 227 ContextHandlerRef DateAxisContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) 228 { 229 if( isRootElement() ) switch( nElement ) 230 { 231 case C_TOKEN( auto ): 232 // default is 'false', not 'true' as specified 233 mrModel.mbAuto = rAttribs.getBool( XML_val, false ); 234 return 0; 235 case C_TOKEN( baseTimeUnit ): 236 mrModel.monBaseTimeUnit = rAttribs.getToken( XML_val, XML_days ); 237 return 0; 238 case C_TOKEN( lblOffset ): 239 mrModel.mnLabelOffset = rAttribs.getInteger( XML_val, 100 ); 240 return 0; 241 case C_TOKEN( majorTimeUnit ): 242 mrModel.mnMajorTimeUnit = rAttribs.getToken( XML_val, XML_days ); 243 return 0; 244 case C_TOKEN( majorUnit ): 245 mrModel.mofMajorUnit = rAttribs.getDouble( XML_val, 0.0 ); 246 return 0; 247 case C_TOKEN( minorTimeUnit ): 248 mrModel.mnMinorTimeUnit = rAttribs.getToken( XML_val, XML_days ); 249 return 0; 250 case C_TOKEN( minorUnit ): 251 mrModel.mofMinorUnit = rAttribs.getDouble( XML_val, 0.0 ); 252 return 0; 253 } 254 return AxisContextBase::onCreateContext( nElement, rAttribs ); 255 } 256 257 // ============================================================================ 258 259 SerAxisContext::SerAxisContext( ContextHandler2Helper& rParent, AxisModel& rModel ) : 260 AxisContextBase( rParent, rModel ) 261 { 262 } 263 264 SerAxisContext::~SerAxisContext() 265 { 266 } 267 268 ContextHandlerRef SerAxisContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) 269 { 270 if( isRootElement() ) switch( nElement ) 271 { 272 case C_TOKEN( tickLblSkip ): 273 mrModel.mnTickLabelSkip = rAttribs.getInteger( XML_val, 0 ); 274 return 0; 275 case C_TOKEN( tickMarkSkip ): 276 mrModel.mnTickMarkSkip = rAttribs.getInteger( XML_val, 0 ); 277 return 0; 278 } 279 return AxisContextBase::onCreateContext( nElement, rAttribs ); 280 } 281 282 // ============================================================================ 283 284 ValAxisContext::ValAxisContext( ContextHandler2Helper& rParent, AxisModel& rModel ) : 285 AxisContextBase( rParent, rModel ) 286 { 287 } 288 289 ValAxisContext::~ValAxisContext() 290 { 291 } 292 293 ContextHandlerRef ValAxisContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) 294 { 295 if( isRootElement() ) switch( nElement ) 296 { 297 case C_TOKEN( crossBetween ): 298 mrModel.mnCrossBetween = rAttribs.getToken( XML_val, XML_between ); 299 return 0; 300 case C_TOKEN( dispUnits ): 301 return new AxisDispUnitsContext( *this, mrModel.mxDispUnits.create() ); 302 case C_TOKEN( majorUnit ): 303 mrModel.mofMajorUnit = rAttribs.getDouble( XML_val, 0.0 ); 304 return 0; 305 case C_TOKEN( minorUnit ): 306 mrModel.mofMinorUnit = rAttribs.getDouble( XML_val, 0.0 ); 307 return 0; 308 } 309 return AxisContextBase::onCreateContext( nElement, rAttribs ); 310 } 311 312 // ============================================================================ 313 314 } // namespace chart 315 } // namespace drawingml 316 } // namespace oox 317