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