comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/wq/ClickableQDTable.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
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.types.ListGridFieldType;
6 import com.smartgwt.client.types.SelectionStyle;
7 import com.smartgwt.client.widgets.grid.CellFormatter;
8 import com.smartgwt.client.widgets.grid.ListGrid;
9 import com.smartgwt.client.widgets.grid.ListGridField;
10 import com.smartgwt.client.widgets.grid.ListGridRecord;
11 import com.smartgwt.client.widgets.grid.events.CellClickEvent;
12 import com.smartgwt.client.widgets.grid.events.CellClickHandler;
13
14 import de.intevation.flys.client.client.FLYSConstants;
15
16
17 /**
18 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
19 */
20 public class ClickableQDTable extends ListGrid {
21
22 public static enum ClickMode {
23 NONE, SINGLE, RANGE
24 }
25
26 public static interface QClickedListener {
27
28 void clickedLower(double value);
29
30 void clickedUpper(double value);
31 }
32
33 /** The message class that provides i18n strings. */
34 protected FLYSConstants MESSAGE = GWT.create(FLYSConstants.class);
35
36 private QClickedListener qClickedListener;
37 private ClickMode clickMode;
38
39 protected boolean lockClick;
40
41 public ClickableQDTable() {
42 this.clickMode = ClickMode.NONE;
43 init();
44 }
45
46 public ClickableQDTable(QClickedListener qClickedListener,
47 ClickMode clickMode) {
48 this.qClickedListener = qClickedListener;
49 this.clickMode = clickMode;
50 init();
51 }
52
53 private void init() {
54 setWidth100();
55 setHeight100();
56 setSelectionType(SelectionStyle.SINGLE);
57 setSelectionType(SelectionStyle.SINGLE);
58 setShowHeaderContextMenu(false);
59 setShowRecordComponents(true);
60 setShowRecordComponentsByCell(true);
61 setEmptyMessage(MESSAGE.empty_table());
62
63 ListGridField name = new ListGridField("name", MESSAGE.discharge());
64 name.setType(ListGridFieldType.TEXT);
65 name.setWidth("*");
66
67 ListGridField type = new ListGridField("type", MESSAGE.type());
68 type.setType(ListGridFieldType.TEXT);
69 type.setWidth("20%");
70
71 final NumberFormat nf = NumberFormat.getDecimalFormat();
72
73 ListGridField value = new ListGridField("value", MESSAGE.wq_value_q());
74 value.setType(ListGridFieldType.FLOAT);
75 value.setCellFormatter(new CellFormatter() {
76
77 @Override
78 public String format(Object v, ListGridRecord r, int row, int col) {
79 if (v == null) {
80 return null;
81 }
82
83 try {
84 double value = Double.valueOf(v.toString());
85 return nf.format(value);
86 }
87 catch (NumberFormatException nfe) {
88 return v.toString();
89 }
90 }
91 });
92 value.setWidth("20%");
93
94 switch (clickMode) {
95 case NONE:
96 setFields(name, type, value);
97 break;
98 case SINGLE:
99 initSingleClickMode(name, type, value);
100 break;
101 case RANGE:
102 initRangeClickMode(name, type, value);
103 break;
104 }
105 }
106
107 private void initSingleClickMode(ListGridField name, ListGridField type,
108 ListGridField value) {
109 ListGridField select = new ListGridField("select", MESSAGE.selection());
110 select.setType(ListGridFieldType.ICON);
111 select.setWidth(70);
112 select.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen());
113
114 addCellClickHandler(new CellClickHandler() {
115
116 @Override
117 public void onCellClick(CellClickEvent event) {
118 if (event.getColNum() == 0) {
119 ListGridRecord r = event.getRecord();
120 fireLowerClickEvent(r.getAttributeAsDouble("value"));
121 }
122 }
123 });
124
125 setFields(select, name, type, value);
126 }
127
128 private void initRangeClickMode(ListGridField name, ListGridField type,
129 ListGridField value) {
130 ListGridField addMin = new ListGridField("min", MESSAGE.to());
131 addMin.setType(ListGridFieldType.ICON);
132 addMin.setWidth(30);
133 addMin.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen());
134
135 ListGridField addMax = new ListGridField("max", MESSAGE.from());
136 addMax.setType(ListGridFieldType.ICON);
137 addMax.setWidth(30);
138 addMax.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerRed());
139
140 addCellClickHandler(new CellClickHandler() {
141
142 @Override
143 public void onCellClick(CellClickEvent event) {
144 if (event.getColNum() == 0) {
145 ListGridRecord r = event.getRecord();
146 fireLowerClickEvent(r.getAttributeAsDouble("value"));
147 }
148
149 if (event.getColNum() == 1) {
150 ListGridRecord r = event.getRecord();
151 fireUpperClickEvent(r.getAttributeAsDouble("value"));
152 }
153 }
154 });
155
156 setFields(addMin, addMax, name, type, value);
157 }
158
159 private void fireLowerClickEvent(double value) {
160 if (qClickedListener != null) {
161 qClickedListener.clickedLower(value);
162 }
163 }
164
165 private void fireUpperClickEvent(double value) {
166 if (qClickedListener != null) {
167 qClickedListener.clickedUpper(value);
168 }
169 }
170 }
171 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org