import com.itmill.toolkit.terminal.gwt.client.ui.IMenuBar;
import com.itmill.toolkit.terminal.gwt.client.ui.INativeSelect;
import com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup;
-import com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal;
-import com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical;
+import com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayout;
import com.itmill.toolkit.terminal.gwt.client.ui.IPanel;
import com.itmill.toolkit.terminal.gwt.client.ui.IPasswordField;
import com.itmill.toolkit.terminal.gwt.client.ui.IPopupCalendar;
} else if ("com.itmill.toolkit.terminal.gwt.client.ui.IWindow"
.equals(className)) {
return new IWindow();
- } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical"
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayout"
.equals(className)) {
- return new IOrderedLayoutVertical();
- } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal"
- .equals(className)) {
- return new IOrderedLayoutHorizontal();
+ return new IOrderedLayout();
} else if ("com.itmill.toolkit.terminal.gwt.client.ui.ILabel"
.equals(className)) {
return new ILabel();
} else if ("window".equals(tag)) {
return "com.itmill.toolkit.terminal.gwt.client.ui.IWindow";
} else if ("orderedlayout".equals(tag)) {
- if ("horizontal".equals(uidl.getStringAttribute("orientation"))) {
- return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal";
- } else {
- return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical";
- }
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayout";
} else if ("label".equals(tag)) {
return "com.itmill.toolkit.terminal.gwt.client.ui.ILabel";
} else if ("link".equals(tag)) {
import com.itmill.toolkit.terminal.gwt.client.BrowserInfo;
import com.itmill.toolkit.terminal.gwt.client.Caption;
import com.itmill.toolkit.terminal.gwt.client.Container;
+import com.itmill.toolkit.terminal.gwt.client.ContainerResizedListener;
import com.itmill.toolkit.terminal.gwt.client.Paintable;
import com.itmill.toolkit.terminal.gwt.client.StyleConstants;
import com.itmill.toolkit.terminal.gwt.client.UIDL;
+import com.itmill.toolkit.terminal.gwt.client.Util;
/**
* Abstract base class for ordered layouts. Use either vertical or horizontal
*
* @author IT Mill Ltd
*/
-public abstract class IOrderedLayout extends Panel implements Container {
+public class IOrderedLayout extends Panel implements Container,
+ ContainerResizedListener {
public static final String CLASSNAME = "i-orderedlayout";
* Elements that provides the Layout interface implementation. Root element
* of the component. In vertical mode this is the outmost div.
*/
- private Element root;
+ private final Element root;
/**
* Margin element of the component. In vertical mode, this is div inside
/** Information about margin states. */
private MarginInfo margins = new MarginInfo(0);
- /** Construct a nre IOrderedLayout in given orientation mode. */
- public IOrderedLayout(int orientation) {
- orientationMode = orientation;
- constructDOM();
- setStyleName(CLASSNAME);
- }
-
/**
* Construct the DOM of the orderder layout.
*
* </p>
*
*/
- private void constructDOM() {
+ public IOrderedLayout() {
+
root = DOM.createDiv();
margin = DOM.createDiv();
DOM.appendChild(root, margin);
+ DOM.setStyleAttribute(margin, "overflow", "hidden");
+ createAndEmptyWrappedChildContainer();
+ setElement(root);
+ setStyleName(CLASSNAME);
+ }
+
+ private void createAndEmptyWrappedChildContainer() {
if (orientationMode == ORIENTATION_HORIZONTAL) {
final String structure = "<table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr></tr></tbody></table>";
DOM.setInnerHTML(margin, structure);
.getFirstChild(margin)));
} else {
wrappedChildContainer = margin;
+ DOM.setInnerHTML(margin, "");
}
- setElement(root);
+ }
+
+ /** Update orientation, if it has changed */
+ private void updateOrientation(int newOrientationMode) {
+
+ // Only change when needed
+ if (orientationMode == newOrientationMode) {
+ return;
+ }
+
+ 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());
+ }
+
+ Util.runDescendentsLayout(this);
}
/** Update the contents of the layout from UIDL. */
this.client = client;
+ updateOrientation("horizontal".equals(uidl
+ .getStringAttribute("orientation")) ? ORIENTATION_HORIZONTAL
+ : ORIENTATION_VERTICAL);
+
// Ensure correct implementation
if (client.updateComponent(this, uidl, false)) {
return;
public void setWidth(String width) {
super.setWidth(width);
- if (ORIENTATION_VERTICAL == orientationMode) {
- return;
- }
- if (width == null || "".equals(width)) {
- // Removing fixed size is needed only when it is in use
- if (fixedCellSize) {
+ if (width == null || "".equals(width)) {
+ DOM.setStyleAttribute(margin, "width", "");
+ if (fixedCellSize && orientationMode == ORIENTATION_HORIZONTAL) {
removeFixedSizes();
}
} else {
- fixedCellSize = true;
+ DOM.setStyleAttribute(margin, "width", "100%");
+ if (orientationMode == ORIENTATION_HORIZONTAL) {
+ fixedCellSize = true;
+ }
}
}
public void setHeight(String height) {
super.setHeight(height);
- if (ORIENTATION_HORIZONTAL == orientationMode) {
- return;
- }
+
if (height == null || "".equals(height)) {
+ DOM.setStyleAttribute(margin, "height", "");
// Removing fixed size is needed only when it is in use
- if (fixedCellSize) {
+ if (fixedCellSize && orientationMode == ORIENTATION_VERTICAL) {
removeFixedSizes();
}
} else {
- fixedCellSize = true;
+ DOM.setStyleAttribute(margin, "height", "100%");
+ if (orientationMode == ORIENTATION_VERTICAL) {
+ fixedCellSize = true;
+ }
}
}
for (Iterator i = childWidgetWrappers.iterator(); i.hasNext();) {
Element we = ((WidgetWrapper) i.next()).getElement();
DOM.setStyleAttribute(we, wh, "");
- DOM.setStyleAttribute(we, overflow, "");
+ DOM.setStyleAttribute(we, "overflow", "");
}
// margin
- DOM.setStyleAttribute(margin,
- (orientationMode == ORIENTATION_HORIZONTAL) ? "overflowX"
- : "overflowY", "");
DOM.setStyleAttribute(margin,
(orientationMode == ORIENTATION_HORIZONTAL) ? "width"
: "height", "");
return;
}
- DOM.setStyleAttribute(margin,
- (orientationMode == ORIENTATION_HORIZONTAL) ? "overflowX"
- : "overflowY", "hidden");
DOM.setStyleAttribute(margin,
(orientationMode == ORIENTATION_HORIZONTAL) ? "width"
: "height", "100%");
size -= ws;
DOM.setStyleAttribute(we, wh, "" + ws + "px");
if (firstTime) {
- DOM.setStyleAttribute(we, overflow, "hidden");
+ DOM.setStyleAttribute(we, "overflow", "hidden");
}
}
fixedCellSize = true;
+
+ Util.runDescendentsLayout(this);
}
protected void handleMargins(UIDL uidl) {
return childWidgets.iterator();
}
+ /* documented at super */
+ public void iLayout() {
+ updateFixedSizes();
+ Util.runDescendentsLayout(this);
+ }
}
\r
package com.itmill.toolkit.terminal.gwt.client.ui;\r
\r
-import com.google.gwt.user.client.DOM;\r
import com.itmill.toolkit.terminal.gwt.client.ContainerResizedListener;\r
-import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
-import com.itmill.toolkit.terminal.gwt.client.Util;\r
\r
public class IOrderedLayoutHorizontal extends IOrderedLayout implements\r
ContainerResizedListener {\r
-\r
- private String height;\r
- private boolean relativeHeight;\r
- private int marginHeight = 0;\r
-\r
- public IOrderedLayoutHorizontal() {\r
- super(ORIENTATION_HORIZONTAL);\r
- }\r
-\r
- public void setHeight(String newHeight) {\r
- super.setHeight(newHeight);\r
- if (newHeight != null && !newHeight.equals("")) {\r
- if (!newHeight.equals(height)) {\r
- height = newHeight;\r
- if (newHeight.indexOf("%") > 0) {\r
- relativeHeight = true;\r
- DOM.setStyleAttribute(getElement(), "overflow", "hidden");\r
- } else {\r
- relativeHeight = false;\r
- DOM.setStyleAttribute(getElement(), "overflow", "");\r
- }\r
- setInternalHeight();\r
- }\r
- } else {\r
- if (newHeight != null) {\r
- // clear existing height values\r
- DOM.setStyleAttribute(getElement(), "overflow", "");\r
- DOM.setStyleAttribute(DOM.getFirstChild(margin), "height", "");\r
-\r
- newHeight = null;\r
- relativeHeight = false;\r
- }\r
- }\r
- }\r
-\r
- protected void handleMargins(UIDL uidl) {\r
- super.handleMargins(uidl);\r
- if (height != null) {\r
- marginHeight = -1;\r
- setInternalHeight();\r
- }\r
- }\r
-\r
- private void setInternalHeight() {\r
- int availSpace = DOM\r
- .getElementPropertyInt(getElement(), "clientHeight");\r
- if (marginHeight < 0) {\r
- DOM.setStyleAttribute(margin, "height", height);\r
- int tmp = DOM.getElementPropertyInt(margin, "offsetHeight");\r
- marginHeight = tmp\r
- - DOM.getElementPropertyInt(getElement(), "clientHeight");\r
- DOM.setStyleAttribute(margin, "height", "");\r
- }\r
-\r
- availSpace -= marginHeight;\r
-\r
- DOM.setStyleAttribute(DOM.getFirstChild(margin), "height", availSpace\r
- + "px");\r
-\r
- }\r
-\r
- public void iLayout() {\r
- if (relativeHeight) {\r
- setInternalHeight();\r
- }\r
- Util.runDescendentsLayout(this);\r
- }\r
+ /*\r
+ * private String height; private boolean relativeHeight; private final int\r
+ * marginHeight = 0;\r
+ * \r
+ * public IOrderedLayoutHorizontal() { super(ORIENTATION_HORIZONTAL); }\r
+ */\r
+ /*\r
+ * public void setHeight(String newHeight) { super.setHeight(newHeight); if\r
+ * (newHeight != null && !newHeight.equals("")) { if\r
+ * (!newHeight.equals(height)) { height = newHeight; if\r
+ * (newHeight.indexOf("%") > 0) { relativeHeight = true;\r
+ * DOM.setStyleAttribute(getElement(), "overflow", "hidden"); } else {\r
+ * relativeHeight = false; DOM.setStyleAttribute(getElement(), "overflow",\r
+ * ""); } setInternalHeight(); } } else { if (newHeight != null) { // clear\r
+ * existing height values DOM.setStyleAttribute(getElement(), "overflow",\r
+ * ""); DOM.setStyleAttribute(DOM.getFirstChild(margin), "height", "");\r
+ * \r
+ * newHeight = null; relativeHeight = false; } } }\r
+ * \r
+ * protected void handleMargins(UIDL uidl) { super.handleMargins(uidl); if\r
+ * (height != null) { marginHeight = -1; setInternalHeight(); } }\r
+ * \r
+ * private void setInternalHeight() { int availSpace = DOM\r
+ * .getElementPropertyInt(getElement(), "clientHeight"); if (marginHeight <\r
+ * 0) { DOM.setStyleAttribute(margin, "height", height); int tmp =\r
+ * DOM.getElementPropertyInt(margin, "offsetHeight"); marginHeight = tmp -\r
+ * DOM.getElementPropertyInt(getElement(), "clientHeight");\r
+ * DOM.setStyleAttribute(margin, "height", ""); }\r
+ * \r
+ * availSpace -= marginHeight;\r
+ * \r
+ * DOM.setStyleAttribute(DOM.getFirstChild(margin), "height", availSpace +\r
+ * "px"); }\r
+ * \r
+ * public void iLayout() { if (relativeHeight) { setInternalHeight(); }\r
+ * Util.runDescendentsLayout(this); }\r
+ */\r
}\r