using System; using System.Collections.Generic; using System.Linq; using System.Text; using HeuristicLab.Core; using HeuristicLab.Common; namespace HeuristicLab.Problems.MetaOptimization { public abstract class ParameterConfiguration : IParameterConfiguration { public bool Optimize { get; set; } public IParameter Parameter { get; set; } public string Category { get; set; } public ParameterConfiguration() { } public ParameterConfiguration(IParameter parameter, string category) { this.Parameter = parameter; this.Category = category; Parameter.NameChanged += this.NameChanged; Parameter.NameChanging += this.NameChanging; Parameter.DescriptionChanged += this.DescriptionChanged; Parameter.ItemImageChanged += this.ItemImageChanged; parameter.ToStringChanged += this.ToStringChanged; } public bool CanChangeDescription { get { return false; } } public bool CanChangeName { get { return false; } } public string Description { get { return Parameter.Description; } set { throw new NotSupportedException(); } } public string Name { get { return Parameter.Name; } set { throw new NotSupportedException(); } } public string ItemDescription { get { return Parameter.ItemDescription; } } public System.Drawing.Image ItemImage { get { return Parameter.ItemImage; } } public string ItemName { get { return Parameter.ItemName; } } public Version ItemVersion { get { return Parameter.ItemVersion; } } #region Events public virtual event EventHandler NameChanged; public virtual event EventHandler> NameChanging; public virtual event EventHandler DescriptionChanged; public virtual event EventHandler ItemImageChanged; public virtual event EventHandler ToStringChanged; protected virtual void OnToStringChanged() { var handler = ToStringChanged; if (handler != null) handler(this, EventArgs.Empty); } #endregion #region Cloning public virtual IDeepCloneable Clone(Cloner cloner) { ParameterConfiguration clone = (ParameterConfiguration)Activator.CreateInstance(this.GetType(), true); cloner.RegisterClonedObject(this, clone); clone.Parameter = (IParameter)cloner.Clone(this.Parameter); clone.Optimize = this.Optimize; return clone; } public object Clone() { return Clone(new Cloner()); } #endregion public override string ToString() { return string.Format("{0}.{1}", Category, Parameter.Name); } public abstract IParameter GetParameterWithRandomValue(IRandom random); } }