Merge branch 'development' of https://gitlab.lrz.de/lrr-tum/students/eragp-misim...
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / SimpleLogicUIStandalone.java
1 package net.mograsim.logic.model;
2
3 import java.util.function.Consumer;
4
5 import net.mograsim.logic.core.timeline.Timeline;
6 import net.mograsim.logic.model.model.ViewModelModifiable;
7 import net.mograsim.logic.model.modeladapter.LogicModelParameters;
8 import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
9
10 public class SimpleLogicUIStandalone
11 {
12         public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel)
13         {
14                 executeVisualisation(setupViewModel, (Consumer<VisualisationObjects>) null);
15         }
16
17         public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, Consumer<VisualisationObjects> beforeRun)
18         {
19                 LogicModelParameters params = new LogicModelParameters();
20                 params.gateProcessTime = 50;
21                 params.wireTravelTime = 10;
22                 executeVisualisation(setupViewModel, params, beforeRun);
23         }
24
25         public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params)
26         {
27                 executeVisualisation(setupViewModel, params, null);
28         }
29
30         public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params,
31                         Consumer<VisualisationObjects> beforeRun)
32         {
33                 // setup view model
34                 ViewModelModifiable viewModel = new ViewModelModifiable();
35                 setupViewModel.accept(viewModel);
36
37                 // convert to logic model
38                 Timeline timeline = ViewLogicModelAdapter.convert(viewModel, params);
39
40                 // initialize UI and executer
41                 LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(viewModel);
42                 LogicExecuter exec = new LogicExecuter(timeline);
43
44                 if (beforeRun != null)
45                         beforeRun.accept(new VisualisationObjects(viewModel, timeline, ui, exec));
46
47                 // run it
48                 exec.startLiveExecution();
49                 ui.run();
50                 exec.stopLiveExecution();
51         }
52
53         public static class VisualisationObjects
54         {
55                 public final ViewModelModifiable model;
56                 public final Timeline timeline;
57                 public final LogicUIStandaloneGUI gui;
58                 public final LogicExecuter executer;
59
60                 public VisualisationObjects(ViewModelModifiable model, Timeline timeline, LogicUIStandaloneGUI gui, LogicExecuter executer)
61                 {
62                         this.model = model;
63                         this.timeline = timeline;
64                         this.gui = gui;
65                         this.executer = executer;
66                 }
67         }
68
69         private SimpleLogicUIStandalone()
70         {
71                 throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");
72         }
73 }