package cn.edu.pku.sei.capriceui;
import javax.swing.*;
import javax.swing.event.SwingPropertyChangeSupport;
import java.beans.PropertyChangeListener;
/**
* User: zhangwei
* Date: 2003-4-10
* Time: 11:18:33
*/
public class CapriceButtonGroup extends ButtonGroup {
protected AbstractButton invisibleButton = null;
protected SwingPropertyChangeSupport changeSupport = null;
public CapriceButtonGroup() {
super();
}
public void setInvisibleButton(AbstractButton button) {
if (button == null)
return;
if (invisibleButton != null) {
remove(invisibleButton);
}
button.setVisible(false);
button.setSelected(true);
this.add(button);
invisibleButton = button;
setSelected(invisibleButton.getModel(), true);
}
public void setSelected(ButtonModel m, boolean b) {
if (m == invisibleButton.getModel()){
super.setSelected(m, b);
return;
}
if (m.isSelected() == b){
//System.out.println("CapriceButtonGroup: m.isSelected() == b.");
return;
}
ButtonModel oldSelection = getSelection();
if ((m == oldSelection) && (!b)) {
super.setSelected(invisibleButton.getModel(), true);
firePropertyChange(CapriceConstants.BUTTON_UNSELECTED, m, null);
} else if ((m == oldSelection) && (b)) {
//a bug caused by jdk1.4
return;
}
if (!b) return;
super.setSelected(m, b);
if (oldSelection == invisibleButton.getModel()) {
firePropertyChange(CapriceConstants.BUTTON_SELECTED, null, m);
} else {
firePropertyChange(CapriceConstants.BUTTON_TRANSFERRED, oldSelection, m);
}
}
protected void firePropertyChange(String propertyName, ButtonModel unselected, ButtonModel selected) {
//System.out.println("CapriceButtonGroup: " + propertyName);
if (changeSupport == null || (unselected != null && selected != null && unselected.equals(selected))) {
return;
}
changeSupport.firePropertyChange(propertyName, unselected, selected);
}
public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
if (changeSupport == null) {
changeSupport = new SwingPropertyChangeSupport(this);
}
changeSupport.addPropertyChangeListener(listener);
}
public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
if (changeSupport == null) {
return;
}
changeSupport.removePropertyChangeListener(listener);
}
}