From: Joonas Lehtinen Date: Fri, 4 Jul 2008 07:57:49 +0000 (+0000) Subject: Fixes #1907 : Switching between horizontal and vertical modes broken in IOrderedLayout X-Git-Tag: 6.7.0.beta1~4468 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6e2a93f27c0a363eacc5822caf670dfbdaf25c66;p=vaadin-framework.git Fixes #1907 : Switching between horizontal and vertical modes broken in IOrderedLayout svn changeset:5055/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java index e0ed8a1102..c81ddc0f84 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java @@ -157,14 +157,38 @@ public class IOrderedLayout extends Panel implements Container, return; } + // Remove fixed state + removeFixedSizes(); + orientationMode = newOrientationMode; createAndEmptyWrappedChildContainer(); // Reinsert all widget wrappers to this container for (int i = 0; i < childWidgetWrappers.size(); i++) { - DOM.appendChild(wrappedChildContainer, - ((WidgetWrapper) childWidgetWrappers.get(i)).getElement()); + WidgetWrapper wr = (WidgetWrapper) childWidgetWrappers.get(i); + Element oldWrElement = wr.resetRootElement(); + Element newWrElement = wr.getElement(); + String oldStyle = DOM.getElementAttribute(oldWrElement, "class"); + if (oldStyle != null) { + DOM.setElementAttribute(newWrElement, "class", oldStyle); + } + while (DOM.getChildCount(oldWrElement) > 0) { + Element c = DOM.getFirstChild(oldWrElement); + DOM.removeChild(oldWrElement, c); + DOM.appendChild(newWrElement, c); + } + + DOM.appendChild(wrappedChildContainer, newWrElement); + } + + // Reconsider being fixed + if ((orientationMode == ORIENTATION_HORIZONTAL && "100%".equals(DOM + .getStyleAttribute(margin, "width"))) + || (orientationMode == ORIENTATION_VERTICAL && "100%" + .equals(DOM.getStyleAttribute(margin, "height")))) { + fixedCellSize = true; + updateFixedSizes(); } // Update child layouts @@ -486,18 +510,30 @@ public class IOrderedLayout extends Panel implements Container, Element td; Caption caption = null; - /** Created td or div - depending on the orientation of the layout. */ + /** Set the root element */ public WidgetWrapper() { + resetRootElement(); + } + + /** + * Create td or div - depending on the orientation of the layout and set + * it as root. + * + * @return Previous root element. + */ + private Element resetRootElement() { + Element e = getElement(); if (orientationMode == ORIENTATION_VERTICAL) { setElement(DOM.createDiv()); // Apply 'hasLayout' for IE (needed to get accurate dimension // calculations) if (BrowserInfo.get().isIE()) { - DOM.setStyleAttribute(getElement(), "zoom", "1"); + DOM.setStyleAttribute(e, "zoom", "1"); } } else { setElement(DOM.createTD()); } + return e; } /** Update the caption of the element contained in this wrapper. */ diff --git a/src/com/itmill/toolkit/ui/OrderedLayout.java b/src/com/itmill/toolkit/ui/OrderedLayout.java index 97bceee1fa..a3c3da5392 100644 --- a/src/com/itmill/toolkit/ui/OrderedLayout.java +++ b/src/com/itmill/toolkit/ui/OrderedLayout.java @@ -218,15 +218,7 @@ public class OrderedLayout extends AbstractLayout implements this.orientation = orientation; - // requestRepaint() - // FIXME remove lines below and uncomment above - // Workaround to bypass IOrderedLayouts limitations (separate classes - // for different orientation + subtreecacing) - final Iterator it = getComponentIterator(); - while (it.hasNext()) { - final Component c = (Component) it.next(); - c.requestRepaint(); - } + requestRepaint(); } /* Documented in superclass */