package org.eclipse.swt.widgets;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.control.CheckBox;
import javafx.scene.control.RadioButton;
import javafx.scene.image.ImageView;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.internal.TypedListener;
public class Button extends Control {
private javafx.scene.control.ButtonBase control;
private Image image;
public Button(Composite parent, int style) {
super(parent,style);
}
@Override
protected void createWidget() {
if( (style & SWT.RADIO) != 0 ) {
control = new RadioButton();
} else if( (style & SWT.CHECK) != 0 ) {
control = new CheckBox();
((CheckBox)control).setAllowIndeterminate(false);
} else {
control = new javafx.scene.control.Button();
}
}
public Point computeSize(int wHint, int hHint, boolean flushCache) {
int width = (int) internal_getNativeObject().prefWidth(javafx.scene.control.Control.USE_COMPUTED_SIZE);
int height = (int) internal_getNativeObject().prefHeight(javafx.scene.control.Control.USE_COMPUTED_SIZE);
if (wHint != SWT.DEFAULT) width = wHint;
if (hHint != SWT.DEFAULT) height = hHint;
Point p = new Point(width, height);
return p;
}
protected void initListeners() {
control.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Event evt = new Event();
// evt.button = event.getButton().ordinal();
// if (event.isAltDown()) evt.stateMask |= SWT.ALT;
// if (event.isShiftDown()) evt.stateMask |= SWT.SHIFT;
// if (event.isControlDown()) evt.stateMask |= SWT.CONTROL;
// if (event.getButton() == MouseButton.PRIMARY) evt.stateMask |= SWT.BUTTON1;
// if (event.getButton() == MouseButton.MIDDLE) evt.stateMask |= SWT.BUTTON2;
// if (event.getButton() == MouseButton.SECONDARY) evt.stateMask |= SWT.BUTTON3;
//
sendEvent(SWT.Selection, evt, true);
}
});
}
@Override
public javafx.scene.control.ButtonBase internal_getNativeObject() {
return control;
}
public void setText(String string) {
control.setText(string);
}
public String getText() {
return notNullString(control.getText());
}
public void addSelectionListener (SelectionListener listener) {
checkWidget ();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
TypedListener typedListener = new TypedListener (listener);
registerListener (SWT.Selection,typedListener);
registerListener (SWT.DefaultSelection,typedListener);
}
public int getAlignment () {
checkWidget ();
if ((style & SWT.ARROW) != 0) {
if ((style & SWT.UP) != 0) return SWT.UP;
if ((style & SWT.DOWN) != 0) return SWT.DOWN;
if ((style & SWT.LEFT) != 0) return SWT.LEFT;
if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
return SWT.UP;
}
if ((style & SWT.LEFT) != 0) return SWT.LEFT;
if ((style & SWT.CENTER) != 0) return SWT.CENTER;
if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
return SWT.LEFT;
}
public boolean getGrayed () {
if( control instanceof CheckBox ) {
return ((CheckBox) control).isIndeterminate();
}
return false;
}
public Image getImage () {
return image;
}
public boolean getSelection () {
checkWidget ();
if( control instanceof RadioButton ) {
return ((RadioButton) control).isSelected();
} else if( control instanceof CheckBox ) {
return ((CheckBox) control).isSelected();
}
return false;
}
public void removeSelectionListener(SelectionListener listener) {
checkWidget ();
if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
unregisterListener(SWT.Selection, listener);
unregisterListener(SWT.DefaultSelection,listener);
}
public void setAlignment (int alignment) {
checkWidget ();
if ((style & SWT.ARROW) != 0) {
if ((style & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT)) == 0) return;
style &= ~(SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT);
style |= alignment & (SWT.UP | SWT.DOWN | SWT.LEFT | SWT.RIGHT);
return;
}
if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
Pos jAlignment;
switch (alignment) {
case SWT.RIGHT:
jAlignment = Pos.CENTER_RIGHT;
break;
case SWT.CENTER:
jAlignment = Pos.CENTER;
break;
default:
jAlignment = Pos.CENTER_LEFT;
break;
}
control.setAlignment(jAlignment);
}
public void setGrayed (boolean grayed) {
if( control instanceof CheckBox ) {
((CheckBox)control).setIndeterminate(grayed);
}
}
public void setImage (Image image) {
this.image = image;
if( image != null ) {
control.setGraphic(new ImageView(image.internal_getImage()));
} else {
control.setGraphic(null);
}
}
public void setSelection (boolean selected) {
checkWidget ();
if( control instanceof RadioButton ) {
((RadioButton) control).setSelected(selected);
} else if( control instanceof CheckBox ) {
((CheckBox) control).setSelected(selected);
}
}
@Override
public Point getSize() {
return new Point((int)control.getWidth(), (int)control.getHeight());
}
}