package kernel.ui; import java.util.ArrayList; import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.JPanel; import javax.swing.JList; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.BorderFactory; import javax.swing.SwingUtilities; import kernel.KernelListener; import kernel.AgentProxy; import kernel.SimulatorProxy; import kernel.ViewerProxy; import kernel.Kernel; import rescuecore2.misc.gui.ListModelList; import rescuecore2.Timestep; /** A status panel for the kernel. */ public class KernelStatus extends JPanel implements KernelListener { private Kernel kernel; private ListModelList<AgentProxy> agents; private ListModelList<SimulatorProxy> simulators; private ListModelList<ViewerProxy> viewers; private JList agentsList; private JList simulatorsList; private JList viewersList; private JLabel timeLabel; private JLabel scoreLabel; /** Construct a KernelStatus component. @param kernel The Kernel to watch. */ public KernelStatus(Kernel kernel) { super(new BorderLayout()); this.kernel = kernel; agents = new ListModelList<AgentProxy>(new ArrayList<AgentProxy>()); simulators = new ListModelList<SimulatorProxy>(new ArrayList<SimulatorProxy>()); viewers = new ListModelList<ViewerProxy>(new ArrayList<ViewerProxy>()); kernel.addKernelListener(this); agentsList = new JList(agents); simulatorsList = new JList(simulators); viewersList = new JList(viewers); // CHECKSTYLE:OFF:MagicNumber JPanel lists = new JPanel(new GridLayout(3, 1)); // CHECKSTYLE:ON:MagicNumber JScrollPane agentsScroll = new JScrollPane(agentsList); JScrollPane simulatorsScroll = new JScrollPane(simulatorsList); JScrollPane viewersScroll = new JScrollPane(viewersList); agentsScroll.setBorder(BorderFactory.createTitledBorder("Agents")); simulatorsScroll.setBorder(BorderFactory.createTitledBorder("Simulators")); viewersScroll.setBorder(BorderFactory.createTitledBorder("Viewers")); lists.add(agentsScroll); lists.add(simulatorsScroll); lists.add(viewersScroll); add(lists, BorderLayout.CENTER); timeLabel = new JLabel("Time: not started", JLabel.CENTER); scoreLabel = new JLabel("Score: not started", JLabel.CENTER); JPanel labels = new JPanel(new GridLayout(1, 2)); labels.add(timeLabel); labels.add(scoreLabel); add(labels, BorderLayout.NORTH); agents.addAll(kernel.getAllAgents()); simulators.addAll(kernel.getAllSimulators()); viewers.addAll(kernel.getAllViewers()); } @Override public void simulationStarted(Kernel k) { } @Override public void simulationEnded(Kernel k) { SwingUtilities.invokeLater(new Runnable() { public void run() { timeLabel.setText("Time: ended"); } }); } @Override public void timestepCompleted(Kernel k, final Timestep time) { SwingUtilities.invokeLater(new Runnable() { public void run() { timeLabel.setText("Time: " + time.getTime()); scoreLabel.setText("Score: " + time.getScore()); } }); } @Override public void agentAdded(Kernel k, AgentProxy info) { agents.add(info); } @Override public void agentRemoved(Kernel k, AgentProxy info) { agents.remove(info); } @Override public void simulatorAdded(Kernel k, SimulatorProxy info) { simulators.add(info); } @Override public void simulatorRemoved(Kernel k, SimulatorProxy info) { simulators.remove(info); } @Override public void viewerAdded(Kernel k, ViewerProxy info) { viewers.add(info); } @Override public void viewerRemoved(Kernel k, ViewerProxy info) { viewers.remove(info); } }