source: josm/trunk/src/org/openstreetmap/josm/gui/layer/imagery/WMTSLayerSelection.java@ 13748

Last change on this file since 13748 was 13748, checked in by wiktorn, 6 years ago

Forgot file for [13746]

File size: 5.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.layer.imagery;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.awt.GridBagLayout;
8import java.util.List;
9import java.util.Map.Entry;
10import java.util.stream.Collectors;
11
12import javax.swing.JLabel;
13import javax.swing.JPanel;
14import javax.swing.JScrollPane;
15import javax.swing.JTable;
16import javax.swing.ListSelectionModel;
17import javax.swing.RowFilter;
18import javax.swing.event.DocumentEvent;
19import javax.swing.event.DocumentListener;
20import javax.swing.table.AbstractTableModel;
21import javax.swing.table.TableCellRenderer;
22import javax.swing.table.TableColumn;
23import javax.swing.table.TableRowSorter;
24
25import org.openstreetmap.josm.data.imagery.WMTSTileSource.Layer;
26import org.openstreetmap.josm.gui.widgets.JosmTextArea;
27import org.openstreetmap.josm.tools.GBC;
28
29public class WMTSLayerSelection extends JPanel {
30 private List<Entry<String, List<Layer>>> layers;
31 private JTable list;
32
33 public WMTSLayerSelection(List<Entry<String, List<Layer>>> layers) {
34 super(new GridBagLayout());
35 this.layers = layers;
36 list = new JTable(
37 new AbstractTableModel() {
38 @Override
39 public Object getValueAt(int rowIndex, int columnIndex) {
40 switch (columnIndex) {
41 case 0:
42 return layers.get(rowIndex).getValue()
43 .stream()
44 .map(Layer::getUserTitle)
45 .collect(Collectors.joining(", ")); //this should be only one
46 case 1:
47 return layers.get(rowIndex).getValue()
48 .stream()
49 .map(x -> x.getTileMatrixSet().getCrs())
50 .collect(Collectors.joining(", "));
51 case 2:
52 return layers.get(rowIndex).getValue()
53 .stream()
54 .map(x -> x.getTileMatrixSet().getIdentifier())
55 .collect(Collectors.joining(", ")); //this should be only one
56 default:
57 throw new IllegalArgumentException();
58 }
59 }
60
61 @Override
62 public int getRowCount() {
63 return layers.size();
64 }
65
66 @Override
67 public int getColumnCount() {
68 return 3;
69 }
70
71 @Override
72 public String getColumnName(int column) {
73 switch (column) {
74 case 0: return tr("Layer name");
75 case 1: return tr("Projection");
76 case 2: return tr("Matrix set identifier");
77 default:
78 throw new IllegalArgumentException();
79 }
80 }
81 });
82 list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
83// list.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
84 list.setAutoCreateRowSorter(true);
85 list.setRowSelectionAllowed(true);
86 list.setColumnSelectionAllowed(false);
87 updateColumnPreferredWidth(list.getColumnModel().getColumn(0));
88 updateColumnPreferredWidth(list.getColumnModel().getColumn(1));
89 updateColumnPreferredWidth(list.getColumnModel().getColumn(2));
90
91 add(new JLabel(tr("Filter layers:")), GBC.eol().fill(GBC.HORIZONTAL));
92 final JosmTextArea filter = new JosmTextArea();
93 filter.getDocument().addDocumentListener(new DocumentListener() {
94 @Override
95 public void insertUpdate(DocumentEvent e) {
96 update();
97 }
98
99 @Override
100 public void removeUpdate(DocumentEvent e) {
101 update();
102 }
103
104 @Override
105 public void changedUpdate(DocumentEvent e) {
106 update();
107 }
108
109 @SuppressWarnings({ "unchecked", "rawtypes" })
110 private void update() {
111 ((TableRowSorter) list.getRowSorter()).setRowFilter(RowFilter.regexFilter("(?i)" + filter.getText()));
112 }
113
114 });
115 add(filter, GBC.eop().fill(GBC.HORIZONTAL));
116 add(new JScrollPane(this.list), GBC.eol().fill());
117 }
118
119 /**
120 * @return selected layer
121 */
122 public Layer getSelectedLayer() {
123 int index = list.getSelectedRow();
124 if (index < 0) {
125 return null; //nothing selected
126 }
127 return layers.get(list.convertRowIndexToModel(index)).getValue().get(0);
128 }
129
130 private void updateColumnPreferredWidth(TableColumn column) {
131 TableCellRenderer renderer = column.getHeaderRenderer();
132 if (renderer == null) {
133 renderer = list.getTableHeader().getDefaultRenderer();
134 }
135 Component comp = renderer.getTableCellRendererComponent(list, column.getHeaderValue(), false, false, 0, 0);
136 int ret = comp.getPreferredSize().width;
137
138 for (int row = 0; row < list.getRowCount(); row++) {
139 renderer = list.getCellRenderer(row, column.getModelIndex());
140 comp = list.prepareRenderer(renderer, row, column.getModelIndex());
141 ret = Math.max (comp.getPreferredSize().width, ret);
142 }
143 column.setPreferredWidth(ret + 10);
144 }
145}
Note: See TracBrowser for help on using the repository browser.