package com.github.fabeclipse.textedgrep.internal.ui; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.ProgressBar; import com.github.fabeclipse.textedgrep.GrepMonitor; public class ProgressWithCancel extends Composite { /** stop image descriptor */ private static ImageDescriptor fgStopImage = ImageDescriptor .createFromFile(GrepView.class, "images/stop.png");//$NON-NLS-1$ static { JFaceResources.getImageRegistry().put( "com.github.fabeclipse.textedgrep.stopImage", fgStopImage);//$NON-NLS-1$ } private ProgressBar progressIndicator; private Button stopButton; private GrepMonitor monitor; public ProgressWithCancel(Composite parent, int style) { super(parent, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(this); progressIndicator = new ProgressBar(this, SWT.NONE); GridDataFactory.fillDefaults().grab(true, false).applyTo(progressIndicator); progressIndicator.setMinimum(0); progressIndicator.setMaximum(100); stopButton = new Button(this, SWT.FLAT | SWT.PUSH); stopButton.setImage(fgStopImage.createImage()); stopButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { if (monitor != null) monitor.cancel(); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); } public ProgressWithCancel onCancel(GrepMonitor monitor) { this.monitor = monitor; return this; } public void setProgress(int value, boolean start) { progressIndicator.setSelection(value); } }