package org.droiddraw.widget; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Vector; public abstract class AbstractLayout extends AbstractWidget implements Layout { protected Vector<Widget> widgets; public AbstractLayout(String tagName) { super(tagName); this.widgets = new Vector<Widget>(); apply(); } @Override public String toString() { return tagName; } public void addWidget(Widget w) { assert (w != this); widgets.add(w); w.setParent(this); addEditableProperties(w); positionWidget(w); this.readWidthHeight(); if (getParent() != null) { getParent().repositionAllWidgets(); } } public Vector<Widget> getWidgets() { return widgets; } public void removeWidget(Widget w) { widgets.remove(w); removeEditableProperties(w); repositionAllWidgets(); } public void removeAllWidgets() { for (Widget w : widgets) { removeEditableProperties(w); } widgets.clear(); } public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; drawBackground(g); g2d.translate(getX(), getY()); g.setColor(Color.black); if (widgets.size() == 0) { g.drawString(tagName, 2, 15); } g.drawRect(0, 0, getWidth(), getHeight()); for (Widget w : widgets) { if (w.isVisible()) w.paint(g); } g2d.translate(-getX(),-getY()); } @Override public int getContentWidth() { if (widgets.size() > 0) { int maxX = 0; for (Widget w : widgets) { /*LEFT padding already in X value*/ //w.apply(); int width_w_pad = w.getWidth()+w.getPadding(RIGHT); if (w.getX()+width_w_pad > maxX) maxX = w.getX()+width_w_pad; } return maxX; } else return 100; } @Override public int getContentHeight() { if (widgets.size() > 0) { int maxY = 0; for (Widget w : widgets) { /*TOP padding already in Y value*/ int height_w_pad = w.getHeight()+w.getPadding(BOTTOM); if (w.getY()+height_w_pad > maxY) maxY = w.getY()+height_w_pad; } return maxY; } else return 20; } /* public void setPosition(int x, int y) { super.setPosition(x, y); //repositionAllWidgets(); //apply(); } */ public abstract void positionWidget(Widget w); public abstract void repositionAllWidgets(); public int getScreenX() { if (parent != null && parent != this) { return (parent).getScreenX()+getX(); } else { return getX(); } } public int getScreenY() { if (parent != null && parent != this) { return parent.getScreenY()+getY(); } else { return getY(); } } public void resizeForRendering() { for (Widget w : widgets) { if (w instanceof Layout) { ((Layout)w).resizeForRendering(); } } } public void clearRendering() { for (Widget w : widgets) { w.apply(); if (w instanceof Layout) { ((Layout)w).clearRendering(); } } } public boolean containsWidget(Widget w) { for (Widget wt : widgets) { if (wt.equals(w)) { return true; } else if (wt instanceof Layout) { if (((Layout)wt).containsWidget(w)) { return true; } } } return false; } }