source: branches/eraser6/Eraser/LogForm.cs @ 339

Revision 339, 1.9 KB checked in by lowjoel, 7 years ago (diff)

Group tasks by session.

Line 
1using System;
2using System.Collections.Generic;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Text;
7using System.Windows.Forms;
8
9using Eraser.Manager;
10using System.Globalization;
11
12namespace Eraser
13{
14    public partial class LogForm : Form
15    {
16        public LogForm(Task task)
17        {
18            InitializeComponent();
19            this.task = task;
20
21            //Update the title
22            Text = string.Format("{0} - {1}", Text, task.UIText);
23
24            //Add all the existing log messages
25            Dictionary<DateTime, List<LogEntry>> log = task.Log.Entries;
26            Dictionary<DateTime, List<LogEntry>>.Enumerator iter = log.GetEnumerator();
27            foreach (DateTime sessionTime in log.Keys)
28            {
29                this.log.Groups.Add(new ListViewGroup("Session: " + sessionTime.ToString(DATEPATTERN)));
30                foreach (LogEntry entry in log[sessionTime])
31                    task_Logged(entry);
32            }
33
34            //Register our event handler to get live log messages
35            task.Log.OnLogged += new Logger.LogEvent(task_Logged);
36        }
37
38        ~LogForm()
39        {
40            task.Log.OnLogged -= new Logger.LogEvent(task_Logged);
41        }
42
43        private void task_Logged(LogEntry e)
44        {
45            ListViewItem item = log.Items.Add(e.Timestamp.ToString(DATEPATTERN));
46            item.SubItems.Add(e.Level.ToString());
47            item.SubItems.Add(e.Message);
48            if (log.Groups.Count != 0)
49                item.Group = log.Groups[log.Groups.Count - 1];
50
51            switch (e.Level)
52            {
53                case LogLevel.FATAL:
54                case LogLevel.ERROR:
55                    item.ForeColor = Color.Red;
56                    break;
57                case LogLevel.WARNING:
58                    item.ForeColor = Color.OrangeRed;
59                    break;
60            }
61        }
62
63        private void clear_Click(object sender, EventArgs e)
64        {
65            this.task.Log.Clear();
66            log.Items.Clear();
67        }
68
69        private void close_Click(object sender, EventArgs e)
70        {
71            Close();
72        }
73
74        private Task task;
75        private static string DATEPATTERN =
76            DateTimeFormatInfo.CurrentInfo.ShortDatePattern + " " +
77            DateTimeFormatInfo.CurrentInfo.ShortTimePattern;
78    }
79}
Note: See TracBrowser for help on using the repository browser.