Sun, 29 Sep 2024 18:51:03 +0200
use GtkFileDialog on newer gtk4 versions
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(); } }