]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/correlate/OptionsChangedListener.java
Version 4, January 2008
[GpsPrune.git] / tim / prune / correlate / OptionsChangedListener.java
1 package tim.prune.correlate;
2
3 import java.awt.event.ActionListener;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ItemEvent;
6 import java.awt.event.ItemListener;
7 import java.awt.event.KeyEvent;
8 import java.awt.event.KeyListener;
9
10 /**
11  * Helper class to listen for changed options on the PhotoCorrelator
12  * Tightly coupled but only to ok button and preview function
13  */
14 public class OptionsChangedListener implements KeyListener, ActionListener, ItemListener, Runnable
15 {
16         /** Correlator object for callbacks */
17         private PhotoCorrelator _correlator;
18         /** Thread counter */
19         private int _threadCount = 0;
20
21         /** Default delay time from change to preview trigger */
22         private static final long PREVIEW_DELAY_TIME = 2500L;
23
24
25         /**
26          * Constructor
27          * @param inCorrelator correlator object for callbacks
28          */
29         public OptionsChangedListener(PhotoCorrelator inCorrelator)
30         {
31                 _correlator = inCorrelator;
32         }
33
34         /**
35          * Respond to actions performed on control
36          * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
37          */
38         public void actionPerformed(ActionEvent inEvent)
39         {
40                 optionsChanged();
41         }
42
43         /**
44          * Run method, called by separate thread(s)
45          * @see java.lang.Runnable#run()
46          */
47         public void run()
48         {
49                 // Wait for a certain time
50                 try {
51                         Thread.sleep(PREVIEW_DELAY_TIME);
52                 }
53                 catch (InterruptedException ie) {}
54                 _threadCount--;
55                 if (_threadCount == 0) {
56                         // trigger preview (false means automatic)
57                         _correlator.createPreview(false);
58                 }
59         }
60
61         /**
62          * Respond to key pressed event
63          * @param inEvent event
64          */
65         public void keyPressed(KeyEvent inEvent)
66         {
67                 optionsChanged();
68         }
69
70         /** Ignore key released events */
71         public void keyReleased(KeyEvent inEvent) {}
72
73         /** Ignore key typed events */
74         public void keyTyped(KeyEvent e) {}
75
76         /**
77          * Respond to item change events (eg dropdown)
78          * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
79          */
80         public void itemStateChanged(ItemEvent inEvent)
81         {
82                 if (inEvent.getStateChange() == ItemEvent.SELECTED) {
83                         optionsChanged();
84                 }
85         }
86
87         /**
88          * Trigger that an option has changed, whatever type
89          */
90         private void optionsChanged()
91         {
92                 // disable ok button
93                 _correlator.disableOkButton();
94                 // start new thread to trigger preview
95                 _threadCount++;
96                 new Thread(this).start();
97         }
98 }