/*******************************************************************************
 * Copyright (c) 2003, 2005 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.draw2d.examples.uml;

import org.eclipse.swt.graphics.*;

import org.eclipse.draw2d.*;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.draw2d.rap.swt.SWT;

public class UMLClassFigure extends Figure {

static final Color BG = new Color(null, 242, 240, 255);

static Image classImage =
	new Image(null, UMLClassFigure.class.getResourceAsStream("class_obj.gif"));

static Font BOLD = new Font(null, "", 10, SWT.BOLD);

public UMLClassFigure() {
	class SeparatorBorder extends MarginBorder {
		SeparatorBorder () {
			super(3, 5, 3, 5);
		}
		public void paint(IFigure figure, Graphics graphics, Insets insets) {
			Rectangle where = getPaintRectangle(figure, insets);
			graphics.drawLine(where.getTopLeft(), where.getTopRight());
		}
	}
	
	Label header = new Label("ClassName", classImage);
	header.setFont(BOLD);
	header.setBorder(new MarginBorder(3, 5, 3, 5));
	
	Figure attributes = new Figure();
	ToolbarLayout layout;
	attributes.setLayoutManager(layout = new ToolbarLayout());
	layout.setStretchMinorAxis(false);
	attributes.add(new Label("name : String"));
	attributes.add(new Label("ID : String"));
	attributes.setBorder(new SeparatorBorder());
	
	Figure methods = new Figure();
	methods.setLayoutManager(layout = new ToolbarLayout());
	layout.setStretchMinorAxis(false);
	methods.add(new Label("foo() : int"));
	methods.add(new Label("bar() : char"));
	methods.setBorder(new SeparatorBorder());
	
	setBorder(new LineBorder());
	setLayoutManager(new ToolbarLayout());
	
	add(header);
	add(attributes);
	add(methods);
	setOpaque(true);
	setBackgroundColor(BG);
}

}
