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

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

Add javadoc

File size: 5.8 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
29/**
30 *
31 * Class for displaying WMTS layer selection panel
32 *
33 */
34public class WMTSLayerSelection extends JPanel {
35 private List<Entry<String, List<Layer>>> layers;
36 private JTable list;
37
38 /**
39 *
40 * @param layers list of grouped layers (by tileMatrixSet and name)
41 */
42 public WMTSLayerSelection(List<Entry<String, List<Layer>>> layers) {
43 super(new GridBagLayout());
44 this.layers = layers;
45 list = new JTable(
46 new AbstractTableModel() {
47 @Override
48 public Object getValueAt(int rowIndex, int columnIndex) {
49 switch (columnIndex) {
50 case 0:
51 return layers.get(rowIndex).getValue()
52 .stream()
53 .map(Layer::getUserTitle)
54 .collect(Collectors.joining(", ")); //this should be only one
55 case 1:
56 return layers.get(rowIndex).getValue()
57 .stream()
58 .map(x -> x.getTileMatrixSet().getCrs())
59 .collect(Collectors.joining(", "));
60 case 2:
61 return layers.get(rowIndex).getValue()
62 .stream()
63 .map(x -> x.getTileMatrixSet().getIdentifier())
64 .collect(Collectors.joining(", ")); //this should be only one
65 default:
66 throw new IllegalArgumentException();
67 }
68 }
69
70 @Override
71 public int getRowCount() {
72 return layers.size();
73 }
74
75 @Override
76 public int getColumnCount() {
77 return 3;
78 }
79
80 @Override
81 public String getColumnName(int column) {
82 switch (column) {
83 case 0: return tr("Layer name");
84 case 1: return tr("Projection");
85 case 2: return tr("Matrix set identifier");
86 default:
87 throw new IllegalArgumentException();
88 }
89 }
90 });
91 list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
92 list.setAutoCreateRowSorter(true);
93 list.setRowSelectionAllowed(true);
94 list.setColumnSelectionAllowed(false);
95 updateColumnPreferredWidth(list.getColumnModel().getColumn(0));
96 updateColumnPreferredWidth(list.getColumnModel().getColumn(1));
97 updateColumnPreferredWidth(list.getColumnModel().getColumn(2));
98
99 add(new JLabel(tr("Filter layers:")), GBC.eol().fill(GBC.HORIZONTAL));
100 final JosmTextArea filter = new JosmTextArea();
101 filter.getDocument().addDocumentListener(new DocumentListener() {
102 @Override
103 public void insertUpdate(DocumentEvent e) {
104 update();
105 }
106
107 @Override
108 public void removeUpdate(DocumentEvent e) {
109 update();
110 }
111
112 @Override
113 public void changedUpdate(DocumentEvent e) {
114 update();
115 }
116
117 @SuppressWarnings({ "unchecked", "rawtypes" })
118 private void update() {
119 ((TableRowSorter) list.getRowSorter()).setRowFilter(RowFilter.regexFilter("(?i)" + filter.getText()));
120 }
121
122 });
123 add(filter, GBC.eop().fill(GBC.HORIZONTAL));
124 add(new JScrollPane(this.list), GBC.eol().fill());
125 }
126
127 /**
128 * @return selected layer
129 */
130 public Layer getSelectedLayer() {
131 int index = list.getSelectedRow();
132 if (index < 0) {
133 return null; //nothing selected
134 }
135 return layers.get(list.convertRowIndexToModel(index)).getValue().get(0);
136 }
137
138 private void updateColumnPreferredWidth(TableColumn column) {
139 TableCellRenderer renderer = column.getHeaderRenderer();
140 if (renderer == null) {
141 renderer = list.getTableHeader().getDefaultRenderer();
142 }
143 Component comp = renderer.getTableCellRendererComponent(list, column.getHeaderValue(), false, false, 0, 0);
144 int ret = comp.getPreferredSize().width;
145
146 for (int row = 0; row < list.getRowCount(); row++) {
147 renderer = list.getCellRenderer(row, column.getModelIndex());
148 comp = list.prepareRenderer(renderer, row, column.getModelIndex());
149 ret = Math.max (comp.getPreferredSize().width, ret);
150 }
151 column.setPreferredWidth(ret + 10);
152 }
153}
Note: See TracBrowser for help on using the repository browser.