comparison gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LinkSelection.java @ 5928:34392dc16546

Implemented interaction design in project startup page.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 08 May 2013 16:34:45 +0200
parents 172338b1407f
children 5de1b9faebf5
comparison
equal deleted inserted replaced
5927:d53e39372a25 5928:34392dc16546
6 * documentation coming with Dive4Elements River for details. 6 * documentation coming with Dive4Elements River for details.
7 */ 7 */
8 8
9 package org.dive4elements.river.client.client.ui; 9 package org.dive4elements.river.client.client.ui;
10 10
11 import java.util.HashMap;
12 import java.util.LinkedHashMap;
13 import java.util.Map;
14
11 import com.google.gwt.core.client.GWT; 15 import com.google.gwt.core.client.GWT;
12 16
13 import com.smartgwt.client.types.VerticalAlignment; 17 import com.smartgwt.client.types.VerticalAlignment;
14 import com.smartgwt.client.widgets.Canvas; 18 import com.smartgwt.client.widgets.Canvas;
19 import com.smartgwt.client.widgets.HTMLPane;
15 import com.smartgwt.client.widgets.Img; 20 import com.smartgwt.client.widgets.Img;
16 import com.smartgwt.client.widgets.Label; 21 import com.smartgwt.client.widgets.Label;
17 import com.smartgwt.client.widgets.form.DynamicForm; 22 import com.smartgwt.client.widgets.form.DynamicForm;
18 import com.smartgwt.client.widgets.form.fields.LinkItem; 23 import com.smartgwt.client.widgets.form.fields.LinkItem;
19 import com.smartgwt.client.widgets.form.fields.events.ClickEvent; 24 import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
20 import com.smartgwt.client.widgets.form.fields.events.ClickHandler; 25 import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
26 import com.smartgwt.client.widgets.form.fields.events.ItemHoverEvent;
27 import com.smartgwt.client.widgets.form.fields.events.ItemHoverHandler;
21 import com.smartgwt.client.widgets.layout.HLayout; 28 import com.smartgwt.client.widgets.layout.HLayout;
22 import com.smartgwt.client.widgets.layout.VLayout; 29 import com.smartgwt.client.widgets.layout.VLayout;
23 30
24 import org.dive4elements.river.client.client.FLYSConstants; 31 import org.dive4elements.river.client.client.FLYSConstants;
25 import org.dive4elements.river.client.client.event.StepForwardEvent; 32 import org.dive4elements.river.client.client.event.StepForwardEvent;
44 /** The message class that provides i18n strings.*/ 51 /** The message class that provides i18n strings.*/
45 protected FLYSConstants messages = GWT.create(FLYSConstants.class); 52 protected FLYSConstants messages = GWT.create(FLYSConstants.class);
46 53
47 /** The selected river*/ 54 /** The selected river*/
48 protected Data river; 55 protected Data river;
56 private static Map<String, LinkItem> rivers;
57
58 private static Trigger trigger;
59
60 private Canvas module;
61
62 private class Trigger {
63
64 private LinkSelection ls;
65
66 public Trigger(LinkSelection ls) {
67 this.ls = ls;
68 // TODO Auto-generated constructor stub
69 }
70
71 public void trigger(String name) {
72 DataItem item = new DefaultDataItem(
73 name,
74 null,
75 name);
76
77 river = new DefaultData(
78 "river",
79 null,
80 null,
81 new DataItem [] {item});
82 this.ls.fireStepForwardEvent (new StepForwardEvent (getData()));
83 }
84 }
49 85
50 /** 86 /**
51 * This method currently returns a 87 * This method currently returns a
52 * {@link com.smartgwt.client.widgets.form.DynamicForm} that contains all 88 * {@link com.smartgwt.client.widgets.form.DynamicForm} that contains all
53 * data items in a list of links stored in <i>data</i>. 89 * data items in a list of links stored in <i>data</i>.
56 * 92 *
57 * @return a combobox. 93 * @return a combobox.
58 */ 94 */
59 @Override 95 @Override
60 public Canvas create(DataList data) { 96 public Canvas create(DataList data) {
97 trigger = new Trigger(this);
98 createCallback();
99 rivers = new HashMap<String, LinkItem>();
100
61 VLayout v = new VLayout(); 101 VLayout v = new VLayout();
62 v.setMembersMargin(10); 102 v.setMembersMargin(10);
63 v.setAlign(VerticalAlignment.TOP); 103 v.setAlign(VerticalAlignment.TOP);
64 if (data.getState() == null) { 104 if (data.getState() == null) {
65 Canvas module = super.createWidget(data); 105 module = super.createWidget(data);
66 v.addMember(module); 106 v.addMember(module);
107 }
108 else {
109 module = null;
67 } 110 }
68 Canvas content = createWidget(data); 111 Canvas content = createWidget(data);
69 v.addMember(content); 112 v.addMember(content);
70 113
71 return v; 114 return v;
119 GWT.log("LinkSelection - create()"); 162 GWT.log("LinkSelection - create()");
120 163
121 VLayout layout = new VLayout(); 164 VLayout layout = new VLayout();
122 layout.setAlign(VerticalAlignment.TOP); 165 layout.setAlign(VerticalAlignment.TOP);
123 layout.setHeight(25); 166 layout.setHeight(25);
124 167 HLayout colums = new HLayout();
125 VLayout formLayout = new VLayout(); 168 VLayout formLayout1 = new VLayout();
126 169 VLayout formLayout2 = new VLayout();
127 formLayout.setLayoutLeftMargin(60); 170
171 formLayout1.setLayoutLeftMargin(60);
172
128 int size = data.size(); 173 int size = data.size();
129 174
130 for (int i = 0; i < size; i++) { 175 for (int i = 0; i < size; i++) {
131 Data d = data.get(i); 176 Data d = data.get(i);
132 177
133 Label label = new Label(d.getDescription()); 178 Label label = new Label(d.getDescription());
134 label.setValign(VerticalAlignment.TOP); 179 label.setValign(VerticalAlignment.TOP);
135 label.setHeight(20); 180 label.setHeight(20);
136 181 label.setWidth(400);
182 LinkedHashMap<String, String> it = new LinkedHashMap<String, String>();
183 boolean defaultSet = false;
184 boolean first = true;
185 DataItem def = d.getDefault();
186 String defValue = def != null ? def.getStringValue() : null;
187
188 if (defValue != null && defValue.length() > 0) {
189 defaultSet = true;
190 }
191
192 int counter = 0;
137 for (DataItem item: d.getItems()) { 193 for (DataItem item: d.getItems()) {
138 LinkItem link = new LinkItem("river"); 194 LinkItem link = new LinkItem("river");
139 link.setLinkTitle(item.getLabel()); 195 link.setLinkTitle(item.getLabel());
140 link.setTarget(item.getStringValue()); 196 link.setTarget(item.getStringValue());
141 link.setShowTitle(false); 197 link.setShowTitle(false);
142 DynamicForm f = new DynamicForm(); 198 DynamicForm f = new DynamicForm();
199 rivers.put(item.getStringValue(), link);
200
143 f.setItems(link); 201 f.setItems(link);
144 formLayout.addMember(f); 202 if (counter < d.getItems().length/2) {
203 formLayout1.addMember(f);
204 }
205 else {
206 formLayout2.addMember(f);
207 }
208 counter++;
209
145 link.addClickHandler(new ClickHandler() { 210 link.addClickHandler(new ClickHandler() {
146 @Override 211 @Override
147 public void onClick(ClickEvent event) { 212 public void onClick(ClickEvent event) {
148 DataItem item = new DefaultDataItem( 213 DataItem item = new DefaultDataItem(
149 ((LinkItem)event.getItem()).getLinkTitle(), 214 ((LinkItem)event.getItem()).getLinkTitle(),
156 null, 221 null,
157 new DataItem [] {item}); 222 new DataItem [] {item});
158 fireStepForwardEvent (new StepForwardEvent (getData())); 223 fireStepForwardEvent (new StepForwardEvent (getData()));
159 } 224 }
160 }); 225 });
161 226 link.addItemHoverHandler(new ItemHoverHandler() {
227 @Override
228 public void onItemHover(ItemHoverEvent event) {
229 String river = ((LinkItem)event.getItem()).getLinkTitle();
230 for (String s : rivers.keySet()) {
231 LinkItem item = rivers.get(s);
232 if (item.getLinkTitle().equals(river)) {
233 item.setCellStyle("riverLinkHighlight");
234 }
235 else {
236 item.setCellStyle("formCell");
237 callUnHighlightRiver(s);
238 }
239 }
240 callHighlightRiver(river);
241 }
242 });
243 }
244
245 if (module != null) {
246 getModuleSelection().setRivers(rivers);
162 } 247 }
163 label.setWidth(50); 248 label.setWidth(50);
164 249
165 layout.addMember(label); 250 layout.addMember(label);
166 layout.addMember(formLayout); 251 colums.addMember(formLayout1);
167 } 252 colums.addMember(formLayout2);
168 layout.setAlign(VerticalAlignment.TOP); 253 layout.addMember(colums);
169 254
170 String baseUrl = GWT.getHostPageBaseURL(); 255 }
171 Img map = new Img(baseUrl + messages.riverMap(), 494, 582); 256 layout.addMember(getNextButton());
257 HTMLPane map = new HTMLPane();
258 map.setContentsURL("images/FLYS_Karte_interactive.html");
259
172 helperContainer.addMember(map); 260 helperContainer.addMember(map);
173
174 return layout; 261 return layout;
175 } 262 }
176 263
177 264
178 @Override 265 @Override
183 } 270 }
184 else { 271 else {
185 return new Data[] {river}; 272 return new Data[] {river};
186 } 273 }
187 } 274 }
275
276 private native void createCallback() /*-{
277 $wnd.highlightRiver = @org.dive4elements.river.client.client.ui.LinkSelection::highlightCallback(Ljava/lang/String;);
278 $wnd.selectRiver = @org.dive4elements.river.client.client.ui.LinkSelection::selectCallback(Ljava/lang/String;);
279 $wnd.availableRiver = @org.dive4elements.river.client.client.ui.LinkSelection::availableRiver(Ljava/lang/String;);
280 }-*/;
281
282 private static void highlightCallback(String name) {
283 for (String s : rivers.keySet()) {
284 if (s.equals(name)) {
285 LinkItem item = rivers.get(name);
286 item.setCellStyle("riverLinkHighlight");
287 item.redraw();
288 }
289 else {
290 LinkItem item = rivers.get(s);
291 item.setCellStyle("formCell");
292 item.redraw();
293 }
294 }
295 }
296
297 private static boolean availableRiver(String river) {
298 if (rivers.containsKey(river)) {
299 if(rivers.get(river).isVisible()) {
300 return true;
301 }
302 }
303 return false;
304 }
305
306 private static void selectCallback(String name) {
307 trigger.trigger(name);
308 }
309
310 private native void callHighlightRiver(String name) /*-{
311 $wnd.highlight(name);
312 }-*/;
313
314 private native void callUnHighlightRiver(String name) /*-{
315 $wnd.unHighlight(name);
316 }-*/;
188 } 317 }
189 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 318 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org