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.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.EventListener;
|
||||||
import java.util.EventObject;
|
import java.util.EventObject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
|
import javax.swing.event.ChangeEvent;
|
||||||
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -40,7 +43,7 @@ import net.sf.openrocket.util.StateChangeListener;
|
|||||||
*
|
*
|
||||||
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
* @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 long serialVersionUID = -7299680391506320196L;
|
||||||
private static final Logger log = LoggerFactory.getLogger(BooleanModel.class);
|
private static final Logger log = LoggerFactory.getLogger(BooleanModel.class);
|
||||||
|
|
||||||
@ -67,6 +70,7 @@ public class BooleanModel extends AbstractAction implements StateChangeListener,
|
|||||||
private boolean oldEnabled;
|
private boolean oldEnabled;
|
||||||
|
|
||||||
private Invalidator invalidator = new Invalidator(this);
|
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;
|
oldEnabled = e;
|
||||||
setEnabled(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();
|
updateEnableStatus();
|
||||||
firing--;
|
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);
|
checkState(true);
|
||||||
super.addPropertyChangeListener(listener);
|
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);
|
this.removePropertyChangeListener(l);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!this.listeners.isEmpty()) {
|
||||||
|
log.warn("Invalidating " + this + " while still having listeners " + this.listeners);
|
||||||
|
}
|
||||||
|
this.listeners.clear();
|
||||||
if (source != null) {
|
if (source != null) {
|
||||||
source.removeChangeListener(this);
|
source.removeChangeListener(this);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user