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}