/** * 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.map.layouts; import org.eclipse.draw2d.AbstractLayout; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Rectangle; import org.whole.lang.ui.figures.IViewportTrackingStrategy; import org.whole.lang.ui.layout.BaselinedDimension; import org.whole.lang.ui.layout.ColumnLayout; import org.whole.lang.ui.layout.ICompositeEntityLayout; import org.whole.lang.ui.layout.IEntityLayout; import org.whole.lang.ui.layout.ITabularLayoutClient; import org.whole.lang.ui.layout.ITabularLayoutServer; /** * @author Riccardo Solmi */ public class EntityLayoutClient extends AbstractLayout implements IEntityLayout, ILayoutManagerServer { private ILayoutManagerServer layoutManagerServer; public IEntityLayout getTargetLayoutManager() { assert layoutManagerServer != null; return layoutManagerServer.getChildrenLayoutManager(); } public IEntityLayout getTargetLayoutManager(IFigure container) { if (layoutManagerServer == null) { IFigure parent = container.getParent(); if (parent != null) parent = parent.getParent(); layoutManagerServer = parent instanceof ILayoutManagerServer ? (ILayoutManagerServer) parent : this; } return layoutManagerServer.getChildrenLayoutManager(); } private IEntityLayout childrenLayoutManager; public IEntityLayout getChildrenLayoutManager() { if (childrenLayoutManager == null) childrenLayoutManager = createChildrenLayoutManager(); return childrenLayoutManager; } protected ICompositeEntityLayout createChildrenLayoutManager() { return new ColumnLayout().withMarginTop(5).withMarginBottom(5).withSpacing(5); } public void invalidate() { if (layoutManagerServer != null) layoutManagerServer.getChildrenLayoutManager().invalidate(); } public Object getConstraint(IFigure child) { return getTargetLayoutManager().getConstraint(child); } public void setConstraint(IFigure child, Object constraint) { if (layoutManagerServer != null) layoutManagerServer.getChildrenLayoutManager().setConstraint(child, constraint); } public BaselinedDimension getMinimumSize(IFigure container, int hint, int hint2) { return getTargetLayoutManager(container).getMinimumSize(container, hint, hint2); } public BaselinedDimension getPreferredSize(IFigure container, int hint, int hint2) { return getTargetLayoutManager(container).getPreferredSize(container, hint, hint2); } protected Dimension calculatePreferredSize(IFigure container, int hint, int hint2) { throw new IllegalStateException(); } protected IViewportTrackingStrategy viewportTrackingStrategy = IViewportTrackingStrategy.IDENTITY; public EntityLayoutClient withViewportTrackingStrategy(IViewportTrackingStrategy viewportTrackingStrategy) { this.viewportTrackingStrategy = viewportTrackingStrategy; return this; } public IViewportTrackingStrategy getViewportTrackingStrategy() { return viewportTrackingStrategy; } public boolean isHorizontal() { return getTargetLayoutManager().isHorizontal(); } public void layout(IFigure container) { getTargetLayoutManager(container).layout(container); } public void remove(IFigure child) { getTargetLayoutManager().remove(child); } public int getIndent(IFigure container) { return getTargetLayoutManager().getIndent(container); } public int getAscent(IFigure container) { return getTargetLayoutManager().getAscent(container); } public int getBaseline(int childIndex) { return getTargetLayoutManager().getBaseline(childIndex); } public Rectangle getBounds(int childIndex) { return getTargetLayoutManager().getBounds(childIndex); } public float getMajorAutoresizeWeight() { return getTargetLayoutManager().getMajorAutoresizeWeight(); } public float getMinorAutoresizeWeight() { return getTargetLayoutManager().getMinorAutoresizeWeight(); } public int getMarginLeft() { return getTargetLayoutManager().getMarginLeft(); } public int getMarginRight() { return getTargetLayoutManager().getMarginRight(); } public int getMarginTop() { return getTargetLayoutManager().getMarginTop(); } public int getMarginBottom() { return getTargetLayoutManager().getMarginBottom(); } public IEntityLayout withAutoresizeWeight(float weight) { return getTargetLayoutManager().withAutoresizeWeight(weight); } public IEntityLayout withMajorAutoresizeWeight(float weight) { return getTargetLayoutManager().withMajorAutoresizeWeight(weight); } public IEntityLayout withMinorAutoresizeWeight(float weight) { return getTargetLayoutManager().withMinorAutoresizeWeight(weight); } public IEntityLayout withMarginLeft(int marginLeft) { return getTargetLayoutManager().withMarginLeft(marginLeft); } public IEntityLayout withMarginRight(int marginRight) { return getTargetLayoutManager().withMarginRight(marginRight); } public IEntityLayout withMarginTop(int marginTop) { return getTargetLayoutManager().withMarginTop(marginTop); } public IEntityLayout withMarginBottom(int marginBottom) { return getTargetLayoutManager().withMarginBottom(marginBottom); } public IEntityLayout withMargin(int margin) { return getTargetLayoutManager().withMargin(margin); } public IEntityLayout withMargin(int marginTop, int marginLeft, int marginBottom, int marginRight) { return getTargetLayoutManager().withMargin(marginTop, marginLeft, marginBottom, marginRight); } public boolean isOrdered() { return getTargetLayoutManager().isOrdered(); } public int getSpacedChild() { return getTargetLayoutManager().getSpacedChild(); } public void setSpacedChild(int childIndex) { getTargetLayoutManager().setSpacedChild(childIndex); } public IEntityLayout withSpacing(int spacing) { getTargetLayoutManager().withSpacing(spacing); return this; } public int getSpacing() { return getTargetLayoutManager().getSpacing(); } public int getSpacingBefore(int childIndex) { return getTargetLayoutManager().getSpacingBefore(childIndex); } public ITabularLayoutServer getTabularLayoutServer() { return getTargetLayoutManager().getTabularLayoutServer(); } public ITabularLayoutClient getTabularLayoutClient() { return getTargetLayoutManager().getTabularLayoutClient(); } }