Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Core.Views/3.3/ViewHost.cs @ 2739

Last change on this file since 2739 was 2739, checked in by swagner, 14 years ago

Operator architecture refactoring (#95)

  • added extension method to pretty print type names
File size: 4.4 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2008 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.ComponentModel;
25using System.Drawing;
26using System.Data;
27using System.Text;
28using System.Windows.Forms;
29using System.Linq;
30using HeuristicLab.Common;
31using HeuristicLab.MainForm;
32
33namespace HeuristicLab.Core.Views {
34  public partial class ViewHost : UserControl {
35    private Dictionary<Type, ToolStripMenuItem> typeMenuItemTable;
36
37    private object content;
38    public object Content {
39      get { return content; }
40      set {
41        if (value != content) {
42          content = value;
43          Initialize();
44        }
45      }
46    }
47
48    public ViewHost() {
49      typeMenuItemTable = new Dictionary<Type, ToolStripMenuItem>();
50      InitializeComponent();
51      Initialize();
52    }
53
54    protected virtual void Initialize() {
55      viewsLabel.Enabled = false;
56      viewsLabel.Visible = false;
57      typeMenuItemTable.Clear();
58      contextMenuStrip.Items.Clear();
59      contextMenuStrip.Enabled = false;
60      messageLabel.Visible = false;
61      if (viewPanel.Controls.Count > 0) viewPanel.Controls[0].Dispose();
62      viewPanel.Controls.Clear();
63      viewPanel.Enabled = false;
64      viewPanel.Visible = false;
65
66      if (Content != null) {
67        var viewTypes = from t in MainFormManager.GetViewTypes(Content.GetType())
68                        orderby t.Name ascending
69                        select t;
70        foreach (Type viewType in viewTypes) {
71          ToolStripMenuItem item = new ToolStripMenuItem(viewType.GetPrettyName());
72          item.Name = viewType.FullName;
73          item.ToolTipText = viewType.GetPrettyName(true);
74          item.Tag = viewType;
75          contextMenuStrip.Items.Add(item);
76          typeMenuItemTable.Add(viewType, item);
77        }
78        if (contextMenuStrip.Items.Count == 0) {
79          messageLabel.Visible = true;
80        } else {
81          viewsLabel.Enabled = true;
82          viewsLabel.Visible = true;
83          contextMenuStrip.Enabled = true;
84          messageLabel.Visible = false;
85        }
86
87        Control view = (Control)MainFormManager.CreateDefaultView(Content);
88        if ((view == null) && (contextMenuStrip.Items.Count > 0))  // create first available view if default view is not available
89          view = (Control)MainFormManager.CreateView((Type)contextMenuStrip.Items[0].Tag, Content);
90        if (view != null) {
91          viewPanel.Controls.Add(view);
92          viewPanel.Tag = view;
93          view.Dock = DockStyle.Fill;
94          viewPanel.Enabled = true;
95          viewPanel.Visible = true;
96          typeMenuItemTable[view.GetType()].Checked = true;
97          typeMenuItemTable[view.GetType()].Enabled = false;
98        }
99      }
100    }
101
102    private void viewsLabel_DoubleClick(object sender, EventArgs e) {
103      MainFormManager.CreateView(viewPanel.Tag.GetType(), Content).Show();
104    }
105    protected void contextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) {
106      Type viewType = (Type)e.ClickedItem.Tag;
107      foreach (ToolStripMenuItem item in typeMenuItemTable.Values) {
108        item.Checked = false;
109        item.Enabled = true;
110      }
111      typeMenuItemTable[viewType].Checked = true;
112      typeMenuItemTable[viewType].Enabled = false;
113
114      if (viewPanel.Controls.Count > 0) viewPanel.Controls[0].Dispose();
115      viewPanel.Controls.Clear();
116      Control view = (Control)MainFormManager.CreateView(viewType, Content);
117      viewPanel.Controls.Add(view);
118      viewPanel.Tag = view;
119      view.Dock = DockStyle.Fill;
120    }
121  }
122}
Note: See TracBrowser for help on using the repository browser.