/******************************************************************************* * 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 { /// /// Datalabel on chart level. /// This class is inherited by ExcelChartSerieDataLabel /// 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 = " \r\n"; } TopNode = topNode; } #region "Public properties" const string showValPath = "c:showVal/@val"; /// /// Show the values /// public bool ShowValue { get { return GetXmlNodeBool(showValPath); } set { SetXmlNodeString(showValPath, value ? "1" : "0"); } } const string showCatPath = "c:showCatName/@val"; /// /// Show category names /// public bool ShowCategory { get { return GetXmlNodeBool(showCatPath); } set { SetXmlNodeString(showCatPath, value ? "1" : "0"); } } const string showSerPath = "c:showSerName/@val"; /// /// Show series names /// public bool ShowSeriesName { get { return GetXmlNodeBool(showSerPath); } set { SetXmlNodeString(showSerPath, value ? "1" : "0"); } } const string showPerentPath = "c:showPercent/@val"; /// /// Show percent values /// public bool ShowPercent { get { return GetXmlNodeBool(showPerentPath); } set { SetXmlNodeString(showPerentPath, value ? "1" : "0"); } } const string showLeaderLinesPath = "c:showLeaderLines/@val"; /// /// Show the leader lines /// public bool ShowLeaderLines { get { return GetXmlNodeBool(showLeaderLinesPath); } set { SetXmlNodeString(showLeaderLinesPath, value ? "1" : "0"); } } const string showBubbleSizePath = "c:showBubbleSize/@val"; /// /// Bubble Size. /// 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"; /// /// Separator string /// public string Separator { get { return GetXmlNodeString(separatorPath); } set { if (string.IsNullOrEmpty(value)) { DeleteNode(separatorPath); } else { SetXmlNodeString(separatorPath, value); } } } ExcelDrawingFill _fill = null; /// /// Access fill properties /// public ExcelDrawingFill Fill { get { if (_fill == null) { _fill = new ExcelDrawingFill(NameSpaceManager, TopNode, "c:spPr"); } return _fill; } } ExcelDrawingBorder _border = null; /// /// Access border properties /// 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; /// /// Access font properties /// 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 } }