blob: 47898ac6be3c38fea7da5c2d6e36b1f56fbeaa64 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}