Skip to content

Commit dc2989f

Browse files
committed
Merge pull request #2 from stipmonster/new-extension
added toolbar, buttons do nothing for the moment
2 parents 967c441 + b5569f5 commit dc2989f

File tree

6 files changed

+507
-110
lines changed

6 files changed

+507
-110
lines changed

app/src/processing/app/Editor.java

+4
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,10 @@ protected void selectSerialPort(String name) {
954954
serialMonitor.closeSerialPort();
955955
serialMonitor.setVisible(false);
956956
serialMonitor = new SerialMonitor(Preferences.get("serial.port"));
957+
graphMonitor.closeSerialPort();
958+
graphMonitor.setVisible(false);
959+
graphMonitor = new GraphMonitor(Preferences.get("serial.port"));
960+
957961
//System.out.println("set to " + get("serial.port"));
958962
}
959963

app/src/processing/app/Graph.java

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package processing.app;
2+
//import processing.core.*;
3+
4+
import processing.app.debug.MessageConsumer;
5+
6+
7+
import java.io.*;
8+
import java.util.*;
9+
import org.jfree.chart.*;
10+
import org.jfree.chart.ChartFactory;
11+
import org.jfree.chart.ChartPanel;
12+
import org.jfree.chart.JFreeChart;
13+
import org.jfree.chart.axis.NumberTickUnit;
14+
import org.jfree.chart.axis.TickUnits;
15+
import org.jfree.chart.axis.ValueAxis;
16+
import org.jfree.chart.plot.DatasetRenderingOrder;
17+
import org.jfree.chart.plot.PlotOrientation;
18+
import org.jfree.chart.plot.XYPlot;
19+
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
20+
import org.jfree.chart.renderer.xy.XYStepRenderer;
21+
import org.jfree.data.time.Millisecond;
22+
import org.jfree.data.time.TimeTableXYDataset;
23+
24+
25+
public class Graph {
26+
27+
private TimeTableXYDataset data;
28+
private String name;
29+
public Graph(){
30+
data = new TimeTableXYDataset();
31+
name="a";
32+
}
33+
public void add(Millisecond y, int x){
34+
data.add(y,x,name);
35+
}
36+
public void reset(){
37+
// data=null; //does not work :S
38+
// data=new TimeTableXYDataset();
39+
}
40+
public ChartPanel panel(){
41+
JFreeChart chart = ChartFactory.createXYLineChart(null, null, null,
42+
data, PlotOrientation.VERTICAL,
43+
false, false, false);
44+
ChartPanel panel = new ChartPanel(chart);
45+
46+
return panel;
47+
}
48+
}

app/src/processing/app/GraphMonitor.java

+76-109
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import processing.core.*;
2323

2424
import java.awt.*;
25-
import java.util.Date;
25+
import java.util.*;
2626
import java.awt.event.*;
2727
import javax.swing.*;
2828
import javax.swing.border.*;
@@ -40,7 +40,7 @@
4040
import org.jfree.chart.plot.XYPlot;
4141
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
4242
import org.jfree.chart.renderer.xy.XYStepRenderer;
43-
import org.jfree.data.time.Second;
43+
import org.jfree.data.time.Millisecond;
4444
import org.jfree.data.time.TimeTableXYDataset;
4545
public class GraphMonitor extends JFrame implements MessageConsumer {
4646
private Serial serial;
@@ -49,19 +49,23 @@ public class GraphMonitor extends JFrame implements MessageConsumer {
4949
private JTextArea graphArea;
5050
private JScrollPane scrollPane;
5151
private JScrollPane graphScrollPane;
52-
52+
private GraphToolbar toolbar;
5353
private JTextField textField;
5454
private JButton sendButton;
5555
private JCheckBox autoscrollBox;
5656
private JComboBox lineEndings;
5757
private JComboBox serialRates;
5858
private int serialRate;
59-
59+
private boolean start=false;
60+
private long starttime;
61+
private LinkedList <Character> stringdata;
62+
private Graph graph;
63+
private int hz=1000;
6064
public GraphMonitor(String port) {
6165
super(port);
6266

6367
this.port = port;
64-
68+
graph= new Graph();
6569
addWindowListener(new WindowAdapter() {
6670
public void windowClosing(WindowEvent e) {
6771
closeSerialPort();
@@ -78,101 +82,29 @@ public void actionPerformed(ActionEvent e) {
7882
}});
7983

8084
getContentPane().setLayout(new BorderLayout());
81-
85+
stringdata= new LinkedList<Character>();
8286
Font font = Theme.getFont("console.font");
83-
84-
textArea = new JTextArea(16, 20);
87+
toolbar= new GraphToolbar(this,null);
88+
textArea = new JTextArea(16, 10);
8589
textArea.setEditable(false);
8690
textArea.setFont(font);
8791
// don't automatically update the caret. that way we can manually decide
8892
// whether or not to do so based on the autoscroll checkbox.
8993
((DefaultCaret)textArea.getCaret()).setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
90-
94+
textField = new JTextField(40);
95+
textField.addActionListener(new ActionListener() {
96+
public void actionPerformed(ActionEvent e) {
97+
hz=1000/Integer.valueOf(textField.getText()).intValue();
98+
}});
9199
scrollPane = new JScrollPane(textArea);
92-
JPanel pane = new JPanel();
100+
JPanel pane = new JPanel();
93101
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
94102
pane.setBorder(new EmptyBorder(4, 4, 4, 4));
95-
pane.add(this.graph());
96-
pane.add(scrollPane);
97-
getContentPane().add(pane, BorderLayout.CENTER);
98-
99-
100-
pane = new JPanel();
101-
pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));
102-
pane.setBorder(new EmptyBorder(4, 4, 4, 4));
103-
104-
// textField = new JTextField(40);
105-
// textField.addActionListener(new ActionListener() {
106-
// public void actionPerformed(ActionEvent e) {
107-
// send(textField.getText());
108-
// textField.setText("");
109-
// }});
110-
111-
// sendButton = new JButton("Send");
112-
// sendButton.addActionListener(new ActionListener() {
113-
// public void actionPerformed(ActionEvent e) {
114-
// send(textField.getText());
115-
// textField.setText("");
116-
// }});
117-
118-
// pane.add(textField);
119-
// pane.add(Box.createRigidArea(new Dimension(4, 0)));
120-
// pane.add(sendButton);
121-
//
122-
// getContentPane().add(pane, BorderLayout.NORTH);
123-
124-
// pane = new JPanel();
125-
// pane.setLayout(new BoxLayout(pane, BoxLayout.X_AXIS));
126-
// pane.setBorder(new EmptyBorder(4, 4, 4, 4));
127-
//
128-
// autoscrollBox = new JCheckBox("Autoscroll", true);
129-
//
130-
// lineEndings = new JComboBox(new String[] { "No line ending", "Newline", "Carriage return", "Both NL & CR" });
131-
// lineEndings.addActionListener(new ActionListener() {
132-
// public void actionPerformed(ActionEvent event) {
133-
// Preferences.setInteger("serial.line_ending", lineEndings.getSelectedIndex());
134-
// }
135-
// });
136-
// if (Preferences.get("serial.line_ending") != null) {
137-
// lineEndings.setSelectedIndex(Preferences.getInteger("serial.line_ending"));
138-
// }
139-
// lineEndings.setMaximumSize(lineEndings.getMinimumSize());
140-
//
141-
// String[] serialRateStrings = {
142-
// "300","1200","2400","4800","9600","14400",
143-
// "19200","28800","38400","57600","115200"
144-
// };
145-
//
146-
// serialRates = new JComboBox();
147-
// for (int i = 0; i < serialRateStrings.length; i++)
148-
// serialRates.addItem(serialRateStrings[i] + " baud");
149-
//
150-
// serialRate = Preferences.getInteger("serial.debug_rate");
151-
// serialRates.setSelectedItem(serialRate + " baud");
152-
// serialRates.addActionListener(new ActionListener() {
153-
// public void actionPerformed(ActionEvent event) {
154-
// String wholeString = (String) serialRates.getSelectedItem();
155-
// String rateString = wholeString.substring(0, wholeString.indexOf(' '));
156-
// serialRate = Integer.parseInt(rateString);
157-
// Preferences.set("serial.debug_rate", rateString);
158-
// closeSerialPort();
159-
// try {
160-
// openSerialPort();
161-
// } catch (SerialException e) {
162-
// System.err.println(e);
163-
// }
164-
// }});
165-
//
166-
// serialRates.setMaximumSize(serialRates.getMinimumSize());
167-
//
168-
// pane.add(autoscrollBox);
169-
// pane.add(Box.createHorizontalGlue());
170-
// pane.add(lineEndings);
171-
// pane.add(Box.createRigidArea(new Dimension(8, 0)));
172-
// pane.add(serialRates);
173-
//
174-
// getContentPane().add(pane, BorderLayout.SOUTH);
175-
103+
pane.add(graph.panel());
104+
pane.add(scrollPane);
105+
getContentPane().add(toolbar,BorderLayout.NORTH);
106+
getContentPane().add(pane, BorderLayout.CENTER);
107+
getContentPane().add(textField, BorderLayout.SOUTH);
176108
pack();
177109

178110
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
@@ -238,27 +170,62 @@ public void closeSerialPort() {
238170
}
239171

240172
public void message(final String s) {
241-
SwingUtilities.invokeLater(new Runnable() {
173+
//System.err.println(serial.readString());
174+
SwingUtilities.invokeLater(new Runnable() {//TODO implement 2 arrays for x and y values
242175
public void run() {
243-
textArea.append(s);
244-
if (autoscrollBox.isSelected()) {
245-
textArea.setCaretPosition(textArea.getDocument().getLength());
176+
if (start) {
177+
addtobuffer(s);
246178
}
179+
textArea.append(s);
180+
textArea.setCaretPosition(textArea.getDocument().getLength());
247181
}});
248182
}
249-
public ChartPanel graph(){
250-
TimeTableXYDataset data = new TimeTableXYDataset();
251-
Second second = new Second(new Date(System.currentTimeMillis() + 1000));
252-
data.add(second, 20.0,"a");
253-
Second second2 = new Second(new Date(System.currentTimeMillis() + 2000));
254-
data.add(second2, 30.8,"a");
255-
Second second3 = new Second(new Date(System.currentTimeMillis() + 3000));
256-
data.add(second3, 60.5,"a");
257-
JFreeChart chart = ChartFactory.createXYLineChart(null, null, null,
258-
data, PlotOrientation.VERTICAL,
259-
false, false, false);
260-
ChartPanel panel = new ChartPanel(chart);
261-
262-
return panel;
183+
public void addtobuffer(String s){
184+
for (int i=0; i==(s.length()-1);i++ ) {
185+
stringdata.add(s.charAt(i));
186+
}
187+
188+
}
189+
public void handleStart(){
190+
start=true;
191+
starttime=System.currentTimeMillis();
192+
//serial.write("****");
193+
//graph.reset();
194+
if (textField.getText()!="") {
195+
hz=1000/Integer.valueOf(textField.getText()).intValue();
196+
197+
}
198+
}
199+
public void handleStop(){
200+
start=false;
201+
202+
//serial.write("****");
203+
parse();
204+
}
205+
public void parse(){
206+
graph.reset();
207+
int count=0;
208+
String number="";
209+
char c;
210+
int isNumber=1;
211+
while(stringdata.size()!=0){
212+
while(isNumber==1){
213+
c=stringdata.poll();
214+
if(Character.isDigit(c)){
215+
number +=c;
216+
}else{
217+
isNumber=0;
218+
}
219+
}
220+
if(number.length()>0){
221+
int temp= Integer.valueOf( number ).intValue();
222+
graph.add(new Millisecond(new Date(count*hz)),temp);
223+
number="";
224+
count++;
225+
}
226+
isNumber=1;
227+
}
228+
//textArea.append("====");
229+
263230
}
264231
}

0 commit comments

Comments
 (0)