// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.imageryxmlbounds.actions;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.actions.JosmAction;
import org.openstreetmap.josm.data.imagery.ImageryInfo;
import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference.ImageryProvidersPanel.ImageryDefaultLayerTableModel;
import org.openstreetmap.josm.gui.util.GuiHelper;
import org.openstreetmap.josm.plugins.imageryxmlbounds.XmlBoundsConstants;
import org.openstreetmap.josm.plugins.imageryxmlbounds.XmlBoundsLayer;
import org.openstreetmap.josm.plugins.imageryxmlbounds.data.XmlBoundsConverter;
import org.openstreetmap.josm.tools.ImageProvider;
/**
* Edit bounds for selected defaults.
*/
public class EditEntriesAction extends JosmAction implements XmlBoundsConstants, ListSelectionListener {
protected static final String ACTION_NAME = tr("Edit");
private final JTable defaultTable;
private final ImageryDefaultLayerTableModel defaultModel;
private final List<ImageryInfo> entries;
/**
* Constructs a new {@code EditEntriesAction}.
* @param defaultTable table
* @param defaultModel table model
*/
public EditEntriesAction(JTable defaultTable, ImageryDefaultLayerTableModel defaultModel) {
putValue(SHORT_DESCRIPTION, tr("edit bounds for selected defaults"));
putValue(NAME, ACTION_NAME);
new ImageProvider("xml_24.png").getResource().attachImageIcon(this, true);
this.defaultModel = defaultModel;
this.defaultTable = defaultTable;
this.defaultTable.getSelectionModel().addListSelectionListener(this);
this.entries = new ArrayList<>();
setEnabled(false);
}
@Override
public void actionPerformed(ActionEvent e) {
final XmlBoundsLayer layer = new XmlBoundsLayer(
XmlBoundsConverter.convertImageryEntries(entries));
final Runnable uiStuff = new Runnable() {
@Override
public void run() {
Main.getLayerManager().addLayer(layer);
layer.onPostLoadFromFile();
}
};
GuiHelper.runInEDT(uiStuff);
}
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
entries.clear();
for (int row : defaultTable.getSelectedRows()) {
ImageryInfo info = defaultModel.getRow(row);
if (info != null && info.getBounds() != null) {
entries.add(info);
}
}
setEnabled(!entries.isEmpty());
}
}
}