# HG changeset patch # User Olaf Wintermann # Date 1485102200 -3600 # Node ID b9dc9cdfa23a34d7b6c9d1736dd4b3120e50f2e5 # Parent 69e8e0936858ef9f6aa51b4da44f3303de88020b refactors architecture (WPF) diff -r 69e8e0936858 -r b9dc9cdfa23a .hgignore --- a/.hgignore Sun Jan 22 11:48:50 2017 +0100 +++ b/.hgignore Sun Jan 22 17:23:20 2017 +0100 @@ -1,3 +1,9 @@ relre:^build/.*$ relre:^config.mk$ relre:^core$ +relre:^ui/wpf/UIcore/obj +relre:^ui/wpf/UIWrapper/.vs +relre:^ui/wpf/UIWrapper/Debug +relre:^ui/wpf/UIWrapper/Release +relre:^ui/wpf/UIWrapper/x64 +relre:^ui/wpf/UIWrapper/UIwrapper.VC \ No newline at end of file diff -r 69e8e0936858 -r b9dc9cdfa23a ui/wpf/UIcore/Application.cs --- a/ui/wpf/UIcore/Application.cs Sun Jan 22 11:48:50 2017 +0100 +++ b/ui/wpf/UIcore/Application.cs Sun Jan 22 17:23:20 2017 +0100 @@ -15,21 +15,19 @@ private System.Windows.Application application; private Thread thread; - private Queue queue = new Queue(); - private object sync = new object(); - private object result = new object(); - private Boolean main = false; 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(() => Run()); + thread = new Thread(() => RunApplication()); thread.SetApartmentState(ApartmentState.STA); - thread.Start(); } public static Application GetInstance() @@ -44,86 +42,22 @@ public Thread Start() { - lock(sync) - { - queue.Enqueue(() => RunApplication()); - Monitor.Pulse(sync); - } + thread.Start(); return thread; } private void RunApplication() { application = new System.Windows.Application(); - main = true; - application.Run(); - } - public void Run() - { - lock(sync) - { - for (;;) - { - Monitor.Wait(sync); - Action action = queue.Dequeue(); - action.Invoke(); - lock (result) - { - Monitor.Pulse(result); - } - if (main) - { - // end loop after shutdown - break; - } - } - } - } - - public T Exec(Func func) - { - ResultExec e = new ResultExec(); - e.Func = func; - - if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA) + if(callbacks != null) { - e.Exec(); - return e.Result; - } - else - { - lock (sync) - { - queue.Enqueue(() => e.Exec()); - Monitor.Pulse(sync); - } - lock (result) - { - Monitor.Wait(result); - } - - return e.Result; + callbacks.OnStartup(); } - } - - public void Exec(Action action) - { - if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA) - { - action.Invoke(); - } - else + application.Run(); + if(callbacks != null) { - lock (sync) - { - queue.Enqueue(action); - Monitor.Pulse(sync); - } - lock (result) - { - Monitor.Wait(result); - } + callbacks.OnExit(); } } @@ -162,4 +96,11 @@ Action.Invoke(); } } + + public interface IApplicationCallbacks + { + void OnStartup(); + void OnOpen(); + void OnExit(); + } } diff -r 69e8e0936858 -r b9dc9cdfa23a ui/wpf/UIcore/Container.cs --- a/ui/wpf/UIcore/Container.cs Sun Jan 22 11:48:50 2017 +0100 +++ b/ui/wpf/UIcore/Container.cs Sun Jan 22 17:23:20 2017 +0100 @@ -145,11 +145,6 @@ Layout.Reset(); } - - public static BoxContainer CreateBoxContainer(Container parent, BoxOrientation orientation) - { - return Application.GetInstance().Exec(() => new BoxContainer(parent, orientation)); - } } public class GridContainer : Grid, Container @@ -252,10 +247,5 @@ Layout.Reset(); X++; } - - public static GridContainer CreateGridContainer(Container parent, int margin, int colspacing, int rowspacing) - { - return Application.GetInstance().Exec(() => new GridContainer(parent, margin, colspacing, rowspacing)); - } } } diff -r 69e8e0936858 -r b9dc9cdfa23a ui/wpf/UIcore/Controls.cs --- a/ui/wpf/UIcore/Controls.cs Sun Jan 22 11:48:50 2017 +0100 +++ b/ui/wpf/UIcore/Controls.cs Sun Jan 22 17:23:20 2017 +0100 @@ -10,37 +10,8 @@ { public class Controls { - public static Button Button(Container container, String label, RoutedEventHandler e) { - return Application.GetInstance().Exec