Mercurial > dive4elements > river
comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/MultiPeriodPanel.java @ 2898:242b5c230707
Added UI for S-Q-relation parameters in minfo module.
flys-client/trunk@4636 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Mon, 11 Jun 2012 12:33:22 +0000 |
parents | |
children | 0de61fc9d281 |
comparison
equal
deleted
inserted
replaced
2897:133820d1e6bf | 2898:242b5c230707 |
---|---|
1 package de.intevation.flys.client.client.ui; | |
2 | |
3 import java.util.List; | |
4 import java.util.ArrayList; | |
5 import java.util.Date; | |
6 | |
7 import com.google.gwt.core.client.GWT; | |
8 import com.google.gwt.i18n.client.DateTimeFormat; | |
9 | |
10 import com.smartgwt.client.data.Record; | |
11 | |
12 import com.smartgwt.client.widgets.Canvas; | |
13 import com.smartgwt.client.widgets.Label; | |
14 import com.smartgwt.client.widgets.Button; | |
15 import com.smartgwt.client.widgets.events.ClickEvent; | |
16 import com.smartgwt.client.widgets.events.ClickHandler; | |
17 | |
18 import com.smartgwt.client.widgets.grid.ListGrid; | |
19 import com.smartgwt.client.widgets.grid.ListGridField; | |
20 import com.smartgwt.client.widgets.grid.ListGridRecord; | |
21 | |
22 import com.smartgwt.client.widgets.layout.HLayout; | |
23 import com.smartgwt.client.widgets.layout.VLayout; | |
24 | |
25 import com.smartgwt.client.types.ListGridFieldType; | |
26 | |
27 import com.smartgwt.client.widgets.grid.events.RecordClickEvent; | |
28 import com.smartgwt.client.widgets.grid.events.RecordClickHandler; | |
29 | |
30 import de.intevation.flys.client.shared.model.Data; | |
31 import de.intevation.flys.client.shared.model.DataItem; | |
32 import de.intevation.flys.client.shared.model.DataList; | |
33 import de.intevation.flys.client.shared.model.DefaultData; | |
34 import de.intevation.flys.client.shared.model.DefaultDataItem; | |
35 | |
36 /** | |
37 * This UIProvider creates a panel for location or distance input. | |
38 * | |
39 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> | |
40 */ | |
41 public class MultiPeriodPanel | |
42 extends PeriodPanel | |
43 { | |
44 | |
45 protected ListGrid elements; | |
46 | |
47 protected String values; | |
48 | |
49 public MultiPeriodPanel() { | |
50 this("", ""); | |
51 } | |
52 | |
53 public MultiPeriodPanel(String startName, String endName) { | |
54 super(startName, endName); | |
55 } | |
56 | |
57 public Canvas createWidget(DataList data) { | |
58 HLayout input = new HLayout(); | |
59 VLayout root = new VLayout(); | |
60 VLayout grid = new VLayout(); | |
61 VLayout layout = (VLayout) super.createWidget(data); | |
62 Button add = new Button(MSG.add_date()); | |
63 elements = new ListGrid(); | |
64 | |
65 add.addClickHandler(new ClickHandler() { | |
66 public void onClick(ClickEvent ce) { | |
67 Date f = inputPanel.getFromDate(); | |
68 Date t = inputPanel.getToDate(); | |
69 if (f == null || t == null) { | |
70 return; | |
71 } | |
72 DateRangeRecord drr = new DateRangeRecord(f, t); | |
73 elements.addData(drr); | |
74 } | |
75 }); | |
76 layout.addMember(add); | |
77 | |
78 Label sel = new Label(MSG.select()); | |
79 sel.setHeight(25); | |
80 elements.setWidth(185); | |
81 elements.setHeight(120); | |
82 elements.setShowHeaderContextMenu(false); | |
83 elements.setCanReorderFields(false); | |
84 elements.setCanSort(false); | |
85 elements.setCanEdit(false); | |
86 ListGridField from = new ListGridField("from", MSG.from()); | |
87 ListGridField to = new ListGridField("to", MSG.to()); | |
88 from.setWidth(70); | |
89 to.setWidth(70); | |
90 | |
91 final ListGridField removeField = | |
92 new ListGridField("_removeRecord", "Remove Record"){{ | |
93 setType(ListGridFieldType.ICON); | |
94 setIcon(GWT.getHostPageBaseURL() + MSG.removeFeature()); | |
95 setCanEdit(false); | |
96 setCanFilter(false); | |
97 setCanSort(false); | |
98 setCanGroupBy(false); | |
99 setCanFreeze(false); | |
100 setWidth(25); | |
101 }}; | |
102 | |
103 elements.addRecordClickHandler(new RecordClickHandler() { | |
104 public void onRecordClick(final RecordClickEvent event) { | |
105 // Just handle remove-clicks | |
106 if(!event.getField().getName().equals(removeField.getName())) { | |
107 return; | |
108 } | |
109 event.getViewer().removeData(event.getRecord()); | |
110 } | |
111 }); | |
112 | |
113 elements.setFields(from, to, removeField); | |
114 | |
115 grid.addMember(sel); | |
116 grid.addMember(elements); | |
117 input.addMember(layout); | |
118 input.addMember(grid); | |
119 root.addMember(input); | |
120 | |
121 return root; | |
122 } | |
123 | |
124 @Override | |
125 public Canvas createOld(DataList dataList) { | |
126 GWT.log("old............................"); | |
127 HLayout layout = new HLayout(); | |
128 layout.setWidth("400px"); | |
129 VLayout vLayout = new VLayout(); | |
130 vLayout.setWidth(130); | |
131 Label label = new Label(dataList.getLabel()); | |
132 label.setWidth("200px"); | |
133 label.setHeight(25); | |
134 | |
135 List<Data> items = dataList.getAll(); | |
136 Data str = getData(items, "periods"); | |
137 DataItem[] strItems = str.getItems(); | |
138 | |
139 String[] pairs = strItems[0].getLabel().split(";"); | |
140 for (int i = 0; i < pairs.length; i++) { | |
141 String[] vals = pairs[i].split(","); | |
142 long f = Long.valueOf(vals[0]).longValue(); | |
143 long t = Long.valueOf(vals[1]).longValue(); | |
144 Date from = new Date(f); | |
145 Date to = new Date(t); | |
146 String fromString = | |
147 DateTimeFormat.getMediumDateFormat().format(from); | |
148 String toString = | |
149 DateTimeFormat.getMediumDateFormat().format(to); | |
150 | |
151 Label dateLabel = new Label(fromString + " - " + toString); | |
152 dateLabel.setHeight(20); | |
153 vLayout.addMember(dateLabel); | |
154 } | |
155 Canvas back = getBackButton(dataList.getState()); | |
156 layout.addMember(label); | |
157 layout.addMember(vLayout); | |
158 layout.addMember(back); | |
159 | |
160 return layout; | |
161 } | |
162 | |
163 | |
164 /** | |
165 * This method returns the selected data. | |
166 * | |
167 * @return the selected/inserted data. | |
168 */ | |
169 public Data[] getData() { | |
170 List<Data> data = new ArrayList<Data>(); | |
171 | |
172 boolean valid = saveDateValues(); | |
173 if(valid) { | |
174 DataItem item = new DefaultDataItem("periods", null, this.values); | |
175 data.add(new DefaultData( | |
176 "periods", | |
177 null, | |
178 null, | |
179 new DataItem[] { item })); | |
180 } | |
181 return (Data[]) data.toArray(new Data[data.size()]); | |
182 } | |
183 | |
184 | |
185 protected boolean saveDateValues() { | |
186 ListGridRecord[] lgr = elements.getRecords(); | |
187 if (lgr.length == 0) { | |
188 return false; | |
189 } | |
190 String data = ""; | |
191 for (int i = 0; i < lgr.length; i++) { | |
192 DateRangeRecord drr = (DateRangeRecord) lgr[i]; | |
193 data += drr.getFrom() + "," + drr.getTo(); | |
194 data += ";"; | |
195 } | |
196 values = data; | |
197 return true; | |
198 } | |
199 | |
200 | |
201 protected static class DateRangeRecord extends ListGridRecord { | |
202 protected Date from; | |
203 protected Date to; | |
204 | |
205 protected final static String FROM_FIELD = "from"; | |
206 protected final static String TO_FIELD = "to"; | |
207 | |
208 public DateRangeRecord (Date from, Date to) { | |
209 setFrom(from); | |
210 setTo(to); | |
211 } | |
212 | |
213 public void setFrom(Date from) { | |
214 this.from = from; | |
215 setAttribute( | |
216 FROM_FIELD, | |
217 DateTimeFormat.getMediumDateFormat().format(from)); | |
218 } | |
219 | |
220 | |
221 public void setTo(Date to) { | |
222 this.to = to; | |
223 setAttribute( | |
224 TO_FIELD, | |
225 DateTimeFormat.getMediumDateFormat().format(to)); | |
226 } | |
227 | |
228 | |
229 public long getFrom() { | |
230 return this.from.getTime(); | |
231 } | |
232 | |
233 | |
234 public long getTo() { | |
235 return this.to.getTime(); | |
236 } | |
237 } | |
238 } |