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
;
12 * @version $Id: KeyPollTimer.java 2471 2007-07-31 21:50:57Z tgaskins $
14 class KeyPollTimer
implements java
.awt
.event
.KeyListener
16 private java
.util
.Timer timer
;
17 private java
.util
.TimerTask timerTask
;
18 private final int period
;
19 private final java
.awt
.event
.ActionListener listener
;
20 private java
.util
.ArrayList
<Integer
> keys
= new java
.util
.ArrayList
<Integer
>();
21 private java
.util
.Stack
<Integer
> keyStack
= new java
.util
.Stack
<Integer
>();
22 private int modifiers
;
24 public KeyPollTimer(int period
, java
.util
.Collection
<Integer
> keys
, java
.awt
.event
.ActionListener listener
)
28 String message
= Logging
.getMessage("Awt.KeyPollTimer.PeriodLessThanZero");
29 Logging
.logger().severe(message
);
30 throw new IllegalArgumentException(message
);
34 String message
= Logging
.getMessage("nullValue.CollectionIsNull");
35 Logging
.logger().severe(message
);
36 throw new IllegalArgumentException(message
);
38 this.timer
= new java
.util
.Timer();
40 this.listener
= listener
;
41 this.keys
.addAll(keys
);
44 public synchronized boolean isRunning()
46 return this.timerTask
!= null;
49 public void keyTyped(java
.awt
.event
.KeyEvent e
)
53 public void keyPressed(java
.awt
.event
.KeyEvent e
)
58 if (this.onKeyEvent(e
))
60 if (this.timerTask
== null)
65 public void keyReleased(java
.awt
.event
.KeyEvent e
)
70 if (this.onKeyEvent(e
))
72 if (this.timerTask
!= null && this.keyStack
.empty())
77 private synchronized boolean onKeyEvent(java
.awt
.event
.KeyEvent e
)
79 this.modifiers
= e
.getModifiersEx();
81 Integer keyCode
= e
.getKeyCode();
82 if (this.keys
.contains(keyCode
))
84 if (this.keyStack
.contains(keyCode
))
85 this.keyStack
.remove(keyCode
);
86 if (e
.getID() == java
.awt
.event
.KeyEvent
.KEY_PRESSED
)
87 this.keyStack
.push(keyCode
);
94 public synchronized void start()
96 if (this.timerTask
== null)
98 this.timerTask
= new java
.util
.TimerTask()
102 long time
= System
.currentTimeMillis();
103 if (time
- this.scheduledExecutionTime() >= 2 * KeyPollTimer
.this.period
)
105 KeyPollTimer
.this.updateAndNotify(KeyPollTimer
.this.listener
);
108 this.timer
.schedule(timerTask
, 0, this.period
);
112 public synchronized void stop()
114 if (this.timerTask
!= null)
116 this.timerTask
.cancel();
117 this.timerTask
= null;
121 private synchronized void updateAndNotify(java
.awt
.event
.ActionListener listener
)
123 if (listener
== null)
125 if (this.keyStack
.empty())
127 listener
.actionPerformed(new java
.awt
.event
.ActionEvent(keyStack
.peek(), 0, null, modifiers
));