view Implab.Diagnostics.Interactive/TraceForm.cs @ 187:dd4a3590f9c6 ref20160224

Reworked cancelation handling, if the cancel handler isn't specified the OperationCanceledException will be handled by the error handler Any unhandled OperationCanceledException will cause the promise cancelation
author cin
date Tue, 19 Apr 2016 17:35:20 +0300
parents d9d794b61bb9
children cbb0bd8fc0d1
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Implab.Diagnostics.Interactive {
    public partial class TraceForm : Form {
        readonly Dictionary<int, Color> m_threadColors = new Dictionary<int,Color>();
        readonly Random m_rand = new Random();

        public event EventHandler PauseEvents;

        public event EventHandler ResumeEvents;

        public TraceForm() {
            InitializeComponent();
        }

        protected override void OnFormClosing(FormClosingEventArgs e) {
            base.OnFormClosing(e);
            if (!e.Cancel && e.CloseReason == CloseReason.UserClosing) {
                e.Cancel = true;
                Hide();
            }
        }

        public void AddTraceEvent(TraceViewItem item) {
            traceViewItemBindingSource.Add(item);
            eventsDataGrid.FirstDisplayedScrollingRowIndex = eventsDataGrid.RowCount - 1;
        }

        Color GetThreadColor(int thread) {
            Color result;
            if (!m_threadColors.TryGetValue(thread, out result)) {
                result = Color.FromArgb(m_rand.Next(4)*64, m_rand.Next(4)*64, m_rand.Next(4)*64);
                m_threadColors[thread] = result;
            }
            return result;
        }

        private void eventsDataGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
            var data = (TraceViewItem)traceViewItemBindingSource[e.RowIndex];
            if (e.ColumnIndex == messageDataGridViewTextBoxColumn.Index)
                e.CellStyle.Padding = new Padding(data.Indent * 10,0,0,0);
            e.CellStyle.ForeColor = GetThreadColor(data.Thread);
        }
    }
}