// License: GPL. For details, see LICENSE file. package panels; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.util.EnumMap; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; 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.Fog; import smed.SmedAction; public class PanelFog extends JPanel { private SmedAction dlg; private ButtonGroup fogButtons = new ButtonGroup(); public JRadioButton noFogButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/OffButton.png"))); public JRadioButton yesFogButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogYesButton.png"))); public JRadioButton hornButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogHornButton.png"))); public JRadioButton sirenButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogSirenButton.png"))); public JRadioButton diaButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogDiaButton.png"))); public JRadioButton bellButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogBellButton.png"))); public JRadioButton whisButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogWhisButton.png"))); public JRadioButton gongButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogGongButton.png"))); public JRadioButton explosButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogExplosButton.png"))); private EnumMap<Fog, JRadioButton> fogs = new EnumMap<>(Fog.class); private ActionListener alFog = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (Fog fog : fogs.keySet()) { JRadioButton button = fogs.get(fog); if (button.isSelected()) { SmedAction.panelMain.mark.setFogSound(fog); button.setBorderPainted(true); } else { button.setBorderPainted(false); } } } }; public JLabel groupLabel; public JTextField groupBox; private FocusListener flGroup = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setFogGroup(groupBox.getText()); } }; public JLabel periodLabel; public JTextField periodBox; private FocusListener flPeriod = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setFogPeriod(periodBox.getText()); } }; public JLabel seqLabel; public JTextField seqBox; private FocusListener flSeq = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setFogSequence(seqBox.getText()); } }; public JLabel rangeLabel; public JTextField rangeBox; private FocusListener flRange = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setFogRange(rangeBox.getText()); } }; public PanelFog(SmedAction dia) { dlg = dia; setLayout(null); add(getFogButton(noFogButton, 0, 2, 27, 27, "NoFog", Fog.NOFOG)); add(getFogButton(yesFogButton, 0, 32, 27, 27, "FogSignal", Fog.FOGSIG)); add(getFogButton(hornButton, 0, 62, 27, 27, "Horn", Fog.HORN)); add(getFogButton(sirenButton, 0, 92, 27, 27, "Siren", Fog.SIREN)); add(getFogButton(gongButton, 0, 122, 27, 27, "Gong", Fog.GONG)); add(getFogButton(diaButton, 30, 2, 27, 27, "Diaphone", Fog.DIA)); add(getFogButton(bellButton, 30, 32, 27, 27, "Bell", Fog.BELL)); add(getFogButton(whisButton, 30, 62, 27, 27, "Whistle", Fog.WHIS)); add(getFogButton(explosButton, 30, 92, 27, 27, "Explosion", Fog.EXPLOS)); groupLabel = new JLabel(Messages.getString("Group"), SwingConstants.CENTER); groupLabel.setBounds(new Rectangle(75, 0, 100, 20)); add(groupLabel); groupBox = new JTextField(); groupBox.setBounds(new Rectangle(100, 20, 50, 20)); groupBox.setHorizontalAlignment(SwingConstants.CENTER); add(groupBox); groupBox.addFocusListener(flGroup); periodLabel = new JLabel(Messages.getString("Period"), SwingConstants.CENTER); periodLabel.setBounds(new Rectangle(75, 40, 100, 20)); add(periodLabel); periodBox = new JTextField(); periodBox.setBounds(new Rectangle(100, 60, 50, 20)); periodBox.setHorizontalAlignment(SwingConstants.CENTER); add(periodBox); periodBox.addFocusListener(flPeriod); seqLabel = new JLabel(Messages.getString("Sequence"), SwingConstants.CENTER); seqLabel.setBounds(new Rectangle(75, 80, 100, 20)); add(seqLabel); seqBox = new JTextField(); seqBox.setBounds(new Rectangle(100, 100, 50, 20)); seqBox.setHorizontalAlignment(SwingConstants.CENTER); add(seqBox); seqBox.addFocusListener(flSeq); rangeLabel = new JLabel(Messages.getString("Range"), SwingConstants.CENTER); rangeLabel.setBounds(new Rectangle(75, 120, 100, 20)); add(rangeLabel); rangeBox = new JTextField(); rangeBox.setBounds(new Rectangle(100, 140, 50, 20)); rangeBox.setHorizontalAlignment(SwingConstants.CENTER); add(rangeBox); rangeBox.addFocusListener(flRange); } public void syncPanel() { for (Fog fog : fogs.keySet()) { JRadioButton button = fogs.get(fog); button.setBorderPainted(SmedAction.panelMain.mark.getFogSound() == fog); } groupBox.setText(SmedAction.panelMain.mark.getFogGroup()); seqBox.setText(SmedAction.panelMain.mark.getFogSequence()); periodBox.setText(SmedAction.panelMain.mark.getFogPeriod()); rangeBox.setText(SmedAction.panelMain.mark.getFogRange()); } private JRadioButton getFogButton(JRadioButton button, int x, int y, int w, int h, String tip, Fog fog) { button.setBounds(new Rectangle(x, y, w, h)); button.setBorder(BorderFactory.createLoweredBevelBorder()); button.setToolTipText(Messages.getString(tip)); button.addActionListener(alFog); fogButtons.add(button); fogs.put(fog, button); return button; } }