package uk.co.mmscomputing.device.sane.option;
import java.io.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.border.*;
import uk.co.mmscomputing.device.sane.*;
public class FixedRangePanel extends DescriptorPanel{
JSlider[] sliders=null;
JTextField[] tfs=null;
public FixedRangePanel(FixedRange od){
super(od);
Dictionary dict=createSliderDictionary();
int len=od.size>>2;
JPanel p=new JPanel();
p.setLayout(new GridLayout(len,1));
tfs=new JTextField[len];
sliders=new JSlider[len];
for(int i=0;i<len;i++){
p.add(createRangePanel(i));
sliders[i].setLabelTable(dict);
}
sliders[len-1].setPaintLabels(true);
addValuePanel(new JScrollPane(p));
/*
String valstr="Value";
if(od.unit!=0){ valstr+=" in ["+SANE_UNIT[od.unit]+"]";}
p.setBorder(new TitledBorder(valstr));
add(new JScrollPane(p),BorderLayout.NORTH);
*/
}
private Dictionary createSliderDictionary(){
FixedRange od=(FixedRange)this.od;
int extent=(od.max-od.min)/5;
Dictionary dict=new Hashtable();
int ival=od.min;
for(int i=0;i<=5;i++){
dict.put(new Integer(ival), new JLabel(od.unfixstr(ival)));
ival+=extent;
}
return dict;
}
private JPanel createRangePanel(int i){
FixedRange od=(FixedRange)this.od;
JSlider slider=new JSlider(JSlider.HORIZONTAL,od.min,od.max,od.min);
slider.addChangeListener(this);
checkCapabilities(slider);
// int extent=od.max-od.min;
// slider.setMinorTickSpacing(extent / 50);
// slider.setMajorTickSpacing(extent / 10);
// slider.setPaintTicks(true);
// slider.setLabelTable(dict);
// slider.setPaintLabels(true);
JTextField tf=new JTextField(10);
tf.setHorizontalAlignment(SwingConstants.RIGHT);
tf.addActionListener(this);
checkCapabilities(tf);
tf.setText(od.getStringValue(i));
JPanel p=new JPanel();
p.setLayout(new BorderLayout());
p.add(slider,BorderLayout.CENTER);
p.add(tf,BorderLayout.EAST);
// tf.setText(od.getStringValue(i));
slider.setValue(od.getWordValue(i)); // calls stateChanged
sliders[i]=slider;
tfs[i]=tf;
return p;
}
// call from Descriptor : PreviewPanel value has changed
void signalNewValue(){
sliders[0].setValue(od.getWordValue(0)); // calls stateChanged
}
public void stateChanged(ChangeEvent e){
JSlider slider=(JSlider)e.getSource();
for(int i=0;i<sliders.length;i++){
if(sliders[i]==slider){
JTextField tf=tfs[i];
tf.setText(((FixedRange)od).unfixstr(slider.getValue()));
if(!slider.getValueIsAdjusting()){
try{
od.setWordValue(i,slider.getValue());
tf.setText(od.getStringValue(i));
}catch(SaneIOException sioe){
sioe.printStackTrace();
}
}
}
}
}
public void actionPerformed(ActionEvent e){
JTextField tf=(JTextField)e.getSource();
for(int i=0;i<tfs.length;i++){
if(tfs[i]==tf){
try{
od.setStringValue(i,tf.getText());
sliders[i].setValue(od.getWordValue(i));
}catch(SaneIOException sioe){
sioe.printStackTrace();
}
}
}
}
}