Add ChangeListener to BooleanModel
This commit is contained in:
parent
f4f6200662
commit
47731a41fc
@ -6,10 +6,13 @@ import java.beans.PropertyChangeListener;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.EventListener;
|
||||
import java.util.EventObject;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.AbstractAction;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -40,7 +43,7 @@ import net.sf.openrocket.util.StateChangeListener;
|
||||
*
|
||||
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
||||
*/
|
||||
public class BooleanModel extends AbstractAction implements StateChangeListener, Invalidatable {
|
||||
public class BooleanModel extends AbstractAction implements StateChangeListener, ChangeSource, Invalidatable {
|
||||
private static final long serialVersionUID = -7299680391506320196L;
|
||||
private static final Logger log = LoggerFactory.getLogger(BooleanModel.class);
|
||||
|
||||
@ -67,6 +70,7 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
||||
private boolean oldEnabled;
|
||||
|
||||
private Invalidator invalidator = new Invalidator(this);
|
||||
private final ArrayList<EventListener> listeners = new ArrayList<>();
|
||||
|
||||
|
||||
/**
|
||||
@ -272,6 +276,15 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
||||
oldEnabled = e;
|
||||
setEnabled(e);
|
||||
}
|
||||
|
||||
for (EventListener listener : listeners) {
|
||||
if (listener instanceof StateChangeListener) {
|
||||
((StateChangeListener) listener).stateChanged(event);
|
||||
} else if (listener instanceof ChangeListener) {
|
||||
ChangeEvent cevent = new ChangeEvent(this);
|
||||
((ChangeListener) listener).stateChanged(cevent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -294,6 +307,15 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
||||
updateEnableStatus();
|
||||
firing--;
|
||||
}
|
||||
|
||||
for (EventListener listener : listeners) {
|
||||
if (listener instanceof StateChangeListener) {
|
||||
((StateChangeListener) listener).stateChanged(e);
|
||||
} else if (listener instanceof ChangeListener) {
|
||||
ChangeEvent cevent = new ChangeEvent(this);
|
||||
((ChangeListener) listener).stateChanged(cevent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -302,6 +324,34 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
||||
checkState(true);
|
||||
super.addPropertyChangeListener(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a listener to the model. Adds the model as a listener to the value source if this
|
||||
* is the first listener.
|
||||
* @param listener Listener to add.
|
||||
*/
|
||||
@Override
|
||||
public void addChangeListener(StateChangeListener listener) {
|
||||
checkState(true);
|
||||
|
||||
if (listeners.add(listener)) {
|
||||
log.trace(this + " adding listener (total " + listeners.size() + "): " + listener);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a listener from the model. Removes the model from being a listener to the Component
|
||||
* if this was the last listener of the model.
|
||||
* @param listener Listener to remove.
|
||||
*/
|
||||
@Override
|
||||
public void removeChangeListener(StateChangeListener listener) {
|
||||
checkState(false);
|
||||
|
||||
if (listeners.remove(listener)) {
|
||||
log.trace(this + " removing listener (total " + listeners.size() + "): " + listener);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@ -320,6 +370,10 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
||||
this.removePropertyChangeListener(l);
|
||||
}
|
||||
}
|
||||
if (!this.listeners.isEmpty()) {
|
||||
log.warn("Invalidating " + this + " while still having listeners " + this.listeners);
|
||||
}
|
||||
this.listeners.clear();
|
||||
if (source != null) {
|
||||
source.removeChangeListener(this);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user