| /******************************************************************************* |
| * 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-27 |
| *******************************************************************************/ |
| |
| using System; |
| using System.Collections; |
| using System.Collections.Generic; |
| using System.Globalization; |
| using System.Xml; |
| |
| namespace OfficeOpenXml; |
| |
| /// <summary> |
| /// Base collection class for styles. |
| /// </summary> |
| /// <typeparam name="T">The style type</typeparam> |
| public class ExcelStyleCollection<T> : IEnumerable<T> { |
| public ExcelStyleCollection() { |
| _setNextIdManual = false; |
| } |
| |
| private readonly bool _setNextIdManual; |
| |
| public ExcelStyleCollection(bool setNextIdManual) { |
| _setNextIdManual = setNextIdManual; |
| } |
| |
| public XmlNode TopNode { get; set; } |
| |
| internal List<T> _list = new(); |
| private readonly Dictionary<string, int> _dic = new(StringComparer.InvariantCultureIgnoreCase); |
| internal int NextId; |
| |
| public IEnumerator<T> GetEnumerator() { |
| return _list.GetEnumerator(); |
| } |
| |
| IEnumerator IEnumerable.GetEnumerator() { |
| return _list.GetEnumerator(); |
| } |
| |
| public T this[int positionId] => _list[positionId]; |
| |
| public int Count => _list.Count; |
| |
| //internal int Add(T item) |
| //{ |
| // _list.Add(item); |
| // if (_setNextIdManual) NextId++; |
| // return _list.Count-1; |
| //} |
| internal int Add(string key, T item) { |
| _list.Add(item); |
| if (!_dic.ContainsKey(key.ToLower(CultureInfo.InvariantCulture))) { |
| _dic.Add(key.ToLower(CultureInfo.InvariantCulture), _list.Count - 1); |
| } |
| if (_setNextIdManual) { |
| NextId++; |
| } |
| return _list.Count - 1; |
| } |
| |
| /// <summary> |
| /// Finds the key |
| /// </summary> |
| /// <param name="key">the key to be found</param> |
| /// <param name="obj">The found object.</param> |
| /// <returns>True if found</returns> |
| internal bool FindById(string key, ref T obj) { |
| if (_dic.ContainsKey(key)) { |
| obj = _list[_dic[key.ToLower(CultureInfo.InvariantCulture)]]; |
| return true; |
| } |
| return false; |
| } |
| |
| /// <summary> |
| /// Find Index |
| /// </summary> |
| /// <param name="key"></param> |
| /// <returns></returns> |
| internal int FindIndexById(string key) { |
| if (_dic.ContainsKey(key)) { |
| return _dic[key]; |
| } |
| return int.MinValue; |
| } |
| |
| internal bool ExistsKey(string key) { |
| return _dic.ContainsKey(key); |
| } |
| |
| internal void Sort(Comparison<T> c) { |
| _list.Sort(c); |
| } |
| } |