0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
1 /*
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
2 * To change this template, choose Tools | Templates
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
3 * and open the template in the editor.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
4 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
5 package mpipeline;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
6
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
7 import java.awt.Color;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
8 import java.awt.Graphics;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
9 import java.awt.Point;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
10 import java.awt.event.MouseEvent;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
11 import java.awt.event.MouseListener;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
12 import java.awt.event.MouseMotionListener;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
13 import java.io.ByteArrayInputStream;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
14 import java.io.ByteArrayOutputStream;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
15 import java.io.IOException;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
16 import java.io.ObjectInputStream;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
17 import java.io.ObjectOutputStream;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
18 import java.io.Serializable;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
19 import java.util.ArrayList;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
20 import java.util.Iterator;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
21 import org.w3c.dom.Document;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
22 import org.w3c.dom.Element;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
23
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
24 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
25 * Create a Node as an extension of an MElement.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
26 *
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
27 * Nodes can have multiple pipes associated with them, but a
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
28 * node can only be associated with a single port. If the port
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
29 * is an input port, then the node should only be associated with
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
30 * one pipe.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
31 *
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
32 * @author hewitson
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
33 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
34 public class MNode extends MElement {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
35
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
36 private ArrayList<MPipe> pipes = new ArrayList<MPipe>();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
37 private Point center = new Point();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
38 private int defaultRadius = 4;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
39 private int radius = defaultRadius;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
40 private Color color = Color.darkGray;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
41 private MPort myport = null;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
42
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
43 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
44 * Get the center coordinates of this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
45 * @return
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
46 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
47 public Point getCenter() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
48 return center;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
49 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
50
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
51 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
52 * Set the center of the node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
53 * @param center
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
54 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
55 public void setCenter(Point center) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
56 this.center = center;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
57 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
58
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
59 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
60 * Get the node color.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
61 * @return
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
62 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
63 public Color getColor() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
64 return color;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
65 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
66
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
67 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
68 * Set the node color
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
69 * @param color
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
70 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
71 public void setColor(Color color) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
72 this.color = color;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
73 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
74
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
75 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
76 * Get the port associated with this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
77 * @return
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
78 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
79 public MPort getMyport() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
80 return myport;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
81 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
82
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
83 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
84 * Set the port associated with this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
85 * @param myport
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
86 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
87 public void setMyport(MPort myport) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
88 this.myport = myport;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
89 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
90
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
91 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
92 * Create a copy of the node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
93 * @param b
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
94 * @return
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
95 * @throws java.io.IOException
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
96 * @throws java.lang.ClassNotFoundException
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
97 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
98 public static MNode copy(MNode b) throws IOException, ClassNotFoundException {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
99 // Write the object out to a byte array
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
100 ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
101 ObjectOutputStream out = new ObjectOutputStream(bos);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
102 out.writeObject(b);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
103 out.flush();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
104 out.close();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
105
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
106 // Make an input stream from the byte array and read
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
107 // a copy of the object back in.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
108 ObjectInputStream in = new ObjectInputStream(
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
109 new ByteArrayInputStream(bos.toByteArray()));
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
110 MNode obj = (MNode) in.readObject();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
111 return obj;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
112 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
113
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
114 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
115 * Create a node associated with the given port.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
116 * @param p
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
117 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
118 public MNode(MPort p) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
119 myport = p;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
120 center.x = p.getParent().getX() + p.getX() + p.getWidth() / 2;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
121 center.y = p.getParent().getY() + p.getY() + p.getHeight() / 2;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
122 setupNode();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
123 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
124
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
125 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
126 * Create a node at the given point.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
127 * @param p
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
128 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
129 public MNode(Point p) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
130 center = p;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
131 setupNode();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
132 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
133
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
134 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
135 * Create a node at the given x,y coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
136 * @param x
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
137 * @param y
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
138 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
139 public MNode(int x, int y) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
140 center.x = x;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
141 center.y = y;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
142 setupNode();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
143 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
144
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
145 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
146 * Empty constructor.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
147 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
148 public MNode() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
149 center.x = 0;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
150 center.y = 0;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
151 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
152
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
153 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
154 * Return the list of pipes associated with this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
155 * @return
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
156 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
157 public ArrayList<MPipe> getPipes() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
158 return pipes;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
159 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
160
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
161 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
162 * Clear the port of this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
163 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
164 public void clearPort() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
165 myport = null;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
166 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
167
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
168 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
169 * Get the port associated with this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
170 * @return
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
171 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
172 public MPort getPort() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
173 return myport;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
174 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
175
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
176 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
177 * Get the radius of this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
178 * @return
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
179 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
180 public int getRadius() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
181 return radius;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
182 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
183
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
184 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
185 * Move this node by dx,dy.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
186 * @param dx
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
187 * @param dy
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
188 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
189 @Override
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
190 public void translate(int dx, int dy) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
191 center.x += dx;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
192 center.y += dy;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
193 setupBounds();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
194 // move my pipe
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
195 Iterator it = pipes.iterator();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
196 while (it.hasNext()) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
197 MPipe p = (MPipe) it.next();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
198 p.updatePipe();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
199 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
200 repaint();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
201 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
202
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
203 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
204 * Move this node to x,y.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
205 * @param x
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
206 * @param y
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
207 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
208 @Override
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
209 public void moveTo(int x, int y) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
210 center.x = x+radius;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
211 center.y = y+radius;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
212 setupBounds();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
213 // move my pipe
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
214 Iterator it = pipes.iterator();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
215 while (it.hasNext()) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
216 MPipe p = (MPipe) it.next();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
217 p.updatePipe();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
218 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
219 repaint();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
220 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
221
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
222
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
223
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
224 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
225 * Add a pipe to this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
226 *
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
227 * @param aThis
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
228 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
229 public void addPipe(MPipe aThis) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
230 pipes.add(aThis);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
231 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
232
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
233 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
234 * Delete this node and any connected pipe
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
235 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
236 public void delete() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
237 MCanvas c = (MCanvas) getParent();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
238 c.deletePipes(pipes);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
239 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
240
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
241 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
242 * Attach this node to the XML DOM.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
243 * @param doc
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
244 * @param node
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
245 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
246 public void attachToDom(Document doc, Element node) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
247
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
248 // start new connection for each pipe going from this node
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
249 Element nodenode = doc.createElement("node");
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
250
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
251 // add each pipe
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
252 Iterator pit = pipes.iterator();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
253 while (pit.hasNext()) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
254 MPipe mp = (MPipe) pit.next();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
255 mp.attachToDom(doc, nodenode);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
256 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
257
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
258 // attach to the DOM
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
259 node.appendChild(nodenode);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
260 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
261
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
262 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
263 * Return the requested pipe.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
264 * @param i
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
265 * @return
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
266 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
267 public MPipe getPipes(int i) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
268 return pipes.get(i);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
269 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
270
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
271 void zoomIn(float zoomStep) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
272 radius = (int)Math.ceil(radius*zoomStep);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
273 setupBounds();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
274 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
275
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
276 void zoomOut(float zoomStep) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
277 radius = (int)Math.floor(radius/zoomStep);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
278 setupBounds();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
279 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
280
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
281 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
282 * Set up this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
283 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
284 private void setupNode() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
285 setupBounds();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
286 this.setOpaque(false);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
287 this.setVisible(true);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
288 // this.addMouseMotionListener(new NodeMouseEvents());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
289 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
290
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
291 @Override
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
292 public void scaleElement(){
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
293 radius = Math.round(scaleFactor*defaultRadius);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
294 setupBounds();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
295 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
296
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
297 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
298 * Set the bounds of this node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
299 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
300 private void setupBounds() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
301 this.setBounds(center.x - radius, center.y - radius, 2 * radius, 2 * radius);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
302 // System.out.println("Setting node bounds to " + getBounds().toString());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
303 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
304
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
305 @Override
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
306 public void paintComponent(Graphics g) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
307 super.paintComponent(g);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
308 g.setColor(color);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
309 g.fillOval(0, 0, 2 * radius, 2 * radius);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
310 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
311
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
312
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
313 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
314 *
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
315 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
316 public void display(){
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
317 // dump some info
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
318 String header = "------- NODE --------";
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
319 String footer = "-";
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
320 while (footer.length() < header.length()) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
321 footer += "-";
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
322 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
323
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
324 System.out.println(header);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
325 System.out.println(" parent block: " + getPort().getParent().toString());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
326 System.out.println(" num pipes: " + pipes.size());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
327 System.out.println(footer);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
328 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
329
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
330 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
331 * Handle mouse events on the node.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
332 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
333 public class NodeMouseEvents implements Serializable, MouseListener, MouseMotionListener {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
334
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
335 /**
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
336 * Create a new MBlockCoreMouseEvents listener.
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
337 */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
338 public NodeMouseEvents() {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
339 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
340
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
341 public void mouseClicked(MouseEvent me) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
342
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
343 System.out.println("Click on node: " + toString());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
344
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
345 /* Pass to canvas */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
346 Point pt = me.getPoint(); // the point that was clicked
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
347 MPipe mp = (MPipe) getParent(); // get canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
348 MCanvas c = (MCanvas) mp.getParent();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
349 int newX = getX() + pt.x; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
350 int newY = getY() + pt.y; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
351 // create a new mouse event...
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
352 MouseEvent transformed = new MouseEvent(c,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
353 MouseEvent.MOUSE_CLICKED, me.getWhen(),
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
354 0, newX, newY, me.getClickCount(), false,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
355 me.getButton());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
356 // ... and pass it to the canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
357 c.dispatchEvent(transformed);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
358 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
359
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
360 public void mouseEntered(MouseEvent me) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
361 color = Color.GRAY;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
362 repaint();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
363 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
364
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
365 public void mouseExited(MouseEvent me) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
366 color = Color.red;
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
367 repaint();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
368 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
369
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
370 public void mousePressed(MouseEvent me) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
371 /* Pass to canvas */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
372 Point pt = me.getPoint(); // the point that was clicked
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
373 MPipe mp = (MPipe) getParent(); // get canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
374 MCanvas c = (MCanvas) mp.getParent();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
375 int newX = getX() + pt.x; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
376 int newY = getY() + pt.y; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
377 // create a new mouse event...
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
378 MouseEvent transformed = new MouseEvent(c,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
379 MouseEvent.MOUSE_PRESSED, me.getWhen(),
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
380 0, newX, newY, me.getClickCount(), false,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
381 me.getButton());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
382 // ... and pass it to the canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
383 c.dispatchEvent(transformed);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
384 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
385
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
386 public void mouseReleased(MouseEvent me) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
387 /* Pass to canvas */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
388 Point pt = me.getPoint(); // the point that was clicked
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
389 MPipe mp = (MPipe) getParent(); // get canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
390 MCanvas c = (MCanvas) mp.getParent();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
391 int newX = getX() + pt.x; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
392 int newY = getY() + pt.y; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
393 // create a new mouse event...
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
394 MouseEvent transformed = new MouseEvent(c,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
395 MouseEvent.MOUSE_RELEASED, me.getWhen(),
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
396 0, newX, newY, me.getClickCount(), false,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
397 me.getButton());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
398 // ... and pass it to the canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
399 c.dispatchEvent(transformed);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
400 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
401
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
402 public void mouseDragged(MouseEvent me) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
403 // pass this through to canvas underneath
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
404 Point pt = me.getPoint();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
405 MPipe mp = (MPipe) getParent(); // get canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
406 MCanvas c = (MCanvas) mp.getParent();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
407 int newX = getX() + pt.x; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
408 int newY = getY() + pt.y; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
409 // create a new mouse event...
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
410 MouseEvent transformed = new MouseEvent(c,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
411 MouseEvent.MOUSE_DRAGGED, me.getWhen(),
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
412 0, newX, newY, me.getClickCount(), false,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
413 me.getButton());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
414 // ... and pass it to the canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
415 c.dispatchEvent(transformed);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
416 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
417
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
418 public void mouseMoved(MouseEvent me) {
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
419 /* Pass to canvas */
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
420 Point pt = me.getPoint(); // the point that was clicked
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
421 MPipe mp = (MPipe) getParent(); // get canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
422 MCanvas c = (MCanvas) mp.getParent();
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
423 int newX = getX() + pt.x; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
424 int newY = getY() + pt.y; // transform to canvas coords
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
425 // create a new mouse event...
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
426 MouseEvent transformed = new MouseEvent(c,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
427 MouseEvent.MOUSE_MOVED, me.getWhen(),
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
428 0, newX, newY, me.getClickCount(), false,
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
429 me.getButton());
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
430 // ... and pass it to the canvas
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
431 c.dispatchEvent(transformed);
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
432 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
433 }
|
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
|
434 }
|