package swt.rcp; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.ProgressProvider; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.ProgressBar; import org.eclipse.ui.part.ViewPart; public class View extends ViewPart { public static final String ID = "swt.rcp.view"; Button start; Button stop; Button push; ProgressBar progressBar; IProgressMonitor current; /** * This is a callback that will allow us to create the viewer and initialize * it. */ @Override public void createPartControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 3; composite.setLayout(layout); Job.getJobManager().setProgressProvider(new ProgressProvider() { @Override public IProgressMonitor createMonitor(Job job) { current = new ProgressMonitorAdaptor(progressBar); return current; } }); this.start = new Button(composite, SWT.PUSH); start.setText("すたーと"); start.setLayoutData(newData()); start.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { switchButton(false); Job job = new Job("heavy work") { @Override protected IStatus run(IProgressMonitor monitor) { try { for (int i = 0; i < 100 && monitor.isCanceled() == false; i++) { Thread.sleep(100); monitor.worked(1); } } catch (InterruptedException e) { return Status.CANCEL_STATUS; } finally { monitor.done(); } return Status.OK_STATUS; } }; job.schedule(); } }); this.stop = new Button(composite, SWT.PUSH); stop.setText("すとっぷ"); stop.setEnabled(false); stop.setLayoutData(newData()); stop.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { switchButton(true); if (current != null) { current.setCanceled(true); } } }); this.push = new Button(composite, SWT.PUSH); push.setText("button1"); push.setLayoutData(newData()); push.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { MessageDialog.openInformation(getViewSite().getShell(), "", "button clicked!"); } }); this.progressBar = new ProgressBar(composite, SWT.NONE); GridData data = newData(); data.horizontalSpan = 3; progressBar.setLayoutData(data); progressBar.setMinimum(0); progressBar.setMaximum(100); } protected static GridData newData() { GridData data = new GridData(GridData.FILL_HORIZONTAL); return data; } protected void switchButton(boolean is) { this.start.setEnabled(is); this.stop.setEnabled(is == false); } /** * Passing the focus request to the viewer's control. */ @Override public void setFocus() { } }