package DisplayProject.controls;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JComponent;
import javax.swing.event.ChangeListener;
import javax.swing.table.TableCellEditor;
import DisplayProject.table.ArrayFieldCellHelper;
/**
* A read-only model that does not allow the user to alter the value of the selected state
* of the button. This model will delegate most of the model work to the real model
* and only override a few critical methods.
* @author Tim
*
*/
public class ReadOnlyButtonModel implements ButtonModel {
private ButtonModel originalModel;
private JComponent widget;
public ReadOnlyButtonModel(JComponent widget, ButtonModel originalModel) {
this.originalModel = originalModel;
}
public void addActionListener(ActionListener l) { originalModel.addActionListener(l); }
public void addChangeListener(ChangeListener l) { originalModel.addChangeListener(l); }
public void addItemListener(ItemListener l) { originalModel.addItemListener(l); }
public String getActionCommand() { return originalModel.getActionCommand(); }
public int getMnemonic() { return originalModel.getMnemonic(); }
public Object[] getSelectedObjects() { return originalModel.getSelectedObjects(); }
public boolean isArmed() {return originalModel.isArmed();}
public boolean isEnabled() { return originalModel.isEnabled(); }
public boolean isRollover() {return originalModel.isRollover();}
public boolean isSelected() {return originalModel.isSelected();}
public void removeActionListener(ActionListener l) {originalModel.removeActionListener(l);}
public void removeChangeListener(ChangeListener l) {originalModel.removeChangeListener(l);}
public void removeItemListener(ItemListener l) {originalModel.removeItemListener(l);}
public void setActionCommand(String s) {originalModel.setActionCommand(s);}
public void setArmed(boolean b) {originalModel.setArmed(b);}
public void setEnabled(boolean b) {originalModel.setEnabled(b);}
public void setGroup(ButtonGroup group) {originalModel.setGroup(group);}
public void setMnemonic(int key) {originalModel.setMnemonic(key);}
public void setRollover(boolean b) {originalModel.setRollover(b);}
public void setSelected(boolean b) {originalModel.setSelected(b);}
public ButtonModel getOriginalModel() {
return this.originalModel;
}
public boolean isPressed() {
// A read-only model doesn't get pressed
return false;
}
public void setPressed(boolean b) {
// A read-only button cannot be pressed, however if we were going to be activated
// and we're in an array field, we need to cancel the cell editing
if (isArmed() && !b) {
ArrayField af = ArrayFieldCellHelper.getArrayField(this.widget);
if (af != null) {
final TableCellEditor editor = af.getCellEditor();
if (editor != null) {
editor.cancelCellEditing();
}
}
}
}
}