Add file chooser for MicroPeak
authorKeith Packard <keithp@keithp.com>
Tue, 25 Dec 2012 22:45:49 +0000 (14:45 -0800)
committerKeith Packard <keithp@keithp.com>
Tue, 25 Dec 2012 22:45:49 +0000 (14:45 -0800)
Needs reasonable directory tracking

Signed-off-by: Keith Packard <keithp@keithp.com>
micropeak/Makefile.am
micropeak/MicroFileChooser.java [new file with mode: 0644]
micropeak/MicroGraph.java
micropeak/MicroPeak.java

index a3ecac7288b1173e5e8acec5ce0a4087f9a6bf14..32be90704415da436b824c528e5fb1740ee128c1 100644 (file)
@@ -12,6 +12,7 @@ micropeak_JAVA= \
        MicroData.java \
        MicroGraph.java \
        MicroSerial.java \
+       MicroFileChooser.java \
        MicroUSB.java
 
 JFREECHART_CLASS= \
diff --git a/micropeak/MicroFileChooser.java b/micropeak/MicroFileChooser.java
new file mode 100644 (file)
index 0000000..0fd63a2
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright © 2012 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.micropeak;
+
+import javax.swing.*;
+import javax.swing.filechooser.FileNameExtensionFilter;
+import java.io.*;
+import org.altusmetrum.AltosLib.*;
+
+public class MicroFileChooser extends JFileChooser {
+       JFrame  frame;
+       String  filename;
+       File    file;
+
+       public String filename() {
+               return filename;
+       }
+
+       public File file() {
+               return file;
+       }
+
+       public InputStream runDialog() {
+               int     ret;
+
+               ret = showOpenDialog(frame);
+               if (ret == APPROVE_OPTION) {
+                       file = getSelectedFile();
+                       if (file == null)
+                               return null;
+                       filename = file.getName();
+                       try {
+                               return new FileInputStream(file);
+                       } catch (FileNotFoundException fe) {
+                               JOptionPane.showMessageDialog(frame,
+                                                             fe.getMessage(),
+                                                             "Cannot open file",
+                                                             JOptionPane.ERROR_MESSAGE);
+                       }
+               }
+               return null;
+       }
+
+       public MicroFileChooser(JFrame in_frame) {
+               frame = in_frame;
+               setDialogTitle("Select MicroPeak Data File");
+               setFileFilter(new FileNameExtensionFilter("MicroPeak data file",
+                                                         "mpd"));
+       }
+}
index aac14b9a27a34fe8765bffb4208b10dc2f00233c..9192cad93d35a3a82075bce0d7a1b7f29e9ad15d 100644 (file)
@@ -65,6 +65,18 @@ public class MicroGraph {
                plot.mapDatasetToRangeAxis(index, index);
        }
        
+       public void setData (MicroData data) {
+               heightSeries.clear();
+               speedSeries.clear();
+               accelSeries.clear();
+               for (int i = 0; i < data.pressures.length; i++) {
+                       double x = data.time(i);
+                       heightSeries.add(x, data.height(i));
+                       speedSeries.add(x, data.speed(i));
+                       accelSeries.add(x, data.acceleration(i));
+               }
+       }
+
        public MicroGraph(MicroData data) {
 
                this.data = data;
@@ -73,13 +85,6 @@ public class MicroGraph {
                speedSeries = new XYSeries("Speed");
                accelSeries = new XYSeries("Acceleration");
 
-               for (int i = 0; i < data.pressures.length; i++) {
-                       double x = data.time(i);
-                       heightSeries.add(x, data.height(i));
-                       speedSeries.add(x, data.speed(i));
-                       accelSeries.add(x, data.acceleration(i));
-               }
-
                xAxis = new NumberAxis("Time (s)");
                
                xAxis.setAutoRangeIncludesZero(true);
index 82d926fb81ee67c5732ed5cfc87b38b0d70217f1..cd09c475312d24caa9ba2e3b0953a03ffc2e3888 100644 (file)
@@ -32,24 +32,31 @@ public class MicroPeak extends JFrame implements ActionListener, ItemListener {
        MicroData       data;
        Container       pane;
 
+       private void RunFile(InputStream input) {
+               try {
+                       data = new MicroData(input);
+                       graph.setData(data);
+               } catch (IOException ioe) {
+               }
+               try {
+                       input.close();
+               } catch (IOException ioe) {
+               }
+       }
+
        private void OpenFile(File filename) {
                try {
-                       FileInputStream input = new FileInputStream(filename);
-                       try {
-                               data = new MicroData(input);
-                               graph = new MicroGraph(data);
-                               pane.add(graph.panel);
-                       } catch (IOException ioe) {
-                       }
-                       try {
-                               input.close();
-                       } catch (IOException ioe) {
-                       }
+                       RunFile (new FileInputStream(filename));
                } catch (FileNotFoundException fne) {
                }
        }
 
        private void SelectFile() {
+               MicroFileChooser        chooser = new MicroFileChooser(this);
+               InputStream             input = chooser.runDialog();
+
+               if (input != null)
+                       RunFile(input);
        }
 
        private void DownloadData() {
@@ -73,17 +80,12 @@ public class MicroPeak extends JFrame implements ActionListener, ItemListener {
        public void itemStateChanged(ItemEvent e) {
        }
 
-       public MicroPeak(File filename) {
+       public MicroPeak() {
 
                this.filename = filename;
 
                pane = getContentPane();
 
-//             JLabel label = new JLabel ("Hello, World");
-//             pane.add(label);
-
-               setSize(800, 500);
-
                setTitle("MicroPeak");
 
                JMenuBar menuBar = new JMenuBar();
@@ -116,20 +118,27 @@ public class MicroPeak extends JFrame implements ActionListener, ItemListener {
                        }
                });
 
-               if (filename != null)
-                       this.OpenFile(filename);
+               graph = new MicroGraph(data);
+               pane.add(graph.panel);
+               pane.doLayout();
+               pane.validate();
+               doLayout();
+               validate();
+               Insets i = getInsets();
+               Dimension ps = pane.getPreferredSize();
+               ps.width += i.left + i.right;
+               ps.height += i.top + i.bottom;
+               setPreferredSize(ps);
+               setSize(ps);
                setVisible(true);
        }
 
-       public MicroPeak() {
-               this(null);
-       }
-
        public static void main(final String[] args) {
                boolean opened = false;
 
                for (int i = 0; i < args.length; i++) {
-                       new MicroPeak(new File(args[i]));
+                       MicroPeak m = new MicroPeak();
+                       m.OpenFile(new File(args[i]));
                        opened = true;
                }
                if (!opened)