Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs @ 3997

Last change on this file since 3997 was 3904, checked in by mkommend, 14 years ago

Added SetEnabledStateOfControls as protected virtual method in !View. Therefore the overloading of OnReadOnlyChanged and OnLockedChanged got obsolete in most views, because the method got called in the !View respectively ContentView. (ticket #1021)

File size: 6.3 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Linq;
24using System.Windows.Forms;
25using HeuristicLab.Common;
26using HeuristicLab.Core;
27using HeuristicLab.Core.Views;
28using HeuristicLab.MainForm;
29using System.Drawing;
30
31namespace HeuristicLab.Optimization.Views {
32  /// <summary>
33  /// The visual representation of a <see cref="Variable"/>.
34  /// </summary>
35  [View("Run View")]
36  [Content(typeof(IRun), true)]
37  public sealed partial class RunView : NamedItemView {
38    /// <summary>
39    /// Gets or sets the variable to represent visually.
40    /// </summary>
41    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
42    /// No own data storage present.</remarks>
43    public new IRun Content {
44      get { return (IRun)base.Content; }
45      set { base.Content = value; }
46    }
47
48    /// <summary>
49    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
50    /// </summary>
51    public RunView() {
52      InitializeComponent();
53    }
54
55    protected override void RegisterContentEvents() {
56      base.RegisterContentEvents();
57      Content.Changed += new EventHandler(Content_Changed);
58    }
59    protected override void DeregisterContentEvents() {
60      base.DeregisterContentEvents();
61      Content.Changed -= new EventHandler(Content_Changed);
62    }
63    private void Content_Changed(object sender, EventArgs e) {
64      if (InvokeRequired)
65        this.Invoke(new EventHandler(Content_Changed), sender, e);
66      else
67        UpdateColorPictureBox();
68    }
69
70    protected override void OnContentChanged() {
71      base.OnContentChanged();
72      viewHost.Content = null;
73      if (Content != null)
74        UpdateColorPictureBox();
75      FillListView();
76    }
77
78    protected override void SetEnabledStateOfControls() {
79      base.SetEnabledStateOfControls();
80      listView.Enabled = Content != null;
81      viewHost.Enabled = Content != null;
82      changeColorButton.Enabled = Content != null;
83      showAlgorithmButton.Enabled = Content != null && !Locked;
84    }
85
86    private void changeColorButton_Click(object sender, EventArgs e) {
87      if (colorDialog.ShowDialog(this) == DialogResult.OK) {
88        this.Content.Color = this.colorDialog.Color;
89      }
90    }
91    private void UpdateColorPictureBox() {
92      this.colorDialog.Color = this.Content.Color;
93      this.colorPictureBox.Image = this.GenerateImage(colorPictureBox.Width, colorPictureBox.Height, this.Content.Color);
94    }
95    private Image GenerateImage(int width, int height, Color fillColor) {
96      Image colorImage = new Bitmap(width, height);
97      using (Graphics gfx = Graphics.FromImage(colorImage)) {
98        using (SolidBrush brush = new SolidBrush(fillColor)) {
99          gfx.FillRectangle(brush, 0, 0, width, height);
100        }
101      }
102      return colorImage;
103    }
104
105    private void FillListView() {
106      string selectedName = null;
107      if (listView.SelectedItems.Count == 1) selectedName = listView.SelectedItems[0].SubItems[0].Text;
108
109      listView.Items.Clear();
110      listView.SmallImageList.Images.Clear();
111      if (Content != null) {
112        foreach (string key in Content.Parameters.Keys)
113          CreateListViewItem(key, Content.Parameters[key], listView.Groups["parametersGroup"], selectedName);
114        foreach (string key in Content.Results.Keys)
115          CreateListViewItem(key, Content.Results[key], listView.Groups["resultsGroup"], selectedName);
116        if (listView.Items.Count > 0) {
117          for (int i = 0; i < listView.Columns.Count; i++)
118            listView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
119        }
120      }
121    }
122
123    private void CreateListViewItem(string name, IItem value, ListViewGroup group, string selectedName) {
124      ListViewItem item = new ListViewItem(new string[] { name, value != null ? value.ToString() : "-" });
125      item.Tag = value;
126      item.Group = group;
127      listView.SmallImageList.Images.Add(value == null ? HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing : value.ItemImage);
128      item.ImageIndex = listView.SmallImageList.Images.Count - 1;
129      listView.Items.Add(item);
130      if ((selectedName != null) && name.Equals(selectedName)) item.Selected = true;
131    }
132
133    private void listView_SelectedIndexChanged(object sender, EventArgs e) {
134      if (listView.SelectedItems.Count == 1)
135        viewHost.Content = (IContent)listView.SelectedItems[0].Tag;
136      else
137        viewHost.Content = null;
138    }
139    private void listView_DoubleClick(object sender, EventArgs e) {
140      if (listView.SelectedItems.Count == 1) {
141        IItem item = (IItem)listView.SelectedItems[0].Tag;
142        IContentView view = MainFormManager.MainForm.ShowContent(item);
143        if (view != null) {
144          view.ReadOnly = true;
145          view.Locked = Locked;
146        }
147      }
148    }
149    private void listView_ItemDrag(object sender, ItemDragEventArgs e) {
150      if (!Locked) {
151        ListViewItem listViewItem = (ListViewItem)e.Item;
152        IItem item = (IItem)listViewItem.Tag;
153        if (item != null) {
154          DataObject data = new DataObject();
155          data.SetData("Type", item.GetType());
156          data.SetData("Value", item);
157          DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy);
158        }
159      }
160    }
161    private void showAlgorithmButton_Click(object sender, EventArgs e) {
162      if (!Locked) {
163        MainFormManager.MainForm.ShowContent((IContent)Content.Algorithm.Clone());
164      }
165    }
166  }
167}
Note: See TracBrowser for help on using the repository browser.