ensure mouse-triggered event popups are not outside screen, updated to use new watchpoint interface
This commit is contained in:
parent
dcd0460e0b
commit
042c75e52c
|
@ -88,11 +88,12 @@ import se.sics.cooja.GUI;
|
|||
import se.sics.cooja.Mote;
|
||||
import se.sics.cooja.Plugin;
|
||||
import se.sics.cooja.PluginType;
|
||||
import se.sics.cooja.SimEventCentral.MoteCountListener;
|
||||
import se.sics.cooja.Simulation;
|
||||
import se.sics.cooja.VisPlugin;
|
||||
import se.sics.cooja.Watchpoint;
|
||||
import se.sics.cooja.WatchpointMote;
|
||||
import se.sics.cooja.SimEventCentral.MoteCountListener;
|
||||
import se.sics.cooja.WatchpointMote.WatchpointListener;
|
||||
import se.sics.cooja.interfaces.LED;
|
||||
import se.sics.cooja.interfaces.Radio;
|
||||
import se.sics.cooja.interfaces.Radio.RadioEvent;
|
||||
|
@ -850,7 +851,7 @@ public class TimeLine extends VisPlugin {
|
|||
if (popupLocation == null) {
|
||||
return;
|
||||
}
|
||||
long time = (long) ((double)popupLocation.x*currentPixelDivisor);
|
||||
long time = (long) (popupLocation.x*currentPixelDivisor);
|
||||
|
||||
Plugin[] plugins = simulation.getGUI().getStartedPlugins();
|
||||
for (Plugin p: plugins) {
|
||||
|
@ -870,7 +871,7 @@ public class TimeLine extends VisPlugin {
|
|||
if (popupLocation == null) {
|
||||
return;
|
||||
}
|
||||
long time = (long) ((double)popupLocation.x*currentPixelDivisor);
|
||||
long time = (long) (popupLocation.x*currentPixelDivisor);
|
||||
|
||||
Plugin[] plugins = simulation.getGUI().getStartedPlugins();
|
||||
for (Plugin p: plugins) {
|
||||
|
@ -929,7 +930,7 @@ public class TimeLine extends VisPlugin {
|
|||
private Mote mote;
|
||||
|
||||
private WatchpointMote watchpointMote; /* XXX */
|
||||
private ActionListener watchpointListener; /* XXX */
|
||||
private WatchpointListener watchpointListener; /* XXX */
|
||||
|
||||
public MoteObservation(Mote mote, Observable observable, Observer observer) {
|
||||
this.mote = mote;
|
||||
|
@ -938,7 +939,7 @@ public class TimeLine extends VisPlugin {
|
|||
}
|
||||
|
||||
/* XXX Special case, should be generalized */
|
||||
public MoteObservation(Mote mote, WatchpointMote watchpointMote, ActionListener listener) {
|
||||
public MoteObservation(Mote mote, WatchpointMote watchpointMote, WatchpointListener listener) {
|
||||
this.mote = mote;
|
||||
this.watchpointMote = watchpointMote;
|
||||
this.watchpointListener = listener;
|
||||
|
@ -1110,18 +1111,22 @@ public class TimeLine extends VisPlugin {
|
|||
/* XXX Experimental: Watchpoints */
|
||||
if (mote instanceof WatchpointMote) {
|
||||
final WatchpointMote watchpointMote = ((WatchpointMote)mote);
|
||||
ActionListener listener = new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (watchpointMote.getLastWatchpoint() == null) {
|
||||
return;
|
||||
WatchpointListener listener = new WatchpointListener() {
|
||||
public void watchpointTriggered(Watchpoint watchpoint) {
|
||||
WatchpointEvent ev = new WatchpointEvent(simulation.getSimulationTime(), watchpoint);
|
||||
|
||||
if (executionDetails && mote instanceof AbstractEmulatedMote) {
|
||||
String details = ((AbstractEmulatedMote) mote).getExecutionDetails();
|
||||
if (details != null) {
|
||||
details = "<br>" + details.replace("\n", "<br>");
|
||||
ev.details = details;
|
||||
}
|
||||
}
|
||||
WatchpointEvent ev = new WatchpointEvent(
|
||||
simulation.getSimulationTime(),
|
||||
watchpointMote.getLastWatchpoint()
|
||||
);
|
||||
|
||||
moteEvents.addWatchpoint(ev);
|
||||
}
|
||||
public void watchpointsChanged() {
|
||||
}
|
||||
};
|
||||
|
||||
watchpointMote.addWatchpointListener(listener);
|
||||
|
@ -1417,7 +1422,7 @@ public class TimeLine extends VisPlugin {
|
|||
popupLocation = e.getPoint();
|
||||
showInAllAction.actionPerformed(null);
|
||||
|
||||
long time = (long) ((double)popupLocation.x*currentPixelDivisor);
|
||||
long time = (long) (popupLocation.x*currentPixelDivisor);
|
||||
Plugin[] plugins = simulation.getGUI().getStartedPlugins();
|
||||
for (Plugin p: plugins) {
|
||||
if (!(p instanceof TimeLine)) {
|
||||
|
@ -1524,7 +1529,34 @@ public class TimeLine extends VisPlugin {
|
|||
if (t.getTipText() == null || t.getTipText().equals("")) {
|
||||
return;
|
||||
}
|
||||
popUpToolTip = PopupFactory.getSharedInstance().getPopup(timeline, t, e.getXOnScreen(), e.getYOnScreen());
|
||||
t.validate();
|
||||
|
||||
/* Check tooltip width */
|
||||
Rectangle screenBounds = timeline.getGraphicsConfiguration().getBounds();
|
||||
int x;
|
||||
{
|
||||
int tooltip = e.getLocationOnScreen().x + t.getPreferredSize().width;
|
||||
int screen = screenBounds.x + screenBounds.width;
|
||||
if (tooltip > screen) {
|
||||
x = e.getLocationOnScreen().x - (tooltip-screen);
|
||||
} else {
|
||||
x = e.getLocationOnScreen().x;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check tooltip height */
|
||||
int y;
|
||||
{
|
||||
int tooltip = e.getLocationOnScreen().y + t.getPreferredSize().height;
|
||||
int screen = screenBounds.y + screenBounds.height;
|
||||
if (tooltip > screen) {
|
||||
y = e.getLocationOnScreen().y - (tooltip-screen);
|
||||
} else {
|
||||
y = e.getLocationOnScreen().y;
|
||||
}
|
||||
}
|
||||
|
||||
popUpToolTip = PopupFactory.getSharedInstance().getPopup(null, t, x, y);
|
||||
popUpToolTip.show();
|
||||
}
|
||||
}
|
||||
|
@ -1680,12 +1712,12 @@ public class TimeLine extends VisPlugin {
|
|||
while (time <= end) {
|
||||
if (time % (100*Simulation.MILLISECOND) == 0) {
|
||||
g.drawLine(
|
||||
(int) (time/currentPixelDivisor), (int)0,
|
||||
(int) (time/currentPixelDivisor), (int)TIME_MARKER_PIXEL_HEIGHT);
|
||||
(int) (time/currentPixelDivisor), 0,
|
||||
(int) (time/currentPixelDivisor), TIME_MARKER_PIXEL_HEIGHT);
|
||||
} else {
|
||||
g.drawLine(
|
||||
(int) (time/currentPixelDivisor), (int)0,
|
||||
(int) (time/currentPixelDivisor), (int)TIME_MARKER_PIXEL_HEIGHT/2);
|
||||
(int) (time/currentPixelDivisor), 0,
|
||||
(int) (time/currentPixelDivisor), TIME_MARKER_PIXEL_HEIGHT/2);
|
||||
}
|
||||
time += (10*Simulation.MILLISECOND);
|
||||
}
|
||||
|
@ -1693,8 +1725,8 @@ public class TimeLine extends VisPlugin {
|
|||
|
||||
private void drawMouseTime(Graphics g, long start, long end) {
|
||||
if (mousePixelPositionX >= 0) {
|
||||
long time = (long) ((double)mousePixelPositionX*currentPixelDivisor);
|
||||
long diff = (long) ((double)Math.abs(mouseDownPixelPositionX-mousePixelPositionX)*currentPixelDivisor);
|
||||
long time = (long) (mousePixelPositionX*currentPixelDivisor);
|
||||
long diff = (long) (Math.abs(mouseDownPixelPositionX-mousePixelPositionX)*currentPixelDivisor);
|
||||
String str =
|
||||
"Time (ms): " + (double)time/Simulation.MILLISECOND +
|
||||
" (" + (double)diff/Simulation.MILLISECOND + ")";
|
||||
|
@ -2333,7 +2365,7 @@ public class TimeLine extends VisPlugin {
|
|||
Rectangle visibleRectangle = timeline.getVisibleRect();
|
||||
boolean isTracking = visibleRectangle.x + visibleRectangle.width >= timeline.getWidth();
|
||||
|
||||
int newHeight = (int) (FIRST_MOTE_PIXEL_OFFSET + paintedMoteHeight * allMoteEvents.size());
|
||||
int newHeight = (FIRST_MOTE_PIXEL_OFFSET + paintedMoteHeight * allMoteEvents.size());
|
||||
timeline.setPreferredSize(new Dimension(
|
||||
newWidth,
|
||||
newHeight
|
||||
|
|
Loading…
Reference in a new issue