2 Copyright (C) 2001, 2006 United States Government as represented by
3 the Administrator of the National Aeronautics and Space Administration.
6 package gov
.nasa
.worldwind
.awt
;
8 import gov
.nasa
.worldwind
.util
.Logging
;
9 import gov
.nasa
.worldwind
.WorldWind
;
15 * @version $Id: KeyPollTimer.java 3704 2007-12-04 17:49:12Z tgaskins $
17 class KeyPollTimer
implements java
.awt
.event
.KeyListener
19 private java
.util
.Timer timer
;
20 private java
.util
.TimerTask timerTask
;
21 private final int period
;
22 private final java
.awt
.event
.ActionListener listener
;
23 private java
.util
.ArrayList
<Integer
> keys
= new java
.util
.ArrayList
<Integer
>();
24 private java
.util
.Stack
<Integer
> keyStack
= new java
.util
.Stack
<Integer
>();
25 private int modifiers
;
27 public KeyPollTimer(int period
, java
.util
.Collection
<Integer
> keys
, java
.awt
.event
.ActionListener listener
)
31 String message
= Logging
.getMessage("Awt.KeyPollTimer.PeriodLessThanZero");
32 Logging
.logger().severe(message
);
33 throw new IllegalArgumentException(message
);
37 String message
= Logging
.getMessage("nullValue.CollectionIsNull");
38 Logging
.logger().severe(message
);
39 throw new IllegalArgumentException(message
);
41 this.timer
= new java
.util
.Timer();
43 this.listener
= listener
;
44 this.keys
.addAll(keys
);
46 WorldWind
.addPropertyChangeListener(WorldWind
.SHUTDOWN_EVENT
, new PropertyChangeListener()
48 public void propertyChange(PropertyChangeEvent propertyChangeEvent
)
50 KeyPollTimer
.this.timer
.cancel();
51 KeyPollTimer
.this.timer
= null;
56 public synchronized boolean isRunning()
58 return this.timerTask
!= null;
61 public void keyTyped(java
.awt
.event
.KeyEvent e
)
65 public void keyPressed(java
.awt
.event
.KeyEvent e
)
70 if (this.onKeyEvent(e
))
72 if (this.timerTask
== null)
77 public void keyReleased(java
.awt
.event
.KeyEvent e
)
82 if (this.onKeyEvent(e
))
84 if (this.timerTask
!= null && this.keyStack
.empty())
89 private synchronized boolean onKeyEvent(java
.awt
.event
.KeyEvent e
)
91 this.modifiers
= e
.getModifiersEx();
93 Integer keyCode
= e
.getKeyCode();
94 if (this.keys
.contains(keyCode
))
96 if (this.keyStack
.contains(keyCode
))
97 this.keyStack
.remove(keyCode
);
98 if (e
.getID() == java
.awt
.event
.KeyEvent
.KEY_PRESSED
)
99 this.keyStack
.push(keyCode
);
106 public synchronized void start()
108 if (this.timerTask
== null)
110 this.timerTask
= new java
.util
.TimerTask()
114 long time
= System
.currentTimeMillis();
115 if (time
- this.scheduledExecutionTime() >= 2 * KeyPollTimer
.this.period
)
117 KeyPollTimer
.this.updateAndNotify(KeyPollTimer
.this.listener
);
120 this.timer
.schedule(timerTask
, 0, this.period
);
124 public synchronized void stop()
126 if (this.timerTask
!= null)
128 this.timerTask
.cancel();
129 this.timerTask
= null;
133 private synchronized void updateAndNotify(java
.awt
.event
.ActionListener listener
)
135 if (listener
== null)
137 if (this.keyStack
.empty())
139 listener
.actionPerformed(new java
.awt
.event
.ActionEvent(keyStack
.peek(), 0, null, modifiers
));