blob: db38e56e1e8074257f54892c6f127560ef850552 [file] [log] [blame]
«IMPORT emf»
«IMPORT metaabm»
«IMPORT metaabm::act»
«IMPORT metaabm::function»
«EXTENSION metaabm::tmpl::types»
«EXTENSION metaabm::tmpl::names»
«EXTENSION metaabm::tmpl::infer»
«EXTENSION metaabm::tmpl::util»
«EXTENSION metaabm::tmpl::projections»
«EXTENSION metaabm::ascape::tmpl::namesascape»
«EXTENSION metaabm::ascape::tmpl::inferascape»
«AROUND metaabm::tmpl::Java::Imports FOR SStyle
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Graphics;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.ascape.model.Agent;
import org.ascape.model.CellOccupant;
import org.ascape.model.HostCell;
import org.ascape.util.vis.DrawFeature;
«ENDAROUND»
«AROUND metaabm::tmpl::Java::Imports FOR SAgent
import java.util.List;
import org.ascape.model.Agent;
import org.ascape.model.CellOccupant;
import org.ascape.model.HostCell;
import org.ascape.model.Scape;
import org.ascape.model.event.ScapeEvent;
import org.ascape.model.rule.Rule;
import org.ascape.model.space.CollectionSpace;
import org.ascape.model.space.Coordinate2DDiscrete;
import org.ascape.model.space.Graph;
import org.ascape.model.space.Location;
import org.ascape.util.Conditional;
«ENDAROUND»
«AROUND metaabm::tmpl::Java::ClassFile FOR IID
«IF generate() && SStyle.isInstance(this
«FILE javaFileLoc().replaceFirst(".java", "Graphics.java")-»
«EXPAND metaabm::tmpl::Java::ClassText»
«ENDFILE
«ENDIF»
«ENDAROUND»
«AROUND metaabm::tmpl::Java::ExtendType FOR ASink
«IF function.color()-»Color
«ELSEIF function.shape()-»Shape
«ELSEIF function.id().startsWith("graphic")-»Shape
«ELSEIF function.id() == "randomState"-»«inputs.get(0).value.typeName()»
«ELSE-»«typeName()»«ENDIF
«ENDAROUND»
«AROUND metaabm::tmpl::Java::ClassName FOR IID-»«typeName()»Graphics«ENDAROUND»
«AROUND metaabm::tmpl::Java::ClassInheiritance FOR SStyle extends DrawFeature«ENDAROUND»
«AROUND metaabm::tmpl::Java::Body FOR SStyle
«targetDef.proceed()»
enum Shapes {rectangle, oval, marker};
Shapes shape = Shapes.rectangle;
public void draw(Graphics g, Object object, int width, int height) {
«IF agent.isHost()-»
«agent.typeName()» «rootActivity.id()» = agent.typeName()») object;
«FOREACH ((AGroup) rootActivity).roots AS act»«agent.typeName()» «act.id()» = «rootActivity.id()»;«ENDFOREACH»
«EXPAND metaabm::tmpl::Java::ActionBody
«ELSE
HostCell «rootActivity.id()»Cell = (HostCell) object;
if rootActivity.id()»Cell.getOccupant() instanceof «agent.typeName()») {
«agent.typeName()» «rootActivity.id()» = agent.typeName()») «rootActivity.id()»Cell.getOccupant();
«FOREACH ((AGroup) rootActivity).roots AS act»«agent.typeName()» «act.id()» = «rootActivity.id()»;«ENDFOREACH»
«EXPAND metaabm::tmpl::Java::ActionBody
}
«ENDIF
}
«ENDAROUND»
«AROUND metaabm::tmpl::Java::InnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR AEvaluate
«IF function.id().startsWith("color")-»
«targetDef.proceed()»
g.setForegroundColorid()»);
g.setBackgroundColorid()»);
«ELSEIF function.id() == "shapeOval"
shape = shape.oval;
«ELSEIF function.id() == "shapeRectangle"
shape = shape.rectangle;
«ELSEIF function.id().startsWith("shapeMarker")-»
shape = shape.marker;
«ELSEIF function.id().startsWith("graphicFill")-»
if (shape == Shapes.oval) {
g.fillOval(0, 0, width, height);
} else if (shape == Shapes.marker) {
int d = (int) (width * .25 - 1);
int d2 = (int) (width * .5 - 1);
g.fillOval(d, d, d2, d2);
} else if (shape == Shapes.rectangle) {
g.fillRectangle(0, 0, width, height);
}
«ELSEIF function.id().startsWith("graphicOutline")-»
if (shape == Shapes.oval) {
g.drawOval(0, 0, width, height);
} else if (shape == Shapes.marker) {
int d = (int) (width * .25 - 1);
int d2 = (int) (width * .5 - 1);
g.drawOval(d, d, d2, d2);
} else if (shape == Shapes.rectangle) {
g.drawRectangle(0, 0, width, height);
}
«ELSE
«IF selected == rootSelected || allTargets.typeSelect(ASet).collect(e | e.parameter).size > 0»
«targetDef.proceed()»
«ENDIF
«ENDIF
«ENDAROUND»
«AROUND metaabm::tmpl::Java::FunctionInnerBlock (List[metaabm::act::AAct] path, Boolean inner) FOR ASink
«IF function.id() == "randomUnit"
getRandom().nextDouble()
«ELSEIF function.id() == "randomIs"
getRandom().nextBoolean()
«ELSEIF function.id() == "uniformDistribution"
randomInRangeinputs.expression(path, inner).toString(", ")»);
«ELSEIF function.id() == "timeNow"
«path.last().accessPath(this, innergetScape().getPeriod()
«ELSEIF function.id() == "available"
isAvailable()
«ELSEIF function.id() == "withinBoundaries"
«expressionSink(path, function, inner
«ELSEIF function.id() == "colorRGB"
new Color(Display.getCurrent(), (int) inputs.expression(path, inner).toString(" * 255), (int) (" * 255))
«ELSEIF function.id().startsWith("color")-»
ColorConstantsfunction.id().replaceFirst("color","").toFirstLower()»
«ELSE
«targetDef.proceed()»
«ENDIF
«ENDAROUND»