]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixed BoxLayout so that it notifies layout manager when expand size changes
authorJouni Koivuviita <jouni@jounikoivuviita.com>
Thu, 19 Apr 2012 11:52:53 +0000 (14:52 +0300)
committerJouni Koivuviita <jouni@jounikoivuviita.com>
Thu, 19 Apr 2012 11:52:53 +0000 (14:52 +0300)
src/com/vaadin/terminal/gwt/client/ui/AbstractBoxLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/VBoxLayout.java

index 087e1a5c155771dcfe85e6edd15a8af1cb297c6b..b88c700e0455a4d8c2d2aa611395d1e4c26d4527 100644 (file)
@@ -121,7 +121,7 @@ public abstract class AbstractBoxLayoutConnector extends
         ValueMap alignments = uidl.getMapAttribute("alignments");
 
         for (ComponentConnector child : getChildren()) {
-            Slot slot = layout.getSlot(child.getWidget());
+            Slot slot = layout.getSlot(child);
             String pid = child.getConnectorId();
 
             AlignmentInfo alignment;
@@ -180,7 +180,7 @@ public abstract class AbstractBoxLayoutConnector extends
     }
 
     public void updateCaption(ComponentConnector child) {
-        Slot slot = getWidget().getSlot(child.getWidget());
+        Slot slot = getWidget().getSlot(child);
 
         String caption = child.getState().getCaption();
         String iconUrl = child.getState().getIcon() != null ? child.getState()
@@ -237,7 +237,7 @@ public abstract class AbstractBoxLayoutConnector extends
 
         for (ComponentConnector child : getChildren()) {
             Widget childWidget = child.getWidget();
-            Slot slot = layout.getSlot(childWidget);
+            Slot slot = layout.getSlot(child);
             if (slot.getParent() != layout) {
                 child.addStateChangeHandler(childStateChangeHandler);
             }
@@ -246,7 +246,7 @@ public abstract class AbstractBoxLayoutConnector extends
 
         for (ComponentConnector child : previousChildren) {
             if (child.getParent() != this) {
-                Slot slot = layout.getSlot(child.getWidget());
+                Slot slot = layout.getSlot(child);
                 hasVerticalAlignment.remove(child);
                 hasRelativeHeight.remove(child);
                 hasExpandRatio.remove(child);
@@ -302,7 +302,7 @@ public abstract class AbstractBoxLayoutConnector extends
 
             // We need to update the slot size if the component size is changed
             // to relative
-            Slot slot = getWidget().getSlot(child.getWidget());
+            Slot slot = getWidget().getSlot(child);
             slot.setRelativeWidth(child.isRelativeWidth());
             slot.setRelativeHeight(child.isRelativeHeight());
 
index bb220877bdae46c233f1bf33b86ce00aa7b5ba82..e2f09d354e0d24df2763f471a87f8e98377b57c7 100644 (file)
@@ -19,6 +19,7 @@ import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.UIObject;
 import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.LayoutManager;
 
 public class VBoxLayout extends FlowPanel {
@@ -88,17 +89,17 @@ public class VBoxLayout extends FlowPanel {
     }
 
     public Slot removeSlot(Widget widget) {
-        Slot slot = getSlot(widget);
+        Slot slot = widgetToSlot.get(widget);
         remove(slot);
         widgetToSlot.remove(widget);
         return slot;
     }
 
-    public Slot getSlot(Widget widget) {
-        Slot slot = widgetToSlot.get(widget);
+    public Slot getSlot(ComponentConnector connector) {
+        Slot slot = widgetToSlot.get(connector.getWidget());
         if (slot == null) {
-            slot = new Slot(widget);
-            widgetToSlot.put(widget, slot);
+            slot = new Slot(connector);
+            widgetToSlot.put(connector.getWidget(), slot);
         }
         return slot;
     }
@@ -109,6 +110,8 @@ public class VBoxLayout extends FlowPanel {
 
     protected class Slot extends SimplePanel {
 
+        private ComponentConnector connector;
+
         private Element spacer;
 
         private Element captionWrap;
@@ -125,8 +128,9 @@ public class VBoxLayout extends FlowPanel {
         private AlignmentInfo alignment;
         private double expandRatio = -1;
 
-        public Slot(Widget widget) {
-            setWidget(widget);
+        public Slot(ComponentConnector connector) {
+            this.connector = connector;
+            setWidget(connector.getWidget());
             setStylePrimaryName("v-slot");
         }
 
@@ -565,8 +569,14 @@ public class VBoxLayout extends FlowPanel {
                 if (vertical) {
                     slot.setHeight((100 * (slot.getExpandRatio() / total))
                             + "%");
+                    if (slot.connector.isRelativeHeight()) {
+                        layoutManager.setNeedsMeasure(slot.connector);
+                    }
                 } else {
                     slot.setWidth((100 * (slot.getExpandRatio() / total)) + "%");
+                    if (slot.connector.isRelativeWidth()) {
+                        layoutManager.setNeedsMeasure(slot.connector);
+                    }
                 }
             }
         }