/*******************************************************************************
|
* You may amend and distribute as you like, but don't remove this header!
|
*
|
* EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
|
* See http://www.codeplex.com/EPPlus for details.
|
*
|
* Copyright (C) 2011 Jan Källman
|
*
|
* This library is free software; you can redistribute it and/or
|
* modify it under the terms of the GNU Lesser General Public
|
* License as published by the Free Software Foundation; either
|
* version 2.1 of the License, or (at your option) any later version.
|
|
* This library is distributed in the hope that it will be useful,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
* See the GNU Lesser General Public License for more details.
|
*
|
* The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
|
* If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
|
*
|
* All code and executables are provided "as is" with no warranty either express or implied.
|
* The author accepts no liability for any damage or loss of business that this product may cause.
|
*
|
* Code change notes:
|
*
|
* Author Change Date
|
*******************************************************************************
|
* Jan Källman Added 2009-10-01
|
* Jan Källman License changed GPL-->LGPL 2011-12-16
|
*******************************************************************************/
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using System.Xml;
|
using HH.WMS.Utils.EPPlus.Table.PivotTable;
|
|
namespace HH.WMS.Utils.EPPlus.Drawing.Chart
|
{
|
/// <summary>
|
/// Bar chart
|
/// </summary>
|
public sealed class ExcelBarChart : ExcelChart
|
{
|
#region "Constructors"
|
//internal ExcelBarChart(ExcelDrawings drawings, XmlNode node) :
|
// base(drawings, node/*, 1*/)
|
//{
|
// SetChartNodeText("");
|
//}
|
//internal ExcelBarChart(ExcelDrawings drawings, XmlNode node, eChartType type) :
|
// base(drawings, node, type)
|
//{
|
// SetChartNodeText("");
|
|
// SetTypeProperties(drawings, type);
|
//}
|
internal ExcelBarChart(ExcelDrawings drawings, XmlNode node, eChartType type, ExcelChart topChart, ExcelPivotTable PivotTableSource) :
|
base(drawings, node, type, topChart, PivotTableSource)
|
{
|
SetChartNodeText("");
|
|
SetTypeProperties(drawings, type);
|
}
|
|
internal ExcelBarChart(ExcelDrawings drawings, XmlNode node, Uri uriChart, System.IO.Packaging.PackagePart part, XmlDocument chartXml, XmlNode chartNode) :
|
base(drawings, node, uriChart, part, chartXml, chartNode)
|
{
|
SetChartNodeText(chartNode.Name);
|
}
|
|
internal ExcelBarChart(ExcelChart topChart, XmlNode chartNode) :
|
base(topChart, chartNode)
|
{
|
SetChartNodeText(chartNode.Name);
|
}
|
#endregion
|
#region "Private functions"
|
//string _chartTopPath="c:chartSpace/c:chart/c:plotArea/{0}";
|
private void SetChartNodeText(string chartNodeText)
|
{
|
if(string.IsNullOrEmpty(chartNodeText))
|
{
|
chartNodeText = GetChartNodeText();
|
}
|
//_chartTopPath = string.Format(_chartTopPath, chartNodeText);
|
//_directionPath = string.Format(_directionPath, _chartTopPath);
|
//_shapePath = string.Format(_shapePath, _chartTopPath);
|
}
|
private void SetTypeProperties(ExcelDrawings drawings, eChartType type)
|
{
|
/******* Bar direction *******/
|
if (type == eChartType.BarClustered ||
|
type == eChartType.BarStacked ||
|
type == eChartType.BarStacked100 ||
|
type == eChartType.BarClustered3D ||
|
type == eChartType.BarStacked3D ||
|
type == eChartType.BarStacked1003D ||
|
type == eChartType.ConeBarClustered ||
|
type == eChartType.ConeBarStacked ||
|
type == eChartType.ConeBarStacked100 ||
|
type == eChartType.CylinderBarClustered ||
|
type == eChartType.CylinderBarStacked ||
|
type == eChartType.CylinderBarStacked100 ||
|
type == eChartType.PyramidBarClustered ||
|
type == eChartType.PyramidBarStacked ||
|
type == eChartType.PyramidBarStacked100)
|
{
|
Direction = eDirection.Bar;
|
}
|
else if (
|
type == eChartType.ColumnClustered ||
|
type == eChartType.ColumnStacked ||
|
type == eChartType.ColumnStacked100 ||
|
type == eChartType.Column3D ||
|
type == eChartType.ColumnClustered3D ||
|
type == eChartType.ColumnStacked3D ||
|
type == eChartType.ColumnStacked1003D ||
|
type == eChartType.ConeCol ||
|
type == eChartType.ConeColClustered ||
|
type == eChartType.ConeColStacked ||
|
type == eChartType.ConeColStacked100 ||
|
type == eChartType.CylinderCol ||
|
type == eChartType.CylinderColClustered ||
|
type == eChartType.CylinderColStacked ||
|
type == eChartType.CylinderColStacked100 ||
|
type == eChartType.PyramidCol ||
|
type == eChartType.PyramidColClustered ||
|
type == eChartType.PyramidColStacked ||
|
type == eChartType.PyramidColStacked100)
|
{
|
Direction = eDirection.Column;
|
}
|
|
/****** Shape ******/
|
if (/*type == eChartType.ColumnClustered ||
|
type == eChartType.ColumnStacked ||
|
type == eChartType.ColumnStacked100 ||*/
|
type == eChartType.Column3D ||
|
type == eChartType.ColumnClustered3D ||
|
type == eChartType.ColumnStacked3D ||
|
type == eChartType.ColumnStacked1003D ||
|
/*type == eChartType.BarClustered ||
|
type == eChartType.BarStacked ||
|
type == eChartType.BarStacked100 ||*/
|
type == eChartType.BarClustered3D ||
|
type == eChartType.BarStacked3D ||
|
type == eChartType.BarStacked1003D)
|
{
|
Shape = eShape.Box;
|
}
|
else if (
|
type == eChartType.CylinderBarClustered ||
|
type == eChartType.CylinderBarStacked ||
|
type == eChartType.CylinderBarStacked100 ||
|
type == eChartType.CylinderCol ||
|
type == eChartType.CylinderColClustered ||
|
type == eChartType.CylinderColStacked ||
|
type == eChartType.CylinderColStacked100)
|
{
|
Shape = eShape.Cylinder;
|
}
|
else if (
|
type == eChartType.ConeBarClustered ||
|
type == eChartType.ConeBarStacked ||
|
type == eChartType.ConeBarStacked100 ||
|
type == eChartType.ConeCol ||
|
type == eChartType.ConeColClustered ||
|
type == eChartType.ConeColStacked ||
|
type == eChartType.ConeColStacked100)
|
{
|
Shape = eShape.Cone;
|
}
|
else if (
|
type == eChartType.PyramidBarClustered ||
|
type == eChartType.PyramidBarStacked ||
|
type == eChartType.PyramidBarStacked100 ||
|
type == eChartType.PyramidCol ||
|
type == eChartType.PyramidColClustered ||
|
type == eChartType.PyramidColStacked ||
|
type == eChartType.PyramidColStacked100)
|
{
|
Shape = eShape.Pyramid;
|
}
|
}
|
#endregion
|
#region "Properties"
|
string _directionPath = "c:barDir/@val";
|
/// <summary>
|
/// Direction, Bar or columns
|
/// </summary>
|
public eDirection Direction
|
{
|
get
|
{
|
return GetDirectionEnum(_chartXmlHelper.GetXmlNodeString(_directionPath));
|
}
|
internal set
|
{
|
_chartXmlHelper.SetXmlNodeString(_directionPath, GetDirectionText(value));
|
}
|
}
|
string _shapePath = "c:shape/@val";
|
/// <summary>
|
/// The shape of the bar/columns
|
/// </summary>
|
public eShape Shape
|
{
|
get
|
{
|
return GetShapeEnum(_chartXmlHelper.GetXmlNodeString(_shapePath));
|
}
|
internal set
|
{
|
_chartXmlHelper.SetXmlNodeString(_shapePath, GetShapeText(value));
|
}
|
}
|
ExcelChartDataLabel _DataLabel = null;
|
/// <summary>
|
/// Access to datalabel properties
|
/// </summary>
|
public ExcelChartDataLabel DataLabel
|
{
|
get
|
{
|
if (_DataLabel == null)
|
{
|
_DataLabel = new ExcelChartDataLabel(NameSpaceManager, ChartNode);
|
}
|
return _DataLabel;
|
}
|
}
|
#endregion
|
#region "Direction Enum Traslation"
|
private string GetDirectionText(eDirection direction)
|
{
|
switch (direction)
|
{
|
case eDirection.Bar:
|
return "bar";
|
default:
|
return "col";
|
}
|
}
|
|
private eDirection GetDirectionEnum(string direction)
|
{
|
switch (direction)
|
{
|
case "bar":
|
return eDirection.Bar;
|
default:
|
return eDirection.Column;
|
}
|
}
|
#endregion
|
#region "Shape Enum Translation"
|
private string GetShapeText(eShape Shape)
|
{
|
switch (Shape)
|
{
|
case eShape.Box:
|
return "box";
|
case eShape.Cone:
|
return "cone";
|
case eShape.ConeToMax:
|
return "coneToMax";
|
case eShape.Cylinder:
|
return "cylinder";
|
case eShape.Pyramid:
|
return "pyramid";
|
case eShape.PyramidToMax:
|
return "pyramidToMax";
|
default:
|
return "box";
|
}
|
}
|
|
private eShape GetShapeEnum(string text)
|
{
|
switch (text)
|
{
|
case "box":
|
return eShape.Box;
|
case "cone":
|
return eShape.Cone;
|
case "coneToMax":
|
return eShape.ConeToMax;
|
case "cylinder":
|
return eShape.Cylinder;
|
case "pyramid":
|
return eShape.Pyramid;
|
case "pyramidToMax":
|
return eShape.PyramidToMax;
|
default:
|
return eShape.Box;
|
}
|
}
|
#endregion
|
internal override eChartType GetChartType(string name)
|
{
|
if (name == "barChart")
|
{
|
if (this.Direction == eDirection.Bar)
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.BarStacked;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.BarStacked100;
|
}
|
else
|
{
|
return eChartType.BarClustered;
|
}
|
}
|
else
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.ColumnStacked;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.ColumnStacked100;
|
}
|
else
|
{
|
return eChartType.ColumnClustered;
|
}
|
}
|
}
|
if (name == "bar3DChart")
|
{
|
#region "Bar Shape"
|
if (this.Shape==eShape.Box)
|
{
|
if (this.Direction == eDirection.Bar)
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.BarStacked3D;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.BarStacked1003D;
|
}
|
else
|
{
|
return eChartType.BarClustered3D;
|
}
|
}
|
else
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.ColumnStacked3D;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.ColumnStacked1003D;
|
}
|
else
|
{
|
return eChartType.ColumnClustered3D;
|
}
|
}
|
}
|
#endregion
|
#region "Cone Shape"
|
if (this.Shape == eShape.Cone || this.Shape == eShape.ConeToMax)
|
{
|
if (this.Direction == eDirection.Bar)
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.ConeBarStacked;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.ConeBarStacked100;
|
}
|
else if (Grouping == eGrouping.Clustered)
|
{
|
return eChartType.ConeBarClustered;
|
}
|
}
|
else
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.ConeColStacked;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.ConeColStacked100;
|
}
|
else if (Grouping == eGrouping.Clustered)
|
{
|
return eChartType.ConeColClustered;
|
}
|
else
|
{
|
return eChartType.ConeCol;
|
}
|
}
|
}
|
#endregion
|
#region "Cylinder Shape"
|
if (this.Shape == eShape.Cylinder)
|
{
|
if (this.Direction == eDirection.Bar)
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.CylinderBarStacked;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.CylinderBarStacked100;
|
}
|
else if (Grouping == eGrouping.Clustered)
|
{
|
return eChartType.CylinderBarClustered;
|
}
|
}
|
else
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.CylinderColStacked;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.CylinderColStacked100;
|
}
|
else if (Grouping == eGrouping.Clustered)
|
{
|
return eChartType.CylinderColClustered;
|
}
|
else
|
{
|
return eChartType.CylinderCol;
|
}
|
}
|
}
|
#endregion
|
#region "Pyramide Shape"
|
if (this.Shape == eShape.Pyramid || this.Shape == eShape.PyramidToMax)
|
{
|
if (this.Direction == eDirection.Bar)
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.PyramidBarStacked;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.PyramidBarStacked100;
|
}
|
else if (Grouping == eGrouping.Clustered)
|
{
|
return eChartType.PyramidBarClustered;
|
}
|
}
|
else
|
{
|
if (Grouping == eGrouping.Stacked)
|
{
|
return eChartType.PyramidColStacked;
|
}
|
else if (Grouping == eGrouping.PercentStacked)
|
{
|
return eChartType.PyramidColStacked100;
|
}
|
else if (Grouping == eGrouping.Clustered)
|
{
|
return eChartType.PyramidColClustered;
|
}
|
else
|
{
|
return eChartType.PyramidCol;
|
}
|
}
|
}
|
#endregion
|
}
|
return base.GetChartType(name);
|
}
|
}
|
}
|