/**************************************************************************** * 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 org.eclipse.nebula.cwt.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; } 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(); } } } }