Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/18/10 02:27:02 (14 years ago)
Author:
swagner
Message:

Refactored HeuristicLab.Collections (#977)

Location:
trunk/sources/HeuristicLab.Core/3.3/Collections
Files:
1 added
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Core/3.3/Collections/ItemCollection.cs

    r3381 r3390  
    3232  [StorableClass]
    3333  [Item("ItemCollection<T>", "Represents a collection of items.")]
    34   public class ItemCollection<T> : ObservableCollection<T>, IItem where T : class, IItem {
     34  public class ItemCollection<T> : ObservableCollection<T>, IItemCollection<T> where T : class, IItem {
    3535    public virtual string ItemName {
    3636      get { return ItemAttribute.GetName(this.GetType()); }
     
    4343    }
    4444
    45     public ItemCollection() : base() { }
    46     public ItemCollection(int capacity) : base(capacity) { }
    47     public ItemCollection(IEnumerable<T> collection) : base(collection) { }
     45    [Storable]
     46    private List<T> Items {
     47      get { return list; }
     48      set { list = value; }
     49    }
     50
     51    [Storable]
     52    private bool readOnlyView;
     53    public virtual bool ReadOnlyView {
     54      get { return readOnlyView; }
     55      set {
     56        if ((readOnlyView != value) && !((ICollection<T>)list).IsReadOnly) {
     57          readOnlyView = value;
     58          OnReadOnlyViewChanged();
     59          OnPropertyChanged("ReadOnlyView");
     60        }
     61      }
     62    }
     63
     64    public ItemCollection()
     65      : base() {
     66      readOnlyView = ((ICollection<T>)list).IsReadOnly;
     67    }
     68    public ItemCollection(int capacity)
     69      : base(capacity) {
     70      readOnlyView = ((ICollection<T>)list).IsReadOnly;
     71    }
     72    public ItemCollection(IEnumerable<T> collection)
     73      : base(collection) {
     74      readOnlyView = ((ICollection<T>)list).IsReadOnly;
     75    }
     76    [StorableConstructor]
     77    protected ItemCollection(bool deserializing) { }
    4878
    4979    public object Clone() {
    5080      return Clone(new Cloner());
    5181    }
    52 
    5382    public virtual IDeepCloneable Clone(Cloner cloner) {
    5483      ItemCollection<T> clone = (ItemCollection<T>)Activator.CreateInstance(this.GetType());
    5584      cloner.RegisterClonedObject(this, clone);
    56       clone.ReadOnlyView = ReadOnlyView;
     85      clone.readOnlyView = readOnlyView;
    5786      clone.list = new List<T>(this.Select(x => (T)cloner.Clone(x)));
    5887      return clone;
     88    }
     89
     90    public new ReadOnlyItemCollection<T> AsReadOnly() {
     91      return new ReadOnlyItemCollection<T>(this);
    5992    }
    6093
     
    73106      if (handler != null) handler(this, EventArgs.Empty);
    74107    }
     108    public event EventHandler ReadOnlyViewChanged;
     109    protected virtual void OnReadOnlyViewChanged() {
     110      EventHandler handler = ReadOnlyViewChanged;
     111      if (handler != null) handler(this, EventArgs.Empty);
     112    }
    75113  }
    76114}
Note: See TracChangeset for help on using the changeset viewer.