|  | /******************************************************************************* | 
|  | * 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-12-30 | 
|  | * Jan Källman		License changed GPL-->LGPL 2011-12-16 | 
|  | *******************************************************************************/ | 
|  | using System; | 
|  | using System.Collections.Generic; | 
|  | using System.Text; | 
|  | using System.Xml; | 
|  | using OfficeOpenXml.Style; | 
|  |  | 
|  | namespace OfficeOpenXml.Drawing.Chart | 
|  | { | 
|  | /// <summary> | 
|  | /// Datalabel on chart level. | 
|  | /// This class is inherited by ExcelChartSerieDataLabel | 
|  | /// </summary> | 
|  | public class ExcelChartDataLabel : XmlHelper | 
|  | { | 
|  | internal ExcelChartDataLabel(XmlNamespaceManager ns, XmlNode node) | 
|  | : base(ns,node) | 
|  | { | 
|  | XmlNode topNode = node.SelectSingleNode("c:dLbls", NameSpaceManager); | 
|  | if (topNode == null) | 
|  | { | 
|  | topNode = node.OwnerDocument.CreateElement("c", "dLbls", ExcelPackage.schemaChart); | 
|  | //node.InsertAfter(_topNode, node.SelectSingleNode("c:order", NameSpaceManager)); | 
|  | InserAfter(node, "c:marker,c:tx,c:order,c:ser", topNode); | 
|  | SchemaNodeOrder = new string[] { "spPr", "txPr", "dLblPos", "showLegendKey", "showVal", "showCatName", "showSerName", "showPercent", "showBubbleSize", "separator", "showLeaderLines" }; | 
|  | topNode.InnerXml = "<c:showLegendKey val=\"0\" /><c:showVal val=\"0\" /><c:showCatName val=\"0\" /><c:showSerName val=\"0\" /><c:showPercent val=\"0\" /><c:showBubbleSize val=\"0\" /> <c:separator>\r\n</c:separator><c:showLeaderLines val=\"0\" />"; | 
|  | } | 
|  | TopNode = topNode; | 
|  | } | 
|  | #region "Public properties" | 
|  | const string showValPath = "c:showVal/@val"; | 
|  | /// <summary> | 
|  | /// Show the values | 
|  | /// </summary> | 
|  | public bool ShowValue | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeBool(showValPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | SetXmlNodeString(showValPath, value ? "1" : "0"); | 
|  | } | 
|  | } | 
|  | const string showCatPath = "c:showCatName/@val"; | 
|  | /// <summary> | 
|  | /// Show category names | 
|  | /// </summary> | 
|  | public bool ShowCategory | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeBool(showCatPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | SetXmlNodeString(showCatPath, value ? "1" : "0"); | 
|  | } | 
|  | } | 
|  | const string showSerPath = "c:showSerName/@val"; | 
|  | /// <summary> | 
|  | /// Show series names | 
|  | /// </summary> | 
|  | public bool ShowSeriesName | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeBool(showSerPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | SetXmlNodeString(showSerPath, value ? "1" : "0"); | 
|  | } | 
|  | } | 
|  | const string showPerentPath = "c:showPercent/@val"; | 
|  | /// <summary> | 
|  | /// Show percent values | 
|  | /// </summary> | 
|  | public bool ShowPercent | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeBool(showPerentPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | SetXmlNodeString(showPerentPath, value ? "1" : "0"); | 
|  | } | 
|  | } | 
|  | const string showLeaderLinesPath = "c:showLeaderLines/@val"; | 
|  | /// <summary> | 
|  | /// Show the leader lines | 
|  | /// </summary> | 
|  | public bool ShowLeaderLines | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeBool(showLeaderLinesPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | SetXmlNodeString(showLeaderLinesPath, value ? "1" : "0"); | 
|  | } | 
|  | } | 
|  | const string showBubbleSizePath = "c:showBubbleSize/@val"; | 
|  | /// <summary> | 
|  | /// Bubble Size. | 
|  | /// </summary> | 
|  | public bool ShowBubbleSize | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeBool(showBubbleSizePath); | 
|  | } | 
|  | set | 
|  | { | 
|  | SetXmlNodeString(showBubbleSizePath, value ? "1" : "0"); | 
|  | } | 
|  | } | 
|  | const string showLegendKeyPath = "c:showLegendKey/@val"; | 
|  | public bool ShowLegendKey | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeBool(showLegendKeyPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | SetXmlNodeString(showLegendKeyPath, value ? "1" : "0"); | 
|  | } | 
|  | } | 
|  | const string separatorPath = "c:separator"; | 
|  | /// <summary> | 
|  | /// Separator string | 
|  | /// </summary> | 
|  | public string Separator | 
|  | { | 
|  | get | 
|  | { | 
|  | return GetXmlNodeString(separatorPath); | 
|  | } | 
|  | set | 
|  | { | 
|  | if (string.IsNullOrEmpty(value)) | 
|  | { | 
|  | DeleteNode(separatorPath); | 
|  | } | 
|  | else | 
|  | { | 
|  | SetXmlNodeString(separatorPath, value); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | ExcelDrawingFill _fill = null; | 
|  | /// <summary> | 
|  | /// Access fill properties | 
|  | /// </summary> | 
|  | public ExcelDrawingFill Fill | 
|  | { | 
|  | get | 
|  | { | 
|  | if (_fill == null) | 
|  | { | 
|  | _fill = new ExcelDrawingFill(NameSpaceManager, TopNode, "c:spPr"); | 
|  | } | 
|  | return _fill; | 
|  | } | 
|  | } | 
|  | ExcelDrawingBorder _border = null; | 
|  | /// <summary> | 
|  | /// Access border properties | 
|  | /// </summary> | 
|  | public ExcelDrawingBorder Border | 
|  | { | 
|  | get | 
|  | { | 
|  | if (_border == null) | 
|  | { | 
|  | _border = new ExcelDrawingBorder(NameSpaceManager, TopNode, "c:spPr/a:ln"); | 
|  | } | 
|  | return _border; | 
|  | } | 
|  | } | 
|  | string[] _paragraphSchemaOrder = new string[] { "spPr", "txPr", "dLblPos", "showVal", "showCatName", "showSerName", "showPercent", "separator", "showLeaderLines", "pPr", "defRPr", "solidFill", "uFill", "latin", "cs", "r", "rPr", "t" }; | 
|  | ExcelTextFont _font = null; | 
|  | /// <summary> | 
|  | /// Access font properties | 
|  | /// </summary> | 
|  | public ExcelTextFont Font | 
|  | { | 
|  | get | 
|  | { | 
|  | if (_font == null) | 
|  | { | 
|  | if (TopNode.SelectSingleNode("c:txPr", NameSpaceManager) == null) | 
|  | { | 
|  | CreateNode("c:txPr/a:bodyPr"); | 
|  | CreateNode("c:txPr/a:lstStyle"); | 
|  | } | 
|  | _font = new ExcelTextFont(NameSpaceManager, TopNode, "c:txPr/a:p/a:pPr/a:defRPr", _paragraphSchemaOrder); | 
|  | } | 
|  | return _font; | 
|  | } | 
|  | } | 
|  | #endregion | 
|  | #region "Position Enum Translation" | 
|  | protected string GetPosText(eLabelPosition pos) | 
|  | { | 
|  | switch (pos) | 
|  | { | 
|  | case eLabelPosition.Bottom: | 
|  | return "b"; | 
|  | case eLabelPosition.Center: | 
|  | return "ctr"; | 
|  | case eLabelPosition.InBase: | 
|  | return "inBase"; | 
|  | case eLabelPosition.InEnd: | 
|  | return "inEnd"; | 
|  | case eLabelPosition.Left: | 
|  | return "l"; | 
|  | case eLabelPosition.Right: | 
|  | return "r"; | 
|  | case eLabelPosition.Top: | 
|  | return "t"; | 
|  | case eLabelPosition.OutEnd: | 
|  | return "outEnd"; | 
|  | default: | 
|  | return "bestFit"; | 
|  | } | 
|  | } | 
|  |  | 
|  | protected eLabelPosition GetPosEnum(string pos) | 
|  | { | 
|  | switch (pos) | 
|  | { | 
|  | case "b": | 
|  | return eLabelPosition.Bottom; | 
|  | case "ctr": | 
|  | return eLabelPosition.Center; | 
|  | case "inBase": | 
|  | return eLabelPosition.InBase; | 
|  | case "inEnd": | 
|  | return eLabelPosition.InEnd; | 
|  | case "l": | 
|  | return eLabelPosition.Left; | 
|  | case "r": | 
|  | return eLabelPosition.Right; | 
|  | case "t": | 
|  | return eLabelPosition.Top; | 
|  | case "outEnd": | 
|  | return eLabelPosition.OutEnd; | 
|  | default: | 
|  | return eLabelPosition.BestFit; | 
|  | } | 
|  | } | 
|  | #endregion | 
|  | } | 
|  | } |