[Dive4elements-commits] [PATCH 1 of 2] issue1133: Improved multi-gauge W/Q input
Wald Commits
scm-commit at wald.intevation.org
Fri Apr 19 12:36:59 CEST 2013
# HG changeset patch
# User Felix Wolfsteller <felix.wolfsteller at intevation.de>
# Date 1366364847 -7200
# Node ID cdc47534a9709cd53929a86dc3852af4018e5a9a
# Parent c0d0b9fd1aa8222f3b2d54f911f18d31d3f64156
issue1133: Improved multi-gauge W/Q input.
diff -r c0d0b9fd1aa8 -r cdc47534a970 flys-client/src/main/java/de/intevation/flys/client/client/ui/WQAdaptedInputPanel.java
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/WQAdaptedInputPanel.java Fri Apr 19 09:22:44 2013 +0200
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/WQAdaptedInputPanel.java Fri Apr 19 11:47:27 2013 +0200
@@ -98,20 +98,23 @@
/** List of doubleArrayPanels shown. */
protected ArrayList<DoubleArrayPanel> doubleArrayPanels;
- /** Stores the min/max values for each q range.*/
+ /** [startkm,endkm] per gauge in selected range. */
+ protected double[][] gaugeRanges;
+
+ /** Stores the min/max values for each q range (gauge). */
protected Map<String, double[]> qranges;
- /** Stores the min/max values for each w range. */
+ /** Stores the min/max values for each w range (gauge). */
protected Map<String, double[]> wranges;
/** The RadioGroupItem that determines the w/q input mode. */
protected DynamicForm modes;
- /** Table holding Q and D values. */
- protected QDTable qdTable;
+ /** List of wTables in inputhelper section. */
+ protected List<WTable> wTables;
- /** Table holding W values. */
- protected WTable wTable;
+ /** List of QDTables in inputhelper section. */
+ protected List<QDTable> qdTables;
/** Tabs in inputhelper area. */
protected TabSet tabs;
@@ -125,14 +128,14 @@
doubleArrayPanels = new ArrayList<DoubleArrayPanel>();
qranges = new HashMap<String, double[]>();
wranges = new HashMap<String, double[]>();
- qdTable = new QDTable();
- wTable = new WTable();
- initTableListeners();
+ wTables = new ArrayList<WTable>();
+ qdTables = new ArrayList<QDTable>();
}
@Override
public Canvas create(DataList data) {
+ readGaugeRanges(data);
initHelperPanel();
Canvas submit = getNextButton();
@@ -149,6 +152,10 @@
layout.addMember(widget);
layout.addMember(submit);
+ fetchWQData();
+
+ initTableListeners();
+
return layout;
}
@@ -160,19 +167,30 @@
tabs.setWidth100();
tabs.setHeight100();
- Tab wTab = new Tab(MESSAGE.wq_table_w());
- Tab qTab = new Tab(MESSAGE.wq_table_q());
+ // For each gauge, add two tabs with helper tables.
- qdTable.showSelect();
- wTab.setPane(wTable);
- qTab.setPane(qdTable);
+ for (int i = 0; i< gaugeRanges.length; i++) {
+ // Later the tabs title will get adjusted to include gauges name.
+ // TODO the tabs title becomes rather long through that (i18n).
+ Tab wTab = new Tab(MESSAGE.wq_table_w());
+ Tab qTab = new Tab(MESSAGE.wq_table_q());
- tabs.addTab(wTab, 0);
- tabs.addTab(qTab, 1);
+ QDTable qdTable = new QDTable();
+ WTable wTable = new WTable();
+
+ wTables.add(wTable);
+ qdTables.add(qdTable);
+
+ qdTable.showSelect();
+ //wTable.showSelect();
+ wTab.setPane(wTable);
+ qTab.setPane(qdTable);
+
+ tabs.addTab(wTab, i*2+0);
+ tabs.addTab(qTab, i*2+1);
+ }
helperContainer.addMember(tabs);
-
- fetchWQData();
}
@@ -181,32 +199,44 @@
*/
// TODO dupe from WQInputPanel
protected void initTableListeners() {
- CellClickHandler handler = new CellClickHandler() {
- @Override
- public void onCellClick(CellClickEvent e) {
- if (isWMode() || qdTable.isLocked()) {
- return;
+ int i = 0;
+ for (QDTable qdTable: qdTables) {
+ // Register listener such that values are filled in on click.
+ final QDTable table = qdTable;
+ final int fi = i;
+ CellClickHandler handler = new CellClickHandler() {
+ @Override
+ public void onCellClick(CellClickEvent e) {
+ if (isWMode() || table.isLocked()) {
+ return;
+ }
+
+ int idx = e.getColNum();
+ Record r = e.getRecord();
+ double val = r.getAttributeAsDouble("value");
+
+ doubleArrayPanels.get(fi).setValues(new double[]{val});
+ // Focus next.
+ if (fi != doubleArrayPanels.size()-1) {
+ doubleArrayPanels.get(fi+1).focusInItem(1);
+ }
+
+ /*if (itemWithFocus != null) {
+ itemWithFocus.setValues(new double[]{val});
+ int i = doubleArrayPanels.indexOf(itemWithFocus);
+ if (i == doubleArrayPanels.size()-1) {
+ doubleArrayPanels.get(0).focusInItem(1);
+ }
+ else {
+ doubleArrayPanels.get(i+1).focusInItem(1);
+ }
+ }*/
}
+ };
- int idx = e.getColNum();
- Record r = e.getRecord();
- double val = r.getAttributeAsDouble("value");
-
- if (itemWithFocus != null) {
- itemWithFocus.setValues(new double[]{val});
- // TODO 1133, show different data for each doublearraypanel
- int i = doubleArrayPanels.indexOf(itemWithFocus);
- if (i == doubleArrayPanels.size()-1) {
- doubleArrayPanels.get(0).focusInItem(1);
- }
- else {
- doubleArrayPanels.get(i+1).focusInItem(1);
- }
- }
- }
- };
-
- qdTable.addCellClickHandler(handler);
+ qdTable.addCellClickHandler(handler);
+ i++;
+ }
}
@@ -294,6 +324,7 @@
}
+ /** Create non-input helper part of the UI. */
protected Canvas createWidget(DataList dataList) {
VLayout layout = new VLayout();
@@ -468,15 +499,40 @@
}
}
+ /** Populate Gauge Ranges array. */
+ private void readGaugeRanges(DataList dataList) {
+ DataItem[] items = getWQItems(dataList);
+ gaugeRanges = new double[items.length][2];
+
+ int i = 0;
+
+ for (DataItem item: items) {
+ String[] startEndKm = item.getLabel().split(";");
+
+ gaugeRanges[i][0] = Double.parseDouble(startEndKm[0]);
+ gaugeRanges[i][1] = Double.parseDouble(startEndKm[1]);
+ i++;
+ }
+ }
+
protected Canvas createList(DataList dataList) {
VLayout layout = new VLayout();
DataItem[] items = getWQItems(dataList);
+ int i = 0;
+
for (DataItem item: items) {
- String title = item.getLabel();
+ String title = item.getLabel(); // of form: 70.5;112.0
String label = item.getStringValue();
+
+ // Rename W and Q tab to include gauges name.
+ tabs.getTab(i*2).setTitle(tabs.getTab(i*2).getTitle()
+ + " (" + label + ")");
+ tabs.getTab(i*2+1).setTitle(tabs.getTab(i*2+1).getTitle()
+ + " (" + label + ")");
+
DoubleArrayPanel dap = new DoubleArrayPanel(
label, null, this, this, TitleOrientation.LEFT);
@@ -493,6 +549,7 @@
}
layout.addMember(dap);
+ i++;
}
layout.setHeight(items.length * ROW_HEIGHT);
@@ -650,10 +707,14 @@
}
- /** Store the currently focussed DoubleArrayPanel. */
+ /** Store the currently focussed DoubleArrayPanel and focus helper tab. */
@Override
public void onFocus(FocusEvent event) {
itemWithFocus = (DoubleArrayPanel) event.getForm();
+ // Switch to respective tab.
+ // TODO which makes a focus loss
+ int inputIndex = doubleArrayPanels.indexOf(itemWithFocus);
+ tabs.selectTab(inputIndex*2 + (isWMode() ? 0 : 1));
}
@@ -664,7 +725,7 @@
}
- /** Get the WQD data from servide and stuck them up that tables. */
+ /** Get the WQD data from service and stuck them up that tables. */
protected void fetchWQData() {
Config config = Config.getInstance();
String locale = config.getLocale ();
@@ -675,39 +736,49 @@
double[] mm = getMinMaxKM(data);
String river = getRiverName(data);
- wqInfoService.getWQInfo(locale, river, mm[0], mm[0],
- new AsyncCallback<WQInfoObject[]>() {
- @Override
- public void onFailure(Throwable caught) {
- GWT.log("Could not recieve wq informations.");
- SC.warn(caught.getMessage());
- }
+ int i = 0;
- @Override
- public void onSuccess(WQInfoObject[] wqi) {
- int num = wqi != null ? wqi.length :0;
- GWT.log("Recieved " + num + " wq informations.");
-
- if (num == 0) {
- return;
+ // Get Data for respective gauge.
+ for (double[] range : gaugeRanges){
+ // Gauge ranges overlap, move start and end a bit closer to each other.
+ final double rDiff = (range[1] - range[0]) / 10d;
+ final int fi = i;
+ wqInfoService.getWQInfo(locale, river, range[0]+rDiff, range[1]-rDiff,
+ new AsyncCallback<WQInfoObject[]>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ GWT.log("Could not recieve wq informations.");
+ SC.warn(caught.getMessage());
}
- addWQInfo(wqi);
+ @Override
+ public void onSuccess(WQInfoObject[] wqi) {
+ int num = wqi != null ? wqi.length :0;
+ GWT.log("Received " + num + " wq informations (" + fi + ".");
+
+ if (num == 0) {
+ return;
+ }
+
+ addWQInfo(wqi, fi);
+ }
}
- }
- );
+ );
+ i++;
+ }
}
- protected void addWQInfo (WQInfoObject[] wqi) {
+ /** Add Info to helper table for gauge at index gaugeIdx. */
+ protected void addWQInfo (WQInfoObject[] wqi, int gaugeIdx) {
for(WQInfoObject wi: wqi) {
WQInfoRecord rec = new WQInfoRecord(wi);
if (wi.getType().equals("W")) {
- wTable.addData(rec);
+ wTables.get(gaugeIdx).addData(rec);
}
else {
- qdTable.addData(rec);
+ qdTables.get(gaugeIdx).addData(rec);
}
}
}
More information about the Dive4elements-commits
mailing list