// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.utilsplugin2.customurl; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting; import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; import org.openstreetmap.josm.gui.widgets.HistoryComboBox; import org.openstreetmap.josm.gui.widgets.HtmlPanel; import org.openstreetmap.josm.tools.GBC; public class UtilsPluginPreferences extends DefaultTabPreferenceSetting { HistoryComboBox combo1 = new HistoryComboBox(); JTable table; JButton resetButton; JButton loadButton; JButton saveButton; public UtilsPluginPreferences() { super("utils", tr("Utilsplugin2 settings"), tr("Here you can change some preferences of Utilsplugin2 functions")); } @Override public void addGui(PreferenceTabbedPane gui) { JPanel all = new JPanel(new GridBagLayout()); URLList.getSelectedURL(); table = new JTable(new DefaultTableModel(null, new String[]{"Title", "URL"})); List<String> items = URLList.getURLList(); resetButton = new JButton(tr("Reset")); resetButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { fillRows(URLList.resetURLList()); } }); saveButton = new JButton(tr("Save to file")); saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { URLList.saveURLList(readItemsFromTable()); } }); loadButton = new JButton(tr("Load from file")); loadButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { fillRows(URLList.loadURLList()); } }); fillRows(items); HtmlPanel help = new HtmlPanel(tr("Please edit custom URLs and select one row to use with the tool<br/>" + " <b>{key}</b> is replaced with the tag value<br/>" + " <b>{#id}</b> is replaced with the element ID<br/>" + " <b>{#type}</b> is replaced with \"node\",\"way\" or \"relation\" <br/>" + " <b>{#lat} , {#lon}</b> is replaced with map center latitude/longitude <br/>" + " Your can manually load settings from file <b>customurl.txt</b> in JOSM folder")); all.add(new JLabel(tr("Custom URL configuration")), GBC.std().insets(5, 10, 0, 0)); all.add(resetButton, GBC.std().insets(25, 10, 0, 0)); all.add(loadButton, GBC.std().insets(25, 10, 0, 0)); all.add(saveButton, GBC.eol().insets(25, 10, 0, 0)); all.add(help, GBC.eop().insets(5, 10, 0, 0)); table.getColumnModel().getColumn(0).setPreferredWidth(150); table.getColumnModel().getColumn(0).setMaxWidth(300); table.getColumnModel().getColumn(1).setPreferredWidth(300); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { int row = e.getFirstRow(); int column = e.getColumn(); DefaultTableModel model = (DefaultTableModel) e.getSource(); if (row < 0 || column < 0) return; String data = (String) model.getValueAt(row, column); if (data != null && data.length() > 0 && row == model.getRowCount()-1) model.addRow(new String[]{"", ""}); } }); all.add(table, GBC.eop().fill()); createPreferenceTabWithScrollPane(gui, all); } private void fillRows(List<String> items) { if (items == null) return; int p = 0; String name, url; DefaultTableModel model = (DefaultTableModel) table.getModel(); model.setRowCount(0); int n = items.size(); while (true) { if (p >= n) break; name = items.get(p); p++; if (p >= n) break; url = items.get(p); p++; model.addRow(new String[]{name, url}); } model.addRow(new String[]{"", ""}); } @Override public boolean ok() { combo1.getText(); List<String> lst = readItemsFromTable(); URLList.updateURLList(lst); return false; } private List<String> readItemsFromTable() { TableModel model = (table.getModel()); String v; ArrayList<String> lst = new ArrayList<>(); int n = model.getRowCount(); for (int i = 0; i < n; i++) { v = (String) model.getValueAt(i, 0); if (v.length() == 0) continue; lst.add(v); v = (String) model.getValueAt(i, 1); lst.add(v); } int row = table.getSelectedRow(); if (row != -1) { v = (String) model.getValueAt(row, 1); URLList.select(v); } return lst; } }