| using System; | 
 | using System.Xml; | 
 |  | 
 |  | 
 | /// <summary> | 
 | /// Line end style. | 
 | /// </summary> | 
 | public enum eEndStyle   //ST_LineEndType | 
 | { | 
 |     /// <summary> | 
 |     /// No end | 
 |     /// </summary> | 
 |     None, | 
 |     /// <summary> | 
 |     /// Triangle arrow head | 
 |     /// </summary> | 
 |     Triangle, | 
 |     /// <summary> | 
 |     /// Stealth arrow head | 
 |     /// </summary> | 
 |     Stealth, | 
 |     /// <summary> | 
 |     /// Diamond | 
 |     /// </summary> | 
 |     Diamond, | 
 |     /// <summary> | 
 |     /// Oval | 
 |     /// </summary> | 
 |     Oval, | 
 |     /// <summary> | 
 |     /// Line arrow head | 
 |     /// </summary> | 
 |     Arrow | 
 | } | 
 |  | 
 | /// <summary> | 
 | /// Lend end size. | 
 | /// </summary> | 
 | public enum eEndSize | 
 | { | 
 |     /// <summary> | 
 |     /// Smal | 
 |     /// </summary> | 
 |     Small, | 
 |     /// <summary> | 
 |     /// Medium | 
 |     /// </summary> | 
 |     Medium, | 
 |     /// <summary> | 
 |     /// Large | 
 |     /// </summary> | 
 |     Large | 
 | } | 
 |  | 
 | namespace OfficeOpenXml.Drawing | 
 | { | 
 |     /// <summary> | 
 |     /// Properties for drawing line ends | 
 |     /// </summary> | 
 |     public sealed class ExcelDrawingLineEnd:XmlHelper | 
 |     { | 
 |          string _linePath; | 
 |         internal ExcelDrawingLineEnd(XmlNamespaceManager nameSpaceManager, XmlNode topNode, string linePath) :  | 
 |             base(nameSpaceManager, topNode) | 
 |         { | 
 |             SchemaNodeOrder = new string[] { "headEnd", "tailEnd" }; | 
 |             _linePath = linePath;    | 
 |         } | 
 |         string _headEndStylePath = "xdr:sp/xdr:spPr/a:ln/a:headEnd/@type"; | 
 |         /// <summary> | 
 |         /// HeaderEnd | 
 |         /// </summary> | 
 |         public eEndStyle HeadEnd | 
 |         { | 
 |             get | 
 |             { | 
 |                 return TranslateEndStyle(GetXmlNodeString(_headEndStylePath)); | 
 |             } | 
 |             set | 
 |             { | 
 |                 CreateNode(_linePath, false); | 
 |                 SetXmlNodeString(_headEndStylePath, TranslateEndStyleText(value)); | 
 |             } | 
 |         } | 
 |         string _tailEndStylePath = "xdr:sp/xdr:spPr/a:ln/a:tailEnd/@type"; | 
 |         /// <summary> | 
 |         /// HeaderEnd | 
 |         /// </summary> | 
 |         public eEndStyle TailEnd | 
 |         { | 
 |             get | 
 |             { | 
 |                 return TranslateEndStyle(GetXmlNodeString(_tailEndStylePath)); | 
 |             } | 
 |             set | 
 |             { | 
 |                 CreateNode(_linePath, false); | 
 |                 SetXmlNodeString(_tailEndStylePath, TranslateEndStyleText(value)); | 
 |             } | 
 |         } | 
 |  | 
 |         string _tailEndSizeWidthPath = "xdr:sp/xdr:spPr/a:ln/a:tailEnd/@w"; | 
 |         /// <summary> | 
 |         /// TailEndSizeWidth | 
 |         /// </summary> | 
 |         public eEndSize TailEndSizeWidth | 
 |         { | 
 |             get | 
 |             { | 
 |                 return TranslateEndSize(GetXmlNodeString(_tailEndSizeWidthPath)); | 
 |             } | 
 |             set | 
 |             { | 
 |                 CreateNode(_linePath, false); | 
 |                 SetXmlNodeString(_tailEndSizeWidthPath, TranslateEndSizeText(value)); | 
 |             } | 
 |         } | 
 |  | 
 |         string _tailEndSizeHeightPath = "xdr:sp/xdr:spPr/a:ln/a:tailEnd/@len"; | 
 |         /// <summary> | 
 |         /// TailEndSizeHeight | 
 |         /// </summary> | 
 |         public eEndSize TailEndSizeHeight | 
 |         { | 
 |             get | 
 |             { | 
 |                 return TranslateEndSize(GetXmlNodeString(_tailEndSizeHeightPath)); | 
 |             } | 
 |             set | 
 |             { | 
 |                 CreateNode(_linePath, false); | 
 |                 SetXmlNodeString(_tailEndSizeHeightPath, TranslateEndSizeText(value)); | 
 |             } | 
 |         } | 
 |  | 
 |         string _headEndSizeWidthPath = "xdr:sp/xdr:spPr/a:ln/a:headEnd/@w"; | 
 |         /// <summary> | 
 |         /// TailEndSizeWidth | 
 |         /// </summary> | 
 |         public eEndSize HeadEndSizeWidth | 
 |         { | 
 |             get | 
 |             { | 
 |                 return TranslateEndSize(GetXmlNodeString(_headEndSizeWidthPath)); | 
 |             } | 
 |             set | 
 |             { | 
 |                 CreateNode(_linePath, false); | 
 |                 SetXmlNodeString(_headEndSizeWidthPath, TranslateEndSizeText(value)); | 
 |             } | 
 |         } | 
 |  | 
 |         string _headEndSizeHeightPath = "xdr:sp/xdr:spPr/a:ln/a:headEnd/@len"; | 
 |         /// <summary> | 
 |         /// TailEndSizeHeight | 
 |         /// </summary> | 
 |         public eEndSize HeadEndSizeHeight | 
 |         { | 
 |             get | 
 |             { | 
 |                 return TranslateEndSize(GetXmlNodeString(_headEndSizeHeightPath)); | 
 |             } | 
 |             set | 
 |             { | 
 |                 CreateNode(_linePath, false); | 
 |                 SetXmlNodeString(_headEndSizeHeightPath, TranslateEndSizeText(value)); | 
 |             } | 
 |         } | 
 |  | 
 |         #region "Translate Enum functions" | 
 |         private string TranslateEndStyleText(eEndStyle value) | 
 |         { | 
 |             return value.ToString().ToLower(); | 
 |         } | 
 |         private eEndStyle TranslateEndStyle(string text) | 
 |         { | 
 |             switch (text) | 
 |             { | 
 |                 case "none": | 
 |                 case "arrow": | 
 |                 case "diamond": | 
 |                 case "oval": | 
 |                 case "stealth": | 
 |                 case "triangle": | 
 |                     return (eEndStyle)Enum.Parse(typeof(eEndStyle), text, true); | 
 |                 default: | 
 |                     throw (new Exception("Invalid Endstyle")); | 
 |             } | 
 |         } | 
 |  | 
 |         private string TranslateEndSizeText(eEndSize value) | 
 |         { | 
 |             string text = value.ToString(); | 
 |             switch (value) | 
 |             { | 
 |                 case eEndSize.Small: | 
 |                     return "sm"; | 
 |                 case eEndSize.Medium: | 
 |                     return "med"; | 
 |                 case eEndSize.Large: | 
 |                     return "lg"; | 
 |                 default: | 
 |                     throw (new Exception("Invalid Endsize")); | 
 |             } | 
 |         } | 
 |         private eEndSize TranslateEndSize(string text) | 
 |         { | 
 |             switch (text) | 
 |             { | 
 |                 case "sm": | 
 |                 case "med": | 
 |                 case "lg": | 
 |                     return (eEndSize)Enum.Parse(typeof(eEndSize), text, true); | 
 |                 default: | 
 |                     throw (new Exception("Invalid Endsize")); | 
 |             } | 
 |         } | 
 |         #endregion | 
 |     } | 
 | } |