]> source.dussan.org Git - vaadin-framework.git/commitdiff
experimental expand feature for ordered layout
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Fri, 17 Oct 2008 11:59:37 +0000 (11:59 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Fri, 17 Oct 2008 11:59:37 +0000 (11:59 +0000)
svn changeset:5653/svn branch:trunk

src/com/itmill/toolkit/ui/OrderedLayout.java

index ad85da4c87232a54e15661ef037bdc380f75d714..b088d9f29855b076336237788eb155a0e69cec4f 100644 (file)
@@ -8,6 +8,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import com.itmill.toolkit.terminal.PaintException;
 import com.itmill.toolkit.terminal.PaintTarget;
@@ -52,6 +53,8 @@ public class OrderedLayout extends AbstractLayout implements
      */
     private final Map componentToAlignment = new HashMap();
 
+    private final Map<Component, Float> componentToExpandRatio = new HashMap<Component, Float>();
+
     /**
      * Orientation of the layout.
      */
@@ -177,6 +180,16 @@ public class OrderedLayout extends AbstractLayout implements
         }
 
         final String[] alignmentsArray = new String[components.size()];
+        final Float[] expandRatioArray = new Float[components.size()];
+        float sum = getExpandRatioSum();
+        boolean equallyDevided = false;
+        if (sum == 0) {
+            equallyDevided = true;
+            float equalSize = 1 / components.size();
+            for (int i = 0; i < expandRatioArray.length; i++) {
+                expandRatioArray[i] = equalSize;
+            }
+        }
         // Adds all items in all the locations
         int index = 0;
         for (final Iterator i = components.iterator(); i.hasNext();) {
@@ -184,13 +197,28 @@ public class OrderedLayout extends AbstractLayout implements
             if (c != null) {
                 // Paint child component UIDL
                 c.paint(target);
-                alignmentsArray[index++] = String
+                alignmentsArray[index] = String
                         .valueOf(getComponentAlignment(c));
+                if (!equallyDevided) {
+                    float myRatio = getExpandRatio(c);
+                    expandRatioArray[index] = myRatio / sum;
+                }
+                index++;
             }
         }
 
         // Add child component alignment info to layout tag
         target.addAttribute("alignments", alignmentsArray);
+        target.addAttribute("expandRatios", expandRatioArray);
+    }
+
+    private float getExpandRatioSum() {
+        float sum = 0;
+        for (Iterator<Entry<Component, Float>> iterator = componentToExpandRatio
+                .entrySet().iterator(); iterator.hasNext();) {
+            sum += iterator.next().getValue();
+        }
+        return sum;
     }
 
     /**
@@ -314,4 +342,26 @@ public class OrderedLayout extends AbstractLayout implements
     public boolean isSpacingEnabled() {
         return spacing;
     }
+
+    /**
+     * TODO
+     * 
+     * @param component
+     * @param ratio
+     */
+    public void setExpandRatio(Component component, float ratio) {
+        componentToExpandRatio.put(component, ratio);
+    };
+
+    /**
+     * TODO
+     * 
+     * @param component
+     * @return
+     */
+    public float getExpandRatio(Component component) {
+        Float ratio = componentToExpandRatio.get(component);
+        return (ratio == null) ? 0 : ratio.floatValue();
+    }
+
 }