001package jmri.jmrix.ieee802154.swing.nodeconfig;
002
003import java.awt.Container;
004import java.awt.FlowLayout;
005import java.awt.event.WindowEvent;
006import javax.swing.BoxLayout;
007import javax.swing.JLabel;
008import javax.swing.JPanel;
009import jmri.jmrix.ieee802154.IEEE802154Node;
010import jmri.jmrix.ieee802154.IEEE802154TrafficController;
011import org.slf4j.Logger;
012import org.slf4j.LoggerFactory;
013
014/**
015 * Frame for Editing Nodes
016 *
017 * @author Bob Jacobsen Copyright (C) 2004
018 * @author Dave Duchamp Copyright (C) 2004
019 * @author Paul Bender Copyright (C) 2013,2016
020 */
021public class EditNodeFrame extends jmri.util.JmriJFrame {
022
023    protected javax.swing.JTextField nodeAddrField = new javax.swing.JTextField();
024    protected javax.swing.JTextField nodeAddr64Field = new javax.swing.JTextField();
025    protected javax.swing.JButton editButton = new javax.swing.JButton(Bundle.getMessage("ButtonEdit"));
026    protected javax.swing.JButton cancelButton = new javax.swing.JButton(Bundle.getMessage("ButtonCancel"));
027
028    protected javax.swing.JPanel panel = new JPanel();
029
030    protected IEEE802154Node curNode = null;    // IEEE802154 Node being editted
031
032    /**
033     * Constructor method
034     * @param tc traffic controller
035     * @param node node to edit
036     */
037    public EditNodeFrame(IEEE802154TrafficController tc, IEEE802154Node node) {
038        super();
039        addHelpMenu("package.jmri.jmrix.ieee802154.swing.nodeconfig.EditNodeFrame", true);
040        curNode = node;
041    }
042
043    /**
044     * Initialize the config window
045     */
046    @Override
047    public void initComponents() {
048        setTitle(Bundle.getMessage("EditNodeWindowTitle"));
049        Container contentPane = getContentPane();
050        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
051
052        // Set up node address and node type
053        JPanel panel = new JPanel();
054        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
055        panel.add(new JLabel(Bundle.getMessage("LabelNodeAddress") + " "));
056        panel.add(nodeAddrField);
057        nodeAddrField.setToolTipText(Bundle.getMessage("TipNodeAddress"));
058        panel.add(new JLabel(Bundle.getMessage("LabelNodeAddress64") + " "));
059        panel.add(nodeAddr64Field);
060        nodeAddr64Field.setToolTipText(Bundle.getMessage("TipNodeAddress64"));
061
062        initAddressBoxes();
063        contentPane.add(panel);
064
065        // Set up buttons
066        JPanel panel4 = new JPanel();
067        panel4.setLayout(new FlowLayout());
068        editButton.setText(Bundle.getMessage("ButtonEdit"));
069        editButton.setVisible(true);
070        editButton.setToolTipText(Bundle.getMessage("TipEditButton"));
071        editButton.addActionListener(new java.awt.event.ActionListener() {
072            @Override
073            public void actionPerformed(java.awt.event.ActionEvent e) {
074                editButtonActionPerformed();
075            }
076        });
077        panel4.add(editButton);
078        panel4.add(cancelButton);
079        cancelButton.setText(Bundle.getMessage("ButtonCancel"));
080        cancelButton.setVisible(true);
081        cancelButton.setToolTipText(Bundle.getMessage("TipCancelButton"));
082        panel4.add(cancelButton);
083        cancelButton.addActionListener(new java.awt.event.ActionListener() {
084            @Override
085            public void actionPerformed(java.awt.event.ActionEvent e) {
086                cancelButtonActionPerformed();
087            }
088        });
089        contentPane.add(panel4);
090
091        // pack for display
092        pack();
093    }
094
095    /**
096     * Method to handle edit button
097     */
098    public void editButtonActionPerformed() {
099        // get node information from window
100        // all ready, update the node
101        curNode.setUserAddress(jmri.util.StringUtil.bytesFromHexString(nodeAddrField.getText()));
102        curNode.setGlobalAddress(jmri.util.StringUtil.bytesFromHexString(nodeAddr64Field.getText()));
103        this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
104    }
105
106    /**
107     * Method to handle cancel button
108     */
109    public void cancelButtonActionPerformed() {
110        // Reset
111        curNode = null;
112        // Switch buttons
113        editButton.setVisible(true);
114        cancelButton.setVisible(false);
115        this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
116    }
117
118    // Initilize the text boxes for the addresses.
119    protected void initAddressBoxes() {
120        nodeAddrField.setText(jmri.util.StringUtil.hexStringFromBytes(curNode.getUserAddress()));
121        nodeAddr64Field.setText(jmri.util.StringUtil.hexStringFromBytes(curNode.getGlobalAddress()));
122    }
123
124    // private final static Logger log = LoggerFactory.getLogger(EditNodeFrame.class);
125
126}