view Implab.Diagnostics.Interactive/TraceForm.cs @ 210:5dc21f6a3222 v2

Code review for RunnableComponent Added StaApartment class based on System.Windows.Forms.Application message loop
author cin
date Mon, 20 Mar 2017 17:44:18 +0300
parents cbb0bd8fc0d1
children
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);
            if(eventsDataGrid.RowCount > 0)
                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);
        }
    }
}