LCOV - code coverage report
Current view: top level - sc/source/filter/inc - xlchart.hxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 11 11 100.0 %
Date: 2015-06-13 12:38:46 Functions: 8 8 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       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/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      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 .
      18             :  */
      19             : 
      20             : #ifndef INCLUDED_SC_SOURCE_FILTER_INC_XLCHART_HXX
      21             : #define INCLUDED_SC_SOURCE_FILTER_INC_XLCHART_HXX
      22             : 
      23             : // disable/enable support for varied point colors property
      24             : #define EXC_CHART2_VARYCOLORSBY_PROP 0
      25             : // disable/enable restriction to hair lines in 3D bar charts (#i83151#)
      26             : #define EXC_CHART2_3DBAR_HAIRLINES_ONLY 1
      27             : 
      28             : #include <tools/gen.hxx>
      29             : #include "fapihelper.hxx"
      30             : #include <map>
      31             : #include <memory>
      32             : 
      33             : namespace com { namespace sun { namespace star {
      34             :     namespace container { class XNameContainer; }
      35             :     namespace lang      { class XMultiServiceFactory; }
      36             :     namespace chart     { class XChartDocument; }
      37             :     namespace chart2    { class XChartDocument; }
      38             :     namespace drawing   { class XShape; }
      39             : } } }
      40             : 
      41             : class XclRoot;
      42             : 
      43             : // Property names =============================================================
      44             : 
      45             : // service names
      46             : #define SERVICE_DRAWING_BITMAPTABLE         "com.sun.star.drawing.BitmapTable"
      47             : #define SERVICE_DRAWING_DASHTABLE           "com.sun.star.drawing.DashTable"
      48             : #define SERVICE_DRAWING_GRADIENTTABLE       "com.sun.star.drawing.GradientTable"
      49             : #define SERVICE_DRAWING_HATCHTABLE          "com.sun.star.drawing.HatchTable"
      50             : 
      51             : #define SERVICE_CHART2_AXIS                 "com.sun.star.chart2.Axis"
      52             : #define SERVICE_CHART2_DATAPROVIDER         "com.sun.star.chart2.data.DataProvider"
      53             : #define SERVICE_CHART2_DATASERIES           "com.sun.star.chart2.DataSeries"
      54             : #define SERVICE_CHART2_DIAGRAM              "com.sun.star.chart2.Diagram"
      55             : #define SERVICE_CHART2_ERRORBAR             "com.sun.star.chart2.ErrorBar"
      56             : #define SERVICE_CHART2_LEGEND               "com.sun.star.chart2.Legend"
      57             : #define SERVICE_CHART2_TITLE                "com.sun.star.chart2.Title"
      58             : 
      59             : // property names
      60             : #define EXC_CHPROP_ADDITIONALSHAPES         "AdditionalShapes"
      61             : #define EXC_CHPROP_ANCHORPOSITION           "AnchorPosition"
      62             : #define EXC_CHPROP_ARRANGEORDER             "ArrangeOrder"
      63             : #define EXC_CHPROP_ATTAXISINDEX             "AttachedAxisIndex"
      64             : #define EXC_CHPROP_ATTRIBDATAPOINTS         "AttributedDataPoints"
      65             : #define EXC_CHPROP_BLACKDAY                 "BlackDay"
      66             : #define EXC_CHPROP_COLOR                    "Color"
      67             : #define EXC_CHPROP_CONNECTBARS              "ConnectBars"
      68             : #define EXC_CHPROP_CROSSOVERPOSITION        "CrossoverPosition"
      69             : #define EXC_CHPROP_CROSSOVERVALUE           "CrossoverValue"
      70             : #define EXC_CHPROP_CURVESTYLE               "CurveStyle"
      71             : #define EXC_CHPROP_CURVENAME                "CurveName"
      72             : #define EXC_CHPROP_D3DSCENEAMBIENTCOLOR     "D3DSceneAmbientColor"
      73             : #define EXC_CHPROP_D3DSCENELIGHTON1         "D3DSceneLightOn1"
      74             : #define EXC_CHPROP_D3DSCENELIGHTCOLOR2      "D3DSceneLightColor2"
      75             : #define EXC_CHPROP_D3DSCENELIGHTDIR2        "D3DSceneLightDirection2"
      76             : #define EXC_CHPROP_D3DSCENELIGHTON2         "D3DSceneLightOn2"
      77             : #define EXC_CHPROP_D3DSCENEPERSPECTIVE      "D3DScenePerspective"
      78             : #define EXC_CHPROP_D3DSCENESHADEMODE        "D3DSceneShadeMode"
      79             : #define EXC_CHPROP_DISPLAYLABELS            "DisplayLabels"
      80             : #define EXC_CHPROP_ERRORBARSTYLE            "ErrorBarStyle"
      81             : #define EXC_CHPROP_ERRORBARX                "ErrorBarX"
      82             : #define EXC_CHPROP_ERRORBARY                "ErrorBarY"
      83             : #define EXC_CHPROP_EXPANSION                "Expansion"
      84             : #define EXC_CHPROP_EXPTIMEINCREMENT         "ExplicitTimeIncrement"
      85             : #define EXC_CHPROP_EXTRAPOLATE_FORWARD      "ExtrapolateForward"
      86             : #define EXC_CHPROP_EXTRAPOLATE_BACKWARD     "ExtrapolateBackward"
      87             : #define EXC_CHPROP_FORCE_INTERCEPT          "ForceIntercept"
      88             : #define EXC_CHPROP_GAPWIDTHSEQ              "GapwidthSequence"
      89             : #define EXC_CHPROP_GEOMETRY3D               "Geometry3D"
      90             : #define EXC_CHPROP_INCLUDEHIDDENCELLS       "IncludeHiddenCells"
      91             : #define EXC_CHPROP_INTERCEPT_VALUE          "InterceptValue"
      92             : #define EXC_CHPROP_JAPANESE                 "Japanese"
      93             : #define EXC_CHPROP_LABEL                    "Label"
      94             : #define EXC_CHPROP_LABELPLACEMENT           "LabelPlacement"
      95             : #define EXC_CHPROP_LABELPOSITION            "LabelPosition"
      96             : #define EXC_CHPROP_LABELSEPARATOR           "LabelSeparator"
      97             : #define EXC_CHPROP_MAJORTICKS               "MajorTickmarks"
      98             : #define EXC_CHPROP_MARKPOSITION             "MarkPosition"
      99             : #define EXC_CHPROP_MINORTICKS               "MinorTickmarks"
     100             : #define EXC_CHPROP_MISSINGVALUETREATMENT    "MissingValueTreatment"
     101             : #define EXC_CHPROP_MOVING_AVERAGE_PERIOD    "MovingAveragePeriod"
     102             : #define EXC_CHPROP_NEGATIVEERROR            "NegativeError"
     103             : #define EXC_CHPROP_NUMBERFORMAT             "NumberFormat"
     104             : #define EXC_CHPROP_OFFSET                   "Offset"
     105             : #define EXC_CHPROP_OVERLAPSEQ               "OverlapSequence"
     106             : #define EXC_CHPROP_PERCENTAGENUMFMT         "PercentageNumberFormat"
     107             : #define EXC_CHPROP_PERCENTDIAGONAL          "PercentDiagonal"
     108             : #define EXC_CHPROP_PERSPECTIVE              "Perspective"
     109             : #define EXC_CHPROP_POSITIVEERROR            "PositiveError"
     110             : #define EXC_CHPROP_POLYNOMIAL_DEGREE        "PolynomialDegree"
     111             : #define EXC_CHPROP_RELATIVEPOSITION         "RelativePosition"
     112             : #define EXC_CHPROP_RELATIVESIZE             "RelativeSize"
     113             : #define EXC_CHPROP_RIGHTANGLEDAXES          "RightAngledAxes"
     114             : #define EXC_CHPROP_ROLE                     "Role"
     115             : #define EXC_CHPROP_ROTATIONHORIZONTAL       "RotationHorizontal"
     116             : #define EXC_CHPROP_ROTATIONVERTICAL         "RotationVertical"
     117             : #define EXC_CHPROP_3DRELATIVEHEIGHT         "3DRelativeHeight"
     118             : #define EXC_CHPROP_SHOW                     "Show"
     119             : #define EXC_CHPROP_SHOWCORRELATION          "ShowCorrelationCoefficient"
     120             : #define EXC_CHPROP_SHOWEQUATION             "ShowEquation"
     121             : #define EXC_CHPROP_SHOWFIRST                "ShowFirst"
     122             : #define EXC_CHPROP_SHOWHIGHLOW              "ShowHighLow"
     123             : #define EXC_CHPROP_SHOWNEGATIVEERROR        "ShowNegativeError"
     124             : #define EXC_CHPROP_SHOWPOSITIVEERROR        "ShowPositiveError"
     125             : #define EXC_CHPROP_STACKCHARACTERS          "StackCharacters"
     126             : #define EXC_CHPROP_STACKINGDIR              "StackingDirection"
     127             : #define EXC_CHPROP_STARTINGANGLE            "StartingAngle"
     128             : #define EXC_CHPROP_SWAPXANDYAXIS            "SwapXAndYAxis"
     129             : #define EXC_CHPROP_SYMBOL                   "Symbol"
     130             : #define EXC_CHPROP_TEXTBREAK                "TextBreak"
     131             : #define EXC_CHPROP_TEXTOVERLAP              "TextOverlap"
     132             : #define EXC_CHPROP_TEXTROTATION             "TextRotation"
     133             : #define EXC_CHPROP_USERINGS                 "UseRings"
     134             : #define EXC_CHPROP_VARYCOLORSBY             "VaryColorsByPoint"
     135             : #define EXC_CHPROP_WEIGHT                   "Weight"
     136             : #define EXC_CHPROP_WHITEDAY                 "WhiteDay"
     137             : 
     138             : // data series roles
     139             : #define EXC_CHPROP_ROLE_CATEG               "categories"
     140             : #define EXC_CHPROP_ROLE_ERRORBARS_NEGX      "error-bars-x-negative"
     141             : #define EXC_CHPROP_ROLE_ERRORBARS_NEGY      "error-bars-y-negative"
     142             : #define EXC_CHPROP_ROLE_ERRORBARS_POSX      "error-bars-x-positive"
     143             : #define EXC_CHPROP_ROLE_ERRORBARS_POSY      "error-bars-y-positive"
     144             : #define EXC_CHPROP_ROLE_LABEL               "label"
     145             : #define EXC_CHPROP_ROLE_XVALUES             "values-x"
     146             : #define EXC_CHPROP_ROLE_YVALUES             "values-y"
     147             : #define EXC_CHPROP_ROLE_OPENVALUES          "values-first"
     148             : #define EXC_CHPROP_ROLE_CLOSEVALUES         "values-last"
     149             : #define EXC_CHPROP_ROLE_LOWVALUES           "values-min"
     150             : #define EXC_CHPROP_ROLE_HIGHVALUES          "values-max"
     151             : #define EXC_CHPROP_ROLE_SIZEVALUES          "values-size"
     152             : 
     153             : // Constants and Enumerations =================================================
     154             : 
     155             : const sal_Size EXC_CHART_PROGRESS_SIZE          = 10;
     156             : const sal_uInt16 EXC_CHART_AUTOROTATION         = 0xFFFF;   /// Automatic rotation, e.g. axis labels (internal use only).
     157             : 
     158             : const sal_Int32 EXC_CHART_AXIS_NONE             = -1;       /// For internal use only.
     159             : const sal_Int32 EXC_CHART_AXIS_X                = 0;        /// API X axis index.
     160             : const sal_Int32 EXC_CHART_AXIS_Y                = 1;        /// API Y axis index.
     161             : const sal_Int32 EXC_CHART_AXIS_Z                = 2;        /// API Z axis index.
     162             : const sal_Int32 EXC_CHART_AXESSET_NONE          = -1;       /// For internal use only.
     163             : const sal_Int32 EXC_CHART_AXESSET_PRIMARY       = 0;        /// API primary axes set index.
     164             : const sal_Int32 EXC_CHART_AXESSET_SECONDARY     = 1;        /// API secondary axes set index.
     165             : 
     166             : const sal_Int32 EXC_CHART_TOTALUNITS            = 4000;     /// Most chart objects are positioned in 1/4000 of chart area.
     167             : const sal_Int32 EXC_CHART_PLOTAREAUNITS         = 1000;     /// For objects that are positioned in 1/1000 of plot area.
     168             : 
     169             : // (0x0850) CHFRINFO ----------------------------------------------------------
     170             : 
     171             : const sal_uInt16 EXC_ID_CHFRINFO                = 0x0850;
     172             : 
     173             : const sal_uInt8 EXC_CHFRINFO_EXCEL2000          = 9;
     174             : const sal_uInt8 EXC_CHFRINFO_EXCELXP2003        = 10;
     175             : const sal_uInt8 EXC_CHFRINFO_EXCEL2007          = 11;
     176             : 
     177             : // (0x0852, 0x0853) CHFRBLOCKBEGIN, CHFRBLOCKEND ------------------------------
     178             : 
     179             : const sal_uInt16 EXC_ID_CHFRBLOCKBEGIN          = 0x0852;
     180             : const sal_uInt16 EXC_ID_CHFRBLOCKEND            = 0x0853;
     181             : 
     182             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_AXESSET     = 0;
     183             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_TEXT        = 2;
     184             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_AXIS        = 4;
     185             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_TYPEGROUP   = 5;
     186             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_DATATABLE   = 6;
     187             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_FRAME       = 7;
     188             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_LEGEND      = 9;
     189             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_LEGENDEX    = 10;
     190             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_SERIES      = 12;
     191             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_CHART       = 13;
     192             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_DATAFORMAT  = 14;
     193             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_DROPBAR     = 15;
     194             : const sal_uInt16 EXC_CHFRBLOCK_TYPE_UNKNOWN     = 0xFFFF;   /// For internal use only.
     195             : 
     196             : const sal_uInt16 EXC_CHFRBLOCK_TEXT_TITLE       = 0;
     197             : const sal_uInt16 EXC_CHFRBLOCK_TEXT_DEFTEXT     = 2;
     198             : const sal_uInt16 EXC_CHFRBLOCK_TEXT_AXISTITLE   = 4;
     199             : const sal_uInt16 EXC_CHFRBLOCK_TEXT_DATALABEL   = 5;
     200             : 
     201             : const sal_uInt16 EXC_CHFRBLOCK_FRAME_STANDARD   = 0;
     202             : const sal_uInt16 EXC_CHFRBLOCK_FRAME_PLOTFRAME  = 1;
     203             : const sal_uInt16 EXC_CHFRBLOCK_FRAME_BACKGROUND = 2;
     204             : 
     205             : // (0x086B) CHFRLABELPROPS ----------------------------------------------------
     206             : 
     207             : const sal_uInt16 EXC_ID_CHFRLABELPROPS          = 0x086B;
     208             : 
     209             : const sal_uInt16 EXC_CHFRLABELPROPS_SHOWSERIES  = 0x0001;
     210             : const sal_uInt16 EXC_CHFRLABELPROPS_SHOWCATEG   = 0x0002;
     211             : const sal_uInt16 EXC_CHFRLABELPROPS_SHOWVALUE   = 0x0004;
     212             : const sal_uInt16 EXC_CHFRLABELPROPS_SHOWPERCENT = 0x0008;
     213             : const sal_uInt16 EXC_CHFRLABELPROPS_SHOWBUBBLE  = 0x0010;
     214             : 
     215             : // (0x1001) CHUNITS -----------------------------------------------------------
     216             : 
     217             : const sal_uInt16 EXC_ID_CHUNITS                 = 0x1001;
     218             : 
     219             : const sal_uInt16 EXC_CHUNITS_TWIPS              = 0;
     220             : const sal_uInt16 EXC_CHUNITS_PIXELS             = 1;
     221             : 
     222             : // (0x1002) CHCHART -----------------------------------------------------------
     223             : 
     224             : const sal_uInt16 EXC_ID_CHCHART                 = 0x1002;
     225             : 
     226             : // (0x1003) CHSERIES ----------------------------------------------------------
     227             : 
     228             : const sal_uInt16 EXC_ID_CHSERIES                = 0x1003;
     229             : 
     230             : const sal_uInt16 EXC_CHSERIES_DATE              = 0;
     231             : const sal_uInt16 EXC_CHSERIES_NUMERIC           = 1;
     232             : const sal_uInt16 EXC_CHSERIES_SEQUENCE          = 2;
     233             : const sal_uInt16 EXC_CHSERIES_TEXT              = 3;
     234             : 
     235             : const sal_uInt16 EXC_CHSERIES_MAXSERIES         = 255;      /// Maximum valid series index.
     236             : const sal_uInt16 EXC_CHSERIES_INVALID           = 0xFFFF;   /// Invalid series index (for internal use).
     237             : 
     238             : // (0x1006) CHDATAFORMAT ------------------------------------------------------
     239             : 
     240             : const sal_uInt16 EXC_ID_CHDATAFORMAT            = 0x1006;
     241             : 
     242             : const sal_uInt16 EXC_CHDATAFORMAT_MAXPOINTCOUNT = 32000;    /// Maximum number of data points.
     243             : const sal_uInt16 EXC_CHDATAFORMAT_DEFAULT       = 0xFFFD;   /// As format index: global default for an axes set.
     244             : const sal_uInt16 EXC_CHDATAFORMAT_UNKNOWN       = 0xFFFE;   /// As point index: unknown format, don't use.
     245             : const sal_uInt16 EXC_CHDATAFORMAT_ALLPOINTS     = 0xFFFF;   /// As point index: default for a series.
     246             : 
     247             : const sal_uInt16 EXC_CHDATAFORMAT_OLDCOLORS     = 0x0001;
     248             : 
     249             : // (0x1007) CHLINEFORMAT ------------------------------------------------------
     250             : 
     251             : const sal_uInt16 EXC_ID_CHLINEFORMAT            = 0x1007;
     252             : 
     253             : const sal_uInt16 EXC_CHLINEFORMAT_SOLID         = 0;
     254             : const sal_uInt16 EXC_CHLINEFORMAT_DASH          = 1;
     255             : const sal_uInt16 EXC_CHLINEFORMAT_DOT           = 2;
     256             : const sal_uInt16 EXC_CHLINEFORMAT_DASHDOT       = 3;
     257             : const sal_uInt16 EXC_CHLINEFORMAT_DASHDOTDOT    = 4;
     258             : const sal_uInt16 EXC_CHLINEFORMAT_NONE          = 5;
     259             : const sal_uInt16 EXC_CHLINEFORMAT_DARKTRANS     = 6;
     260             : const sal_uInt16 EXC_CHLINEFORMAT_MEDTRANS      = 7;
     261             : const sal_uInt16 EXC_CHLINEFORMAT_LIGHTTRANS    = 8;
     262             : 
     263             : const sal_Int16 EXC_CHLINEFORMAT_HAIR           = -1;
     264             : const sal_Int16 EXC_CHLINEFORMAT_SINGLE         = 0;
     265             : const sal_Int16 EXC_CHLINEFORMAT_DOUBLE         = 1;
     266             : const sal_Int16 EXC_CHLINEFORMAT_TRIPLE         = 2;
     267             : 
     268             : const sal_uInt16 EXC_CHLINEFORMAT_AUTO          = 0x0001;
     269             : const sal_uInt16 EXC_CHLINEFORMAT_SHOWAXIS      = 0x0004;
     270             : 
     271             : // (0x1009) CHMARKERFORMAT ----------------------------------------------------
     272             : 
     273             : const sal_uInt16 EXC_ID_CHMARKERFORMAT          = 0x1009;
     274             : 
     275             : const sal_uInt16 EXC_CHMARKERFORMAT_NOSYMBOL    = 0;
     276             : const sal_uInt16 EXC_CHMARKERFORMAT_SQUARE      = 1;
     277             : const sal_uInt16 EXC_CHMARKERFORMAT_DIAMOND     = 2;
     278             : const sal_uInt16 EXC_CHMARKERFORMAT_TRIANGLE    = 3;
     279             : const sal_uInt16 EXC_CHMARKERFORMAT_CROSS       = 4;
     280             : const sal_uInt16 EXC_CHMARKERFORMAT_STAR        = 5;
     281             : const sal_uInt16 EXC_CHMARKERFORMAT_DOWJ        = 6;
     282             : const sal_uInt16 EXC_CHMARKERFORMAT_STDDEV      = 7;
     283             : const sal_uInt16 EXC_CHMARKERFORMAT_CIRCLE      = 8;
     284             : const sal_uInt16 EXC_CHMARKERFORMAT_PLUS        = 9;
     285             : 
     286             : const sal_uInt32 EXC_CHMARKERFORMAT_HAIRSIZE    = 60;       /// Automatic symbol size for hair lines.
     287             : const sal_uInt32 EXC_CHMARKERFORMAT_SINGLESIZE  = 100;      /// Automatic symbol size for single lines.
     288             : const sal_uInt32 EXC_CHMARKERFORMAT_DOUBLESIZE  = 140;      /// Automatic symbol size for double lines.
     289             : const sal_uInt32 EXC_CHMARKERFORMAT_TRIPLESIZE  = 180;      /// Automatic symbol size for triple lines.
     290             : 
     291             : const sal_uInt16 EXC_CHMARKERFORMAT_AUTO        = 0x0001;
     292             : const sal_uInt16 EXC_CHMARKERFORMAT_NOFILL      = 0x0010;
     293             : const sal_uInt16 EXC_CHMARKERFORMAT_NOLINE      = 0x0020;
     294             : 
     295             : // (0x100A) CHAREAFORMAT ------------------------------------------------------
     296             : 
     297             : const sal_uInt16 EXC_ID_CHAREAFORMAT            = 0x100A;
     298             : 
     299             : const sal_uInt16 EXC_CHAREAFORMAT_AUTO          = 0x0001;
     300             : const sal_uInt16 EXC_CHAREAFORMAT_INVERTNEG     = 0x0002;
     301             : 
     302             : // (0x100B) CHPIEFORMAT -------------------------------------------------------
     303             : 
     304             : const sal_uInt16 EXC_ID_CHPIEFORMAT             = 0x100B;
     305             : 
     306             : // (0x100C) CHATTACHEDLABEL ---------------------------------------------------
     307             : 
     308             : const sal_uInt16 EXC_ID_CHATTACHEDLABEL         = 0x100C;
     309             : 
     310             : const sal_uInt16 EXC_CHATTLABEL_SHOWVALUE       = 0x0001;
     311             : const sal_uInt16 EXC_CHATTLABEL_SHOWPERCENT     = 0x0002;
     312             : const sal_uInt16 EXC_CHATTLABEL_SHOWCATEGPERC   = 0x0004;
     313             : const sal_uInt16 EXC_CHATTLABEL_SMOOTHED        = 0x0008;   /// Smoothed line.
     314             : const sal_uInt16 EXC_CHATTLABEL_SHOWCATEG       = 0x0010;
     315             : const sal_uInt16 EXC_CHATTLABEL_SHOWBUBBLE      = 0x0020;
     316             : 
     317             : // (0x100D) CHSTRING ----------------------------------------------------------
     318             : 
     319             : const sal_uInt16 EXC_ID_CHSTRING                = 0x100D;
     320             : 
     321             : // (0x1014) CHTYPEGROUP -------------------------------------------------------
     322             : 
     323             : const sal_uInt16 EXC_ID_CHTYPEGROUP             = 0x1014;
     324             : 
     325             : const sal_uInt16 EXC_CHTYPEGROUP_VARIEDCOLORS   = 0x0001;   /// Varied colors for points.
     326             : 
     327             : // (0x1015) CHLEGEND ----------------------------------------------------------
     328             : 
     329             : const sal_uInt16 EXC_ID_CHLEGEND                = 0x1015;
     330             : 
     331             : const sal_uInt8 EXC_CHLEGEND_BOTTOM             = 0;
     332             : const sal_uInt8 EXC_CHLEGEND_CORNER             = 1;
     333             : const sal_uInt8 EXC_CHLEGEND_TOP                = 2;
     334             : const sal_uInt8 EXC_CHLEGEND_RIGHT              = 3;
     335             : const sal_uInt8 EXC_CHLEGEND_LEFT               = 4;
     336             : const sal_uInt8 EXC_CHLEGEND_NOTDOCKED          = 7;
     337             : 
     338             : const sal_uInt8 EXC_CHLEGEND_CLOSE              = 0;
     339             : const sal_uInt8 EXC_CHLEGEND_MEDIUM             = 1;
     340             : const sal_uInt8 EXC_CHLEGEND_OPEN               = 2;
     341             : 
     342             : const sal_uInt16 EXC_CHLEGEND_DOCKED            = 0x0001;
     343             : const sal_uInt16 EXC_CHLEGEND_AUTOSERIES        = 0x0002;
     344             : const sal_uInt16 EXC_CHLEGEND_AUTOPOSX          = 0x0004;
     345             : const sal_uInt16 EXC_CHLEGEND_AUTOPOSY          = 0x0008;
     346             : const sal_uInt16 EXC_CHLEGEND_STACKED           = 0x0010;
     347             : const sal_uInt16 EXC_CHLEGEND_DATATABLE         = 0x0020;
     348             : 
     349             : // (0x1017) CHBAR, CHCOLUMN ---------------------------------------------------
     350             : 
     351             : const sal_uInt16 EXC_ID_CHBAR                   = 0x1017;
     352             : 
     353             : const sal_uInt16 EXC_CHBAR_HORIZONTAL           = 0x0001;
     354             : const sal_uInt16 EXC_CHBAR_STACKED              = 0x0002;
     355             : const sal_uInt16 EXC_CHBAR_PERCENT              = 0x0004;
     356             : const sal_uInt16 EXC_CHBAR_SHADOW               = 0x0008;
     357             : 
     358             : // (0x1018, 0x101A) CHLINE, CHAREA --------------------------------------------
     359             : 
     360             : const sal_uInt16 EXC_ID_CHLINE                  = 0x1018;
     361             : const sal_uInt16 EXC_ID_CHAREA                  = 0x101A;
     362             : 
     363             : const sal_uInt16 EXC_CHLINE_STACKED             = 0x0001;
     364             : const sal_uInt16 EXC_CHLINE_PERCENT             = 0x0002;
     365             : const sal_uInt16 EXC_CHLINE_SHADOW              = 0x0004;
     366             : 
     367             : // (0x1019) CHPIE -------------------------------------------------------------
     368             : 
     369             : const sal_uInt16 EXC_ID_CHPIE                   = 0x1019;
     370             : 
     371             : const sal_uInt16 EXC_CHPIE_SHADOW               = 0x0001;
     372             : const sal_uInt16 EXC_CHPIE_LINES                = 0x0002;
     373             : 
     374             : // (0x101B) CHSCATTER ---------------------------------------------------------
     375             : 
     376             : const sal_uInt16 EXC_ID_CHSCATTER               = 0x101B;
     377             : 
     378             : const sal_uInt16 EXC_CHSCATTER_AREA             = 1;        /// Bubble area refers to value.
     379             : const sal_uInt16 EXC_CHSCATTER_WIDTH            = 2;        /// Bubble width refers to value.
     380             : 
     381             : const sal_uInt16 EXC_CHSCATTER_BUBBLES          = 0x0001;
     382             : const sal_uInt16 EXC_CHSCATTER_SHOWNEG          = 0x0002;
     383             : const sal_uInt16 EXC_CHSCATTER_SHADOW           = 0x0004;
     384             : 
     385             : // (0x001C) CHCHARTLINE -------------------------------------------------------
     386             : 
     387             : const sal_uInt16 EXC_ID_CHCHARTLINE             = 0x101C;
     388             : 
     389             : const sal_uInt16 EXC_CHCHARTLINE_DROP           = 0;        /// Drop lines.
     390             : const sal_uInt16 EXC_CHCHARTLINE_HILO           = 1;        /// Hi-lo lines.
     391             : const sal_uInt16 EXC_CHCHARTLINE_CONNECT        = 2;        /// Connector lines in stacked bar charts.
     392             : 
     393             : // (0x101D) CHAXIS ------------------------------------------------------------
     394             : 
     395             : const sal_uInt16 EXC_ID_CHAXIS                  = 0x101D;
     396             : 
     397             : const sal_uInt16 EXC_CHAXIS_X                   = 0;
     398             : const sal_uInt16 EXC_CHAXIS_Y                   = 1;
     399             : const sal_uInt16 EXC_CHAXIS_Z                   = 2;
     400             : const sal_uInt16 EXC_CHAXIS_NONE                = 0xFFFF;   /// For internal use only.
     401             : 
     402             : // (0x101E) CHTICK ------------------------------------------------------------
     403             : 
     404             : const sal_uInt16 EXC_ID_CHTICK                  = 0x101E;
     405             : 
     406             : const sal_uInt8 EXC_CHTICK_INSIDE               = 0x01;
     407             : const sal_uInt8 EXC_CHTICK_OUTSIDE              = 0x02;
     408             : 
     409             : const sal_uInt8 EXC_CHTICK_NOLABEL              = 0;
     410             : const sal_uInt8 EXC_CHTICK_LOW                  = 1;        /// Below diagram/right of diagram.
     411             : const sal_uInt8 EXC_CHTICK_HIGH                 = 2;        /// Above diagram/left of diagram.
     412             : const sal_uInt8 EXC_CHTICK_NEXT                 = 3;        /// Next to axis.
     413             : 
     414             : const sal_uInt8 EXC_CHTICK_TRANSPARENT          = 1;
     415             : const sal_uInt8 EXC_CHTICK_OPAQUE               = 2;
     416             : 
     417             : const sal_uInt16 EXC_CHTICK_AUTOCOLOR           = 0x0001;
     418             : const sal_uInt16 EXC_CHTICK_AUTOFILL            = 0x0002;
     419             : const sal_uInt16 EXC_CHTICK_AUTOROT             = 0x0020;
     420             : 
     421             : // (0x101F) CHVALUERANGE ------------------------------------------------------
     422             : 
     423             : const sal_uInt16 EXC_ID_CHVALUERANGE            = 0x101F;
     424             : 
     425             : const sal_uInt16 EXC_CHVALUERANGE_AUTOMIN       = 0x0001;
     426             : const sal_uInt16 EXC_CHVALUERANGE_AUTOMAX       = 0x0002;
     427             : const sal_uInt16 EXC_CHVALUERANGE_AUTOMAJOR     = 0x0004;
     428             : const sal_uInt16 EXC_CHVALUERANGE_AUTOMINOR     = 0x0008;
     429             : const sal_uInt16 EXC_CHVALUERANGE_AUTOCROSS     = 0x0010;
     430             : const sal_uInt16 EXC_CHVALUERANGE_LOGSCALE      = 0x0020;
     431             : const sal_uInt16 EXC_CHVALUERANGE_REVERSE       = 0x0040;   /// Axis direction reversed.
     432             : const sal_uInt16 EXC_CHVALUERANGE_MAXCROSS      = 0x0080;   /// Other axis crosses at own maximum.
     433             : const sal_uInt16 EXC_CHVALUERANGE_BIT8          = 0x0100;   /// This bit is always set in BIFF5+.
     434             : 
     435             : // (0x1020) CHLABELRANGE -----------------------------------------------------
     436             : 
     437             : const sal_uInt16 EXC_ID_CHLABELRANGE            = 0x1020;
     438             : 
     439             : const sal_uInt16 EXC_CHLABELRANGE_BETWEEN       = 0x0001;   /// Axis between categories.
     440             : const sal_uInt16 EXC_CHLABELRANGE_MAXCROSS      = 0x0002;   /// Other axis crosses at own maximum.
     441             : const sal_uInt16 EXC_CHLABELRANGE_REVERSE       = 0x0004;   /// Axis direction reversed.
     442             : 
     443             : // (0x1021) CHAXISLINE --------------------------------------------------------
     444             : 
     445             : const sal_uInt16 EXC_ID_CHAXISLINE              = 0x1021;
     446             : 
     447             : const sal_uInt16 EXC_CHAXISLINE_AXISLINE        = 0;        /// Axis line itself.
     448             : const sal_uInt16 EXC_CHAXISLINE_MAJORGRID       = 1;        /// Major grid line.
     449             : const sal_uInt16 EXC_CHAXISLINE_MINORGRID       = 2;        /// Minor grid line.
     450             : const sal_uInt16 EXC_CHAXISLINE_WALLS           = 3;        /// Walls (X, Z axis), floor (Y axis).
     451             : 
     452             : // (0x1024) CHDEFAULTTEXT -----------------------------------------------------
     453             : 
     454             : const sal_uInt16 EXC_ID_CHDEFAULTTEXT           = 0x1024;
     455             : 
     456             : const sal_uInt16 EXC_CHDEFTEXT_TEXTLABEL        = 0;        /// Default for text data labels (not used?).
     457             : const sal_uInt16 EXC_CHDEFTEXT_NUMLABEL         = 1;        /// Default for numeric data labels (not used?).
     458             : const sal_uInt16 EXC_CHDEFTEXT_GLOBAL           = 2;        /// Default text for all chart objects.
     459             : const sal_uInt16 EXC_CHDEFTEXT_AXESSET          = 3;        /// Default text for axes and data points (BIFF8 only).
     460             : const sal_uInt16 EXC_CHDEFTEXT_NONE             = 0xFFFF;   /// No default text available.
     461             : 
     462             : // (0x1025) CHTEXT ------------------------------------------------------------
     463             : 
     464             : const sal_uInt16 EXC_ID_CHTEXT                  = 0x1025;
     465             : 
     466             : const sal_uInt8 EXC_CHTEXT_ALIGN_TOPLEFT        = 1;        /// Horizontal: left, vertical: top.
     467             : const sal_uInt8 EXC_CHTEXT_ALIGN_CENTER         = 2;
     468             : const sal_uInt8 EXC_CHTEXT_ALIGN_BOTTOMRIGHT    = 3;        /// Horizontal: right, vertical: bottom.
     469             : const sal_uInt8 EXC_CHTEXT_ALIGN_JUSTIFY        = 4;
     470             : const sal_uInt8 EXC_CHTEXT_ALIGN_DISTRIBUTE     = 5;
     471             : 
     472             : const sal_uInt16 EXC_CHTEXT_TRANSPARENT         = 1;
     473             : const sal_uInt16 EXC_CHTEXT_OPAQUE              = 2;
     474             : 
     475             : const sal_uInt16 EXC_CHTEXT_AUTOCOLOR           = 0x0001;   /// Automatic text color.
     476             : const sal_uInt16 EXC_CHTEXT_SHOWSYMBOL          = 0x0002;   /// Legend symbol for data point caption.
     477             : const sal_uInt16 EXC_CHTEXT_SHOWVALUE           = 0x0004;   /// Data point caption is the value.
     478             : const sal_uInt16 EXC_CHTEXT_VERTICAL            = 0x0008;
     479             : const sal_uInt16 EXC_CHTEXT_AUTOTEXT            = 0x0010;   /// Label text generated from chart data.
     480             : const sal_uInt16 EXC_CHTEXT_AUTOGEN             = 0x0020;   /// Text object is inserted automatically.
     481             : const sal_uInt16 EXC_CHTEXT_DELETED             = 0x0040;   /// Text object is removed.
     482             : const sal_uInt16 EXC_CHTEXT_AUTOFILL            = 0x0080;   /// Automatic text background mode (transparent/opaque).
     483             : const sal_uInt16 EXC_CHTEXT_SHOWCATEGPERC       = 0x0800;   /// Data point caption is category and percent.
     484             : const sal_uInt16 EXC_CHTEXT_SHOWPERCENT         = 0x1000;   /// Data point caption as percent.
     485             : const sal_uInt16 EXC_CHTEXT_SHOWBUBBLE          = 0x2000;   /// Show bubble size.
     486             : const sal_uInt16 EXC_CHTEXT_SHOWCATEG           = 0x4000;   /// Data point caption is category name.
     487             : 
     488             : const sal_uInt16 EXC_CHTEXT_POS_DEFAULT         = 0;
     489             : const sal_uInt16 EXC_CHTEXT_POS_OUTSIDE         = 1;
     490             : const sal_uInt16 EXC_CHTEXT_POS_INSIDE          = 2;
     491             : const sal_uInt16 EXC_CHTEXT_POS_CENTER          = 3;
     492             : const sal_uInt16 EXC_CHTEXT_POS_AXIS            = 4;
     493             : const sal_uInt16 EXC_CHTEXT_POS_ABOVE           = 5;
     494             : const sal_uInt16 EXC_CHTEXT_POS_BELOW           = 6;
     495             : const sal_uInt16 EXC_CHTEXT_POS_LEFT            = 7;
     496             : const sal_uInt16 EXC_CHTEXT_POS_RIGHT           = 8;
     497             : const sal_uInt16 EXC_CHTEXT_POS_AUTO            = 9;
     498             : const sal_uInt16 EXC_CHTEXT_POS_MOVED           = 10;
     499             : 
     500             : // (0x1026) CHFONT ------------------------------------------------------------
     501             : 
     502             : const sal_uInt16 EXC_ID_CHFONT                  = 0x1026;
     503             : 
     504             : // (0x1027) CHOBJECTLINK ------------------------------------------------------
     505             : 
     506             : const sal_uInt16 EXC_ID_CHOBJECTLINK            = 0x1027;
     507             : 
     508             : // link targets
     509             : const sal_uInt16 EXC_CHOBJLINK_NONE             = 0;        /// No link target.
     510             : const sal_uInt16 EXC_CHOBJLINK_TITLE            = 1;        /// Chart title.
     511             : const sal_uInt16 EXC_CHOBJLINK_YAXIS            = 2;        /// Value axis (Y axis).
     512             : const sal_uInt16 EXC_CHOBJLINK_XAXIS            = 3;        /// Category axis (X axis).
     513             : const sal_uInt16 EXC_CHOBJLINK_DATA             = 4;        /// Data series/point.
     514             : const sal_uInt16 EXC_CHOBJLINK_ZAXIS            = 7;        /// Series axis (Z axis).
     515             : const sal_uInt16 EXC_CHOBJLINK_AXISUNIT         = 12;       /// Unit name for axis labels.
     516             : 
     517             : // (0x1032) CHFRAME -----------------------------------------------------------
     518             : 
     519             : const sal_uInt16 EXC_ID_CHFRAME                 = 0x1032;
     520             : 
     521             : const sal_uInt16 EXC_CHFRAME_STANDARD           = 0;
     522             : const sal_uInt16 EXC_CHFRAME_SHADOW             = 4;
     523             : 
     524             : const sal_uInt16 EXC_CHFRAME_AUTOSIZE           = 0x0001;
     525             : const sal_uInt16 EXC_CHFRAME_AUTOPOS            = 0x0002;
     526             : 
     527             : // (0x1033, 0x1034) CHBEGIN, CHEND --------------------------------------------
     528             : 
     529             : const sal_uInt16 EXC_ID_CHBEGIN                 = 0x1033;
     530             : const sal_uInt16 EXC_ID_CHEND                   = 0x1034;
     531             : 
     532             : // (0x1035) CHPLOTFRAME -------------------------------------------------------
     533             : 
     534             : const sal_uInt16 EXC_ID_CHPLOTFRAME             = 0x1035;
     535             : 
     536             : // (0x103A) CHCHART3D ---------------------------------------------------------
     537             : 
     538             : const sal_uInt16 EXC_ID_CHCHART3D               = 0x103A;
     539             : 
     540             : const sal_uInt16 EXC_CHCHART3D_REAL3D           = 0x0001;   /// true = real 3d perspective.
     541             : const sal_uInt16 EXC_CHCHART3D_CLUSTER          = 0x0002;   /// false = Z axis, true = clustered/stacked.
     542             : const sal_uInt16 EXC_CHCHART3D_AUTOHEIGHT       = 0x0004;   /// true = automatic height to width ratio.
     543             : const sal_uInt16 EXC_CHCHART3D_HASWALLS         = 0x0010;   /// true = 3d chart has walls/floor.
     544             : const sal_uInt16 EXC_CHCHART3D_2DWALLS          = 0x0020;   /// true = 2d wall/gridlines, no floor.
     545             : 
     546             : // (0x103C) CHPICFORMAT -------------------------------------------------------
     547             : 
     548             : const sal_uInt16 EXC_ID_CHPICFORMAT             = 0x103C;
     549             : 
     550             : const sal_uInt16 EXC_CHPICFORMAT_NONE           = 0;        /// For internal use only.
     551             : const sal_uInt16 EXC_CHPICFORMAT_STRETCH        = 1;        /// Bitmap stretched to area.
     552             : const sal_uInt16 EXC_CHPICFORMAT_STACK          = 2;        /// Bitmap stacked.
     553             : const sal_uInt16 EXC_CHPICFORMAT_SCALE          = 3;        /// Bitmap scaled to axis scale.
     554             : 
     555             : const sal_uInt16 EXC_CHPICFORMAT_TOPBOTTOM      = 0x0200;
     556             : const sal_uInt16 EXC_CHPICFORMAT_FRONTBACK      = 0x0400;
     557             : const sal_uInt16 EXC_CHPICFORMAT_LEFTRIGHT      = 0x0800;
     558             : 
     559             : // (0x103D) CHDROPBAR ---------------------------------------------------------
     560             : 
     561             : const sal_uInt16 EXC_ID_CHDROPBAR               = 0x103D;
     562             : 
     563             : const sal_uInt16 EXC_CHDROPBAR_UP               = 0;
     564             : const sal_uInt16 EXC_CHDROPBAR_DOWN             = 1;
     565             : const sal_uInt16 EXC_CHDROPBAR_NONE             = 0xFFFF;
     566             : 
     567             : // (0x103E, 0x1040) CHRADARLINE, CHRADARAREA ----------------------------------
     568             : 
     569             : const sal_uInt16 EXC_ID_CHRADARLINE             = 0x103E;
     570             : const sal_uInt16 EXC_ID_CHRADARAREA             = 0x1040;
     571             : 
     572             : const sal_uInt16 EXC_CHRADAR_AXISLABELS         = 0x0001;
     573             : const sal_uInt16 EXC_CHRADAR_SHADOW             = 0x0002;
     574             : 
     575             : // (0x103F) CHSURFACE ---------------------------------------------------------
     576             : 
     577             : const sal_uInt16 EXC_ID_CHSURFACE               = 0x103F;
     578             : 
     579             : const sal_uInt16 EXC_CHSURFACE_FILLED           = 0x0001;
     580             : const sal_uInt16 EXC_CHSURFACE_SHADING          = 0x0002;
     581             : 
     582             : // (0x1041) CHAXESSET ---------------------------------------------------------
     583             : 
     584             : const sal_uInt16 EXC_ID_CHAXESSET               = 0x1041;
     585             : 
     586             : const sal_uInt16 EXC_CHAXESSET_PRIMARY          = 0;
     587             : const sal_uInt16 EXC_CHAXESSET_SECONDARY        = 1;
     588             : const sal_uInt16 EXC_CHAXESSET_NONE             = 0xFFFF;   /// For internal use.
     589             : 
     590             : // (0x1044) CHPROPERTIES ------------------------------------------------------
     591             : 
     592             : const sal_uInt16 EXC_ID_CHPROPERTIES            = 0x1044;
     593             : 
     594             : const sal_uInt16 EXC_CHPROPS_MANSERIES          = 0x0001;   /// Manual series allocation.
     595             : const sal_uInt16 EXC_CHPROPS_SHOWVISIBLEONLY    = 0x0002;   /// Show visible cells only.
     596             : const sal_uInt16 EXC_CHPROPS_NORESIZE           = 0x0004;   /// Do not resize chart with window.
     597             : const sal_uInt16 EXC_CHPROPS_MANPLOTAREA        = 0x0008;   /// Manual plot area mode.
     598             : const sal_uInt16 EXC_CHPROPS_USEMANPLOTAREA     = 0x0010;   /// Manual plot area layout in CHFRAMEPOS record.
     599             : 
     600             : const sal_uInt8 EXC_CHPROPS_EMPTY_SKIP          = 0;        /// Skip empty values.
     601             : const sal_uInt8 EXC_CHPROPS_EMPTY_ZERO          = 1;        /// Plot empty values as zero.
     602             : const sal_uInt8 EXC_CHPROPS_EMPTY_INTERPOLATE   = 2;        /// Interpolate empty values.
     603             : 
     604             : // (0x1045) CHSERGROUP --------------------------------------------------------
     605             : 
     606             : const sal_uInt16 EXC_ID_CHSERGROUP              = 0x1045;
     607             : 
     608             : const sal_uInt16 EXC_CHSERGROUP_NONE            = 0xFFFF;   /// For internal use: no chart type group.
     609             : 
     610             : // (0x1048, 0x0858) CHPIVOTREF ------------------------------------------------
     611             : 
     612             : const sal_uInt16 EXC_ID5_CHPIVOTREF             = 0x1048;
     613             : const sal_uInt16 EXC_ID8_CHPIVOTREF             = 0x0858;
     614             : 
     615             : // (0x104A) CHSERPARENT -------------------------------------------------------
     616             : 
     617             : const sal_uInt16 EXC_ID_CHSERPARENT             = 0x104A;
     618             : 
     619             : // (0x104B) CHSERTRENDLINE ----------------------------------------------------
     620             : 
     621             : const sal_uInt16 EXC_ID_CHSERTRENDLINE          = 0x104B;
     622             : 
     623             : const sal_uInt8 EXC_CHSERTREND_POLYNOMIAL       = 0;    /// If order is 1, trend line is linear.
     624             : const sal_uInt8 EXC_CHSERTREND_EXPONENTIAL      = 1;
     625             : const sal_uInt8 EXC_CHSERTREND_LOGARITHMIC      = 2;
     626             : const sal_uInt8 EXC_CHSERTREND_POWER            = 3;
     627             : const sal_uInt8 EXC_CHSERTREND_MOVING_AVG       = 4;
     628             : 
     629             : // (0x104E) CHFORMAT ----------------------------------------------------------
     630             : 
     631             : const sal_uInt16 EXC_ID_CHFORMAT                = 0x104E;
     632             : 
     633             : // (0x104F) CHFRAMEPOS --------------------------------------------------------
     634             : 
     635             : const sal_uInt16 EXC_ID_CHFRAMEPOS              = 0x104F;
     636             : 
     637             : const sal_uInt16 EXC_CHFRAMEPOS_POINTS          = 0;
     638             : const sal_uInt16 EXC_CHFRAMEPOS_ABSSIZE_POINTS  = 1;
     639             : const sal_uInt16 EXC_CHFRAMEPOS_PARENT          = 2;
     640             : const sal_uInt16 EXC_CHFRAMEPOS_DEFOFFSET_PLOT  = 3;
     641             : const sal_uInt16 EXC_CHFRAMEPOS_CHARTSIZE       = 5;
     642             : 
     643             : // (0x1050) CHFORMATRUNS ------------------------------------------------------
     644             : 
     645             : const sal_uInt16 EXC_ID_CHFORMATRUNS            = 0x1050;
     646             : 
     647             : // (0x1051) CHSOURCELINK ------------------------------------------------------
     648             : 
     649             : const sal_uInt16 EXC_ID_CHSOURCELINK            = 0x1051;
     650             : 
     651             : const sal_uInt8 EXC_CHSRCLINK_TITLE             = 0;
     652             : const sal_uInt8 EXC_CHSRCLINK_VALUES            = 1;
     653             : const sal_uInt8 EXC_CHSRCLINK_CATEGORY          = 2;
     654             : const sal_uInt8 EXC_CHSRCLINK_BUBBLES           = 3;
     655             : 
     656             : const sal_uInt8 EXC_CHSRCLINK_DEFAULT           = 0;
     657             : const sal_uInt8 EXC_CHSRCLINK_DIRECTLY          = 1;
     658             : const sal_uInt8 EXC_CHSRCLINK_WORKSHEET         = 2;
     659             : 
     660             : const sal_uInt16 EXC_CHSRCLINK_NUMFMT           = 0x0001;
     661             : 
     662             : // (0x105B) CHSERERRORBAR -----------------------------------------------------
     663             : 
     664             : const sal_uInt16 EXC_ID_CHSERERRORBAR           = 0x105B;
     665             : 
     666             : const sal_uInt8 EXC_CHSERERR_NONE               = 0;    /// For internal use only.
     667             : const sal_uInt8 EXC_CHSERERR_XPLUS              = 1;
     668             : const sal_uInt8 EXC_CHSERERR_XMINUS             = 2;
     669             : const sal_uInt8 EXC_CHSERERR_YPLUS              = 3;
     670             : const sal_uInt8 EXC_CHSERERR_YMINUS             = 4;
     671             : 
     672             : const sal_uInt8 EXC_CHSERERR_PERCENT            = 1;
     673             : const sal_uInt8 EXC_CHSERERR_FIXED              = 2;
     674             : const sal_uInt8 EXC_CHSERERR_STDDEV             = 3;
     675             : const sal_uInt8 EXC_CHSERERR_CUSTOM             = 4;
     676             : const sal_uInt8 EXC_CHSERERR_STDERR             = 5;
     677             : 
     678             : const sal_uInt8 EXC_CHSERERR_END_BLANK          = 0;    /// Line end: blank.
     679             : const sal_uInt8 EXC_CHSERERR_END_TSHAPE         = 1;    /// Line end: t-shape.
     680             : 
     681             : // (0x105D) CHSERIESFORMAT ----------------------------------------------------
     682             : 
     683             : const sal_uInt16 EXC_ID_CHSERIESFORMAT          = 0x105D;
     684             : 
     685             : const sal_uInt16 EXC_CHSERIESFORMAT_SMOOTHED    = 0x0001;
     686             : const sal_uInt16 EXC_CHSERIESFORMAT_BUBBLE3D    = 0x0002;
     687             : const sal_uInt16 EXC_CHSERIESFORMAT_SHADOW      = 0x0004;
     688             : 
     689             : // (0x105F) CH3DDATAFORMAT ----------------------------------------------------
     690             : 
     691             : const sal_uInt16 EXC_ID_CH3DDATAFORMAT          = 0x105F;
     692             : 
     693             : const sal_uInt8 EXC_CH3DDATAFORMAT_RECT         = 0;        /// Rectangular base.
     694             : const sal_uInt8 EXC_CH3DDATAFORMAT_CIRC         = 1;        /// Circular base.
     695             : 
     696             : const sal_uInt8 EXC_CH3DDATAFORMAT_STRAIGHT     = 0;        /// Straight to top.
     697             : const sal_uInt8 EXC_CH3DDATAFORMAT_SHARP        = 1;        /// Sharp top.
     698             : const sal_uInt8 EXC_CH3DDATAFORMAT_TRUNC        = 2;        /// Shart top, truncated.
     699             : 
     700             : // (0x1061) CHPIEEXT ----------------------------------------------------------
     701             : 
     702             : const sal_uInt16 EXC_ID_CHPIEEXT                = 0x1061;
     703             : 
     704             : // (0x1062) CHDATERANGE -------------------------------------------------------
     705             : 
     706             : const sal_uInt16 EXC_ID_CHDATERANGE             = 0x1062;
     707             : 
     708             : const sal_uInt16 EXC_CHDATERANGE_AUTOMIN        = 0x0001;
     709             : const sal_uInt16 EXC_CHDATERANGE_AUTOMAX        = 0x0002;
     710             : const sal_uInt16 EXC_CHDATERANGE_AUTOMAJOR      = 0x0004;
     711             : const sal_uInt16 EXC_CHDATERANGE_AUTOMINOR      = 0x0008;
     712             : const sal_uInt16 EXC_CHDATERANGE_DATEAXIS       = 0x0010;
     713             : const sal_uInt16 EXC_CHDATERANGE_AUTOBASE       = 0x0020;
     714             : const sal_uInt16 EXC_CHDATERANGE_AUTOCROSS      = 0x0040;   /// Other axis crosses at own maximum.
     715             : const sal_uInt16 EXC_CHDATERANGE_AUTODATE       = 0x0080;   /// Recognize date/text automatically.
     716             : 
     717             : const sal_uInt16 EXC_CHDATERANGE_DAYS           = 0;
     718             : const sal_uInt16 EXC_CHDATERANGE_MONTHS         = 1;
     719             : const sal_uInt16 EXC_CHDATERANGE_YEARS          = 2;
     720             : 
     721             : // (0x1066) CHESCHERFORMAT ----------------------------------------------------
     722             : 
     723             : const sal_uInt16 EXC_ID_CHESCHERFORMAT          = 0x1066;
     724             : 
     725             : // Other record IDs -----------------------------------------------------------
     726             : 
     727             : const sal_uInt16 EXC_ID_CHWRAPPEDRECORD         = 0x0851;
     728             : const sal_uInt16 EXC_ID_CHUNITPROPERTIES        = 0x0857;
     729             : const sal_uInt16 EXC_ID_CHUSEDAXESSETS          = 0x1046;
     730             : const sal_uInt16 EXC_ID_CHLABELRANGE2           = 0x1062;
     731             : const sal_uInt16 EXC_ID_CHPLOTGROWTH            = 0x1064;
     732             : const sal_uInt16 EXC_ID_CHSERINDEX              = 0x1065;
     733             : const sal_uInt16 EXC_ID_CHUNKNOWN               = 0xFFFF;
     734             : 
     735             : // Structs and classes
     736             : 
     737             : // Common =====================================================================
     738             : 
     739             : struct XclChRectangle
     740             : {
     741             :     sal_Int32           mnX;                /// X position of the object in 1/4000 of chart width.
     742             :     sal_Int32           mnY;                /// Y position of the object in 1/4000 of chart height.
     743             :     sal_Int32           mnWidth;            /// Width of the object in 1/4000 of chart width.
     744             :     sal_Int32           mnHeight;           /// Height of the object in 1/4000 of chart height.
     745             : 
     746             :     explicit            XclChRectangle();
     747             : };
     748             : 
     749             : /** Specifies the position of a data series or data point. */
     750             : struct XclChDataPointPos
     751             : {
     752             :     sal_uInt16          mnSeriesIdx;        /// Series index of series or a data point.
     753             :     sal_uInt16          mnPointIdx;         /// Index of a data point inside a series.
     754             : 
     755             :     explicit            XclChDataPointPos(
     756             :                             sal_uInt16 nSeriesIdx = EXC_CHSERIES_INVALID,
     757             :                             sal_uInt16 nPointIdx = EXC_CHDATAFORMAT_ALLPOINTS );
     758             : };
     759             : 
     760             : bool operator<( const XclChDataPointPos& rL, const XclChDataPointPos& rR );
     761             : 
     762             : /** Contains the type and context of a block of future records which are
     763             :     guarded by CHFRBLOCKBEGIN and CHFRBLOCKEND records. */
     764             : struct XclChFrBlock
     765             : {
     766             :     sal_uInt16          mnType;             /// Type of the future record block.
     767             :     sal_uInt16          mnContext;          /// Context dependent on type.
     768             :     sal_uInt16          mnValue1;           /// Optional primary value for current context.
     769             :     sal_uInt16          mnValue2;           /// Optional secondary value for current context.
     770             : 
     771             :     explicit            XclChFrBlock( sal_uInt16 nType );
     772             : };
     773             : 
     774             : // Frame formatting ===========================================================
     775             : 
     776             : struct XclChFramePos
     777             : {
     778             :     XclChRectangle      maRect;             /// Object dependent position data.
     779             :     sal_uInt16          mnTLMode;           /// Top-left position mode.
     780             :     sal_uInt16          mnBRMode;           /// Bottom-right position mode.
     781             : 
     782             :     explicit            XclChFramePos();
     783             : };
     784             : 
     785             : struct XclChLineFormat
     786             : {
     787             :     Color               maColor;            /// Line color.
     788             :     sal_uInt16          mnPattern;          /// Line pattern (solid, dashed, ...).
     789             :     sal_Int16           mnWeight;           /// Line weight (hairline, single, ...).
     790             :     sal_uInt16          mnFlags;            /// Additional flags.
     791             : 
     792             :     explicit            XclChLineFormat();
     793             : };
     794             : 
     795             : struct XclChAreaFormat
     796             : {
     797             :     Color               maPattColor;        /// Pattern color.
     798             :     Color               maBackColor;        /// Pattern background color.
     799             :     sal_uInt16          mnPattern;          /// Fill pattern.
     800             :     sal_uInt16          mnFlags;            /// Additional flags.
     801             : 
     802             :     explicit            XclChAreaFormat();
     803             : };
     804             : 
     805             : class SfxItemSet;
     806             : class EscherPropertyContainer;
     807             : 
     808             : struct XclChEscherFormat
     809             : {
     810             :     typedef std::shared_ptr< SfxItemSet >                SfxItemSetRef;
     811             :     typedef std::shared_ptr< EscherPropertyContainer >   EscherPropSetRef;
     812             : 
     813             :     SfxItemSetRef       mxItemSet;          /// Item set for Escher properties import.
     814             :     EscherPropSetRef    mxEscherSet;        /// Container for Escher properties export.
     815             : 
     816             :     explicit            XclChEscherFormat();
     817             :                         ~XclChEscherFormat();
     818             : };
     819             : 
     820             : struct XclChPicFormat
     821             : {
     822             :     sal_uInt16          mnBmpMode;          /// Bitmap mode, e.g. stretched, stacked.
     823             :     sal_uInt16          mnFlags;            /// Additional flags.
     824             :     double              mfScale;            /// Picture scaling (units).
     825             : 
     826             :     explicit            XclChPicFormat();
     827             : };
     828             : 
     829             : struct XclChFrame
     830             : {
     831             :     sal_uInt16          mnFormat;           /// Format type of the frame.
     832             :     sal_uInt16          mnFlags;            /// Additional flags.
     833             : 
     834             :     explicit            XclChFrame();
     835             : };
     836             : 
     837             : // Source links ===============================================================
     838             : 
     839             : struct XclChSourceLink
     840             : {
     841             :     sal_uInt8           mnDestType;         /// Type of the destination (title, values, ...).
     842             :     sal_uInt8           mnLinkType;         /// Link type (directly, linked to worksheet, ...).
     843             :     sal_uInt16          mnFlags;            /// Additional flags.
     844             :     sal_uInt16          mnNumFmtIdx;        /// Number format index.
     845             : 
     846             :     explicit            XclChSourceLink();
     847             : };
     848             : 
     849             : // Text =======================================================================
     850             : 
     851             : struct XclChObjectLink
     852             : {
     853             :     XclChDataPointPos   maPointPos;         /// Position of the data point.
     854             :     sal_uInt16          mnTarget;           /// Target of the link.
     855             : 
     856             :     explicit            XclChObjectLink();
     857             : };
     858             : 
     859           1 : struct XclChFrLabelProps
     860             : {
     861             :     OUString       maSeparator;        /// Separator between label values.
     862             :     sal_uInt16          mnFlags;            /// Flags indicating which values to be displayed.
     863             : 
     864             :     explicit            XclChFrLabelProps();
     865             : };
     866             : 
     867             : struct XclChText
     868             : {
     869             :     XclChRectangle      maRect;             /// Position of the text object.
     870             :     Color               maTextColor;        /// Text color.
     871             :     sal_uInt8           mnHAlign;           /// Horizontal alignment.
     872             :     sal_uInt8           mnVAlign;           /// Vertical alignment.
     873             :     sal_uInt16          mnBackMode;         /// Background mode: transparent, opaque.
     874             :     sal_uInt16          mnFlags;            /// Additional flags.
     875             :     sal_uInt16          mnFlags2;           /// Text object placement and text direction (BIFF8+).
     876             :     sal_uInt16          mnRotation;         /// Text object rotation (BIFF8+).
     877             : 
     878             :     explicit            XclChText();
     879             : };
     880             : 
     881             : // Data series ================================================================
     882             : 
     883             : struct XclChMarkerFormat
     884             : {
     885             :     Color               maLineColor;        /// Border line color.
     886             :     Color               maFillColor;        /// Fill color.
     887             :     sal_uInt32          mnMarkerSize;       /// Size of a marker
     888             :     sal_uInt16          mnMarkerType;       /// Marker type (none, diamond, ...).
     889             :     sal_uInt16          mnFlags;            /// Additional flags.
     890             : 
     891             :     explicit            XclChMarkerFormat();
     892             : };
     893             : 
     894             : struct XclCh3dDataFormat
     895             : {
     896             :     sal_uInt8           mnBase;             /// Base form.
     897             :     sal_uInt8           mnTop;              /// Top egde mode.
     898             : 
     899             :     explicit            XclCh3dDataFormat();
     900             : };
     901             : 
     902             : struct XclChDataFormat
     903             : {
     904             :     XclChDataPointPos   maPointPos;         /// Position of the data point or series.
     905             :     sal_uInt16          mnFormatIdx;        /// Formatting index for automatic colors.
     906             :     sal_uInt16          mnFlags;            /// Additional flags.
     907             : 
     908             :     explicit            XclChDataFormat();
     909             : };
     910             : 
     911             : struct XclChSerTrendLine
     912             : {
     913             :     double              mfIntercept;        /// Forced intercept.
     914             :     double              mfForecastFor;      /// Counter to forecast forward.
     915             :     double              mfForecastBack;     /// Counter to forecast backward.
     916             :     sal_uInt8           mnLineType;         /// Type of the trend line.
     917             :     sal_uInt8           mnOrder;            /// Polynomial order or moving average counter.
     918             :     sal_uInt8           mnShowEquation;     /// 1 = Show equation.
     919             :     sal_uInt8           mnShowRSquared;     /// 1 = Show R-squared.
     920             : 
     921             :     explicit            XclChSerTrendLine();
     922             : };
     923             : 
     924             : struct XclChSerErrorBar
     925             : {
     926             :     double              mfValue;            /// Fixed value for several source types.
     927             :     sal_uInt16          mnValueCount;       /// Number of custom error values.
     928             :     sal_uInt8           mnBarType;          /// Type of the error bar (X/Y).
     929             :     sal_uInt8           mnSourceType;       /// Type of source values.
     930             :     sal_uInt8           mnLineEnd;          /// Type of the line ends.
     931             : 
     932             :     explicit            XclChSerErrorBar();
     933             : };
     934             : 
     935             : struct XclChSeries
     936             : {
     937             :     sal_uInt16          mnCategType;        /// Data type for category entries.
     938             :     sal_uInt16          mnValueType;        /// Data type for value entries.
     939             :     sal_uInt16          mnBubbleType;       /// Data type for bubble entries.
     940             :     sal_uInt16          mnCategCount;       /// Number of category entries.
     941             :     sal_uInt16          mnValueCount;       /// Number of value entries.
     942             :     sal_uInt16          mnBubbleCount;      /// Number of bubble entries.
     943             : 
     944             :     explicit            XclChSeries();
     945             : };
     946             : 
     947             : // Chart type groups ==========================================================
     948             : 
     949             : struct XclChType
     950             : {
     951             :     sal_Int16           mnOverlap;          /// Bar overlap width (CHBAR).
     952             :     sal_Int16           mnGap;              /// Gap between bars (CHBAR).
     953             :     sal_uInt16          mnRotation;         /// Rotation angle of first pie (CHPIE).
     954             :     sal_uInt16          mnPieHole;          /// Hole size in donut chart (CHPIE).
     955             :     sal_uInt16          mnBubbleSize;       /// Bubble size in bubble chart (CHSCATTER).
     956             :     sal_uInt16          mnBubbleType;       /// Bubble type in bubble chart (CHSCATTER).
     957             :     sal_uInt16          mnFlags;            /// Additional flags (all chart types).
     958             : 
     959             :     explicit            XclChType();
     960             : };
     961             : 
     962             : struct XclChChart3d
     963             : {
     964             :     sal_uInt16          mnRotation;         /// Rotation (0...359deg).
     965             :     sal_Int16           mnElevation;        /// Elevation (-90...+90deg).
     966             :     sal_uInt16          mnEyeDist;          /// Eye distance to chart (0...100).
     967             :     sal_uInt16          mnRelHeight;        /// Height relative to width.
     968             :     sal_uInt16          mnRelDepth;         /// Depth relative to width.
     969             :     sal_uInt16          mnDepthGap;         /// Space between series.
     970             :     sal_uInt16          mnFlags;            /// Additional flags.
     971             : 
     972             :     explicit            XclChChart3d();
     973             : };
     974             : 
     975             : struct XclChLegend
     976             : {
     977             :     XclChRectangle      maRect;             /// Position of the legend.
     978             :     sal_uInt8           mnDockMode;         /// Docking mode.
     979             :     sal_uInt8           mnSpacing;          /// Spacing between elements.
     980             :     sal_uInt16          mnFlags;            /// Additional flags.
     981             : 
     982             :     explicit            XclChLegend();
     983             : };
     984             : 
     985             : struct XclChTypeGroup
     986             : {
     987             :     sal_uInt16          mnFlags;            /// Additional flags.
     988             :     sal_uInt16          mnGroupIdx;         /// Chart type group index.
     989             : 
     990             :     explicit            XclChTypeGroup();
     991             : };
     992             : 
     993             : struct XclChProperties
     994             : {
     995             :     sal_uInt16          mnFlags;            /// Additional flags.
     996             :     sal_uInt8           mnEmptyMode;        /// Plotting mode for empty cells.
     997             : 
     998             :     explicit            XclChProperties();
     999             : };
    1000             : 
    1001             : // Axes =======================================================================
    1002             : 
    1003             : struct XclChLabelRange
    1004             : {
    1005             :     sal_uInt16          mnCross;            /// Crossing position of other axis.
    1006             :     sal_uInt16          mnLabelFreq;        /// Frequency of labels.
    1007             :     sal_uInt16          mnTickFreq;         /// Frequency of ticks.
    1008             :     sal_uInt16          mnFlags;            /// Additional flags.
    1009             : 
    1010             :     explicit            XclChLabelRange();
    1011             : };
    1012             : 
    1013             : struct XclChDateRange
    1014             : {
    1015             :     sal_uInt16          mnMinDate;          /// Minimum value on axis.
    1016             :     sal_uInt16          mnMaxDate;          /// Maximum value on axis.
    1017             :     sal_uInt16          mnMajorStep;        /// Distance for major grid lines.
    1018             :     sal_uInt16          mnMajorUnit;        /// Time unit for major step.
    1019             :     sal_uInt16          mnMinorStep;        /// Distance for minor grid lines.
    1020             :     sal_uInt16          mnMinorUnit;        /// Time unit for minor step.
    1021             :     sal_uInt16          mnBaseUnit;         /// Time unit for axis values.
    1022             :     sal_uInt16          mnCross;            /// Crossing position of other axis.
    1023             :     sal_uInt16          mnFlags;            /// Additional flags.
    1024             : 
    1025             :     explicit            XclChDateRange();
    1026             : };
    1027             : 
    1028             : struct XclChValueRange
    1029             : {
    1030             :     double              mfMin;              /// Minimum value on axis.
    1031             :     double              mfMax;              /// Maximum value on axis.
    1032             :     double              mfMajorStep;        /// Distance for major grid lines.
    1033             :     double              mfMinorStep;        /// Distance for minor grid lines.
    1034             :     double              mfCross;            /// Crossing position of other axis.
    1035             :     sal_uInt16          mnFlags;            /// Additional flags.
    1036             : 
    1037             :     explicit            XclChValueRange();
    1038             : };
    1039             : 
    1040             : struct XclChTick
    1041             : {
    1042             :     Color               maTextColor;        /// Tick labels color.
    1043             :     sal_uInt8           mnMajor;            /// Type of tick marks of major grid.
    1044             :     sal_uInt8           mnMinor;            /// Type of tick marks of minor grid.
    1045             :     sal_uInt8           mnLabelPos;         /// Position of labels relative to axis.
    1046             :     sal_uInt8           mnBackMode;         /// Background mode: transparent, opaque.
    1047             :     sal_uInt16          mnFlags;            /// Additional flags.
    1048             :     sal_uInt16          mnRotation;         /// Tick labels angle (BIFF8+).
    1049             : 
    1050             :     explicit            XclChTick();
    1051             : };
    1052             : 
    1053             : struct XclChAxis
    1054             : {
    1055             :     sal_uInt16          mnType;             /// Axis type.
    1056             : 
    1057             :     explicit            XclChAxis();
    1058             : 
    1059             :     /** Returns the axis dimension index used by the chart API. */
    1060             :     sal_Int32           GetApiAxisDimension() const;
    1061             : };
    1062             : 
    1063             : struct XclChAxesSet
    1064             : {
    1065             :     XclChRectangle      maRect;             /// Position of the axes set (inner plot area).
    1066             :     sal_uInt16          mnAxesSetId;        /// Primary/secondary axes set.
    1067             : 
    1068             :     explicit            XclChAxesSet();
    1069             : 
    1070             :     /** Returns the axes set index used by the chart API. */
    1071             :     sal_Int32           GetApiAxesSetIndex() const;
    1072             : };
    1073             : 
    1074             : // Property mode ==============================================================
    1075             : 
    1076             : /** Specifies the type of a formatting. This results in different property names. */
    1077             : enum XclChPropertyMode
    1078             : {
    1079             :     EXC_CHPROPMODE_COMMON,          /// Common objects, no special handling.
    1080             :     EXC_CHPROPMODE_LINEARSERIES,    /// Specific to data series drawn as lines.
    1081             :     EXC_CHPROPMODE_FILLEDSERIES     /// Specific to data series drawn as areas.
    1082             : };
    1083             : 
    1084             : // Static helper functions ====================================================
    1085             : 
    1086             : /** Contains static helper functions for the chart filters. */
    1087             : class XclChartHelper
    1088             : {
    1089             : public:
    1090             :     /** Returns a palette index for automatic series line colors. */
    1091             :     static sal_uInt16   GetSeriesLineAutoColorIdx( sal_uInt16 nFormatIdx );
    1092             :     /** Returns a palette index for automatic series fill colors. */
    1093             :     static sal_uInt16   GetSeriesFillAutoColorIdx( sal_uInt16 nFormatIdx );
    1094             :     /** Returns a transparency value for automatic series fill colors. */
    1095             :     static sal_uInt8    GetSeriesFillAutoTransp( sal_uInt16 nFormatIdx );
    1096             :     /** Returns an automatic symbol index for the passed format index. */
    1097             :     static sal_uInt16   GetAutoMarkerType( sal_uInt16 nFormatIdx );
    1098             :     /** Returns true, if the passed marker type is filled. */
    1099             :     static bool         HasMarkerFillColor( sal_uInt16 nMarkerType );
    1100             :     /** Returns the role name for a manual data source for error bars. */
    1101             :     static OUString GetErrorBarValuesRole( sal_uInt8 nBarType );
    1102             : };
    1103             : 
    1104             : // Chart formatting info provider =============================================
    1105             : 
    1106             : /** Enumerates different object types for specific automatic formatting behaviour. */
    1107             : enum XclChObjectType
    1108             : {
    1109             :     EXC_CHOBJTYPE_BACKGROUND,       /// Chart background.
    1110             :     EXC_CHOBJTYPE_PLOTFRAME,        /// Wall formatting in 2d charts.
    1111             :     EXC_CHOBJTYPE_WALL3D,           /// Wall formatting in 3d charts.
    1112             :     EXC_CHOBJTYPE_FLOOR3D,          /// Floor formatting in 3d charts.
    1113             :     EXC_CHOBJTYPE_TEXT,             /// Text boxes (titles, data point labels).
    1114             :     EXC_CHOBJTYPE_LEGEND,           /// Chart legend.
    1115             :     EXC_CHOBJTYPE_LINEARSERIES,     /// Series formatting in a chart supporting line formatting only.
    1116             :     EXC_CHOBJTYPE_FILLEDSERIES,     /// Series formatting in a chart supporting area formatting.
    1117             :     EXC_CHOBJTYPE_AXISLINE,         /// Axis line format.
    1118             :     EXC_CHOBJTYPE_GRIDLINE,         /// Axis grid line format.
    1119             :     EXC_CHOBJTYPE_TRENDLINE,        /// Series trend line.
    1120             :     EXC_CHOBJTYPE_ERRORBAR,         /// Series error bar.
    1121             :     EXC_CHOBJTYPE_CONNECTLINE,      /// Data point connector line.
    1122             :     EXC_CHOBJTYPE_HILOLINE,         /// High/low lines in stock charts.
    1123             :     EXC_CHOBJTYPE_WHITEDROPBAR,     /// White-day drop bar in stock charts.
    1124             :     EXC_CHOBJTYPE_BLACKDROPBAR      /// Black-day drop bar in stock charts.
    1125             : };
    1126             : 
    1127             : /** Enumerates different types to handle missing frame objects. */
    1128             : enum XclChFrameType
    1129             : {
    1130             :      EXC_CHFRAMETYPE_AUTO,          /// Missing frame represents automatic formatting.
    1131             :      EXC_CHFRAMETYPE_INVISIBLE      /// Missing frame represents invisible formatting.
    1132             : };
    1133             : 
    1134             : /** Contains information about auto formatting of a specific chart object type. */
    1135             : struct XclChFormatInfo
    1136             : {
    1137             :     XclChObjectType     meObjType;          /// Object type for automatic format.
    1138             :     XclChPropertyMode   mePropMode;         /// Property mode for property set helper.
    1139             :     sal_uInt16          mnAutoLineColorIdx; /// Automatic line color index.
    1140             :     sal_Int16           mnAutoLineWeight;   /// Automatic line weight (hairline, single, ...).
    1141             :     sal_uInt16          mnAutoPattColorIdx; /// Automatic fill pattern color index.
    1142             :     XclChFrameType      meDefFrameType;     /// Default format type for missing frame objects.
    1143             :     bool                mbCreateDefFrame;   /// true = Create missing frame objects on import.
    1144             :     bool                mbDeleteDefFrame;   /// true = Delete default frame formatting on export.
    1145             :     bool                mbIsFrame;          /// true = Object is a frame, false = Object is a line.
    1146             : };
    1147             : 
    1148             : /** Provides access to chart auto formatting for all available object types. */
    1149          72 : class XclChFormatInfoProvider
    1150             : {
    1151             : public:
    1152             :     explicit            XclChFormatInfoProvider();
    1153             : 
    1154             :     /** Returns an info struct about auto formatting for the passed object type. */
    1155             :     const XclChFormatInfo& GetFormatInfo( XclChObjectType eObjType ) const;
    1156             : 
    1157             : private:
    1158             :     typedef ::std::map< XclChObjectType, const XclChFormatInfo* > XclFmtInfoMap;
    1159             :     XclFmtInfoMap       maInfoMap;          /// Maps object type to formatting data.
    1160             : };
    1161             : 
    1162             : // Chart type info provider ===================================================
    1163             : 
    1164             : /** Enumerates all kinds of different chart types. */
    1165             : enum XclChTypeId
    1166             : {
    1167             :     EXC_CHTYPEID_BAR,               /// Vertical bar chart.
    1168             :     EXC_CHTYPEID_HORBAR,            /// Horizontal bar chart.
    1169             :     EXC_CHTYPEID_LINE,              /// Line chart.
    1170             :     EXC_CHTYPEID_AREA,              /// Area chart.
    1171             :     EXC_CHTYPEID_STOCK,             /// Stock chart.
    1172             :     EXC_CHTYPEID_RADARLINE,         /// Linear radar chart.
    1173             :     EXC_CHTYPEID_RADARAREA,         /// Filled radar chart.
    1174             :     EXC_CHTYPEID_PIE,               /// Pie chart.
    1175             :     EXC_CHTYPEID_DONUT,             /// Donut chart.
    1176             :     EXC_CHTYPEID_PIEEXT,            /// Pie-to-pie or pie-to-bar chart.
    1177             :     EXC_CHTYPEID_SCATTER,           /// Scatter (XY) chart.
    1178             :     EXC_CHTYPEID_BUBBLES,           /// Bubble chart.
    1179             :     EXC_CHTYPEID_SURFACE,           /// Surface chart.
    1180             :     EXC_CHTYPEID_UNKNOWN            /// Default for unknown chart types.
    1181             : };
    1182             : 
    1183             : /** Enumerates different categories of similar chart types. */
    1184             : enum XclChTypeCateg
    1185             : {
    1186             :     EXC_CHTYPECATEG_BAR,            /// Bar charts (horizontal or vertical).
    1187             :     EXC_CHTYPECATEG_LINE,           /// Line charts (line, area, stock charts).
    1188             :     EXC_CHTYPECATEG_RADAR,          /// Radar charts (linear or filled).
    1189             :     EXC_CHTYPECATEG_PIE,            /// Pie and donut charts.
    1190             :     EXC_CHTYPECATEG_SCATTER,        /// Scatter and bubble charts.
    1191             :     EXC_CHTYPECATEG_SURFACE         /// Surface charts.
    1192             : };
    1193             : 
    1194             : /** Enumerates modes for varying point colors in a series. */
    1195             : enum XclChVarPointMode
    1196             : {
    1197             :     EXC_CHVARPOINT_NONE,            /// No varied colors supported.
    1198             :     EXC_CHVARPOINT_SINGLE,          /// Only supported, if type group contains only one series.
    1199             :     EXC_CHVARPOINT_MULTI            /// Supported for multiple series in a chart type group.
    1200             : };
    1201             : 
    1202             : /** Contains information for a chart type. */
    1203             : struct XclChTypeInfo
    1204             : {
    1205             :     XclChTypeId         meTypeId;               /// Unique chart type identifier.
    1206             :     XclChTypeCateg      meTypeCateg;            /// Chart type category this type belongs to.
    1207             :     sal_uInt16          mnRecId;                /// Record identifier written to the file.
    1208             :     const sal_Char*     mpcServiceName;         /// Service name of the type.
    1209             :     XclChVarPointMode   meVarPointMode;         /// Mode for varying point colors.
    1210             :     sal_Int32           mnDefaultLabelPos;      /// Default data label position (API constant).
    1211             :     bool                mbCombinable2d;         /// true = Types can be combined in one axes set.
    1212             :     bool                mbSupports3d;           /// true = 3d type allowed, false = Only 2d type.
    1213             :     bool                mbPolarCoordSystem;     /// true = Polar, false = Cartesian.
    1214             :     bool                mbSeriesIsFrame2d;      /// true = Series with area formatting (2d charts).
    1215             :     bool                mbSeriesIsFrame3d;      /// true = Series with area formatting (3d charts).
    1216             :     bool                mbSingleSeriesVis;      /// true = Only first series visible.
    1217             :     bool                mbCategoryAxis;         /// true = X axis contains categories.
    1218             :     bool                mbSwappedAxesSet;       /// true = X and Y axes are swapped.
    1219             :     bool                mbSupportsStacking;     /// true = Series can be stacked on each other.
    1220             :     bool                mbReverseSeries;        /// true = Insert unstacked series in reverse order.
    1221             :     bool                mbTicksBetweenCateg;    /// true = X axis ticks between categories.
    1222             : };
    1223             : 
    1224             : /** Extended chart type information and access functions. */
    1225             : struct XclChExtTypeInfo : public XclChTypeInfo
    1226             : {
    1227             :     bool                mb3dChart;              /// Chart is actually a 3D chart.
    1228             :     bool                mbSpline;               /// Series lines are smoothed.
    1229             : 
    1230             :     explicit            XclChExtTypeInfo( const XclChTypeInfo& rTypeInfo );
    1231             : 
    1232             :     void                Set( const XclChTypeInfo& rTypeInfo, bool b3dChart, bool bSpline );
    1233             : 
    1234             :     /** Returns true, if this chart type supports area formatting for its series. */
    1235         521 :     inline bool         IsSeriesFrameFormat() const
    1236         521 :                             { return mb3dChart ? mbSeriesIsFrame3d : mbSeriesIsFrame2d; }
    1237             :     /** Returns the correct object type identifier for series and data points. */
    1238         150 :     inline XclChObjectType GetSeriesObjectType() const
    1239         150 :                             { return IsSeriesFrameFormat() ? EXC_CHOBJTYPE_FILLEDSERIES : EXC_CHOBJTYPE_LINEARSERIES; }
    1240             : };
    1241             : 
    1242             : /** Provides access to chart type info structs for all available chart types. */
    1243          72 : class XclChTypeInfoProvider
    1244             : {
    1245             : public:
    1246             :     explicit            XclChTypeInfoProvider();
    1247             : 
    1248             :     /** Returns chart type info for a unique chart type identifier. */
    1249             :     const XclChTypeInfo& GetTypeInfo( XclChTypeId eType ) const;
    1250             :     /** Returns the first fitting chart type info for an Excel chart type record identifier. */
    1251             :     const XclChTypeInfo& GetTypeInfoFromRecId( sal_uInt16 nRecId ) const;
    1252             :     /** Returns the first fitting chart type info for the passed service name. */
    1253             :     const XclChTypeInfo& GetTypeInfoFromService( const OUString& rServiceName ) const;
    1254             : 
    1255             : private:
    1256             :     typedef ::std::map< XclChTypeId, const XclChTypeInfo* > XclChTypeInfoMap;
    1257             :     XclChTypeInfoMap    maInfoMap;          /// Maps chart types to type info data.
    1258             : };
    1259             : 
    1260             : // Chart text and title object helpers ========================================
    1261             : 
    1262             : /** Enumerates different text box types for default text formatting and title
    1263             :     positioning. */
    1264             : enum XclChTextType
    1265             : {
    1266             :     EXC_CHTEXTTYPE_TITLE,           /// Chart title.
    1267             :     EXC_CHTEXTTYPE_LEGEND,          /// Chart legend.
    1268             :     EXC_CHTEXTTYPE_AXISTITLE,       /// Chart axis titles.
    1269             :     EXC_CHTEXTTYPE_AXISLABEL,       /// Chart axis labels.
    1270             :     EXC_CHTEXTTYPE_DATALABEL        /// Data point labels.
    1271             : };
    1272             : 
    1273             : /** A map key for text and title objects. */
    1274             : struct XclChTextKey : public ::std::pair< XclChTextType, ::std::pair< sal_uInt16, sal_uInt16 > >
    1275             : {
    1276         453 :     inline explicit     XclChTextKey( XclChTextType eTextType, sal_uInt16 nMainIdx = 0, sal_uInt16 nSubIdx = 0 )
    1277         453 :                             { first = eTextType; second.first = nMainIdx; second.second = nSubIdx; }
    1278             : };
    1279             : 
    1280             : /** Function prototype receiving a chart document and returning a title shape. */
    1281             : typedef ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
    1282             :     (*XclChGetShapeFunc)( const ::com::sun::star::uno::Reference< ::com::sun::star::chart::XChartDocument >& );
    1283             : 
    1284             : // Property helpers ===========================================================
    1285             : 
    1286         288 : class XclChObjectTable
    1287             : {
    1288             : public:
    1289             :     typedef ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >     XNameContainerRef;
    1290             :     typedef ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >    XServiceFactoryRef;
    1291             : 
    1292             : public:
    1293             :     explicit            XclChObjectTable( XServiceFactoryRef xFactory,
    1294             :                             const OUString& rServiceName, const OUString& rObjNameBase );
    1295             : 
    1296             :     /** Returns a named formatting object from the chart document. */
    1297             :     ::com::sun::star::uno::Any GetObject( const OUString& rObjName );
    1298             :     /** Insertes a named formatting object into the chart document. */
    1299             :     OUString     InsertObject( const ::com::sun::star::uno::Any& rObj );
    1300             : 
    1301             : private:
    1302             :     XServiceFactoryRef  mxFactory;              /// Factory to create the container.
    1303             :     XNameContainerRef   mxContainer;            /// Container for the objects.
    1304             :     OUString     maServiceName;          /// Service name to create the container.
    1305             :     OUString     maObjNameBase;          /// Base of names for inserted objects.
    1306             :     sal_Int32           mnIndex;                /// Index to create unique identifiers.
    1307             : };
    1308             : 
    1309             : struct XclFontData;
    1310             : 
    1311             : /** Helper class for usage of property sets. */
    1312         156 : class XclChPropSetHelper
    1313             : {
    1314             : public:
    1315             :     explicit            XclChPropSetHelper();
    1316             : 
    1317             :     /** Reads all line properties from the passed property set. */
    1318             :     void                ReadLineProperties(
    1319             :                             XclChLineFormat& rLineFmt,
    1320             :                             XclChObjectTable& rDashTable,
    1321             :                             const ScfPropertySet& rPropSet,
    1322             :                             XclChPropertyMode ePropMode );
    1323             :     /** Reads solid area properties from the passed property set.
    1324             :         @return  true = object contains complex fill properties. */
    1325             :     bool                ReadAreaProperties(
    1326             :                             XclChAreaFormat& rAreaFmt,
    1327             :                             const ScfPropertySet& rPropSet,
    1328             :                             XclChPropertyMode ePropMode );
    1329             :     /** Reads gradient or bitmap area properties from the passed property set. */
    1330             :     void                ReadEscherProperties(
    1331             :                             XclChEscherFormat& rEscherFmt,
    1332             :                             XclChPicFormat& rPicFmt,
    1333             :                             XclChObjectTable& rGradientTable,
    1334             :                             XclChObjectTable& rHatchTable,
    1335             :                             XclChObjectTable& rBitmapTable,
    1336             :                             const ScfPropertySet& rPropSet,
    1337             :                             XclChPropertyMode ePropMode );
    1338             :     /** Reads all marker properties from the passed property set. */
    1339             :     static void         ReadMarkerProperties(
    1340             :                             XclChMarkerFormat& rMarkerFmt,
    1341             :                             const ScfPropertySet& rPropSet,
    1342             :                             sal_uInt16 nFormatIdx );
    1343             :     /** Reads rotation properties from the passed property set. */
    1344             :     static sal_uInt16   ReadRotationProperties(
    1345             :                             const ScfPropertySet& rPropSet,
    1346             :                             bool bSupportsStacked );
    1347             : 
    1348             :     /** Writes all line properties to the passed property set. */
    1349             :     void                WriteLineProperties(
    1350             :                             ScfPropertySet& rPropSet,
    1351             :                             XclChObjectTable& rDashTable,
    1352             :                             const XclChLineFormat& rLineFmt,
    1353             :                             XclChPropertyMode ePropMode );
    1354             :     /** Writes solid area properties to the passed property set. */
    1355             :     void                WriteAreaProperties(
    1356             :                             ScfPropertySet& rPropSet,
    1357             :                             const XclChAreaFormat& rAreaFmt,
    1358             :                             XclChPropertyMode ePropMode );
    1359             :     /** Writes gradient or bitmap area properties to the passed property set. */
    1360             :     void                WriteEscherProperties(
    1361             :                             ScfPropertySet& rPropSet,
    1362             :                             XclChObjectTable& rGradientTable,
    1363             :                             XclChObjectTable& rHatchTable,
    1364             :                             XclChObjectTable& rBitmapTable,
    1365             :                             const XclChEscherFormat& rEscherFmt,
    1366             :                             const XclChPicFormat* pPicFmt,
    1367             :                             sal_uInt32 nDffFillType,
    1368             :                             XclChPropertyMode ePropMode );
    1369             :     /** Writes all marker properties to the passed property set. */
    1370             :     static void         WriteMarkerProperties(
    1371             :                             ScfPropertySet& rPropSet,
    1372             :                             const XclChMarkerFormat& rMarkerFmt );
    1373             :     /** Writes rotation properties to the passed property set. */
    1374             :     static void         WriteRotationProperties(
    1375             :                             ScfPropertySet& rPropSet,
    1376             :                             sal_uInt16 nRotation,
    1377             :                             bool bSupportsStacked );
    1378             : 
    1379             : private:
    1380             :     /** Returns a line property set helper according to the passed property mode. */
    1381             :     ScfPropSetHelper&   GetLineHelper( XclChPropertyMode ePropMode );
    1382             :     /** Returns an area property set helper according to the passed property mode. */
    1383             :     ScfPropSetHelper&   GetAreaHelper( XclChPropertyMode ePropMode );
    1384             :     /** Returns a gradient property set helper according to the passed property mode. */
    1385             :     ScfPropSetHelper&   GetGradientHelper( XclChPropertyMode ePropMode );
    1386             :     /** Returns a hatch property set helper according to the passed property mode. */
    1387             :     ScfPropSetHelper&   GetHatchHelper( XclChPropertyMode ePropMode );
    1388             : 
    1389             : private:
    1390             :     ScfPropSetHelper    maLineHlpCommon;    /// Properties for lines in common objects.
    1391             :     ScfPropSetHelper    maLineHlpLinear;    /// Properties for lines in linear series.
    1392             :     ScfPropSetHelper    maLineHlpFilled;    /// Properties for lines in filled series.
    1393             :     ScfPropSetHelper    maAreaHlpCommon;    /// Properties for areas in common objects.
    1394             :     ScfPropSetHelper    maAreaHlpFilled;    /// Properties for areas in filled series.
    1395             :     ScfPropSetHelper    maGradHlpCommon;    /// Properties for gradients in common objects.
    1396             :     ScfPropSetHelper    maGradHlpFilled;    /// Properties for gradients in filled series.
    1397             :     ScfPropSetHelper    maHatchHlpCommon;   /// Properties for hatches in common objects.
    1398             :     ScfPropSetHelper    maHatchHlpFilled;   /// Properties for hatches in filled series.
    1399             :     ScfPropSetHelper    maBitmapHlp;        /// Properties for bitmaps.
    1400             : };
    1401             : 
    1402             : /** Base struct for internal root data structs for import and export. */
    1403             : struct XclChRootData
    1404             : {
    1405             :     typedef std::shared_ptr< XclChTypeInfoProvider >      XclChTypeProvRef;
    1406             :     typedef std::shared_ptr< XclChFormatInfoProvider >    XclChFmtInfoProvRef;
    1407             :     typedef std::shared_ptr< XclChObjectTable >           XclChObjectTableRef;
    1408             :     typedef ::std::map< XclChTextKey, XclChGetShapeFunc >   XclChGetShapeFuncMap;
    1409             : 
    1410             :     ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >
    1411             :                         mxChartDoc;             /// The chart document.
    1412             :     Rectangle           maChartRect;            /// Position and size of the chart shape.
    1413             :     XclChTypeProvRef    mxTypeInfoProv;         /// Provides info about chart types.
    1414             :     XclChFmtInfoProvRef mxFmtInfoProv;          /// Provides info about auto formatting.
    1415             :     XclChObjectTableRef mxLineDashTable;        /// Container for line dash styles.
    1416             :     XclChObjectTableRef mxGradientTable;        /// Container for gradient fill styles.
    1417             :     XclChObjectTableRef mxHatchTable;           /// Container for hatch fill styles.
    1418             :     XclChObjectTableRef mxBitmapTable;          /// Container for bitmap fill styles.
    1419             :     XclChGetShapeFuncMap maGetShapeFuncs;       /// Maps title shape getter functions.
    1420             :     sal_Int32           mnBorderGapX;           /// Border gap to chart space in 1/100mm.
    1421             :     sal_Int32           mnBorderGapY;           /// Border gap to chart space in 1/100mm.
    1422             :     double              mfUnitSizeX;            /// Size of a chart X unit (1/4000 of chart width) in 1/100 mm.
    1423             :     double              mfUnitSizeY;            /// Size of a chart Y unit (1/4000 of chart height) in 1/100 mm.
    1424             : 
    1425             :     explicit            XclChRootData();
    1426             :     virtual             ~XclChRootData();
    1427             : 
    1428             :     /** Starts the API chart document conversion. Must be called once before any API access. */
    1429             :     void                InitConversion(
    1430             :                             const XclRoot& rRoot,
    1431             :                             const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& rxChartDoc,
    1432             :                             const Rectangle& rChartRect );
    1433             :     /** Finishes the API chart document conversion. Must be called once before any API access. */
    1434             :     void                FinishConversion();
    1435             : 
    1436             :     /** Returns the drawing shape interface of the specified title object. */
    1437             :     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
    1438             :                         GetTitleShape( const XclChTextKey& rTitleKey ) const;
    1439             : };
    1440             : 
    1441             : #endif
    1442             : 
    1443             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11