// 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.SwingConstants; import messages.Messages; import seamarks.SeaMark.Cns; import seamarks.SeaMark.Col; import seamarks.SeaMark.Con; import seamarks.SeaMark.Ent; import seamarks.SeaMark.Pat; import seamarks.SeaMark.Reg; import seamarks.SeaMark.Sts; import smed.SmedAction; public class PanelMore extends JPanel { private SmedAction dlg; public JLabel infoLabel; public JTextField infoBox; private FocusListener flInfo = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setInfo(infoBox.getText()); } }; public JLabel sourceLabel; public JTextField sourceBox; private FocusListener flSource = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setSource(sourceBox.getText()); } }; public JLabel elevLabel; public JTextField elevBox; private FocusListener flElev = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setElevation(elevBox.getText()); } }; public JLabel heightLabel; public JTextField heightBox; private FocusListener flHeight = new FocusAdapter() { @Override public void focusLost(FocusEvent e) { SmedAction.panelMain.mark.setObjectHeight(heightBox.getText()); } }; public JLabel statusLabel; public JComboBox<String> statusBox; public EnumMap<Sts, Integer> statuses = new EnumMap<>(Sts.class); private ActionListener alStatus = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (Sts sts : statuses.keySet()) { int idx = statuses.get(sts); if (SmedAction.panelMain.mark != null && (idx == statusBox.getSelectedIndex())) { SmedAction.panelMain.mark.setStatus(sts); } } } }; public JLabel constrLabel; public JComboBox<String> constrBox; public EnumMap<Cns, Integer> constructions = new EnumMap<>(Cns.class); private ActionListener alConstr = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (Cns cns : constructions.keySet()) { int idx = constructions.get(cns); if (SmedAction.panelMain.mark != null && (idx == constrBox.getSelectedIndex())) { SmedAction.panelMain.mark.setConstr(cns); } } } }; public JLabel conLabel; public JComboBox<String> conBox; public EnumMap<Con, Integer> conspicuities = new EnumMap<>(Con.class); private ActionListener alCon = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (Con con : conspicuities.keySet()) { int idx = conspicuities.get(con); if (SmedAction.panelMain.mark != null && (idx == conBox.getSelectedIndex())) { SmedAction.panelMain.mark.setConsp(con); } } } }; public JLabel reflLabel; public JComboBox<String> reflBox; public EnumMap<Con, Integer> reflectivities = new EnumMap<>(Con.class); private ActionListener alRefl = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (Con con : reflectivities.keySet()) { int idx = reflectivities.get(con); if (SmedAction.panelMain.mark != null && (idx == reflBox.getSelectedIndex())) { SmedAction.panelMain.mark.setRefl(con); } } } }; public PanelPat panelPat; private ButtonGroup regionButtons = new ButtonGroup(); public JRadioButton regionAButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionAButton.png"))); public JRadioButton regionBButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionBButton.png"))); public JRadioButton regionCButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionCButton.png"))); private ActionListener alRegion = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (regionAButton.isSelected()) { SmedAction.panelMain.mark.setRegion(Reg.A); switch (dlg.panelMain.mark.getCategory()) { case LAM_PORT: dlg.panelMain.mark.setObjColour(Col.RED); dlg.panelMain.mark.setObjPattern(Pat.NOPAT); break; case LAM_PPORT: dlg.panelMain.mark.setObjColour(Col.RED); dlg.panelMain.mark.addObjColour(Col.GREEN); dlg.panelMain.mark.addObjColour(Col.RED); dlg.panelMain.mark.setObjPattern(Pat.HSTRP); break; case LAM_STBD: dlg.panelMain.mark.setObjColour(Col.GREEN); dlg.panelMain.mark.setObjPattern(Pat.NOPAT); break; case LAM_PSTBD: dlg.panelMain.mark.setObjColour(Col.GREEN); dlg.panelMain.mark.addObjColour(Col.RED); dlg.panelMain.mark.addObjColour(Col.GREEN); dlg.panelMain.mark.setObjPattern(Pat.HSTRP); break; default: break; } regionAButton.setBorderPainted(true); } else { regionAButton.setBorderPainted(false); } if (regionBButton.isSelected()) { dlg.panelMain.mark.setRegion(Reg.B); switch (dlg.panelMain.mark.getCategory()) { case LAM_PORT: dlg.panelMain.mark.setObjColour(Col.GREEN); dlg.panelMain.mark.setObjPattern(Pat.NOPAT); break; case LAM_PPORT: dlg.panelMain.mark.setObjColour(Col.GREEN); dlg.panelMain.mark.addObjColour(Col.RED); dlg.panelMain.mark.addObjColour(Col.GREEN); dlg.panelMain.mark.setObjPattern(Pat.HSTRP); break; case LAM_STBD: dlg.panelMain.mark.setObjColour(Col.RED); dlg.panelMain.mark.setObjPattern(Pat.NOPAT); break; case LAM_PSTBD: dlg.panelMain.mark.setObjColour(Col.RED); dlg.panelMain.mark.addObjColour(Col.GREEN); dlg.panelMain.mark.addObjColour(Col.RED); dlg.panelMain.mark.setObjPattern(Pat.HSTRP); break; default: break; } regionBButton.setBorderPainted(true); } else { regionBButton.setBorderPainted(false); } if (regionCButton.isSelected()) { dlg.panelMain.mark.setRegion(Reg.C); dlg.panelMain.mark.setObjPattern(Pat.HSTRP); switch (dlg.panelMain.mark.getCategory()) { case LAM_PORT: dlg.panelMain.mark.setObjColour(Col.RED); dlg.panelMain.mark.addObjColour(Col.WHITE); dlg.panelMain.mark.addObjColour(Col.RED); dlg.panelMain.mark.addObjColour(Col.WHITE); break; case LAM_PPORT: case LAM_PSTBD: dlg.panelMain.mark.setObjColour(Col.RED); dlg.panelMain.mark.addObjColour(Col.GREEN); dlg.panelMain.mark.addObjColour(Col.RED); dlg.panelMain.mark.addObjColour(Col.GREEN); break; case LAM_STBD: dlg.panelMain.mark.setObjColour(Col.GREEN); dlg.panelMain.mark.addObjColour(Col.WHITE); dlg.panelMain.mark.addObjColour(Col.GREEN); dlg.panelMain.mark.addObjColour(Col.WHITE); break; default: break; } regionCButton.setBorderPainted(true); } else { regionCButton.setBorderPainted(false); } panelPat.syncPanel(); } }; public PanelMore(SmedAction dia) { dlg = dia; setLayout(null); panelPat = new PanelPat(dlg, Ent.BODY); panelPat.setBounds(new Rectangle(0, 0, 110, 160)); add(panelPat); add(getRegionButton(regionAButton, 110, 0, 34, 30, "RegionA")); add(getRegionButton(regionBButton, 110, 32, 34, 30, "RegionB")); add(getRegionButton(regionCButton, 110, 64, 34, 30, "RegionC")); elevLabel = new JLabel(Messages.getString("Elevation"), SwingConstants.CENTER); elevLabel.setBounds(new Rectangle(140, 0, 90, 20)); add(elevLabel); elevBox = new JTextField(); elevBox.setBounds(new Rectangle(160, 20, 50, 20)); elevBox.setHorizontalAlignment(SwingConstants.CENTER); add(elevBox); elevBox.addFocusListener(flElev); heightLabel = new JLabel(Messages.getString("Height"), SwingConstants.CENTER); heightLabel.setBounds(new Rectangle(140, 40, 90, 20)); add(heightLabel); heightBox = new JTextField(); heightBox.setBounds(new Rectangle(160, 60, 50, 20)); heightBox.setHorizontalAlignment(SwingConstants.CENTER); add(heightBox); heightBox.addFocusListener(flHeight); sourceLabel = new JLabel(Messages.getString("Source"), SwingConstants.CENTER); sourceLabel.setBounds(new Rectangle(110, 80, 130, 20)); add(sourceLabel); sourceBox = new JTextField(); sourceBox.setBounds(new Rectangle(110, 100, 130, 20)); sourceBox.setHorizontalAlignment(SwingConstants.CENTER); add(sourceBox); sourceBox.addFocusListener(flSource); infoLabel = new JLabel(Messages.getString("Information"), SwingConstants.CENTER); infoLabel.setBounds(new Rectangle(110, 120, 130, 20)); add(infoLabel); infoBox = new JTextField(); infoBox.setBounds(new Rectangle(110, 140, 130, 20)); infoBox.setHorizontalAlignment(SwingConstants.CENTER); add(infoBox); infoBox.addFocusListener(flInfo); statusLabel = new JLabel(Messages.getString("Status"), SwingConstants.CENTER); statusLabel.setBounds(new Rectangle(250, 0, 100, 20)); add(statusLabel); statusBox = new JComboBox<>(); statusBox.setBounds(new Rectangle(250, 20, 100, 20)); addStsItem("", Sts.UNKSTS); addStsItem(Messages.getString("Permanent"), Sts.PERM); addStsItem(Messages.getString("Occasional"), Sts.OCC); addStsItem(Messages.getString("Recommended"), Sts.REC); addStsItem(Messages.getString("NotInUse"), Sts.NIU); addStsItem(Messages.getString("Intermittent"), Sts.INT); addStsItem(Messages.getString("Reserved"), Sts.RESV); addStsItem(Messages.getString("Temporary"), Sts.TEMP); addStsItem(Messages.getString("Private"), Sts.PRIV); addStsItem(Messages.getString("Mandatory"), Sts.MAND); addStsItem(Messages.getString("Destroyed"), Sts.DEST); addStsItem(Messages.getString("Extinguished"), Sts.EXT); addStsItem(Messages.getString("Illuminated"), Sts.ILLUM); addStsItem(Messages.getString("Historic"), Sts.HIST); addStsItem(Messages.getString("Public"), Sts.PUB); addStsItem(Messages.getString("Synchronized"), Sts.SYNC); addStsItem(Messages.getString("Watched"), Sts.WATCH); addStsItem(Messages.getString("UnWatched"), Sts.UNWAT); addStsItem(Messages.getString("Doubtful"), Sts.DOUBT); add(statusBox); statusBox.addActionListener(alStatus); constrLabel = new JLabel(Messages.getString("Construction"), SwingConstants.CENTER); constrLabel.setBounds(new Rectangle(250, 40, 100, 20)); add(constrLabel); constrBox = new JComboBox<>(); constrBox.setBounds(new Rectangle(250, 60, 100, 20)); addCnsItem("", Cns.UNKCNS); addCnsItem(Messages.getString("Masonry"), Cns.BRICK); addCnsItem(Messages.getString("Concreted"), Cns.CONC); addCnsItem(Messages.getString("Boulders"), Cns.BOULD); addCnsItem(Messages.getString("HardSurfaced"), Cns.HSURF); addCnsItem(Messages.getString("Unsurfaced"), Cns.USURF); addCnsItem(Messages.getString("Wooden"), Cns.WOOD); addCnsItem(Messages.getString("Metal"), Cns.METAL); addCnsItem(Messages.getString("GRP"), Cns.GLAS); addCnsItem(Messages.getString("Painted"), Cns.PAINT); add(constrBox); constrBox.addActionListener(alConstr); conLabel = new JLabel(Messages.getString("Conspicuity"), SwingConstants.CENTER); conLabel.setBounds(new Rectangle(250, 80, 100, 20)); add(conLabel); conBox = new JComboBox<>(); conBox.setBounds(new Rectangle(250, 100, 100, 20)); addConItem("", Con.UNKCON); addConItem(Messages.getString("Conspicuous"), Con.CONSP); addConItem(Messages.getString("NotConspicuous"), Con.NCONS); add(conBox); conBox.addActionListener(alCon); reflLabel = new JLabel(Messages.getString("Reflectivity"), SwingConstants.CENTER); reflLabel.setBounds(new Rectangle(250, 120, 100, 20)); add(reflLabel); reflBox = new JComboBox<>(); reflBox.setBounds(new Rectangle(250, 140, 100, 20)); addReflItem("", Con.UNKCON); addReflItem(Messages.getString("Conspicuous"), Con.CONSP); addReflItem(Messages.getString("NotConspicuous"), Con.NCONS); addReflItem(Messages.getString("Reflector"), Con.REFL); add(reflBox); reflBox.addActionListener(alRefl); } public void syncPanel() { panelPat.syncPanel(); regionAButton.setBorderPainted(dlg.panelMain.mark.getRegion() == Reg.A); regionBButton.setBorderPainted(dlg.panelMain.mark.getRegion() == Reg.B); regionCButton.setBorderPainted(dlg.panelMain.mark.getRegion() == Reg.C); elevBox.setText(dlg.panelMain.mark.getElevation()); heightBox.setText(dlg.panelMain.mark.getObjectHeight()); sourceBox.setText(dlg.panelMain.mark.getSource()); infoBox.setText(dlg.panelMain.mark.getInfo()); for (Sts sts : statuses.keySet()) { int item = statuses.get(sts); if (dlg.panelMain.mark.getStatus() == sts) { statusBox.setSelectedIndex(item); } } for (Cns cns : constructions.keySet()) { int item = constructions.get(cns); if (dlg.panelMain.mark.getConstr() == cns) { constrBox.setSelectedIndex(item); } } for (Con con : conspicuities.keySet()) { int item = conspicuities.get(con); if (dlg.panelMain.mark.getConsp() == con) { conBox.setSelectedIndex(item); } } for (Con con : reflectivities.keySet()) { int item = reflectivities.get(con); if (dlg.panelMain.mark.getRefl() == con) { reflBox.setSelectedIndex(item); } } } private void addStsItem(String str, Sts sts) { statuses.put(sts, statusBox.getItemCount()); statusBox.addItem(str); } private void addCnsItem(String str, Cns cns) { constructions.put(cns, constrBox.getItemCount()); constrBox.addItem(str); } private void addConItem(String str, Con con) { conspicuities.put(con, conBox.getItemCount()); conBox.addItem(str); } private void addReflItem(String str, Con con) { reflectivities.put(con, reflBox.getItemCount()); reflBox.addItem(str); } private JRadioButton getRegionButton(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)); button.addActionListener(alRegion); regionButtons.add(button); return button; } }