vis2d implements mote highlight functionality
This commit is contained in:
parent
209a35bf53
commit
508fe3709d
1 changed files with 50 additions and 3 deletions
|
@ -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,8 +456,12 @@ 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) {
|
||||||
// Don't fill mote
|
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
|
||||||
} else if (moteColors.length >= 2) {
|
} else if (moteColors.length >= 2) {
|
||||||
g.setColor(moteColors[0]);
|
g.setColor(moteColors[0]);
|
||||||
g.fillOval(x - MOTE_RADIUS, y - MOTE_RADIUS, 2 * MOTE_RADIUS,
|
g.fillOval(x - MOTE_RADIUS, y - MOTE_RADIUS, 2 * MOTE_RADIUS,
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue