]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - support/sdk/java/net/tinyos/sf/SFWindow.java
Merge devel code into the trunk.
[tinyos-2.x.git] / support / sdk / java / net / tinyos / sf / SFWindow.java
diff --git a/support/sdk/java/net/tinyos/sf/SFWindow.java b/support/sdk/java/net/tinyos/sf/SFWindow.java
new file mode 100644 (file)
index 0000000..7533f8f
--- /dev/null
@@ -0,0 +1,257 @@
+// $Id$
+
+/*                                                                     tab:4
+ * "Copyright (c) 2000-2003 The Regents of the University  of California.  
+ * All rights reserved.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose, without fee, and without written agreement is
+ * hereby granted, provided that the above copyright notice, the following
+ * two paragraphs and the author appear in all copies of this software.
+ * 
+ * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+ * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
+ * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
+ *
+ * Copyright (c) 2002-2003 Intel Corporation
+ * All rights reserved.
+ *
+ * This file is distributed under the terms in the attached INTEL-LICENSE     
+ * file. If you do not find these files, copies can be found by writing to
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
+ * 94704.  Attention:  Intel License Inquiry.
+ */
+
+
+/**
+ * File: ControlWindow.java
+ *
+ * Description:
+ * This class displays the GUI that allows the serial forwarder
+ * to be more easily configured
+ *
+ * @author <a href="mailto:bwhull@sourceforge.net">Bret Hull</a>
+ * @author <a href="mailto:dgay@intel-research.net">David Gay</a>
+ */
+
+package net.tinyos.sf;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+import net.tinyos.packet.*;
+
+public class SFWindow extends JPanel implements WindowListener, SFRenderer {
+    JScrollPane   mssgPanel             = new JScrollPane();
+    JTextArea     mssgArea              = new JTextArea();
+    BorderLayout  toplayout             = new BorderLayout();
+    JTabbedPane   pnlTabs               = new JTabbedPane();
+    JLabel        labelPacketsSent      = new JLabel();
+    JLabel        labelServerPort       = new JLabel();
+    JTextField    fieldServerPort       = new JTextField();
+    JLabel        labelMoteCom          = new JLabel();
+    JLabel        labelPacketsReceived  = new JLabel();
+    JTextField    fieldMoteCom          = new JTextField();
+    ButtonGroup   bttnGroup             = new ButtonGroup();
+    JPanel        pnlMain               = new JPanel();
+    GridLayout    gridLayout1           = new GridLayout();
+    JLabel        labelNumClients       = new JLabel();
+    JCheckBox     cbVerboseMode         = new JCheckBox();
+    JButton       bStopServer           = new JButton();
+    GridLayout    gridLayout2           = new GridLayout();
+    JButton       bHelp                 = new JButton();
+    JButton       bClear                 = new JButton();
+    JButton       bQuit                 = new JButton();
+    private SerialForwarder sf;
+
+    public SFWindow(SerialForwarder SF) {
+       sf = SF;
+       try {
+           jbInit();
+       }
+       catch(Exception e) {
+           e.printStackTrace();
+           System.exit(2);
+       }
+    }
+
+    static public SFWindow createGui( SerialForwarder sf, String title )
+    {
+        JFrame mainFrame = new JFrame(title);
+        SFWindow cntrlWndw = new SFWindow(sf);
+        mainFrame.setSize(cntrlWndw.getPreferredSize());
+        mainFrame.getContentPane().add("Center", cntrlWndw);
+        mainFrame.show();
+        mainFrame.addWindowListener(cntrlWndw);
+        return cntrlWndw;
+    }
+
+    private void jbInit() throws Exception {
+       this.setLayout(toplayout);
+
+       mssgPanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
+       mssgPanel.setAutoscrolls(true);
+       this.setMinimumSize(new Dimension(500, 250));
+       this.setPreferredSize(new Dimension(500, 300));
+       labelPacketsSent.setFont(new java.awt.Font("Dialog", 1, 10));
+       labelPacketsSent.setHorizontalTextPosition(SwingConstants.LEFT);
+       labelPacketsSent.setText("Pckts Read: 0");
+       labelServerPort.setFont(new java.awt.Font("Dialog", 1, 10));
+       labelServerPort.setText("Server Port:");
+       fieldServerPort.setFont(new java.awt.Font("Dialog", 0, 10));
+       fieldServerPort.setText(Integer.toString (sf.serverPort));
+       labelMoteCom.setFont(new java.awt.Font("Dialog", 1, 10));
+       labelMoteCom.setText("Mote Communications:");
+
+       labelPacketsReceived.setFont(new java.awt.Font("Dialog", 1, 10));
+       labelPacketsReceived.setHorizontalTextPosition(SwingConstants.LEFT);
+       labelPacketsReceived.setText("Pckts Wrttn: 0");
+       fieldMoteCom.setFont(new java.awt.Font("Dialog", 0, 10));
+       fieldMoteCom.setText(sf.motecom);
+
+       // Input CheckBoxes
+       ActionListener cbal = new ActionListener() {
+               public void actionPerformed(ActionEvent e) {
+                   updateGlobals();
+               }
+           };
+
+       bQuit.addActionListener(new java.awt.event.ActionListener() {
+               public void actionPerformed(ActionEvent e) {
+                   shutdown();
+               }
+           });
+        bQuit.setText("Quit");
+        bQuit.setFont(new java.awt.Font("Dialog", 1, 10));
+
+       bClear.addActionListener(new java.awt.event.ActionListener() {
+               public synchronized void actionPerformed(ActionEvent e) {
+                   mssgArea.setText("");
+                   sf.clearCounts();
+               }
+           });
+        bClear.setText("Clear");
+        bClear.setFont(new java.awt.Font("Dialog", 1, 10));
+
+       bHelp.addActionListener(new java.awt.event.ActionListener() {
+               public void actionPerformed(ActionEvent e) {
+                   sf.message("The Mote communications field must");
+                   sf.message("specify a known packet source, one of:");
+                   sf.message(BuildSource.sourceHelp());
+               }
+           });
+        bHelp.setText("Help");
+        bHelp.setFont(new java.awt.Font("Dialog", 1, 10));
+
+       pnlMain.setLayout(gridLayout1);
+       pnlMain.setMinimumSize(new Dimension(150, 75));
+       pnlMain.setPreferredSize(new Dimension(150, 75));
+       gridLayout1.setRows(13);
+       labelNumClients.setFont(new java.awt.Font("Dialog", 1, 10));
+       labelNumClients.setText("Num Clients: 0");
+       cbVerboseMode.setSelected(sf.verbose.on);
+       cbVerboseMode.setText("Verbose Mode");
+       cbVerboseMode.setFont(new java.awt.Font("Dialog", 1, 10));
+       cbVerboseMode.addActionListener(cbal);
+
+       bStopServer.setFont(new java.awt.Font("Dialog", 1, 10));
+       bStopServer.setText("Stop Server");
+       bStopServer.addActionListener(new java.awt.event.ActionListener() {
+               public void actionPerformed(ActionEvent e) {
+                   if (sf.listenServer != null) {
+                       sf.stopListenServer();
+                   }
+                   else {
+                       updateGlobals();
+                       sf.startListenServer();
+                   }
+               }
+           });
+       gridLayout2.setRows(15);
+       gridLayout2.setColumns(1);
+
+       toplayout.setHgap(1);
+       toplayout.setVgap(1);
+       this.add(mssgPanel, BorderLayout.CENTER);
+       this.add(pnlTabs, BorderLayout.EAST);
+       pnlTabs.add(pnlMain, "Main");
+
+       // Main Panel Setup
+       pnlMain.add(labelServerPort, null);
+       pnlMain.add(fieldServerPort, null);
+       pnlMain.add(labelMoteCom, null);
+       pnlMain.add(fieldMoteCom, null);
+       pnlMain.add(bStopServer, null);
+
+       pnlMain.add(cbVerboseMode, null);
+
+       pnlMain.add(labelPacketsSent, null);
+       pnlMain.add(labelPacketsReceived, null);
+       pnlMain.add(labelNumClients, null);
+        pnlMain.add(bHelp, null);
+        pnlMain.add(bClear, null);
+        pnlMain.add(bQuit, null);
+
+       mssgPanel.getViewport().add(mssgArea, null);
+       mssgArea.setFont(new java.awt.Font("Monospaced", Font.PLAIN, 12));
+    }
+
+    public synchronized void windowClosing (WindowEvent e) {
+       shutdown();
+    }
+
+    public void windowClosed      (WindowEvent e) { }
+    public void windowActivated   (WindowEvent e) { }
+    public void windowIconified   (WindowEvent e) { }
+    public void windowDeactivated (WindowEvent e) { }
+    public void windowDeiconified (WindowEvent e) { }
+    public void windowOpened      (WindowEvent e) { }
+
+    public synchronized void message(String mssg) {
+       mssgArea.append(mssg + "\n");
+       mssgArea.setCaretPosition(mssgArea.getDocument().getLength());
+    }
+
+    public void updatePacketsRead(int numPackets) {
+       labelPacketsSent.setText("Pckts Read: " + numPackets);
+    }
+
+    public void updatePacketsWritten(int numPackets) {
+       labelPacketsReceived.setText("Pckts Wrttn: " + numPackets);
+    }
+
+    public void updateNumClients(int numClients) {
+       labelNumClients.setText("Num Clients: " + numClients);
+    }
+
+    private void updateGlobals() {
+       // set application/communications defaults
+       sf.verbose.on          = cbVerboseMode.isSelected();
+       sf.motecom             = fieldMoteCom.getText();
+       sf.serverPort          = Integer.parseInt(fieldServerPort.getText());
+    }
+
+    public void updateListenServerStatus(boolean running) {
+       if (!running) {
+           bStopServer.setText("Start Server");
+       }
+       else {
+           bStopServer.setText("Stop Server");
+       }
+    }
+
+    synchronized private void shutdown() {
+        //sf.cntrlWndw = null;
+       sf.stopListenServer();
+        System.out.println("Serial Forwarder Exited Normally\n");
+        System.exit(0);
+    }
+
+}