Sun, 22 Sep 2024 18:16:14 +0200
simplfy macro usage in container.c (GTK)
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 ApplicationMenu { private List<Menu> current = new List<Menu>(); public List<Menu> Menus = new List<Menu>(); public void AddMenu(String label) { current.Clear(); Menu menu = new Menu(label); current.Add(menu); Menus.Add(menu); } public Boolean IsEmpty() { return Menus.Count == 0 ? true : false; } public void AddSubMenu(String label) { Menu menu = new Menu(label); current.Last().Items.Add(menu); current.Add(menu); } public void EndSubMenu() { current.Remove(current.Last()); } public void AddMenuItem(String label, Action<IntPtr> action) { if(current.Count != 0) { MenuItem item = new MenuItem(label, action); current.Last().Items.Add(item); } } public System.Windows.Controls.Menu CreateMenu(IntPtr uiobj) { System.Windows.Controls.Menu menu = new System.Windows.Controls.Menu(); menu.Background = new SolidColorBrush(Color.FromRgb(255, 255, 255)); foreach (Menu m in Menus) { System.Windows.Controls.MenuItem i = new System.Windows.Controls.MenuItem(); i.Header = m.Label; m.AddItems(i, uiobj); menu.Items.Add(i); } return menu; } } public interface IMenuItem { void AddTo(System.Windows.Controls.MenuItem menu, IntPtr uiobj); } public class Menu : IMenuItem { public String Label; public List<IMenuItem> Items = new List<IMenuItem>(); public Menu(String label) { Label = label; } public void AddItems(System.Windows.Controls.MenuItem i, IntPtr uiobj) { foreach (IMenuItem item in Items) { item.AddTo(i, uiobj); } } void IMenuItem.AddTo(System.Windows.Controls.MenuItem menu, IntPtr uiobj) { System.Windows.Controls.MenuItem i = new System.Windows.Controls.MenuItem(); i.Header = Label; AddItems(i, uiobj); menu.Items.Add(i); } } public class MenuItem : IMenuItem { String Label; Action<IntPtr> Action; public MenuItem(String label, Action<IntPtr> action) { Label = label; Action = action; } void IMenuItem.AddTo(System.Windows.Controls.MenuItem menu, IntPtr uiobj) { System.Windows.Controls.MenuItem i = new System.Windows.Controls.MenuItem(); EventCallback cb = new EventCallback(uiobj, Action); i.Click += cb.Callback; i.Header = Label; menu.Items.Add(i); } } }