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

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

sonar - Immutable Field

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