package org.lucci.madhoc.gui;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Collection;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import org.lucci.madhoc.Version;
import org.lucci.madhoc.gui.runtime.RuntimeComponent;
import org.lucci.madhoc.gui.runtime.WindowShorcutComponent;
import org.lucci.madhoc.simulation.MadhocSimulation;
import org.lucci.madhoc.simulation.projection.Projection;
public class SimulationFrame extends JFrame
{
public SimulationFrame(MadhocSimulation simulation)
throws Throwable
{
super("Madhoc - Metropolitan ad hoc network simulator - Release \"" + Version.RELEASE_NAME + "\"");
Dimension ss = Toolkit.getDefaultToolkit().getScreenSize();
double ratio = simulation.getConfiguration().getDouble("graphical_window_size_ratio");
setSize((int) (ss.width * ratio), (int) (ss.height * ratio));
setLocation(ss.width / 2 - getSize().width / 2, ss.height / 2 - getSize().height / 2);
addWindowListener(new WindowEventHandler());
RuntimeComponent runtimeComponent = new RuntimeComponent();
runtimeComponent.setSimulation(simulation);
JDesktopPane desktopPane = new JDesktopPane();
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(desktopPane, BorderLayout.CENTER);
contentPane.add(runtimeComponent, BorderLayout.SOUTH);
setVisible(true);
Collection<Projection> projections = simulation.getNetwork().getProjectionMap().values();
for (Projection projection : projections)
{
ProjectionComponent projectionComponent = new ProjectionComponent();
projectionComponent.setProjection(projection);
runtimeComponent.getRuntime().addSimulationRuntimeListener(projectionComponent);
JInternalFrame internalFrame = new JInternalFrame(projection.getName());
internalFrame.setContentPane(projectionComponent);
Dimension ws = desktopPane.getSize();
double r = 0.8;
internalFrame.setSize((int) (ws.width * r), (int) (ws.height * r));
internalFrame.setLocation(ws.width / 2 - internalFrame.getSize().width / 2, ws.width / 2 - internalFrame.getSize().width / 2);
internalFrame.setResizable(true);
internalFrame.setClosable(false);
internalFrame.setIconifiable(true);
internalFrame.setMaximizable(true);
desktopPane.add(internalFrame);
internalFrame.setVisible(true);
}
((WindowShorcutComponent) runtimeComponent.getRuntimeComponentElements().get(WindowShorcutComponent.class)).setDesktopPane(desktopPane);
}
private class WindowEventHandler extends WindowAdapter
{
public void windowClosing(WindowEvent event)
{
System.exit(0);
}
}
}