Add checkbox for users to toggle.

Also fix an issue with the clickable licenses (opened two tabs)

Signed-off-by: Taylor Smock <taylor.smock@kaart.com>
pull/1/head
Taylor Smock 2020-07-13 17:07:06 -06:00
rodzic 5d35fb36f3
commit fd73d6a88b
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 625F6A74A3E4311A
2 zmienionych plików z 44 dodań i 31 usunięć

Wyświetl plik

@ -2,6 +2,7 @@
package org.openstreetmap.josm.plugins.mapwithai.gui.preferences.mapwithai;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -10,7 +11,9 @@ import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.swing.table.DefaultTableModel;
import org.openstreetmap.josm.plugins.mapwithai.data.mapwithai.MapWithAICategory;
import org.openstreetmap.josm.plugins.mapwithai.data.mapwithai.MapWithAIInfo;
import org.openstreetmap.josm.plugins.mapwithai.data.mapwithai.MapWithAILayerInfo;
@ -28,8 +31,9 @@ class MapWithAIDefaultLayerTableModel extends DefaultTableModel {
*/
public MapWithAIDefaultLayerTableModel() {
setColumnIdentifiers(new String[] { "", tr("MapWithAI Data Source Name (Default)"), tr("Type"),
tr("MapWithAI URL (Default)"), tr("Provider"), tr("License") });
columnTypes = Stream.of(MapWithAICategory.class, MapWithAIInfo.class, List.class, String.class, String.class)
tr("MapWithAI URL (Default)"), tr("Provider"), tr("License"), tr("Enabled") });
columnTypes = Stream
.of(MapWithAICategory.class, MapWithAIInfo.class, List.class, String.class, String.class, Boolean.class)
.collect(Collectors.toCollection(ArrayList::new));
columnDataRetrieval = new ArrayList<>();
columnDataRetrieval.add(info -> Optional.ofNullable(info.getCategory()).orElse(MapWithAICategory.OTHER));
@ -44,6 +48,7 @@ class MapWithAIDefaultLayerTableModel extends DefaultTableModel {
columnDataRetrieval.add(MapWithAIInfo::getUrl);
columnDataRetrieval.add(i -> i.getAttributionText(0, null, null));
columnDataRetrieval.add(info -> Optional.ofNullable(info.getTermsOfUseURL()).orElse(""));
columnDataRetrieval.add(i -> MapWithAILayerInfo.getInstance().getLayers().contains(i));
}
/**

Wyświetl plik

@ -3,12 +3,12 @@ package org.openstreetmap.josm.plugins.mapwithai.gui.preferences.mapwithai;
import static org.openstreetmap.josm.tools.I18n.marktr;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
@ -25,6 +25,7 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.JButton;
@ -40,6 +41,7 @@ import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumnModel;
import org.openstreetmap.gui.jmapviewer.Coordinate;
import org.openstreetmap.gui.jmapviewer.MapPolygonImpl;
import org.openstreetmap.gui.jmapviewer.MapRectangleImpl;
@ -220,7 +222,7 @@ public class MapWithAIProvidersPanel extends JPanel {
private static class MapWithAILicenseTableCellRenderer extends MapWithAITableCellRenderer<String> {
MapWithAILicenseTableCellRenderer() {
super(s -> !s.isEmpty() ? "<html><a href=\"" + s + "\"> License </a>" : "",
super(s -> !s.isEmpty() ? "<html><a href=\"" + s + "\">License</a>" : "",
u -> MapWithAILayerInfo.getInstance().getAllDefaultLayers().stream()
.filter(i -> u.equals(i.getUrl())).findFirst().orElse(null),
u -> u, null, true);
@ -324,21 +326,6 @@ public class MapWithAIProvidersPanel extends JPanel {
defaultTable = new JTable(defaultModel);
defaultTable.setAutoCreateRowSorter(true);
defaultTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int row = defaultTable.rowAtPoint(new Point(e.getX(), e.getY()));
int col = defaultTable.columnAtPoint(new Point(e.getX(), e.getY()));
if (col == defaultTable.getColumnCount() - 1) {
MapWithAIInfo info = MapWithAIDefaultLayerTableModel.getRow(row);
if (info.getTermsOfUseURL() != null) {
OpenBrowser.displayUrl(info.getTermsOfUseURL());
}
}
}
});
defaultFilter = new FilterField().filter(defaultTable, defaultModel);
defaultModel.addTableModelListener(e -> activeTable.repaint());
@ -455,7 +442,10 @@ public class MapWithAIProvidersPanel extends JPanel {
int tenXWidth = defaultTable.getFontMetrics(defaultTable.getFont()).stringWidth("XXXXXXXXXX");
TableColumnModel mod = defaultTable.getColumnModel();
int urlWidth = (showActive ? 3 : 0) * tenXWidth;
mod.getColumn(5).setPreferredWidth((showActive ? 2 : 0) * tenXWidth);
mod.getColumns();
mod.getColumn(6).setCellRenderer(defaultTable.getDefaultRenderer(Boolean.class));
mod.getColumn(6).setMaxWidth(20);
mod.getColumn(5).setMaxWidth((!showActive ? 1 : 0) * tenXWidth);
mod.getColumn(5).setCellRenderer(new MapWithAILicenseTableCellRenderer());
mod.getColumn(4).setPreferredWidth((showActive ? 2 : 0) * tenXWidth);
mod.getColumn(4).setCellRenderer(new MapWithAIProviderTableCellRenderer());
@ -473,31 +463,49 @@ public class MapWithAIProvidersPanel extends JPanel {
mod.getColumn(0).setMaxWidth(ImageProvider.ImageSizes.MENU.getAdjustedWidth() + 5);
if (showActive) {
defaultTable.removeColumn(mod.getColumn(6));
defaultTable.removeColumn(mod.getColumn(4));
defaultTable.removeColumn(mod.getColumn(2));
areaListeners.addListener(defaultUrlTableCellRenderer);
} else {
defaultTable.removeColumn(mod.getColumn(3));
areaListeners.addListener(defaultNameTableCellRenderer);
}
defaultTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int row = defaultTable.rowAtPoint(new Point(e.getX(), e.getY()));
int col = defaultTable.columnAtPoint(new Point(e.getX(), e.getY()));
if (col == defaultTable.getColumnCount() - 1) {
MapWithAIInfo info = MapWithAIDefaultLayerTableModel.getRow(row);
if (info.getTermsOfUseURL() != null) {
OpenBrowser.displayUrl(info.getTermsOfUseURL());
}
}
clickListener(e);
}
});
}
/**
* This is a function to be called when a cell is clicked
*
* @param e The MouseEvent (used to get the appropriate JTable)
*/
private static void clickListener(MouseEvent e) {
if (e.getSource() instanceof JTable) {
JTable table = (JTable) e.getSource();
int realCol = table.convertColumnIndexToModel(table.getSelectedColumn());
String tableName = table.getModel().getColumnName(realCol);
if (tr("License").equals(tableName)) {
MapWithAIInfo info = MapWithAIDefaultLayerTableModel.getRow(table.getSelectedRow());
if (info.getTermsOfUseURL() != null) {
OpenBrowser.displayUrl(info.getTermsOfUseURL());
}
} else if (tr("Enabled").equals(tableName)) {
MapWithAIInfo info = MapWithAIDefaultLayerTableModel.getRow(table.getSelectedRow());
MapWithAILayerInfo instance = MapWithAILayerInfo.getInstance();
if (instance.getLayers().contains(info)) {
instance.remove(info);
} else {
instance.add(info);
}
}
}
}
/**
* @param The current area to highlight data from
*/