fixed integer to long wrap bug for simulation times over 2000s

This commit is contained in:
fros4943 2009-11-23 15:25:13 +00:00
parent a96e8a33b3
commit 857c7d5a9d
1 changed files with 12 additions and 12 deletions

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: TimeLine.java,v 1.15 2009/11/13 13:01:13 fros4943 Exp $ * $Id: TimeLine.java,v 1.16 2009/11/23 15:25:13 fros4943 Exp $
*/ */
package se.sics.cooja.plugins; package se.sics.cooja.plugins;
@ -104,9 +104,9 @@ public class TimeLine extends VisPlugin {
private static final boolean PAINT_ZERO_WIDTH_EVENTS = true; private static final boolean PAINT_ZERO_WIDTH_EVENTS = true;
private static final int TIMELINE_UPDATE_INTERVAL = 100; private static final int TIMELINE_UPDATE_INTERVAL = 100;
private static int currentPixelDivisor = 200; private static long currentPixelDivisor = 200;
private static final int[] ZOOM_LEVELS = { 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000 }; private static final long[] ZOOM_LEVELS = { 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000 };
private int zoomLevel = 9; private int zoomLevel = 9;
@ -989,7 +989,7 @@ public class TimeLine extends VisPlugin {
public void paintComponent(Graphics g) { public void paintComponent(Graphics g) {
Rectangle bounds = g.getClipBounds(); Rectangle bounds = g.getClipBounds();
/*logger.info("Clip bounds: " + bounds);*/ /*logger.info("Clip bounds: " + bounds);*/
long intervalStart = bounds.x*currentPixelDivisor; long intervalStart = (long)bounds.x*(long)currentPixelDivisor;
long intervalEnd = intervalStart + bounds.width*currentPixelDivisor; long intervalEnd = intervalStart + bounds.width*currentPixelDivisor;
if (intervalEnd > simulation.getSimulationTime()) { if (intervalEnd > simulation.getSimulationTime()) {
@ -1107,12 +1107,12 @@ public class TimeLine extends VisPlugin {
while (time <= end) { while (time <= end) {
if (time % (100*Simulation.MILLISECOND) == 0) { if (time % (100*Simulation.MILLISECOND) == 0) {
g.drawLine( g.drawLine(
(int) time/currentPixelDivisor, (int)0, (int) (time/currentPixelDivisor), (int)0,
(int) time/currentPixelDivisor, (int)TIME_MARKER_PIXEL_HEIGHT); (int) (time/currentPixelDivisor), (int)TIME_MARKER_PIXEL_HEIGHT);
} else { } else {
g.drawLine( g.drawLine(
(int) time/currentPixelDivisor, (int)0, (int) (time/currentPixelDivisor), (int)0,
(int) time/currentPixelDivisor, (int)TIME_MARKER_PIXEL_HEIGHT/2); (int) (time/currentPixelDivisor), (int)TIME_MARKER_PIXEL_HEIGHT/2);
} }
time += (10*Simulation.MILLISECOND); time += (10*Simulation.MILLISECOND);
} }
@ -1311,9 +1311,9 @@ public class TimeLine extends VisPlugin {
/* Calculate event width */ /* Calculate event width */
if (ev.next != null) { if (ev.next != null) {
w = (int) (ev.next.time - ev.time)/currentPixelDivisor; w = (int) ((ev.next.time - ev.time)/currentPixelDivisor);
} else { } else {
w = (int) (end - ev.time)/currentPixelDivisor; /* No more events */ w = (int) ((end - ev.time)/currentPixelDivisor); /* No more events */
} }
/* Handle zero pixel width events */ /* Handle zero pixel width events */
@ -1436,9 +1436,9 @@ public class TimeLine extends VisPlugin {
/* Calculate event width */ /* Calculate event width */
if (ev.next != null) { if (ev.next != null) {
w = (int) (ev.next.time - ev.time)/currentPixelDivisor; w = (int) ((ev.next.time - ev.time)/currentPixelDivisor);
} else { } else {
w = (int) (end - ev.time)/currentPixelDivisor; /* No more events */ w = (int) ((end - ev.time)/currentPixelDivisor); /* No more events */
} }
/* Handle zero pixel width events */ /* Handle zero pixel width events */