0
|
1 using System;
|
|
2 using System.Drawing;
|
|
3 using System.Collections;
|
|
4 using System.ComponentModel;
|
|
5 using System.Text;
|
|
6 using System.Windows.Forms;
|
|
7 using IBBoard.Lang;
|
|
8 using IBBoard.Logging;
|
|
9 using IBBoard.Windows.Forms;
|
|
10
|
|
11 namespace IBBoard.WarFoundry
|
|
12 {
|
|
13 /// <summary>
|
|
14 /// Summary description for FrmDebugOutput.
|
|
15 /// </summary>
|
|
16 public class FrmDebugOutput : IBBForm
|
|
17 {
|
|
18 private System.Windows.Forms.ListBox lstDebugItems;
|
|
19 private System.Windows.Forms.ComboBox cmbDebugLevel;
|
|
20 private System.Windows.Forms.Label lblDebugLevel;
|
|
21 /// <summary>
|
|
22 /// Required designer variable.
|
|
23 /// </summary>
|
|
24 private System.ComponentModel.Container components = null;
|
|
25 private Logger logger;
|
|
26 private System.Windows.Forms.ContextMenu contextMenu;
|
|
27 private System.Windows.Forms.MenuItem miCopy;
|
|
28 private System.Windows.Forms.TextBox txtDetail;
|
|
29 private System.Windows.Forms.Splitter splitter1;
|
|
30 private System.Windows.Forms.Panel panel1;
|
|
31 private int MAX_LIST_LENGTH = 50;
|
|
32
|
|
33 public FrmDebugOutput()
|
|
34 {
|
|
35 //this.logger = logger;
|
|
36 //logger.LogUpdatedEvent+=new IBBoard.Logging.Logger.LogUpdatedDelegate(logger_LogUpdatedEvent);
|
|
37 //
|
|
38 // Required for Windows Form Designer support
|
|
39 //
|
|
40 InitializeComponent();
|
|
41
|
|
42 /*if (LogLevels.Debug >= logger.LogLevel)
|
|
43 {
|
|
44 cmbDebugLevel.Items.Add(LogLevels.Debug);
|
|
45 }
|
|
46
|
|
47 if (LogLevels.Info >= logger.LogLevel)
|
|
48 {
|
|
49 cmbDebugLevel.Items.Add(LogLevels.Info);
|
|
50 }
|
|
51
|
|
52 if (LogLevels.Warning >= logger.LogLevel)
|
|
53 {
|
|
54 cmbDebugLevel.Items.Add(LogLevels.Warning);
|
|
55 }
|
|
56
|
|
57 if (LogLevels.Error >= logger.LogLevel)
|
|
58 {
|
|
59 cmbDebugLevel.Items.Add(LogLevels.Error);
|
|
60 }
|
|
61
|
|
62 if (LogLevels.Critical >= logger.LogLevel)
|
|
63 {
|
|
64 cmbDebugLevel.Items.Add(LogLevels.Critical);
|
|
65 }*/
|
|
66
|
|
67 this.Name = "DebugOutputForm";
|
|
68
|
|
69 cmbDebugLevel.SelectedItem = logger.LogLevel;
|
|
70
|
|
71 Translation.Translate(this, true);
|
|
72
|
|
73 fillDebugList();
|
|
74 }
|
|
75
|
|
76 /// <summary>
|
|
77 /// Clean up any resources being used.
|
|
78 /// </summary>
|
|
79 protected override void Dispose( bool disposing )
|
|
80 {
|
|
81 if( disposing )
|
|
82 {
|
|
83 if(components != null)
|
|
84 {
|
|
85 components.Dispose();
|
|
86 }
|
|
87 }
|
|
88 base.Dispose( disposing );
|
|
89 }
|
|
90
|
|
91 #region Windows Form Designer generated code
|
|
92 /// <summary>
|
|
93 /// Required method for Designer support - do not modify
|
|
94 /// the contents of this method with the code editor.
|
|
95 /// </summary>
|
|
96 private void InitializeComponent()
|
|
97 {
|
|
98 this.lstDebugItems = new System.Windows.Forms.ListBox();
|
|
99 this.contextMenu = new System.Windows.Forms.ContextMenu();
|
|
100 this.miCopy = new System.Windows.Forms.MenuItem();
|
|
101 this.cmbDebugLevel = new System.Windows.Forms.ComboBox();
|
|
102 this.lblDebugLevel = new System.Windows.Forms.Label();
|
|
103 this.txtDetail = new System.Windows.Forms.TextBox();
|
|
104 this.splitter1 = new System.Windows.Forms.Splitter();
|
|
105 this.panel1 = new System.Windows.Forms.Panel();
|
|
106 this.SuspendLayout();
|
|
107 //
|
|
108 // lstDebugItems
|
|
109 //
|
|
110 this.lstDebugItems.ContextMenu = this.contextMenu;
|
|
111 this.lstDebugItems.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
112 this.lstDebugItems.IntegralHeight = false;
|
|
113 this.lstDebugItems.Location = new System.Drawing.Point(0, 24);
|
|
114 this.lstDebugItems.Name = "lstDebugItems";
|
|
115 this.lstDebugItems.ScrollAlwaysVisible = true;
|
|
116 this.lstDebugItems.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
|
|
117 this.lstDebugItems.Size = new System.Drawing.Size(656, 144);
|
|
118 this.lstDebugItems.TabIndex = 0;
|
|
119 this.lstDebugItems.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lstDebugItems_MouseDown);
|
|
120 this.lstDebugItems.SelectedIndexChanged += new System.EventHandler(this.lstDebugItems_SelectedIndexChanged);
|
|
121 //
|
|
122 // contextMenu
|
|
123 //
|
|
124 this.contextMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
|
|
125 this.miCopy});
|
|
126 this.contextMenu.Popup += new System.EventHandler(this.contextMenu_Popup);
|
|
127 //
|
|
128 // miCopy
|
|
129 //
|
|
130 this.miCopy.Index = 0;
|
|
131 this.miCopy.Text = "&Copy";
|
|
132 this.miCopy.Click += new System.EventHandler(this.miCopy_Click);
|
|
133 //
|
|
134 // cmbDebugLevel
|
|
135 //
|
|
136 this.cmbDebugLevel.Location = new System.Drawing.Point(190, 2);
|
|
137 this.cmbDebugLevel.Name = "cmbDebugLevel";
|
|
138 this.cmbDebugLevel.Size = new System.Drawing.Size(464, 21);
|
|
139 this.cmbDebugLevel.TabIndex = 1;
|
|
140 this.cmbDebugLevel.SelectedIndexChanged += new System.EventHandler(this.cmbDebugLevel_SelectedIndexChanged);
|
|
141 //
|
|
142 // lblDebugLevel
|
|
143 //
|
|
144 this.lblDebugLevel.Location = new System.Drawing.Point(16, 0);
|
|
145 this.lblDebugLevel.Name = "lblDebugLevel";
|
|
146 this.lblDebugLevel.Size = new System.Drawing.Size(168, 21);
|
|
147 this.lblDebugLevel.TabIndex = 2;
|
|
148 this.lblDebugLevel.Text = "debug level:";
|
|
149 this.lblDebugLevel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
|
150 //
|
|
151 // txtDetail
|
|
152 //
|
|
153 this.txtDetail.Dock = System.Windows.Forms.DockStyle.Bottom;
|
|
154 this.txtDetail.Location = new System.Drawing.Point(0, 172);
|
|
155 this.txtDetail.Multiline = true;
|
|
156 this.txtDetail.Name = "txtDetail";
|
|
157 this.txtDetail.ReadOnly = true;
|
|
158 this.txtDetail.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
|
159 this.txtDetail.Size = new System.Drawing.Size(656, 64);
|
|
160 this.txtDetail.TabIndex = 3;
|
|
161 this.txtDetail.TabStop = false;
|
|
162 this.txtDetail.Text = "";
|
|
163 this.txtDetail.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtDetail_KeyDown);
|
|
164 //
|
|
165 // splitter1
|
|
166 //
|
|
167 this.splitter1.Cursor = System.Windows.Forms.Cursors.HSplit;
|
|
168 this.splitter1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
|
169 this.splitter1.Location = new System.Drawing.Point(0, 168);
|
|
170 this.splitter1.MinExtra = 50;
|
|
171 this.splitter1.MinSize = 50;
|
|
172 this.splitter1.Name = "splitter1";
|
|
173 this.splitter1.Size = new System.Drawing.Size(656, 4);
|
|
174 this.splitter1.TabIndex = 4;
|
|
175 this.splitter1.TabStop = false;
|
|
176 //
|
|
177 // panel1
|
|
178 //
|
|
179 this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
|
|
180 this.panel1.Location = new System.Drawing.Point(0, 0);
|
|
181 this.panel1.Name = "panel1";
|
|
182 this.panel1.Size = new System.Drawing.Size(656, 24);
|
|
183 this.panel1.TabIndex = 5;
|
|
184 //
|
|
185 // FrmDebugOutput
|
|
186 //
|
|
187 this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
|
|
188 this.ClientSize = new System.Drawing.Size(656, 236);
|
|
189 this.Controls.Add(this.lblDebugLevel);
|
|
190 this.Controls.Add(this.cmbDebugLevel);
|
|
191 this.Controls.Add(this.lstDebugItems);
|
|
192 this.Controls.Add(this.splitter1);
|
|
193 this.Controls.Add(this.panel1);
|
|
194 this.Controls.Add(this.txtDetail);
|
|
195 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
|
196 this.Name = "FrmDebugOutput";
|
|
197 this.ShowInTaskbar = false;
|
|
198 this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
|
199 this.Text = "FrmDebugOutput";
|
|
200 this.ResumeLayout(false);
|
|
201
|
|
202 }
|
|
203 #endregion
|
|
204
|
|
205 private void cmbDebugLevel_SelectedIndexChanged(object sender, System.EventArgs e)
|
|
206 {
|
|
207 fillDebugList();
|
|
208 }
|
|
209
|
|
210 private void fillDebugList()
|
|
211 {
|
|
212 lstDebugItems.Items.Clear();
|
|
213 /*LogItem[] items = logger.GetLogItems((LogLevels)cmbDebugLevel.SelectedItem);
|
|
214 int last = items.Length - 1;
|
|
215 int stop = last - MAX_LIST_LENGTH;
|
|
216
|
|
217 if (stop < 0)
|
|
218 {
|
|
219 stop = 0;
|
|
220 }
|
|
221
|
|
222 //reverse fill the list so that we can have newest items at the top
|
|
223 for (int i = last; i >= stop; i--)
|
|
224 {
|
|
225 lstDebugItems.Items.Add(items[i]);
|
|
226 }*/
|
|
227 }
|
|
228
|
|
229 private void logger_LogUpdatedEvent(LogItem item)
|
|
230 {
|
|
231 /*if (item.Level >= (LogLevels)cmbDebugLevel.SelectedItem)
|
|
232 {
|
|
233 lock (lstDebugItems)
|
|
234 {
|
|
235 lstDebugItems.Items.Insert(0, item);
|
|
236
|
|
237 if (lstDebugItems.Items.Count > MAX_LIST_LENGTH)
|
|
238 {
|
|
239 lstDebugItems.Items.RemoveAt(lstDebugItems.Items.Count - 1);
|
|
240 }
|
|
241 }
|
|
242 }*/
|
|
243 }
|
|
244
|
|
245 private void miCopy_Click(object sender, System.EventArgs e)
|
|
246 {
|
|
247 if (lstDebugItems.SelectedIndices.Count==1)
|
|
248 {
|
|
249 Clipboard.SetDataObject(lstDebugItems.SelectedItem.ToString());
|
|
250 }
|
|
251 else if (lstDebugItems.SelectedIndices.Count > 1)
|
|
252 {
|
|
253 StringBuilder sb = new StringBuilder();
|
|
254
|
|
255 foreach (int idx in lstDebugItems.SelectedIndices)
|
|
256 {
|
|
257 sb.Append(lstDebugItems.Items[idx].ToString()+Environment.NewLine);
|
|
258 }
|
|
259
|
|
260 Clipboard.SetDataObject(sb.ToString().Trim());
|
|
261 }
|
|
262 }
|
|
263
|
|
264 private void contextMenu_Popup(object sender, System.EventArgs e)
|
|
265 {
|
|
266 foreach (MenuItem mi in contextMenu.MenuItems)
|
|
267 {
|
|
268 mi.Visible = lstDebugItems.SelectedIndex > -1;
|
|
269 }
|
|
270 }
|
|
271
|
|
272 private void lstDebugItems_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
|
|
273 {
|
|
274 if (e.Button == MouseButtons.Right)
|
|
275 {
|
|
276 int idx = lstDebugItems.IndexFromPoint(e.X, e.Y);
|
|
277
|
|
278 if (lstDebugItems.SelectedIndices.Contains(idx))
|
|
279 {
|
|
280 lstDebugItems.SelectedIndex = idx;
|
|
281 }
|
|
282 }
|
|
283 }
|
|
284
|
|
285 private void lstDebugItems_SelectedIndexChanged(object sender, System.EventArgs e)
|
|
286 {
|
|
287 if (lstDebugItems.SelectedIndex > -1)
|
|
288 {
|
|
289 LogItem item = (LogItem)lstDebugItems.SelectedItem;
|
|
290 txtDetail.Text = item.ToString() + Environment.NewLine + Environment.NewLine + "Stack Trace: "+ item.StackTrace;
|
|
291 }
|
|
292 else
|
|
293 {
|
|
294 txtDetail.Text = "";
|
|
295 }
|
|
296 }
|
|
297
|
|
298 private void txtDetail_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
|
|
299 {
|
|
300 if(e.KeyData == (Keys.Control|Keys.A) && e.Control)
|
|
301 {
|
|
302 txtDetail.SelectAll();
|
|
303 }
|
|
304 }
|
|
305 }
|
|
306 }
|