]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.g2d/src/org/simantics/g2d/elementclass/operationsymbols/OperationClasses.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / elementclass / operationsymbols / OperationClasses.java
index baab7cc5b4c94a6b3c5e4bb620c330dd851b2616..63410510d3b2cfa92eca17937b2eb974fae2c1d4 100644 (file)
-/*******************************************************************************\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);
+               }
+       }       
+       
 }
\ No newline at end of file