From 98b0268167ff2454cac41dac9f1ab2874886cc77 Mon Sep 17 00:00:00 2001 From: Jouni Koivuviita Date: Thu, 19 Apr 2012 14:52:53 +0300 Subject: [PATCH] Fixed BoxLayout so that it notifies layout manager when expand size changes --- .../client/ui/AbstractBoxLayoutConnector.java | 10 ++++---- .../terminal/gwt/client/ui/VBoxLayout.java | 24 +++++++++++++------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractBoxLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractBoxLayoutConnector.java index 087e1a5c15..b88c700e04 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractBoxLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractBoxLayoutConnector.java @@ -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()); diff --git a/src/com/vaadin/terminal/gwt/client/ui/VBoxLayout.java b/src/com/vaadin/terminal/gwt/client/ui/VBoxLayout.java index bb220877bd..e2f09d354e 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VBoxLayout.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VBoxLayout.java @@ -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); + } } } } -- 2.39.5