+ automatically add/remove simulation motes
This commit is contained in:
parent
c6c7c51c10
commit
6e26f08c15
|
@ -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: TimeLine.java,v 1.5 2009/05/26 14:30:20 fros4943 Exp $
|
* $Id: TimeLine.java,v 1.6 2009/06/08 11:55:58 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.plugins;
|
package se.sics.cooja.plugins;
|
||||||
|
@ -55,7 +55,6 @@ import org.apache.log4j.Logger;
|
||||||
import org.jdom.Element;
|
import org.jdom.Element;
|
||||||
import se.sics.cooja.*;
|
import se.sics.cooja.*;
|
||||||
import se.sics.cooja.interfaces.LED;
|
import se.sics.cooja.interfaces.LED;
|
||||||
import se.sics.cooja.interfaces.Log;
|
|
||||||
import se.sics.cooja.interfaces.Radio;
|
import se.sics.cooja.interfaces.Radio;
|
||||||
import se.sics.cooja.interfaces.Radio.RadioEvent;
|
import se.sics.cooja.interfaces.Radio.RadioEvent;
|
||||||
|
|
||||||
|
@ -87,6 +86,9 @@ public class TimeLine extends VisPlugin {
|
||||||
private int paintedMoteHeight = EVENT_PIXEL_HEIGHT;
|
private int paintedMoteHeight = EVENT_PIXEL_HEIGHT;
|
||||||
|
|
||||||
private Simulation simulation;
|
private Simulation simulation;
|
||||||
|
private Observer simulationObserver;
|
||||||
|
private int simulationObserverLast = -1;
|
||||||
|
|
||||||
private JScrollPane timelineScrollPane;
|
private JScrollPane timelineScrollPane;
|
||||||
private MoteRuler timelineMoteRuler;
|
private MoteRuler timelineMoteRuler;
|
||||||
private JComponent timeline;
|
private JComponent timeline;
|
||||||
|
@ -110,7 +112,7 @@ public class TimeLine extends VisPlugin {
|
||||||
public TimeLine(final Simulation simulation, final GUI gui) {
|
public TimeLine(final Simulation simulation, final GUI gui) {
|
||||||
super("Timeline (Add motes to observe by clicking +)", gui);
|
super("Timeline (Add motes to observe by clicking +)", gui);
|
||||||
this.simulation = simulation;
|
this.simulation = simulation;
|
||||||
|
|
||||||
currentPixelDivisor = ZOOM_LEVELS[zoomLevel];
|
currentPixelDivisor = ZOOM_LEVELS[zoomLevel];
|
||||||
|
|
||||||
/* Box: events to observe */
|
/* Box: events to observe */
|
||||||
|
@ -177,9 +179,6 @@ public class TimeLine extends VisPlugin {
|
||||||
timeline,
|
timeline,
|
||||||
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
|
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
|
||||||
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
|
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
|
||||||
timelineScrollPane.getVerticalScrollBar().setPreferredSize(
|
|
||||||
new Dimension(35, timelineScrollPane.getVerticalScrollBar().getPreferredSize().height));
|
|
||||||
|
|
||||||
|
|
||||||
JButton timelineAddMoteButton = new JButton(addMoteAction);
|
JButton timelineAddMoteButton = new JButton(addMoteAction);
|
||||||
timelineAddMoteButton.setText("+");
|
timelineAddMoteButton.setText("+");
|
||||||
|
@ -208,6 +207,41 @@ public class TimeLine extends VisPlugin {
|
||||||
|
|
||||||
numberMotesWasUpdated();
|
numberMotesWasUpdated();
|
||||||
|
|
||||||
|
/* Automatically add/delete motes */
|
||||||
|
simulation.addObserver(simulationObserver = new Observer() {
|
||||||
|
public void update(Observable obs, Object obj) {
|
||||||
|
if (simulation.getMotesCount() == simulationObserverLast) {
|
||||||
|
/* TODO Detect added/removed motes by event types, not mote counts */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
simulationObserverLast = simulation.getMotesCount();
|
||||||
|
|
||||||
|
/* Unregister removed motes */
|
||||||
|
Mote[] simMotes = simulation.getMotes();
|
||||||
|
MoteEvents[] allMoteEventsArr = allMoteEvents.toArray(new MoteEvents[0]);
|
||||||
|
for (MoteEvents moteEvents: allMoteEventsArr) {
|
||||||
|
/* Check that mote still exists in simulation */
|
||||||
|
boolean exists = false;
|
||||||
|
for (Mote existing: simMotes) {
|
||||||
|
if (existing == moteEvents.mote) {
|
||||||
|
exists = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!exists) {
|
||||||
|
removeMote(moteEvents.mote);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add all simulation motes */
|
||||||
|
for (Mote m: simulation.getMotes()) {
|
||||||
|
addMote(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
simulationObserver.update(null, null);
|
||||||
|
|
||||||
/* Update timeline for the duration of the plugin */
|
/* Update timeline for the duration of the plugin */
|
||||||
repaintTimelineTimer.start();
|
repaintTimelineTimer.start();
|
||||||
|
|
||||||
|
@ -556,6 +590,8 @@ public class TimeLine extends VisPlugin {
|
||||||
/* Remove repaint timer */
|
/* Remove repaint timer */
|
||||||
repaintTimelineTimer.stop();
|
repaintTimelineTimer.stop();
|
||||||
|
|
||||||
|
simulation.deleteObserver(simulationObserver);
|
||||||
|
|
||||||
/* Remove active mote interface observers */
|
/* Remove active mote interface observers */
|
||||||
for (MoteObservation o: activeMoteObservers) {
|
for (MoteObservation o: activeMoteObservers) {
|
||||||
o.dispose();
|
o.dispose();
|
||||||
|
@ -616,6 +652,13 @@ public class TimeLine extends VisPlugin {
|
||||||
showLogOutputs = false;
|
showLogOutputs = false;
|
||||||
showWatchpoints = false;
|
showWatchpoints = false;
|
||||||
|
|
||||||
|
/* Remove already registered motes */
|
||||||
|
MoteEvents[] allMoteEventsArr = allMoteEvents.toArray(new MoteEvents[0]);
|
||||||
|
for (MoteEvents moteEvents: allMoteEventsArr) {
|
||||||
|
removeMote(moteEvents.mote);
|
||||||
|
}
|
||||||
|
simulationObserverLast = simulation.getMotesCount();
|
||||||
|
|
||||||
for (Element element : configXML) {
|
for (Element element : configXML) {
|
||||||
String name = element.getName();
|
String name = element.getName();
|
||||||
if ("mote".equals(name)) {
|
if ("mote".equals(name)) {
|
||||||
|
|
Loading…
Reference in a new issue