X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Ffunction%2FChooseSingleParameter.java;fp=src%2Ftim%2Fprune%2Ffunction%2FChooseSingleParameter.java;h=5e23d745b41c76df8f0a1582e24932b40445716b;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/function/ChooseSingleParameter.java b/src/tim/prune/function/ChooseSingleParameter.java new file mode 100644 index 0000000..5e23d74 --- /dev/null +++ b/src/tim/prune/function/ChooseSingleParameter.java @@ -0,0 +1,158 @@ +package tim.prune.function; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import tim.prune.App; +import tim.prune.GenericFunction; +import tim.prune.I18nManager; +import tim.prune.gui.WholeNumberField; + +/** + * First step of functions which just require a single numeric + * parameter in order to run + */ +public class ChooseSingleParameter extends GenericFunction +{ + /** Parent function which needs this parameter */ + private SingleNumericParameterFunction _parent = null; + /** dialog */ + private JDialog _dialog = null; + /** label which might need to be changed */ + private JLabel _descLabel = null; + /** entry field */ + private WholeNumberField _numberField = null; + /** ok button */ + private JButton _okButton = null; + + + /** Constructor */ + public ChooseSingleParameter(App inApp, SingleNumericParameterFunction inFunction) + { + super(inApp); + _parent = inFunction; + } + + @Override + public String getNameKey() { + return _parent.getNameKey(); + } + + @Override + public void begin() + { + // Make dialog window + if (_dialog == null) + { + _dialog = new JDialog(_parentFrame, I18nManager.getText(_parent.getNameKey()), true); + _dialog.setLocationRelativeTo(_parentFrame); + _dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + _dialog.getContentPane().add(makeDialogComponents()); + _dialog.pack(); + } + // refresh and show the dialog + _descLabel.setText(I18nManager.getText(_parent.getDescriptionKey())); + int param = _parent.getCurrentParamValue(); + if (param > 0) { + _numberField.setValue(param); + } + else { + _numberField.setText(""); + } + _dialog.setVisible(true); + enableOkButton(); + } + + /** + * Create dialog components + * @return Panel containing all gui elements in dialog + */ + private JPanel makeDialogComponents() + { + JPanel dialogPanel = new JPanel(); + dialogPanel.setLayout(new BorderLayout()); + // label + _descLabel = new JLabel(I18nManager.getText(_parent.getDescriptionKey())); + dialogPanel.add(_descLabel, BorderLayout.NORTH); + // Centre panel with number entry field + JPanel centrePanel = new JPanel(); + centrePanel.setLayout(new BorderLayout(8, 8)); + _numberField = new WholeNumberField(4); + centrePanel.add(_numberField, BorderLayout.NORTH); + dialogPanel.add(centrePanel, BorderLayout.CENTER); + + // Listener to enable/disable ok button + _numberField.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + enableOkButton(); + } + }); + _numberField.addKeyListener(new KeyAdapter() { + public void keyReleased(KeyEvent inE) + { + int eCode = inE.getKeyCode(); + if (eCode == KeyEvent.VK_ESCAPE) {_dialog.dispose();} + else if (eCode == KeyEvent.VK_ENTER) {finish();} + super.keyReleased(inE); + } + }); + + // button panel at bottom + JPanel buttonPanel = new JPanel(); + buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); + _okButton = new JButton(I18nManager.getText("button.ok")); + ActionListener okListener = new ActionListener() { + public void actionPerformed(ActionEvent e) + { + finish(); + } + }; + _okButton.addActionListener(okListener); + _okButton.setEnabled(false); + buttonPanel.add(_okButton); + JButton cancelButton = new JButton(I18nManager.getText("button.cancel")); + cancelButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _dialog.dispose(); + } + }); + buttonPanel.add(cancelButton); + dialogPanel.add(buttonPanel, BorderLayout.SOUTH); + dialogPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 15)); + return dialogPanel; + } + + + /** + * Enable or disable the OK button as appropriate + */ + private void enableOkButton() + { + _okButton.setEnabled(_numberField.getValue() >= _parent.getMinAllowedValue() + && _numberField.getValue() <= _parent.getMaxAllowedValue()); + } + + /** + * The OK button (or Enter) has been pressed + */ + private void finish() + { + if (_numberField.getValue() >= _parent.getMinAllowedValue() + && _numberField.getValue() <= _parent.getMaxAllowedValue()) + { + _parent.completeFunction(_numberField.getValue()); + _dialog.dispose(); + } + } +}