Mercurial > projects > dwt-addons
view dwtx/draw2d/DelegatingLayout.d @ 98:95307ad235d9
Added Draw2d code, still work in progress
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 03 Aug 2008 00:52:14 +0200 |
parents | |
children |
line wrap: on
line source
/******************************************************************************* * Copyright (c) 2000, 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 * Port to the D programming language: * Frank Benoit <benoit@tionex.de> *******************************************************************************/ module dwtx.draw2d.DelegatingLayout; import dwt.dwthelper.utils; import dwtx.dwtxhelper.Collection; import dwtx.draw2d.geometry.Dimension; import dwtx.draw2d.IFigure; import dwtx.draw2d.AbstractLayout; import dwtx.draw2d.Locator; /** * Figures using a DelegatingLayout as their layout manager give * location responsibilities to their children. The children * of a Figure using a DelegatingLayout should have a * {@link Locator Locator} as a constraint whose * {@link Locator#relocate(IFigure target) relocate} method is * responsible for placing the child. */ public class DelegatingLayout : AbstractLayout { private Map constraints; this(){ constraints = new HashMap(); } /** * Calculates the preferred size of the given Figure. * For the DelegatingLayout, this is the largest width and height * values of the passed Figure's children. * * @param parent the figure whose preferred size is being calculated * @param wHint the width hint * @param hHint the height hint * @return the preferred size * @since 2.0 */ protected Dimension calculatePreferredSize(IFigure parent, int wHint, int hHint) { List children = parent.getChildren(); Dimension d = new Dimension(); for (int i = 0; i < children.size(); i++) { IFigure child = cast(IFigure)children.get(i); d.union_(child.getPreferredSize()); } return d; } /** * @see dwtx.draw2d.LayoutManager#getConstraint(dwtx.draw2d.IFigure) */ public Object getConstraint(IFigure child) { return constraints.get(cast(Object)child); } /** * Lays out the given figure's children based on their {@link Locator} constraint. * @param parent the figure whose children should be layed out */ public void layout(IFigure parent) { List children = parent.getChildren(); for (int i = 0; i < children.size(); i++) { IFigure child = cast(IFigure)children.get(i); Locator locator = cast(Locator)constraints.get(cast(Object)child); if (locator !is null) { locator.relocate(child); } } } /** * Removes the locator for the given figure. * @param child the child being removed */ public void remove(IFigure child) { constraints.remove(cast(Object)child); } /** * Sets the constraint for the given figure. * @param figure the figure whose contraint is being set * @param constraint the new constraint */ public void setConstraint(IFigure figure, Object constraint) { super.setConstraint(figure, constraint); if (constraint !is null) constraints.put(cast(Object)figure, constraint); } }