# HG changeset patch # User Felix Wolfsteller # Date 1341317616 0 # Node ID a5ebe2e2c77234ab92255d77445ca3578e6ff804 # Parent d87730b89afae5d6f78c3fa808618c29ed881279 issue457 flys-client/trunk@4860 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r d87730b89afa -r a5ebe2e2c772 flys-client/ChangeLog --- a/flys-client/ChangeLog Mon Jul 02 09:49:22 2012 +0000 +++ b/flys-client/ChangeLog Tue Jul 03 12:13:36 2012 +0000 @@ -1,3 +1,10 @@ +2012-07-03 Felix Wolfsteller + + Fix issue457. + + * src/main/java/de/intevation/flys/client/client/ui/chart/CrossSectionChartThemePanel.java: + Store and consider direction (up, down) when using the km spinner. + 2012-07-02 Sascha L. Teichmann * src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties, diff -r d87730b89afa -r a5ebe2e2c772 flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/CrossSectionChartThemePanel.java --- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/CrossSectionChartThemePanel.java Mon Jul 02 09:49:22 2012 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/CrossSectionChartThemePanel.java Tue Jul 03 12:13:36 2012 +0000 @@ -282,23 +282,33 @@ * the last one is taken. * @param in possible return values. * @param to the value to be as close to as possible. + * @param up if true, prefer numerically higher values in case of two + * values with equal distance to \param to. * @return value from in that is closest to to, -1 if none. */ - public static double closest(Double[] in, double to) { + public static double closest(Double[] in, double to, boolean up) { if (in == null || in.length == 0) { return -1; } if (in[0] == to) { return to; } + for (int i = 0; i < in.length; i++) { + GWT.log ("Close? " + in[i]); + } + double minDiff = Math.abs(to - in[0]); double bestMatch = in[0]; for (int i = 1; i < in.length; i++) { if (in[i] == to) { return to; } + if ((in[i] < to && up) + || (in[i] > to && !up)) { + continue; + } double diff = Math.abs(to - in[i]); - if (diff < minDiff) { + if (diff <= minDiff) { minDiff = diff; bestMatch = in[i]; } @@ -403,9 +413,12 @@ * @param item The SpinnerItem which was manipulated. * @param enteredKm The double-parsed value that has been entered. * @param facetRecord The underlying datastores record. + * @param up If true, numerically higher values are preferred if + * two values in \param in are in the same distance to + * \param to. */ public void spinnerValueEntered(final SpinnerItem item, - final double enteredKm, final FacetRecord facetRecord + final double enteredKm, final FacetRecord facetRecord, final boolean up ) { disable(); Config config = Config.getInstance(); @@ -441,7 +454,7 @@ public void onSuccess(Map obj) { Double[] kms = obj.get(dbid); double closest = - CrossSectionChartThemePanel.closest(kms, enteredKm); + CrossSectionChartThemePanel.closest(kms, enteredKm, up); GWT.log("Got single km close to " + enteredKm + " for " + dbid + ", it is " + closest); @@ -474,38 +487,6 @@ /** - * Create the handler for ChangeEvents on the Spinner in the - * facets that control km of cross section. - * - * @param facetRecord The FacetRecord (~row in table) where this - * handler is added to (to a child, to be exact). - */ - // TODO obsolete? - public final ChangedHandler createSpinnerHandler( - final FacetRecord facetRecord) - { - ChangedHandler handler = new ChangedHandler() - { - @Override - public void onChanged(final ChangedEvent ce) { - if (ce.getValue() == null) { - return; - } - String value = ce.getValue().toString(); - - // Now, query the value with the kmService. - final double selected_km = - Double.parseDouble(value); - final SpinnerItem item = (SpinnerItem) ce.getItem(); - - spinnerValueEntered(item, selected_km, facetRecord); - } - }; - return handler; - } - - - /** * Create a "kilometer spinner" for CrossSection Facets. * @param facetRecord The respective Facet/Theme. * @return label, intialized SpinnerItem. @@ -551,7 +532,7 @@ minusButton.setHeight(height); minusButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(ClickEvent evt) { - spinnerValueEntered(null, currentValue - 0.1d, _facetRecord); + spinnerValueEntered(null, currentValue - 0.1d, _facetRecord, false); } }); @@ -607,7 +588,7 @@ try { spinnerValueEntered(null, Double.parseDouble(kmField.getValue().toString()), - _facetRecord); + _facetRecord, true); } catch(NumberFormatException nfe) { GWT.log("entered string cannot be parsed to double."); @@ -637,7 +618,7 @@ plusButton.setHeight(height); plusButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(ClickEvent evt) { - spinnerValueEntered(null, currentValue + 0.1d, _facetRecord); + spinnerValueEntered(null, currentValue + 0.1d, _facetRecord, true); } }); this.addMember(minusButton);