package org.xmind.ui.internal.svgsupport; import java.util.ArrayList; import java.util.List; import org.eclipse.draw2d.Graphics; import org.eclipse.jface.resource.ResourceManager; import org.eclipse.swt.widgets.Display; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xmind.gef.draw2d.geometry.PrecisionRectangle; import org.xmind.gef.draw2d.graphics.Path; /** * * @author Enki Xiong * */ final public class SVGGroup extends SVGShape { private List<SVGShape> children; SVGGroup() { super(); children = new ArrayList<SVGShape>(); } public SVGGroup(List<SVGShape> children) { this.children = children; } @Override void parse(Element implemention, SVGShape parent) { super.parse(implemention, parent); parseGroup(implemention, parent); } private void parseGroup(Element implemention, SVGShape parent) { NodeList list = implemention.getChildNodes(); for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { SVGShape shape = parseShape(((Element) node), this); if (shape != null) this.children.add(shape); } } } @Override void paintImage(Graphics graphics, Display device) { boolean statePushed = super.prePaint(graphics); for (SVGShape shape : children) { shape.paintImage(graphics, device); } super.postPaint(graphics, statePushed); } @Override Path generatePath(Display device) { return null; } @Override PrecisionRectangle generateRectangle() { return null; } @Override public void setResourceManager(ResourceManager resourceManager) { super.setResourceManager(resourceManager); for (SVGShape shape : children) shape.setResourceManager(resourceManager); } @Override protected SVGShape clone() { SVGGroup group = new SVGGroup(); group.setInfo(getInfo().clone()); group.children = new ArrayList<SVGShape>(); for (SVGShape shape : children) { group.children.add(shape.clone()); } return group; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj instanceof SVGGroup) { SVGGroup group = (SVGGroup) obj; if (children.size() == group.children.size()) { for (int i = 0; i < children.size(); i++) { if (!children.get(i).equals(group.children.get(i))) return false; } return true; } } return false; } @Override public int hashCode() { int result = 17; result = result * 31 + getInfo().hashCode(); for (SVGShape shape : children) result = result * 31 + shape.hashCode(); return result; } @Override public String toString() { String str = "SVGGroup( children Size: "; //$NON-NLS-1$ str += children.size(); str += getInfo().toString(); str += " )"; //$NON-NLS-1$ return str; } }