Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/20/14 14:56:39 (10 years ago)
Author:
gkronber
Message:

#2093: merged trunk changes to prepare for reintegration

Location:
branches/LogResidualEvaluator
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/LogResidualEvaluator

  • branches/LogResidualEvaluator/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Job.cs

    r9456 r10483  
    2020#endregion
    2121
     22using System;
    2223using System.ComponentModel;
    2324using System.Text;
     25using HeuristicLab.Collections;
    2426using HeuristicLab.Common;
    2527using HeuristicLab.Core;
     
    3840        bool changed = dueDate != value;
    3941        dueDate = value;
    40         if (changed) OnPropertyChanged("DueDate");
     42        if (changed) {
     43          OnPropertyChanged("DueDate");
     44          OnToStringChanged();
     45        }
    4146      }
    4247    }
     
    4954        bool changed = index != value;
    5055        index = value;
    51         if (changed) OnPropertyChanged("Index");
     56        if (changed) {
     57          OnPropertyChanged("Index");
     58          OnToStringChanged();
     59        }
    5260      }
    5361    }
     
    6876    protected Job(Job original, Cloner cloner)
    6977      : base(original, cloner) {
    70       this.DueDate = original.DueDate;
    71       this.Index = original.Index;
    72       this.Tasks = cloner.Clone(original.Tasks);
     78      this.dueDate = original.DueDate;
     79      this.index = original.Index;
     80      this.tasks = cloner.Clone(original.Tasks);
     81      RegisterEventHandlers();
    7382    }
    7483    public Job() : this(-1, double.MaxValue) { }
    7584    public Job(int index, double dueDate)
    7685      : base() {
    77       DueDate = dueDate;
    78       Index = index;
    79       Tasks = new ItemList<Task>();
     86      this.dueDate = dueDate;
     87      this.index = index;
     88      this.tasks = new ItemList<Task>();
     89      RegisterEventHandlers();
    8090    }
    8191
     
    8494    }
    8595
     96    [StorableHook(HookType.AfterDeserialization)]
     97    private void AfterDeserialization() {
     98      RegisterEventHandlers();
     99    }
     100
     101    private void RegisterEventHandlers() {
     102      Tasks.ItemsAdded += TasksOnItemsChanged;
     103      Tasks.ItemsRemoved += TasksOnItemsChanged;
     104      Tasks.ItemsReplaced += TasksOnItemsChanged;
     105      Tasks.CollectionReset += TasksOnItemsChanged;
     106      foreach (var task in Tasks) {
     107        task.PropertyChanged += TaskOnPropertyChanged;
     108        task.ToStringChanged += TaskOnToStringChanged;
     109      }
     110    }
     111
     112    private void TasksOnItemsChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<Task>> e) {
     113      foreach (var task in e.OldItems) {
     114        task.Value.PropertyChanged -= TaskOnPropertyChanged;
     115        task.Value.ToStringChanged -= TaskOnToStringChanged;
     116      }
     117      foreach (var task in e.Items) {
     118        task.Value.PropertyChanged += TaskOnPropertyChanged;
     119        task.Value.ToStringChanged += TaskOnToStringChanged;
     120      }
     121      OnTasksChanged();
     122      OnToStringChanged();
     123    }
     124
     125    private void TaskOnPropertyChanged(object sender, EventArgs e) {
     126      OnTasksChanged();
     127    }
     128
     129    private void TaskOnToStringChanged(object sender, EventArgs e) {
     130      OnToStringChanged();
     131    }
     132
    86133    public override string ToString() {
    87134      var sb = new StringBuilder();
    88135      sb.Append("Job#" + Index + " [ ");
    89136      foreach (Task t in Tasks) {
    90         sb.Append(t.ToString() + " ");
     137        sb.Append(t + " ");
    91138      }
    92139      sb.Append("{" + DueDate + "} ");
     
    100147    }
    101148
     149    public event EventHandler TasksChanged;
     150    protected virtual void OnTasksChanged() {
     151      var handler = TasksChanged;
     152      if (handler != null) handler(this, EventArgs.Empty);
     153    }
     154
    102155    public event PropertyChangedEventHandler PropertyChanged;
    103156    protected virtual void OnPropertyChanged(string propertyName) {
Note: See TracChangeset for help on using the changeset viewer.