package tim.prune.correlate; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; /** * Helper class to listen for changed options on the Correlators * Tightly coupled but only to ok button and preview function */ public class OptionsChangedListener implements KeyListener, ActionListener, ItemListener, Runnable { /** Correlator object for callbacks */ private Correlator _correlator; /** Thread counter */ private int _threadCount = 0; /** Default delay time from change to preview trigger */ private static final long PREVIEW_DELAY_TIME = 2500L; /** * Constructor * @param inCorrelator correlator object for callbacks */ public OptionsChangedListener(Correlator inCorrelator) { _correlator = inCorrelator; } /** * Respond to actions performed on control * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(ActionEvent inEvent) { optionsChanged(); } /** * Run method, called by separate thread(s) * @see java.lang.Runnable#run() */ public void run() { // Wait for a certain time try { Thread.sleep(PREVIEW_DELAY_TIME); } catch (InterruptedException ie) {} _threadCount--; if (_threadCount == 0) { // trigger preview (false means automatic) _correlator.createPreview(false); } } /** * Respond to key pressed event * @param inEvent event */ public void keyPressed(KeyEvent inEvent) { optionsChanged(); } /** Ignore key released events */ public void keyReleased(KeyEvent inEvent) {} /** Ignore key typed events */ public void keyTyped(KeyEvent e) {} /** * Respond to item change events (eg dropdown) * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent) */ public void itemStateChanged(ItemEvent inEvent) { if (inEvent.getStateChange() == ItemEvent.SELECTED) { optionsChanged(); } } /** * Trigger that an option has changed, whatever type */ private void optionsChanged() { // disable ok button _correlator.disableOkButton(); // start new thread to trigger preview _threadCount++; new Thread(this).start(); } }