package me.legrange.panstamp.gui; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import javax.swing.JTextField; import me.legrange.panstamp.NetworkException; import me.legrange.panstamp.PanStamp; import me.legrange.panstamp.event.AbstractPanStampListener; import me.legrange.panstamp.gui.model.HexDocument; import me.legrange.panstamp.gui.model.IntegerDocument; import me.legrange.panstamp.gui.model.Model; /** * * @author gideon */ public class PanStampSettingsDialog extends javax.swing.JDialog { /** * Creates new form PanStampSettingsDialog * * @param parent * @param model * @param ps */ public PanStampSettingsDialog(java.awt.Frame parent, Model model, PanStamp ps) { super(parent, true); this.ps = ps; this.model = model; initComponents(); setLocationRelativeTo(null); } private String getChannel() { try { return "" + ps.getChannel(); } catch (NetworkException ex) { Logger.getLogger(PanStampSettingsDialog.class.getName()).log(Level.SEVERE, null, ex); } return "<unknown>"; } private String getSecurityOption() { try { return "" + ps.getSecurityOption(); } catch (NetworkException ex) { Logger.getLogger(PanStampSettingsDialog.class.getName()).log(Level.SEVERE, null, ex); } return "<unknown>"; } private String getTxInterval() { try { return "" + ps.getTxInterval(); } catch (NetworkException ex) { Logger.getLogger(PanStampSettingsDialog.class.getName()).log(Level.SEVERE, null, ex); } return "<unknown>"; } private String getNetwork() { try { return String.format("%4x", ps.getNetworkId()); } catch (NetworkException ex) { Logger.getLogger(PanStampSettingsDialog.class.getName()).log(Level.SEVERE, null, ex); } return "<unknown>"; } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { configTabs = new javax.swing.JTabbedPane(); networkPanel = new javax.swing.JPanel(); channelLabel = new javax.swing.JLabel(); networkILabel = new javax.swing.JLabel(); addressLabel = new javax.swing.JLabel(); securityLabel = new javax.swing.JLabel(); intervalLabel = new javax.swing.JLabel(); channelField = new javax.swing.JTextField(); networkField = new javax.swing.JTextField(); addressField = new javax.swing.JTextField(); securityField = new javax.swing.JTextField(); intervalField = new javax.swing.JTextField(); okButton = new javax.swing.JButton(); cancelButton = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle(String.format("Mote %d - Settings", ps.getAddress())); setResizable(false); channelLabel.setText("Frequency channel:"); networkILabel.setText("Network ID:"); addressLabel.setText("Device address:"); securityLabel.setText("Security option:"); intervalLabel.setText("Periodic TX interval:"); channelField.setColumns(4); channelField.setDocument(new IntegerDocument(0,255) ); channelField.setText(String.format(getChannel())); networkField.setColumns(4); networkField.setDocument(new HexDocument(0,0xFFFe)); networkField.setText(getNetwork()); networkField.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { networkFieldActionPerformed(evt); } }); addressField.setColumns(4); addressField.setDocument(new IntegerDocument(0,255)); addressField.setText(String.format("%d", ps.getAddress())); securityField.setColumns(4); securityField.setDocument(new IntegerDocument(0,255)); securityField.setText(getSecurityOption()); intervalField.setColumns(4); intervalField.setDocument(new IntegerDocument(0,65535)); intervalField.setText(getTxInterval()); javax.swing.GroupLayout networkPanelLayout = new javax.swing.GroupLayout(networkPanel); networkPanel.setLayout(networkPanelLayout); networkPanelLayout.setHorizontalGroup( networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(networkPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(networkPanelLayout.createSequentialGroup() .addComponent(intervalLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(intervalField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(networkPanelLayout.createSequentialGroup() .addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(channelLabel) .addComponent(networkILabel) .addComponent(addressLabel) .addComponent(securityLabel)) .addGap(18, 18, 18) .addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(securityField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(addressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(networkField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(channelField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addContainerGap(160, Short.MAX_VALUE)) ); networkPanelLayout.setVerticalGroup( networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(networkPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(channelLabel) .addComponent(channelField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(networkILabel) .addComponent(networkField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(addressLabel) .addComponent(addressField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(securityLabel) .addComponent(securityField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(networkPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(intervalLabel) .addComponent(intervalField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(38, Short.MAX_VALUE)) ); configTabs.addTab("Settings", networkPanel); okButton.setText("OK"); okButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { okButtonActionPerformed(evt); } }); cancelButton.setText("Cancel"); cancelButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancelButtonActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(configTabs) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addGap(17, 17, 17) .addComponent(okButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(cancelButton) .addGap(18, 18, 18)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(configTabs, javax.swing.GroupLayout.PREFERRED_SIZE, 260, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(okButton) .addComponent(cancelButton)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void networkFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_networkFieldActionPerformed // TODO add your handling code here: }//GEN-LAST:event_networkFieldActionPerformed private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed try { ps.setAddress(getIntValue(addressField)); ps.setChannel(getIntValue(channelField)); ps.setNetworkId(Integer.parseInt(networkField.getText(), 16)); ps.setSecurityOption(getIntValue(securityField)); ps.setTxInterval(getIntValue(intervalField)); if (ps.getSyncState() != 1) { JOptionPane.showMessageDialog(null, String.format("Device %d is in sleep mode. You need to manually put the device into SYNC mode", ps.getAddress()), "Notice", JOptionPane.INFORMATION_MESSAGE); } dispose(); } catch (NetworkException ex) { Logger.getLogger(PanStampSettingsDialog.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_okButtonActionPerformed private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed dispose(); }//GEN-LAST:event_cancelButtonActionPerformed private int getIntValue(JTextField field) { return Integer.parseInt(field.getText()); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextField addressField; private javax.swing.JLabel addressLabel; private javax.swing.JButton cancelButton; private javax.swing.JTextField channelField; private javax.swing.JLabel channelLabel; private javax.swing.JTabbedPane configTabs; private javax.swing.JTextField intervalField; private javax.swing.JLabel intervalLabel; private javax.swing.JTextField networkField; private javax.swing.JLabel networkILabel; private javax.swing.JPanel networkPanel; private javax.swing.JButton okButton; private javax.swing.JTextField securityField; private javax.swing.JLabel securityLabel; // End of variables declaration//GEN-END:variables private final PanStamp ps; private final Model model; }