diff options
Diffstat (limited to 'src/main/java/testing/DummySimulatorFrame.java')
| -rw-r--r-- | src/main/java/testing/DummySimulatorFrame.java | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/main/java/testing/DummySimulatorFrame.java b/src/main/java/testing/DummySimulatorFrame.java new file mode 100644 index 0000000..b211851 --- /dev/null +++ b/src/main/java/testing/DummySimulatorFrame.java @@ -0,0 +1,93 @@ +package testing; + +import simulator.VSSimulatorFrame; +import prefs.VSPrefs; +import javax.swing.SwingUtilities; +import java.awt.Dimension; +import java.awt.Point; + +/** + * A minimal simulator frame for headless operation. + * Creates a real frame but immediately hides it and moves it off-screen. + */ +public class DummySimulatorFrame extends VSSimulatorFrame { + + public DummySimulatorFrame(VSPrefs prefs) { + super(prefs, null); // null for relativeTo component + + // Make the frame as small as possible and move off-screen + SwingUtilities.invokeLater(() -> { + setSize(1, 1); + setLocation(-1000, -1000); + setVisible(false); + }); + } + + @Override + public void resetCurrentSimulator() { + // Check if we have a current simulator before resetting + if (getCurrentSimulator() != null) { + // Only reset menu states, don't update GUI + getCurrentSimulator().getMenuItemStates().setStart(true); + getCurrentSimulator().getMenuItemStates().setPause(false); + getCurrentSimulator().getMenuItemStates().setReset(false); + getCurrentSimulator().getMenuItemStates().setReplay(false); + } + } + + @Override + public void updateSimulatorMenu() { + // Do nothing - no menu updates in headless mode + } + + @Override + public void setVisible(boolean visible) { + // Always keep invisible + super.setVisible(false); + } + + @Override + public void pack() { + // Set minimal size instead of packing + setSize(1, 1); + } + + @Override + public void toFront() { + // Do nothing - don't bring to front + } + + @Override + public void repaint() { + // Do nothing - no repainting needed + } + + @Override + public void addSimulator(simulator.VSSimulator simulator) { + // Add simulator without triggering tab changes and painting + if (getSimulators() != null) { + getSimulators().add(simulator); + } + setCurrentSimulator(simulator); + } + + protected void setCurrentSimulator(simulator.VSSimulator simulator) { + try { + java.lang.reflect.Field field = VSSimulatorFrame.class.getDeclaredField("currentSimulator"); + field.setAccessible(true); + field.set(this, simulator); + } catch (Exception e) { + // Ignore errors + } + } + + protected java.util.Vector<simulator.VSSimulator> getSimulators() { + try { + java.lang.reflect.Field field = VSSimulatorFrame.class.getDeclaredField("simulators"); + field.setAccessible(true); + return (java.util.Vector<simulator.VSSimulator>) field.get(this); + } catch (Exception e) { + return null; + } + } +}
\ No newline at end of file |
