import java.util.Iterator;
import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
+import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.HasHorizontalAlignment.HorizontalAlignmentConstant;
import com.google.gwt.user.client.ui.HasVerticalAlignment.VerticalAlignmentConstant;
import com.itmill.toolkit.terminal.gwt.client.CaptionWrapper;
import com.itmill.toolkit.terminal.gwt.client.Container;
import com.itmill.toolkit.terminal.gwt.client.Paintable;
+import com.itmill.toolkit.terminal.gwt.client.StyleConstants;
import com.itmill.toolkit.terminal.gwt.client.UIDL;
-public class IGridLayout extends FlexTable implements Paintable, Container {
+public class IGridLayout extends SimplePanel implements Paintable, Container {
public static final String CLASSNAME = "i-gridlayout";
- /** Widget to captionwrapper map */
- private final HashMap widgetToCaptionWrapper = new HashMap();
+ private Grid grid = new Grid();
public IGridLayout() {
super();
setStyleName(CLASSNAME);
+ setWidget(grid);
}
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
return;
}
- if (uidl.hasAttribute("caption")) {
- setTitle(uidl.getStringAttribute("caption"));
- }
- int row = 0, column = 0;
+ final MarginInfo margins = new MarginInfo(uidl
+ .getIntAttribute("margins"));
+
+ // 1572
+ Element margin = getElement();
+ setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_TOP,
+ margins.hasTop());
+ setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_RIGHT,
+ margins.hasRight());
+ setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_BOTTOM,
+ margins.hasBottom());
+ setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_LEFT,
+ margins.hasLeft());
+
+ grid.updateFromUIDL(uidl, client);
+ }
+
+ public boolean hasChildComponent(Widget component) {
+ return grid.hasChildComponent(component);
+ }
+
+ public void replaceChildComponent(Widget oldComponent, Widget newComponent) {
+ grid.replaceChildComponent(oldComponent, newComponent);
+ }
+
+ public void updateCaption(Paintable component, UIDL uidl) {
+ grid.updateCaption(component, uidl);
+ }
+
+ public class Grid extends FlexTable implements Paintable, Container {
- final ArrayList oldWidgetWrappers = new ArrayList();
- for (final Iterator iterator = iterator(); iterator.hasNext();) {
- oldWidgetWrappers.add(iterator.next());
+ /** Widget to captionwrapper map */
+ private final HashMap widgetToCaptionWrapper = new HashMap();
+
+ public Grid() {
+ super();
+ setStyleName(CLASSNAME);
}
- clear();
-
- final int[] alignments = uidl.getIntArrayAttribute("alignments");
- int alignmentIndex = 0;
-
- for (final Iterator i = uidl.getChildIterator(); i.hasNext();) {
- final UIDL r = (UIDL) i.next();
- if ("gr".equals(r.getTag())) {
- column = 0;
- for (final Iterator j = r.getChildIterator(); j.hasNext();) {
- final UIDL c = (UIDL) j.next();
- if ("gc".equals(c.getTag())) {
- prepareCell(row, column);
-
- // Set cell width
- int w;
- if (c.hasAttribute("w")) {
- w = c.getIntAttribute("w");
- } else {
- w = 1;
- }
- AlignmentInfo alignmentInfo = new AlignmentInfo(
- alignments[alignmentIndex++]);
-
- VerticalAlignmentConstant va;
- if (alignmentInfo.isBottom()) {
- va = HasVerticalAlignment.ALIGN_BOTTOM;
- } else if (alignmentInfo.isTop()) {
- va = HasVerticalAlignment.ALIGN_TOP;
- } else {
- va = HasVerticalAlignment.ALIGN_MIDDLE;
- }
- HorizontalAlignmentConstant ha;
+ public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- if (alignmentInfo.isLeft()) {
- ha = HasHorizontalAlignment.ALIGN_LEFT;
- } else if (alignmentInfo.isHorizontalCenter()) {
- ha = HasHorizontalAlignment.ALIGN_CENTER;
- } else {
- ha = HasHorizontalAlignment.ALIGN_RIGHT;
- }
+ int row = 0, column = 0;
- getCellFormatter().setAlignment(row, column, ha, va);
+ final ArrayList oldWidgetWrappers = new ArrayList();
+ for (final Iterator iterator = iterator(); iterator.hasNext();) {
+ oldWidgetWrappers.add(iterator.next());
+ }
+ clear();
+
+ final int[] alignments = uidl.getIntArrayAttribute("alignments");
+ int alignmentIndex = 0;
+
+ for (final Iterator i = uidl.getChildIterator(); i.hasNext();) {
+ final UIDL r = (UIDL) i.next();
+ if ("gr".equals(r.getTag())) {
+ column = 0;
+ for (final Iterator j = r.getChildIterator(); j.hasNext();) {
+ final UIDL c = (UIDL) j.next();
+ if ("gc".equals(c.getTag())) {
+ prepareCell(row, column);
+
+ // Set cell width
+ int w;
+ if (c.hasAttribute("w")) {
+ w = c.getIntAttribute("w");
+ } else {
+ w = 1;
+ }
+ AlignmentInfo alignmentInfo = new AlignmentInfo(
+ alignments[alignmentIndex++]);
+
+ VerticalAlignmentConstant va;
+ if (alignmentInfo.isBottom()) {
+ va = HasVerticalAlignment.ALIGN_BOTTOM;
+ } else if (alignmentInfo.isTop()) {
+ va = HasVerticalAlignment.ALIGN_TOP;
+ } else {
+ va = HasVerticalAlignment.ALIGN_MIDDLE;
+ }
- // set col span
- ((FlexCellFormatter) getCellFormatter()).setColSpan(
- row, column, w);
+ HorizontalAlignmentConstant ha;
- // Set cell height
- int h;
- if (c.hasAttribute("h")) {
- h = c.getIntAttribute("h");
- } else {
- h = 1;
- }
- ((FlexCellFormatter) getCellFormatter()).setRowSpan(
- row, column, h);
-
- final UIDL u = c.getChildUIDL(0);
- if (u != null) {
- final Paintable child = client.getPaintable(u);
- CaptionWrapper wr;
- if (widgetToCaptionWrapper.containsKey(child)) {
- wr = (CaptionWrapper) widgetToCaptionWrapper
- .get(child);
- oldWidgetWrappers.remove(wr);
+ if (alignmentInfo.isLeft()) {
+ ha = HasHorizontalAlignment.ALIGN_LEFT;
+ } else if (alignmentInfo.isHorizontalCenter()) {
+ ha = HasHorizontalAlignment.ALIGN_CENTER;
} else {
- wr = new CaptionWrapper(child, client);
- widgetToCaptionWrapper.put(child, wr);
+ ha = HasHorizontalAlignment.ALIGN_RIGHT;
}
- setWidget(row, column, wr);
+ getCellFormatter()
+ .setAlignment(row, column, ha, va);
- DOM.setStyleAttribute(wr.getElement(), "textAlign",
- alignmentInfo.getHorizontalAlignment());
+ // set col span
+ ((FlexCellFormatter) getCellFormatter())
+ .setColSpan(row, column, w);
- if (!u.getBooleanAttribute("cached")) {
- child.updateFromUIDL(u, client);
+ // Set cell height
+ int h;
+ if (c.hasAttribute("h")) {
+ h = c.getIntAttribute("h");
+ } else {
+ h = 1;
}
+ ((FlexCellFormatter) getCellFormatter())
+ .setRowSpan(row, column, h);
+
+ final UIDL u = c.getChildUIDL(0);
+ if (u != null) {
+ final Paintable child = client.getPaintable(u);
+ CaptionWrapper wr;
+ if (widgetToCaptionWrapper.containsKey(child)) {
+ wr = (CaptionWrapper) widgetToCaptionWrapper
+ .get(child);
+ oldWidgetWrappers.remove(wr);
+ } else {
+ wr = new CaptionWrapper(child, client);
+ widgetToCaptionWrapper.put(child, wr);
+ }
+
+ setWidget(row, column, wr);
+
+ DOM.setStyleAttribute(wr.getElement(),
+ "textAlign", alignmentInfo
+ .getHorizontalAlignment());
+
+ if (!u.getBooleanAttribute("cached")) {
+ child.updateFromUIDL(u, client);
+ }
+ }
+ column += w;
}
- column += w;
}
+ row++;
}
- row++;
}
- }
- // loop oldWidgetWrappers that where not re-attached and unregister them
- for (final Iterator it = oldWidgetWrappers.iterator(); it.hasNext();) {
- final CaptionWrapper w = (CaptionWrapper) it.next();
- client.unregisterPaintable(w.getPaintable());
- widgetToCaptionWrapper.remove(w.getPaintable());
+ // loop oldWidgetWrappers that where not re-attached and unregister
+ // them
+ for (final Iterator it = oldWidgetWrappers.iterator(); it.hasNext();) {
+ final CaptionWrapper w = (CaptionWrapper) it.next();
+ client.unregisterPaintable(w.getPaintable());
+ widgetToCaptionWrapper.remove(w.getPaintable());
+ }
}
- }
- public boolean hasChildComponent(Widget component) {
- if (widgetToCaptionWrapper.containsKey(component)) {
- return true;
+ public boolean hasChildComponent(Widget component) {
+ if (widgetToCaptionWrapper.containsKey(component)) {
+ return true;
+ }
+ return false;
}
- return false;
- }
- public void replaceChildComponent(Widget oldComponent, Widget newComponent) {
- // TODO Auto-generated method stub
+ public void replaceChildComponent(Widget oldComponent,
+ Widget newComponent) {
+ // TODO Auto-generated method stub
- }
+ }
+
+ public void updateCaption(Paintable component, UIDL uidl) {
+ final CaptionWrapper wrapper = (CaptionWrapper) widgetToCaptionWrapper
+ .get(component);
+ wrapper.updateCaption(uidl);
+ }
- public void updateCaption(Paintable component, UIDL uidl) {
- final CaptionWrapper wrapper = (CaptionWrapper) widgetToCaptionWrapper
- .get(component);
- wrapper.updateCaption(uidl);
}
}
--- /dev/null
+package com.itmill.toolkit.tests.tickets;\r
+\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.GridLayout;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.OrderedLayout;\r
+import com.itmill.toolkit.ui.Panel;\r
+import com.itmill.toolkit.ui.Window;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+\r
+public class Ticket1572 extends com.itmill.toolkit.Application {\r
+\r
+ private Label state;\r
+ private GridLayout gl;\r
+ private Label spacingstate;\r
+\r
+ public void init() {\r
+\r
+ final Window main = new Window(getClass().getName().substring(\r
+ getClass().getName().lastIndexOf(".") + 1));\r
+ setMainWindow(main);\r
+\r
+ Panel p = new Panel("Test wrapper for gridlayout margin/spacing");\r
+\r
+ p.setLayout(new OrderedLayout(OrderedLayout.ORIENTATION_HORIZONTAL));\r
+\r
+ gl = new GridLayout(3, 3);\r
+ gl.setMargin(true);\r
+ for (int i = 0; i < 3 * 3; i++) {\r
+ gl.addComponent(new Button("test"));\r
+ }\r
+ p.addComponent(gl);\r
+ p.addComponent(new Label("| next component"));\r
+\r
+ Button b = new Button("next margin state");\r
+ b.addListener(new Button.ClickListener() {\r
+ public void buttonClick(ClickEvent event) {\r
+ nextMarginState();\r
+ }\r
+\r
+ });\r
+\r
+ state = new Label();\r
+ state.setCaption("Current margin state:");\r
+ main.addComponent(state);\r
+ main.addComponent(b);\r
+\r
+ Button b2 = new Button("next spacing state");\r
+ b.addListener(new Button.ClickListener() {\r
+ public void buttonClick(ClickEvent event) {\r
+ nextSpacingState();\r
+ }\r
+\r
+ });\r
+\r
+ spacingstate = new Label();\r
+ spacingstate.setCaption("Current Spacing State:");\r
+ main.addComponent(spacingstate);\r
+ main.addComponent(b2);\r
+\r
+ main.addComponent(p);\r
+\r
+ nextMarginState();\r
+ nextSpacingState();\r
+\r
+ }\r
+\r
+ private int stateCounter = -1;\r
+\r
+ private void nextMarginState() {\r
+ stateCounter++;\r
+ switch (stateCounter) {\r
+ case 0:\r
+ gl.setMargin(false);\r
+ state.setValue("Margin off");\r
+ break;\r
+ case 1:\r
+ gl.setMargin(true);\r
+ state.setValue("Margin on");\r
+ break;\r
+ case 2:\r
+ gl.setMargin(true, false, false, false);\r
+ state.setValue("Margin top");\r
+ break;\r
+ case 3:\r
+ gl.setMargin(false, true, false, false);\r
+ state.setValue("Margin right");\r
+ break;\r
+ case 4:\r
+ gl.setMargin(false, false, true, false);\r
+ state.setValue("Margin bottom");\r
+ break;\r
+ case 5:\r
+ gl.setMargin(false, false, false, true);\r
+ state.setValue("Margin left");\r
+ break;\r
+ default:\r
+ stateCounter = -1;\r
+ nextMarginState();\r
+ break;\r
+ }\r
+ }\r
+\r
+ private void nextSpacingState() {\r
+ spacingstate.setValue(" // TODO Auto-generated method stub");\r
+ }\r
+\r
+}\r