org.eclipse.swt.widgets.Composite Maven / Gradle / Ivy
Show all versions of org.eclipse.swt.cocoa.macosx.x86_64 Show documentation
/******************************************************************************* * Copyright (c) 2000, 2011 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.widgets; import org.eclipse.swt.*; import org.eclipse.swt.accessibility.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.internal.cocoa.*; /** * Instances of this class are controls which are capable * of containing other controls. *
: **
*- Styles:
*- NO_BACKGROUND, NO_FOCUS, NO_MERGE_PAINTS, NO_REDRAW_RESIZE, NO_RADIO_GROUP, EMBEDDED, DOUBLE_BUFFERED
*- Events:
*- (none)
** Note: The
NO_BACKGROUND
,NO_FOCUS
,NO_MERGE_PAINTS
, * andNO_REDRAW_RESIZE
styles are intended for use withCanvas
. * They can be used withComposite
if you are drawing your own, but their * behavior is undefined if they are used with subclasses ofComposite
other * thanCanvas
. ** Note: The
CENTER
style, although undefined for composites, has the * same value asEMBEDDED
which is used to embed widgets from other * widget toolkits into SWT. On some operating systems (GTK, Motif), this may cause * the children of this composite to be obscured. ** This class may be subclassed by custom control implementors * who are building controls that are constructed from aggregates * of other controls. *
* * @see Canvas * @see Composite snippets * @see Sample code and further information */ public class Composite extends Scrollable { Layout layout; Control[] tabList; int layoutCount, backgroundMode; Composite () { /* Do nothing */ } /** * Constructs a new instance of this class given its parent * and a style value describing its behavior and appearance. ** The style value is either one of the style constants defined in * class
* * @param parent a widget which will be the parent of the new instance (cannot be null) * @param style the style of widget to construct * * @exception IllegalArgumentExceptionSWT
which is applicable to instances of this * class, or must be built by bitwise OR'ing together * (that is, using theint
"|" operator) two or more * of thoseSWT
style constants. The class description * lists the style constants that are applicable to the class. * Style bits are also inherited from superclasses. **
* @exception SWTException- ERROR_NULL_ARGUMENT - if the parent is null
**
* * @see SWT#NO_BACKGROUND * @see SWT#NO_FOCUS * @see SWT#NO_MERGE_PAINTS * @see SWT#NO_REDRAW_RESIZE * @see SWT#NO_RADIO_GROUP * @see SWT#EMBEDDED * @see SWT#DOUBLE_BUFFERED * @see Widget#getStyle */ public Composite (Composite parent, int style) { super (parent, style); } Control [] _getChildren () { NSArray views = contentView().subviews(); int count = (int)/*64*/views.count(); Control [] children = new Control [count]; if (count == 0) return children; int j = 0; for (int i=0; i- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent
** ERROR_INVALID_ARGUMENT - if the changed array is null any of its controls are null or have been disposed *ERROR_INVALID_PARENT - if any control in changed is not in the widget tree of the receiver * * @exception SWTException*
* * @since 3.1 */ public void changed (Control[] changed) { checkWidget (); if (changed == null) error (SWT.ERROR_INVALID_ARGUMENT); for (int i=0; i- ERROR_WIDGET_DISPOSED - if the receiver has been disposed
*- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
*The offsetX
andoffsetY
are used to map from * thegc
origin to the origin of the parent image background. This is useful * to ensure proper alignment of the image background. * * @param gc the gc where the rectangle is to be filled * @param x the x coordinate of the rectangle to be filled * @param y the y coordinate of the rectangle to be filled * @param width the width of the rectangle to be filled * @param height the height of the rectangle to be filled * @param offsetX the image background x offset * @param offsetY the image background y offset * * @exception IllegalArgumentException*
* @exception SWTException- ERROR_NULL_ARGUMENT - if the gc is null
*- ERROR_INVALID_ARGUMENT - if the gc has been disposed
**
* * @since 3.6 */ public void drawBackground(GC gc, int x, int y, int width, int height, int offsetX, int offsetY) { checkWidget (); if (gc == null) error (SWT.ERROR_NULL_ARGUMENT); if (gc.isDisposed ()) error (SWT.ERROR_INVALID_ARGUMENT); Control control = findBackgroundControl (); if (control != null) { NSRect rect = new NSRect(); rect.x = x; rect.y = y; rect.width = width; rect.height = height; int imgHeight = -1; GCData data = gc.getGCData(); if (data.image != null) imgHeight = data.image.getBounds().height; NSGraphicsContext context = gc.handle; if (data.flippedContext != null) { NSGraphicsContext.static_saveGraphicsState(); NSGraphicsContext.setCurrentContext(context); } control.fillBackground (view, context, rect, imgHeight, data.view, offsetX, offsetY); if (data.flippedContext != null) { NSGraphicsContext.static_restoreGraphicsState(); } } else { gc.fillRectangle (x, y, width, height); } } void drawBackground (long /*int*/ id, NSGraphicsContext context, NSRect rect) { if (id != view.id) return; if ((state & CANVAS) != 0) { if ((style & SWT.NO_BACKGROUND) == 0) { fillBackground (view, context, rect, -1); } } } Composite findDeferredControl () { return layoutCount > 0 ? this : parent.findDeferredControl (); } Menu [] findMenus (Control control) { if (control == this) return new Menu [0]; Menu result [] = super.findMenus (control); Control [] children = _getChildren (); for (int i=0; i- ERROR_WIDGET_DISPOSED - if the receiver has been disposed
*- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
*SWT INHERIT_NONE
,INHERIT_DEFAULT
, *INHERIT_FORCE
. * * @return the background mode * * @exception SWTException
-
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
* Note: This is not the actual structure used by the receiver * to maintain its list of children, so modifying the array will * not affect the receiver. *
* * @return an array of children * * @see Control#moveAbove * @see Control#moveBelow * * @exception SWTException-
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
-
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
true
if the receiver has deferred
* the performing of layout, and false
otherwise.
*
* @return the receiver's deferred layout state
*
* @exception SWTException -
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
-
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
false
* is returned.
*
* @return the receiver's deferred layout state
*
* @exception SWTException -
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
* This is equivalent to calling layout(true)
.
*
* Note: Layout is different from painting. If a child is * moved or resized such that an area in the parent is * exposed, then the parent will paint. If no child is * affected, the parent will not paint. *
* * @exception SWTException-
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
true
the layout must not rely
* on any information it has cached about the immediate children. If it
* is false
the layout may (potentially) optimize the
* work it is doing by assuming that none of the receiver's
* children has changed state since the last layout.
* If the receiver does not have a layout, do nothing.
*
* If a child is resized as a result of a call to layout, the
* resize event will invoke the layout of the child. The layout
* will cascade down through all child widgets in the receiver's widget
* tree until a child is encountered that does not resize. Note that
* a layout due to a resize will not flush any cached information
* (same as layout(false)
).
*
* Note: Layout is different from painting. If a child is * moved or resized such that an area in the parent is * exposed, then the parent will paint. If no child is * affected, the parent will not paint. *
* * @param changedtrue
if the layout must flush its caches, and false
otherwise
*
* @exception SWTException -
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
true
the layout must not rely
* on any information it has cached about its children. If it
* is false
the layout may (potentially) optimize the
* work it is doing by assuming that none of the receiver's
* children has changed state since the last layout.
* If the all argument is true
the layout will cascade down
* through all child widgets in the receiver's widget tree, regardless of
* whether the child has changed size. The changed argument is applied to
* all layouts. If the all argument is false
, the layout will
* not cascade down through all child widgets in the receiver's widget
* tree. However, if a child is resized as a result of a call to layout, the
* resize event will invoke the layout of the child. Note that
* a layout due to a resize will not flush any cached information
* (same as layout(false)
).
*
* * Note: Layout is different from painting. If a child is * moved or resized such that an area in the parent is * exposed, then the parent will paint. If no child is * affected, the parent will not paint. *
* * @param changedtrue
if the layout must flush its caches, and false
otherwise
* @param all true
if all children in the receiver's widget tree should be laid out, and false
otherwise
*
* @exception SWTException -
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
* Note: Layout is different from painting. If a child is * moved or resized such that an area in the parent is * exposed, then the parent will paint. If no child is * affected, the parent will not paint. *
* * @param changed a control that has had a state change which requires a recalculation of its size * * @exception IllegalArgumentException-
*
- ERROR_INVALID_ARGUMENT - if the changed array is null any of its controls are null or have been disposed *
- ERROR_INVALID_PARENT - if any control in changed is not in the widget tree of the receiver *
-
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
* The parameter flags
may be a combination of:
*
-
*
- SWT.ALL *
- all children in the receiver's widget tree should be laid out *
- SWT.CHANGED *
- the layout must flush its caches *
- SWT.DEFER *
- layout will be deferred *
* When the changed
array is specified, the flags SWT.ALL
* and SWT.CHANGED
have no effect. In this case, the layouts in the
* hierarchy must not rely on any information cached about the changed control or
* any of its ancestors. The layout may (potentially) optimize the
* work it is doing by assuming that none of the peers of the changed
* control have changed state since the last layout.
* If an ancestor does not have a layout, skip it.
*
* When the changed
array is not specified, the flag SWT.ALL
* indicates that the whole widget tree should be laid out. And the flag
* SWT.CHANGED
indicates that the layouts should flush any cached
* information for all controls that are laid out.
*
* The SWT.DEFER
flag always causes the layout to be deferred by
* calling Composite.setLayoutDeferred(true)
and scheduling a call
* to Composite.setLayoutDeferred(false)
, which will happen when
* appropriate (usually before the next event is handled). When this flag is set,
* the application should not call Composite.setLayoutDeferred(boolean)
.
*
* Note: Layout is different from painting. If a child is * moved or resized such that an area in the parent is * exposed, then the parent will paint. If no child is * affected, the parent will not paint. *
* * @param changed a control that has had a state change which requires a recalculation of its size * @param flags the flags specifying how the layout should happen * * @exception IllegalArgumentException-
*
- ERROR_INVALID_ARGUMENT - if any of the controls in changed is null or has been disposed *
- ERROR_INVALID_PARENT - if any control in changed is not in the widget tree of the receiver *
-
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
SWT
:
* INHERIT_NONE
, INHERIT_DEFAULT
,
* INHERIT_FORCE
.
*
* @param mode the new background mode
*
* @exception SWTException -
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
-
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
true
, causes subsequent layout
* operations in the receiver or any of its children to be ignored.
* No layout of any kind can occur in the receiver or any of its
* children until the flag is set to false.
* Layout operations that occurred while the flag was
* true
are remembered and when the flag is set to
* false
, the layout operations are performed in an
* optimized manner. Nested calls to this method are stacked.
*
* @param defer the new defer state
*
* @exception SWTException -
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *
-
*
- ERROR_WIDGET_DISPOSED - if the receiver has been disposed *
- ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver *