Changeset 3716


Ignore:
Timestamp:
05/08/10 04:28:19 (12 years ago)
Author:
swagner
Message:

Implemented reviewers' comments (#947)

Location:
trunk/sources
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs

    r3694 r3716  
    217217    }
    218218    protected virtual void resetButton_Click(object sender, EventArgs e) {
    219       if (Content.Runs.Count > 0) {
    220         if (MessageBox.Show(this, "Clear all runs executed so far?", "Clear All Runs?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
    221           Content.Prepare(true);
    222         else
    223           Content.Prepare(false);
    224       } else {
    225         Content.Prepare();
    226       }
     219      Content.Prepare(false);
    227220    }
    228221    protected virtual void problemPanel_DragEnterOver(object sender, DragEventArgs e) {
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs

    r3709 r3716  
    198198    }
    199199    private void resetButton_Click(object sender, EventArgs e) {
    200       if (Content.Runs.Count > 0) {
    201         if (MessageBox.Show(this, "Clear all runs executed so far?", "Clear All Runs?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
    202           Content.Prepare(true);
    203         else
    204           Content.Prepare(false);
    205       } else {
    206         Content.Prepare();
    207       }
     200      Content.Prepare(false);
    208201    }
    209202    private void algorithmPanel_DragEnterOver(object sender, DragEventArgs e) {
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/ExperimentView.cs

    r3566 r3716  
    125125    }
    126126    private void resetButton_Click(object sender, EventArgs e) {
    127       if (Content.Runs.Count > 0) {
    128         if (MessageBox.Show(this, "Clear all runs executed so far?", "Clear All Runs?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
    129           Content.Prepare(true);
    130         else
    131           Content.Prepare(false);
    132       } else {
    133         Content.Prepare();
    134       }
     127      Content.Prepare(false);
    135128    }
    136129    #endregion
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.Designer.cs

    r3614 r3716  
    5454    private void InitializeComponent() {
    5555      this.components = new System.ComponentModel.Container();
    56       System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RunCollectionView));
    5756      this.splitContainer = new System.Windows.Forms.SplitContainer();
    5857      this.toolStrip = new System.Windows.Forms.ToolStrip();
     
    7069      this.constraintPage = new System.Windows.Forms.TabPage();
    7170      this.runCollectionConstraintCollectionView = new HeuristicLab.Core.Views.RunCollectionConstraintCollectionView();
     71      this.clearButton = new System.Windows.Forms.Button();
    7272      this.splitContainer.Panel1.SuspendLayout();
    7373      this.splitContainer.Panel2.SuspendLayout();
     
    9090      // splitContainer.Panel1
    9191      //
     92      this.splitContainer.Panel1.Controls.Add(this.clearButton);
    9293      this.splitContainer.Panel1.Controls.Add(this.toolStrip);
    9394      this.splitContainer.Panel1.Controls.Add(this.itemsListView);
     
    113114      this.toolStrip.Location = new System.Drawing.Point(30, 3);
    114115      this.toolStrip.Name = "toolStrip";
    115       this.toolStrip.Size = new System.Drawing.Size(217, 24);
     116      this.toolStrip.Size = new System.Drawing.Size(166, 24);
    116117      this.toolStrip.TabIndex = 1;
    117118      this.toolStrip.Text = "toolStrip1";
     
    141142      this.itemsListView.Size = new System.Drawing.Size(244, 295);
    142143      this.itemsListView.SmallImageList = this.imageList;
    143       this.itemsListView.TabIndex = 1;
     144      this.itemsListView.TabIndex = 3;
    144145      this.itemsListView.UseCompatibleStateImageBehavior = false;
    145146      this.itemsListView.View = System.Windows.Forms.View.Details;
     
    218219      this.tabControl.SelectedIndex = 0;
    219220      this.tabControl.Size = new System.Drawing.Size(532, 383);
    220       this.tabControl.TabIndex = 1;
     221      this.tabControl.TabIndex = 0;
    221222      //
    222223      // runPage
     
    252253      this.runCollectionConstraintCollectionView.Size = new System.Drawing.Size(518, 351);
    253254      this.runCollectionConstraintCollectionView.TabIndex = 0;
     255      //
     256      // clearButton
     257      //
     258      this.clearButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
     259      this.clearButton.Enabled = false;
     260      this.clearButton.Location = new System.Drawing.Point(199, 3);
     261      this.clearButton.Name = "clearButton";
     262      this.clearButton.Size = new System.Drawing.Size(48, 24);
     263      this.clearButton.TabIndex = 2;
     264      this.clearButton.Text = "&Clear";
     265      this.toolTip.SetToolTip(this.clearButton, "Remove All Runs");
     266      this.clearButton.UseVisualStyleBackColor = true;
     267      this.clearButton.Click += new System.EventHandler(this.clearButton_Click);
    254268      //
    255269      // RunCollectionView
     
    286300    protected ToolStrip toolStrip;
    287301    protected ToolStripDropDownButton analyzeRunsToolStripDropDownButton;
    288     private TabControl tabControl;
    289     private TabPage runPage;
    290     private TabPage constraintPage;
    291     private HeuristicLab.Core.Views.RunCollectionConstraintCollectionView runCollectionConstraintCollectionView;
     302    protected TabControl tabControl;
     303    protected TabPage runPage;
     304    protected TabPage constraintPage;
     305    protected HeuristicLab.Core.Views.RunCollectionConstraintCollectionView runCollectionConstraintCollectionView;
     306    protected Button clearButton;
    292307  }
    293308}
  • trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs

    r3709 r3716  
    131131        viewHost.Enabled = false;
    132132        removeButton.Enabled = false;
     133        clearButton.Enabled = false;
    133134      } else {
    134135        analyzeRunsToolStripDropDownButton.Enabled = itemsListView.Items.Count > 0;
     
    137138        detailsGroupBox.Enabled = true;
    138139        removeButton.Enabled = itemsListView.SelectedItems.Count > 0 && !Content.IsReadOnly && !ReadOnly;
     140        clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
    139141        viewHost.Enabled = true;
    140142      }
     
    268270      }
    269271    }
     272    protected virtual void clearButton_Click(object sender, EventArgs e) {
     273      Content.Clear();
     274    }
    270275    #endregion
    271276
     
    279284          AddListViewItem(CreateListViewItem(item));
    280285        analyzeRunsToolStripDropDownButton.Enabled = itemsListView.Items.Count > 0;
     286        clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
    281287        runCollectionConstraintCollectionView.ReadOnly = itemsListView.Items.Count == 0;
    282288      }
     
    294300        }
    295301        analyzeRunsToolStripDropDownButton.Enabled = itemsListView.Items.Count > 0;
     302        clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
    296303        runCollectionConstraintCollectionView.ReadOnly = itemsListView.Items.Count == 0;
    297304      }
     
    312319          AddListViewItem(CreateListViewItem(item));
    313320        analyzeRunsToolStripDropDownButton.Enabled = itemsListView.Items.Count > 0;
     321        clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
    314322        runCollectionConstraintCollectionView.ReadOnly = itemsListView.Items.Count == 0;
    315323      }
     
    357365    }
    358366    #endregion
     367
    359368  }
    360369}
  • trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs

    r3694 r3716  
    2323using System.Collections.Generic;
    2424using System.Drawing;
     25using HeuristicLab.Collections;
    2526using HeuristicLab.Common;
    2627using HeuristicLab.Core;
     
    9798    public RunCollection Runs {
    9899      get { return runs; }
     100      protected set {
     101        if (value == null) throw new ArgumentNullException();
     102        if (runs != value) {
     103          if (runs != null) DeregisterRunsEvents();
     104          runs = value;
     105          if (runs != null) RegisterRunsEvents();
     106        }
     107      }
    99108    }
    100109
     
    104113      executionTime = TimeSpan.Zero;
    105114      runsCounter = 0;
    106       runs = new RunCollection();
     115      Runs = new RunCollection();
    107116    }
    108117    protected Algorithm(string name)
     
    111120      executionTime = TimeSpan.Zero;
    112121      runsCounter = 0;
    113       runs = new RunCollection();
     122      Runs = new RunCollection();
    114123    }
    115124    protected Algorithm(string name, ParameterCollection parameters)
     
    118127      executionTime = TimeSpan.Zero;
    119128      runsCounter = 0;
    120       runs = new RunCollection();
     129      Runs = new RunCollection();
    121130    }
    122131    protected Algorithm(string name, string description)
     
    125134      executionTime = TimeSpan.Zero;
    126135      runsCounter = 0;
    127       runs = new RunCollection();
     136      Runs = new RunCollection();
    128137    }
    129138    protected Algorithm(string name, string description, ParameterCollection parameters)
     
    132141      executionTime = TimeSpan.Zero;
    133142      runsCounter = 0;
    134       runs = new RunCollection();
     143      Runs = new RunCollection();
    135144    }
    136145    [StorableConstructor]
     
    140149    private void Initialize() {
    141150      if (problem != null) RegisterProblemEvents();
     151      if (runs != null) RegisterRunsEvents();
    142152    }
    143153
     
    176186      if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped))
    177187        throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
    178       if (clearRuns) {
    179         runsCounter = 0;
    180         runs.Clear();
    181       }
     188      if (clearRuns) runs.Clear();
    182189      Prepare();
    183190    }
     
    264271      problem.OperatorsChanged += new EventHandler(Problem_OperatorsChanged);
    265272    }
    266 
    267273    protected virtual void Problem_SolutionCreatorChanged(object sender, EventArgs e) { }
    268274    protected virtual void Problem_EvaluatorChanged(object sender, EventArgs e) { }
    269275    protected virtual void Problem_OperatorsChanged(object sender, EventArgs e) { }
     276
     277    protected virtual void DeregisterRunsEvents() {
     278      runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
     279    }
     280    protected virtual void RegisterRunsEvents() {
     281      runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
     282    }
     283    protected virtual void Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
     284      runsCounter = runs.Count;
     285    }
    270286    #endregion
    271287  }
  • trunk/sources/HeuristicLab.Optimization/3.3/BatchRun.cs

    r3372 r3716  
    2222using System;
    2323using System.Drawing;
     24using HeuristicLab.Collections;
    2425using HeuristicLab.Common;
    2526using HeuristicLab.Core;
     27using HeuristicLab.Data;
    2628using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    27 using HeuristicLab.Collections;
    2829
    2930namespace HeuristicLab.Optimization {
     
    8384          if (algorithm != null) RegisterAlgorithmEvents();
    8485          OnAlgorithmChanged();
    85           Prepare(true);
     86          Prepare();
    8687        }
    8788      }
     
    9697          repetitions = value;
    9798          OnRepetitionsChanged();
    98           if ((runs.Count < repetitions) && (Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Stopped))
     99          if ((Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Stopped))
    99100            Prepare();
    100101        }
    101102      }
    102103    }
     104    [Storable]
     105    private int repetitionsCounter;
    103106
    104107    [Storable]
     
    106109    public RunCollection Runs {
    107110      get { return runs; }
     111      private set {
     112        if (value == null) throw new ArgumentNullException();
     113        if (runs != value) {
     114          if (runs != null) DeregisterRunsEvents();
     115          runs = value;
     116          if (runs != null) RegisterRunsEvents();
     117        }
     118      }
    108119    }
    109120
     
    117128      executionTime = TimeSpan.Zero;
    118129      repetitions = 10;
    119       runs = new RunCollection();
     130      repetitionsCounter = 0;
     131      Runs = new RunCollection();
    120132      stopPending = false;
    121133    }
     
    126138      executionTime = TimeSpan.Zero;
    127139      repetitions = 10;
    128       runs = new RunCollection();
     140      repetitionsCounter = 0;
     141      Runs = new RunCollection();
    129142      stopPending = false;
    130143    }
     
    134147      executionTime = TimeSpan.Zero;
    135148      repetitions = 10;
    136       runs = new RunCollection();
     149      repetitionsCounter = 0;
     150      Runs = new RunCollection();
    137151      stopPending = false;
    138152    }
     
    146160    private void Initialize() {
    147161      if (algorithm != null) RegisterAlgorithmEvents();
     162      if (runs != null) RegisterRunsEvents();
    148163    }
    149164
     
    155170      clone.algorithm = (IAlgorithm)cloner.Clone(algorithm);
    156171      clone.repetitions = repetitions;
     172      clone.repetitionsCounter = repetitionsCounter;
    157173      clone.runs = (RunCollection)cloner.Clone(runs);
    158174      clone.stopPending = stopPending;
     
    168184        throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState));
    169185      if (Algorithm != null) {
    170         if (clearRuns) {
    171           ExecutionTime = TimeSpan.Zero;
    172           runs.Clear();
    173         }
     186        repetitionsCounter = 0;
     187        if (clearRuns) runs.Clear();
    174188        Algorithm.Prepare(clearRuns);
    175189      }
     
    183197      if (ExecutionState != ExecutionState.Started)
    184198        throw new InvalidOperationException(string.Format("Pause not allowed in execution state \"{0}\".", ExecutionState));
    185       if (Algorithm != null) Algorithm.Pause();
     199      if ((Algorithm != null) && (Algorithm.ExecutionState == ExecutionState.Started))
     200        Algorithm.Pause();
    186201    }
    187202    public void Stop() {
     
    189204        throw new InvalidOperationException(string.Format("Stop not allowed in execution state \"{0}\".", ExecutionState));
    190205      stopPending = true;
    191       if (Algorithm != null) Algorithm.Stop();
     206      if ((Algorithm != null) &&
     207          ((Algorithm.ExecutionState == ExecutionState.Started) || (Algorithm.ExecutionState == ExecutionState.Paused)))
     208        Algorithm.Stop();
    192209    }
    193210
     
    285302    private void Algorithm_Stopped(object sender, EventArgs e) {
    286303      ExecutionTime += Algorithm.ExecutionTime;
    287 
    288       if (!stopPending && (runs.Count < repetitions)) {
     304      repetitionsCounter++;
     305
     306      if (!stopPending && (repetitionsCounter < repetitions)) {
    289307        Algorithm.Prepare();
    290308        Algorithm.Start();
     
    303321      Runs.RemoveRange(e.Items);
    304322    }
     323
     324    private void RegisterRunsEvents() {
     325      runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
     326      runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved);
     327    }
     328    private void DeregisterRunsEvents() {
     329      runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
     330      runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved);
     331    }
     332    private void Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
     333      foreach (IRun run in e.OldItems) {
     334        IItem item;
     335        run.Results.TryGetValue("Execution Time", out item);
     336        TimeSpanValue executionTime = item as TimeSpanValue;
     337        if (executionTime != null) ExecutionTime -= executionTime.Value;
     338      }
     339      if (Algorithm != null) Algorithm.Runs.RemoveRange(e.OldItems);
     340      foreach (IRun run in e.Items) {
     341        IItem item;
     342        run.Results.TryGetValue("Execution Time", out item);
     343        TimeSpanValue executionTime = item as TimeSpanValue;
     344        if (executionTime != null) ExecutionTime += executionTime.Value;
     345      }
     346    }
     347    private void Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
     348      foreach (IRun run in e.Items) {
     349        IItem item;
     350        run.Results.TryGetValue("Execution Time", out item);
     351        TimeSpanValue executionTime = item as TimeSpanValue;
     352        if (executionTime != null) ExecutionTime -= executionTime.Value;
     353      }
     354      if (Algorithm != null) Algorithm.Runs.RemoveRange(e.Items);
     355    }
    305356    #endregion
    306357  }
  • trunk/sources/HeuristicLab.Optimization/3.3/Experiment.cs

    r3372 r3716  
    7979    public RunCollection Runs {
    8080      get { return runs; }
     81      private set {
     82        if (value == null) throw new ArgumentNullException();
     83        if (runs != value) {
     84          if (runs != null) DeregisterRunsEvents();
     85          runs = value;
     86          if (runs != null) RegisterRunsEvents();
     87        }
     88      }
    8189    }
    8290
     
    9098      executionTime = TimeSpan.Zero;
    9199      optimizers = new OptimizerList();
    92       runs = new RunCollection();
     100      Runs = new RunCollection();
    93101      stopPending = false;
    94102      Initialize();
     
    100108      executionTime = TimeSpan.Zero;
    101109      optimizers = new OptimizerList();
    102       runs = new RunCollection();
     110      Runs = new RunCollection();
    103111      stopPending = false;
    104112      Initialize();
     
    109117      executionTime = TimeSpan.Zero;
    110118      optimizers = new OptimizerList();
    111       runs = new RunCollection();
     119      Runs = new RunCollection();
    112120      stopPending = false;
    113121      Initialize();
     
    124132      foreach (IOptimizer optimizer in optimizers)
    125133        RegisterOptimizerEvents(optimizer);
     134      if (runs != null) RegisterRunsEvents();
    126135    }
    127136
     
    236245      foreach (IndexedItem<IOptimizer> item in e.Items) {
    237246        RegisterOptimizerEvents(item.Value);
     247        item.Value.Prepare();
    238248      }
    239249    }
     
    241251      foreach (IndexedItem<IOptimizer> item in e.Items) {
    242252        RegisterOptimizerEvents(item.Value);
     253        item.Value.Prepare();
    243254      }
    244255    }
     
    254265      foreach (IndexedItem<IOptimizer> item in e.Items) {
    255266        RegisterOptimizerEvents(item.Value);
     267        item.Value.Prepare();
    256268      }
    257269    }
     
    317329      Runs.RemoveRange(e.Items);
    318330    }
     331
     332    private void RegisterRunsEvents() {
     333      runs.CollectionReset += new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
     334      runs.ItemsRemoved += new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved);
     335    }
     336    private void DeregisterRunsEvents() {
     337      runs.CollectionReset -= new CollectionItemsChangedEventHandler<IRun>(Runs_CollectionReset);
     338      runs.ItemsRemoved -= new CollectionItemsChangedEventHandler<IRun>(Runs_ItemsRemoved);
     339    }
     340    private void Runs_CollectionReset(object sender, CollectionItemsChangedEventArgs<IRun> e) {
     341      foreach (IOptimizer optimizer in Optimizers)
     342        optimizer.Runs.RemoveRange(e.OldItems);
     343    }
     344    private void Runs_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IRun> e) {
     345      foreach (IOptimizer optimizer in Optimizers)
     346        optimizer.Runs.RemoveRange(e.Items);
     347    }
    319348    #endregion
    320349  }
  • trunk/sources/HeuristicLab.Optimization/3.3/RunCollection.cs

    r3632 r3716  
    3030
    3131namespace HeuristicLab.Optimization {
     32  [Item("Run Collection", "Represents a collection of runs.")]
     33  [Creatable("Testing & Analysis")]
    3234  [StorableClass]
    33   [Item("RunCollection", "Represents a collection of runs.")]
    3435  public class RunCollection : ItemCollection<IRun>, IStringConvertibleMatrix {
    3536    public RunCollection() : base() { Initialize(); }
Note: See TracChangeset for help on using the changeset viewer.