Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.DebugEngine/OperatorTraceView.cs @ 4995

Last change on this file since 4995 was 4993, checked in by epitzer, 14 years ago

Create own class for OperatorTrace, remove unnecessary event handlers, prevent flickering while stepping, permanently highlight execution context's scope (#47)

File size: 3.5 KB
Line 
1using System;
2using System.Windows.Forms;
3using HeuristicLab.Collections;
4using HeuristicLab.Common.Resources;
5using HeuristicLab.Core;
6using HeuristicLab.MainForm;
7using HeuristicLab.MainForm.WindowsForms;
8using HeuristicLab.Operators;
9
10namespace HeuristicLab.DebugEngine {
11
12  [View("Operator Trace View")]
13  [Content(typeof(OperatorTrace), IsDefaultView = true)]
14  public sealed partial class OperatorTraceView : AsynchronousContentView {
15
16    public new OperatorTrace Content {
17      get { return (OperatorTrace)base.Content; }
18      set { base.Content = value; }
19    }
20
21    public OperatorTraceView() {
22      InitializeComponent();
23    }
24
25    protected override void DeregisterContentEvents() {
26      Content.CollectionReset -= Content_CollectionChanged;
27      Content.ItemsAdded -= Content_CollectionChanged;
28      Content.ItemsMoved -= Content_CollectionChanged;
29      Content.ItemsRemoved -= Content_CollectionChanged;
30      Content.ItemsReplaced -= Content_CollectionChanged;
31      base.DeregisterContentEvents();
32    }
33
34    protected override void RegisterContentEvents() {
35      base.RegisterContentEvents();
36      Content.CollectionReset += Content_CollectionChanged;
37      Content.ItemsAdded += Content_CollectionChanged;
38      Content.ItemsMoved += Content_CollectionChanged;
39      Content.ItemsRemoved += Content_CollectionChanged;
40      Content.ItemsReplaced += Content_CollectionChanged;
41    }
42
43    #region Event Handlers (Content)
44    void Content_CollectionChanged(object sender, CollectionItemsChangedEventArgs<Collections.IndexedItem<IOperator>> e) {
45      if (InvokeRequired)
46        Invoke(new EventHandler<CollectionItemsChangedEventArgs<IndexedItem<IOperator>>>(Content_CollectionChanged), sender, e);
47      else
48        UpdateOperatorTrace();
49    }
50    #endregion
51
52    private void UpdateOperatorTrace() {
53      if (suspended)
54        return;
55      listView.BeginUpdate();
56      listView.Items.Clear();
57      listView.SmallImageList.Images.Clear();
58      listView.SmallImageList.Images.Add(VS2008ImageLibrary.Method);
59      listView.SmallImageList.Images.Add(VS2008ImageLibrary.Module);
60      foreach (var item in Content) {
61        var viewItem = listView.Items.Add(item.Name ?? item.ItemName);
62        viewItem.ToolTipText = string.Format("{0}{1}{1}{2}",
63          Utils.TypeName(item), Environment.NewLine,
64          Utils.Wrap(item.Description, 60));
65        viewItem.Tag = item;
66        viewItem.ImageIndex = item is CombinedOperator ? 1 : 0;
67      }
68      if (listView.Items.Count > 0) {
69        for (int i = 0; i < listView.Columns.Count; i++)
70          listView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
71      }
72      listView.EndUpdate();
73    }
74
75    protected override void OnContentChanged() {
76      base.OnContentChanged();
77      if (Content == null) {
78        listView.Items.Clear();
79      } else {
80        UpdateOperatorTrace();
81      }
82    }
83
84    #region Event Handlers (child controls)
85    private void listView_ItemActivate(object sender, EventArgs e) {
86      if (listView.SelectedItems.Count > 0) {
87        IOperator op = listView.SelectedItems[0].Tag as IOperator;
88        if (op != null) {
89          MainFormManager.MainForm.ShowContent(op);
90        }
91      }
92    }
93    #endregion
94
95    private bool suspended = false;
96    public void SuspendUpdate() {
97      suspended = true;
98    }
99    public void ResumeUpdate() {
100      suspended = false;
101      UpdateOperatorTrace();
102    }
103  }
104
105}
Note: See TracBrowser for help on using the repository browser.