mirror of
https://github.com/oliverschmidt/contiki.git
synced 2024-12-23 01:29:33 +00:00
Added optional color for mote relations
This commit is contained in:
parent
e2436d023e
commit
5d542c2cad
@ -24,7 +24,7 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: GUI.java,v 1.173 2010/12/10 15:54:52 fros4943 Exp $
|
* $Id: GUI.java,v 1.174 2010/12/10 17:50:48 nifi Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja;
|
package se.sics.cooja;
|
||||||
@ -341,9 +341,11 @@ public class GUI extends Observable {
|
|||||||
public static class MoteRelation {
|
public static class MoteRelation {
|
||||||
public Mote source;
|
public Mote source;
|
||||||
public Mote dest;
|
public Mote dest;
|
||||||
public MoteRelation(Mote source, Mote dest) {
|
public Color color;
|
||||||
|
public MoteRelation(Mote source, Mote dest, Color color) {
|
||||||
this.source = source;
|
this.source = source;
|
||||||
this.dest = dest;
|
this.dest = dest;
|
||||||
|
this.color = color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private ArrayList<MoteRelation> moteRelations = new ArrayList<MoteRelation>();
|
private ArrayList<MoteRelation> moteRelations = new ArrayList<MoteRelation>();
|
||||||
@ -3783,11 +3785,22 @@ public class GUI extends Observable {
|
|||||||
* @param dest Destination mote
|
* @param dest Destination mote
|
||||||
*/
|
*/
|
||||||
public void addMoteRelation(Mote source, Mote dest) {
|
public void addMoteRelation(Mote source, Mote dest) {
|
||||||
|
addMoteRelation(source, dest, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds directed relation between given motes.
|
||||||
|
*
|
||||||
|
* @param source Source mote
|
||||||
|
* @param dest Destination mote
|
||||||
|
* @param color The color to use when visualizing the mote relation
|
||||||
|
*/
|
||||||
|
public void addMoteRelation(Mote source, Mote dest, Color color) {
|
||||||
if (source == null || dest == null) {
|
if (source == null || dest == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
removeMoteRelation(source, dest); /* Unique relations */
|
removeMoteRelation(source, dest); /* Unique relations */
|
||||||
moteRelations.add(new MoteRelation(source, dest));
|
moteRelations.add(new MoteRelation(source, dest, color));
|
||||||
moteRelationObservable.setChangedAndNotify();
|
moteRelationObservable.setChangedAndNotify();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3805,9 +3818,11 @@ public class GUI extends Observable {
|
|||||||
for (MoteRelation r: arr) {
|
for (MoteRelation r: arr) {
|
||||||
if (r.source == source && r.dest == dest) {
|
if (r.source == source && r.dest == dest) {
|
||||||
moteRelations.remove(r);
|
moteRelations.remove(r);
|
||||||
|
/* Relations are unique */
|
||||||
|
moteRelationObservable.setChangedAndNotify();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
moteRelationObservable.setChangedAndNotify();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -3816,9 +3831,7 @@ public class GUI extends Observable {
|
|||||||
* @see #addMoteRelationsObserver(Observer)
|
* @see #addMoteRelationsObserver(Observer)
|
||||||
*/
|
*/
|
||||||
public MoteRelation[] getMoteRelations() {
|
public MoteRelation[] getMoteRelations() {
|
||||||
MoteRelation[] arr = new MoteRelation[moteRelations.size()];
|
return moteRelations.toArray(new MoteRelation[moteRelations.size()]);
|
||||||
moteRelations.toArray(arr);
|
|
||||||
return arr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -26,11 +26,12 @@
|
|||||||
* 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: Mote2MoteRelations.java,v 1.6 2010/02/10 13:29:27 fros4943 Exp $
|
* $Id: Mote2MoteRelations.java,v 1.7 2010/12/10 17:50:49 nifi Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.interfaces;
|
package se.sics.cooja.interfaces;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
@ -142,26 +143,31 @@ public class Mote2MoteRelations extends MoteInterface {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String colorName = null;
|
||||||
|
int colorIndex = msg.indexOf(';');
|
||||||
|
if (colorIndex > 0) {
|
||||||
|
colorName = msg.substring(colorIndex + 1).trim();
|
||||||
|
msg = msg.substring(0, colorIndex).trim();
|
||||||
|
}
|
||||||
String[] args = msg.split(" ");
|
String[] args = msg.split(" ");
|
||||||
if (args.length != 3) {
|
if (args.length != 3) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String id = args[1];
|
int destID;
|
||||||
|
try {
|
||||||
|
destID = Integer.parseInt(args[1]);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Not a mote id
|
||||||
|
return;
|
||||||
|
}
|
||||||
String state = args[2];
|
String state = args[2];
|
||||||
|
|
||||||
/* Locate destination mote */
|
/* Locate destination mote */
|
||||||
/* TODO Use Rime address interface instead of mote ID? */
|
/* TODO Use Rime address interface instead of mote ID? */
|
||||||
Mote destinationMote = null;
|
Mote destinationMote = mote.getSimulation().getMoteWithID(destID);
|
||||||
Mote[] allMotes = Mote2MoteRelations.this.mote.getSimulation().getMotes();
|
|
||||||
for (Mote m: allMotes) {
|
|
||||||
if (id.equals("" + m.getID())) {
|
|
||||||
destinationMote = m;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (destinationMote == null) {
|
if (destinationMote == null) {
|
||||||
logger.warn("No destination mote with ID: " + id);
|
logger.warn("No destination mote with ID: " + destID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (destinationMote == mote) {
|
if (destinationMote == mote) {
|
||||||
@ -175,7 +181,7 @@ public class Mote2MoteRelations extends MoteInterface {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
relations.add(destinationMote);
|
relations.add(destinationMote);
|
||||||
gui.addMoteRelation(mote, destinationMote);
|
gui.addMoteRelation(mote, destinationMote, decodeColor(colorName));
|
||||||
} else {
|
} else {
|
||||||
relations.remove(destinationMote);
|
relations.remove(destinationMote);
|
||||||
gui.removeMoteRelation(mote, destinationMote);
|
gui.removeMoteRelation(mote, destinationMote);
|
||||||
@ -185,6 +191,36 @@ public class Mote2MoteRelations extends MoteInterface {
|
|||||||
notifyObservers();
|
notifyObservers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Color decodeColor(String colorString) {
|
||||||
|
if (colorString == null) {
|
||||||
|
return null;
|
||||||
|
} else if (colorString.equalsIgnoreCase("red")) {
|
||||||
|
return Color.RED;
|
||||||
|
} else if (colorString.equalsIgnoreCase("green")) {
|
||||||
|
return Color.GREEN;
|
||||||
|
} else if (colorString.equalsIgnoreCase("blue")) {
|
||||||
|
return Color.BLUE;
|
||||||
|
} else if (colorString.equalsIgnoreCase("orange")) {
|
||||||
|
return Color.ORANGE;
|
||||||
|
} else if (colorString.equalsIgnoreCase("pink")) {
|
||||||
|
return Color.PINK;
|
||||||
|
} else if (colorString.equalsIgnoreCase("yellow")) {
|
||||||
|
return Color.YELLOW;
|
||||||
|
} else if (colorString.equalsIgnoreCase("gray")) {
|
||||||
|
return Color.GRAY;
|
||||||
|
} else if (colorString.equalsIgnoreCase("magenta")) {
|
||||||
|
return Color.MAGENTA;
|
||||||
|
} else if (colorString.equalsIgnoreCase("black")) {
|
||||||
|
return Color.BLACK;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
return Color.decode(colorString);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public JPanel getInterfaceVisualizer() {
|
public JPanel getInterfaceVisualizer() {
|
||||||
JPanel panel = new JPanel();
|
JPanel panel = new JPanel();
|
||||||
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
||||||
|
@ -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: Visualizer.java,v 1.18 2010/12/03 13:54:25 fros4943 Exp $
|
* $Id: Visualizer.java,v 1.19 2010/12/10 17:50:49 nifi Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.plugins;
|
package se.sics.cooja.plugins;
|
||||||
@ -847,7 +847,6 @@ public class Visualizer extends VisPlugin {
|
|||||||
Mote[] allMotes = simulation.getMotes();
|
Mote[] allMotes = simulation.getMotes();
|
||||||
|
|
||||||
/* Paint mote relations */
|
/* Paint mote relations */
|
||||||
g.setColor(Color.BLACK);
|
|
||||||
MoteRelation[] relations = simulation.getGUI().getMoteRelations();
|
MoteRelation[] relations = simulation.getGUI().getMoteRelations();
|
||||||
for (MoteRelation r: relations) {
|
for (MoteRelation r: relations) {
|
||||||
Position sourcePos = r.source.getInterfaces().getPosition();
|
Position sourcePos = r.source.getInterfaces().getPosition();
|
||||||
@ -856,6 +855,7 @@ public class Visualizer extends VisPlugin {
|
|||||||
Point sourcePoint = transformPositionToPixel(sourcePos);
|
Point sourcePoint = transformPositionToPixel(sourcePos);
|
||||||
Point destPoint = transformPositionToPixel(destPos);
|
Point destPoint = transformPositionToPixel(destPos);
|
||||||
|
|
||||||
|
g.setColor(r.color == null ? Color.black : r.color);
|
||||||
drawArrow(g, sourcePoint.x, sourcePoint.y, destPoint.x, destPoint.y, MOTE_RADIUS + 1);
|
drawArrow(g, sourcePoint.x, sourcePoint.y, destPoint.x, destPoint.y, MOTE_RADIUS + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user