/*******************************************************************************
* 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
{
///
/// Type of Line cap
///
public enum eLineCap
{
Flat, //flat
Round, //rnd
Square //Sq
}
///
/// Line style.
///
public enum eLineStyle
{
Dash,
DashDot,
Dot,
LongDash,
LongDashDot,
LongDashDotDot,
Solid,
SystemDash,
SystemDashDot,
SystemDashDotDot,
SystemDot
}
///
/// Border for drawings
///
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;
///
/// Fill
///
public ExcelDrawingFill Fill
{
get
{
if (_fill == null)
{
_fill = new ExcelDrawingFill(NameSpaceManager, TopNode, _linePath);
}
return _fill;
}
}
string _lineStylePath = "{0}/a:prstDash/@val";
///
/// Linestyle
///
public eLineStyle LineStyle
{
get
{
return TranslateLineStyle(GetXmlNodeString(_lineStylePath));
}
set
{
CreateNode(_linePath, false);
SetXmlNodeString(_lineStylePath, TranslateLineStyleText(value));
}
}
string _lineCapPath = "{0}/@cap";
///
/// Linecap
///
public eLineCap LineCap
{
get
{
return TranslateLineCap(GetXmlNodeString(_lineCapPath));
}
set
{
CreateNode(_linePath, false);
SetXmlNodeString(_lineCapPath, TranslateLineCapText(value));
}
}
string _lineWidth = "{0}/@w";
///
/// Width in pixels
///
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
// {
// }
//}
}
}