Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/24/12 17:57:51 (12 years ago)
Author:
abeham
Message:

#1855:

  • Added possibility to name row and column in matrix (to have more interpretable results)
  • Added a "standard" assignment problem
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.LinearAssignment.Views/3.3/LAPAssignmentView.cs

    r8022 r8093  
    2020#endregion
    2121
     22using System;
    2223using System.ComponentModel;
    2324using System.Windows.Forms;
     25using HeuristicLab.Common;
    2426using HeuristicLab.Core.Views;
     27using HeuristicLab.Encodings.PermutationEncoding;
    2528using HeuristicLab.MainForm;
    2629using HeuristicLab.MainForm.WindowsForms;
     
    3033  [Content(typeof(LAPAssignment), IsDefaultView = true)]
    3134  public partial class LAPAssignmentView : ItemView {
     35    private ViewHost assignmentViewHost;
     36
    3237    public new LAPAssignment Content {
    3338      get { return (LAPAssignment)base.Content; }
     
    3742    public LAPAssignmentView() {
    3843      InitializeComponent();
     44      assignmentViewHost = new ViewHost();
     45      assignmentViewHost.Dock = DockStyle.Fill;
     46      assignmentViewHost.ViewsLabelVisible = true;
     47      splitContainer.Panel2.Controls.Add(assignmentViewHost);
    3948    }
    4049
     
    4251    protected override void DeregisterContentEvents() {
    4352      Content.PropertyChanged -= new PropertyChangedEventHandler(Content_PropertyChanged);
     53      if (Content.Assignment != null) Content.Assignment.ItemChanged -= new EventHandler<EventArgs<int>>(Assignment_ItemChanged);
     54      if (Content.RowNames != null) Content.RowNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged);
     55      if (Content.ColumnNames != null) Content.ColumnNames.ItemChanged -= new EventHandler<EventArgs<int>>(Names_ItemChanged);
    4456      base.DeregisterContentEvents();
    4557    }
     
    4759      base.RegisterContentEvents();
    4860      Content.PropertyChanged += new PropertyChangedEventHandler(Content_PropertyChanged);
     61      if (Content.Assignment != null) Content.Assignment.ItemChanged += new EventHandler<EventArgs<int>>(Assignment_ItemChanged);
     62      if (Content.RowNames != null) Content.RowNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged);
     63      if (Content.ColumnNames != null) Content.ColumnNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged);
     64    }
     65
     66    private void Assignment_ItemChanged(object sender, EventArgs<int> e) {
     67      if (sender != Content.Assignment)
     68        ((Permutation)sender).ItemChanged -= new EventHandler<EventArgs<int>>(Assignment_ItemChanged);
     69      else UpdateAssignmentMatrix();
     70    }
     71
     72    private void Names_ItemChanged(object sender, EventArgs<int> e) {
     73      UpdateAssignmentMatrix();
    4974    }
    5075    #endregion
     
    5479      if (Content == null) {
    5580        qualityView.Content = null;
    56         assignmentView.Content = null;
     81        assignmentViewHost.Content = null;
     82        assignmentDataGridView.Rows.Clear();
    5783      } else {
    5884        qualityView.Content = Content.Quality;
    59         assignmentView.Content = Content.Assignment;
     85        assignmentViewHost.Content = Content.Assignment;
     86        UpdateAssignmentMatrix();
    6087      }
    6188    }
     
    6390    protected override void SetEnabledStateOfControls() {
    6491      base.SetEnabledStateOfControls();
     92      assignmentDataGridView.Enabled = Content != null;
    6593    }
    6694
     
    7098        case "Quality": qualityView.Content = Content.Quality;
    7199          break;
    72         case "Assignment": assignmentView.Content = Content.Assignment;
     100        case "Assignment":
     101          if (Content.Assignment != null)
     102            Content.Assignment.ItemChanged += new EventHandler<EventArgs<int>>(Assignment_ItemChanged);
     103          assignmentViewHost.Content = Content.Assignment;
     104          UpdateAssignmentMatrix();
     105          break;
     106        case "RowNames":
     107          if (Content.RowNames != null)
     108            Content.RowNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged);
     109          UpdateAssignmentMatrix();
     110          break;
     111        case "ColumnNames":
     112          if (Content.ColumnNames != null)
     113            Content.ColumnNames.ItemChanged += new EventHandler<EventArgs<int>>(Names_ItemChanged);
     114          UpdateAssignmentMatrix();
    73115          break;
    74116        default: break;
     
    76118    }
    77119    #endregion
     120
     121    private void UpdateAssignmentMatrix() {
     122      assignmentDataGridView.Rows.Clear();
     123      if (Content.Assignment != null) {
     124        string rowName, colName;
     125        var rows = new DataGridViewRow[Content.Assignment.Length];
     126        for (int i = 0; i < Content.Assignment.Length; i++) {
     127          if (Content.RowNames != null && Content.RowNames.Length > i)
     128            rowName = Content.RowNames[i];
     129          else rowName = "Row " + (i + 1).ToString();
     130          if (Content.ColumnNames != null && Content.ColumnNames.Length > Content.Assignment[i])
     131            colName = Content.ColumnNames[Content.Assignment[i]];
     132          else colName = "Column " + (Content.Assignment[i] + 1).ToString();
     133          rows[i] = new DataGridViewRow();
     134          rows[i].CreateCells(assignmentDataGridView, new string[] { rowName, colName });
     135        }
     136        assignmentDataGridView.Rows.AddRange(rows);
     137        assignmentDataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
     138      }
     139    }
     140
    78141  }
    79142}
Note: See TracChangeset for help on using the changeset viewer.