comparison flys-client/src/main/java/de/intevation/flys/client/client/ui/LinkSelection.java @ 5815:2aabd9752d5e interaktive-karte

Initial interaction model for riverselection on image map.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 24 Apr 2013 15:14:56 +0200
parents b87073a05f9d
children
comparison
equal deleted inserted replaced
5814:f145a0ce38f2 5815:2aabd9752d5e
1 package de.intevation.flys.client.client.ui; 1 package de.intevation.flys.client.client.ui;
2 2
3 import java.util.HashMap;
4 import java.util.LinkedHashMap;
5 import java.util.Map;
6
3 import com.google.gwt.core.client.GWT; 7 import com.google.gwt.core.client.GWT;
4
5 import com.smartgwt.client.types.VerticalAlignment; 8 import com.smartgwt.client.types.VerticalAlignment;
6 import com.smartgwt.client.widgets.Canvas; 9 import com.smartgwt.client.widgets.Canvas;
7 import com.smartgwt.client.widgets.Img; 10 import com.smartgwt.client.widgets.HTMLPane;
8 import com.smartgwt.client.widgets.Label; 11 import com.smartgwt.client.widgets.Label;
9 import com.smartgwt.client.widgets.form.DynamicForm; 12 import com.smartgwt.client.widgets.form.DynamicForm;
10 import com.smartgwt.client.widgets.form.fields.LinkItem; 13 import com.smartgwt.client.widgets.form.fields.LinkItem;
11 import com.smartgwt.client.widgets.form.fields.events.ClickEvent; 14 import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
12 import com.smartgwt.client.widgets.form.fields.events.ClickHandler; 15 import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
16 import com.smartgwt.client.widgets.form.fields.events.ItemHoverEvent;
17 import com.smartgwt.client.widgets.form.fields.events.ItemHoverHandler;
13 import com.smartgwt.client.widgets.layout.HLayout; 18 import com.smartgwt.client.widgets.layout.HLayout;
14 import com.smartgwt.client.widgets.layout.VLayout; 19 import com.smartgwt.client.widgets.layout.VLayout;
15 20
16 import de.intevation.flys.client.client.FLYSConstants; 21 import de.intevation.flys.client.client.FLYSConstants;
17 import de.intevation.flys.client.client.event.StepForwardEvent; 22 import de.intevation.flys.client.client.event.StepForwardEvent;
37 protected FLYSConstants messages = GWT.create(FLYSConstants.class); 42 protected FLYSConstants messages = GWT.create(FLYSConstants.class);
38 43
39 /** The selected river*/ 44 /** The selected river*/
40 protected Data river; 45 protected Data river;
41 46
47 private static Map<String, LinkItem> rivers;
48
49 private static Trigger trigger;
50
51 private Canvas module;
52
53 private class Trigger {
54
55 private LinkSelection ls;
56
57 public Trigger(LinkSelection ls) {
58 this.ls = ls;
59 // TODO Auto-generated constructor stub
60 }
61
62 public void trigger(String name) {
63 DataItem item = new DefaultDataItem(
64 name,
65 null,
66 name);
67
68 river = new DefaultData(
69 "river",
70 null,
71 null,
72 new DataItem [] {item});
73 this.ls.fireStepForwardEvent (new StepForwardEvent (getData()));
74 }
75 }
42 /** 76 /**
43 * This method currently returns a 77 * This method currently returns a
44 * {@link com.smartgwt.client.widgets.form.DynamicForm} that contains all 78 * {@link com.smartgwt.client.widgets.form.DynamicForm} that contains all
45 * data items in a list of links stored in <i>data</i>. 79 * data items in a list of links stored in <i>data</i>.
46 * 80 *
48 * 82 *
49 * @return a combobox. 83 * @return a combobox.
50 */ 84 */
51 @Override 85 @Override
52 public Canvas create(DataList data) { 86 public Canvas create(DataList data) {
87 trigger = new Trigger(this);
88 createCallback();
89 rivers = new HashMap<String, LinkItem>();
53 VLayout v = new VLayout(); 90 VLayout v = new VLayout();
54 v.setMembersMargin(10); 91 v.setMembersMargin(10);
55 v.setAlign(VerticalAlignment.TOP); 92 v.setAlign(VerticalAlignment.TOP);
56 if (data.getState() == null) { 93 if (data.getState() == null) {
57 Canvas module = super.createWidget(data); 94 module = super.createWidget(data);
58 v.addMember(module); 95 v.addMember(module);
96 }
97 else {
98 module = null;
59 } 99 }
60 Canvas content = createWidget(data); 100 Canvas content = createWidget(data);
61 v.addMember(content); 101 v.addMember(content);
62 102
63 return v; 103 return v;
111 GWT.log("LinkSelection - create()"); 151 GWT.log("LinkSelection - create()");
112 152
113 VLayout layout = new VLayout(); 153 VLayout layout = new VLayout();
114 layout.setAlign(VerticalAlignment.TOP); 154 layout.setAlign(VerticalAlignment.TOP);
115 layout.setHeight(25); 155 layout.setHeight(25);
116 156 HLayout colums = new HLayout();
117 VLayout formLayout = new VLayout(); 157 VLayout formLayout1 = new VLayout();
118 158 VLayout formLayout2 = new VLayout();
119 formLayout.setLayoutLeftMargin(60); 159
160 formLayout1.setLayoutLeftMargin(60);
161
120 int size = data.size(); 162 int size = data.size();
121
122 for (int i = 0; i < size; i++) { 163 for (int i = 0; i < size; i++) {
123 Data d = data.get(i); 164 Data d = data.get(i);
124 165
125 Label label = new Label(d.getDescription()); 166 Label label = new Label(d.getDescription());
126 label.setValign(VerticalAlignment.TOP); 167 label.setValign(VerticalAlignment.TOP);
127 label.setHeight(20); 168 label.setHeight(20);
128 169 label.setWidth(400);
170
171 LinkedHashMap<String, String> it = new LinkedHashMap<String, String>();
172
173 boolean defaultSet = false;
174 boolean first = true;
175
176 DataItem def = d.getDefault();
177 String defValue = def != null ? def.getStringValue() : null;
178
179 if (defValue != null && defValue.length() > 0) {
180 defaultSet = true;
181 }
182
183 int counter = 0;
129 for (DataItem item: d.getItems()) { 184 for (DataItem item: d.getItems()) {
130 LinkItem link = new LinkItem("river"); 185 LinkItem link = new LinkItem("river");
131 link.setLinkTitle(item.getLabel()); 186 link.setLinkTitle(item.getLabel());
132 link.setTarget(item.getStringValue()); 187 link.setTarget(item.getStringValue());
133 link.setShowTitle(false); 188 link.setShowTitle(false);
134 DynamicForm f = new DynamicForm(); 189 DynamicForm f = new DynamicForm();
190 rivers.put(item.getStringValue(), link);
135 f.setItems(link); 191 f.setItems(link);
136 formLayout.addMember(f); 192 if (counter < d.getItems().length/2) {
193 formLayout1.addMember(f);
194 }
195 else {
196 formLayout2.addMember(f);
197 }
198 counter++;
137 link.addClickHandler(new ClickHandler() { 199 link.addClickHandler(new ClickHandler() {
138 @Override 200 @Override
139 public void onClick(ClickEvent event) { 201 public void onClick(ClickEvent event) {
140 DataItem item = new DefaultDataItem( 202 DataItem item = new DefaultDataItem(
141 ((LinkItem)event.getItem()).getLinkTitle(), 203 ((LinkItem)event.getItem()).getLinkTitle(),
142 null, 204 null,
143 ((LinkItem)event.getItem()).getLinkTitle()); 205 ((LinkItem)event.getItem()).getLinkTitle());
144
145 river = new DefaultData( 206 river = new DefaultData(
146 "river", 207 "river",
147 null, 208 null,
148 null, 209 null,
149 new DataItem [] {item}); 210 new DataItem [] {item});
150 fireStepForwardEvent (new StepForwardEvent (getData())); 211 fireStepForwardEvent (new StepForwardEvent (getData()));
151 } 212 }
152 }); 213 });
153 214 link.addItemHoverHandler(new ItemHoverHandler() {
215 @Override
216 public void onItemHover(ItemHoverEvent event) {
217 GWT.log(((LinkItem)event.getItem()).getLinkTitle());
218 String river = ((LinkItem)event.getItem()).getLinkTitle();
219 for (String s : rivers.keySet()) {
220 LinkItem item = rivers.get(s);
221 if (item.getLinkTitle().equals(s)) {
222 item.setCellStyle("riverLinkHighlight");
223 }
224 else {
225 item.setCellStyle("formCell");
226 }
227 }
228 callHighlightRiver(river);
229 }
230 });
231 }
232
233 if (module != null) {
234 getModuleSelection().setRivers(rivers);
154 } 235 }
155 label.setWidth(50); 236 label.setWidth(50);
156
157 layout.addMember(label); 237 layout.addMember(label);
158 layout.addMember(formLayout); 238 colums.addMember(formLayout1);
159 } 239 colums.addMember(formLayout2);
160 layout.setAlign(VerticalAlignment.TOP); 240 layout.addMember(colums);
161 241 }
162 String baseUrl = GWT.getHostPageBaseURL(); 242 layout.addMember(getNextButton());
163 Img map = new Img(baseUrl + messages.riverMap(), 494, 582); 243 HTMLPane map = new HTMLPane();
244 map.setContentsURL("images/FLYS_Karte_interactive.html");
164 helperContainer.addMember(map); 245 helperContainer.addMember(map);
165
166 return layout; 246 return layout;
167 } 247 }
168 248
169 249
170 @Override 250 @Override
171 protected Data[] getData() { 251 protected Data[] getData() {
172 Data[] module = super.getData(); 252 Data[] module = super.getData();
253
173 if (module != null) { 254 if (module != null) {
174 return new Data[] {module[0], river}; 255 return new Data[] {module[0], river};
175 } 256 }
176 else { 257 else {
177 return new Data[] {river}; 258 return new Data[] {river};
178 } 259 }
179 } 260 }
261
262 private native void createCallback() /*-{
263 $wnd.highlightRiver = @de.intevation.flys.client.client.ui.LinkSelection::highlightCallback(Ljava/lang/String;);
264 $wnd.selectRiver = @de.intevation.flys.client.client.ui.LinkSelection::selectCallback(Ljava/lang/String;);
265 }-*/;
266
267 private static void highlightCallback(String name) {
268 for (String s : rivers.keySet()) {
269 if (s.equals(name)) {
270 LinkItem item = rivers.get(name);
271 item.setCellStyle("riverLinkHighlight");
272 item.redraw();
273 }
274 else {
275 LinkItem item = rivers.get(s);
276 item.setCellStyle("formCell");
277 item.redraw();
278 }
279 }
280 }
281
282 private static void selectCallback(String name) {
283 trigger.trigger(name);
284 }
285
286 private native void callHighlightRiver(String name) /*-{
287 $wnd.highlight(name);
288 }-*/;
180 } 289 }
181 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 290 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org