--- /dev/null
+/*\r
+ * Copyright (c) 2006 Stanford University.\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * - Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ * - Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the\r
+ * distribution.\r
+ * - Neither the name of the Stanford University nor the names of\r
+ * its contributors may be used to endorse or promote products derived\r
+ * from this software without specific prior written permission.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD\r
+ * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\r
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r
+ * OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+package net.tinyos.mviz;\r
+\r
+\r
+// DShape.java\r
+import java.awt.*;\r
+import java.util.*;\r
+import javax.swing.*;\r
+import java.awt.event.*;\r
+\r
+abstract class DShape \r
+extends JComponent \r
+implements DMoteModelListener\r
+{\r
+ \r
+ protected DMoteModel model;\r
+ protected DDocument document;\r
+ public Image img;\r
+ \r
+\r
+ \r
+ // remember the last point for mouse tracking\r
+ private int lastX, lastY;\r
+ protected DLayer layer;\r
+ \r
+ // Move or Resize ?\r
+ private int action;\r
+ private static final int MOVE = 0;\r
+ //=========================================================================//\r
+ public DShape(DMoteModel model, DDocument document, DLayer layer) {\r
+ super();\r
+ this.model = model;\r
+ this.img = document.image;\r
+ this.document = document;\r
+ this.layer = layer;\r
+ model.addListener(this);\r
+\r
+ addMouseMotionListener( \r
+ new MouseMotionAdapter() \r
+ {\r
+ public void mouseDragged(MouseEvent e) {\r
+ \r
+ int x = e.getX()+getX();\r
+ int y = e.getY()+getY();\r
+ // compute delta from last point\r
+ int dx = x-lastX;\r
+ int dy = y-lastY;\r
+ lastX = x;\r
+ lastY = y;\r
+ \r
+ switch(action){\r
+ case MOVE: DoAction(dx, dy); break;\r
+ }\r
+ }\r
+ }\r
+ );\r
+ \r
+ synchToModel(); \r
+ }\r
+ \r
+ //=========================================================================//\r
+ public DMoteModel getModel() {\r
+ return(model);\r
+ }\r
+ \r
+ //=========================================================================//\r
+ public void shapeChanged(DMoteModel changed, int type) {\r
+ synchToModel();\r
+ repaint();\r
+ }\r
+ //=========================================================================//\r
+ public abstract void paintShape(Graphics g);\r
+ //=========================================================================//\r
+ public void paintComponent(Graphics g) {\r
+ }\r
+ //=========================================================================//\r
+ private void DetermineAction(int x, int y){\r
+ action = MOVE; \r
+ }\r
+ //=========================================================================//\r
+ private void DoAction(int dx, int dy){\r
+ model.applyDeltas(dx, dy);\r
+ }\r
+ //=========================================================================//\r
+ private void synchToModel(){\r
+ int x=0, y=0, w=0, h=0;\r
+ switch(layer.paintMode){\r
+ case DLayer.IMG:\r
+ x = model.getLocX();\r
+ y = model.getLocY();\r
+ //w = model.getWidth(layer.index);\r
+ //h = model.getHeight(layer.index);\r
+ w = 250;\r
+ h = 250;\r
+ break;\r
+ case DLayer.OVAL:\r
+ x = model.getLocX();\r
+ y= model.getLocY();\r
+ w = 10;\r
+ h = 10;\r
+ break;\r
+ case DLayer.TXT_MOTE:\r
+ x = model.getLocX();\r
+ y= model.getLocY();\r
+ w = 250;\r
+ h = 250;\r
+ break;\r
+ }\r
+ //setLocation(x, y);\r
+ setBounds(0, 0, 0, 0);\r
+ }\r
+ //=========================================================================//\r
+ private void selected(){\r
+ document.setSelected(this); \r
+ }\r
+\r
+}\r
+\r
+\r
+\r