/*
* Copyright 2011 by Mark Coletti, Keith Sullivan, Sean Luke, and
* George Mason University Mason University Licensed under the Academic
* Free License version 3.0
*
* See the file "LICENSE" for more information
*
* $Id$
*/
package sim.app.geo.colorworld;
import java.awt.Color;
import javax.swing.JFrame;
import sim.display.Console;
import sim.display.Controller;
import sim.display.Display2D;
import sim.display.GUIState;
import sim.engine.SimState;
import sim.portrayal.geo.GeomVectorFieldPortrayal;
import sim.portrayal.simple.OvalPortrayal2D;
import sim.util.gui.SimpleColorMap;
/**
* The display GUI for the ColorWorld GeoMASON example. Much of this file is similar to other
* MASON GUI code. The only exception is that we use our custom ColorWorldPortrayal for the
* voting districts to handle the shading.
*
*/
public class ColorWorldWithUI extends GUIState
{
Display2D display;
JFrame displayFrame;
// our data is vector format, not raster.
GeomVectorFieldPortrayal countyPortrayal = new GeomVectorFieldPortrayal();
GeomVectorFieldPortrayal agentPortrayal = new GeomVectorFieldPortrayal();
public ColorWorldWithUI(SimState state)
{
super(state);
}
public ColorWorldWithUI()
{
super(new ColorWorld(System.currentTimeMillis()));
}
public static String getName() { return "GeoMASON: Color World"; }
@Override
public Object getSimulationInspectedObject() { return state; }
@Override
public void init(Controller controller)
{
super.init(controller);
display = new Display2D(ColorWorld.WIDTH, ColorWorld.HEIGHT, this);
display.attach(countyPortrayal, "FFX County Politcal Boundaries");
display.attach(agentPortrayal, "Agents");
displayFrame = display.createFrame();
controller.registerFrame(displayFrame);
displayFrame.setVisible(true);
}
@Override
public void quit()
{
super.quit();
if (displayFrame!=null)
{
displayFrame.dispose();
}
displayFrame = null;
display = null;
}
@Override
public void start()
{
super.start();
setupPortrayals();
}
private void setupPortrayals()
{
ColorWorld world = (ColorWorld) state;
agentPortrayal.setField(ColorWorld.agents);
agentPortrayal.setPortrayalForAll(new OvalPortrayal2D(Color.RED, 6.0));
// the county portrayal (ie, the voting districts) to use our custom portrayal
countyPortrayal.setField(world.county);
countyPortrayal.setPortrayalForAll(new ColorWorldPortrayal(
new SimpleColorMap(0.0, ColorWorld.NUM_AGENTS, Color.WHITE, Color.BLUE)));
display.reset();
display.setBackdrop(Color.WHITE);
display.repaint();
}
public static void main(String[] args)
{
ColorWorldWithUI worldGUI = new ColorWorldWithUI();
Console console = new Console(worldGUI);
console.setVisible(true);
}
}