summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ScrollBar.java
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ScrollBar.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ScrollBar.java769
1 files changed, 213 insertions, 556 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ScrollBar.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ScrollBar.java
index b4055f1a14..839ba34afb 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ScrollBar.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/ScrollBar.java
@@ -6,121 +6,31 @@ package org.eclipse.swt.widgets;
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*/
+
+import org.eclipse.swt.internal.carbon.OS;
+import org.eclipse.swt.internal.carbon.Rect;
-import org.eclipse.swt.internal.carbon.*;
import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
-/**
- * Instances of this class are selectable user interface
- * objects that represent a range of positive, numeric values.
- * <p>
- * At any given moment, a given scroll bar will have a
- * single <em>selection</em> that is considered to be its
- * value, which is constrained to be within the range of
- * values the scroll bar represents (that is, between its
- * <em>minimum</em> and <em>maximum</em> values).
- * </p><p>
- * Typically, scroll bars will be made up of five areas:
- * <ol>
- * <li>an arrow button for decrementing the value</li>
- * <li>a page decrement area for decrementing the value by a larger amount</li>
- * <li>a <em>thumb</em> for modifying the value by mouse dragging</li>
- * <li>a page increment area for incrementing the value by a larger amount</li>
- * <li>an arrow button for incrementing the value</li>
- * </ol>
- * Based on their style, scroll bars are either <code>HORIZONTAL</code>
- * (which have a left facing button for decrementing the value and a
- * right facing button for incrementing it) or <code>VERTICAL</code>
- * (which have an upward facing button for decrementing the value
- * and a downward facing buttons for incrementing it).
- * </p><p>
- * On some platforms, the size of the scroll bar's thumb can be
- * varied relative to the magnitude of the range of values it
- * represents (that is, relative to the difference between its
- * maximum and minimum values). Typically, this is used to
- * indicate some proportional value such as the ratio of the
- * visible area of a document to the total amount of space that
- * it would take to display it. SWT supports setting the thumb
- * size even if the underlying platform does not, but in this
- * case the appearance of the scroll bar will not change.
- * </p><p>
- * Scroll bars are created by specifying either <code>H_SCROLL</code>,
- * <code>V_SCROLL</code> or both when creating a <code>Scrollable</code>.
- * They are accessed from the <code>Scrollable</code> using
- * <code>getHorizontalBar</code> and <code>getVerticalBar</code>.
- * </p><p>
- * Note: Scroll bars are not Controls. On some platforms, scroll bars
- * that appear as part of some standard controls such as a text or list
- * have no operating system resources and are not children of the control.
- * For this reason, scroll bars are treated specially. To create a control
- * that looks like a scroll bar but has operating system resources, use
- * <code>Slider</code>.
- * </p>
- * <dl>
- * <dt><b>Styles:</b></dt>
- * <dd>HORIZONTAL, VERTICAL</dd>
- * <dt><b>Events:</b></dt>
- * <dd>Selection</dd>
- * </dl>
- * <p>
- * Note: Only one of the styles HORIZONTAL and VERTICAL may be specified.
- * </p><p>
- * IMPORTANT: This class is <em>not</em> intended to be subclassed.
- * </p>
- *
- * @see Slider
- * @see Scrollable
- * @see Scrollable#getHorizontalBar
- * @see Scrollable#getVerticalBar
- */
-public /*final*/ class ScrollBar extends Widget {
+public class ScrollBar extends Widget {
+ int handle;
Scrollable parent;
- private int increment= 1;
- private int pageIncrement= 10;
- boolean visible= true;
-
+ boolean dragging;
+ int increment = 1;
+ int pageIncrement = 10;
+
ScrollBar () {
- /* Do Nothing */
+ /* Do nothing */
}
+
ScrollBar (Scrollable parent, int style) {
super (parent, checkStyle (style));
this.parent = parent;
- createWidget (0);
-}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when the receiver's value changes, by sending
- * it one of the messages defined in the <code>SelectionListener</code>
- * interface.
- * <p>
- * When <code>widgetSelected</code> is called, the event object detail field contains one of the following values:
- * <code>0</code> - for the end of a drag.
- * <code>SWT.DRAG</code>.
- * <code>SWT.HOME</code>.
- * <code>SWT.END</code>.
- * <code>SWT.ARROW_DOWN</code>.
- * <code>SWT.ARROW_UP</code>.
- * <code>SWT.PAGE_DOWN</code>.
- * <code>SWT.PAGE_UP</code>.
- * <code>widgetDefaultSelected</code> is not called.
- * </p>
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @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>
- *
- * @see SelectionListener
- * @see #removeSelectionListener
- * @see SelectionEvent
- */
+ createWidget ();
+}
+
public void addSelectionListener(SelectionListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -128,482 +38,251 @@ public void addSelectionListener(SelectionListener listener) {
addListener(SWT.Selection,typedListener);
addListener(SWT.DefaultSelection,typedListener);
}
+
static int checkStyle (int style) {
return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
}
-void createHandle (int index) {
- state |= HANDLE;
- handle= 0;
- if ((style & SWT.H_SCROLL) != 0) {
- handle= parent.hScrollBar;
- } else if ((style & SWT.V_SCROLL) != 0) {
- handle= parent.vScrollBar;
+
+int actionProc (int theControl, int partCode) {
+ Event event = new Event ();
+ int value = OS.GetControl32BitValue (handle);
+ switch (partCode) {
+ case OS.kControlUpButtonPart:
+ value -= increment;
+ event.detail = SWT.ARROW_UP;
+ break;
+ case OS.kControlPageUpPart:
+ value -= pageIncrement;
+ event.detail = SWT.PAGE_UP;
+ break;
+ case OS.kControlPageDownPart:
+ value += pageIncrement;
+ event.detail = SWT.PAGE_DOWN;
+ break;
+ case OS.kControlDownButtonPart:
+ value += increment;
+ event.detail = SWT.ARROW_DOWN;
+ break;
+ case OS.kControlIndicatorPart:
+ dragging = true;
+ event.detail = SWT.DRAG;
+ break;
+ default:
+ return 0;
}
- if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+ OS.SetControl32BitValue (handle, value);
+ sendEvent (SWT.Selection, event);
+ if (dragging) {
+ Display display = getDisplay ();
+ display.update ();
+ }
+ return 0;
}
-/**
-* Gets the Display.
-*/
+
+void destroyWidget () {
+ int theControl = handle;
+ releaseHandle ();
+ if (theControl != 0) {
+ OS.DisposeControl (theControl);
+ }
+}
+
+void createHandle () {
+ Display display = getDisplay ();
+ int actionProc = display.actionProc;
+ int [] outControl = new int [1];
+ int window = OS.GetControlOwner (parent.scrolledHandle);
+ OS.CreateScrollBarControl (window, null, 0, 0, 90, 10, true, actionProc, outControl);
+ if (outControl [0] == 0) error (SWT.ERROR_NO_HANDLES);
+ handle = outControl [0];
+}
+
+void createWidget () {
+ super.createWidget ();
+ setZOrder ();
+}
+
+void deregister () {
+ super.deregister ();
+ WidgetTable.remove (handle);
+}
+
public Display getDisplay () {
Scrollable parent = this.parent;
if (parent == null) error (SWT.ERROR_WIDGET_DISPOSED);
return parent.getDisplay ();
}
-/**
- * Returns <code>true</code> if the receiver is enabled, and
- * <code>false</code> otherwise. A disabled control is typically
- * not selectable from the user interface and draws with an
- * inactive or "grayed" look.
- *
- * @return the enabled state
- *
- * @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>
- */
+
public boolean getEnabled () {
checkWidget();
- return OS.IsControlEnabled(handle);
-}
-/**
- * Returns the amount that the receiver's value will be
- * modified by when the up/down (or right/left) arrows
- * are pressed.
- *
- * @return the increment
- *
- * @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>
- */
+ return (state & DISABLED) == 0;
+}
+
public int getIncrement () {
checkWidget();
return increment;
}
-/**
- * Returns the maximum value which the receiver will allow.
- *
- * @return the maximum
- *
- * @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>
- */
+
public int getMaximum () {
checkWidget();
- return OS.GetControl32BitMaximum(handle) + OS.GetControlViewSize(handle);
-}
-/**
- * Returns the minimum value which the receiver will allow.
- *
- * @return the minimum
- *
- * @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>
- */
+ int maximum = OS.GetControl32BitMaximum (handle);
+ int viewSize = OS.GetControlViewSize (handle);
+ return maximum + viewSize;
+}
+
public int getMinimum () {
checkWidget();
- return OS.GetControl32BitMinimum(handle);
-}
-/**
- * Returns the amount that the receiver's value will be
- * modified by when the page increment/decrement areas
- * are selected.
- *
- * @return the page increment
- *
- * @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>
- */
+ return OS.GetControl32BitMinimum (handle);
+}
+
public int getPageIncrement () {
checkWidget();
return pageIncrement;
}
-/**
- * Returns the receiver's parent, which must be scrollable.
- *
- * @return the receiver's parent
- *
- * @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>
- */
+
public Scrollable getParent () {
- checkWidget();
+ checkWidget ();
return parent;
}
-/**
- * Returns the single <em>selection</em> that is the receiver's value.
- *
- * @return the selection
- *
- * @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>
- */
+
public int getSelection () {
checkWidget();
- return OS.GetControl32BitValue(handle);
-}
-/**
- * Returns a point describing the receiver's size. The
- * x coordinate of the result is the width of the receiver.
- * The y coordinate of the result is the height of the
- * receiver.
- *
- * @return the receiver's size
- *
- * @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>
- */
+ return OS.GetControl32BitValue (handle);
+}
+
public Point getSize () {
checkWidget();
- MacRect bounds= new MacRect();
- OS.GetControlBounds(handle, bounds.getData());
- return bounds.getSize();
-}
-/**
- * Answers the size of the receiver's thumb relative to the
- * difference between its maximum and minimum values.
- *
- * @return the thumb value
- *
- * @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>
- *
- * @see ScrollBar
- */
+ Rect rect = getControlSize (handle);
+ return new Point (rect.right - rect.left, rect.bottom - rect.top);
+}
+
public int getThumb () {
checkWidget();
- return OS.GetControlViewSize(handle);
-}
-/**
- * Returns <code>true</code> if the receiver is visible, and
- * <code>false</code> otherwise.
- * <p>
- * If one of the receiver's ancestors is not visible or some
- * other condition makes the receiver not visible, this method
- * may still indicate that it is considered visible even though
- * it may not actually be showing.
- * </p>
- *
- * @return the receiver's visibility state
- *
- * @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>
- */
+ return OS.GetControlViewSize (handle);
+}
+
public boolean getVisible () {
checkWidget();
- return OS.IsControlVisible(handle);
+ return (state & HIDDEN) == 0;
}
-/* AW
+
void hookEvents () {
- int windowProc = parent.getDisplay ().windowProc;
- OS.XtAddCallback (handle, OS.XmNvalueChangedCallback, windowProc, SWT.Selection);
- OS.XtAddCallback (handle, OS.XmNdragCallback, windowProc, SWT.Selection);
- OS.XtAddCallback (handle, OS.XmNtoBottomCallback, windowProc, SWT.Selection);
- OS.XtAddCallback (handle, OS.XmNincrementCallback, windowProc, SWT.Selection);
- OS.XtAddCallback (handle, OS.XmNdecrementCallback, windowProc, SWT.Selection);
- OS.XtAddCallback (handle, OS.XmNpageIncrementCallback, windowProc, SWT.Selection);
- OS.XtAddCallback (handle, OS.XmNpageDecrementCallback, windowProc, SWT.Selection);
- OS.XtAddCallback (handle, OS.XmNtoTopCallback, windowProc, SWT.Selection);
-}
-*/
-/**
- * Returns <code>true</code> if the receiver is enabled and all
- * of the receiver's ancestors are enabled, and <code>false</code>
- * otherwise. A disabled control is typically not selectable from the
- * user interface and draws with an inactive or "grayed" look.
- *
- * @return the receiver's enabled state
- *
- * @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>
- *
- * @see #getEnabled
- */
+ super.hookEvents ();
+ Display display = getDisplay ();
+ int controlProc = display.controlProc;
+ int [] mask = new int [] {
+ OS.kEventClassControl, OS.kEventControlDraw,
+ };
+ int controlTarget = OS.GetControlEventTarget (handle);
+ OS.InstallEventHandler (controlTarget, controlProc, mask.length / 2, mask, handle, null);
+}
+
public boolean isEnabled () {
checkWidget();
- return getEnabled () && parent.isEnabled ();
-}
-/**
- * Returns <code>true</code> if the receiver is visible and all
- * of the receiver's ancestors are visible and <code>false</code>
- * otherwise.
- *
- * @return the receiver's visibility state
- *
- * @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>
- *
- * @see #getVisible
- */
+ return OS.IsControlEnabled (handle);
+}
+
public boolean isVisible () {
checkWidget();
- return getVisible () && parent.isVisible ();
-}
-/* AW
-void manageChildren () {
- OS.XtManageChild (handle);
-}
-*/
-int processSelection (Object callData) {
-
- MacControlEvent macEvent= (MacControlEvent) callData;
- int partCode= macEvent.getPartCode();
- boolean mouseDown= macEvent.isMouseDown();
-
- if ((partCode != OS.kControlIndicatorPart) && !mouseDown)
- return 0;
-
- Event event= new Event ();
-
- switch (partCode) {
- case OS.kControlUpButtonPart:
- OS.SetControl32BitValue(handle, OS.GetControl32BitValue(handle) - increment);
- event.detail = SWT.ARROW_UP;
- break;
- case OS.kControlPageUpPart:
- OS.SetControl32BitValue(handle, OS.GetControl32BitValue(handle) - pageIncrement);
- event.detail = SWT.PAGE_UP;
- break;
- case OS.kControlPageDownPart:
- OS.SetControl32BitValue(handle, OS.GetControl32BitValue(handle) + pageIncrement);
- event.detail = SWT.PAGE_DOWN;
- break;
- case OS.kControlDownButtonPart:
- OS.SetControl32BitValue(handle, OS.GetControl32BitValue(handle) + increment);
- event.detail = SWT.ARROW_DOWN;
- break;
- case OS.kControlIndicatorPart: // end of drag or continuos drag
- if (mouseDown) {
- event.detail = SWT.DRAG; // continuos drag
- } else {
- /*
- * Do not set the detail field to SWT.DRAG
- * to indicate that the dragging has ended.
- */
- }
- break;
- }
+ return OS.HIViewIsVisible (handle);
+}
- sendEvent (SWT.Selection, event);
- // flush display
- getDisplay().update();
+int kEventMouseDown (int nextHandler, int theEvent, int userData) {
+ int status = super.kEventMouseDown (nextHandler, theEvent, userData);
+ if (status == OS.noErr) return status;
+ dragging = false;
+ status = OS.CallNextEventHandler (nextHandler, theEvent);
+ if (dragging) {
+ Event event = new Event ();
+ sendEvent (SWT.Selection, event);
+ }
+ dragging = false;
+ return status;
+}
- return OS.kNoErr;
+public void removeSelectionListener(SelectionListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ if (eventTable == null) return;
+ eventTable.unhook(SWT.Selection, listener);
+ eventTable.unhook(SWT.DefaultSelection,listener);
}
-int processWheel(int eRefHandle) {
- int[] t= new int[1];
- OS.GetEventParameter(eRefHandle, OS.kEventParamMouseWheelDelta, OS.typeSInt32, null, null, t);
- OS.SetControl32BitValue(handle, OS.GetControl32BitValue(handle) - (increment * t[0]));
- Event event= new Event ();
- event.detail= t[0] > 0 ? SWT.ARROW_UP : SWT.ARROW_DOWN;
- sendEvent (SWT.Selection, event);
- getDisplay().update();
- return OS.kNoErr;
+
+void register () {
+ super.register ();
+ WidgetTable.put (handle, this);
}
+
void releaseChild () {
super.releaseChild ();
- if (parent.horizontalBar == this) parent.horizontalBar = null;
- if (parent.verticalBar == this) parent.verticalBar = null;
+ //NOT DONE - layout parent
+}
+
+void releaseHandle () {
+ super.releaseHandle ();
+ handle = 0;
}
+
void releaseWidget () {
super.releaseWidget ();
parent = null;
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the receiver's value changes.
- *
- * @param listener the listener which should no longer be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @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>
- *
- * @see SelectionListener
- * @see #addSelectionListener
- */
-public void removeSelectionListener(SelectionListener listener) {
+
+public void setIncrement (int value) {
checkWidget();
- if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
- if (eventTable == null) return;
- eventTable.unhook(SWT.Selection, listener);
- eventTable.unhook(SWT.DefaultSelection,listener);
+ if (value < 1) return;
+ increment = value;
}
-/**
- * Enables the receiver if the argument is <code>true</code>,
- * and disables it otherwise. A disabled control is typically
- * not selectable from the user interface and draws with an
- * inactive or "grayed" look.
- *
- * @param enabled the new enabled state
- *
- * @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>
- */
+
public void setEnabled (boolean enabled) {
checkWidget();
- if (enabled)
- OS.EnableControl(handle);
- else
- OS.DisableControl(handle);
-}
-/**
- * Sets the amount that the receiver's value will be
- * modified by when the up/down (or right/left) arrows
- * are pressed to the argument, which must be at least
- * one.
- *
- * @param value the new increment (must be greater than zero)
- *
- * @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>
- */
-public void setIncrement (int value) {
- checkWidget();
- if (value < 1) return;
- increment= value;
-}
-/**
- * Sets the maximum value which the receiver will allow
- * to be the argument which must be greater than or
- * equal to zero.
- *
- * @param value the new maximum (must be zero or greater)
- *
- * @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>
- */
+ if (enabled) {
+ if ((state & DISABLED) == 0) return;
+ state &= ~DISABLED;
+ OS.EnableControl (handle);
+ } else {
+ if ((state & DISABLED) != 0) return;
+ state |= DISABLED;
+ OS.DisableControl (handle);
+ }
+}
+
public void setMaximum (int value) {
checkWidget();
if (value < 0) return;
- OS.SetControl32BitMaximum(handle, value-OS.GetControlViewSize(handle));
-}
-/**
- * Sets the minimum value which the receiver will allow
- * to be the argument which must be greater than or
- * equal to zero.
- *
- * @param value the new minimum (must be zero or greater)
- *
- * @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>
- */
+ int minimum = OS.GetControl32BitMinimum (handle);
+ int viewSize = OS.GetControlViewSize (handle);
+ if (value - minimum - viewSize < 0) return;
+ OS.SetControl32BitMaximum (handle, value - viewSize);
+}
+
public void setMinimum (int value) {
checkWidget();
if (value < 0) return;
- OS.SetControl32BitMinimum(handle, value);
-}
-/**
- * Sets the amount that the receiver's value will be
- * modified by when the page increment/decrement areas
- * are selected to the argument, which must be at least
- * one.
- *
- * @return the page increment (must be greater than zero)
- *
- * @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>
- */
+ int maximum = OS.GetControl32BitMinimum (handle);
+ int viewSize = OS.GetControlViewSize (handle);
+ if (maximum - value - viewSize < 0) return;
+ OS.SetControl32BitMinimum (handle, value);
+}
+
public void setPageIncrement (int value) {
checkWidget();
if (value < 1) return;
- pageIncrement= value;
-}
-/**
- * Sets the single <em>selection</em> that is the receiver's
- * value to the argument which must be greater than or equal
- * to zero.
- *
- * @param value the new selection (must be zero or greater)
- *
- * @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>
- */
-public void setSelection (int selection) {
+ pageIncrement = value;
+}
+
+public void setSelection (int value) {
checkWidget();
- if (selection < 0) return;
- OS.SetControl32BitValue(handle, selection);
-}
-/**
- * Sets the size of the receiver's thumb relative to the
- * difference between its maximum and minimum values to the
- * argument which must be at least one.
- *
- * @param value the new thumb value (must be at least one)
- *
- * @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>
- *
- * @see ScrollBar
- */
+ if (value < 0) return;
+ OS.SetControl32BitValue (handle, value);
+}
+
public void setThumb (int value) {
checkWidget();
if (value < 1) return;
- int oldMaximum= OS.GetControl32BitMaximum(handle) + OS.GetControlViewSize(handle);
- OS.SetControlViewSize(handle, value);
- OS.SetControl32BitMaximum(handle, oldMaximum-value);
-}
-/**
- * Sets the receiver's selection, minimum value, maximum
- * value, thumb, increment and page increment all at once.
- * <p>
- * Note: This is equivalent to setting the values individually
- * using the appropriate methods, but may be implemented in a
- * more efficient fashion on some platforms.
- * </p>
- *
- * @param selection the new selection value
- * @param minimum the new minimum value
- * @param maximum the new maximum value
- * @param thumb the new thumb value
- * @param increment the new increment value
- * @param pageIncrement the new pageIncrement value
- *
- * @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>
- */
+ OS.SetControlViewSize (handle, value);
+}
+
public void setValues (int selection, int minimum, int maximum, int thumb, int increment, int pageIncrement) {
checkWidget();
if (selection < 0) return;
@@ -613,52 +292,30 @@ public void setValues (int selection, int minimum, int maximum, int thumb, int i
if (maximum - minimum - thumb < 0) return;
if (increment < 1) return;
if (pageIncrement < 1) return;
- OS.SetControl32BitMinimum(handle, minimum);
- OS.SetControl32BitMaximum(handle, maximum-thumb);
- OS.SetControlViewSize(handle, thumb);
- OS.SetControl32BitValue(handle, selection);
- this.increment= increment;
- this.pageIncrement= pageIncrement;
-}
-/**
- * Marks the receiver as visible if the argument is <code>true</code>,
- * and marks it invisible otherwise.
- * <p>
- * If one of the receiver's ancestors is not visible or some
- * other condition makes the receiver not visible, marking
- * it visible may not actually cause it to be displayed.
- * </p>
- *
- * @param visible the new visibility state
- *
- * @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>
- */
+ OS.SetControl32BitMinimum (handle, minimum);
+ OS.SetControl32BitMaximum (handle, maximum - thumb);
+ OS.SetControlViewSize (handle, thumb);
+ OS.SetControl32BitValue (handle, selection);
+ this.increment = increment;
+ this.pageIncrement = pageIncrement;
+}
+
public void setVisible (boolean visible) {
checkWidget();
-
-// this.visible= visible;
-// if (OS.IsControlVisible(handle) != visible) {
-// OS.HIViewSetVisible(handle, visible);
-// parent.relayout123();
-// sendEvent(visible ? SWT.Show : SWT.Hide);
-// }
-
- if (this.visible != visible) {
- this.visible= visible;
- int topHandle = topHandle ();
- if (OS.IsControlVisible(topHandle) != visible) {
- OS.HIViewSetVisible(topHandle, visible);
- parent.relayout123();
- sendEvent (visible ? SWT.Show : SWT.Hide);
- }
- }
-}
-
-void internalSetBounds(MacRect bounds) {
- OS.SetControlBounds(handle, bounds.getData());
+ if (visible) {
+ if ((state & HIDDEN) == 0) return;
+ state &= ~HIDDEN;
+ } else {
+ if ((state & HIDDEN) != 0) return;
+ state |= HIDDEN;
+ }
+ OS.HIViewSetVisible (handle, visible);
+ sendEvent (visible ? SWT.Show : SWT.Hide);
+ parent.layoutControl();
+}
+
+void setZOrder () {
+ OS.HIViewAddSubview (parent.scrolledHandle, handle);
}
}