+++ /dev/null
-package tim.prune.load.babel;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.util.regex.Pattern;
-
-import javax.swing.BorderFactory;
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.SwingUtilities;
-
-import tim.prune.I18nManager;
-import tim.prune.gui.StatusIcon;
-
-/**
- * Gui element to allow the specification of filters for GPSBabel.
- * Used for loading from GPS and loading from file
- */
-public class BabelFilterPanel extends JPanel
-{
- /** Text field for entering filters manually */
- private JTextField _filterField = null;
- /** Icon for showing whether the value is valid for GPSBabel or not */
- private StatusIcon _validIcon = null;
- /** Dialog for adding a new filter */
- private AddFilterDialog _addDialog = null;
-
- /** Regular expression for detecting valid filter strings */
- private static final Pattern FILTER_PATTERN
- = Pattern.compile("(-x [a-z,\\.0-9=]+ *)+");
-
- /**
- * Constructor
- * @param inParentFrame parent frame for launching popup dialog
- */
- public BabelFilterPanel(JFrame inParentFrame)
- {
- setBorder(BorderFactory.createCompoundBorder(
- BorderFactory.createTitledBorder(I18nManager.getText("dialog.gpsbabel.filters")),
- BorderFactory.createEmptyBorder(2, 2, 2, 2)));
- initPanel();
- _addDialog = new AddFilterDialog(this, inParentFrame);
- }
-
- /**
- * Set up the panel with all the components inside
- */
- private void initPanel()
- {
- setLayout(new BorderLayout(4, 4));
- // text field for the filter text
- _filterField = new JTextField(20);
- _filterField.addKeyListener(new KeyAdapter() {
- public void keyTyped(KeyEvent arg0) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- checkFilter();
- }
- });
- }
- });
- JPanel filterFieldPanel = new JPanel();
- filterFieldPanel.setLayout(new BorderLayout(3, 3));
- JPanel filterIconPanel = new JPanel();
- filterIconPanel.setLayout(new BorderLayout(3, 3));
- filterIconPanel.add(_filterField, BorderLayout.CENTER);
- _validIcon = new StatusIcon();
- filterIconPanel.add(_validIcon, BorderLayout.EAST);
- filterFieldPanel.add(filterIconPanel, BorderLayout.NORTH);
- add(filterFieldPanel, BorderLayout.CENTER);
- // Add and clear buttons
- JPanel buttonPanel = new JPanel();
- buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
- JButton addButton = new JButton(I18nManager.getText("button.addnew"));
- addButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- // System.out.println("Filter exists: " + hasFilter() + ", valid: " + isFilterValid());
- _addDialog.showDialog();
- }
- });
- buttonPanel.add(addButton);
- buttonPanel.add(Box.createVerticalStrut(2));
- JButton clearButton = new JButton(I18nManager.getText("button.delete"));
- clearButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent arg0) {
- _filterField.setText("");
- checkFilter();
- }
- });
- buttonPanel.add(clearButton);
- add(buttonPanel, BorderLayout.EAST);
- }
-
- /**
- * @param inFilter filter string to set (normally from config)
- */
- public void setFilterString(String inFilter)
- {
- if (inFilter != null && _filterField != null) {
- _filterField.setText(inFilter.trim());
- }
- checkFilter();
- }
-
- /**
- * @return trimmed filter string, or null
- */
- public String getFilterString()
- {
- String filter = _filterField.getText();
- if (filter != null) filter = filter.trim();
- return filter;
- }
-
- /**
- * @return true if a filter has been given (which may or may not be valid)
- */
- public boolean hasFilter()
- {
- String str = getFilterString();
- return str != null && str.length() > 0;
- }
-
- /**
- * @return true if the given filter string is valid
- */
- public boolean isFilterValid()
- {
- String str = getFilterString();
- if (str == null) return false;
- return FILTER_PATTERN.matcher(str).matches();
- }
-
- /**
- * Called from the add filter dialog to indicate completion
- * @param inFilter filter to add
- */
- public void addFilter(String inFilter)
- {
- if (inFilter != null)
- {
- String newFilter = inFilter.trim();
- String currFilter = getFilterString();
- if (!newFilter.equals(""))
- {
- if (currFilter == null || currFilter.equals("")) {
- currFilter = newFilter;
- }
- else { // append
- currFilter = currFilter + " " + newFilter;
- }
- }
- _filterField.setText(currFilter);
- }
- checkFilter();
- }
-
- /**
- * See if the current filter is valid or not, and update the icon accordingly
- */
- private void checkFilter()
- {
- if (hasFilter())
- {
- if (isFilterValid()) {
- _validIcon.setStatusValid();
- }
- else {
- _validIcon.setStatusInvalid();
- }
- }
- else
- {
- _validIcon.setStatusBlank();
- }
- }
-}