diff options
author | Tor Norbye <tnorbye@google.com> | 2012-04-19 15:05:27 -0700 |
---|---|---|
committer | android code review <noreply-gerritcodereview@google.com> | 2012-04-19 15:05:28 -0700 |
commit | 7d5e809721ca0f3460afcd8ae32fa366c86ec978 (patch) | |
tree | f456b9a3b7e64bee9a8f9980f58c641aa6dc3a7e /propertysheet/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java | |
parent | 710a161c9c528b5e5cb5cd6d0d41736881c9697f (diff) | |
parent | 4b1a9d7baa71df312585022c22e8025fafaba95a (diff) | |
download | eclipse-windowbuilder-7d5e809721ca0f3460afcd8ae32fa366c86ec978.tar.gz |
Merge "Add support for window docking in the property sheet code"android-cts-4.1_r4android-cts-4.1_r2android-cts-4.1_r1android-4.1.2_r2.1android-4.1.2_r2android-4.1.2_r1android-4.1.1_r6.1android-4.1.1_r6android-4.1.1_r5android-4.1.1_r4android-4.1.1_r3android-4.1.1_r2android-4.1.1_r1.1android-4.1.1_r1jb-releasejb-mr0-releasejb-dev
Diffstat (limited to 'propertysheet/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java')
-rw-r--r-- | propertysheet/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/propertysheet/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java b/propertysheet/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java new file mode 100644 index 0000000..ea94304 --- /dev/null +++ b/propertysheet/src/org/eclipse/wb/core/controls/SelfOrientingSashForm.java @@ -0,0 +1,149 @@ +/******************************************************************************* + * Copyright (c) 2011 Google, Inc. + * 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: + * Google, Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.wb.core.controls; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.SWTException; +import org.eclipse.swt.custom.SashForm; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Composite; + +/** + * Instances of the class <code>SelfOrientingSashForm</code> implement a sash form that will + * automatically reset its orientation based on the relationship between the width and height of the + * client area. This is done so that the sash form can be placed in a view that will sometimes be + * tall and narrow and sometimes be short and wide and still lay out its children in a pleasing way. + * <p> + * + * @author unknown + * @author Brian Wilkerson + * @version $Revision: 1.2 $ + * @coverage core.control + */ +public class SelfOrientingSashForm extends SashForm { + //////////////////////////////////////////////////////////////////////////// + // + // Constructors + // + //////////////////////////////////////////////////////////////////////////// + /** + * Initialize a newly created control to have the given parent and style. The style describes the + * behavior and appearance of this control. + * <p> + * The style value is either one of the style constants defined in the class <code>SWT</code> + * which is applicable to instances of this class, or must be built by <em>bitwise OR</em>'ing + * together (that is, using the <code>int</code> "|" operator) two or more of those + * <code>SWT</code> style constants. The class description for all SWT widget classes should + * include a comment which describes the style constants which are applicable to the class. + * </p> + * + * @param parent + * a widget which will be the parent of the new instance (not null) + * @param style + * the style of widget to construct + * + * @exception IllegalArgumentException + * <ul> + * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> + * </ul> + * @exception SWTException + * <ul> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the + * parent</li> + * <li>ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass</li> + * </ul> + */ + public SelfOrientingSashForm(Composite parent, int style) { + super(parent, style); + } + + //////////////////////////////////////////////////////////////////////////// + // + // Layout + // + //////////////////////////////////////////////////////////////////////////// + /** + * Returns SWT.HORIZONTAL if the controls in the SashForm are laid out side by side or + * SWT.VERTICAL if the controls in the SashForm are laid out top to bottom. + * + * @return SWT.HORIZONTAL or SWT.VERTICAL + */ + @Override + public int getOrientation() { + int currentOrientation = super.getOrientation(); + if (inSetOrientation) { + return currentOrientation; + } + int preferredOrientation = isDisposed() ? currentOrientation : getPreferredOrientation(); + if (currentOrientation != preferredOrientation) { + setOrientation(preferredOrientation); + } + return preferredOrientation; + } + + boolean inSetOrientation = false; + + @Override + public void setOrientation(int orientation) { + if (inSetOrientation) { + return; + } + inSetOrientation = true; + super.setOrientation(orientation); + inSetOrientation = false; + } + + /** + * If the receiver has a layout, ask the layout to <em>lay out</em> (that is, set the size and + * location of) the receiver's children. If the argument is <code>true</code> the layout must not + * rely on any cached information it is keeping about the children. If it is <code>false</code> + * the layout may (potentially) simplify the work it is doing by assuming that the state of the + * none of the receiver's children has changed since the last layout. If the receiver does not + * have a layout, do nothing. + * + * @param changed + * <code>true</code> if the layout must flush its caches, and <code>false</code> + * otherwise + * + * @exception SWTException + * <ul> + * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the + * receiver</li> + * </ul> + */ + @Override + public void layout(boolean changed) { + Rectangle area; + int oldOrientation, newOrientation; + area = getClientArea(); + if (area.width > 0 && area.height > 0) { + oldOrientation = super.getOrientation(); + newOrientation = SWT.HORIZONTAL; + if (area.width < area.height) { + newOrientation = SWT.VERTICAL; + } + if (newOrientation != oldOrientation) { + setOrientation(newOrientation); + changed = true; + } + } + super.layout(changed); + } + + private int getPreferredOrientation() { + Rectangle area = getClientArea(); + if (area.width > 0 && area.height > 0 && area.width < area.height) { + return SWT.VERTICAL; + } + return SWT.HORIZONTAL; + } +}
\ No newline at end of file |