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 #ifndef SC_XECHART_HXX 25 #define SC_XECHART_HXX 26 27 #include <tools/gen.hxx> 28 #include "xerecord.hxx" 29 #include "xlchart.hxx" 30 #include "xlformula.hxx" 31 #include "xlstyle.hxx" 32 #include "xeroot.hxx" 33 #include "xestring.hxx" 34 35 class Size; 36 37 namespace com { namespace sun { namespace star { 38 namespace awt 39 { 40 struct Rectangle; 41 } 42 namespace frame 43 { 44 class XModel; 45 } 46 namespace chart 47 { 48 class XAxis; 49 } 50 namespace chart2 51 { 52 struct ScaleData; 53 class XChartDocument; 54 class XDiagram; 55 class XCoordinateSystem; 56 class XChartType; 57 class XDataSeries; 58 class XAxis; 59 class XTitle; 60 class XFormattedString; 61 class XRegressionCurve; 62 namespace data 63 { 64 class XDataSequence; 65 class XLabeledDataSequence; 66 } 67 } 68 } } } 69 70 // Common ===================================================================== 71 72 struct XclExpChRootData; 73 class XclExpChChart; 74 75 /** Base class for complex chart classes, provides access to other components 76 of the chart. 77 78 Keeps also track of future record levels and writes the needed future 79 records on demand. 80 */ 81 class XclExpChRoot : public XclExpRoot 82 { 83 public: 84 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument > XChartDocRef; 85 86 public: 87 explicit XclExpChRoot( const XclExpRoot& rRoot, XclExpChChart& rChartData ); 88 virtual ~XclExpChRoot(); 89 90 /** Returns this root instance - for code readability in derived classes. */ GetChRoot() const91 inline const XclExpChRoot& GetChRoot() const { return *this; } 92 /** Returns the API Chart document model. */ 93 XChartDocRef GetChartDocument() const; 94 /** Returns a reference to the parent chart data object. */ 95 XclExpChChart& GetChartData() const; 96 /** Returns chart type info for a unique chart type identifier. */ 97 const XclChTypeInfo& GetChartTypeInfo( XclChTypeId eType ) const; 98 /** Returns the first fitting chart type info for the passed service name. */ 99 const XclChTypeInfo& GetChartTypeInfo( const ::rtl::OUString& rServiceName ) const; 100 101 /** Returns an info struct about auto formatting for the passed object type. */ 102 const XclChFormatInfo& GetFormatInfo( XclChObjectType eObjType ) const; 103 104 /** Starts the API chart document conversion. Must be called once before all API conversion. */ 105 void InitConversion( XChartDocRef xChartDoc, const Rectangle& rChartRect ) const; 106 /** Finishes the API chart document conversion. Must be called once after all API conversion. */ 107 void FinishConversion() const; 108 109 /** Returns true, if the passed color equals to the specified system color. */ 110 bool IsSystemColor( const Color& rColor, sal_uInt16 nSysColorIdx ) const; 111 /** Sets a system color and the respective color identifier. */ 112 void SetSystemColor( Color& rColor, sal_uInt32& rnColorId, sal_uInt16 nSysColorIdx ) const; 113 114 /** Converts the passed horizontal coordinate from 1/100 mm to Excel chart units. */ 115 sal_Int32 CalcChartXFromHmm( sal_Int32 nPosX ) const; 116 /** Converts the passed vertical coordinate from 1/100 mm to Excel chart units. */ 117 sal_Int32 CalcChartYFromHmm( sal_Int32 nPosY ) const; 118 /** Converts the passed rectangle from 1/100 mm to Excel chart units. */ 119 XclChRectangle CalcChartRectFromHmm( const ::com::sun::star::awt::Rectangle& rRect ) const; 120 121 /** Converts the passed horizontal coordinate from a relative position to Excel chart units. */ 122 sal_Int32 CalcChartXFromRelative( double fPosX ) const; 123 /** Converts the passed vertical coordinate from a relative position to Excel chart units. */ 124 sal_Int32 CalcChartYFromRelative( double fPosY ) const; 125 126 /** Reads all line properties from the passed property set. */ 127 void ConvertLineFormat( 128 XclChLineFormat& rLineFmt, 129 const ScfPropertySet& rPropSet, 130 XclChPropertyMode ePropMode ) const; 131 /** Reads solid area properties from the passed property set. 132 @return true = object contains complex fill properties. */ 133 bool ConvertAreaFormat( 134 XclChAreaFormat& rAreaFmt, 135 const ScfPropertySet& rPropSet, 136 XclChPropertyMode ePropMode ) const; 137 /** Reads gradient or bitmap area properties from the passed property set. */ 138 void ConvertEscherFormat( 139 XclChEscherFormat& rEscherFmt, 140 XclChPicFormat& rPicFmt, 141 const ScfPropertySet& rPropSet, 142 XclChPropertyMode ePropMode ) const; 143 /** Reads font properties from the passed property set. */ 144 sal_uInt16 ConvertFont( 145 const ScfPropertySet& rPropSet, 146 sal_Int16 nScript ) const; 147 148 /** Reads the pie rotation property and returns the converted angle. */ 149 static sal_uInt16 ConvertPieRotation( const ScfPropertySet& rPropSet ); 150 151 protected: 152 /** Called from XclExpChGroupBase::Save, registers a new future record level. */ 153 void RegisterFutureRecBlock( const XclChFrBlock& rFrBlock ); 154 /** Called from XclExpChFutureRecordBase::Save, Initializes the current future record level. */ 155 void InitializeFutureRecBlock( XclExpStream& rStrm ); 156 /** Called from XclExpChGroupBase::Save, finalizes the current future record level. */ 157 void FinalizeFutureRecBlock( XclExpStream& rStrm ); 158 159 private: 160 typedef ScfRef< XclExpChRootData > XclExpChRootDataRef; 161 XclExpChRootDataRef mxChData; /// Reference to the root data object. 162 }; 163 164 // ---------------------------------------------------------------------------- 165 166 /** Base class for chart record groups. Provides helper functions to write sub records. 167 168 A chart record group consists of a header record, followed by a CHBEGIN 169 record, followed by group sub records, and finished with a CHEND record. 170 */ 171 class XclExpChGroupBase : public XclExpRecord, protected XclExpChRoot 172 { 173 public: 174 explicit XclExpChGroupBase( 175 const XclExpChRoot& rRoot, sal_uInt16 nFrType, 176 sal_uInt16 nRecId, sal_Size nRecSize = 0 ); 177 virtual ~XclExpChGroupBase(); 178 179 /** Saves the header record. Calls WriteSubRecords() to let derived classes write sub records. */ 180 virtual void Save( XclExpStream& rStrm ); 181 /** Derived classes return whether there are any records embedded in this group. */ 182 virtual bool HasSubRecords() const; 183 /** Derived classes implement writing any records embedded in this group. */ 184 virtual void WriteSubRecords( XclExpStream& rStrm ) = 0; 185 186 protected: 187 /** Sets context information for future record blocks. */ 188 void SetFutureRecordContext( sal_uInt16 nFrContext, 189 sal_uInt16 nFrValue1 = 0, sal_uInt16 nFrValue2 = 0 ); 190 191 private: 192 XclChFrBlock maFrBlock; /// Future records block settings. 193 }; 194 195 // ---------------------------------------------------------------------------- 196 197 /** Base class for chart future records. On saving, the record writes missing 198 CHFRBLOCKBEGIN records automatically. 199 */ 200 class XclExpChFutureRecordBase : public XclExpFutureRecord, protected XclExpChRoot 201 { 202 public: 203 explicit XclExpChFutureRecordBase( const XclExpChRoot& rRoot, 204 XclFutureRecType eRecType, sal_uInt16 nRecId, sal_Size nRecSize = 0 ); 205 206 /** Writes missing CHFRBLOCKBEGIN records and this record. */ 207 virtual void Save( XclExpStream& rStrm ); 208 }; 209 210 // Frame formatting =========================================================== 211 212 class XclExpChFramePos : public XclExpRecord 213 { 214 public: 215 explicit XclExpChFramePos( sal_uInt16 nTLMode, sal_uInt16 nBRMode ); 216 217 /** Returns read/write access to the frame position data. */ GetFramePosData()218 inline XclChFramePos& GetFramePosData() { return maData; } 219 220 private: 221 virtual void WriteBody( XclExpStream& rStrm ); 222 223 private: 224 XclChFramePos maData; /// Position of the frame. 225 }; 226 227 typedef ScfRef< XclExpChFramePos > XclExpChFramePosRef; 228 229 // ---------------------------------------------------------------------------- 230 231 class XclExpChLineFormat : public XclExpRecord 232 { 233 public: 234 explicit XclExpChLineFormat( const XclExpChRoot& rRoot ); 235 236 /** Converts line formatting properties from the passed property set. */ 237 void Convert( const XclExpChRoot& rRoot, 238 const ScfPropertySet& rPropSet, XclChObjectType eObjType ); 239 /** Sets or clears the automatic flag. */ SetAuto(bool bAuto)240 inline void SetAuto( bool bAuto ) { ::set_flag( maData.mnFlags, EXC_CHLINEFORMAT_AUTO, bAuto ); } 241 /** Sets flag to show or hide an axis. */ SetShowAxis(bool bShowAxis)242 inline void SetShowAxis( bool bShowAxis ) 243 { ::set_flag( maData.mnFlags, EXC_CHLINEFORMAT_SHOWAXIS, bShowAxis ); } 244 /** Sets the line format to the specified default type. */ 245 void SetDefault( XclChFrameType eDefFrameType ); 246 247 /** Returns true, if the line format is set to automatic. */ IsAuto() const248 inline bool IsAuto() const { return ::get_flag( maData.mnFlags, EXC_CHLINEFORMAT_AUTO ); } 249 /** Returns true, if the line style is set to something visible. */ HasLine() const250 inline bool HasLine() const { return maData.mnPattern != EXC_CHLINEFORMAT_NONE; } 251 /** Returns true, if the line contains default formatting according to the passed frame type. */ 252 bool IsDefault( XclChFrameType eDefFrameType ) const; 253 254 private: 255 virtual void WriteBody( XclExpStream& rStrm ); 256 257 private: 258 XclChLineFormat maData; /// Contents of the CHLINEFORMAT record. 259 sal_uInt32 mnColorId; /// Line color identifier. 260 }; 261 262 typedef ScfRef< XclExpChLineFormat > XclExpChLineFormatRef; 263 264 // ---------------------------------------------------------------------------- 265 266 class XclExpChAreaFormat : public XclExpRecord 267 { 268 public: 269 explicit XclExpChAreaFormat( const XclExpChRoot& rRoot ); 270 271 /** Converts area formatting properties from the passed property set. 272 @return true = object contains complex fill properties. */ 273 bool Convert( const XclExpChRoot& rRoot, 274 const ScfPropertySet& rPropSet, XclChObjectType eObjType ); 275 /** Sets or clears the automatic flag. */ SetAuto(bool bAuto)276 inline void SetAuto( bool bAuto ) { ::set_flag( maData.mnFlags, EXC_CHAREAFORMAT_AUTO, bAuto ); } 277 /** Sets the area format to the specified default type. */ 278 void SetDefault( XclChFrameType eDefFrameType ); 279 280 /** Returns true, if the area format is set to automatic. */ IsAuto() const281 inline bool IsAuto() const { return ::get_flag( maData.mnFlags, EXC_CHAREAFORMAT_AUTO ); } 282 /** Returns true, if the area style is set to something visible. */ HasArea() const283 inline bool HasArea() const { return maData.mnPattern != EXC_PATT_NONE; } 284 /** Returns true, if the area contains default formatting according to the passed frame type. */ 285 bool IsDefault( XclChFrameType eDefFrameType ) const; 286 287 private: 288 virtual void WriteBody( XclExpStream& rStrm ); 289 290 private: 291 XclChAreaFormat maData; /// Contents of the CHAREAFORMAT record. 292 sal_uInt32 mnPattColorId; /// Pattern color identifier. 293 sal_uInt32 mnBackColorId; /// Pattern background color identifier. 294 }; 295 296 typedef ScfRef< XclExpChAreaFormat > XclExpChAreaFormatRef; 297 298 // ---------------------------------------------------------------------------- 299 300 class XclExpChEscherFormat : public XclExpChGroupBase 301 { 302 public: 303 explicit XclExpChEscherFormat( const XclExpChRoot& rRoot ); 304 305 /** Converts complex area formatting from the passed property set. */ 306 void Convert( const ScfPropertySet& rPropSet, XclChObjectType eObjType ); 307 308 /** Returns true, if the object contains valid formatting data. */ 309 bool IsValid() const; 310 311 /** Writes the CHESCHERFORMAT record group to the stream, if complex formatting is extant. */ 312 virtual void Save( XclExpStream& rStrm ); 313 /** Returns true, if this record group contains a CHPICFORMAT record. */ 314 virtual bool HasSubRecords() const; 315 /** Writes all embedded records. */ 316 virtual void WriteSubRecords( XclExpStream& rStrm ); 317 318 private: 319 /** Inserts a color from the contained Escher property set into the color palette. */ 320 sal_uInt32 RegisterColor( sal_uInt16 nPropId ); 321 322 virtual void WriteBody( XclExpStream& rStrm ); 323 324 private: 325 XclChEscherFormat maData; /// Fill properties for complex areas (CHESCHERFORMAT record). 326 XclChPicFormat maPicFmt; /// Image options, e.g. stretched, stacked (CHPICFORMAT record). 327 sal_uInt32 mnColor1Id; /// First fill color identifier. 328 sal_uInt32 mnColor2Id; /// Second fill color identifier. 329 }; 330 331 typedef ScfRef< XclExpChEscherFormat > XclExpChEscherFormatRef; 332 333 // ---------------------------------------------------------------------------- 334 335 /** Base class for record groups containing frame formatting. 336 337 Frame formatting can be part of several record groups, e.g. CHFRAME, 338 CHDATAFORMAT, CHDROPBAR. It consists of CHLINEFORMAT, CHAREAFORMAT, and 339 CHESCHERFORMAT group. 340 */ 341 class XclExpChFrameBase 342 { 343 public: 344 explicit XclExpChFrameBase(); 345 virtual ~XclExpChFrameBase(); 346 347 protected: 348 /** Converts frame formatting properties from the passed property set. */ 349 void ConvertFrameBase( const XclExpChRoot& rRoot, 350 const ScfPropertySet& rPropSet, XclChObjectType eObjType ); 351 /** Sets the frame formatting to the specified default type. */ 352 void SetDefaultFrameBase( const XclExpChRoot& rRoot, 353 XclChFrameType eDefFrameType, bool bIsFrame ); 354 355 /** Returns true, if the frame contains default formatting (as if the frame is missing). */ 356 bool IsDefaultFrameBase( XclChFrameType eDefFrameType ) const; 357 358 /** Writes all contained frame records to the passed stream. */ 359 void WriteFrameRecords( XclExpStream& rStrm ); 360 361 private: 362 XclExpChLineFormatRef mxLineFmt; /// Line format (CHLINEFORMAT record). 363 XclExpChAreaFormatRef mxAreaFmt; /// Area format (CHAREAFORMAT record). 364 XclExpChEscherFormatRef mxEscherFmt; /// Complex area format (CHESCHERFORMAT record). 365 }; 366 367 // ---------------------------------------------------------------------------- 368 369 /** Represents the CHFRAME record group containing object frame properties. 370 371 The CHFRAME group consists of: CHFRAME, CHBEGIN, CHLINEFORMAT, 372 CHAREAFORMAT, CHESCHERFORMAT group, CHEND. 373 */ 374 class XclExpChFrame : public XclExpChGroupBase, public XclExpChFrameBase 375 { 376 public: 377 explicit XclExpChFrame( const XclExpChRoot& rRoot, XclChObjectType eObjType ); 378 379 /** Converts frame formatting properties from the passed property set. */ 380 void Convert( const ScfPropertySet& rPropSet ); 381 /** Sets the specified automatic flags. */ 382 void SetAutoFlags( bool bAutoPos, bool bAutoSize ); 383 384 /** Returns true, if the frame object contains default formats. */ 385 bool IsDefault() const; 386 /** Returns true, if the frame object can be deleted because it contains default formats. */ 387 bool IsDeleteable() const; 388 389 /** Writes the entire record group. */ 390 virtual void Save( XclExpStream& rStrm ); 391 /** Writes all embedded records. */ 392 virtual void WriteSubRecords( XclExpStream& rStrm ); 393 394 private: 395 virtual void WriteBody( XclExpStream& rStrm ); 396 397 private: 398 XclChFrame maData; /// Contents of the CHFRAME record. 399 XclChObjectType meObjType; /// Type of the represented object. 400 }; 401 402 typedef ScfRef< XclExpChFrame > XclExpChFrameRef; 403 404 // Source links =============================================================== 405 406 class XclExpChSourceLink : public XclExpRecord, protected XclExpChRoot 407 { 408 public: 409 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > XDataSequenceRef; 410 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XFormattedString > XFormattedStringRef; 411 typedef ::com::sun::star::uno::Sequence< XFormattedStringRef > XFormattedStringSeq; 412 413 public: 414 explicit XclExpChSourceLink( const XclExpChRoot& rRoot, sal_uInt8 nDestType ); 415 416 /** Converts the passed source link, returns the number of linked values. */ 417 sal_uInt16 ConvertDataSequence( XDataSequenceRef xDataSeq, bool bSplitToColumns, sal_uInt16 nDefCount = 0 ); 418 /** Converts the passed sequence of formatted string objects, returns leading font index. */ 419 sal_uInt16 ConvertStringSequence( const XFormattedStringSeq& rStringSeq ); 420 /** Converts the number format from the passed property set. */ 421 void ConvertNumFmt( const ScfPropertySet& rPropSet, bool bPercent ); 422 423 /** Returns true, if this source link contains explicit string data. */ HasString() const424 inline bool HasString() const { return mxString.is() && !mxString->IsEmpty(); } 425 426 /** Writes the CHSOURCELINK record and optionally a CHSTRING record with explicit string data. */ 427 virtual void Save( XclExpStream& rStrm ); 428 429 private: 430 virtual void WriteBody( XclExpStream& rStrm ); 431 432 private: 433 XclChSourceLink maData; /// Contents of the CHSOURCELINK record. 434 XclTokenArrayRef mxLinkFmla; /// Formula with link to source data. 435 XclExpStringRef mxString; /// Text data (CHSTRING record). 436 }; 437 438 typedef ScfRef< XclExpChSourceLink > XclExpChSourceLinkRef; 439 440 // Text ======================================================================= 441 442 /** The CHFONT record containing a font index for text objects. */ 443 class XclExpChFont : public XclExpUInt16Record 444 { 445 public: 446 explicit XclExpChFont( sal_uInt16 nFontIdx ); 447 }; 448 449 typedef ScfRef< XclExpChFont > XclExpChFontRef; 450 451 // ---------------------------------------------------------------------------- 452 453 /** The CHOBJECTLINK record linking a text object to a specific chart object. */ 454 class XclExpChObjectLink : public XclExpRecord 455 { 456 public: 457 explicit XclExpChObjectLink( sal_uInt16 nLinkTarget, const XclChDataPointPos& rPointPos ); 458 459 private: 460 virtual void WriteBody( XclExpStream& rStrm ); 461 462 private: 463 XclChObjectLink maData; /// Contents of the CHOBJECTLINK record. 464 }; 465 466 typedef ScfRef< XclExpChObjectLink > XclExpChObjectLinkRef; 467 468 // ---------------------------------------------------------------------------- 469 470 /** Additional data label settings in the future record CHFRLABELPROPS. */ 471 class XclExpChFrLabelProps : public XclExpChFutureRecordBase 472 { 473 public: 474 explicit XclExpChFrLabelProps( const XclExpChRoot& rRoot ); 475 476 /** Converts separator and the passed data label flags. */ 477 void Convert( 478 const ScfPropertySet& rPropSet, bool bShowSeries, 479 bool bShowCateg, bool bShowValue, 480 bool bShowPercent, bool bShowBubble ); 481 482 private: 483 virtual void WriteBody( XclExpStream& rStrm ); 484 485 private: 486 XclChFrLabelProps maData; /// Contents of the CHFRLABELPROPS record. 487 }; 488 489 typedef ScfRef< XclExpChFrLabelProps > XclExpChFrLabelPropsRef; 490 491 // ---------------------------------------------------------------------------- 492 493 /** Base class for objects with font settings. Provides font conversion helper functions. */ 494 class XclExpChFontBase 495 { 496 public: 497 virtual ~XclExpChFontBase(); 498 499 /** Derived classes set font color and color identifier to internal data structures. */ 500 virtual void SetFont( XclExpChFontRef xFont, const Color& rColor, sal_uInt32 nColorId ) = 0; 501 /** Derived classes set text rotation to internal data structures. */ 502 virtual void SetRotation( sal_uInt16 nRotation ) = 0; 503 504 /** Creates a CHFONT record from the passed font index, calls virtual function SetFont(). */ 505 void ConvertFontBase( const XclExpChRoot& rRoot, sal_uInt16 nFontIdx ); 506 /** Creates a CHFONT record from the passed font index, calls virtual function SetFont(). */ 507 void ConvertFontBase( const XclExpChRoot& rRoot, const ScfPropertySet& rPropSet ); 508 /** Converts rotation settings, calls virtual function SetRotation(). */ 509 void ConvertRotationBase( const XclExpChRoot& rRoot, const ScfPropertySet& rPropSet, bool bSupportsStacked ); 510 }; 511 512 // ---------------------------------------------------------------------------- 513 514 /** Represents the CHTEXT record group containing text object properties. 515 516 The CHTEXT group consists of: CHTEXT, CHBEGIN, CHFRAMEPOS, CHFONT, 517 CHFORMATRUNS, CHSOURCELINK, CHSTRING, CHFRAME group, CHOBJECTLINK, and CHEND. 518 */ 519 class XclExpChText : public XclExpChGroupBase, public XclExpChFontBase 520 { 521 public: 522 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XTitle > XTitleRef; 523 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XRegressionCurve > XRegressionCurveRef; 524 525 public: 526 explicit XclExpChText( const XclExpChRoot& rRoot ); 527 528 /** Sets font color and color identifier to internal data structures. */ 529 virtual void SetFont( XclExpChFontRef xFont, const Color& rColor, sal_uInt32 nColorId ); 530 /** Sets text rotation to internal data structures. */ 531 virtual void SetRotation( sal_uInt16 nRotation ); 532 533 /** Converts all text settings of the passed title text object. */ 534 void ConvertTitle( XTitleRef xTitle, sal_uInt16 nTarget ); 535 /** Converts all text settings of the passed legend. */ 536 void ConvertLegend( const ScfPropertySet& rPropSet ); 537 /** Converts all settings of the passed data point caption text object. */ 538 bool ConvertDataLabel( const ScfPropertySet& rPropSet, 539 const XclChTypeInfo& rTypeInfo, const XclChDataPointPos& rPointPos ); 540 /** Converts all settings of the passed trend line equation box. */ 541 void ConvertTrendLineEquation( const ScfPropertySet& rPropSet, const XclChDataPointPos& rPointPos ); 542 543 /** Returns true, if the string object does not contain any text data. */ HasString() const544 inline bool HasString() const { return mxSrcLink.is() && mxSrcLink->HasString(); } 545 /** Returns the flags needed for the CHATTACHEDLABEL record. */ 546 sal_uInt16 GetAttLabelFlags() const; 547 548 /** Writes all embedded records. */ 549 virtual void WriteSubRecords( XclExpStream& rStrm ); 550 551 private: 552 virtual void WriteBody( XclExpStream& rStrm ); 553 554 private: 555 XclChText maData; /// Contents of the CHTEXT record. 556 XclExpChFramePosRef mxFramePos; /// Relative text frame position (CHFRAMEPOS record). 557 XclExpChSourceLinkRef mxSrcLink; /// Linked data (CHSOURCELINK with CHSTRING record). 558 XclExpChFrameRef mxFrame; /// Text object frame properties (CHFRAME group). 559 XclExpChFontRef mxFont; /// Index into font buffer (CHFONT record). 560 XclExpChObjectLinkRef mxObjLink; /// Link target for this text object. 561 XclExpChFrLabelPropsRef mxLabelProps; /// Extended data label properties (CHFRLABELPROPS record). 562 sal_uInt32 mnTextColorId; /// Text color identifier. 563 }; 564 565 typedef ScfRef< XclExpChText > XclExpChTextRef; 566 567 // Data series ================================================================ 568 569 /** The CHMARKERFORMAT record containing data point marker formatting data. */ 570 class XclExpChMarkerFormat : public XclExpRecord 571 { 572 public: 573 explicit XclExpChMarkerFormat( const XclExpChRoot& rRoot ); 574 575 /** Converts symbol properties from the passed property set. */ 576 void Convert( const XclExpChRoot& rRoot, 577 const ScfPropertySet& rPropSet, sal_uInt16 nFormatIdx ); 578 /** Converts symbol properties for stock charts from the passed property set. */ 579 void ConvertStockSymbol( const XclExpChRoot& rRoot, 580 const ScfPropertySet& rPropSet, bool bCloseSymbol ); 581 582 /** Returns true, if markers are enabled. */ HasMarker() const583 inline bool HasMarker() const { return maData.mnMarkerType != EXC_CHMARKERFORMAT_NOSYMBOL; } 584 /** Returns true, if border line of markers is visible. */ HasLineColor() const585 inline bool HasLineColor() const { return !::get_flag( maData.mnFlags, EXC_CHMARKERFORMAT_NOLINE ); } 586 /** Returns true, if fill area of markers is visible. */ HasFillColor() const587 inline bool HasFillColor() const { return !::get_flag( maData.mnFlags, EXC_CHMARKERFORMAT_NOFILL ); } 588 589 private: 590 /** Registers marker colors in palette and stores color identifiers. */ 591 void RegisterColors( const XclExpChRoot& rRoot ); 592 593 virtual void WriteBody( XclExpStream& rStrm ); 594 595 private: 596 XclChMarkerFormat maData; /// Contents of the CHMARKERFORMAT record. 597 sal_uInt32 mnLineColorId; /// Border line color identifier. 598 sal_uInt32 mnFillColorId; /// Fill color identifier. 599 }; 600 601 typedef ScfRef< XclExpChMarkerFormat > XclExpChMarkerFormatRef; 602 603 // ---------------------------------------------------------------------------- 604 605 /** The CHPIEFORMAT record containing data point formatting data for pie segments. */ 606 class XclExpChPieFormat : public XclExpUInt16Record 607 { 608 public: 609 explicit XclExpChPieFormat(); 610 611 /** Sets pie segment properties from the passed property set. */ 612 void Convert( const ScfPropertySet& rPropSet ); 613 }; 614 615 typedef ScfRef< XclExpChPieFormat > XclExpChPieFormatRef; 616 617 // ---------------------------------------------------------------------------- 618 619 /** The CH3DDATAFORMAT record containing the bar type in 3D bar charts. */ 620 class XclExpCh3dDataFormat : public XclExpRecord 621 { 622 public: 623 explicit XclExpCh3dDataFormat(); 624 625 /** Sets 3d bar properties from the passed property set. */ 626 void Convert( const ScfPropertySet& rPropSet ); 627 628 private: 629 virtual void WriteBody( XclExpStream& rStrm ); 630 631 private: 632 XclCh3dDataFormat maData; /// Contents of the CH3DDATAFORMAT record. 633 }; 634 635 typedef ScfRef< XclExpCh3dDataFormat > XclExpCh3dDataFormatRef; 636 637 // ---------------------------------------------------------------------------- 638 639 /** The CHATTACHEDLABEL record that contains the type of a data point label. */ 640 class XclExpChAttachedLabel : public XclExpUInt16Record 641 { 642 public: 643 explicit XclExpChAttachedLabel( sal_uInt16 nFlags ); 644 }; 645 646 typedef ScfRef< XclExpChAttachedLabel > XclExpChAttLabelRef; 647 648 // ---------------------------------------------------------------------------- 649 650 /** Represents the CHDATAFORMAT record group containing data point properties. 651 652 The CHDATAFORMAT group consists of: CHDATAFORMAT, CHBEGIN, CHFRAME group, 653 CHMARKERFORMAT, CHPIEFORMAT, CH3DDATAFORMAT, CHSERIESFORMAT, 654 CHATTACHEDLABEL, CHEND. 655 */ 656 class XclExpChDataFormat : public XclExpChGroupBase, public XclExpChFrameBase 657 { 658 public: 659 explicit XclExpChDataFormat( const XclExpChRoot& rRoot, 660 const XclChDataPointPos& rPointPos, sal_uInt16 nFormatIdx ); 661 662 /** Converts the passed data series or data point formatting. */ 663 void ConvertDataSeries( const ScfPropertySet& rPropSet, const XclChExtTypeInfo& rTypeInfo ); 664 /** Sets default formatting for a series in a stock chart. */ 665 void ConvertStockSeries( const ScfPropertySet& rPropSet, bool bCloseSymbol ); 666 /** Converts line formatting for the specified object (e.g. trend lines, error bars). */ 667 void ConvertLine( const ScfPropertySet& rPropSet, XclChObjectType eObjType ); 668 669 /** Returns true, if this objects describes the formatting of an entire series. */ IsSeriesFormat() const670 inline bool IsSeriesFormat() const { return maData.maPointPos.mnPointIdx == EXC_CHDATAFORMAT_ALLPOINTS; } 671 672 /** Writes all embedded records. */ 673 virtual void WriteSubRecords( XclExpStream& rStrm ); 674 675 private: 676 virtual void WriteBody( XclExpStream& rStrm ); 677 678 private: 679 XclChDataFormat maData; /// Contents of the CHDATAFORMAT record. 680 XclExpChMarkerFormatRef mxMarkerFmt; /// Data point marker (CHMARKERFORMAT record). 681 XclExpChPieFormatRef mxPieFmt; /// Pie segment format (CHPIEFORMAT record). 682 XclExpRecordRef mxSeriesFmt; /// Series properties (CHSERIESFORMAT record). 683 XclExpCh3dDataFormatRef mx3dDataFmt; /// 3D bar format (CH3DDATAFORMAT record). 684 XclExpChAttLabelRef mxAttLabel; /// Data point label type (CHATTACHEDLABEL record). 685 }; 686 687 typedef ScfRef< XclExpChDataFormat > XclExpChDataFormatRef; 688 689 // ---------------------------------------------------------------------------- 690 691 /** Represents the CHSERTRENDLINE record containing settings for a trend line. */ 692 class XclExpChSerTrendLine : public XclExpRecord, protected XclExpChRoot 693 { 694 public: 695 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XRegressionCurve > XRegressionCurveRef; 696 697 public: 698 explicit XclExpChSerTrendLine( const XclExpChRoot& rRoot ); 699 700 /** Converts the passed trend line, returns true if trend line type is supported. */ 701 bool Convert( XRegressionCurveRef xRegCurve, sal_uInt16 nSeriesIdx ); 702 703 /** Returns formatting information of the trend line, created in Convert(). */ GetDataFormat() const704 inline XclExpChDataFormatRef GetDataFormat() const { return mxDataFmt; } 705 /** Returns formatting of the equation text box, created in Convert(). */ GetDataLabel() const706 inline XclExpChTextRef GetDataLabel() const { return mxLabel; } 707 708 private: 709 virtual void WriteBody( XclExpStream& rStrm ); 710 711 private: 712 XclChSerTrendLine maData; /// Contents of the CHSERTRENDLINE record. 713 XclExpChDataFormatRef mxDataFmt; /// Formatting settings of the trend line. 714 XclExpChTextRef mxLabel; /// Formatting of the equation text box. 715 }; 716 717 typedef ScfRef< XclExpChSerTrendLine > XclExpChSerTrendLineRef; 718 719 // ---------------------------------------------------------------------------- 720 721 /** Represents the CHSERERRORBAR record containing settings for error bars. */ 722 class XclExpChSerErrorBar : public XclExpRecord, protected XclExpChRoot 723 { 724 public: 725 explicit XclExpChSerErrorBar( const XclExpChRoot& rRoot, sal_uInt8 nBarType ); 726 727 /** Converts the passed error bar settings, returns true if error bar type is supported. */ 728 bool Convert( XclExpChSourceLink& rValueLink, sal_uInt16& rnValueCount, const ScfPropertySet& rPropSet ); 729 730 private: 731 virtual void WriteBody( XclExpStream& rStrm ); 732 733 private: 734 XclChSerErrorBar maData; /// Contents of the CHSERERRORBAR record. 735 }; 736 737 typedef ScfRef< XclExpChSerErrorBar > XclExpChSerErrorBarRef; 738 739 // ---------------------------------------------------------------------------- 740 741 /** Represents the CHSERIES record group describing a data series in a chart. 742 743 The CHSERIES group consists of: CHSERIES, CHBEGIN, CHSOURCELINK groups, 744 CHDATAFORMAT groups, CHSERGROUP, CHSERPARENT, CHSERERRORBAR, 745 CHSERTRENDLINE, CHEND. 746 */ 747 class XclExpChSeries : public XclExpChGroupBase 748 { 749 public: 750 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDiagram > XDiagramRef; 751 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDataSeries > XDataSeriesRef; 752 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XLabeledDataSequence > XLabeledDataSeqRef; 753 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XRegressionCurve > XRegressionCurveRef; 754 755 public: 756 explicit XclExpChSeries( const XclExpChRoot& rRoot, sal_uInt16 nSeriesIdx ); 757 758 /** Converts the passed data series (source links and formatting). */ 759 bool ConvertDataSeries( 760 XDiagramRef xDiagram, XDataSeriesRef xDataSeries, 761 const XclChExtTypeInfo& rTypeInfo, 762 sal_uInt16 nGroupIdx, sal_uInt16 nFormatIdx ); 763 /** Converts the passed data series for stock charts. */ 764 bool ConvertStockSeries( 765 XDataSeriesRef xDataSeries, 766 const ::rtl::OUString& rValueRole, 767 sal_uInt16 nGroupIdx, sal_uInt16 nFormatIdx, bool bCloseSymbol ); 768 /** Converts the passed error bar settings (called at trend line child series). */ 769 bool ConvertTrendLine( const XclExpChSeries& rParent, XRegressionCurveRef xRegCurve ); 770 /** Converts the passed error bar settings (called at error bar child series). */ 771 bool ConvertErrorBar( const XclExpChSeries& rParent, const ScfPropertySet& rPropSet, sal_uInt8 nBarId ); 772 /** Converts and inserts category ranges for all inserted series. */ 773 void ConvertCategSequence( XLabeledDataSeqRef xCategSeq ); 774 775 /** Writes all embedded records. */ 776 virtual void WriteSubRecords( XclExpStream& rStrm ); 777 778 private: 779 /** Initializes members of this series to represent a child of the passed series. */ 780 void InitFromParent( const XclExpChSeries& rParent ); 781 /** Tries to create trend line series objects (called at parent series). */ 782 void CreateTrendLines( XDataSeriesRef xDataSeries ); 783 /** Tries to create positive and negative error bar series objects (called at parent series). */ 784 void CreateErrorBars( const ScfPropertySet& rPropSet, 785 const ::rtl::OUString& rBarPropName, 786 sal_uInt8 nPosBarId, sal_uInt8 nNegBarId ); 787 /** Tries to create an error bar series object (called at parent series). */ 788 void CreateErrorBar( const ScfPropertySet& rPropSet, 789 const ::rtl::OUString& rShowPropName, sal_uInt8 nBarId ); 790 791 virtual void WriteBody( XclExpStream& rStrm ); 792 793 private: 794 typedef XclExpRecordList< XclExpChDataFormat > XclExpChDataFormatList; 795 796 private: 797 XclChSeries maData; /// Contents of the CHSERIES record. 798 XclExpChSourceLinkRef mxTitleLink; /// Link data for series title. 799 XclExpChSourceLinkRef mxValueLink; /// Link data for series values. 800 XclExpChSourceLinkRef mxCategLink; /// Link data for series category names. 801 XclExpChSourceLinkRef mxBubbleLink; /// Link data for series bubble sizes. 802 XclExpChDataFormatRef mxSeriesFmt; /// CHDATAFORMAT group for series format. 803 XclExpChDataFormatList maPointFmts; /// CHDATAFORMAT groups for data point formats. 804 XclExpChSerTrendLineRef mxTrendLine; /// Trend line settings (CHSERTRENDLINE record). 805 XclExpChSerErrorBarRef mxErrorBar; /// Error bar settings (CHSERERRORBAR record). 806 sal_uInt16 mnGroupIdx; /// Chart type group (CHTYPEGROUP group) this series is assigned to. 807 sal_uInt16 mnSeriesIdx; /// 0-based series index. 808 sal_uInt16 mnParentIdx; /// 0-based index of parent series (trend lines and error bars). 809 }; 810 811 typedef ScfRef< XclExpChSeries > XclExpChSeriesRef; 812 813 // Chart type groups ========================================================== 814 815 /** Represents the chart type record for all supported chart types. */ 816 class XclExpChType : public XclExpRecord, protected XclExpChRoot 817 { 818 public: 819 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDiagram > XDiagramRef; 820 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartType > XChartTypeRef; 821 822 public: 823 explicit XclExpChType( const XclExpChRoot& rRoot ); 824 825 /** Converts the passed chart type and the contained data series. */ 826 void Convert( XDiagramRef xDiagram, XChartTypeRef xChartType, 827 sal_Int32 nApiAxesSetIdx, bool bSwappedAxesSet, bool bHasXLabels ); 828 /** Sets stacking mode (standard or percent) for the series in this chart type group. */ 829 void SetStacked( bool bPercent ); 830 831 /** Returns true, if this is object represents a valid chart type. */ IsValidType() const832 inline bool IsValidType() const { return maTypeInfo.meTypeId != EXC_CHTYPEID_UNKNOWN; } 833 /** Returns the chart type info struct for the contained chart type. */ GetTypeInfo() const834 inline const XclChTypeInfo& GetTypeInfo() const { return maTypeInfo; } 835 836 private: 837 virtual void WriteBody( XclExpStream& rStrm ); 838 839 private: 840 XclChType maData; /// Contents of the chart type record. 841 XclChTypeInfo maTypeInfo; /// Chart type info for the contained type. 842 }; 843 844 // ---------------------------------------------------------------------------- 845 846 /** Represents the CHCHART3D record that contains 3D view settings. */ 847 class XclExpChChart3d : public XclExpRecord 848 { 849 public: 850 explicit XclExpChChart3d(); 851 852 /** Converts 3d settings for the passed chart type. */ 853 void Convert( const ScfPropertySet& rPropSet, bool b3dWallChart ); 854 /** Sets flag that the data points are clustered on the X axis. */ SetClustered()855 inline void SetClustered() { ::set_flag( maData.mnFlags, EXC_CHCHART3D_CLUSTER ); } 856 857 /** Returns true, if the data points are clustered on the X axis. */ IsClustered() const858 inline bool IsClustered() const { return ::get_flag( maData.mnFlags, EXC_CHCHART3D_CLUSTER ); } 859 860 private: 861 virtual void WriteBody( XclExpStream& rStrm ); 862 863 private: 864 XclChChart3d maData; /// Contents of the CHCHART3D record. 865 }; 866 867 typedef ScfRef< XclExpChChart3d > XclExpChChart3dRef; 868 869 // ---------------------------------------------------------------------------- 870 871 /** Represents the CHLEGEND record group describing the chart legend. 872 873 The CHLEGEND group consists of: CHLEGEND, CHBEGIN, CHFRAMEPOS, CHFRAME 874 group, CHTEXT group, CHEND. 875 */ 876 class XclExpChLegend : public XclExpChGroupBase 877 { 878 public: 879 explicit XclExpChLegend( const XclExpChRoot& rRoot ); 880 881 /** Converts all legend settings from the passed property set. */ 882 void Convert( const ScfPropertySet& rPropSet ); 883 884 /** Writes all embedded records. */ 885 virtual void WriteSubRecords( XclExpStream& rStrm ); 886 887 private: 888 virtual void WriteBody( XclExpStream& rStrm ); 889 890 private: 891 XclChLegend maData; /// Contents of the CHLEGEND record. 892 XclExpChFramePosRef mxFramePos; /// Legend frame position (CHFRAMEPOS record). 893 XclExpChTextRef mxText; /// Legend text format (CHTEXT group). 894 XclExpChFrameRef mxFrame; /// Legend frame format (CHFRAME group). 895 }; 896 897 typedef ScfRef< XclExpChLegend > XclExpChLegendRef; 898 899 // ---------------------------------------------------------------------------- 900 901 /** Represents the CHDROPBAR record group describing pos/neg bars in line charts. 902 903 The CHDROPBAR group consists of: CHDROPBAR, CHBEGIN, CHLINEFORMAT, 904 CHAREAFORMAT, CHESCHERFORMAT group, CHEND. 905 */ 906 class XclExpChDropBar : public XclExpChGroupBase, public XclExpChFrameBase 907 { 908 public: 909 explicit XclExpChDropBar( const XclExpChRoot& rRoot, XclChObjectType eObjType ); 910 911 /** Converts and writes the contained frame data to the passed property set. */ 912 void Convert( const ScfPropertySet& rPropSet ); 913 914 /** Writes all embedded records. */ 915 virtual void WriteSubRecords( XclExpStream& rStrm ); 916 917 private: 918 virtual void WriteBody( XclExpStream& rStrm ); 919 920 private: 921 XclChObjectType meObjType; /// Type of the dropbar. 922 sal_uInt16 mnBarDist; /// Distance between bars (CHDROPBAR record). 923 }; 924 925 typedef ScfRef< XclExpChDropBar > XclExpChDropBarRef; 926 927 // ---------------------------------------------------------------------------- 928 929 /** Represents the CHTYPEGROUP record group describing a group of series. 930 931 The CHTYPEGROUP group consists of: CHTYPEGROUP, CHBEGIN, a chart type 932 record (e.g. CHBAR, CHLINE, CHAREA, CHPIE, ...), CHCHART3D, CHLEGEND group, 933 CHDROPBAR groups, CHCHARTLINE groups (CHCHARTLINE with CHLINEFORMAT), 934 CHDATAFORMAT group, CHEND. 935 */ 936 class XclExpChTypeGroup : public XclExpChGroupBase 937 { 938 public: 939 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDiagram > XDiagramRef; 940 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartType > XChartTypeRef; 941 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDataSeries > XDataSeriesRef; 942 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XLabeledDataSequence > XLabeledDataSeqRef; 943 944 public: 945 explicit XclExpChTypeGroup( const XclExpChRoot& rRoot, sal_uInt16 nGroupIdx ); 946 947 /** Converts the passed chart type to Excel type settings. */ 948 void ConvertType( XDiagramRef xDiagram, XChartTypeRef xChartType, 949 sal_Int32 nApiAxesSetIdx, bool b3dChart, bool bSwappedAxesSet, bool bHasXLabels ); 950 /** Converts and inserts all series from the passed chart type. */ 951 void ConvertSeries( XDiagramRef xDiagram, XChartTypeRef xChartType, 952 sal_Int32 nGroupAxesSetIdx, bool bPercent, bool bConnectorLines ); 953 /** Converts and inserts category ranges for all inserted series. */ 954 void ConvertCategSequence( XLabeledDataSeqRef xCategSeq ); 955 /** Creates a legend object and converts all legend settings. */ 956 void ConvertLegend( const ScfPropertySet& rPropSet ); 957 958 /** Returns true, if this chart type group contains at least one valid series. */ IsValidGroup() const959 inline bool IsValidGroup() const { return !maSeries.IsEmpty() && maType.IsValidType(); } 960 /** Returns the index of this chart type group format. */ GetGroupIdx() const961 inline sal_uInt16 GetGroupIdx() const { return maData.mnGroupIdx; } 962 /** Returns the chart type info struct for the contained chart type. */ GetTypeInfo() const963 inline const XclChExtTypeInfo& GetTypeInfo() const { return maTypeInfo; } 964 /** Returns true, if the chart is three-dimensional. */ Is3dChart() const965 inline bool Is3dChart() const { return maTypeInfo.mb3dChart; } 966 /** Returns true, if chart type supports wall and floor format. */ Is3dWallChart() const967 inline bool Is3dWallChart() const { return Is3dChart() && (maTypeInfo.meTypeCateg != EXC_CHTYPECATEG_PIE); } 968 /** Returns true, if the series in this chart type group are ordered on the Z axis. */ Is3dDeepChart() const969 inline bool Is3dDeepChart() const { return Is3dWallChart() && mxChart3d.is() && !mxChart3d->IsClustered(); } 970 /** Returns true, if this chart type can be combined with other types. */ IsCombinable2d() const971 inline bool IsCombinable2d() const { return !Is3dChart() && maTypeInfo.mbCombinable2d; } 972 973 /** Writes all embedded records. */ 974 virtual void WriteSubRecords( XclExpStream& rStrm ); 975 976 private: 977 /** Returns an unused format index to be used for the next created series. */ 978 sal_uInt16 GetFreeFormatIdx() const; 979 /** Creates all data series of any chart type except stock charts. */ 980 void CreateDataSeries( XDiagramRef xDiagram, 981 XDataSeriesRef xDataSeries ); 982 /** Creates all data series of a stock chart. */ 983 void CreateAllStockSeries( XChartTypeRef xChartType, 984 XDataSeriesRef xDataSeries ); 985 /** Creates a single data series of a stock chart. */ 986 bool CreateStockSeries( XDataSeriesRef xDataSeries, 987 const ::rtl::OUString& rValueRole, bool bCloseSymbol ); 988 989 virtual void WriteBody( XclExpStream& rStrm ); 990 991 private: 992 typedef XclExpRecordList< XclExpChSeries > XclExpChSeriesList; 993 typedef ScfRefMap< sal_uInt16, XclExpChLineFormat > XclExpChLineFormatMap; 994 995 XclChTypeGroup maData; /// Contents of the CHTYPEGROUP record. 996 XclExpChType maType; /// Chart type (e.g. CHBAR, CHLINE, ...). 997 XclChExtTypeInfo maTypeInfo; /// Extended chart type info. 998 XclExpChSeriesList maSeries; /// List of series data (CHSERIES groups). 999 XclExpChChart3dRef mxChart3d; /// 3D settings (CHCHART3D record). 1000 XclExpChLegendRef mxLegend; /// Chart legend (CHLEGEND group). 1001 XclExpChDropBarRef mxUpBar; /// White dropbars (CHDROPBAR group). 1002 XclExpChDropBarRef mxDownBar; /// Black dropbars (CHDROPBAR group). 1003 XclExpChLineFormatMap maChartLines; /// Global line formats (CHCHARTLINE group). 1004 }; 1005 1006 typedef ScfRef< XclExpChTypeGroup > XclExpChTypeGroupRef; 1007 1008 // Axes ======================================================================= 1009 1010 class XclExpChLabelRange : public XclExpRecord, protected XclExpChRoot 1011 { 1012 public: 1013 explicit XclExpChLabelRange( const XclExpChRoot& rRoot ); 1014 1015 /** Converts category axis scaling settings. */ 1016 void Convert( const ::com::sun::star::chart2::ScaleData& rScaleData, 1017 const ScfPropertySet& rChart1Axis, bool bMirrorOrient ); 1018 /** Converts position settings of a crossing axis at this axis. */ 1019 void ConvertAxisPosition( const ScfPropertySet& rPropSet ); 1020 /** Sets flag for tickmark position between categories or on categories. */ SetTicksBetweenCateg(bool bTicksBetween)1021 inline void SetTicksBetweenCateg( bool bTicksBetween ) 1022 { ::set_flag( maLabelData.mnFlags, EXC_CHLABELRANGE_BETWEEN, bTicksBetween ); } 1023 1024 private: 1025 virtual void Save( XclExpStream& rStrm ); 1026 virtual void WriteBody( XclExpStream& rStrm ); 1027 1028 private: 1029 XclChLabelRange maLabelData; /// Contents of the CHLABELRANGE record. 1030 XclChDateRange maDateData; /// Contents of the CHDATERANGE record. 1031 }; 1032 1033 typedef ScfRef< XclExpChLabelRange > XclExpChLabelRangeRef; 1034 1035 // ---------------------------------------------------------------------------- 1036 1037 class XclExpChValueRange : public XclExpRecord, protected XclExpChRoot 1038 { 1039 public: 1040 explicit XclExpChValueRange( const XclExpChRoot& rRoot ); 1041 1042 /** Converts value axis scaling settings. */ 1043 void Convert( const ::com::sun::star::chart2::ScaleData& rScaleData ); 1044 /** Converts position settings of a crossing axis at this axis. */ 1045 void ConvertAxisPosition( const ScfPropertySet& rPropSet ); 1046 1047 private: 1048 virtual void WriteBody( XclExpStream& rStrm ); 1049 1050 private: 1051 XclChValueRange maData; /// Contents of the CHVALUERANGE record. 1052 }; 1053 1054 typedef ScfRef< XclExpChValueRange > XclExpChValueRangeRef; 1055 1056 // ---------------------------------------------------------------------------- 1057 1058 class XclExpChTick : public XclExpRecord, protected XclExpChRoot 1059 { 1060 public: 1061 explicit XclExpChTick( const XclExpChRoot& rRoot ); 1062 1063 /** Converts axis tick mark settings. */ 1064 void Convert( const ScfPropertySet& rPropSet, const XclChExtTypeInfo& rTypeInfo, sal_uInt16 nAxisType ); 1065 /** Sets font color and color identifier to internal data structures. */ 1066 void SetFontColor( const Color& rColor, sal_uInt32 nColorId ); 1067 /** Sets text rotation to internal data structures. */ 1068 void SetRotation( sal_uInt16 nRotation ); 1069 1070 private: 1071 virtual void WriteBody( XclExpStream& rStrm ); 1072 1073 private: 1074 XclChTick maData; /// Contents of the CHTICK record. 1075 sal_uInt32 mnTextColorId; /// Axis labels text color identifier. 1076 }; 1077 1078 typedef ScfRef< XclExpChTick > XclExpChTickRef; 1079 1080 // ---------------------------------------------------------------------------- 1081 1082 /** Represents the CHAXIS record group describing an entire chart axis. 1083 1084 The CHAXIS group consists of: CHAXIS, CHBEGIN, CHLABELRANGE, CHEXTRANGE, 1085 CHVALUERANGE, CHFORMAT, CHTICK, CHFONT, CHAXISLINE groups (CHAXISLINE with 1086 CHLINEFORMAT, CHAREAFORMAT, and CHESCHERFORMAT group), CHEND. 1087 */ 1088 class XclExpChAxis : public XclExpChGroupBase, public XclExpChFontBase 1089 { 1090 public: 1091 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDiagram > XDiagramRef; 1092 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XAxis > XAxisRef; 1093 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart::XAxis > XChart1AxisRef; 1094 1095 public: 1096 explicit XclExpChAxis( const XclExpChRoot& rRoot, sal_uInt16 nAxisType ); 1097 1098 /** Sets font color and color identifier to internal data structures. */ 1099 virtual void SetFont( XclExpChFontRef xFont, const Color& rColor, sal_uInt32 nColorId ); 1100 /** Sets text rotation to internal data structures. */ 1101 virtual void SetRotation( sal_uInt16 nRotation ); 1102 1103 /** Converts formatting and scaling settings from the passed axis. */ 1104 void Convert( XAxisRef xAxis, XAxisRef xCrossingAxis, 1105 XChart1AxisRef xChart1Axis, const XclChExtTypeInfo& rTypeInfo ); 1106 /** Converts and writes 3D wall/floor properties from the passed diagram. */ 1107 void ConvertWall( XDiagramRef xDiagram ); 1108 1109 /** Returns the type of this axis. */ GetAxisType() const1110 inline sal_uInt16 GetAxisType() const { return maData.mnType; } 1111 /** Returns the axis dimension index used by the chart API. */ GetApiAxisDimension() const1112 inline sal_Int32 GetApiAxisDimension() const { return maData.GetApiAxisDimension(); } 1113 1114 /** Writes all embedded records. */ 1115 virtual void WriteSubRecords( XclExpStream& rStrm ); 1116 1117 private: 1118 virtual void WriteBody( XclExpStream& rStrm ); 1119 1120 private: 1121 XclChAxis maData; /// Contents of the CHAXIS record. 1122 XclExpChLabelRangeRef mxLabelRange; /// Category scaling (CHLABELRANGE record). 1123 XclExpChValueRangeRef mxValueRange; /// Value scaling (CHVALUERANGE record). 1124 XclExpChTickRef mxTick; /// Axis ticks (CHTICK record). 1125 XclExpChFontRef mxFont; /// Index into font buffer (CHFONT record). 1126 XclExpChLineFormatRef mxAxisLine; /// Axis line format (CHLINEFORMAT record). 1127 XclExpChLineFormatRef mxMajorGrid; /// Major grid line format (CHLINEFORMAT record). 1128 XclExpChLineFormatRef mxMinorGrid; /// Minor grid line format (CHLINEFORMAT record). 1129 XclExpChFrameRef mxWallFrame; /// Wall/floor format (sub records of CHFRAME group). 1130 sal_uInt16 mnNumFmtIdx; /// Index into number format buffer (CHFORMAT record). 1131 }; 1132 1133 typedef ScfRef< XclExpChAxis > XclExpChAxisRef; 1134 1135 // ---------------------------------------------------------------------------- 1136 1137 /** Represents the CHAXESSET record group describing an axes set (X/Y/Z axes). 1138 1139 The CHAXESSET group consists of: CHAXESSET, CHBEGIN, CHFRAMEPOS, CHAXIS 1140 groups, CHTEXT groups, CHPLOTFRAME group (CHPLOTFRAME with CHFRAME group), 1141 CHTYPEGROUP group, CHEND. 1142 */ 1143 class XclExpChAxesSet : public XclExpChGroupBase 1144 { 1145 public: 1146 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDiagram > XDiagramRef; 1147 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XCoordinateSystem > XCoordSystemRef; 1148 1149 public: 1150 explicit XclExpChAxesSet( const XclExpChRoot& rRoot, sal_uInt16 nAxesSetId ); 1151 1152 /** Converts the passed diagram to chart record data. 1153 @return First unused chart type group index. */ 1154 sal_uInt16 Convert( XDiagramRef xDiagram, sal_uInt16 nFirstGroupIdx ); 1155 1156 /** Returns true, if this axes set exists (returns false if this is a dummy object). */ IsValidAxesSet() const1157 inline bool IsValidAxesSet() const { return !maTypeGroups.IsEmpty(); } 1158 /** Returns the index of the axes set (primary/secondary). */ GetAxesSetId() const1159 inline sal_uInt16 GetAxesSetId() const { return maData.mnAxesSetId; } 1160 /** Returns the axes set index used by the chart API. */ GetApiAxesSetIndex() const1161 inline sal_Int32 GetApiAxesSetIndex() const { return maData.GetApiAxesSetIndex(); } 1162 /** Returns true, if the chart is three-dimensional. */ 1163 bool Is3dChart() const; 1164 1165 /** Writes all embedded records. */ 1166 virtual void WriteSubRecords( XclExpStream& rStrm ); 1167 1168 private: 1169 /** Returns first inserted chart type group. */ 1170 XclExpChTypeGroupRef GetFirstTypeGroup() const; 1171 /** Returns last inserted chart type group. */ 1172 XclExpChTypeGroupRef GetLastTypeGroup() const; 1173 1174 /** Converts a complete axis object including axis title. */ 1175 void ConvertAxis( XclExpChAxisRef& rxChAxis, sal_uInt16 nAxisType, 1176 XclExpChTextRef& rxChAxisTitle, sal_uInt16 nTitleTarget, 1177 XCoordSystemRef xCoordSystem, const XclChExtTypeInfo& rTypeInfo, 1178 sal_Int32 nCrossingAxisDim ); 1179 1180 virtual void WriteBody( XclExpStream& rStrm ); 1181 1182 private: 1183 typedef XclExpRecordList< XclExpChTypeGroup > XclExpChTypeGroupList; 1184 1185 XclChAxesSet maData; /// Contents of the CHAXESSET record. 1186 XclExpChFramePosRef mxFramePos; /// Outer plot area position (CHFRAMEPOS record). 1187 XclExpChAxisRef mxXAxis; /// The X axis (CHAXIS group). 1188 XclExpChAxisRef mxYAxis; /// The Y axis (CHAXIS group). 1189 XclExpChAxisRef mxZAxis; /// The Z axis (CHAXIS group). 1190 XclExpChTextRef mxXAxisTitle; /// The X axis title (CHTEXT group). 1191 XclExpChTextRef mxYAxisTitle; /// The Y axis title (CHTEXT group). 1192 XclExpChTextRef mxZAxisTitle; /// The Z axis title (CHTEXT group). 1193 XclExpChFrameRef mxPlotFrame; /// Plot area (CHPLOTFRAME group). 1194 XclExpChTypeGroupList maTypeGroups; /// Chart type groups (CHTYPEGROUP group). 1195 }; 1196 1197 typedef ScfRef< XclExpChAxesSet > XclExpChAxesSetRef; 1198 1199 // The chart object =========================================================== 1200 1201 /** Represents the CHCHART record group describing the chart contents. 1202 1203 The CHCHART group consists of: CHCHART, CHBEGIN, SCL, CHPLOTGROWTH, CHFRAME 1204 group, CHSERIES groups, CHPROPERTIES, CHDEFAULTTEXT groups (CHDEFAULTTEXT 1205 with CHTEXT groups), CHUSEDAXESSETS, CHAXESSET groups, CHTEXT groups, CHEND. 1206 */ 1207 class XclExpChChart : public XclExpChGroupBase 1208 { 1209 public: 1210 typedef ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument > XChartDocRef; 1211 1212 public: 1213 explicit XclExpChChart( const XclExpRoot& rRoot, 1214 XChartDocRef xChartDoc, const Rectangle& rChartRect ); 1215 1216 /** Creates, registers and returns a new data series object. */ 1217 XclExpChSeriesRef CreateSeries(); 1218 /** Removes the last created data series object from the series list. */ 1219 void RemoveLastSeries(); 1220 /** Stores a CHTEXT group that describes a data point label. */ 1221 void SetDataLabel( XclExpChTextRef xText ); 1222 /** Sets the plot area position and size to manual mode. */ 1223 void SetManualPlotArea(); 1224 1225 /** Writes all embedded records. */ 1226 virtual void WriteSubRecords( XclExpStream& rStrm ); 1227 1228 private: 1229 virtual void WriteBody( XclExpStream& rStrm ); 1230 1231 private: 1232 typedef XclExpRecordList< XclExpChSeries > XclExpChSeriesList; 1233 typedef XclExpRecordList< XclExpChText > XclExpChTextList; 1234 1235 XclChRectangle maRect; /// Position of the chart on the sheet (CHCHART record). 1236 XclExpChSeriesList maSeries; /// List of series data (CHSERIES groups). 1237 XclExpChFrameRef mxFrame; /// Chart frame format (CHFRAME group). 1238 XclChProperties maProps; /// Chart properties (CHPROPERTIES record). 1239 XclExpChAxesSetRef mxPrimAxesSet; /// Primary axes set (CHAXESSET group). 1240 XclExpChAxesSetRef mxSecnAxesSet; /// Secondary axes set (CHAXESSET group). 1241 XclExpChTextRef mxTitle; /// Chart title (CHTEXT group). 1242 XclExpChTextList maLabels; /// Data point labels (CHTEXT groups). 1243 }; 1244 1245 // ---------------------------------------------------------------------------- 1246 1247 /** Represents the group of DFF and OBJ records containing all drawing shapes 1248 embedded in the chart object. 1249 */ 1250 class XclExpChartDrawing : public XclExpRecordBase, protected XclExpRoot 1251 { 1252 public: 1253 explicit XclExpChartDrawing( 1254 const XclExpRoot& rRoot, 1255 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& rxModel, 1256 const Size& rChartSize ); 1257 virtual ~XclExpChartDrawing(); 1258 1259 virtual void Save( XclExpStream& rStrm ); 1260 1261 private: 1262 ScfRef< XclExpObjectManager > mxObjMgr; 1263 ScfRef< XclExpRecordBase > mxObjRecs; 1264 }; 1265 1266 // ---------------------------------------------------------------------------- 1267 1268 /** Represents the entire chart substream (all records in BOF/EOF block). */ 1269 class XclExpChart : public XclExpSubStream, protected XclExpRoot 1270 { 1271 public: 1272 typedef ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > XModelRef; 1273 1274 public: 1275 explicit XclExpChart( const XclExpRoot& rRoot, 1276 XModelRef xModel, const Rectangle& rChartRect ); 1277 }; 1278 1279 // ============================================================================ 1280 1281 #endif 1282 1283