/******************************************************************************* * Copyright (c) 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.bpel.common.ui.flatui; import org.eclipse.swt.SWT; public final class FlatFormData extends BorderData { /** * height specifies the desired height in pixels */ public int height; /** * width specifies the desired width in pixels */ public int width; /** * left specifies the attachment of the left side of * the control. */ public FlatFormAttachment left; /** * right specifies the attachment of the right side of * the control. */ public FlatFormAttachment right; /** * top specifies the attachment of the top of the control. */ public FlatFormAttachment top; /** * bottom specifies the attachment of the bottom of the * control. */ public FlatFormAttachment bottom; int cacheHeight, cacheWidth; boolean isVisited; public FlatFormData () { this (SWT.DEFAULT, SWT.DEFAULT); } public FlatFormData (int width, int height) { this.width = width; this.height = height; } FlatFormAttachment getBottomAttachment () { if (isVisited) return new FlatFormAttachment (0, cacheHeight); if (bottom == null) { if (top == null) return new FlatFormAttachment (0, cacheHeight); return getTopAttachment ().plus (cacheHeight); } if (bottom.control == null) return bottom; isVisited = true; FlatFormData bottomData = (FlatFormData) bottom.control.getLayoutData (); FlatFormAttachment topAttachment = bottomData.getTopAttachment (); FlatFormAttachment bottomAttachment = bottomData.getBottomAttachment (); isVisited = false; if (bottom.alignment == SWT.BOTTOM) return bottomAttachment.plus (bottom.offset); if (bottom.alignment == SWT.CENTER) { FlatFormAttachment bottomHeight = bottomAttachment.minus (topAttachment); return bottomAttachment.minus (bottomHeight.minus (cacheHeight).divide (2)); } return topAttachment.plus (bottom.offset); } FlatFormAttachment getLeftAttachment () { if (isVisited) return new FlatFormAttachment (0, 0); if (left == null) { if (right == null) return new FlatFormAttachment (0, 0); return getRightAttachment ().minus (cacheWidth); } if (left.control == null) return left; isVisited = true; FlatFormData leftData = (FlatFormData) left.control.getLayoutData (); FlatFormAttachment rightAttachment = leftData.getRightAttachment (); FlatFormAttachment leftAttachment = leftData.getLeftAttachment (); isVisited = false; if (left.alignment == SWT.LEFT) return leftAttachment.plus (left.offset); if (left.alignment == SWT.CENTER) { FlatFormAttachment leftWidth = rightAttachment.minus (leftAttachment); return leftAttachment.plus (leftWidth.minus (cacheWidth).divide (2)); } return rightAttachment.plus (left.offset); } FlatFormAttachment getRightAttachment () { if (isVisited) return new FlatFormAttachment (0, cacheWidth); if (right == null) { if (left == null) return new FlatFormAttachment (0, cacheWidth); return getLeftAttachment ().plus (cacheWidth); } if (right.control == null) return right; isVisited = true; FlatFormData rightData = (FlatFormData) right.control.getLayoutData (); FlatFormAttachment leftAttachment = rightData.getLeftAttachment (); FlatFormAttachment rightAttachment = rightData.getRightAttachment (); isVisited = false; if (right.alignment == SWT.RIGHT) return rightAttachment.plus (right.offset); if (right.alignment == SWT.CENTER) { FlatFormAttachment rightWidth = rightAttachment.minus (leftAttachment); return rightAttachment.minus (rightWidth.minus (cacheWidth).divide (2)); } return leftAttachment.plus (right.offset); } FlatFormAttachment getTopAttachment () { if (isVisited) return new FlatFormAttachment (0, 0); if (top == null) { if (bottom == null) return new FlatFormAttachment (0, 0); return getBottomAttachment ().minus (cacheHeight); } if (top.control == null) return top; isVisited = true; FlatFormData topData = (FlatFormData) top.control.getLayoutData (); FlatFormAttachment topAttachment = topData.getTopAttachment (); FlatFormAttachment bottomAttachment = topData.getBottomAttachment (); isVisited = false; if (top.alignment == SWT.TOP) return topAttachment.plus (top.offset); if (top.alignment == SWT.CENTER) { FlatFormAttachment topHeight = bottomAttachment.minus (topAttachment); return topAttachment.plus (topHeight.minus (cacheHeight).divide (2)); } return bottomAttachment.plus (top.offset); } @Override public String toString () { String string = getClass().getName ()+" {"; if (width != 0) string += "w=" + width + " " ; if (height != 0) string += "h="+height+" "; if (left != null) string += "L=(" + left + ") "; if (right != null) string += "R=(" + right + ") "; if (top != null) string += "T=(" + top + ") "; if (bottom != null) string += "B=(" + bottom + ") "; string = string.trim(); string += "}"; return string; } }