package ddddbb.gen;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.AbstractButton;
public class DiIntModel<T> extends IntModel<T> {
protected int sel2Default;
protected int sel2;
public DiIntModel(T item, T item2, T[] items) {
init(indexOf(item,items),indexOf(item2,items),null,items);
}
/**
* value < value2
*/
protected void init(int value, int value2, String[] names, T[] items) {
assert 0 <= value2;
assert value2 < items.length;
assert value < value2;
sel2Default = value2;
this.sel2 = value2;
init(value,names,items);
}
public int getInt1() {
return sel;
}
public int getInt2() {
return sel2;
}
public T sel1() {
return sel();
}
public T sel2() {
if (sel2 == -1) { return null; }
return items[sel2];
}
public void setInt1(int i) {
//dont do anything if someone wants to set value to value2
if (i==sel2) return;
setSelInt(i);
}
public void setInt2(int i) {
//dont do anything if someone wants to set value2 to value
if (i==sel) return;
int n=items.length;
if (i<n) { sel2 = i; }
else { sel2 = n-1; }
if (i<0) { sel2 = 0; }
changed();
}
public void addButton(final int index,final AbstractButton b) {
buttons.get(index).add(b);
if (b.getText() == null | b.getText().length() == 0) {
b.setText(names[index]);
}
if (index==sel||index==sel2) b.setSelected(true);
else b.setSelected(false);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (index<sel) {
setInt1(index);
}
else if (index==sel) {
if (sel+1==sel2) {
if (sel==0) {
setInt2(sel2+1);
setInt1(sel+1);
}
else setInt1(sel-1);
//b.setSelected(true);//do nothing, undo the toggle
}
else setInt1(sel+1);
}
else if (index > sel && index < sel2) {
if (index-sel <= sel2-index) {
setInt1(index);
}
else {
setInt2(index);
}
}
else if (index==sel2) {
if (sel2-1==sel) {
if (sel2==items.length-1) {
setInt1(sel-1);
setInt2(sel2-1);
}
else setInt2(sel2+1);
//b.setSelected(true);//do nothing, undo the toggle
}
else setInt2(sel2-1);
}
else if (index>sel2) {
setInt2(index);
}
}
});
}
public void updateButtonStates() {
for (Vector<AbstractButton> bs:buttons) for (AbstractButton b:bs) {
b.setSelected(false); //triggers no action event
}
if (-1 < sel && sel < buttons.size()) {
for (AbstractButton b:buttons.get(sel)) {
b.setSelected(true); //triggers no action event
}
for (AbstractButton b:buttons.get(sel2)) {
b.setSelected(true);
}
}
propagateEnabled();
}
public void setToDefault() {
sel = selDefault;
sel2 = sel2Default;
}
}