// Copyright 2011-2012 Paulo Augusto Peccin. See licence.txt distributed with this file. package org.javatari.pc.room; import javax.swing.RootPaneContainer; import org.javatari.pc.screen.DesktopScreenWindow; import org.javatari.pc.screen.PanelScreen; import org.javatari.pc.screen.Screen; public class EmbeddedRoom extends Room { private EmbeddedRoom(RootPaneContainer rootPaneContainer) { super(); this.parentContainer = rootPaneContainer; } @Override protected Screen buildScreenPeripheral() { embeddedScreen = new PanelScreen(true); parentContainer.setContentPane(embeddedScreen); return embeddedScreen; } public void popUpScreen(boolean fullScreen) { if (screen != embeddedScreen) return; if (windowScreen == null) windowScreen = buildDesktopScreenPeripheral(); currentConsole.pause(); windowScreen.monitor().setCartridgeChangeEnabled(embeddedScreen.monitor().isCartridgeChangeEnabled()); windowScreen.connect(currentConsole.videoOutput(), currentConsole.controlsSocket(), currentConsole.cartridgeSocket(), currentConsole.saveStateSocket()); awtControls.connectScreen(windowScreen); windowScreen.powerOn(fullScreen); embeddedScreen.powerOff(); embeddedScreen.setVisible(false); currentConsole.go(); screen = windowScreen; } public void reembedScreen() { if (screen != windowScreen) return; currentConsole.pause(); embeddedScreen.monitor().setCartridgeChangeEnabled(windowScreen.monitor().isCartridgeChangeEnabled()); embeddedScreen.connect(currentConsole.videoOutput(), currentConsole.controlsSocket(), currentConsole.cartridgeSocket(), currentConsole.saveStateSocket()); awtControls.connectScreen(embeddedScreen); embeddedScreen.powerOn(); windowScreen.powerOff(); windowScreen.setVisible(false); currentConsole.go(); screen = embeddedScreen; } public void exit() { powerOff(); // Does not end the entire VM... } public static Room buildStandaloneRoom(RootPaneContainer rootPaneContainer) { if (currentRoom != null) throw new IllegalStateException("Room already built"); currentRoom = new EmbeddedRoom(rootPaneContainer); currentRoom.buildPeripherals(); currentRoom.adjustPeripheralsToStandaloneOrServerOperation(); currentRoom.buildAndPlugStandaloneConsole(); return currentRoom; } public static Room buildServerRoom(RootPaneContainer rootPaneContainer) { if (currentRoom != null) throw new IllegalStateException("Room already built"); currentRoom = new EmbeddedRoom(rootPaneContainer); currentRoom.buildPeripherals(); currentRoom.adjustPeripheralsToStandaloneOrServerOperation(); currentRoom.buildAndPlugServerConsole(); return currentRoom; } public static Room buildClientRoom(RootPaneContainer rootPaneContainer) { if (currentRoom != null) throw new IllegalStateException("Room already built"); currentRoom = new EmbeddedRoom(rootPaneContainer); currentRoom.buildPeripherals(); currentRoom.adjustPeripheralsToClientOperation(); currentRoom.buildAndPlugClientConsole(); return currentRoom; } private final RootPaneContainer parentContainer; private PanelScreen embeddedScreen; private DesktopScreenWindow windowScreen; }