All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.swt.layout.FormAttachment Maven / Gradle / Ivy

Go to download

SWT is an open source widget toolkit for Java designed to provide efficient, portable access to the user-interface facilities of the operating systems on which it is implemented.

The newest version!
/*******************************************************************************
 * 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.widgets.*;

/**
 * Instances of this class are used to define the edges of a control
 * within a FormLayout. 
 * 

* FormAttachments are set into the top, bottom, left, * and right fields of the FormData for a control. * For example: *

 * 		FormData data = new FormData();
 * 		data.top = new FormAttachment(0,5);
 * 		data.bottom = new FormAttachment(100,-5);
 * 		data.left = new FormAttachment(0,5);
 * 		data.right = new FormAttachment(100,-5);
 * 		button.setLayoutData(data);
 * 
*

*

* A FormAttachment defines where to attach the side of * a control by using the equation, y = ax + b. The "a" term represents * a fraction of the parent composite's width (from the left) or height * (from the top). It can be defined using a numerator and denominator, * or just a percentage value. If a percentage is used, the denominator * is set to 100. The "b" term in the equation represents an offset, in * pixels, from the attachment position. For example: *

 * 		FormAttachment attach = new FormAttachment (20, -5);
 * 
* specifies that the side to which the FormAttachment * object belongs will lie at 20% of the parent composite, minus 5 pixels. *

*

* Control sides can also be attached to another control. * For example: *

 * 		FormAttachment attach = new FormAttachment (button, 10);
 * 
* specifies that the side to which the FormAttachment * object belongs will lie in the same position as the adjacent side of * the button control, plus 10 pixels. The control side can * also be attached to the opposite side of the specified control. * For example: *
 * 		FormData data = new FormData ();
 * 		data.left = new FormAttachment (button, 0, SWT.LEFT);
 * 
* specifies that the left side of the control will lie in the same position * as the left side of the button control. The control can also * be attached in a position that will center the control on the specified * control. For example: *
 * 		data.left = new FormAttachment (button, 0, SWT.CENTER);
 * 
* specifies that the left side of the control will be positioned so that it is * centered between the left and right sides of the button control. * If the alignment is not specified, the default is to attach to the adjacent side. *

* * @see FormLayout * @see FormData * @see Sample code and further information * * @since 2.0 */ public final class FormAttachment { /** * numerator specifies the numerator of the "a" term in the * equation, y = ax + b, which defines the attachment. */ public int numerator; /** * denominator specifies the denominator of the "a" term in the * equation, y = ax + b, which defines the attachment. * * The default value is 100. */ public int denominator = 100; /** * offset specifies the offset, in pixels, of the control side * from the attachment position. * If the offset is positive, then the control side is offset * to the right of or below the attachment position. If it is * negative, then the control side is offset to the left of or * above the attachment position. * * This is equivalent to the "b" term in the equation y = ax + b. * The default value is 0. */ public int offset; /** * control specifies the control to which the control side is * attached. */ public Control control; /** * alignment specifies the alignment of the control side that is * attached to a control. *

* For top and bottom attachments, TOP, BOTTOM and CENTER are used. For left * and right attachments, LEFT, RIGHT and CENTER are used. If any other case * occurs, the default will be used instead. *

* *
Possible values are:
    *
  • {@link SWT#TOP}: Attach the side to the top side of the specified control.
  • *
  • {@link SWT#BOTTOM}: Attach the side to the bottom side of the specified control.
  • *
  • {@link SWT#LEFT}: Attach the side to the left side of the specified control.
  • *
  • {@link SWT#RIGHT}: Attach the side to the right side of the specified control.
  • *
  • {@link SWT#CENTER}: Attach the side at a position which will center the control on the specified control.
  • *
  • {@link SWT#DEFAULT}: Attach the side to the adjacent side of the specified control.
  • *
*/ public int alignment; /** * Constructs a new instance of this class. * Since no numerator, denominator or offset is specified, * the attachment is treated as a percentage of the form. * The numerator is zero, the denominator is 100 and the * offset is zero. * * @since 3.2 */ public FormAttachment () { } /** * Constructs a new instance of this class given a numerator * Since no denominator or offset is specified, the default * is to treat the numerator as a percentage of the form, with a * denominator of 100. The offset is zero. * * @param numerator the percentage of the position * * @since 3.0 */ public FormAttachment (int numerator) { this (numerator, 100, 0); } /** * Constructs a new instance of this class given a numerator * and an offset. Since no denominator is specified, the default * is to treat the numerator as a percentage of the form, with a * denominator of 100. * * @param numerator the percentage of the position * @param offset the offset of the side from the position */ public FormAttachment (int numerator, int offset) { this (numerator, 100, offset); } /** * Constructs a new instance of this class given a numerator * and denominator and an offset. The position of the side is * given by the fraction of the form defined by the numerator * and denominator. * * @param numerator the numerator of the position * @param denominator the denominator of the position * @param offset the offset of the side from the position */ public FormAttachment (int numerator, int denominator, int offset) { if (denominator == 0) SWT.error (SWT.ERROR_CANNOT_BE_ZERO); this.numerator = numerator; this.denominator = denominator; this.offset = offset; } /** * Constructs a new instance of this class given a control. * Since no alignment is specified, the default alignment is * to attach the side to the adjacent side of the specified * control. Since no offset is specified, an offset of 0 is * used. * * @param control the control the side is attached to */ public FormAttachment (Control control) { this (control, 0, SWT.DEFAULT); } /** * Constructs a new instance of this class given a control * and an offset. Since no alignment is specified, the default * alignment is to attach the side to the adjacent side of the * specified control. * * @param control the control the side is attached to * @param offset the offset of the side from the control */ public FormAttachment (Control control, int offset) { this (control, offset, SWT.DEFAULT); } /** * Constructs a new instance of this class given a control, * an offset and an alignment. The possible alignment values are: *
*
{@link SWT#TOP}
*
the side will be attached to the top side of the specified control
*
{@link SWT#BOTTOM}
*
the side will be attached to the bottom side of the specified control
*
{@link SWT#LEFT}
*
the side will be attached to the left side of the specified control
*
{@link SWT#RIGHT}
*
the side will be attached to the right side of the specified control
*
{@link SWT#CENTER}
*
the side will be centered on the same side of the specified control
*
{@link SWT#DEFAULT}
*
the side will be attached to the adjacent side of the specified control
*
* * @param control the control the side is attached to * @param offset the offset of the side from the control * @param alignment the alignment of the side to the control it is attached to, * one of TOP, BOTTOM, LEFT, RIGHT, CENTER, or DEFAULT */ public FormAttachment (Control control, int offset, int alignment) { this.control = control; this.offset = offset; this.alignment = alignment; } FormAttachment divide (int value) { return new FormAttachment (numerator, denominator * value, offset / value); } int gcd (int m, int n) { int temp; m = Math.abs (m); n = Math.abs (n); if (m < n) { temp = m; m = n; n = temp; } while (n != 0){ temp = m; m = n; n = temp % n; } return m; } FormAttachment minus (FormAttachment attachment) { FormAttachment solution = new FormAttachment (); solution.numerator = numerator * attachment.denominator - denominator * attachment.numerator; solution.denominator = denominator * attachment.denominator; int gcd = gcd (solution.denominator, solution.numerator); solution.numerator = solution.numerator / gcd; solution.denominator = solution.denominator / gcd; solution.offset = offset - attachment.offset; return solution; } FormAttachment minus (int value) { return new FormAttachment (numerator, denominator, offset - value); } FormAttachment plus (FormAttachment attachment) { FormAttachment solution = new FormAttachment (); solution.numerator = numerator * attachment.denominator + denominator * attachment.numerator; solution.denominator = denominator * attachment.denominator; int gcd = gcd (solution.denominator, solution.numerator); solution.numerator = solution.numerator / gcd; solution.denominator = solution.denominator / gcd; solution.offset = offset + attachment.offset; return solution; } FormAttachment plus (int value) { return new FormAttachment (numerator, denominator, offset + value); } int solveX (int value) { if (denominator == 0) SWT.error (SWT.ERROR_CANNOT_BE_ZERO); return ((numerator * value) / denominator) + offset; } int solveY (int value) { if (numerator == 0) SWT.error (SWT.ERROR_CANNOT_BE_ZERO); return (value - offset) * denominator / numerator; } /** * Returns a string containing a concise, human-readable * description of the receiver. * * @return a string representation of the FormAttachment */ public String toString () { String string = control != null ? control.toString () : numerator + "/" + denominator; return "{y = (" + string + (offset >= 0 ? ")x + " + offset: ")x - " + (-offset))+"}"; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy