diff -r 000000000000 -r 804d8803eade ui/wpf/UIcore/Application.cs --- /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 Windows = new List(); + 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 + { + public T Result; + public Func 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(); + } +}