// 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.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.SwingConstants; import messages.Messages; import seamarks.SeaMark.Cat; import seamarks.SeaMark.Rtb; import smed.SmedAction; public class PanelRadar extends JPanel { private SmedAction dlg; private JToggleButton aisButton = new JToggleButton(new ImageIcon(getClass().getResource("/images/AISButton.png"))); private ActionListener alAis = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (aisButton.isSelected()) { radioCatBox.setVisible(true); aisButton.setBorderPainted(true); } else { radioCatBox.setSelectedIndex(0); radioCatBox.setVisible(false); aisButton.setBorderPainted(false); } } }; private JComboBox<String> radioCatBox; private EnumMap<Cat, Integer> radioCats = new EnumMap<>(Cat.class); private ActionListener alRadioCatBox = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (Cat cat : radioCats.keySet()) { int idx = radioCats.get(cat); if (dlg.node != null && (idx == radioCatBox.getSelectedIndex())) { SmedAction.panelMain.mark.setRadio(cat); } } } }; private ButtonGroup radarButtons = new ButtonGroup(); public JRadioButton noRadButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/OffButton.png"))); public JRadioButton reflButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RadarReflectorButton.png"))); public JRadioButton ramarkButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RamarkButton.png"))); public JRadioButton raconButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RaconButton.png"))); public JRadioButton leadingButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/LeadingRaconButton.png"))); private EnumMap<Rtb, JRadioButton> rads = new EnumMap<>(Rtb.class); private ActionListener alRad = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (Rtb rtb : rads.keySet()) { JRadioButton button = rads.get(rtb); if (button.isSelected()) { SmedAction.panelMain.mark.setRadar(rtb); } } syncPanel(); } }; public JLabel groupLabel; public JTextField groupBox; private FocusListener flGroup = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setRaconGroup(groupBox.getText()); } }; public JLabel periodLabel; public JTextField periodBox; private FocusListener flPeriod = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setRaconPeriod(periodBox.getText()); } }; public JLabel seqLabel; public JTextField seqBox; private FocusListener flSeq = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setRaconSequence(seqBox.getText()); } }; public JLabel rangeLabel; public JTextField rangeBox; private FocusListener flRange = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setRaconRange(rangeBox.getText()); } }; public JLabel sector1Label; public JTextField sector1Box; private FocusListener flSector1 = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setRaconSector1(sector1Box.getText()); } }; public JLabel sector2Label; public JTextField sector2Box; private FocusListener flSector2 = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setRaconSector2(sector2Box.getText()); } }; public JLabel sectorsLabel; public PanelRadar(SmedAction dia) { dlg = dia; setLayout(null); add(getRadButton(noRadButton, 0, 3, 27, 27, "NoRadar", Rtb.NORTB)); add(getRadButton(reflButton, 0, 33, 27, 27, "RadarReflector", Rtb.REFLECTOR)); add(getRadButton(ramarkButton, 0, 63, 27, 27, "Ramark", Rtb.RAMARK)); add(getRadButton(raconButton, 0, 93, 27, 27, "Racon", Rtb.RACON)); add(getRadButton(leadingButton, 0, 123, 27, 27, "LeadingRacon", Rtb.LEADING)); groupLabel = new JLabel(Messages.getString("Group"), SwingConstants.CENTER); groupLabel.setBounds(new Rectangle(30, 0, 100, 20)); add(groupLabel); groupBox = new JTextField(); groupBox.setBounds(new Rectangle(55, 20, 50, 20)); groupBox.setHorizontalAlignment(SwingConstants.CENTER); add(groupBox); groupBox.addFocusListener(flGroup); periodLabel = new JLabel(Messages.getString("Period"), SwingConstants.CENTER); periodLabel.setBounds(new Rectangle(130, 0, 100, 20)); add(periodLabel); periodBox = new JTextField(); periodBox.setBounds(new Rectangle(155, 20, 50, 20)); periodBox.setHorizontalAlignment(SwingConstants.CENTER); add(periodBox); periodBox.addFocusListener(flPeriod); seqLabel = new JLabel(Messages.getString("Sequence"), SwingConstants.CENTER); seqLabel.setBounds(new Rectangle(30, 40, 100, 20)); add(seqLabel); seqBox = new JTextField(); seqBox.setBounds(new Rectangle(55, 60, 50, 20)); seqBox.setHorizontalAlignment(SwingConstants.CENTER); add(seqBox); seqBox.addFocusListener(flSeq); rangeLabel = new JLabel(Messages.getString("Range"), SwingConstants.CENTER); rangeLabel.setBounds(new Rectangle(130, 40, 100, 20)); add(rangeLabel); rangeBox = new JTextField(); rangeBox.setBounds(new Rectangle(155, 60, 50, 20)); rangeBox.setHorizontalAlignment(SwingConstants.CENTER); add(rangeBox); rangeBox.addFocusListener(flRange); sectorsLabel = new JLabel(Messages.getString("VisibleSector"), SwingConstants.CENTER); sectorsLabel.setBounds(new Rectangle(75, 85, 100, 20)); add(sectorsLabel); sector1Label = new JLabel(Messages.getString("Start"), SwingConstants.CENTER); sector1Label.setBounds(new Rectangle(30, 100, 100, 20)); add(sector1Label); sector1Box = new JTextField(); sector1Box.setBounds(new Rectangle(55, 120, 50, 20)); sector1Box.setHorizontalAlignment(SwingConstants.CENTER); add(sector1Box); sector1Box.addFocusListener(flSector1); sector2Label = new JLabel(Messages.getString("End"), SwingConstants.CENTER); sector2Label.setBounds(new Rectangle(130, 100, 100, 20)); add(sector2Label); sector2Box = new JTextField(); sector2Box.setBounds(new Rectangle(155, 120, 50, 20)); sector2Box.setHorizontalAlignment(SwingConstants.CENTER); add(sector2Box); sector2Box.addFocusListener(flSector2); aisButton.setBounds(new Rectangle(270, 3, 27, 27)); aisButton.setBorder(BorderFactory.createLoweredBevelBorder()); aisButton.setToolTipText("AIS"); aisButton.addActionListener(alAis); add(aisButton); radioCatBox = new JComboBox<>(); radioCatBox.setBounds(new Rectangle(210, 40, 150, 20)); add(radioCatBox); radioCatBox.addActionListener(alRadioCatBox); addROItem("", Cat.NOROS); addROItem(Messages.getString("CircularBeacon"), Cat.ROS_OMNI); addROItem(Messages.getString("DirectionalBeacon"), Cat.ROS_DIRL); addROItem(Messages.getString("RotatingBeacon"), Cat.ROS_ROTP); addROItem(Messages.getString("ConsolBeacon"), Cat.ROS_CNSL); addROItem(Messages.getString("DirectionFinding"), Cat.ROS_RDF); addROItem(Messages.getString("QTGService"), Cat.ROS_QTG); addROItem(Messages.getString("AeronaticalBeacon"), Cat.ROS_AERO); addROItem(Messages.getString("Decca"), Cat.ROS_DECA); addROItem(Messages.getString("LoranC"), Cat.ROS_LORN); addROItem(Messages.getString("DGPS"), Cat.ROS_DGPS); addROItem(Messages.getString("Toran"), Cat.ROS_TORN); addROItem(Messages.getString("Omega"), Cat.ROS_OMGA); addROItem(Messages.getString("Syledis"), Cat.ROS_SYLD); addROItem(Messages.getString("Chiaka"), Cat.ROS_CHKA); addROItem(Messages.getString("PublicCommunication"), Cat.ROS_PCOM); addROItem(Messages.getString("CommercialBroadcast"), Cat.ROS_COMB); addROItem(Messages.getString("Facsimile"), Cat.ROS_FACS); addROItem(Messages.getString("TimeSignal"), Cat.ROS_TIME); addROItem(Messages.getString("AIS"), Cat.ROS_PAIS); addROItem(Messages.getString("S-AIS"), Cat.ROS_SAIS); radioCatBox.setVisible(false); } public void syncPanel() { boolean rad = ((SmedAction.panelMain.mark.getRadar() != Rtb.NORTB) && (SmedAction.panelMain.mark.getRadar() != Rtb.REFLECTOR)); groupLabel.setVisible(rad); groupBox.setVisible(rad); periodLabel.setVisible(rad); periodBox.setVisible(rad); seqLabel.setVisible(rad); seqBox.setVisible(rad); rangeLabel.setVisible(rad); rangeBox.setVisible(rad); sector1Label.setVisible(rad); sector1Box.setVisible(rad); sector2Label.setVisible(rad); sector2Box.setVisible(rad); sectorsLabel.setVisible(rad); for (Rtb rtb : rads.keySet()) { rads.get(rtb).setBorderPainted(SmedAction.panelMain.mark.getRadar() == rtb); } groupBox.setText(SmedAction.panelMain.mark.getRaconGroup()); seqBox.setText(SmedAction.panelMain.mark.getRaconSequence()); periodBox.setText(SmedAction.panelMain.mark.getRaconPeriod()); rangeBox.setText(SmedAction.panelMain.mark.getRaconRange()); sector1Box.setText(SmedAction.panelMain.mark.getRaconSector1()); sector2Box.setText(SmedAction.panelMain.mark.getRaconSector2()); aisButton.setSelected(SmedAction.panelMain.mark.getRadio() != Cat.NOROS); aisButton.setBorderPainted(aisButton.isSelected()); radioCatBox.setVisible(SmedAction.panelMain.mark.getRadio() != Cat.NOROS); } private JRadioButton getRadButton(JRadioButton button, int x, int y, int w, int h, String tip, Rtb rtb) { button.setBounds(new Rectangle(x, y, w, h)); button.setBorder(BorderFactory.createLoweredBevelBorder()); button.setToolTipText(Messages.getString(tip)); button.addActionListener(alRad); radarButtons.add(button); rads.put(rtb, button); return button; } private void addROItem(String str, Cat cat) { radioCats.put(cat, radioCatBox.getItemCount()); radioCatBox.addItem(str); } }