// License: GPL. For details, see LICENSE file. package panels; import static org.openstreetmap.josm.tools.I18n.tr; 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 java.util.EnumMap; import java.util.EnumSet; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.SwingConstants; import messages.Messages; import seamarks.SeaMark; import seamarks.SeaMark.Att; import seamarks.SeaMark.Chr; import seamarks.SeaMark.Col; import smed.SmedAction; public class PanelChr extends JPanel { private SmedAction dlg; public JLabel col1Label = new JLabel(); public JLabel col2Label = new JLabel(); public JLabel charLabel = new JLabel(); public JTextField charBox = new JTextField(); public JToggleButton noneButton = newJToggleButton("/images/NoCharButton.png"); public JToggleButton fixedButton = newJToggleButton("/images/FixedButton.png"); public JToggleButton flashButton = newJToggleButton("/images/FlashButton.png"); public JToggleButton longFlashButton = newJToggleButton("/images/LongFlashButton.png"); public JToggleButton quickButton = newJToggleButton("/images/QuickButton.png"); public JToggleButton veryQuickButton = newJToggleButton("/images/VeryQuickButton.png"); public JToggleButton ultraQuickButton = newJToggleButton("/images/UltraQuickButton.png"); public JToggleButton interruptedQuickButton = newJToggleButton("/images/InterruptedQuickButton.png"); public JToggleButton interruptedVeryQuickButton = newJToggleButton("/images/InterruptedVeryQuickButton.png"); public JToggleButton interruptedUltraQuickButton = newJToggleButton("/images/InterruptedUltraQuickButton.png"); public JToggleButton isophasedButton = newJToggleButton("/images/IsophasedButton.png"); public JToggleButton occultingButton = newJToggleButton("/images/OccultingButton.png"); public JToggleButton morseButton = newJToggleButton("/images/MorseButton.png"); public JToggleButton alternatingButton = newJToggleButton("/images/AlternatingButton.png"); private EnumMap<Chr, JToggleButton> buttons = new EnumMap<>(Chr.class); private ActionListener alCharButton = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JToggleButton source = (JToggleButton) e.getSource(); EnumSet<Chr> combo = EnumSet.noneOf(Chr.class); for (Chr chr : buttons.keySet()) { JToggleButton button = buttons.get(chr); if (button.isSelected()) { combo.add(chr); button.setBorderPainted(true); } else { combo.remove(chr); button.setBorderPainted(false); } } if (SeaMark.ChrMAP.containsKey(combo)) { charBox.setText(SeaMark.ChrMAP.get(combo)); } else { for (Chr chr : buttons.keySet()) { JToggleButton button = buttons.get(chr); if (button == source) { charBox.setText(SeaMark.ChrMAP.get(EnumSet.of(chr))); button.setSelected(true); button.setBorderPainted(true); } else { button.setSelected(false); button.setBorderPainted(false); } } } String str = charBox.getText(); SmedAction.panelMain.mark.setLightAtt(Att.CHR, 0, str); if (!str.contains("Al")) { col2Label.setBackground(SeaMark.ColMAP.get(SmedAction.panelMain.mark.getLightAtt(Att.COL, 0))); SmedAction.panelMain.mark.setLightAtt(Att.ALT, 0, Col.UNKCOL); } else { col2Label.setBackground(SeaMark.ColMAP.get(SmedAction.panelMain.mark.getLightAtt(Att.ALT, 0))); } } }; private FocusListener flCharBox = new FocusListener() { @Override public void focusGained(FocusEvent e) {} @Override public void focusLost(FocusEvent e) { String str = charBox.getText(); SmedAction.panelMain.mark.setLightAtt(Att.CHR, 0, str); EnumSet<Chr> set = EnumSet.noneOf(Chr.class); for (EnumSet<Chr> map : SeaMark.ChrMAP.keySet()) { if (str.equals(SeaMark.ChrMAP.get(map))) { set = map; break; } } for (Chr chr : buttons.keySet()) { JToggleButton button = buttons.get(chr); if (set.contains(chr)) { button.setSelected(true); button.setBorderPainted(true); } else { button.setSelected(false); button.setBorderPainted(false); } } if (!str.contains("Al")) { col2Label.setBackground(SeaMark.ColMAP.get(SmedAction.panelMain.mark.getLightAtt(Att.COL, 0))); SmedAction.panelMain.mark.setLightAtt(Att.ALT, 0, Col.UNKCOL); } else { col2Label.setBackground(SeaMark.ColMAP.get(SmedAction.panelMain.mark.getLightAtt(Att.ALT, 0))); } } }; public PanelChr(SmedAction dia) { dlg = dia; setLayout(null); add(getChrButton(noneButton, 0, 0, 44, 16, Messages.getString("NoChar"), Chr.UNKCHR)); add(getChrButton(fixedButton, 0, 16, 44, 16, Messages.getString("FChar"), Chr.FIXED)); add(getChrButton(flashButton, 0, 32, 44, 16, Messages.getString("FlChar"), Chr.FLASH)); add(getChrButton(longFlashButton, 0, 48, 44, 16, Messages.getString("LFlChar"), Chr.LFLASH)); add(getChrButton(quickButton, 0, 64, 44, 16, Messages.getString("QChar"), Chr.QUICK)); add(getChrButton(veryQuickButton, 0, 80, 44, 16, Messages.getString("VQChar"), Chr.VQUICK)); add(getChrButton(ultraQuickButton, 0, 96, 44, 16, Messages.getString("UQChar"), Chr.UQUICK)); add(getChrButton(alternatingButton, 44, 0, 44, 16, Messages.getString("AlChar"), Chr.ALTERNATING)); add(getChrButton(isophasedButton, 44, 16, 44, 16, Messages.getString("IsoChar"), Chr.ISOPHASED)); add(getChrButton(occultingButton, 44, 32, 44, 16, Messages.getString("OcChar"), Chr.OCCULTING)); add(getChrButton(morseButton, 44, 48, 44, 16, Messages.getString("MoChar"), Chr.MORSE)); add(getChrButton(interruptedQuickButton, 44, 64, 44, 16, Messages.getString("IQChar"), Chr.IQUICK)); add(getChrButton(interruptedVeryQuickButton, 44, 80, 44, 16, Messages.getString("IVQChar"), Chr.IVQUICK)); add(getChrButton(interruptedUltraQuickButton, 44, 96, 44, 16, Messages.getString("IUQChar"), Chr.IUQUICK)); charLabel.setBounds(new Rectangle(0, 113, 88, 20)); charLabel.setHorizontalAlignment(SwingConstants.CENTER); charLabel.setText(Messages.getString("Character")); add(charLabel); col1Label.setBounds(new Rectangle(10, 135, 10, 20)); col1Label.setOpaque(true); add(col1Label); col2Label.setBounds(new Rectangle(70, 135, 10, 20)); col2Label.setOpaque(true); add(col2Label); charBox.setBounds(new Rectangle(20, 135, 50, 20)); charBox.setHorizontalAlignment(SwingConstants.CENTER); add(charBox); charBox.addFocusListener(flCharBox); } private static JToggleButton newJToggleButton(String buttonIcon) { return new JToggleButton(new ImageIcon(PanelChr.class.getResource(buttonIcon))); } public void syncPanel() { String str = (String) SmedAction.panelMain.mark.getLightAtt(Att.CHR, 0); charBox.setText(str); EnumSet<Chr> set = EnumSet.noneOf(Chr.class); for (EnumSet<Chr> map : SeaMark.ChrMAP.keySet()) { if (dlg.node != null && str.equals(SeaMark.ChrMAP.get(map))) { set = map; break; } } if (!str.contains("Al")) { col2Label.setBackground(SeaMark.ColMAP.get(SmedAction.panelMain.mark.getLightAtt(Att.COL, 0))); } else { col2Label.setBackground(SeaMark.ColMAP.get(SmedAction.panelMain.mark.getLightAtt(Att.ALT, 0))); } col1Label.setBackground(SeaMark.ColMAP.get(SmedAction.panelMain.mark.getLightAtt(Att.COL, 0))); for (Chr chr : buttons.keySet()) { JToggleButton button = buttons.get(chr); if (set.contains(chr)) { button.setSelected(true); button.setBorderPainted(true); } else { button.setSelected(false); button.setBorderPainted(false); } } } private JToggleButton getChrButton(JToggleButton button, int x, int y, int w, int h, String tip, Chr chr) { button.setBounds(new Rectangle(x, y, w, h)); button.setBorder(BorderFactory.createLoweredBevelBorder()); button.setBorderPainted(false); button.setToolTipText(tr(tip)); button.addActionListener(alCharButton); buttons.put(chr, button); return button; } }