package org.openstreetmap.josm.plugins.rasterfilters.actions; import java.awt.Component; import java.awt.event.ActionEvent; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractAction; import javax.swing.JMenuItem; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.layer.ImageryLayer; import org.openstreetmap.josm.gui.layer.Layer; import org.openstreetmap.josm.gui.layer.Layer.LayerAction; import org.openstreetmap.josm.plugins.rasterfilters.gui.FiltersDialog; import org.openstreetmap.josm.tools.ImageProvider; import static org.openstreetmap.josm.tools.I18n.tr; /** * The action that is called when user click on 'Choose filters' button * * @author Nipel-Crumple */ public final class ShowFiltersDialogAction extends AbstractAction implements LayerAction { private List<FiltersDialog> dialogs = new ArrayList<>(); /** * Constructs a new {@code ShowFiltersDialogAction}. */ public ShowFiltersDialogAction() { putValue(NAME, tr("Filters")); putValue(SHORT_DESCRIPTION, tr("Choose Filter")); putValue("ImageResource", new ImageProvider("josm_filters_48.png").getResource()); } public void addFiltersDialog(FiltersDialog dialog) { dialogs.add(dialog); } public void removeFiltersDialog(FiltersDialog dialog) { dialogs.remove(dialog); } @Override public void actionPerformed(ActionEvent e) { Layer layer = Main.getLayerManager().getActiveLayer(); if (layer instanceof ImageryLayer) { for (FiltersDialog temp : dialogs) { if (temp.getLayer().equals(layer)) { try { temp.createAndShowGui(); } catch (MalformedURLException e1) { e1.printStackTrace(); } break; } } } else { Main.debug("The layer is not the instance of " + ImageryLayer.class.getCanonicalName()); } } public FiltersDialog getDialogByLayer(Layer layer) { for (FiltersDialog dialog : dialogs) { if (dialog.getLayer().equals(layer)) { return dialog; } } return null; } @Override public boolean supportLayers(List<Layer> layers) { return true; } @Override public Component createMenuComponent() { return new JMenuItem(this); } }