| /******************************************************************************* | |
| * 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 Initial Release 2009-12-22 | |
| * Jan Källman License changed GPL-->LGPL 2011-12-16 | |
| *******************************************************************************/ | |
| using System; | |
| using System.Collections.Generic; | |
| using System.Globalization; | |
| using System.Text; | |
| using System.Xml; | |
| using System.Drawing; | |
| namespace OfficeOpenXml.Drawing | |
| { | |
| /// <summary> | |
| /// Type of Line cap | |
| /// </summary> | |
| public enum eLineCap | |
| { | |
| Flat, //flat | |
| Round, //rnd | |
| Square //Sq | |
| } | |
| /// <summary> | |
| /// Line style. | |
| /// </summary> | |
| public enum eLineStyle | |
| { | |
| Dash, | |
| DashDot, | |
| Dot, | |
| LongDash, | |
| LongDashDot, | |
| LongDashDotDot, | |
| Solid, | |
| SystemDash, | |
| SystemDashDot, | |
| SystemDashDotDot, | |
| SystemDot | |
| } | |
| /// <summary> | |
| /// Border for drawings | |
| /// </summary> | |
| public sealed class ExcelDrawingBorder : XmlHelper | |
| { | |
| string _linePath; | |
| internal ExcelDrawingBorder(XmlNamespaceManager nameSpaceManager, XmlNode topNode, string linePath) : | |
| base(nameSpaceManager, topNode) | |
| { | |
| SchemaNodeOrder = new string[] { "chart","tickLblPos", "spPr", "txPr","crossAx", "printSettings", "showVal", "showCatName", "showSerName", "showPercent", "separator", "showLeaderLines", "noFill", "solidFill", "blipFill", "gradFill", "noFill", "pattFill", "prstDash" }; | |
| _linePath = linePath; | |
| _lineStylePath = string.Format(_lineStylePath, linePath); | |
| _lineCapPath = string.Format(_lineCapPath, linePath); | |
| _lineWidth = string.Format(_lineWidth, linePath); | |
| } | |
| #region "Public properties" | |
| ExcelDrawingFill _fill = null; | |
| /// <summary> | |
| /// Fill | |
| /// </summary> | |
| public ExcelDrawingFill Fill | |
| { | |
| get | |
| { | |
| if (_fill == null) | |
| { | |
| _fill = new ExcelDrawingFill(NameSpaceManager, TopNode, _linePath); | |
| } | |
| return _fill; | |
| } | |
| } | |
| string _lineStylePath = "{0}/a:prstDash/@val"; | |
| /// <summary> | |
| /// Linestyle | |
| /// </summary> | |
| public eLineStyle LineStyle | |
| { | |
| get | |
| { | |
| return TranslateLineStyle(GetXmlNodeString(_lineStylePath)); | |
| } | |
| set | |
| { | |
| CreateNode(_linePath, false); | |
| SetXmlNodeString(_lineStylePath, TranslateLineStyleText(value)); | |
| } | |
| } | |
| string _lineCapPath = "{0}/@cap"; | |
| /// <summary> | |
| /// Linecap | |
| /// </summary> | |
| public eLineCap LineCap | |
| { | |
| get | |
| { | |
| return TranslateLineCap(GetXmlNodeString(_lineCapPath)); | |
| } | |
| set | |
| { | |
| CreateNode(_linePath, false); | |
| SetXmlNodeString(_lineCapPath, TranslateLineCapText(value)); | |
| } | |
| } | |
| string _lineWidth = "{0}/@w"; | |
| /// <summary> | |
| /// Width in pixels | |
| /// </summary> | |
| public int Width | |
| { | |
| get | |
| { | |
| return GetXmlNodeInt(_lineWidth) / 12700; | |
| } | |
| set | |
| { | |
| SetXmlNodeString(_lineWidth, (value * 12700).ToString()); | |
| } | |
| } | |
| #endregion | |
| #region "Translate Enum functions" | |
| private string TranslateLineStyleText(eLineStyle value) | |
| { | |
| string text=value.ToString(); | |
| switch (value) | |
| { | |
| case eLineStyle.Dash: | |
| case eLineStyle.Dot: | |
| case eLineStyle.DashDot: | |
| case eLineStyle.Solid: | |
| return text.Substring(0,1).ToLower(CultureInfo.InvariantCulture) + text.Substring(1,text.Length-1); //First to Lower case. | |
| case eLineStyle.LongDash: | |
| case eLineStyle.LongDashDot: | |
| case eLineStyle.LongDashDotDot: | |
| return "lg" + text.Substring(4, text.Length - 4); | |
| case eLineStyle.SystemDash: | |
| case eLineStyle.SystemDashDot: | |
| case eLineStyle.SystemDashDotDot: | |
| case eLineStyle.SystemDot: | |
| return "sys" + text.Substring(6, text.Length - 6); | |
| default: | |
| throw(new Exception("Invalid Linestyle")); | |
| } | |
| } | |
| private eLineStyle TranslateLineStyle(string text) | |
| { | |
| switch (text) | |
| { | |
| case "dash": | |
| case "dot": | |
| case "dashDot": | |
| case "solid": | |
| return (eLineStyle)Enum.Parse(typeof(eLineStyle), text, true); | |
| case "lgDash": | |
| case "lgDashDot": | |
| case "lgDashDotDot": | |
| return (eLineStyle)Enum.Parse(typeof(eLineStyle), "Long" + text.Substring(2, text.Length - 2)); | |
| case "sysDash": | |
| case "sysDashDot": | |
| case "sysDashDotDot": | |
| case "sysDot": | |
| return (eLineStyle)Enum.Parse(typeof(eLineStyle), "System" + text.Substring(3, text.Length - 3)); | |
| default: | |
| throw (new Exception("Invalid Linestyle")); | |
| } | |
| } | |
| private string TranslateLineCapText(eLineCap value) | |
| { | |
| switch (value) | |
| { | |
| case eLineCap.Round: | |
| return "rnd"; | |
| case eLineCap.Square: | |
| return "sq"; | |
| default: | |
| return "flat"; | |
| } | |
| } | |
| private eLineCap TranslateLineCap(string text) | |
| { | |
| switch (text) | |
| { | |
| case "rnd": | |
| return eLineCap.Round; | |
| case "sq": | |
| return eLineCap.Square; | |
| default: | |
| return eLineCap.Flat; | |
| } | |
| } | |
| #endregion | |
| //public ExcelDrawingFont Font | |
| //{ | |
| // get | |
| // { | |
| // } | |
| //} | |
| } | |
| } |