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

Last change on this file since 6021 was 6021, checked in by akks, 11 years ago

fix #8483: option to reset preferences (Advanced preferences - More - Reset preferences)
+ big refactoring of advanced preferences editor (extracted PreferencesTable class with all table-related logic)

  • Property svn:eol-style set to native
File size: 3.1 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.WindowGeometry;
24
25public class ListEditor extends ExtendedDialog {
26
27 List<String> data;
28 PrefEntry entry;
29
30 public ListEditor(final JComponent gui, PrefEntry entry, ListSetting setting) {
31 super(gui, tr("Change list setting"), new String[] {tr("OK"), tr("Cancel")});
32 this.entry = entry;
33 List<String> orig = setting.getValue();
34 if (orig != null) {
35 data = new ArrayList<String>(orig);
36 } else {
37 data = new ArrayList<String>();
38 }
39 setButtonIcons(new String[] {"ok.png", "cancel.png"});
40 setRememberWindowGeometry(getClass().getName() + ".geometry", WindowGeometry.centerInWindow(gui, new Dimension(300, 350)));
41 setContent(build(), false);
42 }
43
44 public List<String> getData() {
45 return data;
46 }
47
48 protected JPanel build() {
49 JPanel p = new JPanel(new GridBagLayout());
50 p.add(new JLabel(tr("Key: {0}", entry.getKey())), GBC.eol().insets(0,0,5,0));
51 ListSettingTableModel listModel = new ListSettingTableModel();
52 JTable table = new JTable(listModel);
53 table.putClientProperty("terminateEditOnFocusLost", true);
54 table.setTableHeader(null);
55
56 DefaultCellEditor editor = new DefaultCellEditor(new JosmTextField());
57 editor.setClickCountToStart(1);
58 table.setDefaultEditor(table.getColumnClass(0), editor);
59
60 JScrollPane pane = new JScrollPane(table);
61 p.add(pane, GBC.eol().insets(5,10,0,0).fill());
62 return p;
63 }
64
65 class ListSettingTableModel extends AbstractTableModel {
66
67 public List<String> getData() {
68 return data;
69 }
70
71 @Override
72 public int getRowCount() {
73 return data.size() + 1;
74 }
75
76 @Override
77 public int getColumnCount() {
78 return 1;
79 }
80
81 @Override
82 public Object getValueAt(int row, int column) {
83 return data.size() == row ? "" : data.get(row);
84 }
85
86 @Override
87 public void setValueAt(Object o, int row, int column) {
88 String s = (String)o;
89 if(row == data.size()) {
90 data.add(s);
91 fireTableRowsInserted(row+1, row+1);
92 } else {
93 data.set(row, s);
94 }
95 fireTableCellUpdated(row, column);
96 }
97
98 @Override
99 public boolean isCellEditable(int row, int column) {
100 return true;
101 }
102 }
103
104}
Note: See TracBrowser for help on using the repository browser.