/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.widgets.containers; import java.util.ArrayList; import java.util.List; import com.eas.core.XElement; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style; import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.Widget; /** * * @author mg */ public class BorderPanel extends DockLayoutPanel { protected int hgap; protected int vgap; public BorderPanel() { super(Style.Unit.PX); getElement().<XElement> cast().addResizingTransitionEnd(this); } public int getHgap() { return hgap; } public void setHgap(int aValue) { hgap = aValue; recalcMargins(); } public int getVgap() { return vgap; } public void setVgap(int aValue) { vgap = aValue; recalcMargins(); } @Override protected void insert(Widget child, Direction direction, double size, Widget before) { super.insert(child, direction, size, before); recalcMargins(); child.getElement().getStyle().clearRight(); child.getElement().getStyle().clearBottom(); child.getElement().getStyle().setWidth(100, Style.Unit.PCT); child.getElement().getStyle().setHeight(100, Style.Unit.PCT); com.eas.ui.CommonResources.INSTANCE.commons().ensureInjected(); child.getElement().addClassName(com.eas.ui.CommonResources.INSTANCE.commons().borderSized()); } @Override public boolean remove(Widget w) { boolean res = super.remove(w); recalcMargins(); return res; } protected void recalcMargins() { List<Widget> north = new ArrayList<>(); List<Widget> south = new ArrayList<>(); Widget center = getCenter(); for (Widget w : getChildren()) { Direction d = getResolvedDirection(getWidgetDirection(w)); if (d == Direction.WEST) { // west = w; } else if (d == Direction.EAST) { // east = w; } else if (d == Direction.NORTH) { north.add(w); } else if (d == Direction.SOUTH) { south.add(w); } } if (center != null) { Element centerContainer = getWidgetContainerElement(center); centerContainer.getStyle().setMarginLeft(hgap, Style.Unit.PX); centerContainer.getStyle().setMarginRight(hgap, Style.Unit.PX); centerContainer.getStyle().setMarginTop(vgap, Style.Unit.PX); centerContainer.getStyle().setMarginBottom(vgap, Style.Unit.PX); } /* * if (!north.isEmpty()) { for (Widget w : north) { Element * northContainer = getWidgetContainerElement(w); * northContainer.getStyle().setMarginLeft(hgap, Style.Unit.PX); * northContainer.getStyle().setMarginRight(hgap, Style.Unit.PX); } } if * (!south.isEmpty()) { for (Widget w : south) { Element southContainer * = getWidgetContainerElement(w); * southContainer.getStyle().setMarginLeft(hgap, Style.Unit.PX); * southContainer.getStyle().setMarginRight(hgap, Style.Unit.PX); } } */ } public void ajustWidth(Widget aWidget, int aWidth) { Direction direction = getWidgetDirection(aWidget); if (direction == Direction.WEST) { remove(aWidget); Widget centerWidget = getCenter(); if (centerWidget != null) remove(centerWidget); addWest(aWidget, aWidth); if (centerWidget != null) add(centerWidget); } else if (direction == Direction.EAST) { remove(aWidget); Widget centerWidget = getCenter(); if (centerWidget != null) remove(centerWidget); addEast(aWidget, aWidth); if (centerWidget != null) add(centerWidget); } } public void ajustHeight(Widget aWidget, int aHeight) { Direction direction = getWidgetDirection(aWidget); if (direction == Direction.NORTH) { remove(aWidget); Widget centerWidget = getCenter(); if (centerWidget != null) remove(centerWidget); addNorth(aWidget, aHeight); if (centerWidget != null) add(centerWidget); } else if (direction == Direction.SOUTH) { remove(aWidget); Widget centerWidget = getCenter(); if (centerWidget != null) remove(centerWidget); addSouth(aWidget, aHeight); if (centerWidget != null) add(centerWidget); } } @Override protected void onAttach() { super.onAttach(); forceLayout(); } }