changeset 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 d53e39372a25
children 4d526e313fa0
files gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LinkSelection.java gwt-client/src/main/java/org/dive4elements/river/client/client/ui/MapSelection.java gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ModuleSelection.java
diffstat 3 files changed, 193 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LinkSelection.java	Wed May 08 16:32:23 2013 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/LinkSelection.java	Wed May 08 16:34:45 2013 +0200
@@ -8,16 +8,23 @@
 
 package org.dive4elements.river.client.client.ui;
 
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
 import com.google.gwt.core.client.GWT;
 
 import com.smartgwt.client.types.VerticalAlignment;
 import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.HTMLPane;
 import com.smartgwt.client.widgets.Img;
 import com.smartgwt.client.widgets.Label;
 import com.smartgwt.client.widgets.form.DynamicForm;
 import com.smartgwt.client.widgets.form.fields.LinkItem;
 import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
 import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+import com.smartgwt.client.widgets.form.fields.events.ItemHoverEvent;
+import com.smartgwt.client.widgets.form.fields.events.ItemHoverHandler;
 import com.smartgwt.client.widgets.layout.HLayout;
 import com.smartgwt.client.widgets.layout.VLayout;
 
@@ -46,6 +53,35 @@
 
     /** The selected river*/
     protected Data river;
+    private static Map<String, LinkItem> rivers;
+
+    private static Trigger trigger;
+
+    private Canvas module;
+
+    private class Trigger {
+
+        private LinkSelection ls;
+
+        public Trigger(LinkSelection ls) {
+            this.ls = ls;
+            // TODO Auto-generated constructor stub
+        }
+
+        public void trigger(String name) {
+            DataItem item = new DefaultDataItem(
+                name,
+                null,
+                name);
+
+            river = new DefaultData(
+                "river",
+                null,
+                null,
+                new DataItem [] {item});
+            this.ls.fireStepForwardEvent (new StepForwardEvent (getData()));
+        }
+    }
 
     /**
      * This method currently returns a
@@ -58,13 +94,20 @@
      */
     @Override
     public Canvas create(DataList data) {
+        trigger = new Trigger(this);
+        createCallback();
+        rivers = new HashMap<String, LinkItem>();
+
         VLayout v = new VLayout();
         v.setMembersMargin(10);
         v.setAlign(VerticalAlignment.TOP);
         if (data.getState() == null) {
-            Canvas module = super.createWidget(data);
+            module = super.createWidget(data);
             v.addMember(module);
         }
+        else {
+            module = null;
+        }
         Canvas content = createWidget(data);
         v.addMember(content);
 
@@ -121,10 +164,12 @@
         VLayout layout   = new VLayout();
         layout.setAlign(VerticalAlignment.TOP);
         layout.setHeight(25);
+        HLayout colums = new HLayout();
+        VLayout formLayout1 = new VLayout();
+        VLayout formLayout2 = new VLayout();
 
-        VLayout formLayout = new VLayout();
+        formLayout1.setLayoutLeftMargin(60);
 
-        formLayout.setLayoutLeftMargin(60);
         int size = data.size();
 
         for (int i = 0; i < size; i++) {
@@ -133,15 +178,35 @@
             Label label = new Label(d.getDescription());
             label.setValign(VerticalAlignment.TOP);
             label.setHeight(20);
+            label.setWidth(400);
+            LinkedHashMap<String, String> it = new LinkedHashMap<String, String>();
+            boolean  defaultSet = false;
+            boolean  first      = true;
+            DataItem def      = d.getDefault();
+            String   defValue = def != null ? def.getStringValue() : null;
 
+            if (defValue != null && defValue.length() > 0) {
+                defaultSet = true;
+            }
+
+            int counter = 0;
             for (DataItem item: d.getItems()) {
                 LinkItem link = new LinkItem("river");
                 link.setLinkTitle(item.getLabel());
                 link.setTarget(item.getStringValue());
                 link.setShowTitle(false);
                 DynamicForm f = new DynamicForm();
+                rivers.put(item.getStringValue(), link);
+
                 f.setItems(link);
-                formLayout.addMember(f);
+                if (counter < d.getItems().length/2) {
+                    formLayout1.addMember(f);
+                }
+                else {
+                    formLayout2.addMember(f);
+                }
+                counter++;
+
                 link.addClickHandler(new ClickHandler() {
                     @Override
                     public void onClick(ClickEvent event) {
@@ -158,19 +223,41 @@
                         fireStepForwardEvent (new StepForwardEvent (getData()));
                     }
                 });
+                link.addItemHoverHandler(new ItemHoverHandler() {
+                    @Override
+                    public void onItemHover(ItemHoverEvent event) {
+                        String river = ((LinkItem)event.getItem()).getLinkTitle();
+                        for (String s : rivers.keySet()) {
+                            LinkItem item = rivers.get(s);
+                            if (item.getLinkTitle().equals(river)) {
+                                item.setCellStyle("riverLinkHighlight");
+                            }
+                            else {
+                                item.setCellStyle("formCell");
+                                callUnHighlightRiver(s);
+                            }
+                        }
+                        callHighlightRiver(river);
+                    }
+                });
+            }
 
+            if (module != null) {
+                getModuleSelection().setRivers(rivers);
             }
             label.setWidth(50);
 
             layout.addMember(label);
-            layout.addMember(formLayout);
-        }
-        layout.setAlign(VerticalAlignment.TOP);
+            colums.addMember(formLayout1);
+            colums.addMember(formLayout2);
+            layout.addMember(colums);
 
-        String baseUrl = GWT.getHostPageBaseURL();
-        Img map = new Img(baseUrl + messages.riverMap(), 494, 582);
+        }
+        layout.addMember(getNextButton());
+        HTMLPane map = new HTMLPane();
+        map.setContentsURL("images/FLYS_Karte_interactive.html");
+
         helperContainer.addMember(map);
-
         return layout;
     }
 
@@ -185,5 +272,47 @@
             return new Data[] {river};
         }
     }
+
+    private native void createCallback() /*-{
+        $wnd.highlightRiver = @org.dive4elements.river.client.client.ui.LinkSelection::highlightCallback(Ljava/lang/String;);
+        $wnd.selectRiver = @org.dive4elements.river.client.client.ui.LinkSelection::selectCallback(Ljava/lang/String;);
+        $wnd.availableRiver = @org.dive4elements.river.client.client.ui.LinkSelection::availableRiver(Ljava/lang/String;);
+    }-*/;
+
+    private static void highlightCallback(String name) {
+        for (String s : rivers.keySet()) {
+            if (s.equals(name)) {
+                LinkItem item = rivers.get(name);
+                item.setCellStyle("riverLinkHighlight");
+                item.redraw();
+            }
+            else {
+                LinkItem item = rivers.get(s);
+                item.setCellStyle("formCell");
+                item.redraw();
+            }
+        }
+    }
+
+    private static boolean availableRiver(String river) {
+        if (rivers.containsKey(river)) {
+            if(rivers.get(river).isVisible()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static void selectCallback(String name) {
+        trigger.trigger(name);
+    }
+
+    private native void callHighlightRiver(String name) /*-{
+        $wnd.highlight(name);
+    }-*/;
+
+    private native void callUnHighlightRiver(String name) /*-{
+        $wnd.unHighlight(name);
+    }-*/;
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/MapSelection.java	Wed May 08 16:32:23 2013 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/MapSelection.java	Wed May 08 16:34:45 2013 +0200
@@ -76,5 +76,9 @@
             return null;
         }
     }
+
+    public ModuleSelection getModuleSelection() {
+        return this.moduleSelection;
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ModuleSelection.java	Wed May 08 16:32:23 2013 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/ModuleSelection.java	Wed May 08 16:34:45 2013 +0200
@@ -16,7 +16,10 @@
 import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.Label;
 import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.LinkItem;
 import com.smartgwt.client.widgets.form.fields.RadioGroupItem;
+import com.smartgwt.client.widgets.form.fields.events.ChangeEvent;
+import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
 import com.smartgwt.client.widgets.layout.HLayout;
 import com.smartgwt.client.widgets.layout.VLayout;
 
@@ -31,7 +34,10 @@
 import org.dive4elements.river.client.shared.model.DefaultDataItem;
 import org.dive4elements.river.client.shared.model.Module;
 
+import java.util.ArrayList;
 import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * The ModuleSelection combines the river selection and the module selection in
@@ -57,11 +63,26 @@
     /** The ModuleService used to retrieve the available modules of a user.*/
     protected ModuleServiceAsync moduleService = GWT.create(ModuleService.class);
 
+    private List<String> fixRivers;
+    private List<String> minfoRivers;
+    protected Map<String, LinkItem> rivers;
 
     /**
      * The default constructor.
      */
     public ModuleSelection() {
+        rivers = null;
+        //TODO: put all the rivers into a config file, or something.
+        fixRivers = new ArrayList<String>();
+        fixRivers.add("Rhein");
+        fixRivers.add("Elbe");
+        fixRivers.add("Donau");
+
+        minfoRivers = new ArrayList<String>();
+        minfoRivers.add("Elbe");
+        minfoRivers.add("Rhein");
+        minfoRivers.add("Oder");
+
         readModules();
     }
 
@@ -141,6 +162,27 @@
         DynamicForm form = new DynamicForm();
 
         radio = new RadioGroupItem("plugin");
+        radio.addChangeHandler(new ChangeHandler() {
+            @Override
+            public void onChange(ChangeEvent event) {
+                String selected = (String)event.getValue();
+                if (!rivers.isEmpty()) {
+                    for (Map.Entry<String, LinkItem> s: rivers.entrySet()) {
+                        if (selected.equals("minfo") && !minfoRivers.contains(s.getKey())) {
+                            s.getValue().hide();
+                        }
+                        else if (selected.equals("fixanalysis") && !fixRivers.contains(s.getKey())) {
+                            s.getValue().hide();
+                        }
+                        else {
+                            s.getValue().show();
+                            s.getValue().setCellStyle("formCell");
+                        }
+                        callUnHighlightRiver(s.getKey());
+                    }
+                }
+            }
+        });
 
         label.setWidth(50);
         label.setHeight(25);
@@ -180,5 +222,13 @@
 
         return new Data[] {data};
     }
+
+    public void setRivers(Map<String, LinkItem> rivers) {
+        this.rivers = rivers;
+    }
+
+    private native void callUnHighlightRiver(String name) /*-{
+        $wnd.unHighlight(name);
+    }-*/;
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org