blob: 9d19974bc77b67cc90a986c698466a471318a393 [file] [log] [blame]
/*******************************************************************************
* 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-10-01
* Jan Källman License changed GPL-->LGPL 2011-12-16
*******************************************************************************/
using System.Xml;
namespace OfficeOpenXml.Style.XmlAccess;
/// <summary>
/// Xml access class for border top level
/// </summary>
public sealed class ExcelBorderXml : StyleXmlHelper {
internal ExcelBorderXml(XmlNamespaceManager nameSpaceManager)
: base(nameSpaceManager) {}
internal ExcelBorderXml(XmlNamespaceManager nsm, XmlNode topNode)
: base(nsm, topNode) {
_left = new(nsm, topNode.SelectSingleNode(_leftPath, nsm));
_right = new(nsm, topNode.SelectSingleNode(_rightPath, nsm));
_top = new(nsm, topNode.SelectSingleNode(_topPath, nsm));
_bottom = new(nsm, topNode.SelectSingleNode(_bottomPath, nsm));
_diagonal = new(nsm, topNode.SelectSingleNode(_diagonalPath, nsm));
_diagonalUp = GetBoolValue(topNode, _diagonalUpPath);
_diagonalDown = GetBoolValue(topNode, _diagonalDownPath);
}
internal override string Id =>
Left.Id + Right.Id + Top.Id + Bottom.Id + Diagonal.Id + DiagonalUp + DiagonalDown;
private const string _leftPath = "d:left";
private ExcelBorderItemXml _left;
/// <summary>
/// Left border style properties
/// </summary>
public ExcelBorderItemXml Left {
get => _left;
internal set => _left = value;
}
private const string _rightPath = "d:right";
private ExcelBorderItemXml _right;
/// <summary>
/// Right border style properties
/// </summary>
public ExcelBorderItemXml Right {
get => _right;
internal set => _right = value;
}
private const string _topPath = "d:top";
private ExcelBorderItemXml _top;
/// <summary>
/// Top border style properties
/// </summary>
public ExcelBorderItemXml Top {
get => _top;
internal set => _top = value;
}
private const string _bottomPath = "d:bottom";
private ExcelBorderItemXml _bottom;
/// <summary>
/// Bottom border style properties
/// </summary>
public ExcelBorderItemXml Bottom {
get => _bottom;
internal set => _bottom = value;
}
private const string _diagonalPath = "d:diagonal";
private ExcelBorderItemXml _diagonal;
/// <summary>
/// Diagonal border style properties
/// </summary>
public ExcelBorderItemXml Diagonal {
get => _diagonal;
internal set => _diagonal = value;
}
private const string _diagonalUpPath = "@diagonalUp";
private bool _diagonalUp;
/// <summary>
/// Diagonal up border
/// </summary>
public bool DiagonalUp {
get => _diagonalUp;
internal set => _diagonalUp = value;
}
private const string _diagonalDownPath = "@diagonalDown";
private bool _diagonalDown;
/// <summary>
/// Diagonal down border
/// </summary>
public bool DiagonalDown {
get => _diagonalDown;
internal set => _diagonalDown = value;
}
internal ExcelBorderXml Copy() {
ExcelBorderXml newBorder = new ExcelBorderXml(NameSpaceManager);
newBorder.Bottom = _bottom.Copy();
newBorder.Diagonal = _diagonal.Copy();
newBorder.Left = _left.Copy();
newBorder.Right = _right.Copy();
newBorder.Top = _top.Copy();
newBorder.DiagonalUp = _diagonalUp;
newBorder.DiagonalDown = _diagonalDown;
return newBorder;
}
internal override XmlNode CreateXmlNode(XmlNode topNode) {
TopNode = topNode;
CreateNode(_leftPath);
topNode.AppendChild(_left.CreateXmlNode(TopNode.SelectSingleNode(_leftPath, NameSpaceManager)));
CreateNode(_rightPath);
topNode.AppendChild(
_right.CreateXmlNode(TopNode.SelectSingleNode(_rightPath, NameSpaceManager)));
CreateNode(_topPath);
topNode.AppendChild(_top.CreateXmlNode(TopNode.SelectSingleNode(_topPath, NameSpaceManager)));
CreateNode(_bottomPath);
topNode.AppendChild(
_bottom.CreateXmlNode(TopNode.SelectSingleNode(_bottomPath, NameSpaceManager)));
CreateNode(_diagonalPath);
topNode.AppendChild(
_diagonal.CreateXmlNode(TopNode.SelectSingleNode(_diagonalPath, NameSpaceManager)));
if (_diagonalUp) {
SetXmlNodeString(_diagonalUpPath, "1");
}
if (_diagonalDown) {
SetXmlNodeString(_diagonalDownPath, "1");
}
return topNode;
}
}