// License: GPL. For details, see LICENSE file. package smed; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.util.Collection; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; 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 messages.Messages; import panels.PanelMain; public class SmedAction extends JosmAction implements SelectionChangedListener { private static final long serialVersionUID = 1L; private static String editor = tr("SeaMap Editor"); public static JFrame editFrame = null; private boolean isOpen = false; public static PanelMain panelMain = null; public OsmPrimitive node = null; private Collection<? extends OsmPrimitive> selection = null; public SmedAction() { super(editor, "Smed", editor, null, true); } @Override public void actionPerformed(ActionEvent arg0) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if (!isOpen) { createFrame(); } else { editFrame.toFront(); } isOpen = true; } }); } protected void createFrame() { editFrame = new JFrame(editor); editFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); editFrame.addWindowListener(new java.awt.event.WindowAdapter() { @Override public void windowClosing(java.awt.event.WindowEvent e) { closeDialog(); } }); editFrame.setSize(new Dimension(420, 430)); editFrame.setLocation(100, 200); editFrame.setResizable(true); editFrame.setAlwaysOnTop(true); editFrame.setVisible(true); editFrame.setLayout(null); panelMain = new PanelMain(this); panelMain.setBounds(10, 10, 400, 400); node = null; panelMain.syncPanel(); editFrame.add(panelMain); DataSet.addSelectionListener(this); // System.out.println("hello"); } public void closeDialog() { if (isOpen) { editFrame.setVisible(false); editFrame.dispose(); } isOpen = false; } @Override public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) { OsmPrimitive nextNode = null; selection = newSelection; for (OsmPrimitive osm : selection) { nextNode = osm; if (selection.size() == 1) { if (nextNode.compareTo(node) != 0) { node = nextNode; panelMain.mark.parseMark(node); } } else { node = null; panelMain.mark.clrMark(); PanelMain.messageBar.setText(Messages.getString("OneNode")); } } if (nextNode == null) { node = null; panelMain.mark.clrMark(); PanelMain.messageBar.setText(Messages.getString("SelectNode")); } } }