| 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; |
| } |
| } |
| } |
| } |