829abaa501d885adf0f93aa99fb476afc2381921
[Mograsim.git] / plugins / 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.LogicModelModifiable;
7 import net.mograsim.logic.model.modeladapter.CoreModelParameters;
8 import net.mograsim.logic.model.modeladapter.LogicCoreAdapter;
9 import net.mograsim.logic.model.preferences.DefaultRenderPreferences;
10
11 public class SimpleLogicUIStandalone
12 {
13         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel)
14         {
15                 executeVisualisation(setupLogicModel, (Consumer<VisualisationObjects>) null);
16         }
17
18         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, Consumer<VisualisationObjects> beforeRun)
19         {
20                 CoreModelParameters params = new CoreModelParameters();
21                 params.gateProcessTime = 50;
22                 params.hardcodedComponentProcessTime = params.gateProcessTime * 5;
23                 params.wireTravelTime = 10;
24                 executeVisualisation(setupLogicModel, params, beforeRun);
25         }
26
27         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, CoreModelParameters params)
28         {
29                 executeVisualisation(setupLogicModel, params, null);
30         }
31
32         public static void executeVisualisation(Consumer<LogicModelModifiable> setupLogicModel, CoreModelParameters params,
33                         Consumer<VisualisationObjects> beforeRun)
34         {
35                 // setup logic model
36                 LogicModelModifiable logicModel = new LogicModelModifiable();
37                 setupLogicModel.accept(logicModel);
38
39                 // convert to core model
40                 Timeline timeline = LogicCoreAdapter.convert(logicModel, params);
41
42                 // initialize UI and executer
43                 LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(logicModel, new DefaultRenderPreferences());
44                 LogicExecuter exec = new LogicExecuter(timeline);
45
46                 if (beforeRun != null)
47                         beforeRun.accept(new VisualisationObjects(logicModel, timeline, ui, exec));
48
49                 // run it
50                 exec.setSpeedFactor(1);
51                 exec.startLiveExecution();
52                 ui.run();
53                 exec.stopLiveExecution();
54         }
55
56         public static class VisualisationObjects
57         {
58                 public final LogicModelModifiable model;
59                 public final Timeline timeline;
60                 public final LogicUIStandaloneGUI gui;
61                 public final LogicExecuter executer;
62
63                 public VisualisationObjects(LogicModelModifiable model, Timeline timeline, LogicUIStandaloneGUI gui, LogicExecuter executer)
64                 {
65                         this.model = model;
66                         this.timeline = timeline;
67                         this.gui = gui;
68                         this.executer = executer;
69                 }
70         }
71
72         private SimpleLogicUIStandalone()
73         {
74                 throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");
75         }
76 }