From: Jouni Koivuviita Date: Fri, 16 Nov 2007 09:50:15 +0000 (+0000) Subject: OrderedLayout and ExpandLayout alignment handling unified under one class, AlignmentI... X-Git-Tag: 6.7.0.beta1~5559 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=4651db8d1e1c2db4e55bf5a15b29f1984b1c75e0;p=vaadin-framework.git OrderedLayout and ExpandLayout alignment handling unified under one class, AlignmentInfo.java. svn changeset:2838/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/AlignmentInfo.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/AlignmentInfo.java new file mode 100644 index 0000000000..d2967e1593 --- /dev/null +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/AlignmentInfo.java @@ -0,0 +1,72 @@ +package com.itmill.toolkit.terminal.gwt.client.ui; + +public class AlignmentInfo { + + public static final int ALIGNMENT_LEFT = 1; + public static final int ALIGNMENT_RIGHT = 2; + public static final int ALIGNMENT_TOP = 4; + public static final int ALIGNMENT_BOTTOM = 8; + public static final int ALIGNMENT_HORIZONTAL_CENTER = 16; + public static final int ALIGNMENT_VERTICAL_CENTER = 32; + + private int bitMask; + + public AlignmentInfo(int bitMask) { + this.bitMask = bitMask; + } + + public AlignmentInfo(int horizontal, int vertical) { + setAlignment(horizontal, vertical); + } + + public void setAlignment(int horiz, int vert) { + bitMask = horiz + vert; + } + + public int getBitMask() { + return bitMask; + } + + public boolean isTop() { + return (bitMask & ALIGNMENT_TOP) == ALIGNMENT_TOP; + } + + public boolean isBottom() { + return (bitMask & ALIGNMENT_BOTTOM) == ALIGNMENT_BOTTOM; + } + + public boolean isLeft() { + return (bitMask & ALIGNMENT_LEFT) == ALIGNMENT_LEFT; + } + + public boolean isRight() { + return (bitMask & ALIGNMENT_RIGHT) == ALIGNMENT_RIGHT; + } + + public boolean isVerticalCenter() { + return (bitMask & ALIGNMENT_VERTICAL_CENTER) == ALIGNMENT_VERTICAL_CENTER; + } + + public boolean isHorizontalCenter() { + return (bitMask & ALIGNMENT_HORIZONTAL_CENTER) == ALIGNMENT_HORIZONTAL_CENTER; + } + + public String getVerticalAlignment() { + if (isBottom()) { + return "bottom"; + } else if (isVerticalCenter()) { + return "middle"; + } + return "top"; + } + + public String getHorizontalAlignment() { + if (isRight()) { + return "right"; + } else if (isHorizontalCenter()) { + return "center"; + } + return "left"; + } + +} diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IExpandLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IExpandLayout.java index bde5b6c543..fb0ee43b67 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IExpandLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IExpandLayout.java @@ -141,39 +141,8 @@ public class IExpandLayout extends IOrderedLayout implements */ ((Paintable) expandedWidget).updateFromUIDL(expandedWidgetUidl, client); - // Component alignments as a comma separated list. - // See com.itmill.toolkit.ui.OrderedLayout.java for possible values. - String[] alignments = uidl.getStringAttribute("alignments").split(","); - int alignmentIndex = 0; - - // Insert alignment attributes - Iterator it = getPaintables().iterator(); - while (it.hasNext()) { - - // Calculate alignment info - int alignment = Integer.parseInt((alignments[alignmentIndex++])); - // Vertical alignment - String vAlign = "top"; - if ((alignment & ALIGNMENT_TOP) == ALIGNMENT_TOP) - vAlign = "top"; - else if ((alignment & ALIGNMENT_BOTTOM) == ALIGNMENT_BOTTOM) - vAlign = "bottom"; - else if ((alignment & ALIGNMENT_VERTICAL_CENTER) == ALIGNMENT_VERTICAL_CENTER) - vAlign = "middle"; - // Horizontal alignment - String hAlign = ""; - if ((alignment & ALIGNMENT_LEFT) == ALIGNMENT_LEFT) - hAlign = "left"; - else if ((alignment & ALIGNMENT_RIGHT) == ALIGNMENT_RIGHT) - hAlign = "right"; - else if ((alignment & ALIGNMENT_HORIZONTAL_CENTER) == ALIGNMENT_HORIZONTAL_CENTER) - hAlign = "center"; - - Element td = DOM.getParent(((Widget) it.next()).getElement()); - DOM.setStyleAttribute(td, "vertical-align", vAlign); - // TODO use one-cell table to implement horizontal alignments - DOM.setStyleAttribute(td, "text-align", hAlign); - } + // Set component alignments + handleAlignments(uidl); } @@ -192,7 +161,6 @@ public class IExpandLayout extends IOrderedLayout implements String height = DOM.getStyleAttribute(table, "height"); DOM.setStyleAttribute(table, "height", ""); - // take expanded element temporarely out of flow to make container // minimum sized String originalPositioning = DOM.getStyleAttribute(expandedWidget @@ -218,7 +186,7 @@ public class IExpandLayout extends IOrderedLayout implements DOM.setStyleAttribute(DOM.getParent(expandedElement), "height", freeSpace + "px"); // Component margins will bleed if overflow is not hidden - //DOM.setStyleAttribute(expandedElement, "overflow", "hidden"); + // DOM.setStyleAttribute(expandedElement, "overflow", "hidden"); DOM.setStyleAttribute(expandedWidget.getElement(), "position", originalPositioning); 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 7ac6598706..1ebf559ad2 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java @@ -29,13 +29,6 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container { public static final int ORIENTATION_VERTICAL = 0; public static final int ORIENTATION_HORIZONTAL = 1; - public static final int ALIGNMENT_LEFT = 1; - public static final int ALIGNMENT_RIGHT = 2; - public static final int ALIGNMENT_TOP = 4; - public static final int ALIGNMENT_BOTTOM = 8; - public static final int ALIGNMENT_HORIZONTAL_CENTER = 16; - public static final int ALIGNMENT_VERTICAL_CENTER = 32; - int orientationMode = ORIENTATION_VERTICAL; protected HashMap componentToCaption = new HashMap(); @@ -169,41 +162,10 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container { removePaintable(p); } - // Component alignments as a comma separated list. - // See com.itmill.toolkit.ui.OrderedLayout.java for possible values. - int[] alignments = uidl.getIntArrayAttribute("alignments"); - - int alignmentIndex = 0; - - // Insert alignment attributes - Iterator it = getPaintables().iterator(); - while (it.hasNext()) { - - // Calculate alignment info - int alignment = alignments[alignmentIndex++]; - // Vertical alignment - String vAlign = "top"; - if ((alignment & ALIGNMENT_TOP) == ALIGNMENT_TOP) - vAlign = "top"; - else if ((alignment & ALIGNMENT_BOTTOM) == ALIGNMENT_BOTTOM) - vAlign = "bottom"; - else if ((alignment & ALIGNMENT_VERTICAL_CENTER) == ALIGNMENT_VERTICAL_CENTER) - vAlign = "middle"; - // Horizontal alignment - String hAlign = ""; - if ((alignment & ALIGNMENT_LEFT) == ALIGNMENT_LEFT) - hAlign = "left"; - else if ((alignment & ALIGNMENT_RIGHT) == ALIGNMENT_RIGHT) - hAlign = "right"; - else if ((alignment & ALIGNMENT_HORIZONTAL_CENTER) == ALIGNMENT_HORIZONTAL_CENTER) - hAlign = "center"; - - Element td = DOM.getParent(((Widget) it.next()).getElement()); - DOM.setStyleAttribute(td, "vertical-align", vAlign); - // TODO use one-cell table to implement horizontal alignments - DOM.setStyleAttribute(td, "text-align", hAlign); - } + // Handle component alignments + handleAlignments(uidl); + // Handle layout margins handleMargins(uidl); } @@ -294,7 +256,7 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container { */ protected Element createWidgetWrappper() { Element td = DOM.createTD(); - //DOM.setStyleAttribute(td, "overflow", "hidden"); + // DOM.setStyleAttribute(td, "overflow", "hidden"); switch (orientationMode) { case ORIENTATION_HORIZONTAL: return td; @@ -437,4 +399,27 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container { DOM.setElementProperty(margin, "className", marginClasses); } + protected void handleAlignments(UIDL uidl) { + // Component alignments as a comma separated list. + // See com.itmill.toolkit.terminal.gwt.client.ui.AlignmentInfo.java for + // possible values. + int[] alignments = uidl.getIntArrayAttribute("alignments"); + int alignmentIndex = 0; + // Insert alignment attributes + Iterator it = getPaintables().iterator(); + while (it.hasNext()) { + + // Calculate alignment info + AlignmentInfo ai = new AlignmentInfo(alignments[alignmentIndex++]); + + Element td = DOM.getParent(((Widget) it.next()).getElement()); + DOM.setStyleAttribute(td, "vertical-align", ai + .getVerticalAlignment()); + // TODO use one-cell table to implement horizontal alignments + DOM + .setStyleAttribute(td, "text-align", ai + .getHorizontalAlignment()); + } + } + } diff --git a/src/com/itmill/toolkit/ui/ExpandLayout.java b/src/com/itmill/toolkit/ui/ExpandLayout.java index 33395956b2..47b75e5b74 100644 --- a/src/com/itmill/toolkit/ui/ExpandLayout.java +++ b/src/com/itmill/toolkit/ui/ExpandLayout.java @@ -65,11 +65,10 @@ public class ExpandLayout extends OrderedLayout { if (getOrientation() == ORIENTATION_HORIZONTAL) target.addAttribute("orientation", "horizontal"); - // Store alignment info in this String - StringBuffer alignments = new StringBuffer(); - + String[] alignmentsArray = new String[components.size()]; // Adds all items in all the locations + int index = 0; for (Iterator i = getComponentIterator(); i.hasNext();) { Component c = (Component) i.next(); if (c != null) { @@ -79,13 +78,12 @@ public class ExpandLayout extends OrderedLayout { c.paint(target); target.endTag("cc"); } - alignments.append(getComponentAlignment(c)); - if (i.hasNext()) - alignments.append(","); + alignmentsArray[index++] = String.valueOf(getComponentAlignment(c)); } + // Add child component alignment info to layout tag - target.addAttribute("alignments", alignments.toString()); + target.addAttribute("alignments", alignmentsArray); } diff --git a/src/com/itmill/toolkit/ui/OrderedLayout.java b/src/com/itmill/toolkit/ui/OrderedLayout.java index ac5f0e349e..b489312bca 100644 --- a/src/com/itmill/toolkit/ui/OrderedLayout.java +++ b/src/com/itmill/toolkit/ui/OrderedLayout.java @@ -64,7 +64,7 @@ public class OrderedLayout extends AbstractLayout { /** * Custom layout slots containing the components. */ - private LinkedList components = new LinkedList(); + protected LinkedList components = new LinkedList(); /* Child component alignments ************************************** */