Changeset 1576 in josm for trunk/src


Ignore:
Timestamp:
2009-05-05T16:51:53+02:00 (15 years ago)
Author:
stoecker
Message:

close #2423 - patch by Igor Shubovych - Filter for advanced preferences

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/AdvancedPreference.java

    r1180 r1576  
    1212import java.awt.event.MouseEvent;
    1313import java.util.Map;
     14import java.util.TreeMap;
    1415import java.util.TreeSet;
    1516import java.util.Map.Entry;
     
    2324import javax.swing.JTable;
    2425import javax.swing.JTextField;
     26import javax.swing.event.DocumentEvent;
     27import javax.swing.event.DocumentListener;
    2528import javax.swing.table.DefaultTableCellRenderer;
    2629import javax.swing.table.DefaultTableModel;
     
    3437    private Map<String,String> defaults;
    3538    private DefaultTableModel model;
     39    protected Map<String, String> data;
     40    protected JTextField txtFilter;
    3641
    3742    public void addGui(final PreferenceDialog gui) {
    3843        JPanel p = gui.createPreferenceTab("advanced", tr("Advanced Preferences"),
    3944                tr("Setting Preference entries directly. Use with caution!"), false);
     45       
     46        txtFilter = new JTextField();
     47        JLabel lbFilter = new JLabel(tr("Search: "));
     48        lbFilter.setLabelFor(txtFilter);
     49        p.add(lbFilter);
     50        p.add(txtFilter, GBC.eol().fill(GBC.HORIZONTAL));
     51        txtFilter.getDocument().addDocumentListener(new DocumentListener(){
     52            public void changedUpdate(DocumentEvent e) {
     53                action();
     54            }
     55           
     56            public void insertUpdate(DocumentEvent e) {
     57                action();
     58            }
     59           
     60            public void removeUpdate(DocumentEvent e) {
     61                action();
     62            }
     63           
     64            private void action() {
     65                dataToModel();
     66            }
     67        });
    4068
    4169        model = new DefaultTableModel(new String[]{tr("Key"), tr("Value")},0) {
     
    73101        orig.remove("osm-server.password");
    74102        defaults.remove("osm-server.password");
     103        prepareData();
     104        dataToModel();
     105
     106        JButton add = new JButton(tr("Add"));
     107        p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
     108        p.add(add, GBC.std().insets(0,5,0,0));
     109        add.addActionListener(new ActionListener(){
     110            public void actionPerformed(ActionEvent e) {
     111                addPreference(gui);
     112            }
     113        });
     114
     115        JButton edit = new JButton(tr("Edit"));
     116        p.add(edit, GBC.std().insets(5,5,5,0));
     117        edit.addActionListener(new ActionListener(){
     118            public void actionPerformed(ActionEvent e) {
     119                editPreference(gui, list);
     120            }
     121        });
     122
     123        JButton delete = new JButton(tr("Delete"));
     124        p.add(delete, GBC.std().insets(0,5,0,0));
     125        delete.addActionListener(new ActionListener(){
     126            public void actionPerformed(ActionEvent e) {
     127                removePreference(gui, list);
     128            }
     129        });
     130
     131        list.addMouseListener(new MouseAdapter(){
     132            @Override public void mouseClicked(MouseEvent e) {
     133                if (e.getClickCount() == 2)
     134                    editPreference(gui, list);
     135            }
     136        });
     137    }
     138
     139    private void prepareData() {
    75140        TreeSet<String> ts = new TreeSet<String>(orig.keySet());
    76141        for (String s : defaults.keySet())
     
    79144                ts.add(s);
    80145        }
    81 
     146        data = new TreeMap<String, String>();
    82147        for (String s : ts)
    83148        {
    84149            String val = Main.pref.get(s);
    85150            if(val == null) val = "";
    86             model.addRow(new String[]{s, val});
    87         }
    88 
    89         JButton add = new JButton(tr("Add"));
    90         p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
    91         p.add(add, GBC.std().insets(0,5,0,0));
    92         add.addActionListener(new ActionListener(){
    93             public void actionPerformed(ActionEvent e) {
    94                 JPanel p = new JPanel(new GridBagLayout());
    95                 p.add(new JLabel(tr("Key")), GBC.std().insets(0,0,5,0));
    96                 JTextField key = new JTextField(10);
    97                 JTextField value = new JTextField(10);
    98                 p.add(key, GBC.eop().insets(5,0,0,0).fill(GBC.HORIZONTAL));
    99                 p.add(new JLabel(tr("Value")), GBC.std().insets(0,0,5,0));
    100                 p.add(value, GBC.eol().insets(5,0,0,0).fill(GBC.HORIZONTAL));
    101                 int answer = JOptionPane.showConfirmDialog(gui, p, tr("Enter a new key/value pair"), JOptionPane.OK_CANCEL_OPTION);
    102                 if (answer == JOptionPane.OK_OPTION)
    103                     model.addRow(new String[]{key.getText(), value.getText()});
    104             }
    105         });
    106 
    107         JButton edit = new JButton(tr("Edit"));
    108         p.add(edit, GBC.std().insets(5,5,5,0));
    109         edit.addActionListener(new ActionListener(){
    110             public void actionPerformed(ActionEvent e) {
    111                 edit(gui, list);
    112             }
    113         });
    114 
    115         JButton delete = new JButton(tr("Delete"));
    116         p.add(delete, GBC.std().insets(0,5,0,0));
    117         delete.addActionListener(new ActionListener(){
    118             public void actionPerformed(ActionEvent e) {
    119                 if (list.getSelectedRowCount() == 0) {
    120                     JOptionPane.showMessageDialog(gui, tr("Please select the row to delete."));
    121                     return;
    122                 }
    123                 for(int row: list.getSelectedRows())
    124                     model.setValueAt("", row, 1);
    125             }
    126         });
    127 
    128         list.addMouseListener(new MouseAdapter(){
    129             @Override public void mouseClicked(MouseEvent e) {
    130                 if (e.getClickCount() == 2)
    131                     edit(gui, list);
    132             }
    133         });
     151            data.put(s, val);
     152        }
     153    }
     154   
     155    private void dataToModel() {
     156        while (model.getRowCount() > 0) {
     157            model.removeRow(0);
     158        }
     159        for (String prefKey : data.keySet()) {
     160            String prefValue = data.get(prefKey);
     161            if (prefKey.contains(txtFilter.getText()) ||
     162                    prefValue.contains(txtFilter.getText())) {
     163                model.addRow(new String[] {prefKey, prefValue});
     164            }
     165        }
    134166    }
    135167
    136168    public boolean ok() {
    137         for (int i = 0; i < model.getRowCount(); ++i) {
    138             String value = model.getValueAt(i,1).toString();
     169        for (String key : data.keySet()) {
     170            String value = data.get(key);
    139171            if(value.length() != 0)
    140172            {
    141                 String key = model.getValueAt(i,0).toString();
    142173                String origValue = orig.get(key);
    143174                if (origValue == null || !origValue.equals(value))
     
    152183
    153184
    154     private void edit(final PreferenceDialog gui, final JTable list) {
     185    private void editPreference(final PreferenceDialog gui, final JTable list) {
    155186        if (list.getSelectedRowCount() != 1) {
    156187            JOptionPane.showMessageDialog(gui, tr("Please select the row to edit."));
     
    158189        }
    159190        String v = JOptionPane.showInputDialog(tr("New value for {0}", model.getValueAt(list.getSelectedRow(), 0)), model.getValueAt(list.getSelectedRow(), 1));
    160         if (v != null)
     191        if (v != null) {
     192            data.put((String) model.getValueAt(list.getSelectedRow(), 0), v);
    161193            model.setValueAt(v, list.getSelectedRow(), 1);
     194        }
     195    }
     196
     197    private void removePreference(final PreferenceDialog gui, final JTable list) {
     198        if (list.getSelectedRowCount() == 0) {
     199            JOptionPane.showMessageDialog(gui, tr("Please select the row to delete."));
     200            return;
     201        }
     202        for(int row: list.getSelectedRows()) {
     203            data.put((String) model.getValueAt(row, 0), "");
     204            model.setValueAt("", row, 1);
     205        }
     206    }
     207
     208    private void addPreference(final PreferenceDialog gui) {
     209        JPanel p = new JPanel(new GridBagLayout());
     210        p.add(new JLabel(tr("Key")), GBC.std().insets(0,0,5,0));
     211        JTextField key = new JTextField(10);
     212        JTextField value = new JTextField(10);
     213        p.add(key, GBC.eop().insets(5,0,0,0).fill(GBC.HORIZONTAL));
     214        p.add(new JLabel(tr("Value")), GBC.std().insets(0,0,5,0));
     215        p.add(value, GBC.eol().insets(5,0,0,0).fill(GBC.HORIZONTAL));
     216        int answer = JOptionPane.showConfirmDialog(gui, p, tr("Enter a new key/value pair"), JOptionPane.OK_CANCEL_OPTION);
     217        if (answer == JOptionPane.OK_OPTION) {
     218            data.put(key.getText(), value.getText());
     219            model.addRow(new String[]{key.getText(), value.getText()});
     220        }
    162221    }
    163222}
Note: See TracChangeset for help on using the changeset viewer.