SimpleLogicUIStandalone now supports a pre-run hook
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / SimpleLogicUIStandalone.java
index 23252d4..2b945b1 100644 (file)
@@ -10,14 +10,25 @@ import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
 public class SimpleLogicUIStandalone
 {
        public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel)
+       {
+               executeVisualisation(setupViewModel, (Consumer<VisualisationObjects>) null);
+       }
+
+       public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, Consumer<VisualisationObjects> beforeRun)
        {
                LogicModelParameters params = new LogicModelParameters();
                params.gateProcessTime = 50;
                params.wireTravelTime = 10;
-               executeVisualisation(setupViewModel, params);
+               executeVisualisation(setupViewModel, params, beforeRun);
        }
 
        public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params)
+       {
+               executeVisualisation(setupViewModel, params, null);
+       }
+
+       public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params,
+                       Consumer<VisualisationObjects> beforeRun)
        {
                // setup view model
                ViewModelModifiable viewModel = new ViewModelModifiable();
@@ -30,12 +41,31 @@ public class SimpleLogicUIStandalone
                LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(viewModel);
                LogicExecuter exec = new LogicExecuter(timeline);
 
+               if (beforeRun != null)
+                       beforeRun.accept(new VisualisationObjects(viewModel, timeline, ui, exec));
+
                // run it
                exec.startLiveExecution();
                ui.run();
                exec.stopLiveExecution();
        }
 
+       public static class VisualisationObjects
+       {
+               public final ViewModelModifiable model;
+               public final Timeline timeline;
+               public final LogicUIStandaloneGUI gui;
+               public final LogicExecuter executer;
+
+               public VisualisationObjects(ViewModelModifiable model, Timeline timeline, LogicUIStandaloneGUI gui, LogicExecuter executer)
+               {
+                       this.model = model;
+                       this.timeline = timeline;
+                       this.gui = gui;
+                       this.executer = executer;
+               }
+       }
+
        private SimpleLogicUIStandalone()
        {
                throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");