} else if ("window".equals(tag)) {
return "com.itmill.toolkit.terminal.gwt.client.ui.IWindow";
} else if ("orderedlayout".equals(tag)) {
- if (uidl.hasAttribute("height")) {
- return "com.itmill.toolkit.terminal.gwt.client.ui.absolutegrid.ISizeableOrderedLayout";
- } else if ("horizontal".equals(uidl
- .getStringAttribute("orientation"))) {
- return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal";
+ if ("horizontal".equals(uidl.getStringAttribute("orientation"))) {
+ if (uidl.hasAttribute("height") && uidl.hasAttribute("width")) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.absolutegrid.ISizeableOrderedLayout";
+ } else {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal";
+ }
} else {
- return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical";
+ if (uidl.hasAttribute("height")) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.absolutegrid.ISizeableOrderedLayout";
+ } else {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical";
+ }
}
} else if ("label".equals(tag)) {
return "com.itmill.toolkit.terminal.gwt.client.ui.ILabel";
private boolean hasComponentSpacing;
+ private MarginInfo margins = new MarginInfo(0);
+
public IOrderedLayout(int orientation) {
orientationMode = orientation;
constructDOM();
}
// Handle layout margins
- handleMargins(uidl);
+ if (margins.getBitMask() != uidl.getIntAttribute("margins")) {
+ handleMargins(uidl);
+ }
//
hasComponentSpacing = uidl.getBooleanAttribute("spacing");
this.insert(child, index);
} else {
// insert new child before old one
- final int index = getPaintableIndex(oldChild); // TODO this returns wrong value if captions are used
+ final int index = getPaintableIndex(oldChild); // TODO this
+ // returns wrong
+ // value if
+ // captions are
+ // used
insert(child, index);
}
((Paintable) child).updateFromUIDL(childUidl, client);
public int getPaintableCount() {
int size = 0;
- for(Iterator it = getChildren().iterator(); it.hasNext();) {
+ for (Iterator it = getChildren().iterator(); it.hasNext();) {
Widget w = (Widget) it.next();
if (!(w instanceof Caption)) {
size++;
public int getPaintableIndex(Widget child) {
int i = 0;
- for(Iterator it = getChildren().iterator(); it.hasNext();) {
+ for (Iterator it = getChildren().iterator(); it.hasNext();) {
Widget w = (Widget) it.next();
if (w == child) {
return i;
}
protected void handleMargins(UIDL uidl) {
- final MarginInfo margins = new MarginInfo(uidl
- .getIntAttribute("margins"));
+ margins = new MarginInfo(uidl.getIntAttribute("margins"));
setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_TOP,
margins.hasTop());
setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_RIGHT,
\r
package com.itmill.toolkit.terminal.gwt.client.ui;\r
\r
-public class IOrderedLayoutHorizontal extends IOrderedLayout {\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