package uk.co.mmscomputing.device.sane.option; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; import javax.swing.text.*; import uk.co.mmscomputing.device.sane.*; public class IntRangePanel extends DescriptorPanel /*implements DocumentListener*/{ JSlider[] sliders=null; JTextField[] tfs=null; public IntRangePanel(IntRange od){ super(od); 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)); } int extent=od.max-od.min; sliders[len-1].setMajorTickSpacing(extent / 10); // sliders[len-1].setPaintTicks(true); 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 JPanel createRangePanel(int i){ IntRange od=(IntRange)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 / 20); // slider.setMajorTickSpacing(extent / 4); // slider.setPaintTicks(true); // slider.setPaintLabels(true); JTextField tf=new JTextField(10); tf.addActionListener(this); // Document td=tf.getDocument(); // td.addDocumentListener(this); // td.putProperty("index",new Integer(i)); // td.putProperty("slider",slider); tf.setHorizontalAlignment(SwingConstants.RIGHT); 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(){ System.out.println("9\b"+getClass().getName()+".signalNewValue:\n\t"); sliders[0].setValue(od.getWordValue(0));// calls stateChanged } /* public void stateChanged(ChangeEvent e){ JSlider slider=(JSlider)e.getSource(); // if(!slider.getValueIsAdjusting()){ for(int i=0;i<sliders.length;i++){ if(sliders[i]==slider){ JTextField tf=tfs[i]; String newValue=String.valueOf(slider.getValue()); String oldValue=tf.getText(); if(!newValue.equals(oldValue)){ try{ od.setWordValue(i,slider.getValue()); tf.setText(od.getStringValue(i)); }catch(SaneIOException sioe){ sioe.printStackTrace(); } } break; } } // } } */ 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(""+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(); } } } } /* public void changedUpdate(DocumentEvent de){setSlider(de);} public void insertUpdate(DocumentEvent de){setSlider(de);} public void removeUpdate(DocumentEvent de){setSlider(de);} private void setSlider(DocumentEvent de){ try{ Document d = de.getDocument(); String value = d.getText(d.getStartPosition().getOffset(),d.getEndPosition().getOffset()).trim(); int index = ((Integer)d.getProperty("index")).intValue(); int proposed = Integer.parseInt(value); od.setStringValue(index,value); int newValue=od.getWordValue(index); if(proposed==newValue){ JSlider slider = (JSlider)d.getProperty("slider"); int oldValue=slider.getValue(); if(newValue!=oldValue){slider.setValue(newValue);} } // }catch(NumberFormatException nfe){ // }catch(BadLocationException ble){ // }catch(SaneIOException sioe){ }catch(Exception e){ throw new IllegalArgumentException(getClass().getName()+".setSlider:\n\t option name = "+od.getName()+" "+e.getMessage()); // System.out.println("9\b"+getClass().getName()+".setSlider:\n\t"+e); // e.printStackTrace(); } } */ }