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 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_svx.hxx" 26 27 // include --------------------------------------------------------------- 28 #include <tools/stream.hxx> 29 #ifndef __SBX_SBXVARIABLE_HXX 30 #include <basic/sbxvar.hxx> 31 #endif 32 #if defined UNX && !defined LINUX 33 #include <wchar.h> 34 #endif 35 #include <rtl/math.hxx> 36 #include <unotools/intlwrapper.hxx> 37 #include <com/sun/star/chart/ChartAxisArrangeOrderType.hpp> 38 39 #include <stdio.h> 40 #include <float.h> 41 #include <rtl/math.hxx> 42 43 #include "svx/chrtitem.hxx" 44 45 using namespace ::rtl; 46 using namespace ::com::sun::star; 47 // ----------------------------------------------------------------------- 48 49 TYPEINIT1_FACTORY(SvxChartStyleItem, SfxEnumItem, new SvxChartStyleItem(CHSTYLE_2D_LINE, 0)); 50 TYPEINIT1(SvxChartDataDescrItem, SfxEnumItem); 51 TYPEINIT1(SvxChartTextOrderItem, SfxEnumItem); 52 TYPEINIT1(SvxChartTextOrientItem, SfxEnumItem); 53 TYPEINIT1(SvxChartIndicateItem, SfxEnumItem); 54 TYPEINIT1(SvxChartKindErrorItem, SfxEnumItem); 55 TYPEINIT1(SvxChartRegressItem, SfxEnumItem); 56 TYPEINIT1_FACTORY(SvxDoubleItem, SfxPoolItem, new SvxDoubleItem(0.0, 0)); 57 58 /************************************************************************* 59 |* 60 |* SvxChartStyleItem 61 |* 62 *************************************************************************/ 63 64 SvxChartStyleItem::SvxChartStyleItem(SvxChartStyle eStyle, sal_uInt16 nId) : 65 SfxEnumItem(nId, (sal_uInt16)eStyle) 66 { 67 } 68 69 // ----------------------------------------------------------------------- 70 71 SvxChartStyleItem::SvxChartStyleItem(SvStream& rIn, sal_uInt16 nId) : 72 SfxEnumItem(nId, rIn) 73 { 74 } 75 76 // ----------------------------------------------------------------------- 77 78 SfxPoolItem* SvxChartStyleItem::Clone(SfxItemPool* /*pPool*/) const 79 { 80 return new SvxChartStyleItem(*this); 81 } 82 83 // ----------------------------------------------------------------------- 84 85 SfxPoolItem* SvxChartStyleItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const 86 { 87 return new SvxChartStyleItem(rIn, Which()); 88 } 89 90 /************************************************************************* 91 |* 92 |* SvxChartDataDescrItem 93 |* 94 *************************************************************************/ 95 96 SvxChartDataDescrItem::SvxChartDataDescrItem(SvxChartDataDescr eDataDescr, 97 sal_uInt16 nId) : 98 SfxEnumItem(nId, (sal_uInt16)eDataDescr) 99 { 100 } 101 102 // ----------------------------------------------------------------------- 103 104 SvxChartDataDescrItem::SvxChartDataDescrItem(SvStream& rIn, sal_uInt16 nId) : 105 SfxEnumItem(nId, rIn) 106 { 107 } 108 109 // ----------------------------------------------------------------------- 110 111 SfxPoolItem* SvxChartDataDescrItem::Clone(SfxItemPool* /*pPool*/) const 112 { 113 return new SvxChartDataDescrItem(*this); 114 } 115 116 // ----------------------------------------------------------------------- 117 118 SfxPoolItem* SvxChartDataDescrItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const 119 { 120 return new SvxChartDataDescrItem(rIn, Which()); 121 } 122 123 /************************************************************************* 124 |* 125 |* SvxChartTextOrderItem 126 |* 127 *************************************************************************/ 128 129 SvxChartTextOrderItem::SvxChartTextOrderItem(SvxChartTextOrder eOrder, 130 sal_uInt16 nId) : 131 SfxEnumItem(nId, (sal_uInt16)eOrder) 132 { 133 } 134 135 // ----------------------------------------------------------------------- 136 137 SvxChartTextOrderItem::SvxChartTextOrderItem(SvStream& rIn, sal_uInt16 nId) : 138 SfxEnumItem(nId, rIn) 139 { 140 } 141 142 // ----------------------------------------------------------------------- 143 144 SfxPoolItem* SvxChartTextOrderItem::Clone(SfxItemPool* /*pPool*/) const 145 { 146 return new SvxChartTextOrderItem(*this); 147 } 148 149 // ----------------------------------------------------------------------- 150 151 SfxPoolItem* SvxChartTextOrderItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const 152 { 153 return new SvxChartTextOrderItem(rIn, Which()); 154 } 155 156 // ----------------------------------------------------------------------- 157 158 sal_Bool SvxChartTextOrderItem::QueryValue( ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const 159 { 160 // the order of the two enums is not equal, so a mapping is required 161 ::com::sun::star::chart::ChartAxisArrangeOrderType eAO; 162 SvxChartTextOrder eOrder( GetValue()); 163 164 switch( eOrder ) 165 { 166 case CHTXTORDER_SIDEBYSIDE: 167 eAO = ::com::sun::star::chart::ChartAxisArrangeOrderType_SIDE_BY_SIDE; break; 168 case CHTXTORDER_UPDOWN: 169 eAO = ::com::sun::star::chart::ChartAxisArrangeOrderType_STAGGER_ODD; break; 170 case CHTXTORDER_DOWNUP: 171 eAO = ::com::sun::star::chart::ChartAxisArrangeOrderType_STAGGER_EVEN; break; 172 case CHTXTORDER_AUTO: 173 eAO = ::com::sun::star::chart::ChartAxisArrangeOrderType_AUTO; break; 174 } 175 176 rVal <<= eAO; 177 178 return sal_True; 179 } 180 181 // ----------------------------------------------------------------------- 182 183 sal_Bool SvxChartTextOrderItem::PutValue( const ::com::sun::star::uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) 184 { 185 // the order of the two enums is not equal, so a mapping is required 186 ::com::sun::star::chart::ChartAxisArrangeOrderType eAO; 187 SvxChartTextOrder eOrder; 188 189 if(!(rVal >>= eAO)) 190 { 191 // also try an int (for Basic) 192 sal_Int32 nAO = 0; 193 if(!(rVal >>= nAO)) 194 return sal_False; 195 eAO = static_cast< ::com::sun::star::chart::ChartAxisArrangeOrderType >( nAO ); 196 } 197 198 switch( eAO ) 199 { 200 case ::com::sun::star::chart::ChartAxisArrangeOrderType_SIDE_BY_SIDE: 201 eOrder = CHTXTORDER_SIDEBYSIDE; break; 202 case ::com::sun::star::chart::ChartAxisArrangeOrderType_STAGGER_ODD: 203 eOrder = CHTXTORDER_UPDOWN; break; 204 case ::com::sun::star::chart::ChartAxisArrangeOrderType_STAGGER_EVEN: 205 eOrder = CHTXTORDER_DOWNUP; break; 206 case ::com::sun::star::chart::ChartAxisArrangeOrderType_AUTO: 207 eOrder = CHTXTORDER_AUTO; break; 208 default: 209 return sal_False; 210 } 211 212 SetValue( (sal_uInt16)eOrder ); 213 214 return sal_True; 215 } 216 217 /************************************************************************* 218 |* 219 |* SvxChartTextOrientItem 220 |* 221 *************************************************************************/ 222 223 SvxChartTextOrientItem::SvxChartTextOrientItem(SvxChartTextOrient eOrient, 224 sal_uInt16 nId) : 225 SfxEnumItem(nId, (sal_uInt16)eOrient) 226 { 227 } 228 229 // ----------------------------------------------------------------------- 230 231 SvxChartTextOrientItem::SvxChartTextOrientItem(SvStream& rIn, sal_uInt16 nId) : 232 SfxEnumItem(nId, rIn) 233 { 234 } 235 236 // ----------------------------------------------------------------------- 237 238 SfxPoolItem* SvxChartTextOrientItem::Clone(SfxItemPool* /*pPool*/) const 239 { 240 return new SvxChartTextOrientItem(*this); 241 } 242 243 // ----------------------------------------------------------------------- 244 245 SfxPoolItem* SvxChartTextOrientItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const 246 { 247 return new SvxChartTextOrientItem(rIn, Which()); 248 } 249 250 /************************************************************************* 251 |* 252 |* SvxDoubleItem 253 |* 254 *************************************************************************/ 255 256 SvxDoubleItem::SvxDoubleItem(double fValue, sal_uInt16 nId) : 257 SfxPoolItem(nId), 258 fVal(fValue) 259 { 260 } 261 262 // ----------------------------------------------------------------------- 263 264 SvxDoubleItem::SvxDoubleItem(SvStream& rIn, sal_uInt16 nId) : 265 SfxPoolItem(nId) 266 { 267 rIn >> fVal; 268 } 269 270 // ----------------------------------------------------------------------- 271 272 SvxDoubleItem::SvxDoubleItem(const SvxDoubleItem& rItem) : 273 SfxPoolItem(rItem), 274 fVal(rItem.fVal) 275 { 276 } 277 278 // ----------------------------------------------------------------------- 279 280 XubString SvxDoubleItem::GetValueText() const 281 { 282 rtl::OString aOStr( rtl::math::doubleToString( fVal, rtl_math_StringFormat_E, 4, '.', false ) ); 283 return String( aOStr.getStr(), (sal_uInt16)aOStr.getLength() ); 284 } 285 286 // ----------------------------------------------------------------------- 287 288 SfxItemPresentation SvxDoubleItem::GetPresentation 289 ( SfxItemPresentation /*ePresentation*/, SfxMapUnit /*eCoreMetric*/, 290 SfxMapUnit /*ePresentationMetric*/, XubString& rText, 291 const IntlWrapper * pIntlWrapper) const 292 { 293 DBG_ASSERT( pIntlWrapper, "SvxDoubleItem::GetPresentation: no IntlWrapper" ); 294 if ( pIntlWrapper ) 295 { 296 rText = ::rtl::math::doubleToUString( fVal, rtl_math_StringFormat_E, 4, 297 pIntlWrapper->getLocaleData()->getNumDecimalSep().GetChar(0), true ); 298 } 299 else 300 rText = GetValueText(); 301 return SFX_ITEM_PRESENTATION_NAMELESS; 302 } 303 304 // ----------------------------------------------------------------------- 305 306 int SvxDoubleItem::operator == (const SfxPoolItem& rItem) const 307 { 308 return (((SvxDoubleItem&)rItem).fVal == fVal); 309 } 310 311 // ----------------------------------------------------------------------- 312 313 SfxPoolItem* SvxDoubleItem::Clone(SfxItemPool* /*pPool*/) const 314 { 315 return new SvxDoubleItem(*this); 316 } 317 318 // ----------------------------------------------------------------------- 319 320 SfxPoolItem* SvxDoubleItem::Create(SvStream& rIn, sal_uInt16 /*nVersion*/) const 321 { 322 double _fVal; 323 rIn >> _fVal; 324 return new SvxDoubleItem(_fVal, Which()); 325 } 326 327 // ----------------------------------------------------------------------- 328 329 SvStream& SvxDoubleItem::Store(SvStream& rOut, sal_uInt16 /*nItemVersion*/) const 330 { 331 rOut << fVal; 332 return rOut; 333 } 334 335 // ----------------------------------------------------------------------- 336 337 double SvxDoubleItem::GetMin() const 338 { 339 return DBL_MIN; 340 } 341 342 // ----------------------------------------------------------------------- 343 344 double SvxDoubleItem::GetMax() const 345 { 346 return DBL_MAX; 347 } 348 349 // ----------------------------------------------------------------------- 350 351 SfxFieldUnit SvxDoubleItem::GetUnit() const 352 { 353 return SFX_FUNIT_NONE; 354 } 355 356 357 358 359 // ----------------------------------------------------------------------- 360 sal_Bool SvxDoubleItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const 361 { 362 rVal <<= fVal; 363 return sal_True; 364 } 365 366 // ----------------------------------------------------------------------- 367 sal_Bool SvxDoubleItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) 368 { 369 return rVal >>= fVal; 370 } 371 372 373 374 /************************************************************************* 375 |* 376 |* SvxChartKindErrorItem 377 |* 378 *************************************************************************/ 379 380 SvxChartKindErrorItem::SvxChartKindErrorItem(SvxChartKindError eOrient, 381 sal_uInt16 nId) : 382 SfxEnumItem(nId, (sal_uInt16)eOrient) 383 { 384 } 385 386 // ----------------------------------------------------------------------- 387 388 SvxChartKindErrorItem::SvxChartKindErrorItem(SvStream& rIn, sal_uInt16 nId) : 389 SfxEnumItem(nId, rIn) 390 { 391 } 392 393 // ----------------------------------------------------------------------- 394 395 SfxPoolItem* SvxChartKindErrorItem::Clone(SfxItemPool* /*pPool*/) const 396 { 397 return new SvxChartKindErrorItem(*this); 398 } 399 400 // ----------------------------------------------------------------------- 401 402 SfxPoolItem* SvxChartKindErrorItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const 403 { 404 return new SvxChartKindErrorItem(rIn, Which()); 405 } 406 407 // ----------------------------------------------------------------------- 408 409 sal_uInt16 SvxChartKindErrorItem::GetVersion (sal_uInt16 nFileFormatVersion) const 410 { 411 return (nFileFormatVersion == SOFFICE_FILEFORMAT_31) 412 ? USHRT_MAX 413 : 0; 414 } 415 416 /************************************************************************* 417 |* 418 |* SvxChartIndicateItem 419 |* 420 *************************************************************************/ 421 422 SvxChartIndicateItem::SvxChartIndicateItem(SvxChartIndicate eOrient, 423 sal_uInt16 nId) : 424 SfxEnumItem(nId, (sal_uInt16)eOrient) 425 { 426 } 427 428 // ----------------------------------------------------------------------- 429 430 SvxChartIndicateItem::SvxChartIndicateItem(SvStream& rIn, sal_uInt16 nId) : 431 SfxEnumItem(nId, rIn) 432 { 433 } 434 435 // ----------------------------------------------------------------------- 436 437 SfxPoolItem* SvxChartIndicateItem::Clone(SfxItemPool* /*pPool*/) const 438 { 439 return new SvxChartIndicateItem(*this); 440 } 441 442 // ----------------------------------------------------------------------- 443 444 SfxPoolItem* SvxChartIndicateItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const 445 { 446 return new SvxChartIndicateItem(rIn, Which()); 447 } 448 449 // ----------------------------------------------------------------------- 450 451 sal_uInt16 SvxChartIndicateItem::GetVersion (sal_uInt16 nFileFormatVersion) const 452 { 453 return (nFileFormatVersion == SOFFICE_FILEFORMAT_31) 454 ? USHRT_MAX 455 : 0; 456 } 457 458 /************************************************************************* 459 |* 460 |* SvxChartRegressItem 461 |* 462 *************************************************************************/ 463 464 SvxChartRegressItem::SvxChartRegressItem(SvxChartRegress eOrient, 465 sal_uInt16 nId) : 466 SfxEnumItem(nId, (sal_uInt16)eOrient) 467 { 468 } 469 470 // ----------------------------------------------------------------------- 471 472 SvxChartRegressItem::SvxChartRegressItem(SvStream& rIn, sal_uInt16 nId) : 473 SfxEnumItem(nId, rIn) 474 { 475 } 476 477 // ----------------------------------------------------------------------- 478 479 SfxPoolItem* SvxChartRegressItem::Clone(SfxItemPool* /*pPool*/) const 480 { 481 return new SvxChartRegressItem(*this); 482 } 483 484 // ----------------------------------------------------------------------- 485 486 SfxPoolItem* SvxChartRegressItem::Create(SvStream& rIn, sal_uInt16 /*nVer*/) const 487 { 488 return new SvxChartRegressItem(rIn, Which()); 489 } 490 491 // ----------------------------------------------------------------------- 492 493 sal_uInt16 SvxChartRegressItem::GetVersion (sal_uInt16 nFileFormatVersion) const 494 { 495 return (nFileFormatVersion == SOFFICE_FILEFORMAT_31) 496 ? USHRT_MAX 497 : 0; 498 } 499 500 501