summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java692
1 files changed, 18 insertions, 674 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java
index f4f4e25a40..da2a316dd0 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/widgets/Button.java
@@ -10,112 +10,12 @@ package org.eclipse.swt.widgets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.internal.carbon.OS;
-import org.eclipse.swt.internal.carbon.Rect;
-import org.eclipse.swt.internal.carbon.ControlButtonContentInfo;
-
-/**
- * Instances of this class represent a selectable user interface object that
- * issues notification when pressed and released.
- * <dl>
- * <dt><b>Styles:</b></dt>
- * <dd>ARROW, CHECK, PUSH, RADIO, TOGGLE, FLAT</dd>
- * <dd>UP, DOWN, LEFT, RIGHT, CENTER</dd>
- * <dt><b>Events:</b></dt>
- * <dd>Selection</dd>
- * </dl>
- * <p>
- * Note: Only one of the styles ARROW, CHECK, PUSH, RADIO, and TOGGLE
- * may be specified.
- * </p><p>
- * Note: Only one of the styles LEFT, RIGHT, and CENTER may be specified.
- * </p><p>
- * Note: Only one of the styles UP, DOWN, LEFT, and RIGHT may be specified
- * when the ARROW style is specified.
- * </p><p>
- * IMPORTANT: This class is intended to be subclassed <em>only</em>
- * within the SWT implementation.
- * </p>
- */
public /*final*/ class Button extends Control {
- Image image;
-
- // AW
- private boolean fImageMode;
- private int fAlignment;
- private int fCIconHandle;
- private int fTopMargin;
- private int fBottomMargin;
-
- private static final int MARGIN= 3; // correct value would be 6; however the shadow is only 2
- private static final int SPACE= 9; // min is 8 or may be 9
- private static final int TOP_MARGIN= 0; //
- private static final int BOTTOM_MARGIN= 5; //
- // AW
-
-/**
- * Constructs a new instance of this class given its parent
- * and a style value describing its behavior and appearance.
- * <p>
- * The style value is either one of the style constants defined in
- * 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
- * lists the style constants that are applicable to the class.
- * Style bits are also inherited from superclasses.
- * </p>
- *
- * @param parent a composite control which will be the parent of the new instance (cannot be null)
- * @param style the style of control 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>
- *
- * @see SWT#ARROW
- * @see SWT#CHECK
- * @see SWT#PUSH
- * @see SWT#RADIO
- * @see SWT#TOGGLE
- * @see SWT#FLAT
- * @see SWT#LEFT
- * @see SWT#RIGHT
- * @see SWT#CENTER
- * @see Widget#checkSubclass
- * @see Widget#getStyle
- */
+
public Button (Composite parent, int style) {
super (parent, checkStyle (style));
}
-/**
- * Adds the listener to the collection of listeners who will
- * be notified when the control is selected, by sending
- * it one of the messages defined in the <code>SelectionListener</code>
- * interface.
- * <p>
- * <code>widgetSelected</code> is called when the control is selected.
- * <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
- */
+
public void addSelectionListener(SelectionListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -123,6 +23,7 @@ public void addSelectionListener(SelectionListener listener) {
addListener(SWT.Selection,typedListener);
addListener(SWT.DefaultSelection,typedListener);
}
+
static int checkStyle (int style) {
style = checkBits (style, SWT.PUSH, SWT.ARROW, SWT.CHECK, SWT.RADIO, SWT.TOGGLE, 0);
if ((style & SWT.PUSH) != 0) {
@@ -136,385 +37,39 @@ static int checkStyle (int style) {
}
return style;
}
-void click () {
- short part= 10;
- if ((style & SWT.CHECK) != 0 || (style & SWT.RADIO) != 0)
- part= 11;
- OS.HIViewSimulateClick(handle, part, 0, new short[1]);
-}
+
public Point computeSize (int wHint, int hHint, boolean changed) {
checkWidget();
- int border = getBorderWidth ();
- int width = border * 2, height = border * 2;
- if ((style & SWT.ARROW) != 0) {
- Display display = getDisplay ();
- width += display.scrolledMarginX;
- height += display.scrolledMarginY;
- return new Point (width, height);
- }
- /* AW
- XtWidgetGeometry result = new XtWidgetGeometry ();
- result.request_mode = OS.CWWidth | OS.CWHeight;
- int [] argList2 = {OS.XmNrecomputeSize, 1};
- OS.XtSetValues(handle, argList2, argList2.length / 2);
- OS.XtQueryGeometry (handle, null, result);
- int [] argList3 = {OS.XmNrecomputeSize, 0};
- OS.XtSetValues(handle, argList3, argList3.length / 2);
- */
- Point result= MacUtil.computeSize(handle);
- if ((style & SWT.PUSH) != 0) {
- if (image != null) { // is a Bevel button!
- Rectangle bounds= image.getBounds();
- result.x= 4 + bounds.width + 4;
- result.y= 4 + bounds.height + 4;
- } else {
- String s= getText();
- if (s != null && s.length() > 0) {
- result.x= result.x - 2*SPACE + 2*MARGIN;
- result.y= result.y + TOP_MARGIN + BOTTOM_MARGIN;
- }
- }
- }
- width += result.x;
- height += result.y;
- /*
- * Feature in Motif. If a button's labelType is XmSTRING but it
- * has no label set into it yet, recomputing the size will
- * not take into account the height of the font, as we would
- * like it to. Take care of this case.
- */
- /* AW
- int [] argList = {OS.XmNlabelType, 0};
- OS.XtGetValues (handle, argList, argList.length / 2);
- if (argList [1] == OS.XmSTRING) {
- int [] argList1 = {OS.XmNlabelString, 0};
- OS.XtGetValues (handle, argList1, argList1.length / 2);
- int xmString = argList1 [1];
- if (OS.XmStringEmpty (xmString)) height += getFontHeight ();
- }
- */
- if (wHint != SWT.DEFAULT || hHint != SWT.DEFAULT) {
- /* AW
- int [] argList4 = new int [] {OS.XmNmarginLeft, 0, OS.XmNmarginRight, 0, OS.XmNmarginTop, 0, OS.XmNmarginBottom, 0};
- OS.XtGetValues (handle, argList4, argList4.length / 2);
- if (wHint != SWT.DEFAULT) width = wHint + argList4 [1] + argList4 [3] + (border * 2);
- if (hHint != SWT.DEFAULT) height = hHint + argList4 [5] + argList4 [7] + (border * 2);
- */
- int left= 0;
- int right= 0;
- int top= 0;
- int bottom= 0;
-
- if (wHint != SWT.DEFAULT) width = wHint + left + right;
- if (hHint != SWT.DEFAULT) height = hHint + top + bottom;
- }
-
- return new Point(width, height);
+ return new Point(0, 0);
}
void createHandle (int index) {
state |= HANDLE;
- /* AW
- int borderWidth = (style & SWT.BORDER) != 0 ? 1 : 0;
- */
- int parentHandle = parent.handle;
-
- /* ARROW button */
- if ((style & SWT.ARROW) != 0) {
- System.out.println("Button.createHandle(Arrow): nyi");
- /*
- int alignment = OS.XmARROW_UP;
- if ((style & SWT.UP) != 0) alignment = OS.XmARROW_UP;
- if ((style & SWT.DOWN) != 0) alignment = OS.XmARROW_DOWN;
- if ((style & SWT.LEFT) != 0) alignment = OS.XmARROW_LEFT;
- if ((style & SWT.RIGHT) != 0) alignment = OS.XmARROW_RIGHT;
- int [] argList = {
- OS.XmNtraversalOn, 0,
- OS.XmNarrowDirection, alignment,
- OS.XmNborderWidth, borderWidth,
- OS.XmNancestorSensitive, 1,
- };
- handle = OS.XmCreateArrowButton (parentHandle, null, argList, argList.length / 2);
- */
- //handle= OS.NewControl(0, new Rect(), null, false, (short)0, (short)0, (short)0, (short)OS.kControlPopupArrowEastProc, 0);
- handle= OS.NewControl(0, new Rect(), null, false, (short)0, (short)0, (short)0, (short)OS.kControlPushButtonProc, 0);
- if (handle == 0) error (SWT.ERROR_NO_HANDLES);
- MacUtil.insertControl(handle, parentHandle, -1);
- OS.HIViewSetVisible(handle, true);
- /* AW
- if ((style & SWT.FLAT) != 0) {
- int [] argList1 = {OS.XmNshadowThickness, 1};
- OS.XtSetValues (handle, argList1, argList1.length / 2);
- }
- */
- return;
- }
-
- /* Compute alignment */
- /* AW
- int alignment = OS.XmALIGNMENT_BEGINNING;
- if ((style & SWT.CENTER) != 0) alignment = OS.XmALIGNMENT_CENTER;
- if ((style & SWT.RIGHT) != 0) alignment = OS.XmALIGNMENT_END;
- */
-
- /* TOGGLE button */
- if ((style & SWT.TOGGLE) != 0) {
- /*
- * Bug in Motif. When XmNindicatorOn is set to false,
- * Motif doesn't reset the shadow thickness to give a
- * push button look. The fix is to set the shadow
- * thickness when ever this resource is changed.
- */
- /* AW
- Display display = getDisplay ();
- int thickness = display.buttonShadowThickness;
- int [] argList = {
- OS.XmNancestorSensitive, 1,
- OS.XmNrecomputeSize, 0,
- OS.XmNindicatorOn, 0,
- OS.XmNshadowThickness, (style & SWT.FLAT) != 0 ? 1 : thickness,
- OS.XmNalignment, alignment,
- OS.XmNborderWidth, borderWidth,
- };
- handle = OS.XmCreateToggleButton (parentHandle, null, argList, argList.length / 2);
- */
- handle= OS.NewControl(0, new Rect(), null, false, (short)0, (short)OS.kControlBehaviorToggles, (short)0, (short)OS.kControlBevelButtonNormalBevelProc, 0);
- if (handle == 0) error (SWT.ERROR_NO_HANDLES);
- MacUtil.insertControl(handle, parentHandle, -1);
- OS.HIViewSetVisible(handle, true);
- setFont(defaultFont());
- return;
- }
-
- /* CHECK or RADIO button */
- if ((style & (SWT.CHECK | SWT.RADIO)) != 0) {
- /*
- * Bug in Motif. For some reason, a toggle button
- * with XmNindicatorType XmONE_OF_MANY must have this
- * value set at creation or the highlight color will
- * not be correct. The fix is to set these values
- * on create.
- */
- /* AW
- int indicatorType = OS.XmONE_OF_MANY;
- if ((style & SWT.CHECK) != 0) indicatorType = OS.XmN_OF_MANY;
- int [] argList = {
- OS.XmNancestorSensitive, 1,
- OS.XmNrecomputeSize, 0,
- OS.XmNindicatorType, indicatorType,
- OS.XmNalignment, alignment,
- OS.XmNborderWidth, borderWidth,
- };
- handle = OS.XmCreateToggleButton (parentHandle, null, argList, argList.length / 2);
- */
- int type= (style & SWT.CHECK) != 0
- ? OS.kControlCheckBoxAutoToggleProc
- : OS.kControlRadioButtonAutoToggleProc;
- handle= OS.NewControl(0, new Rect(), null, false, (short)0, (short)0, (short)100, (short)type, 0);
- if (handle == 0) error (SWT.ERROR_NO_HANDLES);
- MacUtil.insertControl(handle, parentHandle, -1);
- OS.HIViewSetVisible(handle, true);
- setFont(defaultFont());
- return;
- }
-
- /* PUSH button */
- /* AW
- int [] argList = {
- OS.XmNancestorSensitive, 1,
- OS.XmNrecomputeSize, 0,
- OS.XmNalignment, alignment,
- OS.XmNborderWidth, borderWidth,
- */
- int type= (style & SWT.FLAT) != 0
- ? OS.kControlBevelButtonNormalBevelProc
- : OS.kControlPushButtonProc;
- handle= OS.NewControl(0, new Rect(), null, false, (short)0, (short)0, (short)0, (short)type, 0);
- if (handle == 0) error (SWT.ERROR_NO_HANDLES);
- MacUtil.insertControl(handle, parentHandle, -1);
- OS.HIViewSetVisible(handle, true);
- setFont(defaultFont());
- /* AW
- if ((style & SWT.FLAT) != 0) {
- int [] argList1 = {OS.XmNshadowThickness, 1};
- OS.XtSetValues (handle, argList1, argList1.length / 2);
- }
- */
-}
-int defaultBackground () {
- return getDisplay ().buttonBackground;
}
-Font defaultFont () {
- return getDisplay ().buttonFont;
-}
-int defaultForeground () {
- return getDisplay ().buttonForeground;
-}
-/**
- * Returns a value which describes the position of the
- * text or image in the receiver. The value will be one of
- * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>
- * unless the receiver is an <code>ARROW</code> button, in
- * which case, the alignment will indicate the direction of
- * the arrow (one of <code>LEFT</code>, <code>RIGHT</code>,
- * <code>UP</code> or <code>DOWN</code>).
- *
- * @return the alignment
- *
- * @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 getAlignment () {
checkWidget();
- return fAlignment;
-}
-boolean getDefault () {
- if ((style & SWT.PUSH) == 0) return false;
- int[] control= new int[1];
- OS.GetWindowDefaultButton(OS.GetControlOwner(handle), control);
- return control[0] == handle;
+ return 0;
}
-/**
- * Returns the receiver's image if it has one, or null
- * if it does not.
- *
- * @return the receiver's image
- *
- * @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 Image getImage () {
checkWidget();
- return image;
+ return null;
}
String getNameText () {
return getText ();
}
-/**
- * Returns <code>true</code> if the receiver is selected,
- * and false otherwise.
- * <p>
- * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
- * it is selected when it is checked. When it is of type <code>TOGGLE</code>,
- * it is selected when it is pushed in. If the receiver is of any other type,
- * this method returns false.
- *
- * @return the selection 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 getSelection () {
checkWidget();
if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) return false;
- return OS.GetControl32BitValue(handle) != 0;
+ return false;
}
-/**
- * Returns the receiver's text, which will be an empty
- * string if it has never been set.
- *
- * @return the receiver's text
- *
- * @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 String getText () {
checkWidget();
- if ((style & SWT.ARROW) != 0) return "";
- int sHandle[]= new int[1];
- OS.CopyControlTitleAsCFString(handle, sHandle);
- return MacUtil.getStringAndRelease(sHandle[0]);
-}
-void hookEvents () {
- super.hookEvents ();
- /* AW
- int callback = OS.XmNactivateCallback;
- int windowProc = getDisplay ().windowProc;
- if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) != 0) callback = OS.XmNvalueChangedCallback;
- OS.XtAddCallback (handle, callback, windowProc, SWT.Selection);
- */
- Display display= getDisplay();
- OS.SetControlAction(handle, display.fControlActionProc);
-}
-boolean mnemonicHit (char key) {
- if (!setFocus ()) return false;
- click ();
- return true;
-}
-/* AW
-boolean mnemonicMatch (char key) {
- char mnemonic = findMnemonic (getText ());
- if (mnemonic == '\0') return false;
- return Character.toUpperCase (key) == Character.toUpperCase (mnemonic);
-}
-*/
-int processFocusIn () {
- super.processFocusIn ();
- // widget could be disposed at this point
- if (handle == 0) return 0;
- if ((style & SWT.PUSH) == 0) return 0;
- getShell ().setDefaultButton (this, false);
- return 0;
+ return "";
}
-int processFocusOut () {
- super.processFocusOut ();
- // widget could be disposed at this point
- if (handle == 0) return 0;
- if ((style & SWT.PUSH) == 0) return 0;
- if (getDefault ()) {
- getShell ().setDefaultButton (null, false);
- }
- return 0;
-}
-int processSelection (Object callData) {
- if ((style & SWT.RADIO) != 0) {
- if ((parent.getStyle () & SWT.NO_RADIO_GROUP) == 0) selectRadio ();
- }
- return super.processSelection (callData);
-}
-void releaseWidget () {
- super.releaseWidget ();
- /*
- int [] argList = {
- OS.XmNlabelPixmap, OS.XmUNSPECIFIED_PIXMAP,
- OS.XmNlabelInsensitivePixmap, OS.XmUNSPECIFIED_PIXMAP,
- };
- OS.XtSetValues (handle, argList, argList.length / 2);
- */
- if (fCIconHandle != 0) {
- if (handle != 0) {
- ControlButtonContentInfo inContent = new ControlButtonContentInfo();
- OS.SetBevelButtonContentInfo(handle, inContent);
- }
- Image.disposeCIcon(fCIconHandle);
- fCIconHandle= 0;
- }
- image = null;
-}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the control is selected.
- *
- * @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 #addSelectionListener
- */
+
public void removeSelectionListener(SelectionListener listener) {
checkWidget();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
@@ -522,232 +77,21 @@ public void removeSelectionListener(SelectionListener listener) {
eventTable.unhook(SWT.Selection, listener);
eventTable.unhook(SWT.DefaultSelection,listener);
}
-void selectRadio () {
- Control [] children = parent._getChildren ();
- for (int i=0; i<children.length; i++) {
- Control child = children [i];
- if (this != child && child instanceof Button) {
- Button button = (Button) child;
- if ((button.getStyle () & SWT.RADIO) != 0) {
- if (button.getSelection ()) {
- button.setSelection (false);
- button.postEvent (SWT.Selection);
- }
- }
- }
- }
- setSelection (true);
-}
-/**
- * Controls how text, images and arrows will be displayed
- * in the receiver. The argument should be one of
- * <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>
- * unless the receiver is an <code>ARROW</code> button, in
- * which case, the argument indicates the direction of
- * the arrow (one of <code>LEFT</code>, <code>RIGHT</code>,
- * <code>UP</code> or <code>DOWN</code>).
- *
- * @param alignment the new alignment
- *
- * @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 setAlignment (int alignment) {
checkWidget();
- if ((style & SWT.ARROW) != 0) {
- fAlignment= alignment;
- System.out.println("Button.setAlignment: nyi");
- return;
- }
- if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
- fAlignment= alignment;
- System.out.println("Button.setAlignment: nyi");
}
-void setDefault (boolean value) {
- if ((style & SWT.PUSH) == 0) return;
- if (getShell ().parent == null) return;
- OS.SetWindowDefaultButton(OS.GetControlOwner(handle), value ? handle : 0);
-}
-/**
- * Sets the receiver's image to the argument, which may be
- * null indicating that no image should be displayed.
- *
- * @param image the image to display on the receiver (may be null)
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</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>
- */
+
public void setImage (Image image) {
checkWidget();
-
- this.image = image;
-
- if (fCIconHandle != 0) {
- Image.disposeCIcon(fCIconHandle);
- fCIconHandle= 0;
- }
-
- if (image != null) {
- if (image.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);
- fCIconHandle= Image.carbon_createCIcon(image);
- if (fCIconHandle != 0)
- setMode(fCIconHandle);
- } else
- setMode(0);
}
-/**
- * Sets the selection state of the receiver, if it is of type <code>CHECK</code>,
- * <code>RADIO</code>, or <code>TOGGLE</code>.
- *
- * <p>
- * When the receiver is of type <code>CHECK</code> or <code>RADIO</code>,
- * it is selected when it is checked. When it is of type <code>TOGGLE</code>,
- * it is selected when it is pushed in.
- *
- * @param selected the new selection 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 setSelection (boolean selected) {
checkWidget();
- if ((style & (SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) == 0) return;
- OS.SetControl32BitValue(handle, selected ? 1 : 0);
}
-/**
- * Sets the receiver's text.
- * <p>
- * This method sets the button label. The label may include
- * the mnemonic character but must not contain line delimiters.
- * </p>
- *
- * @param string the new text
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the text 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>
- */
+
public void setText (String string) {
checkWidget();
- if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
- if ((style & SWT.ARROW) != 0) return;
-
- int sHandle= 0;
- try {
- sHandle= OS.CFStringCreateWithCharacters(MacUtil.removeMnemonics(string));
- if (OS.SetControlTitleWithCFString(handle, sHandle) != OS.noErr)
- error (SWT.ERROR_CANNOT_SET_TEXT);
- } finally {
- if (sHandle != 0)
- OS.CFRelease(sHandle);
- }
-}
-
-int traversalCode () {
- int code = super.traversalCode ();
- if ((style & SWT.PUSH) != 0) return code;
- return code | SWT.TRAVERSE_ARROW_NEXT | SWT.TRAVERSE_ARROW_PREVIOUS;
-}
-
-////////////////////////////////////////////////////////
-// Mac stuff
-////////////////////////////////////////////////////////
-
-private void setMode(int icon) {
-
- if ((style & SWT.FLAT) != 0 || fImageMode) {
- ControlButtonContentInfo inContent = new ControlButtonContentInfo();
- inContent.contentType = (short)OS.kControlContentCIconHandle;
- inContent.iconRef = icon;
- OS.SetBevelButtonContentInfo(handle, inContent);
- redraw();
- return;
- }
-
- if ((style & SWT.PUSH) == 0)
- return; // we only transmogrify push buttons
-
- fImageMode= true;
-
- int[] ph= new int[1];
- int rc= OS.GetSuperControl(handle, ph);
- if (rc != OS.noErr)
- System.out.println("Button.setMode: " + rc);
- int parentHandle= ph[0];
-
- Rect bounds= new Rect();
- OS.GetControlBounds(handle, bounds);
-
- int index= MacUtil.indexOf(parentHandle, handle);
- if (index < 0)
- System.out.println("Button.setMode: can't find handle");
- Widget w= WidgetTable.get(handle);
- WidgetTable.remove(handle);
- OS.DisposeControl(handle);
-
- int type= icon != 0 ? OS.kControlBevelButtonNormalBevelProc : OS.kControlPushButtonProc;
-
- handle= OS.NewControl(0, new Rect(), null, false, (short)0, (short)0, (short)0, (short)type, 0);
- MacUtil.insertControl(handle, parentHandle, index);
- OS.HIViewSetVisible(handle, true);
- if (handle == 0) error (SWT.ERROR_NO_HANDLES);
- WidgetTable.put(handle, w);
-
- OS.SetControlBounds(handle, bounds);
- ControlButtonContentInfo inContent = new ControlButtonContentInfo();
- inContent.contentType = (short)OS.kControlContentCIconHandle;
- inContent.iconRef = icon;
- OS.SetBevelButtonContentInfo(handle, inContent);
-}
-
-/**
- * Overridden from Control.
- * x and y are relative to window!
- */
-void handleResize(int hndl, Rect bounds) {
- fTopMargin= fBottomMargin= 0;
- if ((style & SWT.PUSH) != 0 && image == null) { // for push buttons
- org.eclipse.swt.graphics.Point result= MacUtil.computeSize(hndl);
- int diff= (bounds.bottom-bounds.top)-result.y;
- fTopMargin= diff/2;
- fBottomMargin= diff-fTopMargin;
- bounds.left+= MARGIN;
- bounds.top+= fTopMargin;
- bounds.right-= MARGIN;
- bounds.bottom-= fBottomMargin;
- }
- super.handleResize(hndl, bounds);
-}
-
-void internalGetControlBounds(int hndl, Rect bounds) {
- super.internalGetControlBounds(hndl, bounds);
- if ((style & SWT.PUSH) != 0 && image == null) {
- bounds.left+= -MARGIN;
- bounds.top+= -fTopMargin;
- bounds.right-= -MARGIN;
- bounds.bottom-= -fBottomMargin;
- }
-}
-
-public void setFont (Font font) {
- super.setFont(null);
-}
-
-int sendKeyEvent(int type, MacEvent mEvent, Event event) {
- return OS.CallNextEventHandler(mEvent.getNextHandler(), mEvent.getEventRef());
}
}