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

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

global use of !Utils.isEmpty/isBlank

  • Property svn:eol-style set to native
File size: 3.4 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.GridBagLayout;
7import java.util.ArrayList;
8import java.util.List;
9
10import javax.swing.DefaultCellEditor;
11import javax.swing.JComponent;
12import javax.swing.JLabel;
13import javax.swing.JPanel;
14import javax.swing.JScrollPane;
15import javax.swing.JTable;
16import javax.swing.table.AbstractTableModel;
17
18import org.openstreetmap.josm.gui.util.TableHelper;
19import org.openstreetmap.josm.gui.widgets.JosmTextField;
20import org.openstreetmap.josm.spi.preferences.ListSetting;
21import org.openstreetmap.josm.tools.GBC;
22import org.openstreetmap.josm.tools.SubclassFilteredCollection;
23import org.openstreetmap.josm.tools.Utils;
24
25/**
26 * Editor for List preference entries.
27 * @since 4634
28 */
29public class ListEditor extends AbstractListEditor<String> {
30
31 private final ListSettingTableModel model;
32
33 /**
34 * Constructs a new {@code ListEditor}.
35 * @param gui The parent component
36 * @param entry preference entry
37 * @param setting list setting
38 */
39 public ListEditor(final JComponent gui, PrefEntry entry, ListSetting setting) {
40 super(gui, tr("Change list setting"), entry);
41 model = new ListSettingTableModel(setting.getValue());
42 setContent(build(), false);
43 }
44
45 @Override
46 public List<String> getData() {
47 return new ArrayList<>(SubclassFilteredCollection.filter(model.getData(), object -> !Utils.isEmpty(object)));
48 }
49
50 @Override
51 protected final JPanel build() {
52 JPanel p = new JPanel(new GridBagLayout());
53 p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.eol().insets(0, 0, 5, 0));
54 JTable table = new JTable(model);
55 TableHelper.setFont(table, getClass());
56 table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
57 table.setTableHeader(null);
58
59 DefaultCellEditor editor = new DefaultCellEditor(new JosmTextField());
60 editor.setClickCountToStart(1);
61 table.setDefaultEditor(table.getColumnClass(0), editor);
62
63 JScrollPane pane = new JScrollPane(table);
64 p.add(pane, GBC.eol().insets(5, 10, 0, 0).fill());
65 return p;
66 }
67
68 static class ListSettingTableModel extends AbstractTableModel {
69
70 private final List<String> data;
71
72 ListSettingTableModel(List<String> orig) {
73 if (orig != null) {
74 data = new ArrayList<>(orig);
75 } else {
76 data = new ArrayList<>();
77 }
78 }
79
80 public List<String> getData() {
81 return data;
82 }
83
84 @Override
85 public int getRowCount() {
86 return data.size() + 1;
87 }
88
89 @Override
90 public int getColumnCount() {
91 return 1;
92 }
93
94 @Override
95 public Object getValueAt(int row, int column) {
96 return data.size() == row ? "" : data.get(row);
97 }
98
99 @Override
100 public void setValueAt(Object o, int row, int column) {
101 String s = (String) o;
102 if (row == data.size()) {
103 data.add(s);
104 fireTableRowsInserted(row+1, row+1);
105 } else {
106 data.set(row, s);
107 }
108 fireTableCellUpdated(row, column);
109 }
110
111 @Override
112 public boolean isCellEditable(int row, int column) {
113 return true;
114 }
115 }
116}
Note: See TracBrowser for help on using the repository browser.