package com.revolsys.swing.listener;
import java.awt.Component;
import java.awt.ItemSelectable;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import com.revolsys.beans.NonWeakListener;
import com.revolsys.swing.parallel.Invoke;
public class EnableComponentListener implements ItemListener, ListSelectionListener,
PropertyChangeListener, DocumentListener, NonWeakListener {
private final Component component;
public EnableComponentListener(final Component component) {
this.component = component;
}
@Override
public void changedUpdate(final DocumentEvent e) {
if (e.getDocument().getLength() == 0) {
this.component.setEnabled(false);
} else {
this.component.setEnabled(true);
}
}
@Override
public void insertUpdate(final DocumentEvent e) {
changedUpdate(e);
}
@Override
public void itemStateChanged(final ItemEvent e) {
final ItemSelectable itemSelectable = e.getItemSelectable();
final Object[] selectedObjects = itemSelectable.getSelectedObjects();
if (selectedObjects == null) {
this.component.setEnabled(false);
} else {
this.component.setEnabled(true);
}
}
@Override
public void propertyChange(final PropertyChangeEvent event) {
final Object newValue = event.getNewValue();
if (newValue instanceof Boolean) {
final Boolean enabled = (Boolean)newValue;
Invoke.later(() -> this.component.setEnabled(enabled));
}
}
@Override
public void removeUpdate(final DocumentEvent e) {
changedUpdate(e);
}
@Override
public void valueChanged(final ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
final int firstIndex = e.getFirstIndex();
if (firstIndex == -1) {
this.component.setEnabled(false);
} else {
this.component.setEnabled(true);
}
}
}
}