Mon, 23 Sep 2024 23:17:39 +0200
simplify gtk button code
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace UI { public class MainToolBar { Dictionary<string, IToolItem> Items = new Dictionary<string, IToolItem>(); List<string> Defaults = new List<string>(); public MainToolBar() { } public bool HasItems() { return Defaults.Count > 0 ? true : false; } public void AddDefault(string itemName) { Defaults.Add(itemName); } public void AddToolItem(string name, string label, Action<IntPtr> action) { ToolItem item = new ToolItem(); item.Label = label; item.Action = action; Items.Add(name, item); } public ToolBarTray CreateToolBarTray(IntPtr objptr) { ToolBarTray tray = new ToolBarTray(); ToolBar toolbar = new ToolBar(); tray.ToolBars.Add(toolbar); foreach(string s in Defaults) { IToolItem item = Items[s]; item.AddTo(toolbar, objptr); } return tray; } } public interface IToolItem { void AddTo(System.Windows.Controls.ToolBar toolbar, IntPtr uiobj); } public class ToolItem : IToolItem { public string Label { get; set; } // TODO: icon public Action<IntPtr> Action { get; set; } public void AddTo(System.Windows.Controls.ToolBar toolbar, IntPtr uiobj) { Button button = new Button(); button.Content = Label; EventCallback e = new EventCallback(uiobj, Action); button.Click += e.Callback; toolbar.Items.Add(button); } } }