Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs @ 4412

Last change on this file since 4412 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: 5.7 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.Windows.Forms;
24using HeuristicLab.Common;
25using HeuristicLab.MainForm;
26using HeuristicLab.PluginInfrastructure;
27
28namespace HeuristicLab.Core.Views {
29  /// <summary>
30  /// The visual representation of a <see cref="Variable"/>.
31  /// </summary>
32  [View("Variable View")]
33  [Content(typeof(Variable), true)]
34  [Content(typeof(IVariable), false)]
35  public partial class VariableView : NamedItemView {
36    protected TypeSelectorDialog typeSelectorDialog;
37
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 IVariable Content {
44      get { return (IVariable)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 VariableView() {
52      InitializeComponent();
53    }
54
55    /// <summary>
56    /// Removes the eventhandlers from the underlying <see cref="Variable"/>.
57    /// </summary>
58    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
59    protected override void DeregisterContentEvents() {
60      Content.ValueChanged -= new EventHandler(Content_ValueChanged);
61      base.DeregisterContentEvents();
62    }
63
64    /// <summary>
65    /// Adds eventhandlers to the underlying <see cref="Variable"/>.
66    /// </summary>
67    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
68    protected override void RegisterContentEvents() {
69      base.RegisterContentEvents();
70      Content.ValueChanged += new EventHandler(Content_ValueChanged);
71    }
72
73    protected override void OnContentChanged() {
74      base.OnContentChanged();
75      if (Content == null) {
76        dataTypeTextBox.Text = "-";
77        viewHost.Content = null;
78      } else {
79        dataTypeTextBox.Text = Content.Value == null ? "-" : Content.Value.GetType().GetPrettyName();
80        viewHost.ViewType = null;
81        viewHost.Content = Content.Value;
82      }
83    }
84
85    protected override void SetEnabledStateOfControls() {
86      base.SetEnabledStateOfControls();
87      dataTypeTextBox.Enabled = Content != null && Content.Value != null;
88      setValueButton.Enabled = Content != null && !ReadOnly;
89      clearValueButton.Enabled = Content != null && Content.Value != null && !ReadOnly;
90      valueGroupBox.Enabled = Content != null;
91    }
92
93    protected virtual void Content_ValueChanged(object sender, EventArgs e) {
94      if (InvokeRequired)
95        Invoke(new EventHandler(Content_ValueChanged), sender, e);
96      else {
97        dataTypeTextBox.Text = Content.Value == null ? "-" : Content.Value.GetType().GetPrettyName();
98        dataTypeTextBox.Enabled = Content.Value != null;
99        clearValueButton.Enabled = Content.Value != null;
100        viewHost.ViewType = null;
101        viewHost.Content = Content.Value;
102      }
103    }
104
105    protected virtual void setValueButton_Click(object sender, EventArgs e) {
106      if (typeSelectorDialog == null) {
107        typeSelectorDialog = new TypeSelectorDialog();
108        typeSelectorDialog.Caption = "Select Value";
109        typeSelectorDialog.TypeSelector.Configure(typeof(IItem), false, true);
110      }
111      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
112        try {
113          Content.Value = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
114        }
115        catch (Exception ex) {
116          ErrorHandling.ShowErrorDialog(this, ex);
117        }
118      }
119    }
120    protected virtual void clearValueButton_Click(object sender, EventArgs e) {
121      Content.Value = null;
122    }
123    protected virtual void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
124      e.Effect = DragDropEffects.None;
125      Type type = e.Data.GetData("Type") as Type;
126      if (!ReadOnly && (type != null) && (typeof(IItem).IsAssignableFrom(type))) {
127        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
128        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
129        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
130        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
131        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
132      }
133    }
134    protected virtual void valuePanel_DragDrop(object sender, DragEventArgs e) {
135      if (e.Effect != DragDropEffects.None) {
136        IItem item = e.Data.GetData("Value") as IItem;
137        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (IItem)item.Clone();
138        Content.Value = item;
139      }
140    }
141  }
142}
Note: See TracBrowser for help on using the repository browser.