Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.cs @ 5768

Last change on this file since 5768 was 5768, checked in by swagner, 13 years ago

Enabled hiding of parameters (#1377)

File size: 6.6 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2011 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.Collections.Generic;
24using System.Drawing;
25using System.Linq;
26using System.Windows.Forms;
27using HeuristicLab.MainForm;
28
29namespace HeuristicLab.Core.Views {
30  [View("ParameterCollection View")]
31  [Content(typeof(ParameterCollection), true)]
32  [Content(typeof(IKeyedItemCollection<string, IParameter>), false)]
33  public partial class ParameterCollectionView : NamedItemCollectionView<IParameter> {
34    protected CreateParameterDialog createParameterDialog;
35    /// <summary>
36    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
37    /// </summary>
38    public ParameterCollectionView() {
39      InitializeComponent();
40      itemsGroupBox.Text = "Parameters";
41    }
42
43    protected override void Dispose(bool disposing) {
44      if (disposing) {
45        if (createParameterDialog != null) createParameterDialog.Dispose();
46        if (components != null) components.Dispose();
47      }
48      base.Dispose(disposing);
49    }
50
51    protected override void DeregisterItemEvents(IParameter item) {
52      item.HiddenChanged -= new EventHandler(Item_HiddenChanged);
53      base.DeregisterItemEvents(item);
54    }
55    protected override void RegisterItemEvents(IParameter item) {
56      base.RegisterItemEvents(item);
57      item.HiddenChanged += new EventHandler(Item_HiddenChanged);
58    }
59
60    protected override IParameter CreateItem() {
61      if (createParameterDialog == null) createParameterDialog = new CreateParameterDialog();
62
63      if (createParameterDialog.ShowDialog(this) == DialogResult.OK) {
64        IParameter param = createParameterDialog.Parameter;
65        if ((param != null) && Content.ContainsKey(param.Name))
66          param = (IParameter)Activator.CreateInstance(param.GetType(), GetUniqueName(param.Name), param.Description);
67        return param;
68      }
69      return null;
70    }
71
72    protected override void AddListViewItem(ListViewItem listViewItem) {
73      IParameter parameter = listViewItem.Tag as IParameter;
74      if ((parameter != null) && (parameter.Hidden) && (!showHiddenParametersCheckBox.Checked)) {
75        return; // skip parameter
76      }
77      if ((parameter != null) && (parameter.Hidden) && (showHiddenParametersCheckBox.Checked)) {
78        listViewItem.Font = new Font(listViewItem.Font, FontStyle.Italic);
79        listViewItem.ForeColor = Color.LightGray;
80      }
81      base.AddListViewItem(listViewItem);
82    }
83
84    protected virtual void UpdateParameterVisibility(IParameter parameter) {
85      if (parameter.Hidden) {
86        if (showHiddenParametersCheckBox.Checked) {
87          foreach (ListViewItem listViewItem in GetListViewItemsForItem(parameter)) {
88            listViewItem.Font = new Font(listViewItem.Font, FontStyle.Italic);
89            listViewItem.ForeColor = Color.LightGray;
90          }
91        } else {
92          foreach (ListViewItem listViewItem in GetListViewItemsForItem(parameter).ToArray())
93            RemoveListViewItem(listViewItem);
94          RebuildImageList();
95        }
96      } else {
97        if (showHiddenParametersCheckBox.Checked) {
98          foreach (ListViewItem listViewItem in GetListViewItemsForItem(parameter)) {
99            listViewItem.Font = new Font(listViewItem.Font, FontStyle.Regular);
100            listViewItem.ForeColor = itemsListView.ForeColor;
101          }
102        } else {
103          for (int i = 0; i < Content.Count(x => x == parameter); i++)
104            AddListViewItem(CreateListViewItem(parameter));
105        }
106      }
107      AdjustListViewColumnSizes();
108    }
109
110    #region Control Events
111    protected virtual void showHiddenParametersCheckBox_CheckedChanged(object sender, System.EventArgs e) {
112      if (showHiddenParametersCheckBox.Checked) {
113        foreach (IParameter parameter in Content.Where(x => x.Hidden))
114          AddListViewItem(CreateListViewItem(parameter));
115        AdjustListViewColumnSizes();
116      } else {
117        foreach (IParameter parameter in Content.Where(x => x.Hidden)) {
118          foreach (ListViewItem listViewItem in GetListViewItemsForItem(parameter).ToArray())
119            RemoveListViewItem(listViewItem);
120        }
121        RebuildImageList();
122      }
123    }
124    protected virtual void itemsListViewContextMenuStrip_Opening(object sender, System.ComponentModel.CancelEventArgs e) {
125      if ((itemsListView.SelectedItems.Count == 0) || ReadOnly || Locked) {
126        showHideParametersToolStripMenuItem.Enabled = false;
127      } else {
128        List<IParameter> parameters = new List<IParameter>();
129        foreach (ListViewItem listViewItem in itemsListView.SelectedItems) {
130          IParameter parameter = listViewItem.Tag as IParameter;
131          if (parameter != null) parameters.Add(parameter);
132        }
133        showHideParametersToolStripMenuItem.Enabled = (parameters.Count > 0) && (parameters.All(x => x.Hidden == parameters[0].Hidden));
134        if (parameters.Count == 1) showHideParametersToolStripMenuItem.Text = parameters[0].Hidden ? "Show Parameter" : "Hide Parameter";
135        else showHideParametersToolStripMenuItem.Text = parameters[0].Hidden ? "Show Parameters" : "Hide Parameters";
136        showHideParametersToolStripMenuItem.Tag = parameters;
137      }
138    }
139    protected virtual void showHideParametersToolStripMenuItem_Click(object sender, System.EventArgs e) {
140      foreach (IParameter parameter in (IEnumerable<IParameter>)showHideParametersToolStripMenuItem.Tag)
141        parameter.Hidden = !parameter.Hidden;
142    }
143    #endregion
144
145    #region Item Events
146    protected virtual void Item_HiddenChanged(object sender, EventArgs e) {
147      if (InvokeRequired)
148        Invoke(new EventHandler(Item_HiddenChanged), sender, e);
149      else
150        UpdateParameterVisibility((IParameter)sender);
151    }
152    #endregion
153  }
154}
Note: See TracBrowser for help on using the repository browser.