Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/31/11 11:52:11 (13 years ago)
Author:
abeham
Message:

#1628

  • Updated branch from trunk
  • Changed ReferenceEqualityComparer<T> to become a non-generic class (generic implementation probably was only made because of lacking support for co- and contravariance in C# 3.5)
  • Added finished experiment from sample algorithms to the tests
  • Wrote a unit test to instantiate every IDeepCloneable type, clone it and compare the objects in the object graph for equal references
  • Wrote a unit test to load the experiment, clone it and compare again the objects in the object graph
  • Preliminary fix for a potential bug in ThreadSafeLog
  • Preliminary fix for a potential bug in OperatorGraphVisualizationInfo
  • Preliminary fix for a potential bug in Calculator (and added license headers)
  • Preliminary fix for a potential bug in ScrambleMove
Location:
branches/GeneralizedQAP
Files:
13 edited
8 copied

Legend:

Unmodified
Added
Removed
  • branches/GeneralizedQAP

  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionModelView.cs

    r6642 r6685  
    1919 */
    2020#endregion
     21
     22using System.Linq;
    2123using System.Windows.Forms;
     24using HeuristicLab.Common;
    2225using HeuristicLab.Core.Views;
    2326using HeuristicLab.MainForm;
     
    4447    protected override void OnContentChanged() {
    4548      base.OnContentChanged();
    46       if (Content != null)
     49      if (Content != null) {
     50        view.Locked = Content.ProblemData == ClassificationEnsembleProblemData.EmptyProblemData;
    4751        view.Content = Content.ClassificationSolutions;
    48       else
     52      } else
    4953        view.Content = null;
    5054    }
     
    6266        detailsGroupBox.Enabled = Content != null && itemsListView.SelectedItems.Count == 1;
    6367      }
     68
     69      protected override void itemsListView_DragEnter(object sender, DragEventArgs e) {
     70        validDragOperation = false;
     71        if (ReadOnly || Locked) return;
     72        if (Content.IsReadOnly) return;
     73
     74        var dropData = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
     75        validDragOperation = dropData.GetObjectGraphObjects().OfType<IClassificationSolution>().Any();
     76      }
     77      protected override void itemsListView_DragDrop(object sender, DragEventArgs e) {
     78        if (e.Effect != DragDropEffects.None) {
     79          var dropData = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
     80          var solutions = dropData.GetObjectGraphObjects().OfType<IClassificationSolution>();
     81          if (e.Effect.HasFlag(DragDropEffects.Copy)) {
     82            Cloner cloner = new Cloner();
     83            solutions = solutions.Select(s => cloner.Clone(s));
     84          }
     85          foreach (var solution in solutions)
     86            Content.Add(solution);
     87        }
     88      }
    6489    }
    6590  }
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj

    r6642 r6685  
    110110  </ItemGroup>
    111111  <ItemGroup>
     112    <Compile Include="Classification\ClassificationEnsembleSolutionEstimatedClassValuesView.cs">
     113      <SubType>UserControl</SubType>
     114    </Compile>
     115    <Compile Include="Classification\ClassificationEnsembleSolutionEstimatedClassValuesView.Designer.cs">
     116      <DependentUpon>ClassificationEnsembleSolutionEstimatedClassValuesView.cs</DependentUpon>
     117    </Compile>
    112118    <Compile Include="Classification\ClassificationEnsembleSolutionModelView.cs">
    113119      <SubType>UserControl</SubType>
     
    182188      <DependentUpon>ClusteringSolutionView.cs</DependentUpon>
    183189    </Compile>
     190    <Compile Include="Solution Views\ClassificationEnsembleSolutionView.cs">
     191      <SubType>UserControl</SubType>
     192    </Compile>
     193    <Compile Include="Solution Views\ClassificationEnsembleSolutionView.Designer.cs">
     194      <DependentUpon>ClassificationEnsembleSolutionView.cs</DependentUpon>
     195    </Compile>
    184196    <Compile Include="Solution Views\DiscriminantFunctionClassificationSolutionView.cs">
    185197      <SubType>UserControl</SubType>
     
    202214    <Compile Include="Interfaces\IDataAnalysisSolutionEvaluationView.cs" />
    203215    <Compile Include="MenuItems\CreateEnsembleMenuItem.cs" />
     216    <Compile Include="Solution Views\NamedDataAnalysisSolutionView.cs">
     217      <SubType>UserControl</SubType>
     218    </Compile>
     219    <Compile Include="Solution Views\NamedDataAnalysisSolutionView.Designer.cs">
     220      <DependentUpon>NamedDataAnalysisSolutionView.cs</DependentUpon>
     221    </Compile>
     222    <Compile Include="Solution Views\RegressionEnsembleSolutionView.cs">
     223      <SubType>UserControl</SubType>
     224    </Compile>
     225    <Compile Include="Solution Views\RegressionEnsembleSolutionView.Designer.cs">
     226      <DependentUpon>RegressionEnsembleSolutionView.cs</DependentUpon>
     227    </Compile>
    204228    <Compile Include="Solution Views\RegressionSolutionView.cs">
    205229      <SubType>UserControl</SubType>
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelView.cs

    r6642 r6685  
    1919 */
    2020#endregion
     21
     22using System.Linq;
    2123using System.Windows.Forms;
     24using HeuristicLab.Common;
    2225using HeuristicLab.Core.Views;
    2326using HeuristicLab.MainForm;
     
    4447    protected override void OnContentChanged() {
    4548      base.OnContentChanged();
    46       if (Content != null)
     49      if (Content != null) {
     50        view.Locked = Content.ProblemData == RegressionEnsembleProblemData.EmptyProblemData;
    4751        view.Content = Content.RegressionSolutions;
    48       else
     52      } else
    4953        view.Content = null;
    5054    }
     
    5963        addButton.Enabled = Content != null && !Content.IsReadOnly && !Locked;
    6064        removeButton.Enabled = Content != null && !Content.IsReadOnly && !Locked && itemsListView.SelectedItems.Count > 0;
    61         itemsListView.Enabled = Content != null;
     65        itemsListView.Enabled = Content != null && !Locked;
    6266        detailsGroupBox.Enabled = Content != null && itemsListView.SelectedItems.Count == 1;
     67      }
     68
     69      protected override void itemsListView_DragEnter(object sender, DragEventArgs e) {
     70        validDragOperation = false;
     71        if (ReadOnly || Locked) return;
     72        if (Content.IsReadOnly) return;
     73
     74        var dropData = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
     75        validDragOperation = dropData.GetObjectGraphObjects().OfType<IRegressionSolution>().Any();
     76      }
     77      protected override void itemsListView_DragDrop(object sender, DragEventArgs e) {
     78        if (e.Effect != DragDropEffects.None) {
     79          var dropData = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
     80          var solutions = dropData.GetObjectGraphObjects().OfType<IRegressionSolution>();
     81          if (e.Effect.HasFlag(DragDropEffects.Copy)) {
     82            Cloner cloner = new Cloner();
     83            solutions = solutions.Select(s => cloner.Clone(s));
     84          }
     85          foreach (var solution in solutions)
     86            Content.Add(solution);
     87        }
    6388      }
    6489    }
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionLineChartView.Designer.cs

    r5809 r6685  
    6363      this.chart.Size = new System.Drawing.Size(358, 225);
    6464      this.chart.TabIndex = 0;
     65      this.chart.CustomizeLegend += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.CustomizeLegendEventArgs>(this.chart_CustomizeLegend);
    6566      this.chart.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.Chart_MouseDoubleClick);
     67      this.chart.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDown);
     68      this.chart.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chart_MouseMove);
    6669      //
    67       // LineChartView
     70      // RegressionSolutionLineChartView
    6871      //
    6972      this.AllowDrop = true;
     
    7174      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    7275      this.Controls.Add(this.chart);
    73       this.Name = "LineChartView";
     76      this.Name = "RegressionSolutionLineChartView";
    7477      this.Size = new System.Drawing.Size(358, 225);
    7578      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionLineChartView.cs

    r6642 r6685  
    2020#endregion
    2121using System;
     22using System.Collections.Generic;
    2223using System.Drawing;
    2324using System.Linq;
     
    3435    private const string ESTIMATEDVALUES_TRAINING_SERIES_NAME = "Estimated Values (training)";
    3536    private const string ESTIMATEDVALUES_TEST_SERIES_NAME = "Estimated Values (test)";
     37    private const string ESTIMATEDVALUES_ALL_SERIES_NAME = "Estimated Values (all samples)";
    3638
    3739    public new IRegressionSolution Content {
     
    7072        this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].LegendText = ESTIMATEDVALUES_TRAINING_SERIES_NAME;
    7173        this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].ChartType = SeriesChartType.FastLine;
    72         this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].Points.DataBindXY(Content.ProblemData.TrainingIndizes.ToArray(),
    73           Content.EstimatedTrainingValues.ToArray());
    74         this.chart.DataManipulator.InsertEmptyPoints(Content.ProblemData.Dataset.Rows, IntervalType.Number, ESTIMATEDVALUES_TRAINING_SERIES_NAME);
     74        this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].Points.DataBindXY(Content.ProblemData.TrainingIndizes.ToArray(), Content.EstimatedTrainingValues.ToArray());
    7575        this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].Tag = Content;
     76        this.chart.DataManipulator.InsertEmptyPoints(1, IntervalType.Number, ESTIMATEDVALUES_TRAINING_SERIES_NAME);
     77        this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].EmptyPointStyle.BorderWidth = 0;
     78        this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].EmptyPointStyle.MarkerStyle = MarkerStyle.None;
     79
    7680
    7781        this.chart.Series.Add(ESTIMATEDVALUES_TEST_SERIES_NAME);
    7882        this.chart.Series[ESTIMATEDVALUES_TEST_SERIES_NAME].LegendText = ESTIMATEDVALUES_TEST_SERIES_NAME;
    7983        this.chart.Series[ESTIMATEDVALUES_TEST_SERIES_NAME].ChartType = SeriesChartType.FastLine;
    80         this.chart.Series[ESTIMATEDVALUES_TEST_SERIES_NAME].Points.DataBindXY(Content.ProblemData.TestIndizes.ToArray(),
    81           Content.EstimatedTestValues.ToArray());
     84        this.chart.Series[ESTIMATEDVALUES_TEST_SERIES_NAME].Points.DataBindXY(Content.ProblemData.TestIndizes.ToArray(), Content.EstimatedTestValues.ToArray());
    8285        this.chart.Series[ESTIMATEDVALUES_TEST_SERIES_NAME].Tag = Content;
     86
     87
     88        int[] allIndizes = Enumerable.Range(0, Content.ProblemData.Dataset.Rows).Except(Content.ProblemData.TrainingIndizes).Except(Content.ProblemData.TestIndizes).ToArray();
     89        var estimatedValues = Content.EstimatedValues.ToArray();
     90        List<double> allEstimatedValues = allIndizes.Select(index => estimatedValues[index]).ToList();
     91
     92        this.chart.Series.Add(ESTIMATEDVALUES_ALL_SERIES_NAME);
     93        this.chart.Series[ESTIMATEDVALUES_ALL_SERIES_NAME].LegendText = ESTIMATEDVALUES_ALL_SERIES_NAME;
     94        this.chart.Series[ESTIMATEDVALUES_ALL_SERIES_NAME].ChartType = SeriesChartType.FastLine;
     95        this.chart.Series[ESTIMATEDVALUES_ALL_SERIES_NAME].Points.DataBindXY(allIndizes, allEstimatedValues);
     96        this.chart.Series[ESTIMATEDVALUES_ALL_SERIES_NAME].Tag = Content;
     97        this.chart.DataManipulator.InsertEmptyPoints(1, IntervalType.Number, ESTIMATEDVALUES_ALL_SERIES_NAME);
     98        this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].EmptyPointStyle.BorderWidth = 0;
     99        this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].EmptyPointStyle.MarkerStyle = MarkerStyle.None;
     100        this.ToggleSeriesData(this.chart.Series[ESTIMATEDVALUES_ALL_SERIES_NAME]);
     101
    83102        UpdateCursorInterval();
    84103        this.UpdateStripLines();
     
    109128    }
    110129
    111     private void Content_ProblemDataChanged(object sender, EventArgs e) {
    112       RedrawChart();
    113     }
    114 
    115     private void Content_ModelChanged(object sender, EventArgs e) {
    116       UpdateEstimatedValuesLineChart();
    117     }
    118 
    119130    protected override void OnContentChanged() {
    120131      base.OnContentChanged();
    121132      RedrawChart();
    122133    }
    123 
    124     private void UpdateEstimatedValuesLineChart() {
    125       if (InvokeRequired) Invoke((Action)UpdateEstimatedValuesLineChart);
    126       else {
    127         if (this.chart.Series.Count > 0) {
    128           Series s = this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME];
    129           if (s != null) {
    130             s.Points.DataBindXY(Content.ProblemData.TrainingIndizes.ToArray(), Content.EstimatedTrainingValues.ToArray());
    131             s.LegendText = ESTIMATEDVALUES_TRAINING_SERIES_NAME;
    132           }
    133           s = this.chart.Series[ESTIMATEDVALUES_TEST_SERIES_NAME];
    134           if (s != null) {
    135             s.Points.DataBindXY(Content.ProblemData.TestIndizes.ToArray(), Content.EstimatedTestValues.ToArray());
    136             s.LegendText = ESTIMATEDVALUES_TEST_SERIES_NAME;
    137           }
    138           this.UpdateStripLines();
    139           UpdateCursorInterval();
    140         }
    141       }
    142     }
     134    private void Content_ProblemDataChanged(object sender, EventArgs e) {
     135      RedrawChart();
     136    }
     137    private void Content_ModelChanged(object sender, EventArgs e) {
     138      RedrawChart();
     139    }
     140
     141
    143142
    144143    private void Chart_MouseDoubleClick(object sender, MouseEventArgs e) {
     
    201200      this.chart.ChartAreas[0].AxisX.StripLines.Add(stripLine);
    202201    }
     202
     203    private void ToggleSeriesData(Series series) {
     204      if (series.Points.Count > 0) {  //checks if series is shown
     205        if (this.chart.Series.Any(s => s != series && s.Points.Count > 0)) {
     206          series.Points.Clear();
     207        }
     208      } else if (Content != null) {
     209        string targetVariableName = Content.ProblemData.TargetVariable;
     210
     211        IEnumerable<int> indizes = null;
     212        IEnumerable<double> predictedValues = null;
     213        switch (series.Name) {
     214          case ESTIMATEDVALUES_ALL_SERIES_NAME:
     215            indizes = Enumerable.Range(0, Content.ProblemData.Dataset.Rows).Except(Content.ProblemData.TrainingIndizes).Except(Content.ProblemData.TestIndizes).ToArray();
     216            var estimatedValues = Content.EstimatedValues.ToArray();
     217            predictedValues = indizes.Select(index => estimatedValues[index]).ToList();
     218            break;
     219          case ESTIMATEDVALUES_TRAINING_SERIES_NAME:
     220            indizes = Content.ProblemData.TrainingIndizes.ToArray();
     221            predictedValues = Content.EstimatedTrainingValues.ToArray();
     222            break;
     223          case ESTIMATEDVALUES_TEST_SERIES_NAME:
     224            indizes = Content.ProblemData.TestIndizes.ToArray();
     225            predictedValues = Content.EstimatedTestValues.ToArray();
     226            break;
     227        }
     228        series.Points.DataBindXY(indizes, predictedValues);
     229        chart.DataManipulator.InsertEmptyPoints(1, IntervalType.Number, series.Name);
     230        chart.Legends[series.Legend].ForeColor = Color.Black;
     231        UpdateCursorInterval();
     232      }
     233    }
     234
     235    private void chart_MouseMove(object sender, MouseEventArgs e) {
     236      HitTestResult result = chart.HitTest(e.X, e.Y);
     237      if (result.ChartElementType == ChartElementType.LegendItem && result.Series.Name != TARGETVARIABLE_SERIES_NAME)
     238        Cursor = Cursors.Hand;
     239      else
     240        Cursor = Cursors.Default;
     241    }
     242    private void chart_MouseDown(object sender, MouseEventArgs e) {
     243      HitTestResult result = chart.HitTest(e.X, e.Y);
     244      if (result.ChartElementType == ChartElementType.LegendItem && result.Series.Name != TARGETVARIABLE_SERIES_NAME) {
     245        ToggleSeriesData(result.Series);
     246      }
     247    }
     248
     249    private void chart_CustomizeLegend(object sender, CustomizeLegendEventArgs e) {
     250      if (chart.Series.Count != 4) return;
     251      e.LegendItems[0].Cells[1].ForeColor = this.chart.Series[TARGETVARIABLE_SERIES_NAME].Points.Count == 0 ? Color.Gray : Color.Black;
     252      e.LegendItems[1].Cells[1].ForeColor = this.chart.Series[ESTIMATEDVALUES_TRAINING_SERIES_NAME].Points.Count == 0 ? Color.Gray : Color.Black;
     253      e.LegendItems[2].Cells[1].ForeColor = this.chart.Series[ESTIMATEDVALUES_TEST_SERIES_NAME].Points.Count == 0 ? Color.Gray : Color.Black;
     254      e.LegendItems[3].Cells[1].ForeColor = this.chart.Series[ESTIMATEDVALUES_ALL_SERIES_NAME].Points.Count == 0 ? Color.Gray : Color.Black;
     255    }
    203256  }
    204257}
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionScatterPlotView.Designer.cs

    r5809 r6685  
    6464      this.chart.Size = new System.Drawing.Size(527, 392);
    6565      this.chart.TabIndex = 1;
     66      this.chart.PostPaint += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs>(this.chart_PostPaint);
     67      this.chart.CustomizeLegend += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.CustomizeLegendEventArgs>(this.chart_CustomizeLegend);
     68      this.chart.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDown);
    6669      this.chart.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chart_MouseMove);
    67       this.chart.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDown);
    68       this.chart.CustomizeLegend += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.CustomizeLegendEventArgs>(chart_CustomizeLegend);
    6970      //
    70       // ScatterPlotView
     71      // RegressionSolutionScatterPlotView
    7172      //
     73      this.AllowDrop = true;
    7274      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    7375      this.Controls.Add(this.chart);
    74       this.Name = "ScatterPlotView";
    75       this.AllowDrop = true;
     76      this.Name = "RegressionSolutionScatterPlotView";
    7677      this.Size = new System.Drawing.Size(527, 392);
    7778      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionScatterPlotView.cs

    r6642 r6685  
    219219      e.LegendItems[2].Cells[1].ForeColor = this.chart.Series[TEST_SERIES].Points.Count == 0 ? Color.Gray : Color.Black;
    220220    }
     221
     222    private void chart_PostPaint(object sender, ChartPaintEventArgs e) {
     223      var chartArea = e.ChartElement as ChartArea;
     224      if (chartArea != null) {
     225        ChartGraphics chartGraphics = e.ChartGraphics;
     226        using (Pen p = new Pen(Color.DarkGray)) {
     227          double xmin = chartArea.AxisX.ScaleView.ViewMinimum;
     228          double xmax = chartArea.AxisX.ScaleView.ViewMaximum;
     229          double ymin = chartArea.AxisY.ScaleView.ViewMinimum;
     230          double ymax = chartArea.AxisY.ScaleView.ViewMaximum;
     231
     232          if (xmin > ymax || ymin > xmax) return;
     233
     234          PointF start = PointF.Empty;
     235          start.X = (float)chartGraphics.GetPositionFromAxis(chartArea.Name, chartArea.AxisX.AxisName, Math.Max(xmin, ymin));
     236          start.Y = (float)chartGraphics.GetPositionFromAxis(chartArea.Name, chartArea.AxisY.AxisName, Math.Max(xmin, ymin));
     237          PointF end = PointF.Empty;
     238          end.X = (float)chartGraphics.GetPositionFromAxis(chartArea.Name, chartArea.AxisX.AxisName, Math.Min(xmax, ymax));
     239          end.Y = (float)chartGraphics.GetPositionFromAxis(chartArea.Name, chartArea.AxisY.AxisName, Math.Min(xmax, ymax));
     240
     241          chartGraphics.Graphics.DrawLine(p, chartGraphics.GetAbsolutePoint(start), chartGraphics.GetAbsolutePoint(end));
     242        }
     243      }
     244    }
    221245  }
    222246}
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/ClassificationSolutionView.cs

    r6642 r6685  
    2121
    2222using System.Windows.Forms;
     23using HeuristicLab.Core;
    2324using HeuristicLab.MainForm;
    2425
    2526namespace HeuristicLab.Problems.DataAnalysis.Views {
    2627  [View("ClassificationSolution View")]
    27   [Content(typeof(ClassificationSolutionBase), true)]
     28  [Content(typeof(ClassificationSolutionBase), false)]
    2829  public partial class ClassificationSolutionView : DataAnalysisSolutionView {
    2930    public ClassificationSolutionView() {
     
    3536      set { base.Content = value; }
    3637    }
     38
     39    #region drag and drop
     40    protected override void itemsListView_DragEnter(object sender, DragEventArgs e) {
     41      validDragOperation = false;
     42      if (ReadOnly) return;
     43
     44      var dropData = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
     45      if (dropData is ClassificationProblemData) validDragOperation = true;
     46      else if (dropData is IValueParameter) {
     47        var param = (IValueParameter)dropData;
     48        if (param.Value is ClassificationProblemData) validDragOperation = true;
     49      }
     50    }
     51    #endregion
    3752  }
    3853}
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/ClusteringSolutionView.cs

    r6642 r6685  
    2525namespace HeuristicLab.Problems.DataAnalysis.Views {
    2626  [View("ClusteringSolution View")]
    27   [Content(typeof(ClusteringSolution), true)]
     27  [Content(typeof(ClusteringSolution), false)]
    2828  public partial class ClusteringSolutionView : DataAnalysisSolutionView {
    2929    public ClusteringSolutionView() {
     
    3535      set { base.Content = value; }
    3636    }
     37
     38    #region drag and drop
     39    protected override void itemsListView_DragEnter(object sender, DragEventArgs e) {
     40      validDragOperation = false;
     41      if (!ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is ClusteringProblemData)) {
     42        validDragOperation = true;
     43      }
     44    }
     45    #endregion
    3746  }
    3847}
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/DataAnalysisSolutionView.cs

    r6642 r6685  
    2525using System.Linq;
    2626using System.Windows.Forms;
     27using HeuristicLab.Core.Views;
    2728using HeuristicLab.MainForm;
     29using HeuristicLab.Optimization;
    2830using HeuristicLab.Optimization.Views;
    2931
    3032namespace HeuristicLab.Problems.DataAnalysis.Views {
    3133  [View("DataAnalysisSolution View")]
    32   [Content(typeof(DataAnalysisSolution), true)]
    33   public partial class DataAnalysisSolutionView : ResultCollectionView {
     34  [Content(typeof(DataAnalysisSolution), false)]
     35  public partial class DataAnalysisSolutionView : NamedItemCollectionView<IResult> {
    3436    public DataAnalysisSolutionView() {
    3537      InitializeComponent();
     38      viewHost.ViewsLabelVisible = false;
    3639    }
    3740
     
    3942      get { return (DataAnalysisSolution)base.Content; }
    4043      set { base.Content = value; }
     44    }
     45
     46    protected override void SetEnabledStateOfControls() {
     47      base.SetEnabledStateOfControls();
     48      addButton.Enabled = false;
     49      removeButton.Enabled = false;
     50    }
     51
     52    protected override void RegisterContentEvents() {
     53      base.RegisterContentEvents();
     54      Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
     55    }
     56    protected override void DeregisterContentEvents() {
     57      base.DeregisterContentEvents();
     58      Content.ProblemDataChanged -= new EventHandler(Content_ProblemDataChanged);
     59    }
     60    private void Content_ProblemDataChanged(object sender, EventArgs e) {
     61      OnContentChanged();
    4162    }
    4263
     
    5879    }
    5980
     81    protected override IResult CreateItem() {
     82      return null;
     83    }
     84
    6085    protected virtual void AddEvaluationViewTypes() {
    61       if (Content != null) {
     86      if (Content != null && !Content.ProblemData.IsEmpty) {
    6287        var viewTypes = MainFormManager.GetViewTypes(Content.GetType(), true)
    6388          .Where(t => typeof(IDataAnalysisSolutionEvaluationView).IsAssignableFrom(t));
     
    6893
    6994    protected override void itemsListView_DoubleClick(object sender, EventArgs e) {
    70       if (itemsListView.SelectedItems.Count == 1 && itemsListView.SelectedItems[0].Tag is Type) {
    71         Type viewType = (Type)itemsListView.SelectedItems[0].Tag;
     95      if (itemsListView.SelectedItems.Count != 1) return;
     96
     97      IResult result = itemsListView.SelectedItems[0].Tag as IResult;
     98      Type viewType = itemsListView.SelectedItems[0].Tag as Type;
     99      if (result != null) {
     100        IContentView view = MainFormManager.MainForm.ShowContent(result, typeof(ResultView));
     101        if (view != null) {
     102          view.ReadOnly = ReadOnly;
     103          view.Locked = Locked;
     104        }
     105      } else if (viewType != null) {
    72106        MainFormManager.MainForm.ShowContent(Content, viewType);
    73       } else
    74         base.itemsListView_DoubleClick(sender, e);
     107      }
    75108    }
    76109
     
    102135        itemsListView.Items.Remove(item);
    103136    }
     137
     138    #region drag and drop
     139    protected override void itemsListView_DragEnter(object sender, DragEventArgs e) {
     140      validDragOperation = false;
     141      if (!ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is DataAnalysisProblemData)) {
     142        validDragOperation = true;
     143      }
     144    }
     145
     146    protected override void itemsListView_DragDrop(object sender, DragEventArgs e) {
     147      if (e.Effect != DragDropEffects.None) {
     148        if (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is DataAnalysisProblemData) {
     149          DataAnalysisProblemData problemData = (DataAnalysisProblemData)e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
     150          Content.ProblemData = (DataAnalysisProblemData)problemData.Clone();
     151        }
     152      }
     153    }
     154    #endregion
    104155  }
    105156}
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/DiscriminantFunctionClassificationSolutionView.cs

    r6642 r6685  
    2020#endregion
    2121
    22 using System.Windows.Forms;
     22
    2323using HeuristicLab.MainForm;
    24 
    2524namespace HeuristicLab.Problems.DataAnalysis.Views {
    26   [View("DiscriminantFunctionClassificationSolution View")]
    27   [Content(typeof(DiscriminantFunctionClassificationSolutionBase), true)]
    28   public partial class DiscriminantFunctionClassificationSolutionView : DataAnalysisSolutionView {
     25  [View("ClassificationSolution View")]
     26  [Content(typeof(DiscriminantFunctionClassificationSolutionBase), false)]
     27  public partial class DiscriminantFunctionClassificationSolutionView : ClassificationSolutionView {
    2928    public DiscriminantFunctionClassificationSolutionView() {
    3029      InitializeComponent();
  • branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/RegressionSolutionView.cs

    r6642 r6685  
    2121
    2222using System.Windows.Forms;
     23using HeuristicLab.Core;
    2324using HeuristicLab.MainForm;
    2425
    2526namespace HeuristicLab.Problems.DataAnalysis.Views {
    2627  [View("RegressionSolution View")]
    27   [Content(typeof(RegressionSolutionBase), true)]
     28  [Content(typeof(RegressionSolutionBase), false)]
    2829  public partial class RegressionSolutionView : DataAnalysisSolutionView {
    2930    public RegressionSolutionView() {
     
    3536      set { base.Content = value; }
    3637    }
     38
     39    #region drag and drop
     40    protected override void itemsListView_DragEnter(object sender, DragEventArgs e) {
     41      validDragOperation = false;
     42      if (ReadOnly) return;
     43
     44      var dropData = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
     45      if (dropData is RegressionProblemData) validDragOperation = true;
     46      else if (dropData is IValueParameter) {
     47        var param = (IValueParameter)dropData;
     48        if (param.Value is RegressionProblemData) validDragOperation = true;
     49      }
     50    }
     51    #endregion
    3752  }
    3853}
Note: See TracChangeset for help on using the changeset viewer.