Milán Major

netscape-revival

1 branch
Code

sun-java/classsrc/java/awt/test/KeyTest.java

/*
 * @(#)KeyTest.java	1.5 95/10/03 Sami Shaio
 *
 * Copyright (c) 1995 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL purposes and without
 * fee is hereby granted provided that this copyright notice
 * appears in all copies. Please refer to the file "copyright.html"
 * for further important copyright and licensing information.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 */
import java.awt.*;

public class KeyTest extends Frame {
    String	value = "";
    Color	keyColor = Color.green;
    Font	font = new Font("Helvetica", Font.BOLD, 24);

    public KeyTest() {
	resize(300, 300);
	show();
    }

    public static void main(String args[]) {
	new KeyTest();
    }

    public void paint(Graphics g) {
	g.setColor(keyColor);
	g.setFont(font);
	Rectangle bounds = bounds();
	FontMetrics fm = g.getFontMetrics(font);
	
	g.drawString(value,
		     ((bounds.width - fm.stringWidth(value))/ 2),
		     ((bounds.height - fm.getHeight()) / 2));
    }

    void displayKey(int key, int modifiers, boolean pressed) {
	String keyString;

	char s[] = new char[1];

	if (pressed) {
	    keyColor = Color.red;
	} else {
	    keyColor = Color.black;
	}
	if ((modifiers&Event.CTRL_MASK) != 0) {
	    s[0] = (char)(key + 'a' - 1);
	} else {
	    s[0] = (char)key;
	}
	keyString = new String(s);

	value = modifierString(modifiers) + keyString + "[" + key + "]";
	repaint();
    }

    String modifierString(int modifiers) {

	String mstr = "";
	if ((modifiers&Event.CTRL_MASK) != 0) {
	    mstr = mstr+"Ctrl-";
	}
	if ((modifiers & Event.SHIFT_MASK) != 0) {
	    mstr = mstr+"Shift-";
	}
	if ((modifiers & Event.META_MASK) != 0) {
	    mstr = mstr+"Meta-";
	}
	if ((modifiers & Event.ALT_MASK) != 0) {
	    mstr = mstr+"Alt-";
	}

	return mstr;
    }

    void displayKeyAction(Event e, boolean pressed) {
	String keyString;

	if (pressed) {
	    keyColor = Color.red;
	} else {
	    keyColor = Color.black;
	}
	switch (e.key) {
	  case Event.HOME:
	    keyString = "Home";
	    break;
	  case Event.END:
	    keyString = "End";
	    break;
	  case Event.PGUP:
	    keyString = "PageUp";
	    break;
	  case Event.PGDN:
	    keyString = "PageDown";
	    break;
	  case Event.UP:
	    keyString = "Up";
	    break;
	  case Event.DOWN:
	    keyString = "Down";
	    break;
	  case Event.LEFT:
	    keyString = "Left";
	    break;
	  case Event.RIGHT:
	    keyString = "Right";
	    break;
	  case Event.ESC:
	    keyString = "ESC";
	    break;
	  case Event.F1:
	    keyString = "F1";
	    break;
	  case Event.F2:
	    keyString = "F2";
	    break;
	  case Event.F3:
	    keyString = "F3";
	    break;
	  case Event.F4:
	    keyString = "F4";
	    break;
	  case Event.F5:
	    keyString = "F5";
	    break;
	  case Event.F6:
	    keyString = "F6";
	    break;
	  case Event.F7:
	    keyString = "F7";
	    break;
	  case Event.F8:
	    keyString = "F8";
	    break;
	  case Event.F9:
	    keyString = "F9";
	    break;
	  case Event.F10:
	    keyString = "F10";
	    break;
	  case Event.F11:
	    keyString = "F11";
	    break;
	  case Event.F12:
	    keyString = "F12";
	    break;
	  default:
	    keyString = "???";
	    break;
	}
	value = modifierString(e.modifiers) + keyString;
	repaint();
    }

    void displayMouse(Event e) {
	value = modifierString(e.modifiers) + "Button (" + e.x + ", "
	    + e.y + ")";
	switch (e.id) {
	  case Event.MOUSE_DRAG:
	    value = value + "...";
	  case Event.MOUSE_DOWN:
	    keyColor = Color.red;
	    break;
	  case Event.MOUSE_MOVE:
	    value = value + "'''";
	  case Event.MOUSE_UP:
	    keyColor = Color.black;
	    break;
	  default:
	    break;
	}
	repaint();
    }

    public boolean handleEvent(Event e) {
	switch (e.id) {
	  case Event.WINDOW_DESTROY:
	    System.exit(0);
	    return true;
	  case Event.MOUSE_DOWN:
	  case Event.MOUSE_UP:
	  case Event.MOUSE_MOVE:
	  case Event.MOUSE_DRAG:
	    displayMouse(e);
	    return true;
	  case Event.KEY_PRESS:
	  case Event.KEY_RELEASE:
	    displayKey(e.key, e.modifiers, e.id==Event.KEY_PRESS);
	    return true;
	  case Event.KEY_ACTION:
	  case Event.KEY_ACTION_RELEASE:
	    displayKeyAction(e, e.id==Event.KEY_ACTION);
	    return true;
	  default:
	    return false;
	}
    }
}