package uk.co.mmscomputing.device.sane;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import uk.co.mmscomputing.device.scanner.Scanner;
import uk.co.mmscomputing.device.scanner.ScannerIOException;
import uk.co.mmscomputing.device.sane.gui.SanePanel;
public class SaneScanner extends Scanner{
public SaneScanner(){
super();
metadata=new SaneIOMetadata();
}
public boolean isAPIInstalled(){return jsane.isInstalled();}
public void select()throws ScannerIOException{
jsane.select(this);
}
public String[] getDeviceNames(){
String[] names = new String[0];
try{
jsane.init();
try{
names=jsane.getDeviceManager().getDevices();
}finally{
jsane.exit();
}
}catch(Exception e){
metadata.setException(e);
fireListenerUpdate(metadata.EXCEPTION);
}
return names;
}
SaneDevice getSelectedDevice()throws ScannerIOException{
return jsane.getDeviceManager().getDevice();
}
public String getSelectedDeviceName()throws ScannerIOException{
return getSelectedDevice().getName();
}
public void select(String name)throws ScannerIOException{
jsane.select(this,name);
}
public void acquire()throws ScannerIOException{
jsane.acquire(this);
}
public void setCancel(boolean c)throws ScannerIOException{
jsane.setCancel(this,c);
}
void negotiateOptions(SaneDevice source){
((SaneIOMetadata)metadata).setDevice(source);
fireListenerUpdate(metadata.NEGOTIATE);
source.setCancel(metadata.getCancel()); // application might want us to abort the scan
}
public void setImage(BufferedImage image){ // also called from SaneAcquirePanel
if(image!=null){
metadata.setImage(image); // tell listeners we have a new image
fireListenerUpdate(metadata.ACQUIRED);
}
}
void setState(SaneDevice source){
metadata.setState(source.getState());
((SaneIOMetadata)metadata).setDevice(source);
fireListenerUpdate(metadata.STATECHANGE);
}
void signalException(Exception e){
metadata.setException(e);
fireListenerUpdate(metadata.EXCEPTION);
}
public JComponent getScanGUI(){
return new SanePanel(this,4);
}
public JComponent getScanGUI(int mode){
return new SanePanel(this,mode);
}
static public Scanner getDevice(){
SaneScanner ss=new SaneScanner();
return ss;
}
}