kopia lustrzana https://github.com/JOSM/MapWithAI
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
rodzic
5d35fb36f3
commit
fd73d6a88b
|
@ -2,6 +2,7 @@
|
||||||
package org.openstreetmap.josm.plugins.mapwithai.gui.preferences.mapwithai;
|
package org.openstreetmap.josm.plugins.mapwithai.gui.preferences.mapwithai;
|
||||||
|
|
||||||
import static org.openstreetmap.josm.tools.I18n.tr;
|
import static org.openstreetmap.josm.tools.I18n.tr;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -10,7 +11,9 @@ import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import javax.swing.table.DefaultTableModel;
|
import javax.swing.table.DefaultTableModel;
|
||||||
|
|
||||||
import org.openstreetmap.josm.plugins.mapwithai.data.mapwithai.MapWithAICategory;
|
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.MapWithAIInfo;
|
||||||
import org.openstreetmap.josm.plugins.mapwithai.data.mapwithai.MapWithAILayerInfo;
|
import org.openstreetmap.josm.plugins.mapwithai.data.mapwithai.MapWithAILayerInfo;
|
||||||
|
@ -28,8 +31,9 @@ class MapWithAIDefaultLayerTableModel extends DefaultTableModel {
|
||||||
*/
|
*/
|
||||||
public MapWithAIDefaultLayerTableModel() {
|
public MapWithAIDefaultLayerTableModel() {
|
||||||
setColumnIdentifiers(new String[] { "", tr("MapWithAI Data Source Name (Default)"), tr("Type"),
|
setColumnIdentifiers(new String[] { "", tr("MapWithAI Data Source Name (Default)"), tr("Type"),
|
||||||
tr("MapWithAI URL (Default)"), tr("Provider"), tr("License") });
|
tr("MapWithAI URL (Default)"), tr("Provider"), tr("License"), tr("Enabled") });
|
||||||
columnTypes = Stream.of(MapWithAICategory.class, MapWithAIInfo.class, List.class, String.class, String.class)
|
columnTypes = Stream
|
||||||
|
.of(MapWithAICategory.class, MapWithAIInfo.class, List.class, String.class, String.class, Boolean.class)
|
||||||
.collect(Collectors.toCollection(ArrayList::new));
|
.collect(Collectors.toCollection(ArrayList::new));
|
||||||
columnDataRetrieval = new ArrayList<>();
|
columnDataRetrieval = new ArrayList<>();
|
||||||
columnDataRetrieval.add(info -> Optional.ofNullable(info.getCategory()).orElse(MapWithAICategory.OTHER));
|
columnDataRetrieval.add(info -> Optional.ofNullable(info.getCategory()).orElse(MapWithAICategory.OTHER));
|
||||||
|
@ -44,6 +48,7 @@ class MapWithAIDefaultLayerTableModel extends DefaultTableModel {
|
||||||
columnDataRetrieval.add(MapWithAIInfo::getUrl);
|
columnDataRetrieval.add(MapWithAIInfo::getUrl);
|
||||||
columnDataRetrieval.add(i -> i.getAttributionText(0, null, null));
|
columnDataRetrieval.add(i -> i.getAttributionText(0, null, null));
|
||||||
columnDataRetrieval.add(info -> Optional.ofNullable(info.getTermsOfUseURL()).orElse(""));
|
columnDataRetrieval.add(info -> Optional.ofNullable(info.getTermsOfUseURL()).orElse(""));
|
||||||
|
columnDataRetrieval.add(i -> MapWithAILayerInfo.getInstance().getLayers().contains(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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.marktr;
|
||||||
import static org.openstreetmap.josm.tools.I18n.tr;
|
import static org.openstreetmap.josm.tools.I18n.tr;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.GridBagConstraints;
|
import java.awt.GridBagConstraints;
|
||||||
import java.awt.GridBagLayout;
|
import java.awt.GridBagLayout;
|
||||||
import java.awt.Point;
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
@ -25,6 +25,7 @@ import java.util.function.Consumer;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
import javax.swing.Box;
|
import javax.swing.Box;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
|
@ -40,6 +41,7 @@ import javax.swing.event.ListSelectionEvent;
|
||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
import javax.swing.table.DefaultTableCellRenderer;
|
import javax.swing.table.DefaultTableCellRenderer;
|
||||||
import javax.swing.table.TableColumnModel;
|
import javax.swing.table.TableColumnModel;
|
||||||
|
|
||||||
import org.openstreetmap.gui.jmapviewer.Coordinate;
|
import org.openstreetmap.gui.jmapviewer.Coordinate;
|
||||||
import org.openstreetmap.gui.jmapviewer.MapPolygonImpl;
|
import org.openstreetmap.gui.jmapviewer.MapPolygonImpl;
|
||||||
import org.openstreetmap.gui.jmapviewer.MapRectangleImpl;
|
import org.openstreetmap.gui.jmapviewer.MapRectangleImpl;
|
||||||
|
@ -220,7 +222,7 @@ public class MapWithAIProvidersPanel extends JPanel {
|
||||||
private static class MapWithAILicenseTableCellRenderer extends MapWithAITableCellRenderer<String> {
|
private static class MapWithAILicenseTableCellRenderer extends MapWithAITableCellRenderer<String> {
|
||||||
|
|
||||||
MapWithAILicenseTableCellRenderer() {
|
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()
|
u -> MapWithAILayerInfo.getInstance().getAllDefaultLayers().stream()
|
||||||
.filter(i -> u.equals(i.getUrl())).findFirst().orElse(null),
|
.filter(i -> u.equals(i.getUrl())).findFirst().orElse(null),
|
||||||
u -> u, null, true);
|
u -> u, null, true);
|
||||||
|
@ -324,21 +326,6 @@ public class MapWithAIProvidersPanel extends JPanel {
|
||||||
|
|
||||||
defaultTable = new JTable(defaultModel);
|
defaultTable = new JTable(defaultModel);
|
||||||
defaultTable.setAutoCreateRowSorter(true);
|
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);
|
defaultFilter = new FilterField().filter(defaultTable, defaultModel);
|
||||||
|
|
||||||
defaultModel.addTableModelListener(e -> activeTable.repaint());
|
defaultModel.addTableModelListener(e -> activeTable.repaint());
|
||||||
|
@ -455,7 +442,10 @@ public class MapWithAIProvidersPanel extends JPanel {
|
||||||
int tenXWidth = defaultTable.getFontMetrics(defaultTable.getFont()).stringWidth("XXXXXXXXXX");
|
int tenXWidth = defaultTable.getFontMetrics(defaultTable.getFont()).stringWidth("XXXXXXXXXX");
|
||||||
TableColumnModel mod = defaultTable.getColumnModel();
|
TableColumnModel mod = defaultTable.getColumnModel();
|
||||||
int urlWidth = (showActive ? 3 : 0) * tenXWidth;
|
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(5).setCellRenderer(new MapWithAILicenseTableCellRenderer());
|
||||||
mod.getColumn(4).setPreferredWidth((showActive ? 2 : 0) * tenXWidth);
|
mod.getColumn(4).setPreferredWidth((showActive ? 2 : 0) * tenXWidth);
|
||||||
mod.getColumn(4).setCellRenderer(new MapWithAIProviderTableCellRenderer());
|
mod.getColumn(4).setCellRenderer(new MapWithAIProviderTableCellRenderer());
|
||||||
|
@ -473,31 +463,49 @@ public class MapWithAIProvidersPanel extends JPanel {
|
||||||
mod.getColumn(0).setMaxWidth(ImageProvider.ImageSizes.MENU.getAdjustedWidth() + 5);
|
mod.getColumn(0).setMaxWidth(ImageProvider.ImageSizes.MENU.getAdjustedWidth() + 5);
|
||||||
|
|
||||||
if (showActive) {
|
if (showActive) {
|
||||||
|
defaultTable.removeColumn(mod.getColumn(6));
|
||||||
defaultTable.removeColumn(mod.getColumn(4));
|
defaultTable.removeColumn(mod.getColumn(4));
|
||||||
defaultTable.removeColumn(mod.getColumn(2));
|
defaultTable.removeColumn(mod.getColumn(2));
|
||||||
areaListeners.addListener(defaultUrlTableCellRenderer);
|
areaListeners.addListener(defaultUrlTableCellRenderer);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
defaultTable.removeColumn(mod.getColumn(3));
|
defaultTable.removeColumn(mod.getColumn(3));
|
||||||
areaListeners.addListener(defaultNameTableCellRenderer);
|
areaListeners.addListener(defaultNameTableCellRenderer);
|
||||||
}
|
}
|
||||||
defaultTable.addMouseListener(new MouseAdapter() {
|
defaultTable.addMouseListener(new MouseAdapter() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
int row = defaultTable.rowAtPoint(new Point(e.getX(), e.getY()));
|
clickListener(e);
|
||||||
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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
* @param The current area to highlight data from
|
||||||
*/
|
*/
|
||||||
|
|
Ładowanie…
Reference in New Issue