package edu.ualberta.med.biobank.forms; import java.util.Arrays; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; import org.springframework.remoting.RemoteConnectFailureException; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.gui.common.widgets.BgcFileBrowser; import edu.ualberta.med.biobank.gui.common.widgets.IBgcFileBrowserListener; import edu.ualberta.med.biobank.widgets.grids.ScanPalletWidget; import edu.ualberta.med.biobank.widgets.grids.cell.PalletCell; import edu.ualberta.med.biobank.widgets.grids.cell.UICellStatus; import edu.ualberta.med.scannerconfig.ScannerConfigPlugin; import edu.ualberta.med.scannerconfig.dmscanlib.ScanCell; import edu.ualberta.med.scannerconfig.preferences.scanner.profiles.ProfileManager; public class DecodeImageForm extends PlateForm implements IBgcFileBrowserListener { public static final String ID = "edu.ualberta.med.biobank.forms.DecodeImageForm"; private ScanPalletWidget spw; private BgcFileBrowser imageFileSelector; private String imageFilename; @Override protected void init() throws Exception { setPartName("Decode Image"); } @Override protected void createFormContent() throws Exception { form.setText("Decode Image"); GridLayout layout = new GridLayout(1, false); page.setLayout(layout); page.setLayoutData(new GridData(SWT.BEGINNING, SWT.TOP, false, false)); imageFileSelector = new BgcFileBrowser(page, "Image File", SWT.NONE, new String[] { "*.bmp" }); imageFileSelector.addFileSelectedListener(this); imageFileSelector.adaptToToolkit(toolkit, true); spw = new ScanPalletWidget(page, Arrays.asList(UICellStatus.EMPTY, UICellStatus.FILLED)); spw.setVisible(true); toolkit.adapt(spw); } @Override public void fileSelected(String filename) { imageFilename = filename; IRunnableWithProgress op = new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) { monitor.beginTask("Decoding...", IProgressMonitor.UNKNOWN); try { decodeImage(); } catch (RemoteConnectFailureException exp) { BgcPlugin.openRemoteConnectErrorMessage(exp); } catch (Exception e) { BgcPlugin.openAsyncError( "Decoding error", e); } monitor.done(); } }; try { new ProgressMonitorDialog(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell()).run(true, true, op); } catch (Exception e) { throw new RuntimeException(e); } } protected void decodeImage() throws Exception { List<ScanCell> decodedCells = ScannerConfigPlugin.decodeImage(1, ProfileManager.ALL_PROFILE_NAME, imageFilename); cells = PalletCell.convertArray(decodedCells); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { processScanResult(); spw.setCells(cells); } }); } @Override public void setValues() throws Exception { // TODO Auto-generated method stub } }