]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/correlate/OptionsChangedListener.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / correlate / OptionsChangedListener.java
diff --git a/src/tim/prune/correlate/OptionsChangedListener.java b/src/tim/prune/correlate/OptionsChangedListener.java
new file mode 100644 (file)
index 0000000..2da93e6
--- /dev/null
@@ -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();
+       }
+}