using System; using System.Collections; using System.Collections.Generic; using CodeImp.DoomBuilder.IO; namespace CodeImp.DoomBuilder.Config { /// /// Category of generalized type options. /// public class GeneralizedCategory { #region ================== Constants #endregion #region ================== Variables // Category properties private string title; private int offset; private int length; private List options; // Disposing private bool isdisposed; #endregion #region ================== Properties public string Title { get { return title; } } public int Offset { get { return offset; } } public int Length { get { return length; } } public List Options { get { return options; } } public bool IsDisposed { get { return isdisposed; } } #endregion #region ================== Constructor / Disposer // Constructor internal GeneralizedCategory(string structure, string name, Configuration cfg) { // Initialize this.options = new List(); // Read properties this.title = cfg.ReadSetting(structure + "." + name + ".title", ""); this.offset = cfg.ReadSetting(structure + "." + name + ".offset", 0); this.length = cfg.ReadSetting(structure + "." + name + ".length", 0); // Read the options IDictionary opts = cfg.ReadSetting(structure + "." + name, new Hashtable()); foreach(DictionaryEntry de in opts) { // Is this an option and not just some value? IDictionary value = de.Value as IDictionary; if(value != null) { // Add the option this.options.Add(new GeneralizedOption(structure, name, de.Key.ToString(), value)); } } //mxd. Sort by bits step if(this.options.Count > 1) { this.options.Sort(delegate(GeneralizedOption o1, GeneralizedOption o2) { if(o1.BitsStep > o2.BitsStep) return 1; if(o1.BitsStep == o2.BitsStep) { if(o1 != o2) General.ErrorLogger.Add(ErrorType.Error, "\"" + o1.Name + "\" and \"" + o2.Name + "\" generalized categories have the same bit step (" + o1.BitsStep + ")!"); return 0; } return -1; }); } // We have no destructor GC.SuppressFinalize(this); } // Disposer internal void Dispose() { // Not already disposed? if(!isdisposed) { // Clean up options = null; // Done isdisposed = true; } } #endregion #region ================== Methods // String representation public override string ToString() { return title; } #endregion } }