package com.github.jknack.antlr4ide.ui; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.dialogs.FilteredResourcesSelectionDialog; import org.eclipse.ui.progress.WorkbenchJob; import org.eclipse.xtext.xbase.lib.Functions.Function2; import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; import com.google.common.base.Function; public class Widgets { public static SelectionListener onClick(final Table table, final Procedure1<SelectionEvent> listener) { return new SelectionListener() { @Override public void widgetSelected(final SelectionEvent event) { listener.apply(event); } @Override public void widgetDefaultSelected(final SelectionEvent event) { widgetSelected(event); } }; } public static void onClick(final Button button, final Procedure1<SelectionEvent> listener) { button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { listener.apply(event); } }); } public static void chooseGrammar(final Button button, final IContainer root, final Procedure1<IFile> listener) { button.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(final SelectionEvent event) { FilteredResourcesSelectionDialog dialog = new FilteredResourcesSelectionDialog( button.getShell(), false, root, IResource.FILE); dialog.setInitialPattern("*.g4"); if (dialog.open() == FilteredResourcesSelectionDialog.OK) { listener.apply((IFile) dialog.getResult()[0]); } } @Override public void widgetDefaultSelected(final SelectionEvent event) { } }); } public static Job uijob(final String name, final Function<IProgressMonitor, IStatus> fn) { return new WorkbenchJob(name) { @Override public IStatus runInUIThread(final IProgressMonitor monitor) { return fn.apply(monitor); } }; } public static Job stateJob(final String name, final AtomicInteger state, final Function2<IProgressMonitor, Integer, IStatus> fn) { return new WorkbenchJob(name) { @Override public IStatus runInUIThread(final IProgressMonitor monitor) { return fn.apply(monitor, state.incrementAndGet()); } }; } }