package com.revolsys.swing.menu;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.Icon;
import javax.swing.JToggleButton;
import javax.swing.SwingConstants;
import com.revolsys.swing.action.AbstractAction;
import com.revolsys.swing.action.enablecheck.EnableCheck;
import com.revolsys.swing.parallel.Invoke;
import com.revolsys.util.Property;
public class ToggleButton extends JToggleButton implements PropertyChangeListener {
private static final long serialVersionUID = 1L;
private EnableCheck enableCheck;
public ToggleButton(final AbstractAction action) {
super(action);
final Icon icon = action.getIcon();
if (icon != null || action.getLargeIcon() != null) {
setHideActionText(true);
}
final Icon disabledIcon = action.getDisabledIcon();
setDisabledIcon(disabledIcon);
setHorizontalTextPosition(SwingConstants.CENTER);
setVerticalTextPosition(SwingConstants.BOTTOM);
setFocusPainted(false);
setBorderPainted(false);
final EnableCheck enableCheck = action.getEnableCheck();
setEnableCheck(enableCheck);
setFocusable(false);
}
@Override
public void propertyChange(final PropertyChangeEvent evt) {
final boolean enabled = this.enableCheck.isEnabled();
Invoke.later(() -> {
setEnabled(enabled);
});
}
public void setEnableCheck(final EnableCheck enableCheck) {
Property.removeListener(this.enableCheck, "enabled", this);
this.enableCheck = enableCheck;
Property.addListener(enableCheck, "enabled", this);
setEnabled(enableCheck == null || this.enableCheck.isEnabled());
}
}