/* * Copyright (c) 2006 Eclipse.org * * 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: * Dmitry Stadnik - initial API and implementation */ package org.eclipse.gmf.internal.bridge.ui.dashboard; import java.util.ArrayList; import java.util.List; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.RectangleFigure; import org.eclipse.draw2d.ToolbarLayout; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.graphics.Image; /** * @author dstadnik */ public class ModelFigure extends RectangleFigure implements ActionContainer { private IFigure labelsPlate; private IFigure actionsPlate; private IFigure stdActionsPlate; private List<SeparatorFigure> separators; public ModelFigure() { separators = new ArrayList<SeparatorFigure>(); ToolbarLayout layout = new ToolbarLayout(); layout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER); setLayoutManager(layout); labelsPlate = new Figure(); ToolbarLayout labelsLayout = new ToolbarLayout(); labelsPlate.setLayoutManager(labelsLayout); add(labelsPlate); SeparatorFigure s1 = new SeparatorFigure(); separators.add(s1); add(s1); actionsPlate = new Figure(); ToolbarLayout actionsLayout = new ToolbarLayout(); actionsLayout.setStretchMinorAxis(false); actionsPlate.setLayoutManager(actionsLayout); add(actionsPlate); stdActionsPlate = new Figure(); ToolbarLayout stdActionsLayout = new ToolbarLayout(true); stdActionsLayout.setSpacing(2); stdActionsPlate.setLayoutManager(stdActionsLayout); actionsPlate.add(stdActionsPlate); Label descriptionFigure = new Label(); descriptionFigure.setFont(JFaceResources.getBannerFont()); addLabel(descriptionFigure); Label nameFigure = new Label(); addLabel(nameFigure); setName(null); // init } public void setSpacing(int spacing) { setBorder(new MarginBorder(spacing, 0, spacing, 0)); for (SeparatorFigure separator : separators) { separator.setPreferredSize(new Dimension(0, spacing + separator.getLineWidth())); } labelsPlate.setBorder(new MarginBorder(0, spacing, 0, spacing)); actionsPlate.setBorder(new MarginBorder(0, spacing, 0, spacing)); } public void addLabel(IFigure labelFigure) { labelsPlate.add(labelFigure); } public void removeLabel(IFigure labelFigure) { labelsPlate.remove(labelFigure); } public final void addAction(IFigure actionFigure) { addAction(actionFigure, true); } public void addAction(IFigure actionFigure, boolean std) { Label bullet = new Label(); // bullet.setText("-"); if (std) { if (!stdActionsPlate.getChildren().isEmpty()) { bullet.setText("/"); //$NON-NLS-1$ } stdActionsPlate.add(bullet); stdActionsPlate.add(actionFigure); } else { IFigure plate = new Figure(); ToolbarLayout layout = new ToolbarLayout(true); layout.setSpacing(3); plate.setLayoutManager(layout); plate.add(bullet); plate.add(actionFigure); actionsPlate.add(plate); } } public void removeAction(IFigure actionFigure, boolean std) { if (std) { int ix = stdActionsPlate.getChildren().indexOf(actionFigure); IFigure bullet = (IFigure) stdActionsPlate.getChildren().get(ix); stdActionsPlate.remove(actionFigure); stdActionsPlate.remove(bullet); } else { actionsPlate.remove(actionFigure.getParent()); } } protected Label getLabel(int i) { return (Label) labelsPlate.getChildren().get(i); } public String getDescription() { return getLabel(0).getText(); } public void setDescription(String description) { getLabel(0).setText(description); } public void setIcon(Image icon) { getLabel(0).setIcon(icon); } public void setName(String name) { if (name == null || name.trim().length() == 0) { name = Messages.ModelFigure_NoName; } getLabel(1).setText(name); } public void setFullName(String name) { if (name == null || name.trim().length() == 0) { setToolTip(null); } else { Label tooltip = new Label(name); setToolTip(tooltip); } } }