// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.namemanager.listeners; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionEvent; import java.util.Collection; import org.openstreetmap.josm.actions.JosmAction; import org.openstreetmap.josm.data.SelectionChangedListener; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.plugins.namemanager.dialog.NameManagerDialog; import org.openstreetmap.josm.plugins.namemanager.utils.NameManagerUtils; import org.w3c.dom.Document; /** * This is {@link JosmAction} subclass, which is responsible for executing mouse * click on toolmenu plugin field. * * @author Rafal Jachowicz, Harman/Becker Automotive Systems (master's thesis) * */ public class NameManagerAction extends JosmAction implements SelectionChangedListener { private static final String ATTRIBUTE_DISTRICTS = "Attribute districts"; private static final String NAME_MANAGER = "Name Manager"; private static final String NAME_MANAGER_MENU = "selectall"; /** * serialVersionUID. */ private static final long serialVersionUID = 5638780111409126823L; /** * Constructor. */ public NameManagerAction() { super(tr(NAME_MANAGER), NAME_MANAGER_MENU, tr(ATTRIBUTE_DISTRICTS), null, true, "namemanager", true); DataSet.addSelectionListener(this); setEnabled(false); } /** * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent e) { if (!isEnabled()) { return; } NameManagerDialog dialog = NameManagerDialog.getInstance(); Way selectedWay = (Way) getLayerManager().getEditDataSet().getSelectedWays().iterator().next(); dialog.setSelectedWay(selectedWay); dialog.setWaysInsideSelectedArea(NameManagerUtils.getWaysInsideSelectedArea(selectedWay)); Document doc = NameManagerUtils.parseCountries(); doc.getDocumentElement().normalize(); NameManagerUtils.prepareCountryDataMemoryCache(doc); dialog.setCountryComboBox(); dialog.repaint(); dialog.setVisible(true); } /** * This method is responsible for enabling and disabling toolmenu * LaneManager button. * * @see org.openstreetmap.josm.data.SelectionChangedListener#selectionChanged(java.util.Collection) */ @Override public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) { boolean enabledState = false; DataSet ds = getLayerManager().getEditDataSet(); if (newSelection != null && ds != null) { Collection<Way> selectedWays = ds.getSelectedWays(); enabledState = selectedWays.size() == 1 && selectedWays.iterator().next().isClosed(); } setEnabled(enabledState); } }