gernotbelger@9263: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9263: * Software engineering by gernotbelger@9263: * Björnsen Beratende Ingenieure GmbH gernotbelger@9263: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9263: * gernotbelger@9263: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9263: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9263: * documentation coming with Dive4Elements River for details. gernotbelger@9263: */ gernotbelger@9263: package org.dive4elements.river.client.client.ui.chart; gernotbelger@9263: gernotbelger@9263: /** gernotbelger@9263: * 'Old' stepping behaviour of the navi chart, as used by WINFO and Fixierungsanalyse. gernotbelger@9263: * gernotbelger@9263: * @author Gernot Belger gernotbelger@9263: */ gernotbelger@9263: public class MinMaxStepNaviChartStepper implements INaviChartStepper { gernotbelger@9263: gernotbelger@9263: private double currentKm; gernotbelger@9263: private final double minKm; gernotbelger@9263: private final double maxKm; gernotbelger@9263: private final double step; gernotbelger@9263: gernotbelger@9263: public MinMaxStepNaviChartStepper(final double minKm, final double maxKm, final double step) { gernotbelger@9263: this.minKm = minKm; gernotbelger@9263: this.maxKm = maxKm; gernotbelger@9263: this.step = step; gernotbelger@9263: gernotbelger@9263: this.currentKm = minKm; gernotbelger@9263: } gernotbelger@9263: gernotbelger@9263: @Override gernotbelger@9263: public double getCurrentKm() { gernotbelger@9263: return this.currentKm; gernotbelger@9263: } gernotbelger@9263: gernotbelger@9263: @Override gernotbelger@9263: public double stepForward() { gernotbelger@9263: gernotbelger@9263: if (this.currentKm >= this.maxKm) gernotbelger@9263: this.currentKm = this.maxKm; gernotbelger@9263: else { gernotbelger@9263: // Why this math? gernotbelger@9263: double newVal = this.currentKm * 100; gernotbelger@9263: newVal += this.step / 10; gernotbelger@9263: this.currentKm = (double) Math.round(newVal) / 100; gernotbelger@9263: } gernotbelger@9263: gernotbelger@9263: return this.currentKm; gernotbelger@9263: } gernotbelger@9263: gernotbelger@9263: @Override gernotbelger@9263: public double stepBackward() { gernotbelger@9263: gernotbelger@9263: if (this.currentKm <= this.minKm) gernotbelger@9263: this.currentKm = this.minKm; gernotbelger@9263: else { gernotbelger@9263: // Why this math? gernotbelger@9263: double newVal = this.currentKm * 100; gernotbelger@9263: newVal -= this.step / 10; gernotbelger@9263: gernotbelger@9263: this.currentKm = ((double) Math.round(newVal) / 100); gernotbelger@9263: } gernotbelger@9263: gernotbelger@9263: return this.currentKm; gernotbelger@9263: } gernotbelger@9263: gernotbelger@9263: @Override gernotbelger@9263: public double setValidCurrentKm(final double userInput) { gernotbelger@9263: gernotbelger@9263: if (userInput > this.maxKm) gernotbelger@9263: this.currentKm = this.maxKm; gernotbelger@9263: else if (userInput < this.minKm) gernotbelger@9263: this.currentKm = this.minKm; gernotbelger@9263: else gernotbelger@9263: this.currentKm = userInput; gernotbelger@9263: gernotbelger@9263: return this.currentKm; gernotbelger@9263: } gernotbelger@9263: }