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 { /// /// Provides access to bubble chart specific properties /// 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"; /// /// Specifies the scale factor for the bubble chart. Can range from 0 to 300, corresponding to a percentage of the default size, /// 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"; /// /// Specifies the scale factor for the bubble chart. Can range from 0 to 300, corresponding to a percentage of the default size, /// public bool ShowNegativeBubbles { get { return _chartXmlHelper.GetXmlNodeBool(SHOWNEGBUBBLES_PATH); } set { _chartXmlHelper.SetXmlNodeBool(BUBBLESCALE_PATH, value, true); } } string BUBBLE3D_PATH = "c:bubble3D/@val"; /// /// Specifies if the bubblechart is three dimensional /// 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"; /// /// Specifies the scale factor for the bubble chart. Can range from 0 to 300, corresponding to a percentage of the default size, /// 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; } } } }