| /******************************************************************************* |
| * 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 |
| } |
| } |