package uk.co.mmscomputing.device.sane.option; import uk.co.mmscomputing.device.sane.SaneIOException; public class FixedDesc extends WordDesc{ public FixedDesc( int handle, int no, String name, String title, String desc, int type, int unit, int size, int cap, int[] values ){ super(handle,no,name,title,desc,type,unit,size,cap,values); } public String getStringValue(int i){ return unfixstr(getWordValue(i)); } public String setStringValue(int i, String valstr)throws SaneIOException{ setWordValue(i,fix(Double.parseDouble(valstr))); return getStringValue(i); } public String toString(){ String s=super.toString(); for(int i=0;i<values.length;i++){ s+="\n values["+i+"]= "+unfix(getWordValue(i)); } return s; } public void setPixelValue(double resolution, int ival)throws SaneIOException{ setWordValue(0,fix(convertPixelValue(resolution,ival))); signalNewValue(); } public int getPixelValue(double resolution){ return convertUnits2Pixels(resolution,unfix(getWordValue(0))); } public DescriptorPanel getGUI(){ gui=new FixedPanel(this); return gui; } static public int fix(double value){ int shift=(1 << SANE_FIXED_SCALE_SHIFT); return (int)(value*(double)shift); } static public double unfix(int value){ int shift=(1 << SANE_FIXED_SCALE_SHIFT); return ((double)value / (double)shift); } static public String unfixstr(int value){ return Double.toString(Math.round(unfix(value)*100.0)/100.0); } }