X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fcorrelate%2FOptionsChangedListener.java;fp=src%2Ftim%2Fprune%2Fcorrelate%2FOptionsChangedListener.java;h=2da93e6fc4ede147bdf76c9b928c433817d51afa;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/correlate/OptionsChangedListener.java b/src/tim/prune/correlate/OptionsChangedListener.java new file mode 100644 index 0000000..2da93e6 --- /dev/null +++ b/src/tim/prune/correlate/OptionsChangedListener.java @@ -0,0 +1,98 @@ +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(); + } +}