package variableEditorUI; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextField; import parser.ExpressionNode; import valueTypes.CharacterSeparatedStatementPair; import valueTypes.ErrorValue; import variables.Variable; import expressionConsole.ExpressionConsoleModel; /** * The panel used in the menu which lets the user enter a comma separated list * of variable names to edit when the enter key is pressed. * * @author Curran Kelleher * */ public class EditVariablesMenuPanel extends JPanel implements KeyListener { private static final long serialVersionUID = -9092708506771144827L; JTextField textField = new JTextField(); /** * Constructs a new EditVariablesMenuPanel, ready to go. * */ public EditVariablesMenuPanel() { textField.addKeyListener(this); add(new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JLabel( "Variable(s) to edit...(ex. \"a, b, c\")"), textField)); } public void keyTyped(KeyEvent e) { } /** * When the enter key is pressed, the command "edit(" + textField.getText() + * ")" is executed in the console. */ public void keyPressed(KeyEvent e) { if (e.getKeyChar() == '\n') { if (textIsValid()) { ExpressionConsoleModel.getInstance().enterExpression( "edit(" + textField.getText() + ")"); } else JOptionPane.showMessageDialog(this, "Invalid text! " + textField.getText() + " is not a comma separated list of variable names.", "Invalid text!", JOptionPane.ERROR_MESSAGE); // clear the text textField.setText(""); } } /** * Tests to see if the text in the text box is valid. * * @return */ private boolean textIsValid() { ExpressionNode evalTree = ExpressionConsoleModel.getInstance() .getParser().parse(textField.getText()); if (evalTree instanceof CharacterSeparatedStatementPair) { CharacterSeparatedStatementPair statements = (CharacterSeparatedStatementPair) evalTree; if (statements.getSymbol().equals(",")) { ExpressionNode[] allVars = statements.extractAllStatements(); if (allVars.length == 1) if (allVars[0] instanceof ErrorValue) // this happens when the separator characters are // inconsistent return false; return true; } else return false; } else if (evalTree instanceof Variable) return true; else return false; } public void keyReleased(KeyEvent e) { } }