vis2d implements mote highlight functionality

This commit is contained in:
fros4943 2007-05-30 10:54:22 +00:00
parent 209a35bf53
commit 508fe3709d

View file

@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $Id: Visualizer2D.java,v 1.9 2007/04/02 14:14:26 fros4943 Exp $ * $Id: Visualizer2D.java,v 1.10 2007/05/30 10:54:22 fros4943 Exp $
*/ */
package se.sics.cooja.plugins; package se.sics.cooja.plugins;
@ -35,6 +35,8 @@ import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import java.util.*; import java.util.*;
import javax.swing.*; import javax.swing.*;
import javax.swing.Timer;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import se.sics.cooja.*; import se.sics.cooja.*;
@ -67,6 +69,7 @@ public abstract class Visualizer2D extends VisPlugin {
private double smallestXCoord; private double smallestXCoord;
private double smallestYCoord; private double smallestYCoord;
private GUI myGUI = null;
private Simulation simulation = null; private Simulation simulation = null;
private final JPanel canvas; private final JPanel canvas;
private Visualizer2D myPlugin; private Visualizer2D myPlugin;
@ -82,6 +85,10 @@ public abstract class Visualizer2D extends VisPlugin {
private Observer simObserver = null; // Watches simulation changes private Observer simObserver = null; // Watches simulation changes
private Observer posObserver = null; // Watches position changes private Observer posObserver = null; // Watches position changes
private Observer moteHighligtObserver = null;
private Mote highlightedMote = null;
private Color highlightColor = Color.GRAY;
public interface MoteMenuAction { public interface MoteMenuAction {
public boolean isEnabled(Mote mote); public boolean isEnabled(Mote mote);
public String getDescription(Mote mote); public String getDescription(Mote mote);
@ -125,6 +132,7 @@ public abstract class Visualizer2D extends VisPlugin {
public Visualizer2D(Simulation simulationToVisualize, GUI gui) { public Visualizer2D(Simulation simulationToVisualize, GUI gui) {
super("Visualizer2D", gui); super("Visualizer2D", gui);
myGUI = gui;
myPlugin = this; myPlugin = this;
// Set initial bounds of frame // Set initial bounds of frame
@ -176,6 +184,37 @@ public abstract class Visualizer2D extends VisPlugin {
}); });
simObserver.update(null, null); simObserver.update(null, null);
// Detect mote highligts
myGUI.addMoteHighligtObserver(moteHighligtObserver = new Observer() {
public void update(Observable obs, Object obj) {
if (!(obj instanceof Mote))
return;
highlightedMote = (Mote) obj;
final Timer timer = new Timer(100, null);
timer.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Decrease delay
if (timer.getDelay() < 90) {
timer.stop();
highlightedMote = null;
repaint();
return;
}
// Toggle color
if (highlightColor == Color.GRAY)
highlightColor = Color.CYAN;
else
highlightColor = Color.GRAY;
timer.setDelay(timer.getDelay()-1);
repaint();
}
});
timer.start();
}
});
canvas.addMouseMotionListener(new MouseMotionListener() { canvas.addMouseMotionListener(new MouseMotionListener() {
public void mouseMoved(MouseEvent e) { public void mouseMoved(MouseEvent e) {
myPlugin.handleMoveRequest(e.getPoint().x, e.getPoint().y, false); myPlugin.handleMoveRequest(e.getPoint().x, e.getPoint().y, false);
@ -417,7 +456,11 @@ public abstract class Visualizer2D extends VisPlugin {
int x = pixelCoord.x; int x = pixelCoord.x;
int y = pixelCoord.y; int y = pixelCoord.y;
if (mote == moteToMove) { if (mote == highlightedMote) {
g.setColor(highlightColor);
g.fillOval(x - MOTE_RADIUS, y - MOTE_RADIUS, 2 * MOTE_RADIUS,
2 * MOTE_RADIUS);
} else if (mote == moteToMove) {
// Don't fill mote // Don't fill mote
} else if (moteColors.length >= 2) { } else if (moteColors.length >= 2) {
g.setColor(moteColors[0]); g.setColor(moteColors[0]);
@ -555,6 +598,10 @@ public abstract class Visualizer2D extends VisPlugin {
} }
public void closePlugin() { public void closePlugin() {
if (moteHighligtObserver != null) {
myGUI.deleteMoteHighligtObserver(moteHighligtObserver);
}
if (simObserver != null) { if (simObserver != null) {
simulation.deleteObserver(simObserver); simulation.deleteObserver(simObserver);