comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/wq/ClickableWTable.java @ 4198:1cdbd8a0c994

Added two new tables ClickableQDTable and ClickableWTable and made Ws and Qs clickable in historical discharge calculation. The new tables define listener interfaces (clicked lower or upper icon) to listen to user clicks. In addition to this, there is an enum ClickMode with NONE, SINGLE and RANGE options, which allows to specifiy, which icons are displayed in the tables. NONE means no icon for user clicks, SINGLE has 1 icon, RANGE 2 icons for lower and upper.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 22 Oct 2012 13:31:25 +0200
parents
children 623e5c9f91ef
comparison
equal deleted inserted replaced
4196:e10d60d4f35b 4198:1cdbd8a0c994
1 package de.intevation.flys.client.client.ui.wq;
2
3 import com.google.gwt.core.client.GWT;
4 import com.google.gwt.i18n.client.NumberFormat;
5 import com.smartgwt.client.data.Record;
6 import com.smartgwt.client.types.ListGridFieldType;
7 import com.smartgwt.client.types.SelectionStyle;
8 import com.smartgwt.client.widgets.grid.CellFormatter;
9 import com.smartgwt.client.widgets.grid.ListGrid;
10 import com.smartgwt.client.widgets.grid.ListGridField;
11 import com.smartgwt.client.widgets.grid.ListGridRecord;
12 import com.smartgwt.client.widgets.grid.events.CellClickEvent;
13 import com.smartgwt.client.widgets.grid.events.CellClickHandler;
14
15 import de.intevation.flys.client.client.FLYSConstants;
16
17
18 public class ClickableWTable extends ListGrid {
19
20 public static enum ClickMode {
21 NONE, SINGLE, RANGE
22 }
23
24 public static interface WClickedListener {
25
26 void clickedLower(double value);
27
28 void clickedUpper(double value);
29 }
30
31 /** The message class that provides i18n strings. */
32 protected FLYSConstants MESSAGE = GWT.create(FLYSConstants.class);
33
34 private WClickedListener wClickedListener;
35 private ClickMode clickMode;
36
37 public ClickableWTable() {
38 this.clickMode = ClickMode.NONE;
39 init();
40 }
41
42 public ClickableWTable(WClickedListener lowerListener,
43 ClickMode selectionMode) {
44 this.wClickedListener = lowerListener;
45 this.clickMode = selectionMode;
46 init();
47 }
48
49 private void init() {
50 setWidth100();
51 setHeight100();
52 setSelectionType(SelectionStyle.NONE);
53 setSelectionType(SelectionStyle.NONE);
54 setShowHeaderContextMenu(false);
55 setShowRecordComponents(true);
56 setShowRecordComponentsByCell(true);
57 setEmptyMessage(MESSAGE.empty_table());
58
59 ListGridField name = new ListGridField("name", MESSAGE.name());
60 name.setType(ListGridFieldType.TEXT);
61 name.setWidth("*");
62
63 ListGridField type = new ListGridField("type", MESSAGE.type());
64 type.setType(ListGridFieldType.TEXT);
65 type.setWidth("50");
66
67 final NumberFormat nf = NumberFormat.getDecimalFormat();
68
69 ListGridField value = new ListGridField("value", MESSAGE.wq_value_w());
70 value.setType(ListGridFieldType.FLOAT);
71 value.setCellFormatter(new CellFormatter() {
72
73 @Override
74 public String format(Object v, ListGridRecord r, int row, int col) {
75 if (v == null) {
76 return null;
77 }
78
79 try {
80 double value = Double.valueOf(v.toString());
81 return nf.format(value);
82 }
83 catch (NumberFormatException nfe) {
84 return v.toString();
85 }
86 }
87 });
88
89 switch (clickMode) {
90 case NONE:
91 setFields(name, type, value);
92 break;
93 case SINGLE:
94 initSingleClickMode(name, type, value);
95 break;
96 case RANGE:
97 initRangeClickMode(name, type, value);
98 break;
99 }
100 }
101
102 private void initSingleClickMode(ListGridField name, ListGridField type,
103 ListGridField value) {
104 ListGridField lower = new ListGridField("selection",
105 MESSAGE.selection());
106 lower.setType(ListGridFieldType.ICON);
107 lower.setWidth("65");
108 lower.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen());
109 addCellClickHandler(new CellClickHandler() {
110
111 @Override
112 public void onCellClick(CellClickEvent event) {
113 if (event.getColNum() == 0) {
114 Record r = event.getRecord();
115 double val = r.getAttributeAsDouble("value");
116 fireLowerClickEvent(val);
117 }
118 }
119 });
120
121 setFields(lower, name, type, value);
122 }
123
124 private void initRangeClickMode(ListGridField name, ListGridField type,
125 ListGridField value) {
126 ListGridField lower = new ListGridField("lower", MESSAGE.lower());
127 lower.setType(ListGridFieldType.ICON);
128 lower.setWidth("50");
129 lower.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerRed());
130 addCellClickHandler(new CellClickHandler() {
131
132 @Override
133 public void onCellClick(CellClickEvent event) {
134 if (event.getColNum() == 0) {
135 Record r = event.getRecord();
136 double val = r.getAttributeAsDouble("value");
137 fireLowerClickEvent(val);
138 }
139 }
140 });
141
142 ListGridField upper = new ListGridField("upper", MESSAGE.upper());
143 upper.setType(ListGridFieldType.ICON);
144 upper.setWidth("50");
145 upper.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen());
146 addCellClickHandler(new CellClickHandler() {
147
148 @Override
149 public void onCellClick(CellClickEvent event) {
150 if (event.getColNum() == 1) {
151 Record r = event.getRecord();
152 double val = r.getAttributeAsDouble("value");
153 fireUpperClickEvent(val);
154 }
155 }
156 });
157
158 setFields(lower, upper, name, type, value);
159 }
160
161 private void fireLowerClickEvent(double value) {
162 if (wClickedListener != null) {
163 wClickedListener.clickedLower(value);
164 }
165 }
166
167 private void fireUpperClickEvent(double value) {
168 if (wClickedListener != null) {
169 wClickedListener.clickedUpper(value);
170 }
171 }
172 }

http://dive4elements.wald.intevation.org