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

Last change on this file since 16960 was 16960, checked in by simon04, 4 years ago

see #8334 - Add advanced option to scale the table font

Advanced preference keys gui.scale.table.*

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