package abbot.editor.editors; import javax.swing.*; import java.util.*; import abbot.Log; import abbot.script.*; import abbot.tester.ComponentTester; /** Edit a raw AWTEvent. */ public class EventEditor extends StepEditor { private Event event; JComboBox type; JComboBox kind; JComboBox cref; private boolean ignoreCombo = false; JTextField xValue; JTextField yValue; JTextField keyCode; public EventEditor(Event event) { super(event); this.event = event; String idtype = event.getType(); String idkind = event.getKind(); String[] typeValues = { "Mouse Event", "Key Event" }; ignoreCombo = true; type = addComboBox("Type", typeValues[0], typeValues); type.setEnabled(false); type.setEditable(false); Resolver resolver = event.getResolver(); String refid = event.getComponentID(); if ("MouseEvent".equals(idtype)) { String[] kindValues = { "MOUSE_PRESSED", "MOUSE_RELEASED", "MOUSE_MOVED", "MOUSE_DRAGGED" }; kind = addComboBox("Kind", idkind, kindValues); kind.setEditable(false); kind.setEnabled(false); cref = addComponentSelector("On Component", refid, resolver, false); xValue = addTextField("X", event.getAttribute(XMLConstants.TAG_X)); yValue = addTextField("Y", event.getAttribute(XMLConstants.TAG_Y)); } else if ("KeyEvent".equals(idtype)) { type.setSelectedItem(typeValues[1]); String[] kindValues = { "KEY_PRESSED", "KEY_RELEASED" }; kind = addComboBox("Kind", idkind, kindValues); kind.setEditable(false); cref = addComponentSelector("On Component", refid, resolver, false); // FIXME make a popup w/all keycodes keyCode = addTextField("Key Code", event.getAttribute(XMLConstants.TAG_KEYCODE)); } else { Log.warn("Unhandled ID type: " + idtype); } ignoreCombo = false; } public void actionPerformed(java.awt.event.ActionEvent ev) { Object src = ev.getSource(); if (src == cref) { event.setComponentID((String)cref.getSelectedItem()); fireStepChanged(); } else if (src == kind) { if (!ignoreCombo) { event.setAttribute(XMLConstants.TAG_KIND, (String)kind.getSelectedItem()); fireStepChanged(); } } else if (src == xValue) { try { int value = Integer.parseInt(xValue.getText()); event.setAttribute(XMLConstants.TAG_X, String.valueOf(value)); xValue.setForeground(DEFAULT_FOREGROUND); fireStepChanged(); } catch(NumberFormatException nfe) { xValue.setForeground(ERROR_FOREGROUND); } } else if (src == yValue) { try { int value = Integer.parseInt(yValue.getText()); event.setAttribute(XMLConstants.TAG_Y, String.valueOf(value)); yValue.setForeground(DEFAULT_FOREGROUND); fireStepChanged(); } catch(NumberFormatException nfe) { yValue.setForeground(ERROR_FOREGROUND); } } else if (src == keyCode) { try { String codestr = keyCode.getText().trim(); event.setAttribute(XMLConstants.TAG_KEYCODE, codestr); keyCode.setForeground(DEFAULT_FOREGROUND); fireStepChanged(); } catch(IllegalArgumentException iae) { keyCode.setForeground(ERROR_FOREGROUND); } } else { super.actionPerformed(ev); } } }