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