package asemedashboardview.views; import org.eclipse.draw2d.AbstractLayout; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.ImageFigure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.PolygonDecoration; import org.eclipse.draw2d.RectangleFigure; import org.eclipse.draw2d.ToolbarLayout; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.PointList; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import asemedashboardview.Activator; public class ASEMEFigure extends RectangleFigure { private static final int LINE_WIDTH = 6; private static final int TEXT_GAP = LINE_WIDTH + 3; private static final int ARROW_LENGTH = 15; private static final Color DASHBOARD_BG = new Color(null, 241, 213, 204); private static final Color DASHBOARD_FG = new Color(null, 184, 46, 0); private static final Color MODEL_BG = ColorConstants.white; private ImageFigure logoFigure; private IFigure statusFigure; // models private ModelFigure sagFigure; private ModelFigure sucFigure; private ModelFigure aipFigure; private ModelFigure srmFigure; private ModelFigure eacFigure; private ModelFigure iacFigure; private ModelFigure jadeFigure; // flows private FlowFigure sag2sucFlow; private FlowFigure suc2aipFlow; private FlowFigure suc2srmFlow; private FlowFigure aip2eacFlow; private FlowFigure eac2iacFlow; private FlowFigure srm2iacFlow; private FlowFigure aip2srmFlow; private FlowFigure iac2jadeFlow; // flow actions private FlowActionFigure sag2sucFigure; private FlowActionFigure suc2aipFigure; private FlowActionFigure suc2srmFigure; private FlowActionFigure aip2eacFigure; private FlowActionFigure srm2iacFigure; private FlowActionFigure iac2jadeFigure; public ASEMEFigure() { // add(logoFigure = new ImageFigure() { // // protected void paintFigure(Graphics graphics) { // if (getImage() != null) { // graphics.drawImage(getImage(), new Rectangle(getImage().getBounds()), getBounds()); // } // } // }); // Image logoImage = Activator.getDefault().getImageRegistry().get(Activator.GMF_LOGO_IMAGE); // if (logoImage != null) { // logoFigure.setImage(logoImage); // } add(sagFigure = createModelFigure(Messages.ASEMEFigure_SAG, Activator.SAG_ICON)); add(sucFigure = createModelFigure(Messages.ASEMEFigure_SUC, Activator.SUC_ICON)); add(aipFigure = createModelFigure(Messages.ASEMEFigure_AIP, Activator.AIP_ICON)); add(srmFigure = createModelFigure(Messages.ASEMEFigure_SRM, Activator.SRM_ICON)); add(eacFigure = createModelFigure(Messages.ASEMEFigure_EAC, Activator.EAC_ICON)); add(iacFigure = createModelFigure(Messages.ASEMEFigure_IAC, Activator.IAC_ICON)); add(jadeFigure = createModelFigure(Messages.ASEMEFigure_JADE, Activator.JADE_ICON)); add(sag2sucFlow = createFlowFigure(true, false)); add(suc2aipFlow = createFlowFigure(true, true)); add(suc2srmFlow = createFlowFigure(true, false)); add(aip2srmFlow = createFlowFigure(true, true)); add(aip2eacFlow = createFlowFigure(true, false)); add(eac2iacFlow = createFlowFigure(true, true)); add(srm2iacFlow = createFlowFigure(true, false)); add(iac2jadeFlow = createFlowFigure(true, false)); add(sag2sucFigure = createFlowActionFigure()); add(suc2aipFigure = createFlowActionFigure()); add(suc2srmFigure = createFlowActionFigure()); add(aip2eacFigure = createFlowActionFigure()); add(srm2iacFigure = createFlowActionFigure()); add(iac2jadeFigure = createFlowActionFigure()); add(statusFigure = new Figure()); statusFigure.setFont(JFaceResources.getBannerFont()); ToolbarLayout statusLayout = new ToolbarLayout(); statusLayout.setStretchMinorAxis(false); statusFigure.setLayoutManager(statusLayout); statusFigure.add(new Label()); //statusFigure.add(new Label()); setLayoutManager(new DashboardLayout()); setBorder(new MarginBorder(10)); setBackgroundColor(DASHBOARD_BG); setForegroundColor(DASHBOARD_FG); } public ModelFigure getSAGFigure() { return sagFigure; } public ModelFigure getSUCFigure() { return sucFigure; } public ModelFigure getAIPFigure() { return aipFigure; } public ModelFigure getSRMFigure() { return srmFigure; } public ModelFigure getEACFigure() { return eacFigure; } public ModelFigure getIACFigure() { return iacFigure; } public ModelFigure getJADEFigure() { return jadeFigure; } public FlowActionFigure getSAG2SUCFigure() { return sag2sucFigure; } public FlowActionFigure getSUC2AIPFigure() { return suc2aipFigure; } public FlowActionFigure getSUC2SRMFigure() { return suc2srmFigure; } public FlowActionFigure getAIP2EACFigure() { return aip2eacFigure; } public FlowActionFigure getSRM2IACFigure() { return srm2iacFigure; } public FlowActionFigure getIAC2JADEFigure() { return iac2jadeFigure; } public Label getStatusLine(int i) { return (Label) statusFigure.getChildren().get(i); } protected ModelFigure createModelFigure(String description, String iconKey) { ModelFigure modelFigure = new ModelFigure(); modelFigure.setDescription(description); Image image = Activator.getDefault().getImageRegistry().get(iconKey); if (image != null) { modelFigure.setIcon(image); } modelFigure.setBackgroundColor(MODEL_BG); modelFigure.setForegroundColor(DASHBOARD_FG); modelFigure.setLineWidth(LINE_WIDTH); modelFigure.setSpacing(TEXT_GAP); return modelFigure; } protected FlowFigure createFlowFigure(boolean directed, boolean dashed) { FlowFigure flowFigure = new FlowFigure(); if (directed) { PolygonDecoration decoration = new PolygonDecoration(); PointList template = new PointList(); template.addPoint(0, -LINE_WIDTH / 2); template.addPoint(0, LINE_WIDTH / 2); template.addPoint(-ARROW_LENGTH, LINE_WIDTH / 2 + 10); template.addPoint(-ARROW_LENGTH, -(LINE_WIDTH / 2 + 10)); decoration.setTemplate(template); decoration.setScale(1, 1); flowFigure.setTargetDecoration(decoration); } flowFigure.setForegroundColor(DASHBOARD_FG); flowFigure.setLineWidth(LINE_WIDTH); if(dashed) { flowFigure.setDashed(); } return flowFigure; } protected FlowActionFigure createFlowActionFigure() { FlowActionFigure flowActionFigure = new FlowActionFigure(); ToolbarLayout flowActionLayout = new ToolbarLayout(); flowActionLayout.setStretchMinorAxis(false); flowActionLayout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER); flowActionFigure.setLayoutManager(flowActionLayout); flowActionFigure.setBackgroundColor(MODEL_BG); flowActionFigure.setForegroundColor(DASHBOARD_FG); flowActionFigure.setLineWidth(LINE_WIDTH / 3); flowActionFigure.setBorder(new MarginBorder(TEXT_GAP / 2)); return flowActionFigure; } protected void outlineShape(Graphics graphics) { } private class DashboardLayout extends AbstractLayout { private static final int MAX_BOX_WIDTH = 300; private static final int BOX_SPACING = 100; protected Dimension calculatePreferredSize(IFigure container, int wHint, int hHint) { Dimension d = getLayoutData().getSize(); Insets insets = container.getInsets(); d = new Dimension(d.width + insets.getWidth(), d.height + insets.getHeight()); return d.union(getBorderPreferredSize(container)); } public void layout(IFigure container) { getLayoutData().apply(container.getClientArea().getLocation()); } protected LayoutData getLayoutData() { Dimension sagSize = sagFigure.getPreferredSize(); sagSize.width = Math.min(sagSize.width, MAX_BOX_WIDTH); Dimension sucSize = sucFigure.getPreferredSize(); sucSize.width = Math.min(sucSize.width, MAX_BOX_WIDTH); Dimension aipSize = aipFigure.getPreferredSize(); aipSize.width = Math.min(aipSize.width, MAX_BOX_WIDTH); Dimension srmSize = srmFigure.getPreferredSize(); srmSize.width = Math.min(srmSize.width, MAX_BOX_WIDTH); Dimension eacSize = eacFigure.getPreferredSize(); eacSize.width = Math.min(eacSize.width, MAX_BOX_WIDTH);; Dimension iacSize = iacFigure.getPreferredSize(); iacSize.width = Math.min(iacSize.width, MAX_BOX_WIDTH); Dimension jadeSize = jadeFigure.getPreferredSize(); jadeSize.width = Math.min(jadeSize.width, MAX_BOX_WIDTH); Dimension sag2sucSize = sag2sucFigure.getPreferredSize(); Dimension suc2aipSize = suc2aipFigure.getPreferredSize(); Dimension suc2srmSize = suc2srmFigure.getPreferredSize(); Dimension aip2eacSize = aip2eacFigure.getPreferredSize(); Dimension srm2iacSize = srm2iacFigure.getPreferredSize(); Dimension iac2jadeSize = iac2jadeFigure.getPreferredSize(); LayoutData data = new LayoutData(); // boxes int sagX = 0; int sagY = 0; int sucX = sagX + sagSize.width + BOX_SPACING; int sucY = 0; int srmX = sucX; int srmY = sucY + sucSize.height + BOX_SPACING ; int aipX = sucX + sucSize.width + BOX_SPACING; int aipY = sucY + sucSize.height + (BOX_SPACING - aipSize.height)/2 ; int eacX = aipX; int eacY = aipY + aipSize.height + BOX_SPACING; int iacX = srmX; int iacY = srmY + srmSize.height + BOX_SPACING; int jadeX = iacX - (jadeSize.width + BOX_SPACING); int jadeY = iacY; data.sagBox = new Rectangle(sagX, sagY, sagSize.width, sagSize.height); data.sucBox = new Rectangle(sucX, sucY, sucSize.width, sucSize.height); data.aipBox = new Rectangle(aipX, aipY, aipSize.width, aipSize.height); data.srmBox = new Rectangle(srmX, srmY, srmSize.width, srmSize.height); data.eacBox = new Rectangle(eacX, eacY, eacSize.width, eacSize.height); data.iacBox = new Rectangle(iacX, iacY, iacSize.width, iacSize.height); data.jadeBox = new Rectangle(jadeX, jadeY, jadeSize.width, jadeSize.height); // int dmY = gdmSize.height + BOX_SPACING; // int dgmY = dmY + dmSize.height + BOX_SPACING; // data.dgmBox = new Rectangle(0, dgmY, dgmSize.width, dgmSize.height); // data.dm2dgmBox = new Rectangle((data.dgmBox.width - dm2dgmSize.width) / 2, dmY + (dmSize.height - dm2dgmSize.height) / 2, dm2dgmSize.width, dm2dgmSize.height); // data.dmBox = new Rectangle(data.dm2dgmBox.x + data.dm2dgmBox.width + BOX_SPACING, dmY, dmSize.width, dmSize.height); // int dm2tdmX = data.dmBox.x + (data.dmBox.width - dm2tdmSize.width) / 2; // int gap1 = dm2tdmX - (data.dgmBox.x + data.dgmBox.width); // if (gap1 < BOX_SPACING) { // int delta = BOX_SPACING - gap1; // data.dmBox.x += delta; // dm2tdmX += delta; // } // data.dm2gdmBox = new Rectangle(data.dmBox.x + (data.dmBox.width - dm2gdmSize.width) / 2, (gdmSize.height - dm2gdmSize.height) / 2, dm2gdmSize.width, dm2gdmSize.height); // data.gdmBox = new Rectangle(data.dm2gdmBox.x + data.dm2gdmBox.width + BOX_SPACING + ARROW_LENGTH, 0, gdmSize.width, gdmSize.height); // int tdmY = data.dmBox.y + data.dmBox.height + BOX_SPACING; // data.dm2tdmBox = new Rectangle(dm2tdmX, tdmY + (tdmSize.height - dm2tdmSize.height) / 2, dm2tdmSize.width, dm2tdmSize.height); // data.tdmBox = new Rectangle(data.dm2tdmBox.x + data.dm2tdmBox.width + BOX_SPACING + ARROW_LENGTH, tdmY, tdmSize.width, tdmSize.height); // data.dm2mmBox = new Rectangle(data.dmBox.x + data.dmBox.width + BOX_SPACING, data.dmBox.y + (data.dmBox.height - dm2mmSize.height) / 2, dm2mmSize.width, dm2mmSize.height); // data.mmBox = new Rectangle(data.dm2mmBox.x + data.dm2mmBox.width + BOX_SPACING + ARROW_LENGTH, data.dmBox.y, mmSize.width, mmSize.height); // int gmY = data.mmBox.y + data.mmBox.height + BOX_SPACING; // data.mm2gmBox = new Rectangle(data.mmBox.x + data.mmBox.width + BOX_SPACING, data.mmBox.y + (data.mmBox.height - mm2gmSize.height) / 2, mm2gmSize.width, mm2gmSize.height); data.sag2sucBox = new Rectangle(data.sagBox.x + data.sagBox.width + BOX_SPACING/5, data.sagBox.y + (data.sagBox.height - sag2sucSize.height) / 2, sag2sucSize.width, sag2sucSize.height); data.suc2aipBox = new Rectangle(data.aipBox.x + (data.aipBox.width - suc2aipSize.width)/2, data.sucBox.y + (data.sucBox.height - suc2aipSize.height)/2, suc2aipSize.width, suc2aipSize.height); data.suc2srmBox = new Rectangle(data.sucBox.x + (data.sucBox.width - suc2srmSize.width)/2, data.sucBox.y + data.sucBox.height + (BOX_SPACING - suc2srmSize.height)/2 , suc2srmSize.width, suc2srmSize.height); data.aip2eacBox = new Rectangle(data.aipBox.x + (data.aipBox.width - aip2eacSize.width)/2, data.aipBox.y + data.aipBox.height + (BOX_SPACING - aip2eacSize.height)/ 2, aip2eacSize.width, aip2eacSize.height); data.srm2iacBox = new Rectangle(data.srmBox.x + (data.srmBox.width - srm2iacSize.width)/2, data.srmBox.y + data.srmBox.height + (BOX_SPACING - srm2iacSize.height)/2, srm2iacSize.width, srm2iacSize.height); data.iac2jadeBox = new Rectangle(data.iacBox.x - BOX_SPACING/5, data.iacBox.y + (data.iacBox.height - iac2jadeSize.height) / 2, iac2jadeSize.width, iac2jadeSize.height); // data.gmBox = new Rectangle(data.mm2gmBox.x - (gmSize.width - mm2gmSize.width) / 2, gmY, gmSize.width, gmSize.height); // int gap2 = data.gmBox.x - (data.tdmBox.x + data.tdmBox.width); // if (gap2 < BOX_SPACING) { // int delta = BOX_SPACING - gap2; // data.mm2gmBox.x += delta; // data.gmBox.x += delta; // } // // // points int sagPointsX = data.sagBox.x + data.sagBox.width; int sagPointsY = data.sagBox.y + data.sagBox.height / 2; int sucPointsX = data.sucBox.x; int sucPointsY = sagPointsY; data.sag2sucPoints = new PointList(2); data.sag2sucPoints.addPoint(sagPointsX, sagPointsY); data.sag2sucPoints.addPoint(sucPointsX, sucPointsY); sucPointsX = data.sucBox.x + data.sucBox.width; sucPointsY = data.sucBox.y + data.sucBox.height/2; int suc2boxPointsX = data.suc2aipBox.x; int suc2boxPointsY = data.suc2aipBox.y + data.suc2aipBox.height/ 2; int box2aipPointsX = data.suc2aipBox.x + data.suc2aipBox.width/2; int box2aipPointsY = data.suc2aipBox.y + data.suc2aipBox.height; int aipPointsX = data.aipBox.x + data.aipBox.width / 2; int aipPointsY = data.aipBox.y; data.suc2aipPoints = new PointList(4); data.suc2aipPoints.addPoint(sucPointsX, sucPointsY); data.suc2aipPoints.addPoint(suc2boxPointsX, suc2boxPointsY); data.suc2aipPoints.addPoint(box2aipPointsX, box2aipPointsY); data.suc2aipPoints.addPoint(aipPointsX, aipPointsY); sucPointsX = data.sucBox.x + data.sucBox.width/2; sucPointsY = data.sucBox.y + data.sucBox.height; int srmPointsX = sucPointsX; int srmPointsY = data.srmBox.y; data.suc2srmPoints = new PointList(2); data.suc2srmPoints.addPoint(sucPointsX, sucPointsY); data.suc2srmPoints.addPoint(srmPointsX, srmPointsY); aipPointsX = data.aipBox.x; aipPointsY = data.aipBox.y + data.aipBox.height/2; int aip2boxPointsX = data.suc2srmBox.x + data.suc2srmBox.width; int aip2boxPointsY = data.suc2srmBox.y + data.suc2srmBox.height/2; data.aip2srmPoints = new PointList(2); data.aip2srmPoints.addPoint(aipPointsX, aipPointsY); data.aip2srmPoints.addPoint(aip2boxPointsX, aip2boxPointsY); aipPointsX = data.aipBox.x + data.aipBox.width/2; aipPointsY = data.aipBox.y + data.aipBox.height; int eacPointsX = aipPointsX; int eacPointsY = data.eacBox.y; data.aip2eacPoints = new PointList(2); data.aip2eacPoints.addPoint(aipPointsX, aipPointsY); data.aip2eacPoints.addPoint(eacPointsX, eacPointsY); eacPointsX = data.eacBox.x; eacPointsY = data.eacBox.y + data.eacBox.height/2; int eac2boxPointsX = data.srm2iacBox.x + data.srm2iacBox.width; int eac2boxPointsY = data.srm2iacBox.y + data.srm2iacBox.height/2; data.eac2iacPoints = new PointList(2); data.eac2iacPoints.addPoint(eacPointsX, eacPointsY); data.eac2iacPoints.addPoint(eac2boxPointsX, eac2boxPointsY); srmPointsX = data.srmBox.x + data.srmBox.width/2; srmPointsY = data.srmBox.y + data.srmBox.height; int iacPointsX = srmPointsX; int iacPointsY = data.iacBox.y; data.srm2iacPoints = new PointList(2); data.srm2iacPoints.addPoint(srmPointsX, srmPointsY); data.srm2iacPoints.addPoint(iacPointsX, iacPointsY); iacPointsX = data.iacBox.x; iacPointsY = data.iacBox.y + data.iacBox.height / 2; int jadePointsX = data.jadeBox.x + data.jadeBox.width; int jadePointsY = data.jadeBox.y + data.jadeBox.height/2; data.iac2jadePoints = new PointList(2); data.iac2jadePoints.addPoint(iacPointsX, iacPointsY); data.iac2jadePoints.addPoint(jadePointsX, jadePointsY); // int pointsY = data.dmBox.y + data.dmBox.height / 2; // data.dm2dgmPoints = new PointList(3); // data.dm2dgmPoints.addPoint(data.dmBox.x, pointsY); // data.dm2dgmPoints.addPoint(data.dm2dgmBox.x + data.dm2dgmBox.width / 2, pointsY); // data.dm2dgmPoints.addPoint(data.dm2dgmBox.x + data.dm2dgmBox.width / 2, data.dgmBox.y); // int pointsX = data.dmBox.x + data.dmBox.width / 2; // data.dm2gdmPoints = new PointList(3); // data.dm2gdmPoints.addPoint(pointsX, data.dmBox.y); // data.dm2gdmPoints.addPoint(pointsX, data.dm2gdmBox.y + data.dm2gdmBox.height / 2); // data.dm2gdmPoints.addPoint(data.gdmBox.x, data.dm2gdmBox.y + data.dm2gdmBox.height / 2); // data.dm2tdmPoints = new PointList(3); // data.dm2tdmPoints.addPoint(pointsX, data.dmBox.y + data.dmBox.height); // data.dm2tdmPoints.addPoint(pointsX, data.dm2tdmBox.y + data.dm2tdmBox.height / 2); // data.dm2tdmPoints.addPoint(data.tdmBox.x, data.dm2tdmBox.y + data.dm2tdmBox.height / 2); // data.dm2mmPoints = new PointList(2); // data.dm2mmPoints.addPoint(data.dmBox.x + data.dmBox.width, pointsY); // data.dm2mmPoints.addPoint(data.mmBox.x, pointsY); // int crossX = data.dm2mmBox.x + data.dm2mmBox.width / 2; // data.gdm2mmPoints = new PointList(2); // data.gdm2mmPoints.addPoint(crossX, data.gdmBox.y + data.gdmBox.height); // data.gdm2mmPoints.addPoint(crossX, pointsY); // data.tdm2mmPoints = new PointList(2); // data.tdm2mmPoints.addPoint(crossX, data.tdmBox.y); // data.tdm2mmPoints.addPoint(crossX, pointsY); // data.mm2gmPoints = new PointList(3); // data.mm2gmPoints.addPoint(data.mmBox.x + data.mmBox.width, pointsY); // data.mm2gmPoints.addPoint(data.mm2gmBox.x + data.mm2gmBox.width / 2, pointsY); // data.mm2gmPoints.addPoint(data.mm2gmBox.x + data.mm2gmBox.width / 2, data.gmBox.y); // data.sag2sucPoints = new PointList(2); // data.sag2sucPoints.addPoint(data.sagBox.x + data.sagBox.width, pointsY); // data.sag2sucPoints.addPoint(data.sag2sucBox.x + data.sag2sucBox.width, pointsY); // logo and status // int logoMaxWidth = data.sag2sucBox.x - BOX_SPACING; // int logoMaxHeight = data.sagBox.y - BOX_SPACING; // int logoMaxWidth = data.dm2gdmBox.x - BOX_SPACING; // int logoMaxHeight = data.dmBox.y - BOX_SPACING; // Dimension logoSize = logoFigure.getPreferredSize(); // if (logoSize.width > logoMaxWidth || logoSize.height > logoMaxHeight) { // double scale = Math.min((double) logoMaxWidth / logoSize.width, (double) logoMaxHeight / logoSize.height); // logoSize.width *= scale; // logoSize.height *= scale; // } // data.logoBox = new Rectangle(0, 0, logoSize.width, logoSize.height); Dimension statusSize = statusFigure.getPreferredSize(); int statusX = data.suc2aipBox.x + data.suc2aipBox.width + BOX_SPACING; int statusY = data.sucBox.y; data.statusBox = new Rectangle(statusX, statusY, statusSize.width, statusSize.height); return data; } private class LayoutData { public Rectangle logoBox; public Rectangle statusBox; public Rectangle sagBox; public Rectangle sucBox; public Rectangle aipBox; public Rectangle srmBox; public Rectangle eacBox; public Rectangle iacBox; public Rectangle jadeBox; public PointList sag2sucPoints; public PointList suc2aipPoints; public PointList suc2srmPoints; public PointList aip2srmPoints; public PointList aip2eacPoints; public PointList eac2iacPoints; public PointList srm2iacPoints; public PointList iac2jadePoints; public Rectangle sag2sucBox; public Rectangle suc2aipBox; public Rectangle suc2srmBox; public Rectangle aip2eacBox; public Rectangle srm2iacBox; public Rectangle iac2jadeBox; public void apply(Point offset) { // logoFigure.setBounds(logoBox.getTranslated(offset)); statusFigure.setBounds(statusBox.getTranslated(offset)); sagFigure.setBounds(sagBox.getTranslated(offset)); sucFigure.setBounds(sucBox.getTranslated(offset)); aipFigure.setBounds(aipBox.getTranslated(offset)); srmFigure.setBounds(srmBox.getTranslated(offset)); eacFigure.setBounds(eacBox.getTranslated(offset)); iacFigure.setBounds(iacBox.getTranslated(offset)); jadeFigure.setBounds(jadeBox.getTranslated(offset)); sag2sucFlow.setPoints(getTranslated(sag2sucPoints, offset)); suc2aipFlow.setPoints(getTranslated(suc2aipPoints, offset)); suc2srmFlow.setPoints(getTranslated(suc2srmPoints, offset)); aip2srmFlow.setPoints(getTranslated(aip2srmPoints, offset)); aip2eacFlow.setPoints(getTranslated(aip2eacPoints, offset)); eac2iacFlow.setPoints(getTranslated(eac2iacPoints, offset)); srm2iacFlow.setPoints(getTranslated(srm2iacPoints, offset)); iac2jadeFlow.setPoints(getTranslated(iac2jadePoints, offset)); sag2sucFigure.setBounds(sag2sucBox.getTranslated(offset)); suc2aipFigure.setBounds(suc2aipBox.getTranslated(offset)); suc2srmFigure.setBounds(suc2srmBox.getTranslated(offset)); aip2eacFigure.setBounds(aip2eacBox.getTranslated(offset)); srm2iacFigure.setBounds(srm2iacBox.getTranslated(offset)); iac2jadeFigure.setBounds(iac2jadeBox.getTranslated(offset)); } private PointList getTranslated(PointList source, Point offset) { PointList target = new PointList(source.size()); target.addAll(source); target.translate(offset); return target; } public Dimension getSize() { Rectangle bounds = statusBox.getCopy(); // Rectangle bounds = logoBox.getCopy(); // bounds.union(statusBox); bounds.union(sagBox); bounds.union(sucBox); bounds.union(aipBox); bounds.union(srmBox); bounds.union(eacBox); bounds.union(iacBox); bounds.union(jadeBox); return bounds.getSize(); } } } }