// License: GPL. For details, see LICENSE file. package panels; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Color; import java.awt.Insets; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.SwingConstants; import messages.Messages; import seamarks.SeaMark; import smed.SmedAction; public class PanelMain extends JPanel { private SmedAction dlg; public SeaMark mark = null; public PanelChan panelChan = null; public PanelHaz panelHaz = null; public PanelSpec panelSpec = null; public PanelLights panelLights = null; public PanelMore panelMore = null; public PanelTop panelTop = null; public PanelFog panelFog = null; public PanelRadar panelRadar = null; public PanelLit panelLit = null; public JLabel nameLabel = null; public JTextField nameBox = null; public static JTextField messageBar = null; private FocusListener flName = new FocusListener() { @Override public void focusLost(FocusEvent e) { mark.setName(nameBox.getText()); } @Override public void focusGained(FocusEvent e) { } }; public JButton saveButton = null; private ActionListener alSave = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { mark.saveSign(dlg.node); } }; public JButton moreButton = null; private ActionListener alMore = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (panelMore.isVisible()) { moreButton.setText(">>"); panelMore.setVisible(false); topButton.setEnabled(true); radButton.setEnabled(true); fogButton.setEnabled(true); litButton.setEnabled(true); } else { panelMore.setVisible(true); moreButton.setText("<<"); miscButtons.clearSelection(); panelTop.setVisible(false); topButton.setBorderPainted(false); topButton.setEnabled(false); panelRadar.setVisible(false); radButton.setBorderPainted(false); radButton.setEnabled(false); panelFog.setVisible(false); fogButton.setBorderPainted(false); fogButton.setEnabled(false); panelLit.setVisible(false); litButton.setBorderPainted(false); litButton.setEnabled(false); } } }; public ButtonGroup typeButtons = null; public JRadioButton chanButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/ChanButton.png"))); public JRadioButton hazButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/HazButton.png"))); public JRadioButton specButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/SpecButton.png"))); public JRadioButton lightsButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/LightsButton.png"))); private ActionListener alType = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (chanButton.isSelected()) { chanButton.setBorderPainted(true); panelChan.syncPanel(); panelChan.setVisible(true); } else { chanButton.setBorderPainted(false); panelChan.setVisible(false); } if (hazButton.isSelected()) { hazButton.setBorderPainted(true); panelHaz.syncPanel(); panelHaz.setVisible(true); } else { hazButton.setBorderPainted(false); panelHaz.setVisible(false); } if (specButton.isSelected()) { specButton.setBorderPainted(true); panelSpec.syncPanel(); panelSpec.setVisible(true); } else { specButton.setBorderPainted(false); panelSpec.setVisible(false); } if (lightsButton.isSelected()) { lightsButton.setBorderPainted(true); panelLights.syncPanel(); panelLights.setVisible(true); } else { lightsButton.setBorderPainted(false); panelLights.setVisible(false); } } }; private ButtonGroup miscButtons = null; public JRadioButton topButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/TopButton.png"))); public JRadioButton fogButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogButton.png"))); public JRadioButton radButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RadarButton.png"))); public JRadioButton litButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/LitButton.png"))); private ActionListener alMisc = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (topButton.isSelected()) { moreButton.setText(">>"); panelMore.setVisible(false); topButton.setBorderPainted(true); panelTop.setVisible(true); panelTop.syncPanel(); } else { topButton.setBorderPainted(false); panelTop.setVisible(false); } if (fogButton.isSelected()) { moreButton.setText(">>"); panelMore.setVisible(false); fogButton.setBorderPainted(true); panelFog.setVisible(true); panelFog.syncPanel(); } else { fogButton.setBorderPainted(false); panelFog.setVisible(false); } if (radButton.isSelected()) { moreButton.setText(">>"); panelMore.setVisible(false); radButton.setBorderPainted(true); panelRadar.setVisible(true); panelRadar.syncPanel(); } else { radButton.setBorderPainted(false); panelRadar.setVisible(false); } if (litButton.isSelected()) { moreButton.setText(">>"); panelMore.setVisible(false); litButton.setBorderPainted(true); panelLit.setVisible(true); panelLit.syncPanel(); } else { litButton.setBorderPainted(false); panelLit.setVisible(false); } } }; public PanelMain(SmedAction dia) { dlg = dia; setLayout(null); mark = new SeaMark(dlg); mark.setBounds(new Rectangle(235, 0, 165, 160)); add(mark); panelChan = new PanelChan(dlg); panelChan.setBounds(new Rectangle(65, 0, 170, 160)); panelChan.setVisible(false); add(panelChan); panelHaz = new PanelHaz(dlg); panelHaz.setBounds(new Rectangle(65, 0, 170, 160)); panelHaz.setVisible(false); add(panelHaz); panelSpec = new PanelSpec(dlg); panelSpec.setBounds(new Rectangle(65, 0, 170, 160)); panelSpec.setVisible(false); add(panelSpec); panelLights = new PanelLights(dlg); panelLights.setBounds(new Rectangle(65, 0, 170, 160)); panelLights.setVisible(false); add(panelLights); panelMore = new PanelMore(dlg); panelMore.setBounds(new Rectangle(40, 165, 360, 160)); panelMore.setVisible(false); add(panelMore); panelTop = new PanelTop(dlg); panelTop.setBounds(new Rectangle(40, 165, 360, 160)); panelTop.setVisible(false); add(panelTop); panelFog = new PanelFog(dlg); panelFog.setBounds(new Rectangle(40, 165, 360, 160)); panelFog.setVisible(false); add(panelFog); panelRadar = new PanelRadar(dlg); panelRadar.setBounds(new Rectangle(40, 165, 360, 160)); panelRadar.setVisible(false); add(panelRadar); panelLit = new PanelLit(dlg); panelLit.setBounds(new Rectangle(40, 165, 360, 160)); panelLit.setVisible(false); add(panelLit); add(getButton(chanButton, 0, 0, 62, 40, "Chan"), null); add(getButton(hazButton, 0, 40, 62, 40, "Haz"), null); add(getButton(specButton, 0, 80, 62, 40, "Spec"), null); add(getButton(lightsButton, 0, 120, 62, 40, "Lights"), null); typeButtons = new ButtonGroup(); typeButtons.add(chanButton); typeButtons.add(hazButton); typeButtons.add(specButton); typeButtons.add(lightsButton); chanButton.addActionListener(alType); hazButton.addActionListener(alType); specButton.addActionListener(alType); lightsButton.addActionListener(alType); add(getButton(topButton, 0, 185, 34, 32, "Topmarks")); add(getButton(fogButton, 0, 220, 34, 32, "FogSignals")); add(getButton(radButton, 0, 255, 34, 32, "Radar")); add(getButton(litButton, 0, 290, 34, 32, "Lit")); miscButtons = new ButtonGroup(); miscButtons.add(topButton); miscButtons.add(fogButton); miscButtons.add(radButton); miscButtons.add(litButton); topButton.addActionListener(alMisc); fogButton.addActionListener(alMisc); radButton.addActionListener(alMisc); litButton.addActionListener(alMisc); nameLabel = new JLabel(); nameLabel.setBounds(new Rectangle(5, 329, 60, 20)); nameLabel.setText(tr("Name:")); add(nameLabel); nameBox = new JTextField(); nameBox.setBounds(new Rectangle(60, 330, 200, 20)); nameBox.setHorizontalAlignment(SwingConstants.CENTER); add(nameBox); nameBox.addFocusListener(flName); saveButton = new JButton(); saveButton.setBounds(new Rectangle(285, 330, 100, 20)); saveButton.setText(tr("Save")); add(saveButton); saveButton.addActionListener(alSave); moreButton = new JButton(); moreButton.setBounds(new Rectangle(0, 165, 34, 15)); moreButton.setMargin(new Insets(0, 0, 0, 0)); moreButton.setText(">>"); add(moreButton); moreButton.addActionListener(alMore); messageBar = new JTextField(); messageBar.setBounds(10, 355, 380, 20); messageBar.setEditable(false); messageBar.setBackground(Color.WHITE); add(messageBar); } public void syncPanel() { typeButtons.clearSelection(); chanButton.setBorderPainted(false); chanButton.setEnabled(false); hazButton.setBorderPainted(false); hazButton.setEnabled(false); specButton.setBorderPainted(false); specButton.setEnabled(false); lightsButton.setBorderPainted(false); lightsButton.setEnabled(false); miscButtons.clearSelection(); topButton.setEnabled(false); topButton.setBorderPainted(false); fogButton.setEnabled(false); fogButton.setBorderPainted(false); radButton.setEnabled(false); radButton.setBorderPainted(false); litButton.setEnabled(false); litButton.setBorderPainted(false); saveButton.setEnabled(false); moreButton.setVisible(false); moreButton.setText(">>"); moreButton.setSelected(false); panelChan.setVisible(false); panelHaz.setVisible(false); panelSpec.setVisible(false); panelLights.setVisible(false); panelMore.setVisible(false); panelTop.setVisible(false); panelFog.setVisible(false); panelRadar.setVisible(false); panelLit.setVisible(false); nameBox.setEnabled(false); if (mark != null) { nameBox.setEnabled(true); chanButton.setEnabled(true); hazButton.setEnabled(true); specButton.setEnabled(true); lightsButton.setEnabled(true); nameBox.setText(mark.getName()); switch (SeaMark.GrpMAP.get(mark.getObject())) { case LAT: case SAW: chanButton.setBorderPainted(true); panelChan.setVisible(true); panelChan.syncPanel(); break; case CAR: case ISD: hazButton.setBorderPainted(true); panelHaz.setVisible(true); panelHaz.syncPanel(); break; case SPP: specButton.setBorderPainted(true); panelSpec.setVisible(true); panelSpec.syncPanel(); break; case LGT: case STN: case PLF: lightsButton.setBorderPainted(true); panelLights.setVisible(true); panelLights.syncPanel(); break; default: break; } panelMore.syncPanel(); panelTop.syncPanel(); panelFog.syncPanel(); panelRadar.syncPanel(); panelLit.syncPanel(); } } private JRadioButton getButton(JRadioButton button, int x, int y, int w, int h, String tip) { button.setBounds(new Rectangle(x, y, w, h)); button.setBorder(BorderFactory.createLoweredBevelBorder()); button.setToolTipText(Messages.getString(tip)); return button; } }