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