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
Location:
trunk/sources/HeuristicLab.Problems.LinearAssignment.Views/3.3
Files:
2 edited

Legend:

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

    r8022 r8093  
    4545    /// </summary>
    4646    private void InitializeComponent() {
    47       this.assignmentView = new HeuristicLab.Data.Views.StringConvertibleArrayView();
    4847      this.qualityView = new HeuristicLab.Data.Views.StringConvertibleValueView();
     48      this.splitContainer = new System.Windows.Forms.SplitContainer();
     49      this.assignmentDataGridView = new System.Windows.Forms.DataGridView();
     50      this.RowsColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
     51      this.Columns = new System.Windows.Forms.DataGridViewTextBoxColumn();
     52      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
     53      this.splitContainer.Panel1.SuspendLayout();
     54      this.splitContainer.SuspendLayout();
     55      ((System.ComponentModel.ISupportInitialize)(this.assignmentDataGridView)).BeginInit();
    4956      this.SuspendLayout();
    50       //
    51       // assignmentView
    52       //
    53       this.assignmentView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    54                   | System.Windows.Forms.AnchorStyles.Left)
    55                   | System.Windows.Forms.AnchorStyles.Right)));
    56       this.assignmentView.Caption = "StringConvertibleArray View";
    57       this.assignmentView.Content = null;
    58       this.assignmentView.Location = new System.Drawing.Point(0, 30);
    59       this.assignmentView.Name = "assignmentView";
    60       this.assignmentView.ReadOnly = true;
    61       this.assignmentView.Size = new System.Drawing.Size(422, 130);
    62       this.assignmentView.TabIndex = 0;
    6357      //
    6458      // qualityView
     
    7266      this.qualityView.Name = "qualityView";
    7367      this.qualityView.ReadOnly = true;
    74       this.qualityView.Size = new System.Drawing.Size(422, 21);
     68      this.qualityView.Size = new System.Drawing.Size(413, 21);
    7569      this.qualityView.TabIndex = 1;
     70      //
     71      // splitContainer
     72      //
     73      this.splitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
     74                  | System.Windows.Forms.AnchorStyles.Left)
     75                  | System.Windows.Forms.AnchorStyles.Right)));
     76      this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
     77      this.splitContainer.Location = new System.Drawing.Point(0, 30);
     78      this.splitContainer.Name = "splitContainer";
     79      //
     80      // splitContainer.Panel1
     81      //
     82      this.splitContainer.Panel1.Controls.Add(this.assignmentDataGridView);
     83      this.splitContainer.Size = new System.Drawing.Size(413, 324);
     84      this.splitContainer.SplitterDistance = 250;
     85      this.splitContainer.TabIndex = 2;
     86      //
     87      // assignmentDataGridView
     88      //
     89      this.assignmentDataGridView.AllowUserToAddRows = false;
     90      this.assignmentDataGridView.AllowUserToDeleteRows = false;
     91      this.assignmentDataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
     92                  | System.Windows.Forms.AnchorStyles.Left)
     93                  | System.Windows.Forms.AnchorStyles.Right)));
     94      this.assignmentDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
     95      this.assignmentDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
     96            this.RowsColumn,
     97            this.Columns});
     98      this.assignmentDataGridView.Location = new System.Drawing.Point(3, 3);
     99      this.assignmentDataGridView.Name = "assignmentDataGridView";
     100      this.assignmentDataGridView.ReadOnly = true;
     101      this.assignmentDataGridView.Size = new System.Drawing.Size(244, 318);
     102      this.assignmentDataGridView.TabIndex = 0;
     103      //
     104      // RowsColumn
     105      //
     106      this.RowsColumn.HeaderText = "Rows";
     107      this.RowsColumn.Name = "RowsColumn";
     108      this.RowsColumn.ReadOnly = true;
     109      //
     110      // Columns
     111      //
     112      this.Columns.HeaderText = "Columns";
     113      this.Columns.Name = "Columns";
     114      this.Columns.ReadOnly = true;
    76115      //
    77116      // LAPAssignmentView
     
    79118      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    80119      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
     120      this.Controls.Add(this.splitContainer);
    81121      this.Controls.Add(this.qualityView);
    82       this.Controls.Add(this.assignmentView);
    83122      this.Name = "LAPAssignmentView";
    84       this.Size = new System.Drawing.Size(422, 160);
     123      this.Size = new System.Drawing.Size(413, 354);
     124      this.splitContainer.Panel1.ResumeLayout(false);
     125      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
     126      this.splitContainer.ResumeLayout(false);
     127      ((System.ComponentModel.ISupportInitialize)(this.assignmentDataGridView)).EndInit();
    85128      this.ResumeLayout(false);
    86129
     
    89132    #endregion
    90133
    91     private Data.Views.StringConvertibleArrayView assignmentView;
    92134    private Data.Views.StringConvertibleValueView qualityView;
     135    private System.Windows.Forms.SplitContainer splitContainer;
     136    private System.Windows.Forms.DataGridView assignmentDataGridView;
     137    private System.Windows.Forms.DataGridViewTextBoxColumn RowsColumn;
     138    private System.Windows.Forms.DataGridViewTextBoxColumn Columns;
    93139  }
    94140}
  • 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.