blob: 928597500e476a9b0d4f90fe55fd1980ab63c073 [file] [log] [blame]
using OfficeOpenXml.Utils;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Xml;
namespace OfficeOpenXml
{
public class ExcelProtectedRangeCollection : XmlHelper, IEnumerable<ExcelProtectedRange>
{
internal ExcelProtectedRangeCollection(XmlNamespaceManager nsm, XmlNode topNode, ExcelWorksheet ws)
: base(nsm, topNode)
{
foreach (XmlNode protectedRangeNode in topNode.SelectNodes("d:protectedRanges/d:protectedRange", nsm))
{
if (!(protectedRangeNode is XmlElement))
continue;
_baseList.Add(new ExcelProtectedRange(protectedRangeNode.Attributes["name"].Value, new ExcelAddress(SqRefUtility.FromSqRefAddress(protectedRangeNode.Attributes["sqref"].Value)), nsm, topNode));
}
}
private List<ExcelProtectedRange> _baseList = new List<ExcelProtectedRange>();
public ExcelProtectedRange Add(string name, ExcelAddress address)
{
if (!ExistNode("d:protectedRanges"))
CreateNode("d:protectedRanges");
var newNode = CreateNode("d:protectedRanges/d:protectedRange");
var item = new ExcelProtectedRange(name, address, base.NameSpaceManager, newNode);
_baseList.Add(item);
return item;
}
public void Clear()
{
DeleteNode("d:protectedRanges");
_baseList.Clear();
}
public bool Contains(ExcelProtectedRange item)
{
return _baseList.Contains(item);
}
public void CopyTo(ExcelProtectedRange[] array, int arrayIndex)
{
_baseList.CopyTo(array, arrayIndex);
}
public int Count
{
get { return _baseList.Count; }
}
public bool Remove(ExcelProtectedRange item)
{
DeleteAllNode("d:protectedRanges/d:protectedRange[@name='" + item.Name + "' and @sqref='" + item.Address.Address + "']");
if (_baseList.Count == 0)
DeleteNode("d:protectedRanges");
return _baseList.Remove(item);
}
public int IndexOf(ExcelProtectedRange item)
{
return _baseList.IndexOf(item);
}
public void RemoveAt(int index)
{
_baseList.RemoveAt(index);
}
public ExcelProtectedRange this[int index]
{
get
{
return _baseList[index];
}
}
IEnumerator<ExcelProtectedRange> IEnumerable<ExcelProtectedRange>.GetEnumerator()
{
return _baseList.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return _baseList.GetEnumerator();
}
}
}