/** * Copyright 2004-2016 Riccardo Solmi. All rights reserved. * This file is part of the Whole Platform. * * The Whole Platform is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The Whole Platform is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with the Whole Platform. If not, see <http://www.gnu.org/licenses/>. */ package org.whole.lang.ui.notations.styledtree.figures; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.geometry.Rectangle; import org.whole.lang.ui.figures.AnchorFactory; import org.whole.lang.ui.figures.EntityFigure; import org.whole.lang.ui.figures.FigureConstants; import org.whole.lang.ui.figures.IEntityFigure; import org.whole.lang.ui.figures.NodeFigure; import org.whole.lang.ui.layout.RowLayout; import org.whole.lang.ui.notations.figures.DrawUtils; import org.whole.lang.ui.notations.styledtree.styling.IEntityStyling; /** * @author Riccardo Solmi */ public class DataNodeFigure extends NodeFigure { protected EntityFigure typeFigure; public DataNodeFigure(IEntityStyling entityStyling) { initContentPanes(getDataPaneIndex()+1); setLayoutManager(new RowLayout() { protected int getIndent() { return typeFigure.getBounds().width + DrawUtils.SPACING/2; }; public int getIndent(org.eclipse.draw2d.IFigure container) { return super.getIndent(container); }; }.withSpacing(DrawUtils.SPACING).withMargin(2, 4, 2, 8)); typeFigure = new EntityFigure(new RowLayout() .withSpacing(2).withMargin(2, 4, 2, 0)) { }; typeFigure.add(createTypeLabelFigure()); add(typeFigure); add(createDataFigure()); } protected int getDataPaneIndex() { return 1; } protected IEntityFigure createTypeLabelFigure() { return createContentPane(0); } protected IEntityFigure createDataFigure() { return createContentPane(getDataPaneIndex()); } @Override protected ConnectionAnchor[] createTargetAnchors() { return new ConnectionAnchor[] { AnchorFactory.createLeftMiddleAnchor(typeFigure) }; } protected void paintFigure(Graphics g) { super.paintFigure(g); g.setLineWidth(1); g.setForegroundColor(FigureConstants.blueColor); g.setBackgroundColor(FigureConstants.blueColor); Rectangle bounds = getBounds(); Rectangle nodeBounds = bounds.getResized(-1, -1).getShrinked(4, 2); int oldAlpha = g.getAlpha(); g.setAlpha(60); g.drawRoundRectangle(nodeBounds, 8, 8); g.setClip(nodeBounds.getResized(-(nodeBounds.width - typeFigure.getBounds().width)+DrawUtils.SPACING/2, 1)); g.fillRoundRectangle(nodeBounds, 8, 8); g.setAlpha(oldAlpha); g.drawRoundRectangle(nodeBounds, 8, 8); } }