X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=apps%2FOscilloscope%2Fjava%2FWindow.java;h=df26ebaf912b059737da3aeb6dad4185bf65bec0;hb=e9bfab607e051bae6afb47b44892ce37541d1b44;hp=d7979bf9f251b7656fbdbda5282522e06fcb488f;hpb=1ba974b83d19fc41bf80acd52726f36f7f1df297;p=tinyos-2.x.git diff --git a/apps/Oscilloscope/java/Window.java b/apps/Oscilloscope/java/Window.java index d7979bf9..df26ebaf 100644 --- a/apps/Oscilloscope/java/Window.java +++ b/apps/Oscilloscope/java/Window.java @@ -16,11 +16,10 @@ import java.awt.event.*; import java.util.*; /* The main GUI object. Build the GUI and coordinate all user activities */ -class Window -{ +class Window { Oscilloscope parent; Graph graph; - + Font smallFont = new Font("Dialog", Font.PLAIN, 8); Font boldFont = new Font("Dialog", Font.BOLD, 12); Font normalFont = new Font("Dialog", Font.PLAIN, 12); @@ -36,8 +35,8 @@ class Window /* A model for the mote table, and general utility operations on the mote list */ class MoteTableModel extends AbstractTableModel { - private ArrayList motes = new ArrayList(); - private ArrayList colors = new ArrayList(); + private ArrayList motes = new ArrayList(); + private ArrayList colors = new ArrayList(); /* Initial mote colors cycle through this list. Add more colors if you want. */ @@ -46,70 +45,82 @@ class Window Color.YELLOW, Color.GRAY, Color.YELLOW }; int cycleIndex; - + /* TableModel methods for achieving our table appearance */ public String getColumnName(int col) { - if (col == 0) + if (col == 0) { return "Mote"; - else + } else { return "Color"; + } } + public int getColumnCount() { return 2; } + public synchronized int getRowCount() { return motes.size(); } + public synchronized Object getValueAt(int row, int col) { - if (col == 0) + if (col == 0) { return motes.get(row); - else + } else { return colors.get(row); + } } + public Class getColumnClass(int col) { return getValueAt(0, col).getClass(); } - public boolean isCellEditable(int row, int col) { return col == 1; } - public synchronized void setValueAt(Object value, int row, int col) { - colors.set(row, value); + + public boolean isCellEditable(int row, int col) { + return col == 1; + } + + public synchronized void setValueAt(Object value, int row, int col) { + colors.set(row, (Color)value); fireTableCellUpdated(row, col); graph.repaint(); } /* Return mote id of i'th mote */ - int get(int i) { return ((Integer)motes.get(i)).intValue(); } + int get(int i) { return (motes.get(i)).intValue(); } /* Return color of i'th mote */ - Color getColor(int i) { return (Color)colors.get(i); } - + Color getColor(int i) { return colors.get(i); } + /* Return number of motes */ int size() { return motes.size(); } - + /* Add a new mote */ synchronized void newNode(int nodeId) { /* Shock, horror. No binary search. */ int i, len = motes.size(); - - for (i = 0; ; i++) + + for (i = 0; ; i++) { if (i == len || nodeId < get(i)) { motes.add(i, new Integer(nodeId)); // Cycle through a set of initial colors colors.add(i, cycle[cycleIndex++ % cycle.length]); break; } + } fireTableRowsInserted(i, i); } - + /* Remove all motes */ void clear() { - motes = new ArrayList(); - colors = new ArrayList(); + motes = new ArrayList(); + colors = new ArrayList(); fireTableDataChanged(); } - } + } /* End of MoteTableModel */ /* A simple full-color cell */ static class MoteColor extends JLabel implements TableCellRenderer { public MoteColor() { setOpaque(true); } public Component getTableCellRendererComponent (JTable table, Object color, - boolean isSelected, boolean hasFocus, int row, int column) { + boolean isSelected, boolean hasFocus, + int row, int column) { setBackground((Color)color); return this; } @@ -131,13 +142,13 @@ class Window label.setFont(boldFont); return label; } - + JLabel makeSmallLabel(String txt, int alignment) { JLabel label = new JLabel(txt, alignment); label.setFont(smallFont); return label; } - + JTextField makeTextField(int columns, ActionListener action) { JTextField tf = new JTextField(columns); tf.setFont(normalFont); @@ -152,43 +163,45 @@ class Window main.setMinimumSize(new Dimension(500, 250)); main.setPreferredSize(new Dimension(800, 400)); - + // Three panels: mote list, graph, controls moteListModel = new MoteTableModel(); JTable moteList = new JTable(moteListModel); moteList.setDefaultRenderer(Color.class, new MoteColor()); - moteList.setDefaultEditor(Color.class, new ColorCellEditor("Pick Mote Color")); + moteList.setDefaultEditor(Color.class, + new ColorCellEditor("Pick Mote Color")); moteList.setPreferredScrollableViewportSize(new Dimension(100, 400)); JScrollPane motePanel = new JScrollPane(); motePanel.getViewport().add(moteList, null); main.add(motePanel, BorderLayout.WEST); - + graph = new Graph(this); main.add(graph, BorderLayout.CENTER); - + // Controls. Organised using box layouts. - + // Sample period. JLabel sampleLabel = makeLabel("Sample period (ms):", JLabel.RIGHT); sampleText = makeTextField(6, new ActionListener() { public void actionPerformed(ActionEvent e) { setSamplePeriod(); } } ); updateSamplePeriod(); - + // Clear data. JButton clearButton = makeButton("Clear data", new ActionListener() { public void actionPerformed(ActionEvent e) { clearData(); } } ); - + // Adjust X-axis zoom. Box xControl = new Box(BoxLayout.Y_AXIS); xLabel = makeLabel("", JLabel.CENTER); final JSlider xSlider = new JSlider(JSlider.HORIZONTAL, 0, 8, graph.scale); - Hashtable xTable = new Hashtable(); - for (int i = 0; i <= 8; i += 2) + Hashtable xTable = new Hashtable(); + for (int i = 0; i <= 8; i += 2) { xTable.put(new Integer(i), makeSmallLabel("" + (Graph.MIN_WIDTH << i), JLabel.CENTER)); + } xSlider.setLabelTable(xTable); xSlider.setPaintLabels(true); graph.updateXLabel(); @@ -196,19 +209,19 @@ class Window xSlider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { //if (!xSlider.getValueIsAdjusting()) - graph.setScale((int)xSlider.getValue()); + graph.setScale((int)xSlider.getValue()); } }); xControl.add(xLabel); xControl.add(xSlider); - + // Adjust Y-axis range. JLabel yLabel = makeLabel("Y:", JLabel.RIGHT); yText = makeTextField(12, new ActionListener() { public void actionPerformed(ActionEvent e) { setYAxis(); } } ); yText.setText(graph.gy0 + " - " + graph.gy1); - + Box controls = new Box(BoxLayout.X_AXIS); controls.add(clearButton); controls.add(Box.createHorizontalGlue()); @@ -251,8 +264,13 @@ class Window String min = val.substring(0, dash).trim(); String max = val.substring(dash + 1).trim(); - if (!graph.setYAxis(Integer.parseInt(min), Integer.parseInt(max))) - error("Invalid range " + min + " - " + max + " (expected values between 0 and 65535)"); + if (!graph.setYAxis(Integer.parseInt(min), Integer.parseInt(max))) { + error("Invalid range " + + min + + " - " + + max + + " (expected values between 0 and 65535)"); + } return; } } @@ -265,8 +283,9 @@ class Window String periodS = sampleText.getText().trim(); try { int newPeriod = Integer.parseInt(periodS); - if (parent.setInterval(newPeriod)) + if (parent.setInterval(newPeriod)) { return; + } } catch (NumberFormatException e) { } error("Invalid sample period " + periodS);