package uk.co.mmscomputing.device.twain;
import java.util.*;
class TwainEnumeration extends TwainContainer{
// TWON_ENUMERATION. Container for a collection of values.
/*
typedef struct {
TW_UINT16 ItemType;
TW_UINT32 NumItems; // How many items in ItemList
TW_UINT32 CurrentIndex; // Current value is in ItemList[CurrentIndex]
TW_UINT32 DefaultIndex; // Powerup value is in ItemList[DefaultIndex]
TW_UINT8 ItemList[1]; // Array of ItemType values starts here
} TW_ENUMERATION, FAR * pTW_ENUMERATION;
*/
int count;
int currentIndex;
int defaultIndex; // don't care = -1
Vector<Object> items=new Vector<Object>();
TwainEnumeration(int cap,byte[] container){ // TW_ENUMERATION
super(cap,container);
count = jtwain.getINT32(container,2);
currentIndex = jtwain.getINT32(container,6);
defaultIndex = jtwain.getINT32(container,10);
for(int i=0,off=14;i<count;i++){
items.add(getObjectAt(container,off));
off+=typeSizes[type];
}
}
int getType(){return TWON_ENUMERATION;};
public Object[] getItems(){return items.toArray();}
byte[] getBytes(){
int count=items.size();
int len =14+count*typeSizes[type];
byte[] container=new byte[len];
jtwain.setINT16(container,0,type);
jtwain.setINT32(container,2,count);
jtwain.setINT32(container,6,currentIndex);
jtwain.setINT32(container,10,defaultIndex);
for(int i=0,off=14;i<count;i++){
setObjectAt(container,off,items.get(i));
off+=typeSizes[type];
}
return container;
}
public Object getCurrentValue()throws TwainIOException{
return items.get(currentIndex);
}
public void setCurrentValue(Object obj)throws TwainIOException{
int count=items.size();
for(int i=0;i<count;i++){
Object item=items.get(i);
if(obj.equals(item)){
currentIndex=i;
return;
}
}
throw new TwainIOException(getClass().getName()+".setCurrentValue:\n\tCould not find "+obj.toString());
}
public Object getDefaultValue()throws TwainIOException{
return items.get(defaultIndex);
}
public void setDefaultValue(Object obj)throws TwainIOException{
int count=items.size();
for(int i=0;i<count;i++){
Object item=items.get(i);
if(obj.equals(item)){
defaultIndex=i;
return;
}
}
throw new TwainIOException(getClass().getName()+".setDefaultValue:\n\tCould not find "+obj.toString());
}
public String toString(){
String s=super.toString();
s+="count = "+count+"\n";
s+="currentIndex = "+currentIndex+"\n";
s+="defaultIndex = "+defaultIndex+"\n";
Enumeration e=items.elements();
for(int i=0;e.hasMoreElements();i++) {
s+="items["+i+"] = "+e.nextElement()+"\n";
}
return s;
}
}