Mercurial > dive4elements > river
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 : |