package uk.co.mmscomputing.device.twain;
import java.beans.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import uk.co.mmscomputing.util.*;
import uk.co.mmscomputing.device.scanner.*;
public class TwainPanel extends JComponent implements TwainConstants,ScannerListener{
Scanner scanner=null;
JButton acqbutton=null;
JButton selbutton=null;
JCheckBox guicheckbox=null;
public TwainPanel(Scanner scanner,int mode)throws TwainIOException{
/*
setLayout(new GridLayout(0,1));
acqbutton=new JButton("acquire",new JarImageIcon(getClass(),"32x32/scanner.png"));
acqbutton.addActionListener((ActionListener)EventHandler.create(ActionListener.class, this, "acquire"));
add(acqbutton);
JPanel p=new JPanel();
p.setBorder(BorderFactory.createEtchedBorder());
guicheckbox = new JCheckBox("Enable GUI");
guicheckbox.setSelected(true);
p.add(guicheckbox);
add(p);
selbutton=new JButton("select",new JarImageIcon(getClass(),"32x32/list.png"));
selbutton.addActionListener((ActionListener)EventHandler.create(ActionListener.class, this, "select"));
add(selbutton);
*/
this.scanner=scanner;
switch(mode){
case 0:
acqbutton=new JButton("acquire");
selbutton=new JButton("select");
setLayout(new GridLayout(0,1));
break;
case 1:
acqbutton=new JButton("acquire");
selbutton=new JButton("select");
setLayout(new GridLayout(1,0));
break;
case 2:
acqbutton=new JButton("acquire",new JarImageIcon(getClass(),"16x16/scanner.png"));
selbutton=new JButton("select",new JarImageIcon(getClass(),"16x16/list.png"));
setLayout(new GridLayout(0,1));
break;
case 3:
acqbutton=new JButton("acquire",new JarImageIcon(getClass(),"16x16/scanner.png"));
selbutton=new JButton("select",new JarImageIcon(getClass(),"16x16/list.png"));
setLayout(new GridLayout(1,0));
break;
case 4:
acqbutton=new JButton("acquire",new JarImageIcon(getClass(),"32x32/scanner.png"));
selbutton=new JButton("select",new JarImageIcon(getClass(),"32x32/list.png"));
setLayout(new GridLayout(0,1));
break;
case 5:
acqbutton=new JButton("acquire",new JarImageIcon(getClass(),"32x32/scanner.png"));
selbutton=new JButton("select",new JarImageIcon(getClass(),"32x32/list.png"));
setLayout(new GridLayout(1,0));
break;
}
acqbutton.addActionListener((ActionListener)EventHandler.create(ActionListener.class, this, "acquire"));
add(acqbutton);
/*
guicheckbox = new JCheckBox("Enable GUI");
guicheckbox.setSelected(true);
JPanel p=new JPanel();
p.setBorder(BorderFactory.createEtchedBorder());
p.add(guicheckbox);
add(p);
*/
guicheckbox = new JCheckBox("Enable GUI");
guicheckbox.setSelected(true);
add(guicheckbox);
selbutton.addActionListener((ActionListener)EventHandler.create(ActionListener.class, this, "select"));
add(selbutton);
scanner.addListener(this);
if(jtwain.getSource().isBusy()){ // applets might not be in state 3
acqbutton.setEnabled(false);
selbutton.setEnabled(false);
guicheckbox.setEnabled(false);
}
}
public void acquire(){ // acquire BufferedImage from selected/default twain source
try{
scanner.acquire();
}catch(ScannerIOException e){
scanner.fireExceptionUpdate(e);
}
}
public void select(){ // select twain data source
try{
scanner.select();
}catch(ScannerIOException e){
scanner.fireExceptionUpdate(e);
}
}
public void update(ScannerIOMetadata.Type type, final ScannerIOMetadata md){
if(md instanceof TwainIOMetadata){
TwainIOMetadata metadata=(TwainIOMetadata)md;
TwainSource source=metadata.getSource();
if(type.equals(ScannerIOMetadata.STATECHANGE)){
if(metadata.isState(STATE_SRCMNGOPEN)){ // state = 3
if(source.isBusy()){
acqbutton.setEnabled(false);
selbutton.setEnabled(false);
guicheckbox.setEnabled(false);
}else{
acqbutton.setEnabled(true);
selbutton.setEnabled(true);
guicheckbox.setEnabled(true);
}
}
}else if(type.equals(ScannerIOMetadata.NEGOTIATE)){
if(source.isUIControllable()){ // if it is possible to hide source's GUI
source.setShowUI(guicheckbox.isSelected()); // then use checkbox value
}else{
if(!guicheckbox.isSelected()){System.out.println("9\bCannot hide twain source's GUI.");}
guicheckbox.setSelected(true); // else set to true whatever the user selected
}
}
}
}
}