ui/wpf/UIcore/Application.cs

changeset 0
804d8803eade
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/wpf/UIcore/Application.cs	Wed Dec 09 11:32:01 2020 +0100
@@ -0,0 +1,106 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace UI
+{  
+    public class Application
+    {
+        private static Application instance;
+
+        private System.Windows.Application application;
+
+        private Thread thread;
+
+        public String Name;
+
+        public IApplicationCallbacks callbacks;
+
+        public List<Window> Windows = new List<Window>();
+        public ApplicationMenu Menu = new ApplicationMenu();
+        public MainToolBar ToolBar = new MainToolBar();
+        
+        private Application() : base()
+        {
+            thread = new Thread(() => RunApplication());
+            thread.SetApartmentState(ApartmentState.STA);
+        }
+
+        public static Application GetInstance()
+        {
+            if (instance == null)
+            {
+                instance = new Application();
+                GC.KeepAlive(instance);
+            }
+            return instance;
+        }
+
+        public Thread Start()
+        {
+            thread.Start();
+            return thread;
+        }
+
+        private void RunApplication()
+        {
+            application = new System.Windows.Application();
+
+            if(callbacks != null)
+            {
+                callbacks.OnStartup();
+            }
+            application.Run();
+            if(callbacks != null)
+            {
+                callbacks.OnExit();
+            }
+        }
+
+        public void AddWindow(Window window)
+        {
+            Windows.Add(window);
+        }
+
+        public void RemoveWindow(Window window)
+        {
+            Windows.Remove(window);
+            if (Windows.Count == 0)
+            {
+                application.Shutdown();
+            }
+        }
+    }
+
+    public class ResultExec<T>
+    {
+        public T Result;
+        public Func<T> Func;
+
+        public void Exec()
+        {
+            Result = Func.Invoke();
+        }
+    }
+
+    public class VoidExec
+    {
+        public Action Action;
+
+        public void Exec()
+        {
+            Action.Invoke();
+        }
+    }
+
+    public interface IApplicationCallbacks
+    {
+        void OnStartup();
+        void OnOpen();
+        void OnExit();
+    }
+}

mercurial