source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/advanced/ListListEditor.java@ 12953

Last change on this file since 12953 was 12881, checked in by bastiK, 7 years ago

see #15229 - move remaining classes to spi.preferences package, to make it self-contained

  • extract event listener classes from Preferences (duplicated, for smooth transition)
  • move *Setting classes
  • Property svn:eol-style set to native
File size: 3.3 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.util.ArrayList;
7import java.util.Collections;
8import java.util.List;
9
10import javax.swing.JComponent;
11import javax.swing.JPanel;
12import javax.swing.table.AbstractTableModel;
13
14import org.openstreetmap.josm.spi.preferences.ListListSetting;
15
16/**
17 * Editor for List of Lists preference entries.
18 * @since 4634
19 */
20public class ListListEditor extends AbstractTableListEditor<List<String>> {
21
22 private final transient List<List<String>> data;
23
24 /**
25 * Constructs a new {@code ListListEditor}.
26 * @param gui The parent component
27 * @param entry preference entry
28 * @param setting list of lists setting
29 */
30 public ListListEditor(final JComponent gui, PrefEntry entry, ListListSetting setting) {
31 super(gui, tr("Change list of lists setting"), entry);
32 List<List<String>> orig = setting.getValue();
33 data = new ArrayList<>();
34 if (orig != null) {
35 for (List<String> l : orig) {
36 data.add(new ArrayList<>(l));
37 }
38 }
39 }
40
41 @Override
42 public List<List<String>> getData() {
43 return data;
44 }
45
46 @Override
47 protected final JPanel build() {
48 table.setTableHeader(null);
49 return super.build();
50 }
51
52 private class EntryListModel extends AbstractEntryListModel {
53
54 @Override
55 public String getElementAt(int index) {
56 return (index+1) + ": " + data.get(index);
57 }
58
59 @Override
60 public int getSize() {
61 return data.size();
62 }
63
64 @Override
65 public void add() {
66 data.add(new ArrayList<String>());
67 fireIntervalAdded(this, getSize() - 1, getSize() - 1);
68 }
69
70 @Override
71 public void remove(int idx) {
72 data.remove(idx);
73 fireIntervalRemoved(this, idx, idx);
74 }
75 }
76
77 private class ListTableModel extends AbstractTableModel {
78
79 private List<String> data() {
80 return entryIdx == null ? Collections.<String>emptyList() : data.get(entryIdx);
81 }
82
83 private int size() {
84 return data().size();
85 }
86
87 @Override
88 public int getRowCount() {
89 return entryIdx == null ? 0 : size() + 1;
90 }
91
92 @Override
93 public int getColumnCount() {
94 return 1;
95 }
96
97 @Override
98 public Object getValueAt(int row, int column) {
99 return size() == row ? "" : data().get(row);
100 }
101
102 @Override
103 public void setValueAt(Object o, int row, int column) {
104 String s = (String) o;
105 if (row == size()) {
106 data().add(s);
107 fireTableRowsInserted(row+1, row+1);
108 } else {
109 data().set(row, s);
110 fireTableCellUpdated(row, column);
111 }
112 }
113
114 @Override
115 public boolean isCellEditable(int row, int column) {
116 return true;
117 }
118 }
119
120 @Override
121 protected AbstractEntryListModel newEntryListModel() {
122 return new EntryListModel();
123 }
124
125 @Override
126 protected AbstractTableModel newTableModel() {
127 return new ListTableModel();
128 }
129}
Note: See TracBrowser for help on using the repository browser.