/****************************************************************************
* Copyright (c) 2008, 2009 Jeremy Dowdall
* 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:
* Jeremy Dowdall <jeremyd@aspencloud.com> - initial API and implementation
*****************************************************************************/
package edu.ualberta.med.biobank.gui.common.widgets.nebula.v;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Event;
public class VButton extends VControl {
ImageData oldImageData;
boolean paintNative = true;
boolean paintInactive = false;
private boolean armed = false;
public VButton(VPanel panel, int style) {
super(panel, style);
if (!hasStyle(SWT.CHECK | SWT.RADIO | SWT.TOGGLE)) {
setStyle(SWT.PUSH, true);
}
setPainter(new VButtonPainter());
addListener(SWT.MouseDown);
addListener(SWT.MouseUp);
}
public boolean getNativeBackground() {
return paintNative;
}
public boolean getSelection() {
return hasState(STATE_SELECTED);
}
@Override
public Type getType() {
return VControl.Type.Button;
}
@Override
protected void filterEvent(Event event) {
if (hasState(STATE_ACTIVE)) {
switch (event.type) {
case SWT.MouseDown:
setFocus();
if (event.button != 1) {
break;
}
if (hasStyle(SWT.PUSH)) {
if (setState(STATE_SELECTED, true)) {
redraw();
}
armed = true;
} else {
setState(STATE_SELECTED, !hasState(STATE_SELECTED));
Event e = new Event();
e.type = SWT.Selection;
e.data = VButton.this;
e.button = event.button;
e.detail = event.detail;
e.display = event.display;
e.gc = event.gc;
e.height = event.height;
e.stateMask = event.stateMask;
e.time = event.time;
e.width = event.width;
e.x = event.x;
e.y = event.y;
notifyListeners(SWT.Selection, e);
redraw();
}
break;
case SWT.MouseUp:
if (event.button != 1) {
break;
}
if (hasStyle(SWT.PUSH)) {
if (setState(STATE_SELECTED, false)) {
redraw();
}
}
if (armed) {
Event e = new Event();
e.type = SWT.Selection;
e.data = VButton.this;
e.button = event.button;
e.detail = event.detail;
e.display = event.display;
e.gc = event.gc;
e.height = event.height;
e.stateMask = event.stateMask;
e.time = event.time;
e.width = event.width;
e.x = event.x;
e.y = event.y;
notifyListeners(SWT.Selection, e);
}
armed = false;
break;
}
}
}
public void setPaintInactive(boolean paintInactive) {
this.paintInactive = paintInactive;
}
public void setPaintNative(boolean paintNative) {
this.paintNative = paintNative;
}
public void setSelection(boolean select) {
if (!hasStyle(SWT.PUSH)) {
if (setState(STATE_SELECTED, select)) {
redraw();
}
}
}
}