package rescuecore2.standard.kernel; import java.awt.Dimension; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JComponent; import javax.swing.JSplitPane; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JPanel; import java.util.List; import rescuecore2.view.EntityInspector; import rescuecore2.view.ViewListener; import rescuecore2.view.ViewComponent; import rescuecore2.view.RenderedObject; import rescuecore2.worldmodel.WorldModel; import rescuecore2.worldmodel.Entity; import rescuecore2.worldmodel.EntityID; //import rescuecore2.config.Config; import rescuecore2.Timestep; import rescuecore2.GUIComponent; import rescuecore2.standard.view.StandardWorldModelViewer; import kernel.Kernel; import kernel.KernelListenerAdapter; /** A KernelGUIComponent that will view a standard world model. */ public class StandardWorldModelViewerComponent extends KernelListenerAdapter implements GUIComponent { private static final int SIZE = 500; private StandardWorldModelViewer viewer; private EntityInspector inspector; private JTextField field; private JComponent view; private WorldModel<? extends Entity> world; /** Construct a StandardWorldModelViewerComponent. */ public StandardWorldModelViewerComponent() { viewer = new StandardWorldModelViewer(); inspector = new EntityInspector(); field = new JTextField(); viewer.setPreferredSize(new Dimension(SIZE, SIZE)); viewer.addViewListener(new ViewListener() { @Override public void objectsClicked(ViewComponent v, List<RenderedObject> objects) { for (RenderedObject next : objects) { if (next.getObject() instanceof Entity) { inspector.inspect((Entity)next.getObject()); field.setText(""); return; } } } @Override public void objectsRollover(ViewComponent v, List<RenderedObject> objects) { } }); field.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { String s = field.getText(); try { int id = Integer.parseInt(s); EntityID eid = new EntityID(id); Entity e = world.getEntity(eid); inspector.inspect(e); } catch (NumberFormatException e) { field.setText(""); } } }); JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, viewer, new JScrollPane(inspector)); view = new JPanel(new BorderLayout()); view.add(split, BorderLayout.CENTER); view.add(field, BorderLayout.NORTH); } @Override public void simulationStarted(Kernel kernel) { viewer.initialise(kernel.getConfig()); world = kernel.getWorldModel(); viewer.view(world); viewer.repaint(); } @Override public void timestepCompleted(Kernel kernel, Timestep time) { viewer.view(kernel.getWorldModel(), time.getCommands(), time.getChangeSet()); viewer.repaint(); } @Override public JComponent getGUIComponent() { return view; } @Override public String getGUIComponentName() { return "World view"; } }