+++ /dev/null
-package tim.prune.function.edit;
-
-import java.awt.Component;
-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.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-
-import tim.prune.App;
-import tim.prune.GenericFunction;
-import tim.prune.I18nManager;
-import tim.prune.data.DataPoint;
-import tim.prune.data.Field;
-
-/**
- * Function to manage the display and editing of waypoint names
- */
-public class PointNameEditor extends GenericFunction
-{
- private JDialog _dialog = null;
- private DataPoint _point = null;
- private JTextField _nameField = null;
- private JButton _okButton = null;
-
-
- /**
- * Constructor
- * @param inApp application object to inform of success
- */
- public PointNameEditor(App inApp)
- {
- super(inApp);
- }
-
- /** Get the name key */
- public String getNameKey() {
- return "function.editwaypointname";
- }
-
- /**
- * Begin the function by showing the edit point name dialog
- */
- public void begin()
- {
- _point = _app.getTrackInfo().getCurrentPoint();
- if (_dialog == null)
- {
- _dialog = new JDialog(_parentFrame, I18nManager.getText(getNameKey()), true);
- _dialog.setLocationRelativeTo(_parentFrame);
- // Create Gui and show it
- _dialog.getContentPane().add(makeDialogComponents());
- _dialog.pack();
- }
- // Check current waypoint name, if any
- String name = _point.getWaypointName();
- resetDialog(name);
- _dialog.setVisible(true);
- }
-
-
- /**
- * Make the dialog components
- * @return the GUI components for the dialog
- */
- private Component makeDialogComponents()
- {
- JPanel panel = new JPanel();
- panel.setLayout(new BorderLayout());
- // Create GUI layout for point name editor
- JPanel centrePanel = new JPanel();
- centrePanel.setLayout(new BorderLayout(8, 8));
- centrePanel.add(new JLabel(I18nManager.getText("dialog.pointnameedit.name") + ": "), BorderLayout.WEST);
- // Make listener to react to ok being pressed
- ActionListener okActionListener = new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- // update App with edit
- confirmEdit();
- _dialog.dispose();
- }
- };
- _nameField = new JTextField("", 12);
- _nameField.addKeyListener(new KeyAdapter() {
- public void keyReleased(KeyEvent e)
- {
- // close dialog if escape pressed
- if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
- {
- _dialog.dispose();
- }
- // Enable ok button if name changed
- _okButton.setEnabled(hasNameChanged());
- }
- });
- _nameField.addActionListener(okActionListener);
- centrePanel.add(_nameField, BorderLayout.CENTER);
- // holder panel to stop the text box from being stretched
- JPanel holderPanel = new JPanel();
- holderPanel.setLayout(new BorderLayout());
- holderPanel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
- holderPanel.add(centrePanel, BorderLayout.NORTH);
- panel.add(holderPanel, BorderLayout.CENTER);
- JPanel rightPanel = new JPanel();
- rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS));
- JButton upperButton = new JButton(I18nManager.getText("dialog.pointnameedit.uppercase"));
- upperButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- _nameField.setText(_nameField.getText().toUpperCase());
- _okButton.setEnabled(true);
- _nameField.requestFocus();
- }
- });
- rightPanel.add(upperButton);
- JButton lowerButton = new JButton(I18nManager.getText("dialog.pointnameedit.lowercase"));
- lowerButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- _nameField.setText(_nameField.getText().toLowerCase());
- _okButton.setEnabled(true);
- _nameField.requestFocus();
- }
- });
- rightPanel.add(lowerButton);
- JButton titleButton = new JButton(I18nManager.getText("dialog.pointnameedit.titlecase"));
- titleButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- _nameField.setText(titleCase(_nameField.getText()));
- _okButton.setEnabled(true);
- _nameField.requestFocus();
- }
- });
- rightPanel.add(titleButton);
- panel.add(rightPanel, BorderLayout.EAST);
- // Bottom panel for OK, cancel buttons
- JPanel lowerPanel = new JPanel();
- lowerPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
- JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
- cancelButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- _dialog.dispose();
- }
- });
- lowerPanel.add(cancelButton);
- _okButton = new JButton(I18nManager.getText("button.ok"));
- _okButton.setEnabled(false);
- _okButton.addActionListener(okActionListener);
- lowerPanel.add(_okButton);
- panel.add(lowerPanel, BorderLayout.SOUTH);
- return panel;
- }
-
-
- /**
- * Reset the dialog with the given name
- * @param inName waypoint name
- */
- private void resetDialog(String inName)
- {
- _nameField.setText(inName);
- _okButton.setEnabled(false);
- }
-
- /**
- * Turn a String into title case by capitalizing each word
- * @param inString String to convert
- * @return capitalized String
- */
- private static String titleCase(String inString)
- {
- // Check first for empty strings
- if (inString == null || inString.equals(""))
- {
- return "";
- }
- StringBuffer buffer = new StringBuffer();
- // loop through characters
- char lastChar = ' ', currChar = ' ';
- for (int i=0; i<inString.length(); i++)
- {
- currChar = inString.charAt(i);
- buffer.append(lastChar == ' '?Character.toUpperCase(currChar):Character.toLowerCase(currChar));
- lastChar = currChar;
- }
- return buffer.toString();
- }
-
-
- /**
- * Confirm the edit and inform the app
- */
- private void confirmEdit()
- {
- // Check whether name has really changed
- if (hasNameChanged())
- {
- // Make lists for edit and undo, and add the changed field
- FieldEditList editList = new FieldEditList();
- FieldEditList undoList = new FieldEditList();
- editList.addEdit(new FieldEdit(Field.WAYPT_NAME, _nameField.getText().trim()));
- undoList.addEdit(new FieldEdit(Field.WAYPT_NAME, _point.getWaypointName()));
-
- // Pass back to App to perform edit
- _app.completePointEdit(editList, undoList);
- }
- }
-
- /**
- * Check whether the name has been changed or not
- * @return true if the new name is different
- */
- private boolean hasNameChanged()
- {
- String prevName = _point.getWaypointName();
- String newName = _nameField.getText().trim();
- boolean prevNull = (prevName == null || prevName.equals(""));
- boolean newNull = (newName == null || newName.equals(""));
- return (prevNull && !newNull)
- || (!prevNull && newNull)
- || (!prevNull && !newNull && !prevName.equals(newName));
- }
-}