ui/wpf/UIcore/Menu.cs

changeset 81
5eb765a7a793
child 82
0cdb8089a29f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/wpf/UIcore/Menu.cs	Sun Jan 25 15:01:04 2015 +0100
@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+
+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 EndMenu()
+        {
+            current.Remove(current.Last());
+        }
+
+        public void AddMenuItem(String label, Action action)
+        {
+            if(current.Count != 0)
+            {
+                MenuItem item = new MenuItem(label, action);
+                current.Last().Items.Add(item);
+            }
+        }
+
+        public System.Windows.Controls.Menu CreateMenu()
+        {
+            System.Windows.Controls.Menu menu = new System.Windows.Controls.Menu();
+            foreach (Menu m in Menus)
+            {
+                System.Windows.Controls.MenuItem i = new System.Windows.Controls.MenuItem();
+                i.Header = m.Label;
+                m.AddItems(i);
+                menu.Items.Add(i);
+            }
+            return menu;
+        }
+    }
+
+    public interface IMenuItem
+    {
+        void AddTo(System.Windows.Controls.MenuItem menu);
+    }
+
+    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)
+        {
+            foreach (IMenuItem item in Items)
+            {
+                item.AddTo(i);
+            }
+        }
+
+        void IMenuItem.AddTo(System.Windows.Controls.MenuItem menu)
+        {
+            System.Windows.Controls.MenuItem i = new System.Windows.Controls.MenuItem();
+            i.Header = Label;
+            AddItems(i);
+            menu.Items.Add(i);
+        }
+    }
+
+    public class MenuItem : IMenuItem
+    {
+        String Label;
+        Action Action;
+
+        public MenuItem(String label, Action action)
+        {
+            Label = label;
+            Action = action;
+        }
+
+        void IMenuItem.AddTo(System.Windows.Controls.MenuItem menu)
+        {
+            System.Windows.Controls.MenuItem i = new System.Windows.Controls.MenuItem();
+            i.Header = Label;
+            menu.Items.Add(i);
+        }
+    }
+}

mercurial