|  | using System.Globalization; | 
|  | using OfficeOpenXml.Packaging; | 
|  | using OfficeOpenXml.Table.PivotTable; | 
|  | using System; | 
|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using System.Text; | 
|  | using System.Xml; | 
|  |  | 
|  | namespace OfficeOpenXml.Drawing.Chart | 
|  | { | 
|  | /// <summary> | 
|  | /// Provides access to bubble chart specific properties | 
|  | /// </summary> | 
|  | public sealed class ExcelBubbleChart : ExcelChart | 
|  | { | 
|  | internal ExcelBubbleChart(ExcelDrawings drawings, XmlNode node, eChartType type, ExcelChart topChart, ExcelPivotTable PivotTableSource) : | 
|  | base(drawings, node, type, topChart, PivotTableSource) | 
|  | { | 
|  | ShowNegativeBubbles = false; | 
|  | BubbleScale = 100; | 
|  | _chartSeries = new ExcelBubbleChartSeries(this, drawings.NameSpaceManager, _chartNode, PivotTableSource!=null); | 
|  | //SetTypeProperties(); | 
|  | } | 
|  |  | 
|  | internal ExcelBubbleChart(ExcelDrawings drawings, XmlNode node, eChartType type, bool isPivot) : | 
|  | base(drawings, node, type, isPivot) | 
|  | { | 
|  | _chartSeries = new ExcelBubbleChartSeries(this, drawings.NameSpaceManager, _chartNode, isPivot); | 
|  | //SetTypeProperties(); | 
|  | } | 
|  | internal ExcelBubbleChart(ExcelDrawings drawings, XmlNode node, Uri uriChart, ZipPackagePart part, XmlDocument chartXml, XmlNode chartNode) : | 
|  | base(drawings, node, uriChart, part, chartXml, chartNode) | 
|  | { | 
|  | _chartSeries = new ExcelBubbleChartSeries(this, _drawings.NameSpaceManager, _chartNode, false); | 
|  | //SetTypeProperties(); | 
|  | } | 
|  | internal ExcelBubbleChart(ExcelChart topChart, XmlNode chartNode) : | 
|  | base(topChart, chartNode) | 
|  | { | 
|  | _chartSeries = new ExcelBubbleChartSeries(this, _drawings.NameSpaceManager, _chartNode, false); | 
|  | } | 
|  | string BUBBLESCALE_PATH = "c:bubbleScale/@val"; | 
|  | /// <summary> | 
|  | /// Specifies the scale factor for the bubble chart. Can range from 0 to 300, corresponding to a percentage of the default size, | 
|  | /// </summary> | 
|  | public int BubbleScale | 
|  | { | 
|  | get | 
|  | { | 
|  | return _chartXmlHelper.GetXmlNodeInt(BUBBLESCALE_PATH); | 
|  | } | 
|  | set | 
|  | { | 
|  | if(value < 0 && value > 300) | 
|  | { | 
|  | throw(new ArgumentOutOfRangeException("Bubblescale out of range. 0-300 allowed")); | 
|  | } | 
|  | _chartXmlHelper.SetXmlNodeString(BUBBLESCALE_PATH, value.ToString()); | 
|  | } | 
|  | } | 
|  | string SHOWNEGBUBBLES_PATH = "c:showNegBubbles/@val"; | 
|  | /// <summary> | 
|  | /// Specifies the scale factor for the bubble chart. Can range from 0 to 300, corresponding to a percentage of the default size, | 
|  | /// </summary> | 
|  | public bool ShowNegativeBubbles | 
|  | { | 
|  | get | 
|  | { | 
|  | return _chartXmlHelper.GetXmlNodeBool(SHOWNEGBUBBLES_PATH); | 
|  | } | 
|  | set | 
|  | { | 
|  | _chartXmlHelper.SetXmlNodeBool(BUBBLESCALE_PATH, value, true); | 
|  | } | 
|  | } | 
|  | string BUBBLE3D_PATH = "c:bubble3D/@val"; | 
|  | /// <summary> | 
|  | /// Specifies if the bubblechart is three dimensional | 
|  | /// </summary> | 
|  | public bool Bubble3D | 
|  | { | 
|  | get | 
|  | { | 
|  | return _chartXmlHelper.GetXmlNodeBool(BUBBLE3D_PATH); | 
|  | } | 
|  | set | 
|  | { | 
|  | _chartXmlHelper.SetXmlNodeBool(BUBBLE3D_PATH, value); | 
|  | ChartType = value ? eChartType.Bubble3DEffect : eChartType.Bubble; | 
|  | } | 
|  | } | 
|  | string SIZEREPRESENTS_PATH = "c:sizeRepresents/@val"; | 
|  | /// <summary> | 
|  | /// Specifies the scale factor for the bubble chart. Can range from 0 to 300, corresponding to a percentage of the default size, | 
|  | /// </summary> | 
|  | public eSizeRepresents SizeRepresents | 
|  | { | 
|  | get | 
|  | { | 
|  | var v = _chartXmlHelper.GetXmlNodeString(SIZEREPRESENTS_PATH).ToLower(CultureInfo.InvariantCulture); | 
|  | if (v == "w") | 
|  | { | 
|  | return eSizeRepresents.Width; | 
|  | } | 
|  | else | 
|  | { | 
|  | return eSizeRepresents.Area; | 
|  | } | 
|  | } | 
|  | set | 
|  | { | 
|  | _chartXmlHelper.SetXmlNodeString(SIZEREPRESENTS_PATH, value == eSizeRepresents.Width ? "w" : "area"); | 
|  | } | 
|  | } | 
|  | public new ExcelBubbleChartSeries Series | 
|  | { | 
|  | get | 
|  | { | 
|  |  | 
|  | return (ExcelBubbleChartSeries)_chartSeries; | 
|  | } | 
|  | } | 
|  | internal override eChartType GetChartType(string name) | 
|  | { | 
|  | if (Bubble3D) | 
|  | { | 
|  | return eChartType.Bubble3DEffect; | 
|  | } | 
|  | else | 
|  | { | 
|  | return eChartType.Bubble; | 
|  | } | 
|  | } | 
|  | } | 
|  | } |