package org.archstudio.bna.things.utility; import org.archstudio.bna.CoordinateMapperEvent; import org.archstudio.bna.IBNAWorld; import org.archstudio.bna.ICoordinateMapper; import org.archstudio.bna.ICoordinateMapperListener; import org.archstudio.bna.IMutableCoordinateMapper; import org.archstudio.bna.keys.IThingKey; import org.archstudio.bna.keys.ThingKey; import org.eclipse.swt.graphics.Point; import com.google.common.collect.Lists; public class EnvironmentPropertiesThing extends NoThing { public static final IThingKey<Point> NEW_THING_SPOT_KEY = ThingKey.create(Lists.newArrayList("newThingSpot", EnvironmentPropertiesThing.class)); public static final IThingKey<Double> LOCAL_SCALE_KEY = ThingKey.create(Lists.newArrayList("local-scale", EnvironmentPropertiesThing.class)); public static final IThingKey<Point> LOCAL_ORIGIN_KEY = ThingKey.create(Lists.newArrayList("local-origin", EnvironmentPropertiesThing.class)); public static EnvironmentPropertiesThing createIn(IBNAWorld world) { EnvironmentPropertiesThing thing = getIn(world); if (thing == null) { thing = world.getBNAModel().addThing(new EnvironmentPropertiesThing()); } return thing; } public static EnvironmentPropertiesThing getIn(IBNAWorld world) { return (EnvironmentPropertiesThing) world.getBNAModel().getThing(EnvironmentPropertiesThing.class); } protected EnvironmentPropertiesThing() { super(EnvironmentPropertiesThing.class); } @Override protected void initProperties() { super.initProperties(); setNewThingSpot(new Point(0, 0)); } public Point getNewThingSpot() { return get(NEW_THING_SPOT_KEY); } public void setNewThingSpot(Point point) { set(NEW_THING_SPOT_KEY, point); } public void monitorCoordinateMapper(final ICoordinateMapper cm) { if (cm instanceof IMutableCoordinateMapper) { this.restoreCoordinateMapperData((IMutableCoordinateMapper) cm); } cm.addCoordinateMapperListener(new ICoordinateMapperListener() { @Override public void coordinateMappingsChanged(CoordinateMapperEvent evt) { EnvironmentPropertiesThing.this.storeCoordinateMapperData(cm); } }); } public void restoreCoordinateMapperData(IMutableCoordinateMapper cm) { cm.setLocalOrigin(get(LOCAL_ORIGIN_KEY, new Point(0, 0))); cm.setLocalScale(get(LOCAL_SCALE_KEY, 1d)); } public void storeCoordinateMapperData(ICoordinateMapper cm) { set(LOCAL_ORIGIN_KEY, cm.getLocalOrigin()); set(LOCAL_SCALE_KEY, cm.getLocalScale()); } }