Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/08/16 15:06:33 (8 years ago)
Author:
abeham
Message:

#2560:

  • changed embedding of fla in okb problem
  • added new view for characteristic calculators
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Clients.OKB.Views/3.3/RunCreation/Views/OKBProblemView.cs

    r13593 r13666  
    2121
    2222using HeuristicLab.Common.Resources;
     23using HeuristicLab.Core;
    2324using HeuristicLab.Core.Views;
    2425using HeuristicLab.Data;
     
    2829using System;
    2930using System.Collections.Generic;
     31using System.Drawing;
    3032using System.Linq;
    3133using System.Windows.Forms;
     
    3638  [Content(typeof(MultiObjectiveOKBProblem), true)]
    3739  public sealed partial class OKBProblemView : NamedItemView {
     40    private readonly CheckedItemList<ICharacteristicCalculator> calculatorList;
     41
    3842    public new OKBProblem Content {
    3943      get { return (OKBProblem)base.Content; }
     
    4347    public OKBProblemView() {
    4448      InitializeComponent();
     49      var calculatorListView = new CheckedItemListView<ICharacteristicCalculator>() {
     50        Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top,
     51        Location = new Point(flaSplitContainer.Padding.Left, calculateButton.Location.Y + calculateButton.Height + calculateButton.Padding.Bottom + 3),
     52      };
     53      calculatorListView.Size = new Size(flaSplitContainer.Panel1.Size.Width - flaSplitContainer.Panel1.Padding.Horizontal,
     54          flaSplitContainer.Panel1.Height - calculatorListView.Location.Y - flaSplitContainer.Panel1.Padding.Bottom);
     55      calculatorList = new CheckedItemList<ICharacteristicCalculator>();
     56      calculatorList.ItemsAdded += CalculatorListOnChanged;
     57      calculatorList.ItemsRemoved += CalculatorListOnChanged;
     58      calculatorList.ItemsReplaced += CalculatorListOnChanged;
     59      calculatorList.CollectionReset += CalculatorListOnChanged;
     60      calculatorList.CheckedItemsChanged += CalculatorListOnChanged;
     61
     62      calculatorListView.Content = calculatorList.AsReadOnly();
     63
     64      flaSplitContainer.Panel1.Controls.Add(calculatorListView);
     65      calculateButton.Text = string.Empty;
     66      calculateButton.Image = VSImageLibrary.Play;
    4567      refreshButton.Text = string.Empty;
    4668      refreshButton.Image = VSImageLibrary.Refresh;
     
    5173      uploadCharacteristicsButton.Text = string.Empty;
    5274      uploadCharacteristicsButton.Image = VSImageLibrary.PublishToWeb;
     75    }
     76
     77    private void CalculatorListOnChanged(object sender, EventArgs e) {
     78      SetEnabledStateOfControls();
    5379    }
    5480
     
    91117      uploadCharacteristicsButton.Enabled = Content != null && Content.ProblemId != -1 && !Locked && !ReadOnly
    92118        && characteristicsMatrixView.Content != null && characteristicsMatrixView.Content.Rows > 0;
    93       calculateButton.Enabled = Content != null && Content.ProblemId != -1 && !Locked && !ReadOnly;
     119      calculateButton.Enabled = Content != null && Content.ProblemId != -1 && !Locked && !ReadOnly && calculatorList.CheckedItems.Any();
    94120    }
    95121
     
    101127
    102128    private void UpdateCharacteristicCalculators() {
    103       calculatorListView.Items.Clear();
    104       calculatorListView.Groups.Clear();
     129      calculatorList.Clear();
    105130      if (Content == null || Content.ProblemId == -1) return;
    106131      var problem = Content.CloneProblem();
    107132      var calculators = ApplicationManager.Manager.GetInstances<ICharacteristicCalculator>().ToList();
    108       try {
    109         calculatorListView.BeginUpdate();
    110         foreach (var calc in calculators) {
    111           calc.Problem = problem;
    112           var group = calculatorListView.Groups.Add(calc.Name, calc.Name);
    113           group.Tag = calc;
    114 
    115           var paramItem = calculatorListView.Items.Add(calc.Name + ".Parameters", "Parameters");
    116           paramItem.Group = group;
    117           paramItem.Tag = "param";
    118 
    119           var charactItem = calculatorListView.Items.Add(calc.Name + ".Characteristics", "Characteristics");
    120           charactItem.Group = group;
    121           charactItem.Tag = "chara";
    122         }
    123       } finally { calculatorListView.EndUpdate(); }
     133      foreach (var calc in calculators) {
     134        calc.Problem = problem;
     135        if (!calc.CanCalculate()) continue;
     136        calculatorList.Add(calc, true);
     137      }
    124138    }
    125139
     
    193207      } catch (Exception ex) { ErrorHandling.ShowErrorDialog(ex); }
    194208    }
    195     private void calculatorListView_SelectedIndexChanged(object sender, EventArgs e) {
    196       if (InvokeRequired) {
    197         Invoke((Action<object, EventArgs>)calculatorListView_SelectedIndexChanged, sender, e);
    198         return;
    199       }
    200       if (calculatorListView.SelectedIndices.Count == 0) calculatorViewHost.Content = null;
    201       else {
    202         var item = calculatorListView.SelectedItems[0];
    203         if ((string)item.Tag == "param") {
    204           calculatorViewHost.Content = ((ICharacteristicCalculator)item.Group.Tag);
    205         } else if ((string)item.Tag == "chara") {
    206           calculatorViewHost.Content = ((ICharacteristicCalculator)item.Group.Tag).Characteristics;
    207         }
    208       }
    209     }
    210209    private void calculateButton_Click(object sender, EventArgs e) {
    211       var calculators = calculatorListView.Groups.OfType<ListViewGroup>()
    212                                                      .Select(x => (ICharacteristicCalculator)x.Tag)
    213                                                      .Where(x => x.Characteristics.CheckedItems.Any()
    214                                                               && x.CanCalculate()).ToList();
     210      var calculators = calculatorList.CheckedItems.Select(x => x.Value).Where(x => x.CanCalculate()).ToList();
    215211      if (calculators.Count == 0) return;
    216212
Note: See TracChangeset for help on using the changeset viewer.