-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.g2d.elementclass.operationsymbols;\r
-\r
-import java.awt.Color;\r
-import java.awt.geom.AffineTransform;\r
-import java.awt.geom.Rectangle2D;\r
-\r
-import org.simantics.g2d.diagram.handler.Topology.Terminal;\r
-import org.simantics.g2d.element.ElementClass;\r
-import org.simantics.g2d.element.ElementUtils;\r
-import org.simantics.g2d.element.IElement;\r
-import org.simantics.g2d.element.SceneGraphNodeKey;\r
-import org.simantics.g2d.element.handler.AdditionalColor;\r
-import org.simantics.g2d.element.handler.BorderColor;\r
-import org.simantics.g2d.element.handler.Clickable;\r
-import org.simantics.g2d.element.handler.Clickable.PressStatus;\r
-import org.simantics.g2d.element.handler.FillColor;\r
-import org.simantics.g2d.element.handler.SceneGraph;\r
-import org.simantics.g2d.element.handler.impl.AdditionalColorImpl;\r
-import org.simantics.g2d.element.handler.impl.BorderColorImpl;\r
-import org.simantics.g2d.element.handler.impl.DefaultTransform;\r
-import org.simantics.g2d.element.handler.impl.FillColorImpl;\r
-import org.simantics.g2d.element.handler.impl.FixedSize;\r
-import org.simantics.g2d.element.handler.impl.Resizeable;\r
-import org.simantics.g2d.element.handler.impl.StaticTerminals;\r
-import org.simantics.g2d.element.handler.impl.TerminalImpl;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.BoilerSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.BoilerSymbol2;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ChimneySymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.CompressorSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ControlValveSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.GeneratorSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.HeatExchangerSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.NoSpinSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.PumpSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ShutoffValveSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.SwitchSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.Tank2Symbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.TankSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ThreeWayValveSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.TurbineSymbol;\r
-import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.VoltageTransformerSymbol;\r
-import org.simantics.g2d.image.Image;\r
-import org.simantics.g2d.utils.geom.DirectionSet;\r
-import org.simantics.scenegraph.Node;\r
-import org.simantics.scenegraph.g2d.G2DParentNode;\r
-import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
-\r
-/**\r
- * Operation symbol handlers.\r
- * \r
- * @author Toni Kalajainen\r
- */\r
-public class OperationClasses {\r
- \r
- static final FillColor FILL_COLOR_HANDLER = FillColorImpl.handlerOf(Color.WHITE);\r
- static final BorderColor BORDER_COLOR_HANDLER = BorderColorImpl.handlerOf(Color.BLACK);\r
- static final AdditionalColor ADDITIONAL_COLOR_HANDLER = AdditionalColorImpl.handlerOf(Color.GREEN);\r
- \r
- public static final Terminal TERMINAL_IN = new TerminalImpl(); \r
- public static final Terminal TERMINAL_OUT = new TerminalImpl(); \r
- \r
- public static ElementClass BOILER_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- BoilerPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(-10, 0, 20, 125),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, 0.0, -BoilerSymbol.DIM*3, DirectionSet.N,\r
- TERMINAL_OUT, 0.0, BoilerSymbol.DIM*3, DirectionSet.S\r
- )\r
- );\r
- public static ElementClass BOILER_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- BoilerPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(-10, 0, 20, 125),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, 0.0, -BoilerSymbol.DIM*3, DirectionSet.N,\r
- TERMINAL_OUT, 0.0, BoilerSymbol.DIM*3, DirectionSet.S\r
- )\r
- );\r
- public static ElementClass NO_SPIN_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- NoSpinPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(NoSpinSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW\r
- ) \r
- );\r
- public static ElementClass NO_SPIN_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- NoSpinPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(NoSpinSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW\r
- ) \r
- ); \r
- public static ElementClass COMPRESSOR_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- CompressorPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(CompressorSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW\r
- ) \r
- );\r
- public static ElementClass COMPRESSOR_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- CompressorPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(CompressorSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW\r
- ) \r
- ); \r
- public static ElementClass CONTROLVALVE_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- ControlValvePaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(ControlValveSymbol.BOUNDS), \r
- StaticTerminals.compile(\r
- TERMINAL_IN, -ControlValveSymbol.D, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, ControlValveSymbol.D, 0.0, DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass CONTROLVALVE_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- ControlValvePaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(ControlValveSymbol.BOUNDS), \r
- StaticTerminals.compile(\r
- TERMINAL_IN, -ControlValveSymbol.D, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, ControlValveSymbol.D, 0.0, DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass THREEWAYVALVE_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- ThreeWayValvePaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(ControlValveSymbol.BOUNDS), \r
- StaticTerminals.compile(\r
- TERMINAL_IN, -ThreeWayValveSymbol.D, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, ThreeWayValveSymbol.D, 0.0, DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass THREEWAYVALVE_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- ThreeWayValvePaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(ControlValveSymbol.BOUNDS), \r
- StaticTerminals.compile(\r
- TERMINAL_IN, -ThreeWayValveSymbol.D, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, ThreeWayValveSymbol.D, 0.0, DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass HEATEXCHANGER_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- HeatExchangerPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(HeatExchangerSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, HeatExchangerSymbol.BOUNDS.getMinX(), HeatExchangerSymbol.BOUNDS.getMaxY()*0.5, DirectionSet.SW,\r
- TERMINAL_OUT, HeatExchangerSymbol.BOUNDS.getMaxX(), HeatExchangerSymbol.BOUNDS.getMinY()*0.5, DirectionSet.NE\r
- ) \r
- ); \r
- public static ElementClass HEATEXCHANGER_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- HeatExchangerPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(HeatExchangerSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, HeatExchangerSymbol.BOUNDS.getMinX(), HeatExchangerSymbol.BOUNDS.getMaxY(), DirectionSet.SW,\r
- TERMINAL_OUT, HeatExchangerSymbol.BOUNDS.getMaxX(), HeatExchangerSymbol.BOUNDS.getMinY(), DirectionSet.NE \r
- ) \r
- ); \r
- public static ElementClass PUMP_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- PumpPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(PumpSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, -PumpSymbol.D2, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, PumpSymbol.D2, 0.0, DirectionSet.S\r
- ) \r
- );\r
- public static ElementClass PUMP_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- PumpPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(PumpSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, -PumpSymbol.D2, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, PumpSymbol.D2, 0.0, DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass SHUTOFFVALVE_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- ShutoffValvePaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(ShutoffValveSymbol.SHAPE.getBounds()),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, -ShutoffValveSymbol.DIM, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, ShutoffValveSymbol.DIM, 0.0, DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass SHUTOFFVALVE_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- ShutoffValvePaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(ShutoffValveSymbol.SHAPE.getBounds()),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, -ShutoffValveSymbol.DIM, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, ShutoffValveSymbol.DIM, 0.0, DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass SWITCH_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- SwitchPaint.INSTANCE,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(SwitchSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMinY(), DirectionSet.N,\r
- TERMINAL_OUT, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMaxY(), DirectionSet.S \r
- ) \r
- ); \r
- public static ElementClass SWITCH_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- SwitchPaint.INSTANCE,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(SwitchSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMinY(), DirectionSet.N,\r
- TERMINAL_OUT, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMaxY(), DirectionSet.S \r
- ) \r
- ); \r
- public static ElementClass TURBINE_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- TurbinePaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(TurbineSymbol.SHAPE.getBounds()),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, -TurbineSymbol.DIM, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, TurbineSymbol.DIM, 0.0, DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass TURBINE_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- TurbinePaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(TurbineSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, -TurbineSymbol.DIM, 0.0, DirectionSet.N,\r
- TERMINAL_OUT, TurbineSymbol.DIM, 0.0, DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass VOLTAGETRANSFORMER_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- VoltageTransformerPaint.INSTANCE,\r
- ADDITIONAL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(VoltageTransformerSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMinY(), DirectionSet.N,\r
- TERMINAL_OUT, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMaxY(), DirectionSet.S\r
- ) \r
- );\r
- public static ElementClass VOLTAGETRANSFORMER_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- VoltageTransformerPaint.INSTANCE,\r
- ADDITIONAL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(VoltageTransformerSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMinY(), DirectionSet.N,\r
- TERMINAL_OUT, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMaxY(), DirectionSet.S\r
- ) \r
- ); \r
- public static ElementClass CHIMNEY_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- ChimneyPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(ChimneySymbol.BOUNDS)\r
- ); \r
- public static ElementClass CHIMNEY_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- ChimneyPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(ChimneySymbol.BOUNDS)\r
- ); \r
- public static ElementClass GENERATOR_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- GeneratorPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(GeneratorSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, -GeneratorSymbol.DIM, 0.0, DirectionSet.W,\r
- TERMINAL_OUT, GeneratorSymbol.DIM, 0.0, DirectionSet.E\r
- ) \r
- ); \r
- public static ElementClass GENERATOR_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- GeneratorPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- FixedSize.of(GeneratorSymbol.BOUNDS),\r
- StaticTerminals.compile(\r
- TERMINAL_IN, -GeneratorSymbol.DIM, 0.0, DirectionSet.W,\r
- TERMINAL_OUT, GeneratorSymbol.DIM, 0.0, DirectionSet.E\r
- ) \r
- );\r
- public static ElementClass TANK_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- TankPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- Resizeable.initialSize(40, 15)\r
- ); \r
- public static ElementClass TANK_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- TankPaint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- Resizeable.initialSize(40, 15)\r
- ); \r
- public static ElementClass TANK2_CLASS =\r
- ElementClass.compile(\r
- DefaultTransform.INSTANCE,\r
- Tank2Paint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- BORDER_COLOR_HANDLER,\r
- ADDITIONAL_COLOR_HANDLER, \r
- Resizeable.initialSize(40, 15)\r
- ); \r
- public static ElementClass TANK2_BUTTON_CLASS =\r
- ElementClass.compile(\r
- Clickable.INSTANCE,\r
- DefaultTransform.INSTANCE,\r
- Tank2Paint.INSTANCE,\r
- FILL_COLOR_HANDLER,\r
- ADDITIONAL_COLOR_HANDLER, \r
- BORDER_COLOR_HANDLER,\r
- Resizeable.initialSize(40, 15)\r
- ); \r
- \r
- \r
- \r
- public static class BoilerPaint implements SceneGraph { \r
-\r
- private static final long serialVersionUID = -4545277680608759806L;\r
- public static final BoilerPaint INSTANCE = new BoilerPaint();\r
- \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new BoilerSymbol2(fc, bc, OperationSymbols.BOILER_HES);\r
- } else {\r
- ps = OperationSymbols.BOILER_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL) \r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- \r
- ps.init(node);\r
- }\r
- }\r
- \r
- \r
- public static class NoSpinPaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = 801958319361745846L;\r
- public static final NoSpinPaint INSTANCE = new NoSpinPaint();\r
- \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new NoSpinSymbol(fc, bc);\r
- } else {\r
- ps = OperationSymbols.NO_SPIN_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- \r
- ps.init(node);\r
- }\r
- }\r
-\r
- \r
- public static class ControlValvePaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = -8208633777668762027L;\r
- public static final ControlValvePaint INSTANCE = new ControlValvePaint();\r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new ControlValveSymbol(fc, bc);\r
- } else {\r
- ps = OperationSymbols.CONTROLVALVE_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- \r
- ps.init(node);\r
- }\r
- } \r
- \r
- public static class ThreeWayValvePaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = -1848763601182093048L;\r
- public static final ThreeWayValvePaint INSTANCE = new ThreeWayValvePaint();\r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new ThreeWayValveSymbol(fc, bc);\r
- } else {\r
- ps = OperationSymbols.THREEWAYVALVE_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- \r
- ps.init(node);\r
- }\r
- } \r
- \r
- public static class HeatExchangerPaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = -5482316746105556083L;\r
- public static final HeatExchangerPaint INSTANCE = new HeatExchangerPaint(); \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new HeatExchangerSymbol(fc, bc);\r
- } else {\r
- ps = OperationSymbols.HEATEXCHANGER_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- \r
- ps.init(node);\r
- }\r
- } \r
- \r
- \r
- \r
- public static class PumpPaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = 5899800511420262337L;\r
- public static final PumpPaint INSTANCE = new PumpPaint(); \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new PumpSymbol(fc, bc);\r
- } else {\r
- ps = OperationSymbols.PUMP_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- \r
- ps.init(node);\r
- }\r
- } \r
- \r
- \r
- public static class ShutoffValvePaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = 6258753947743405959L;\r
- public static final ShutoffValvePaint INSTANCE = new ShutoffValvePaint(); \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new ShutoffValveSymbol(fc, bc);\r
- } else {\r
- ps = OperationSymbols.SHUTOFFVALVE_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- \r
- ps.init(node);\r
- }\r
- } \r
- \r
- \r
- \r
- public static class SwitchPaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = -171980746141963729L;\r
- public static final SwitchPaint INSTANCE = new SwitchPaint();\r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new SwitchSymbol(bc);\r
- } else {\r
- ps = OperationSymbols.SWITCH_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- ps.init(node);\r
- }\r
- } \r
-\r
- \r
- public static class TurbinePaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = -920598007509848402L;\r
- public static final TurbinePaint INSTANCE = new TurbinePaint(); \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- \r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new TurbineSymbol(bc, fc);\r
- } else {\r
- ps = OperationSymbols.TURBINE_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- ps.init(node);\r
- }\r
- } \r
-\r
- public static class CompressorPaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = 6961201125549409431L;\r
- public static final CompressorPaint INSTANCE = new CompressorPaint(); \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- \r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new CompressorSymbol(bc, fc);\r
- } else {\r
- ps = OperationSymbols.COMPRESSOR_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- ps.init(node);\r
- }\r
- } \r
- \r
- public static class VoltageTransformerPaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = -4935588203299292629L;\r
- public static final VoltageTransformerPaint INSTANCE = new VoltageTransformerPaint(); \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color color1 = ElementUtils.getBorderColor(e);\r
- Color color2 = ElementUtils.getAdditionalColor(e);\r
- if (color1==null || color2==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new VoltageTransformerSymbol(color1, color2);\r
- } else {\r
- ps = OperationSymbols.VOLTAGETRANSFORMER_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- ps.init(node);\r
- }\r
- } \r
- \r
- public static class ChimneyPaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = 1001249555587430505L;\r
- public static final ChimneyPaint INSTANCE = new ChimneyPaint(); \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- if (bc==null) return;\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new ChimneySymbol(fc, bc);\r
- } else {\r
- ps = OperationSymbols.CHIMNEY_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- ps.init(node);\r
- }\r
- } \r
- \r
- public static class GeneratorPaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = -1080419588160841727L;\r
- public static final GeneratorPaint INSTANCE = new GeneratorPaint(); \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new GeneratorSymbol(fc, bc);\r
- } else {\r
- ps = OperationSymbols.GENERATOR_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- ps.init(node);\r
- }\r
- } \r
- \r
- public static class TankPaint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = -461979630655554477L;\r
- public static final TankPaint INSTANCE = new TankPaint(); \r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- Rectangle2D bounds = ElementUtils.getElementBounds(e);\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new TankSymbol(bounds, 5.0, bc, fc);\r
- } else {\r
- ps = OperationSymbols.TANK_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- ps.init(node);\r
- }\r
- }\r
- \r
- public static class Tank2Paint implements SceneGraph {\r
-\r
- private static final long serialVersionUID = 5232349098800595743L;\r
- public static final Tank2Paint INSTANCE = new Tank2Paint();\r
- public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");\r
-\r
- @Override\r
- public void cleanup(IElement e) {\r
- Node node = e.removeHint(SG_NODE);\r
- if (node != null)\r
- node.remove();\r
- }\r
-\r
- @Override\r
- public void init(IElement e, G2DParentNode parent) {\r
- G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);\r
- if (node == null) {\r
- node = parent.addNode(G2DParentNode.class);\r
- e.setHint(SG_NODE, node);\r
- }\r
- AffineTransform at = ElementUtils.getTransform(e);\r
- if(at != null) node.setTransform(at);\r
-\r
- Color fc = ElementUtils.getFillColor(e);\r
- Color bc = ElementUtils.getBorderColor(e);\r
- Color ac = ElementUtils.getAdditionalColor(e);\r
- Rectangle2D bounds = ElementUtils.getElementBounds(e);\r
- PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context\r
- Image ps = null;\r
- \r
- if (press==null) {\r
- ps = new Tank2Symbol(bounds, 5.0, bc, fc, ac);\r
- } else {\r
- ps = OperationSymbols.TANK2_SHADOW;\r
-// ????????? \r
-// if (press==PressStatus.NORMAL)\r
-// gc.getGraphics2D().translate(-2, -3);\r
- }\r
- ps.init(node);\r
- }\r
- } \r
- \r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.g2d.elementclass.operationsymbols;
+
+import java.awt.Color;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+
+import org.simantics.g2d.diagram.handler.Topology.Terminal;
+import org.simantics.g2d.element.ElementClass;
+import org.simantics.g2d.element.ElementUtils;
+import org.simantics.g2d.element.IElement;
+import org.simantics.g2d.element.SceneGraphNodeKey;
+import org.simantics.g2d.element.handler.AdditionalColor;
+import org.simantics.g2d.element.handler.BorderColor;
+import org.simantics.g2d.element.handler.Clickable;
+import org.simantics.g2d.element.handler.Clickable.PressStatus;
+import org.simantics.g2d.element.handler.FillColor;
+import org.simantics.g2d.element.handler.SceneGraph;
+import org.simantics.g2d.element.handler.impl.AdditionalColorImpl;
+import org.simantics.g2d.element.handler.impl.BorderColorImpl;
+import org.simantics.g2d.element.handler.impl.DefaultTransform;
+import org.simantics.g2d.element.handler.impl.FillColorImpl;
+import org.simantics.g2d.element.handler.impl.FixedSize;
+import org.simantics.g2d.element.handler.impl.Resizeable;
+import org.simantics.g2d.element.handler.impl.StaticTerminals;
+import org.simantics.g2d.element.handler.impl.TerminalImpl;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.BoilerSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.BoilerSymbol2;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ChimneySymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.CompressorSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ControlValveSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.GeneratorSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.HeatExchangerSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.NoSpinSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.PumpSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ShutoffValveSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.SwitchSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.Tank2Symbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.TankSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.ThreeWayValveSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.TurbineSymbol;
+import org.simantics.g2d.elementclass.operationsymbols.OperationSymbols.VoltageTransformerSymbol;
+import org.simantics.g2d.image.Image;
+import org.simantics.g2d.utils.geom.DirectionSet;
+import org.simantics.scenegraph.Node;
+import org.simantics.scenegraph.g2d.G2DParentNode;
+import org.simantics.utils.datastructures.hints.IHintContext.Key;
+
+/**
+ * Operation symbol handlers.
+ *
+ * @author Toni Kalajainen
+ */
+public class OperationClasses {
+
+ static final FillColor FILL_COLOR_HANDLER = FillColorImpl.handlerOf(Color.WHITE);
+ static final BorderColor BORDER_COLOR_HANDLER = BorderColorImpl.handlerOf(Color.BLACK);
+ static final AdditionalColor ADDITIONAL_COLOR_HANDLER = AdditionalColorImpl.handlerOf(Color.GREEN);
+
+ public static final Terminal TERMINAL_IN = new TerminalImpl();
+ public static final Terminal TERMINAL_OUT = new TerminalImpl();
+
+ public static ElementClass BOILER_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ BoilerPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(-10, 0, 20, 125),
+ StaticTerminals.compile(
+ TERMINAL_IN, 0.0, -BoilerSymbol.DIM*3, DirectionSet.N,
+ TERMINAL_OUT, 0.0, BoilerSymbol.DIM*3, DirectionSet.S
+ )
+ );
+ public static ElementClass BOILER_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ BoilerPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(-10, 0, 20, 125),
+ StaticTerminals.compile(
+ TERMINAL_IN, 0.0, -BoilerSymbol.DIM*3, DirectionSet.N,
+ TERMINAL_OUT, 0.0, BoilerSymbol.DIM*3, DirectionSet.S
+ )
+ );
+ public static ElementClass NO_SPIN_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ NoSpinPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(NoSpinSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW
+ )
+ );
+ public static ElementClass NO_SPIN_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ NoSpinPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(NoSpinSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW
+ )
+ );
+ public static ElementClass COMPRESSOR_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ CompressorPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(CompressorSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW
+ )
+ );
+ public static ElementClass COMPRESSOR_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ CompressorPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(CompressorSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, 0.0, 0.0, DirectionSet.NESW
+ )
+ );
+ public static ElementClass CONTROLVALVE_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ ControlValvePaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(ControlValveSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, -ControlValveSymbol.D, 0.0, DirectionSet.N,
+ TERMINAL_OUT, ControlValveSymbol.D, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass CONTROLVALVE_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ ControlValvePaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(ControlValveSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, -ControlValveSymbol.D, 0.0, DirectionSet.N,
+ TERMINAL_OUT, ControlValveSymbol.D, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass THREEWAYVALVE_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ ThreeWayValvePaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(ControlValveSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, -ThreeWayValveSymbol.D, 0.0, DirectionSet.N,
+ TERMINAL_OUT, ThreeWayValveSymbol.D, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass THREEWAYVALVE_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ ThreeWayValvePaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(ControlValveSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, -ThreeWayValveSymbol.D, 0.0, DirectionSet.N,
+ TERMINAL_OUT, ThreeWayValveSymbol.D, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass HEATEXCHANGER_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ HeatExchangerPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(HeatExchangerSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, HeatExchangerSymbol.BOUNDS.getMinX(), HeatExchangerSymbol.BOUNDS.getMaxY()*0.5, DirectionSet.SW,
+ TERMINAL_OUT, HeatExchangerSymbol.BOUNDS.getMaxX(), HeatExchangerSymbol.BOUNDS.getMinY()*0.5, DirectionSet.NE
+ )
+ );
+ public static ElementClass HEATEXCHANGER_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ HeatExchangerPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(HeatExchangerSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, HeatExchangerSymbol.BOUNDS.getMinX(), HeatExchangerSymbol.BOUNDS.getMaxY(), DirectionSet.SW,
+ TERMINAL_OUT, HeatExchangerSymbol.BOUNDS.getMaxX(), HeatExchangerSymbol.BOUNDS.getMinY(), DirectionSet.NE
+ )
+ );
+ public static ElementClass PUMP_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ PumpPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(PumpSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, -PumpSymbol.D2, 0.0, DirectionSet.N,
+ TERMINAL_OUT, PumpSymbol.D2, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass PUMP_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ PumpPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(PumpSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, -PumpSymbol.D2, 0.0, DirectionSet.N,
+ TERMINAL_OUT, PumpSymbol.D2, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass SHUTOFFVALVE_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ ShutoffValvePaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(ShutoffValveSymbol.SHAPE.getBounds()),
+ StaticTerminals.compile(
+ TERMINAL_IN, -ShutoffValveSymbol.DIM, 0.0, DirectionSet.N,
+ TERMINAL_OUT, ShutoffValveSymbol.DIM, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass SHUTOFFVALVE_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ ShutoffValvePaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(ShutoffValveSymbol.SHAPE.getBounds()),
+ StaticTerminals.compile(
+ TERMINAL_IN, -ShutoffValveSymbol.DIM, 0.0, DirectionSet.N,
+ TERMINAL_OUT, ShutoffValveSymbol.DIM, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass SWITCH_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ SwitchPaint.INSTANCE,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(SwitchSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMinY(), DirectionSet.N,
+ TERMINAL_OUT, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMaxY(), DirectionSet.S
+ )
+ );
+ public static ElementClass SWITCH_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ SwitchPaint.INSTANCE,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(SwitchSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMinY(), DirectionSet.N,
+ TERMINAL_OUT, SwitchSymbol.BOUNDS.getCenterX(), SwitchSymbol.BOUNDS.getMaxY(), DirectionSet.S
+ )
+ );
+ public static ElementClass TURBINE_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ TurbinePaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(TurbineSymbol.SHAPE.getBounds()),
+ StaticTerminals.compile(
+ TERMINAL_IN, -TurbineSymbol.DIM, 0.0, DirectionSet.N,
+ TERMINAL_OUT, TurbineSymbol.DIM, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass TURBINE_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ TurbinePaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(TurbineSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, -TurbineSymbol.DIM, 0.0, DirectionSet.N,
+ TERMINAL_OUT, TurbineSymbol.DIM, 0.0, DirectionSet.S
+ )
+ );
+ public static ElementClass VOLTAGETRANSFORMER_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ VoltageTransformerPaint.INSTANCE,
+ ADDITIONAL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(VoltageTransformerSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMinY(), DirectionSet.N,
+ TERMINAL_OUT, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMaxY(), DirectionSet.S
+ )
+ );
+ public static ElementClass VOLTAGETRANSFORMER_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ VoltageTransformerPaint.INSTANCE,
+ ADDITIONAL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(VoltageTransformerSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMinY(), DirectionSet.N,
+ TERMINAL_OUT, VoltageTransformerSymbol.BOUNDS.getCenterX(), VoltageTransformerSymbol.BOUNDS.getMaxY(), DirectionSet.S
+ )
+ );
+ public static ElementClass CHIMNEY_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ ChimneyPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(ChimneySymbol.BOUNDS)
+ );
+ public static ElementClass CHIMNEY_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ ChimneyPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(ChimneySymbol.BOUNDS)
+ );
+ public static ElementClass GENERATOR_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ GeneratorPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(GeneratorSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, -GeneratorSymbol.DIM, 0.0, DirectionSet.W,
+ TERMINAL_OUT, GeneratorSymbol.DIM, 0.0, DirectionSet.E
+ )
+ );
+ public static ElementClass GENERATOR_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ GeneratorPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ FixedSize.of(GeneratorSymbol.BOUNDS),
+ StaticTerminals.compile(
+ TERMINAL_IN, -GeneratorSymbol.DIM, 0.0, DirectionSet.W,
+ TERMINAL_OUT, GeneratorSymbol.DIM, 0.0, DirectionSet.E
+ )
+ );
+ public static ElementClass TANK_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ TankPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ Resizeable.initialSize(40, 15)
+ );
+ public static ElementClass TANK_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ TankPaint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ Resizeable.initialSize(40, 15)
+ );
+ public static ElementClass TANK2_CLASS =
+ ElementClass.compile(
+ DefaultTransform.INSTANCE,
+ Tank2Paint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ ADDITIONAL_COLOR_HANDLER,
+ Resizeable.initialSize(40, 15)
+ );
+ public static ElementClass TANK2_BUTTON_CLASS =
+ ElementClass.compile(
+ Clickable.INSTANCE,
+ DefaultTransform.INSTANCE,
+ Tank2Paint.INSTANCE,
+ FILL_COLOR_HANDLER,
+ ADDITIONAL_COLOR_HANDLER,
+ BORDER_COLOR_HANDLER,
+ Resizeable.initialSize(40, 15)
+ );
+
+
+
+ public static class BoilerPaint implements SceneGraph {
+
+ private static final long serialVersionUID = -4545277680608759806L;
+ public static final BoilerPaint INSTANCE = new BoilerPaint();
+
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new BoilerSymbol2(fc, bc, OperationSymbols.BOILER_HES);
+ } else {
+ ps = OperationSymbols.BOILER_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+
+ ps.init(node);
+ }
+ }
+
+
+ public static class NoSpinPaint implements SceneGraph {
+
+ private static final long serialVersionUID = 801958319361745846L;
+ public static final NoSpinPaint INSTANCE = new NoSpinPaint();
+
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new NoSpinSymbol(fc, bc);
+ } else {
+ ps = OperationSymbols.NO_SPIN_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+
+ ps.init(node);
+ }
+ }
+
+
+ public static class ControlValvePaint implements SceneGraph {
+
+ private static final long serialVersionUID = -8208633777668762027L;
+ public static final ControlValvePaint INSTANCE = new ControlValvePaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new ControlValveSymbol(fc, bc);
+ } else {
+ ps = OperationSymbols.CONTROLVALVE_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+
+ ps.init(node);
+ }
+ }
+
+ public static class ThreeWayValvePaint implements SceneGraph {
+
+ private static final long serialVersionUID = -1848763601182093048L;
+ public static final ThreeWayValvePaint INSTANCE = new ThreeWayValvePaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new ThreeWayValveSymbol(fc, bc);
+ } else {
+ ps = OperationSymbols.THREEWAYVALVE_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+
+ ps.init(node);
+ }
+ }
+
+ public static class HeatExchangerPaint implements SceneGraph {
+
+ private static final long serialVersionUID = -5482316746105556083L;
+ public static final HeatExchangerPaint INSTANCE = new HeatExchangerPaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new HeatExchangerSymbol(fc, bc);
+ } else {
+ ps = OperationSymbols.HEATEXCHANGER_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+
+ ps.init(node);
+ }
+ }
+
+
+
+ public static class PumpPaint implements SceneGraph {
+
+ private static final long serialVersionUID = 5899800511420262337L;
+ public static final PumpPaint INSTANCE = new PumpPaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new PumpSymbol(fc, bc);
+ } else {
+ ps = OperationSymbols.PUMP_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+
+ ps.init(node);
+ }
+ }
+
+
+ public static class ShutoffValvePaint implements SceneGraph {
+
+ private static final long serialVersionUID = 6258753947743405959L;
+ public static final ShutoffValvePaint INSTANCE = new ShutoffValvePaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new ShutoffValveSymbol(fc, bc);
+ } else {
+ ps = OperationSymbols.SHUTOFFVALVE_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+
+ ps.init(node);
+ }
+ }
+
+
+
+ public static class SwitchPaint implements SceneGraph {
+
+ private static final long serialVersionUID = -171980746141963729L;
+ public static final SwitchPaint INSTANCE = new SwitchPaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new SwitchSymbol(bc);
+ } else {
+ ps = OperationSymbols.SWITCH_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+ ps.init(node);
+ }
+ }
+
+
+ public static class TurbinePaint implements SceneGraph {
+
+ private static final long serialVersionUID = -920598007509848402L;
+ public static final TurbinePaint INSTANCE = new TurbinePaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new TurbineSymbol(bc, fc);
+ } else {
+ ps = OperationSymbols.TURBINE_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+ ps.init(node);
+ }
+ }
+
+ public static class CompressorPaint implements SceneGraph {
+
+ private static final long serialVersionUID = 6961201125549409431L;
+ public static final CompressorPaint INSTANCE = new CompressorPaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new CompressorSymbol(bc, fc);
+ } else {
+ ps = OperationSymbols.COMPRESSOR_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+ ps.init(node);
+ }
+ }
+
+ public static class VoltageTransformerPaint implements SceneGraph {
+
+ private static final long serialVersionUID = -4935588203299292629L;
+ public static final VoltageTransformerPaint INSTANCE = new VoltageTransformerPaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color color1 = ElementUtils.getBorderColor(e);
+ Color color2 = ElementUtils.getAdditionalColor(e);
+ if (color1==null || color2==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new VoltageTransformerSymbol(color1, color2);
+ } else {
+ ps = OperationSymbols.VOLTAGETRANSFORMER_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+ ps.init(node);
+ }
+ }
+
+ public static class ChimneyPaint implements SceneGraph {
+
+ private static final long serialVersionUID = 1001249555587430505L;
+ public static final ChimneyPaint INSTANCE = new ChimneyPaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ if (bc==null) return;
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new ChimneySymbol(fc, bc);
+ } else {
+ ps = OperationSymbols.CHIMNEY_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+ ps.init(node);
+ }
+ }
+
+ public static class GeneratorPaint implements SceneGraph {
+
+ private static final long serialVersionUID = -1080419588160841727L;
+ public static final GeneratorPaint INSTANCE = new GeneratorPaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new GeneratorSymbol(fc, bc);
+ } else {
+ ps = OperationSymbols.GENERATOR_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+ ps.init(node);
+ }
+ }
+
+ public static class TankPaint implements SceneGraph {
+
+ private static final long serialVersionUID = -461979630655554477L;
+ public static final TankPaint INSTANCE = new TankPaint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ Rectangle2D bounds = ElementUtils.getElementBounds(e);
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new TankSymbol(bounds, 5.0, bc, fc);
+ } else {
+ ps = OperationSymbols.TANK_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+ ps.init(node);
+ }
+ }
+
+ public static class Tank2Paint implements SceneGraph {
+
+ private static final long serialVersionUID = 5232349098800595743L;
+ public static final Tank2Paint INSTANCE = new Tank2Paint();
+ public static final Key SG_NODE = new SceneGraphNodeKey(Node.class, "SUB_SG_NODE");
+
+ @Override
+ public void cleanup(IElement e) {
+ Node node = e.removeHint(SG_NODE);
+ if (node != null)
+ node.remove();
+ }
+
+ @Override
+ public void init(IElement e, G2DParentNode parent) {
+ G2DParentNode node = (G2DParentNode) e.getHint(SG_NODE);
+ if (node == null) {
+ node = parent.addNode(G2DParentNode.class);
+ e.setHint(SG_NODE, node);
+ }
+ AffineTransform at = ElementUtils.getTransform(e);
+ if(at != null) node.setTransform(at);
+
+ Color fc = ElementUtils.getFillColor(e);
+ Color bc = ElementUtils.getBorderColor(e);
+ Color ac = ElementUtils.getAdditionalColor(e);
+ Rectangle2D bounds = ElementUtils.getElementBounds(e);
+ PressStatus press = null;//ElementUtils.getPressStatus(e, ctx); // FIXME: scenegraph does not support context
+ Image ps = null;
+
+ if (press==null) {
+ ps = new Tank2Symbol(bounds, 5.0, bc, fc, ac);
+ } else {
+ ps = OperationSymbols.TANK2_SHADOW;
+// ?????????
+// if (press==PressStatus.NORMAL)
+// gc.getGraphics2D().translate(-2, -3);
+ }
+ ps.init(node);
+ }
+ }
+