source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java@ 6452

Last change on this file since 6452 was 6452, checked in by Don-vip, 10 years ago

fix #9360 - listed Values in Enhanced Preferences cannot be removed completely

  • Property svn:eol-style set to native
File size: 3.6 KB
Line 
1// License: GPL. See LICENSE file for details.
2package org.openstreetmap.josm.gui.preferences.advanced;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Dimension;
7import java.awt.GridBagLayout;
8import java.util.ArrayList;
9import java.util.List;
10
11import javax.swing.DefaultCellEditor;
12import javax.swing.JComponent;
13import javax.swing.JLabel;
14import javax.swing.JPanel;
15import javax.swing.JScrollPane;
16import javax.swing.JTable;
17import javax.swing.table.AbstractTableModel;
18
19import org.openstreetmap.josm.data.Preferences.ListSetting;
20import org.openstreetmap.josm.gui.ExtendedDialog;
21import org.openstreetmap.josm.gui.widgets.JosmTextField;
22import org.openstreetmap.josm.tools.GBC;
23import org.openstreetmap.josm.tools.Predicate;
24import org.openstreetmap.josm.tools.Utils;
25import org.openstreetmap.josm.tools.WindowGeometry;
26
27public class ListEditor extends ExtendedDialog {
28
29 List<String> data;
30 PrefEntry entry;
31
32 /**
33 * Constructs a new {@code ListEditor}.
34 */
35 public ListEditor(final JComponent gui, PrefEntry entry, ListSetting setting) {
36 super(gui, tr("Change list setting"), new String[] {tr("OK"), tr("Cancel")});
37 this.entry = entry;
38 List<String> orig = setting.getValue();
39 if (orig != null) {
40 data = new ArrayList<String>(orig);
41 } else {
42 data = new ArrayList<String>();
43 }
44 setButtonIcons(new String[] {"ok.png", "cancel.png"});
45 setRememberWindowGeometry(getClass().getName() + ".geometry", WindowGeometry.centerInWindow(gui, new Dimension(300, 350)));
46 setContent(build(), false);
47 }
48
49 /**
50 * Returns the list of values.
51 * @return The list of values.
52 */
53 public List<String> getData() {
54 return new ArrayList<String>(Utils.filter(data, new Predicate<String>() {
55 @Override
56 public boolean evaluate(String object) {
57 return object != null && !object.isEmpty();
58 }
59 }));
60 }
61
62 protected JPanel build() {
63 JPanel p = new JPanel(new GridBagLayout());
64 p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.eol().insets(0,0,5,0));
65 ListSettingTableModel listModel = new ListSettingTableModel();
66 JTable table = new JTable(listModel);
67 table.putClientProperty("terminateEditOnFocusLost", true);
68 table.setTableHeader(null);
69
70 DefaultCellEditor editor = new DefaultCellEditor(new JosmTextField());
71 editor.setClickCountToStart(1);
72 table.setDefaultEditor(table.getColumnClass(0), editor);
73
74 JScrollPane pane = new JScrollPane(table);
75 p.add(pane, GBC.eol().insets(5,10,0,0).fill());
76 return p;
77 }
78
79 class ListSettingTableModel extends AbstractTableModel {
80
81 public List<String> getData() {
82 return data;
83 }
84
85 @Override
86 public int getRowCount() {
87 return data.size() + 1;
88 }
89
90 @Override
91 public int getColumnCount() {
92 return 1;
93 }
94
95 @Override
96 public Object getValueAt(int row, int column) {
97 return data.size() == row ? "" : data.get(row);
98 }
99
100 @Override
101 public void setValueAt(Object o, int row, int column) {
102 String s = (String)o;
103 if(row == data.size()) {
104 data.add(s);
105 fireTableRowsInserted(row+1, row+1);
106 } else {
107 data.set(row, s);
108 }
109 fireTableCellUpdated(row, column);
110 }
111
112 @Override
113 public boolean isCellEditable(int row, int column) {
114 return true;
115 }
116 }
117}
Note: See TracBrowser for help on using the repository browser.