private void recomputeEverythingAfter(int firstRow) { getSeries().setFireSeriesChanged(false); int itemCount = getSeries().getItemCount(); if (itemCount > 0 && firstRow < itemCount - 1) getSeries().delete(firstRow, itemCount - 1); BaseRoute route = getPositions().getRoute(); if (route == null) return; int lastRow = getPositions().getRowCount() - 1; if (firstRow <= lastRow && lastRow >= 0) { if(getXAxisMode().equals(Distance)) { double[] distances = route.getDistancesFromStart(firstRow, lastRow); for (int i = firstRow; i < lastRow + 1; i++) { getSeries().add(formatDistance(distances[i - firstRow]), formatYValue(getPositions().getPosition(i)), false); } } else { long[] times = route.getTimesFromStart(firstRow, lastRow); for (int i = firstRow; i < lastRow + 1; i++) { // XYSeries only works with doubles so it's hard to format the time as a date and time string getSeries().add(formatTime(times[i - firstRow]), formatYValue(getPositions().getPosition(i)), false); } } } getSeries().setFireSeriesChanged(true); getSeries().fireSeriesChanged(); }
private Double formatYValue(NavigationPosition position) { switch(yAxisMode) { case Elevation: return formatElevation(position.getElevation()); case Speed: return formatSpeed(position.getSpeed()); default: throw new IllegalArgumentException(format("X-Axis mode %s is not supported", yAxisMode)); } }
protected void handleIntervalYUpdate(int firstRow, int lastRow) { getSeries().setFireSeriesChanged(false); for (int i = firstRow; i < lastRow + 1; i++) { getSeries().updateByIndex(i, formatYValue(getPositions().getPosition(i))); } getSeries().setFireSeriesChanged(true); getSeries().fireSeriesChanged(); }
private void updateAxis() { UnitSystem unitSystem = profileModel.getUnitSystem(); YAxisMode yAxisMode = profileModel.getYAxisMode(); String yAxisUnit = yAxisMode.equals(Elevation) ? unitSystem.getElevationName() : unitSystem.getSpeedName(); String yAxisKey = yAxisMode.equals(Elevation) ? "elevation-axis" : "speed-axis"; plot.getRangeAxis().setLabel(format(getBundle().getString(yAxisKey), yAxisUnit)); XAxisMode xAxisMode = profileModel.getXAxisMode(); String xAxisUnit = xAxisMode.equals(Distance) ? unitSystem.getDistanceName() : "s"; String xAxisKey = xAxisMode.equals(Distance) ? "distance-axis" : "time-axis"; plot.getDomainAxis().setLabel(format(getBundle().getString(xAxisKey), xAxisUnit)); chartPanel.setToolTipGenerator(new StandardXYToolTipGenerator( "{2} " + yAxisUnit + " @ {1} " + xAxisUnit, getIntegerInstance(), getIntegerInstance()) { public String generateLabelString(XYDataset dataset, int series, int item) { return super.generateLabelString(dataset, series, item).replaceAll("null", "?"); } }); }
public synchronized void setSelectedPositions(int[] selectPositions, boolean replaceSelection) { if (replaceSelection) plot.clearDomainMarkers(); if (profileModel.getXAxisMode().equals(Distance)) { double[] distances = positionsModel.getRoute().getDistancesFromStart(selectPositions); for (double distance : distances) { plot.addDomainMarker(0, new ValueMarker(profileModel.formatDistance(distance)), FOREGROUND, false); } } else { long[] times = positionsModel.getRoute().getTimesFromStart(selectPositions); for (long time : times) { plot.addDomainMarker(0, new ValueMarker(profileModel.formatTime(time)), FOREGROUND, false); } } // make sure the protected fireChangeEvent() is called without any side effects plot.setWeight(plot.getWeight()); }
this.positionsModel = positionsModel; PatchedXYSeries series = new PatchedXYSeries("Profile"); this.profileModel = new ProfileModel(positionsModel, series, unitSystemModel.getUnitSystem(), profileModeModel.getXAxisMode(), profileModeModel.getYAxisMode()); XYSeriesCollection dataset = new XYSeriesCollection(series);