1 using Mesen.GUI.Config;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;
7 using System.Windows.Forms;
8 
9 namespace Mesen.GUI.Controls
10 {
11 	public class ctrlMesenToolStrip : ToolStrip
12 	{
13 		private const int WM_MOUSEACTIVATE = 0x21;
WndProc(ref Message m)14 		protected override void WndProc(ref Message m)
15 		{
16 			if(m.Msg == WM_MOUSEACTIVATE && this.CanFocus && !this.Focused) {
17 				this.FindForm()?.Focus();
18 			}
19 			base.WndProc(ref m);
20 		}
21 
AddItemToToolbar(ToolStripMenuItem item, string caption = null)22 		public void AddItemToToolbar(ToolStripMenuItem item, string caption = null)
23 		{
24 			if(item == null) {
25 				this.Items.Add("-");
26 			} else {
27 				ToolStripItem newItem = item.HasDropDownItems ? (ToolStripItem)new ToolStripDropDownButton(item.Text, item.Image) : (ToolStripItem)new ToolStripButton(item.Image);
28 				if(item.Image == null) {
29 					newItem.Text = item.Text;
30 				}
31 				newItem.ToolTipText = (caption ?? item.Text) + (item.ShortcutKeys != Keys.None ? $" ({DebuggerShortcutsConfig.GetShortcutDisplay(item.ShortcutKeys)})" : "");
32 				newItem.Click += (s, e) => item.PerformClick();
33 				if(newItem is ToolStripButton) {
34 					((ToolStripButton)newItem).Checked = item.Checked;
35 					item.CheckedChanged += (s, e) => ((ToolStripButton)newItem).Checked = item.Checked;
36 				}
37 				newItem.Enabled = item.Enabled;
38 				newItem.MouseEnter += (s, e) => newItem.ToolTipText = (caption ?? item.Text) + (item.ShortcutKeys != Keys.None ? $" ({DebuggerShortcutsConfig.GetShortcutDisplay(item.ShortcutKeys)})" : "");
39 				item.EnabledChanged += (s, e) => newItem.Enabled = item.Enabled;
40 				item.VisibleChanged += (s, e) => newItem.Visible = item.Visible;
41 
42 				if(item.HasDropDownItems) {
43 					foreach(ToolStripItem ddItem in item.DropDownItems) {
44 						ToolStripItem newDdItem = ((ToolStripDropDownButton)newItem).DropDownItems.Add(ddItem.Text, ddItem.Image);
45 						newDdItem.Click += (s, e) => ddItem.PerformClick();
46 					}
47 				}
48 
49 				this.Items.Add(newItem);
50 			}
51 		}
52 
AddItemsToToolbar(params ToolStripMenuItem[] items)53 		public void AddItemsToToolbar(params ToolStripMenuItem[] items)
54 		{
55 			foreach(ToolStripMenuItem item in items) {
56 				AddItemToToolbar(item);
57 			}
58 		}
59 	}
60 }
61