/******************************************************************************* * Copyright (c) 2001, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.wst.xsd.ui.internal.adt.typeviz.design.figures; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.ToolbarLayout; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.EditPart; import org.eclipse.swt.graphics.Color; import org.eclipse.wst.xsd.ui.internal.adt.design.DesignViewerGraphicConstants; import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.StructureEditPart; import org.eclipse.wst.xsd.ui.internal.adt.design.figures.ICompartmentFigure; import org.eclipse.wst.xsd.ui.internal.adt.design.figures.IStructureFigure; import org.eclipse.wst.xsd.ui.internal.adt.typeviz.design.layouts.RowLayout; import org.eclipse.wst.xsd.ui.internal.design.figures.GenericGroupFigure; public class CompartmentFigure extends Figure implements ICompartmentFigure { public Label nodeNameLabel; protected Figure contentPane; protected Figure annotationArea; public Figure rowFigure; public CompartmentFigure() { super(); rowFigure = new Figure(); add(rowFigure); annotationArea = new Figure() { public void paint(Graphics graphics) { super.paint(graphics); try { graphics.pushState(); graphics.setForegroundColor(ColorConstants.blue); graphics.setFont(DesignViewerGraphicConstants.smallFont); List children = getChildren(); for (Iterator i = children.iterator(); i.hasNext(); ) { Figure object = (Figure)i.next(); traverse(object, graphics); } } finally { graphics.popState(); } } private void traverse(Figure figure, Graphics graphics) { List children = figure.getChildren(); for (Iterator i = children.iterator(); i.hasNext(); ) { Figure object = (Figure)i.next(); if (object instanceof GenericGroupFigure) { GenericGroupFigure fig = (GenericGroupFigure) object; if (fig.hasText()) graphics.drawText(fig.getText(), fig.getTextCoordinates()); } traverse(object, graphics); } } }; ToolbarLayout annotationLayout = new ToolbarLayout(false); annotationLayout.setStretchMinorAxis(true); annotationArea.setLayoutManager(annotationLayout); // Need this to show content model structure on the left side of the figure rowFigure.add(annotationArea); contentPane = new Figure() { public void paint(Graphics graphics) { super.paint(graphics); graphics.pushState(); try { boolean isFirst = true; Color oldColor = graphics.getForegroundColor(); graphics.setForegroundColor(ColorConstants.lightGray); for (Iterator i = getChildren().iterator(); i.hasNext();) { Figure figure = (Figure) i.next(); Rectangle r = figure.getBounds(); // if (figure instanceof FieldFigure) // { // Rectangle rChild = ((FieldFigure)figure).getNameFigure().getBounds(); // graphics.drawLine(rChild.right(), rChild.y, rChild.right(), rChild.bottom()); // graphics.setForegroundColor(ColorConstants.darkGray); // } if (isFirst) { isFirst = false; // graphics.drawLine(r.x, r.y, r.x, r.y + r.height); } else { graphics.setForegroundColor(ColorConstants.white); graphics.setBackgroundColor(ColorConstants.lightGray); graphics.fillGradient(r.x, r.y, r.width, 1, false); // graphics.drawLine(r.x, r.y, r.x + r.width, r.y); // graphics.drawLine(r.x, r.y, r.x, r.y + r.height); } } graphics.setForegroundColor(oldColor); } finally { graphics.popState(); } } }; contentPane.setLayoutManager(new ToolbarLayout()); rowFigure.add(contentPane); RowLayout rowLayout = new RowLayout(); rowFigure.setLayoutManager(rowLayout); rowLayout.setConstraint(annotationArea, "annotation"); rowLayout.setConstraint(contentPane, "contentPane"); } public IFigure getContentPane() { return contentPane; } public IFigure getAnnotationPane() { return annotationArea; } public void editPartAttached(EditPart owner) { StructureEditPart structureEditPart = null; for (EditPart parent = owner.getParent(); parent != null; parent = parent.getParent()) { if (parent instanceof StructureEditPart) { structureEditPart = (StructureEditPart) parent; break; } } RowLayout rowLayout = (RowLayout)rowFigure.getLayoutManager(); IStructureFigure typeFigure = structureEditPart.getStructureFigure(); Assert.isTrue(typeFigure instanceof StructureFigure, "Expected object of type StructureFigure"); rowLayout.setColumnData(((StructureFigure)typeFigure).getColumnData()); } public void addSelectionFeedback() { } public void removeSelectionFeedback() { } public void refreshVisuals(Object model) { // TODO Auto-generated method stub } }