Clean-up and easier toggling of debug logging.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@825 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Walter Korman
2001-12-17 22:13:19 +00:00
parent f3f4ba4c16
commit e76c0975ca
@@ -1,13 +1,13 @@
// //
// $Id: KeyboardManager.java,v 1.3 2001/12/14 01:14:50 shaper Exp $ // $Id: KeyboardManager.java,v 1.4 2001/12/17 22:13:19 shaper Exp $
package com.threerings.yohoho.puzzle.util; package com.threerings.yohoho.puzzle.util;
import java.awt.Component; import java.awt.Component;
import java.awt.event.FocusAdapter; import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent; import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Iterator; import java.util.Iterator;
import com.samskivert.swing.Controller; import com.samskivert.swing.Controller;
@@ -24,7 +24,7 @@ import com.threerings.yohoho.Log;
* rate, and will begin repeating a key immediately after it is held down * rate, and will begin repeating a key immediately after it is held down
* rather than depending on the system-specific key repeat delay/rate. * rather than depending on the system-specific key repeat delay/rate.
*/ */
public class KeyboardManager implements KeyListener public class KeyboardManager
{ {
/** /**
* Constructs a keyboard manager. * Constructs a keyboard manager.
@@ -40,7 +40,14 @@ public class KeyboardManager implements KeyListener
_xlate = xlate; _xlate = xlate;
// listen to key events // listen to key events
target.addKeyListener(this); target.addKeyListener(new KeyAdapter () {
public void keyPressed (KeyEvent e) {
KeyboardManager.this.keyPressed(e);
}
public void keyReleased (KeyEvent e) {
KeyboardManager.this.keyReleased(e);
}
});
// listen to focus events so that we can cease repeating if we // listen to focus events so that we can cease repeating if we
// lose focus // lose focus
@@ -95,7 +102,7 @@ public class KeyboardManager implements KeyListener
} }
// documentation inherited // documentation inherited
public void keyPressed (KeyEvent e) protected void keyPressed (KeyEvent e)
{ {
logKey("keyPressed", e); logKey("keyPressed", e);
@@ -120,7 +127,7 @@ public class KeyboardManager implements KeyListener
} }
// documentation inherited // documentation inherited
public void keyReleased (KeyEvent e) protected void keyReleased (KeyEvent e)
{ {
logKey("keyReleased", e); logKey("keyReleased", e);
@@ -131,21 +138,10 @@ public class KeyboardManager implements KeyListener
// get the info object for this key // get the info object for this key
KeyInfo info = (KeyInfo)_keys.get(e.getKeyCode()); KeyInfo info = (KeyInfo)_keys.get(e.getKeyCode());
if (info == null) { if (info != null) {
// Log.warning("Received key released event for a key that " + // remember the last time we received a key release
// "seems not to have been previously pressed " + info.setReleaseTime(System.currentTimeMillis());
// "[e=" + e + "].");
return;
} }
// remember the last time we received a key release
info.setReleaseTime(System.currentTimeMillis());
}
// documentation inherited
public void keyTyped (KeyEvent e)
{
// logKey("keyTyped", e);
} }
/** /**
@@ -153,8 +149,10 @@ public class KeyboardManager implements KeyListener
*/ */
protected void logKey (String msg, KeyEvent e) protected void logKey (String msg, KeyEvent e)
{ {
int keyCode = e.getKeyCode(); if (DEBUG_EVENTS) {
Log.info(msg + " [key=" + KeyEvent.getKeyText(keyCode) + "]."); int keyCode = e.getKeyCode();
Log.info(msg + " [key=" + KeyEvent.getKeyText(keyCode) + "].");
}
} }
protected class KeyInfo implements Interval protected class KeyInfo implements Interval
@@ -182,9 +180,12 @@ public class KeyboardManager implements KeyListener
// register an interval to post the command associated // register an interval to post the command associated
// with the key press until the key is decidedly released // with the key press until the key is decidedly released
_iid = IntervalManager.register(this, _pressDelay, null, true); _iid = IntervalManager.register(this, _pressDelay, null, true);
if (DEBUG_EVENTS) {
Log.info("Pressing key [key=" + _keyText + "].");
}
// post the initial key press command if applicable
if (_pressCommand != null) { if (_pressCommand != null) {
// post the initial key press command
Controller.postAction(_target, _pressCommand); Controller.postAction(_target, _pressCommand);
} }
} }
@@ -204,22 +205,27 @@ public class KeyboardManager implements KeyListener
*/ */
public synchronized void release () public synchronized void release ()
{ {
Log.info("Releasing key [key=" + _keyText + "]."); // bail if we're not currently pressed
if (_iid == -1) {
return;
}
if (DEBUG_EVENTS) {
Log.info("Releasing key [key=" + _keyText + "].");
}
// remove the repeat interval
IntervalManager.remove(_iid);
_iid = -1;
// remove the sub-interval, if any
if (_siid != -1) { if (_siid != -1) {
// remove the sub-interval
IntervalManager.remove(_siid); IntervalManager.remove(_siid);
_siid = -1; _siid = -1;
} }
// remove the repeat interval
if (_iid != -1) {
IntervalManager.remove(_iid);
_iid = -1;
}
// post the key release command if applicable
if (_releaseCommand != null) { if (_releaseCommand != null) {
// post the key release command
Controller.postAction(_target, _releaseCommand); Controller.postAction(_target, _releaseCommand);
} }
} }
@@ -231,26 +237,29 @@ public class KeyboardManager implements KeyListener
long deltaPress = now - _lastPress; long deltaPress = now - _lastPress;
long deltaRelease = now - _lastRelease; long deltaRelease = now - _lastRelease;
if (KeyboardManager.DEBUG_INTERVAL) {
Log.info("Interval [id=" + id + ", key=" + _keyText +
", deltaPress=" + deltaPress +
", deltaRelease=" + deltaRelease + "].");
}
if (id == _iid) { if (id == _iid) {
// handle a normal interval where we either (a) create a // handle a normal interval where we either (a) create a
// sub-interval if we can't yet determine definitively // sub-interval if we can't yet determine definitively
// whether the key is still down, (b) cease repeating if // whether the key is still down, (b) cease repeating if
// we're certain the key is now up, or (c) repeat the key // we're certain the key is now up, or (c) repeat the key
// command if we're certain the key is still down // command if we're certain the key is still down
Log.info("normal interval [key=" + _keyText +
", deltaPress=" + deltaPress +
", deltaRelease=" + deltaRelease + "].");
if (_lastRelease != _lastPress) { if (_lastRelease != _lastPress) {
if (deltaRelease < _repeatDelay) { if (deltaRelease < _repeatDelay) {
// register a one-shot sub-interval to // register a one-shot sub-interval to
// definitively check whether the key was released // definitively check whether the key was released
Log.info("Registering sub-interval to check key " +
"release.");
long delay = _repeatDelay - deltaRelease; long delay = _repeatDelay - deltaRelease;
_siid = IntervalManager.register( _siid = IntervalManager.register(
this, delay, new Long(_lastPress), false); this, delay, new Long(_lastPress), false);
if (KeyboardManager.DEBUG_INTERVAL) {
Log.info("Registered sub-interval " +
"[id=" + _siid + "].");
}
} else { } else {
// we know the key was released, so cease repeating // we know the key was released, so cease repeating
@@ -259,7 +268,6 @@ public class KeyboardManager implements KeyListener
} else if (_pressCommand != null) { } else if (_pressCommand != null) {
// post the key press command again // post the key press command again
// Log.info("Repeating command [cmd=" + _pressCommand + "].");
Controller.postAction(_target, _pressCommand); Controller.postAction(_target, _pressCommand);
} }
@@ -268,19 +276,17 @@ public class KeyboardManager implements KeyListener
// really been released since the normal interval expired // really been released since the normal interval expired
// at an inopportune time for a definitive check // at an inopportune time for a definitive check
Log.info("sub-interval [key=" + _keyText +
", deltaPress=" + deltaPress +
", deltaRelease=" + deltaRelease + "].");
// clear out the non-recurring sub-interval identifier // clear out the non-recurring sub-interval identifier
_siid = -1; _siid = -1;
// make sure the key hasn't been pressed again since the // make sure the key hasn't been pressed again since the
// sub-interval was registered // sub-interval was registered
if (_lastPress != ((Long)arg).longValue()) { if (_lastPress != ((Long)arg).longValue()) {
Log.warning("Key pressed since sub-interval was " + if (KeyboardManager.DEBUG_INTERVAL) {
"registered, aborting release check " + Log.warning("Key pressed since sub-interval was " +
"[key=" + _keyText + "]."); "registered, aborting release check " +
"[key=" + _keyText + "].");
}
return; return;
} }
@@ -291,7 +297,6 @@ public class KeyboardManager implements KeyListener
} else if (_pressCommand != null) { } else if (_pressCommand != null) {
// post the key command again // post the key command again
// Log.info("Repeating command [cmd=" + _pressCommand + "].");
Controller.postAction(_target, _pressCommand); Controller.postAction(_target, _pressCommand);
} }
} }
@@ -333,6 +338,12 @@ public class KeyboardManager implements KeyListener
protected int _keyCode; protected int _keyCode;
} }
/** Whether to output debugging info for individual key events. */
protected static final boolean DEBUG_EVENTS = true;
/** Whether to output debugging info for interval callbacks. */
protected static final boolean DEBUG_INTERVAL = true;
/** The default repeat delay. */ /** The default repeat delay. */
protected static final long DEFAULT_REPEAT_DELAY = 50L; protected static final long DEFAULT_REPEAT_DELAY = 50L;