1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.scenegraph.g2d.nodes;
\r
14 import java.awt.BasicStroke;
\r
15 import java.awt.Color;
\r
16 import java.awt.Graphics2D;
\r
17 import java.awt.Shape;
\r
18 import java.awt.event.ActionEvent;
\r
19 import java.awt.event.ActionListener;
\r
20 import java.awt.geom.AffineTransform;
\r
21 import java.awt.geom.Line2D;
\r
22 import java.awt.geom.Point2D;
\r
23 import java.awt.geom.Rectangle2D;
\r
25 import org.simantics.scenegraph.g2d.G2DNode;
\r
26 import org.simantics.scenegraph.g2d.events.EventTypes;
\r
27 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseClickEvent;
\r
28 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent;
\r
29 import org.simantics.scenegraph.utils.DummyComponent;
\r
30 import org.simantics.scenegraph.utils.NodeUtil;
\r
32 public class BooleanToggleValueNode extends G2DNode implements ActionListener {
\r
33 private static final long serialVersionUID = 3255791584573492072L;
\r
35 protected static final BasicStroke STROKE = new BasicStroke(1.0f);
\r
36 protected static final Rectangle2D BOUNDS = new Rectangle2D.Double(-10, -10, 20, 20);
\r
38 protected Boolean value = null;
\r
39 protected transient boolean mouseOver = false;
\r
42 public void init() {
\r
44 addEventHandler(this);
\r
48 public void setValue(Boolean value) {
\r
53 public void render(Graphics2D g) {
\r
54 Color borderColor = new Color(160, 10, 10);
\r
55 Color fillColor = new Color(210, 10, 10);
\r
57 if(value != null && value) {
\r
58 borderColor = new Color(10, 160, 10);
\r
59 fillColor = new Color(10, 210, 10);
\r
63 if(mouseOver) borderColor = borderColor.darker();
\r
64 AffineTransform ot = g.getTransform();
\r
66 g.transform(transform);
\r
68 g.setColor(fillColor);
\r
71 g.setStroke(STROKE);
\r
72 g.setColor(in ? borderColor.darker().darker() : borderColor);
\r
73 g.draw(new Line2D.Double(BOUNDS.getMinX(), BOUNDS.getMinY(), BOUNDS.getMinX(), BOUNDS.getMaxY()));
\r
74 g.draw(new Line2D.Double(BOUNDS.getMinX(), BOUNDS.getMinY(), BOUNDS.getMaxX(), BOUNDS.getMinY()));
\r
76 g.setColor(in ? borderColor : borderColor.darker().darker());
\r
77 g.draw(new Line2D.Double(BOUNDS.getMaxX(), BOUNDS.getMinY(), BOUNDS.getMaxX(), BOUNDS.getMaxY()));
\r
78 g.draw(new Line2D.Double(BOUNDS.getMinX(), BOUNDS.getMaxY(), BOUNDS.getMaxX(), BOUNDS.getMaxY()));
\r
84 * Helper method to be used inside MonitorClass
\r
87 public static Shape getOutline() {
\r
92 public Rectangle2D getBoundsInLocal() {
\r
96 protected transient ActionListener actionListener = null;
\r
98 public void setActionListener(ActionListener actionListener) {
\r
99 this.actionListener = actionListener;
\r
104 public void actionPerformed(ActionEvent e) {
\r
105 if(actionListener != null) {
\r
106 actionListener.actionPerformed(e);
\r
111 protected boolean mouseClicked(MouseClickEvent e) {
\r
112 Point2D pt = NodeUtil.worldToLocal(this, e.controlPosition, new Point2D.Double());
\r
113 if (BOUNDS.contains(pt)) {
\r
114 setValue((value == null || value == false) ? true : false); // Toggle value
\r
115 actionPerformed(new ActionEvent(new DummyComponent(), ActionEvent.ACTION_PERFORMED, ""+value));
\r
123 protected boolean mouseMoved(MouseMovedEvent e) {
\r
124 Point2D pt = NodeUtil.worldToLocal(this, e.controlPosition, new Point2D.Double());
\r
125 boolean tmp = mouseOver;
\r
126 mouseOver = BOUNDS.contains(pt);
\r
127 if (tmp != mouseOver)
\r
133 public int getEventMask() {
\r
134 return EventTypes.MouseMovedMask | EventTypes.MouseClickMask;
\r