Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/FormLayout.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/FormLayout.java385
1 files changed, 0 insertions, 385 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/FormLayout.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/FormLayout.java
deleted file mode 100644
index 8661996568..0000000000
--- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/layout/FormLayout.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2008 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.swt.layout;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-
-/**
- * Instances of this class control the position and size of the
- * children of a composite control by using <code>FormAttachments</code>
- * to optionally configure the left, top, right and bottom edges of
- * each child.
- * <p>
- * The following example code creates a <code>FormLayout</code> and then sets
- * it into a <code>Shell</code>:
- * <pre>
- * Display display = new Display ();
- * Shell shell = new Shell(display);
- * FormLayout layout = new FormLayout();
- * layout.marginWidth = 3;
- * layout.marginHeight = 3;
- * shell.setLayout(layout);
- * </pre>
- * </p>
- * <p>
- * To use a <code>FormLayout</code>, create a <code>FormData</code> with
- * <code>FormAttachment</code> for each child of <code>Composite</code>.
- * The following example code attaches <code>button1</code> to the top
- * and left edge of the composite and <code>button2</code> to the right
- * edge of <code>button1</code> and the top and right edges of the
- * composite:
- * <pre>
- * FormData data1 = new FormData();
- * data1.left = new FormAttachment(0, 0);
- * data1.top = new FormAttachment(0, 0);
- * button1.setLayoutData(data1);
- * FormData data2 = new FormData();
- * data2.left = new FormAttachment(button1);
- * data2.top = new FormAttachment(0, 0);
- * data2.right = new FormAttachment(100, 0);
- * button2.setLayoutData(data2);
- * </pre>
- * </p>
- * <p>
- * Each side of a child control can be attached to a position in the parent
- * composite, or to other controls within the <code>Composite</code> by
- * creating instances of <code>FormAttachment</code> and setting them into
- * the top, bottom, left, and right fields of the child's <code>FormData</code>.
- * </p>
- * <p>
- * If a side is not given an attachment, it is defined as not being attached
- * to anything, causing the child to remain at its preferred size. If a child
- * is given no attachment on either the left or the right or top or bottom, it is
- * automatically attached to the left and top of the composite respectively.
- * The following code positions <code>button1</code> and <code>button2</code>
- * but relies on default attachments:
- * <pre>
- * FormData data2 = new FormData();
- * data2.left = new FormAttachment(button1);
- * data2.right = new FormAttachment(100, 0);
- * button2.setLayoutData(data2);
- * </pre>
- * </p>
- * <p>
- * IMPORTANT: Do not define circular attachments. For example, do not attach
- * the right edge of <code>button1</code> to the left edge of <code>button2</code>
- * and then attach the left edge of <code>button2</code> to the right edge of
- * <code>button1</code>. This will over constrain the layout, causing undefined
- * behavior. The algorithm will terminate, but the results are undefined.
- * </p>
- *
- * @see FormData
- * @see FormAttachment
- * @see <a href="http://www.eclipse.org/swt/snippets/#formlayout">FormLayout snippets</a>
- * @see <a href="http://www.eclipse.org/swt/examples.php">SWT Example: LayoutExample</a>
- * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
- *
- * @since 2.0
- */
-public final class FormLayout extends Layout {
-
- /**
- * marginWidth specifies the number of pixels of horizontal margin
- * that will be placed along the left and right edges of the layout.
- *
- * The default value is 0.
- */
- public int marginWidth = 0;
-
- /**
- * marginHeight specifies the number of pixels of vertical margin
- * that will be placed along the top and bottom edges of the layout.
- *
- * The default value is 0.
- */
- public int marginHeight = 0;
-
-
- /**
- * marginLeft specifies the number of pixels of horizontal margin
- * that will be placed along the left edge of the layout.
- *
- * The default value is 0.
- *
- * @since 3.1
- */
- public int marginLeft = 0;
-
- /**
- * marginTop specifies the number of pixels of vertical margin
- * that will be placed along the top edge of the layout.
- *
- * The default value is 0.
- *
- * @since 3.1
- */
- public int marginTop = 0;
-
- /**
- * marginRight specifies the number of pixels of horizontal margin
- * that will be placed along the right edge of the layout.
- *
- * The default value is 0.
- *
- * @since 3.1
- */
- public int marginRight = 0;
-
- /**
- * marginBottom specifies the number of pixels of vertical margin
- * that will be placed along the bottom edge of the layout.
- *
- * The default value is 0.
- *
- * @since 3.1
- */
- public int marginBottom = 0;
-
- /**
- * spacing specifies the number of pixels between the edge of one control
- * and the edge of its neighbouring control.
- *
- * The default value is 0.
- *
- * @since 3.0
- */
- public int spacing = 0;
-
-/**
- * Constructs a new instance of this class.
- */
-public FormLayout () {
-}
-
-/*
- * Computes the preferred height of the form with
- * respect to the preferred height of the control.
- *
- * Given that the equations for top (T) and bottom (B)
- * of the control in terms of the height of the form (X)
- * are:
- * T = AX + B
- * B = CX + D
- *
- * The equation for the height of the control (H)
- * is bottom (B) minus top (T) or (H = B - T) or:
- *
- * H = (CX + D) - (AX + B)
- *
- * Solving for (X), the height of the form, we get:
- *
- * X = (H + B - D) / (C - A)
- *
- * When (A = C), (C - A = 0) and the equation has no
- * solution for X. This is a special case meaning that
- * the control does not constrain the height of the
- * form. In this case, we need to arbitrarily define
- * the height of the form (X):
- *
- * Case 1: A = C, A = 0, C = 0
- *
- * Let X = D, the distance from the top of the form
- * to the bottom edge of the control. In this case,
- * the control was attached to the top of the form
- * and the form needs to be large enough to show the
- * bottom edge of the control.
- *
- * Case 2: A = C, A = 1, C = 1
- *
- * Let X = -B, the distance from the bottom of the
- * form to the top edge of the control. In this case,
- * the control was attached to the bottom of the form
- * and the only way that the control would be visible
- * is if the offset is negative. If the offset is
- * positive, there is no possible height for the form
- * that will show the control as it will always be
- * below the bottom edge of the form.
- *
- * Case 3: A = C, A != 0, C != 0 and A != 1, C != 0
- *
- * Let X = D / (1 - C), the distance from the top of the
- * form to the bottom edge of the control. In this case,
- * since C is not 0 or 1, it must be a fraction, U / V.
- * The offset D is the distance from CX to the bottom edge
- * of the control. This represents a fraction of the form
- * (1 - C)X. Since the height of a fraction of the form is
- * known, the height of the entire form can be found by setting
- * (1 - C)X = D. We solve this equation for X in terms of U
- * and V, giving us X = (U * D) / (U - V). Similarly, if the
- * offset D is negative, the control is positioned above CX.
- * The offset -B is the distance from the top edge of the control
- * to CX. We can find the height of the entire form by setting
- * CX = -B. Solving in terms of U and V gives us X = (-B * V) / U.
- */
-int computeHeight (Control control, FormData data, boolean flushCache) {
- FormAttachment top = data.getTopAttachment (control, spacing, flushCache);
- FormAttachment bottom = data.getBottomAttachment (control, spacing, flushCache);
- FormAttachment height = bottom.minus (top);
- if (height.numerator == 0) {
- if (bottom.numerator == 0) return bottom.offset;
- if (bottom.numerator == bottom.denominator) return -top.offset;
- if (bottom.offset <= 0) {
- return -top.offset * top.denominator / bottom.numerator;
- }
- int divider = bottom.denominator - bottom.numerator;
- return bottom.denominator * bottom.offset / divider;
- }
- return height.solveY (data.getHeight (control, flushCache));
-}
-
-protected Point computeSize (Composite composite, int wHint, int hHint, boolean flushCache) {
- Point size = layout (composite, false, 0, 0, wHint, hHint, flushCache);
- if (wHint != SWT.DEFAULT) size.x = wHint;
- if (hHint != SWT.DEFAULT) size.y = hHint;
- return size;
-}
-
-protected boolean flushCache (Control control) {
- Object data = control.getLayoutData ();
- if (data != null) ((FormData) data).flushCache ();
- return true;
-}
-
-String getName () {
- String string = getClass ().getName ();
- int index = string.lastIndexOf ('.');
- if (index == -1) return string;
- return string.substring (index + 1, string.length ());
-}
-
-/*
- * Computes the preferred height of the form with
- * respect to the preferred height of the control.
- */
-int computeWidth (Control control, FormData data, boolean flushCache) {
- FormAttachment left = data.getLeftAttachment (control, spacing, flushCache);
- FormAttachment right = data.getRightAttachment (control, spacing, flushCache);
- FormAttachment width = right.minus (left);
- if (width.numerator == 0) {
- if (right.numerator == 0) return right.offset;
- if (right.numerator == right.denominator) return -left.offset;
- if (right.offset <= 0) {
- return -left.offset * left.denominator / left.numerator;
- }
- int divider = right.denominator - right.numerator;
- return right.denominator * right.offset / divider;
- }
- return width.solveY (data.getWidth (control, flushCache));
-}
-
-protected void layout (Composite composite, boolean flushCache) {
- Rectangle rect = composite.getClientArea ();
- int x = rect.x + marginLeft + marginWidth;
- int y = rect.y + marginTop + marginHeight;
- int width = Math.max (0, rect.width - marginLeft - 2 * marginWidth - marginRight);
- int height = Math.max (0, rect.height - marginTop - 2 * marginHeight - marginBottom);
- layout (composite, true, x, y, width, height, flushCache);
-}
-
-Point layout (Composite composite, boolean move, int x, int y, int width, int height, boolean flushCache) {
- Control [] children = composite.getChildren ();
- for (int i=0; i<children.length; i++) {
- Control child = children [i];
- FormData data = (FormData) child.getLayoutData ();
- if (data == null) child.setLayoutData (data = new FormData ());
- if (flushCache) data.flushCache ();
- data.cacheLeft = data.cacheRight = data.cacheTop = data.cacheBottom = null;
- }
- boolean [] flush = null;
- Rectangle [] bounds = null;
- int w = 0, h = 0;
- for (int i=0; i<children.length; i++) {
- Control child = children [i];
- FormData data = (FormData) child.getLayoutData ();
- if (width != SWT.DEFAULT) {
- data.needed = false;
- FormAttachment left = data.getLeftAttachment (child, spacing, flushCache);
- FormAttachment right = data.getRightAttachment (child, spacing, flushCache);
- int x1 = left.solveX (width), x2 = right.solveX (width);
- if (data.height == SWT.DEFAULT && !data.needed) {
- int trim = 0;
- //TEMPORARY CODE
- if (child instanceof Scrollable) {
- Rectangle rect = ((Scrollable) child).computeTrim (0, 0, 0, 0);
- trim = rect.width;
- } else {
- trim = child.getBorderWidth () * 2;
- }
- data.cacheWidth = data.cacheHeight = -1;
- int currentWidth = Math.max (0, x2 - x1 - trim);
- data.computeSize (child, currentWidth, data.height, flushCache);
- if (flush == null) flush = new boolean [children.length];
- flush [i] = true;
- }
- w = Math.max (x2, w);
- if (move) {
- if (bounds == null) bounds = new Rectangle [children.length];
- bounds [i] = new Rectangle (0, 0, 0, 0);
- bounds [i].x = x + x1;
- bounds [i].width = x2 - x1;
- }
- } else {
- w = Math.max (computeWidth (child, data, flushCache), w);
- }
- }
- for (int i=0; i<children.length; i++) {
- Control child = children [i];
- FormData data = (FormData) child.getLayoutData ();
- if (height != SWT.DEFAULT) {
- int y1 = data.getTopAttachment (child, spacing, flushCache).solveX (height);
- int y2 = data.getBottomAttachment (child, spacing, flushCache).solveX (height);
- h = Math.max (y2, h);
- if (move) {
- bounds [i].y = y + y1;
- bounds [i].height = y2 - y1;
- }
- } else {
- h = Math.max (computeHeight (child, data, flushCache), h);
- }
- }
- for (int i=0; i<children.length; i++) {
- Control child = children [i];
- FormData data = (FormData) child.getLayoutData ();
- if (flush != null && flush [i]) data.cacheWidth = data.cacheHeight = -1;
- data.cacheLeft = data.cacheRight = data.cacheTop = data.cacheBottom = null;
- }
- if (move) {
- for (int i=0; i<children.length; i++) {
- children [i].setBounds (bounds [i]);
- }
- }
- w += marginLeft + marginWidth * 2 + marginRight;
- h += marginTop + marginHeight * 2 + marginBottom;
- return new Point (w, h);
-}
-
-/**
- * Returns a string containing a concise, human-readable
- * description of the receiver.
- *
- * @return a string representation of the layout
- */
-public String toString () {
- String string = getName ()+" {";
- if (marginWidth != 0) string += "marginWidth="+marginWidth+" ";
- if (marginHeight != 0) string += "marginHeight="+marginHeight+" ";
- if (marginLeft != 0) string += "marginLeft="+marginLeft+" ";
- if (marginRight != 0) string += "marginRight="+marginRight+" ";
- if (marginTop != 0) string += "marginTop="+marginTop+" ";
- if (marginBottom != 0) string += "marginBottom="+marginBottom+" ";
- if (spacing != 0) string += "spacing="+spacing+" ";
- string = string.trim();
- string += "}";
- return string;
-}
-}

Back to the top