summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--micropeak/Makefile.am1
-rw-r--r--micropeak/MicroData.java4
-rw-r--r--micropeak/MicroDataPoint.java7
-rw-r--r--micropeak/MicroExport.java106
-rw-r--r--micropeak/MicroPeak.java22
5 files changed, 136 insertions, 4 deletions
diff --git a/micropeak/Makefile.am b/micropeak/Makefile.am
index 26431bd5..f5f8ccd9 100644
--- a/micropeak/Makefile.am
+++ b/micropeak/Makefile.am
@@ -12,6 +12,7 @@ micropeak_JAVA= \
MicroData.java \
MicroDataPoint.java \
MicroDownload.java \
+ MicroExport.java \
MicroFrame.java \
MicroGraph.java \
MicroSave.java \
diff --git a/micropeak/MicroData.java b/micropeak/MicroData.java
index 2afd3cd7..836d3c35 100644
--- a/micropeak/MicroData.java
+++ b/micropeak/MicroData.java
@@ -221,6 +221,10 @@ public class MicroData {
return alt;
}
+ public double pressure(int i) {
+ return pressures[i];
+ }
+
public double height(int i) {
return altitude(i) - ground_altitude;
}
diff --git a/micropeak/MicroDataPoint.java b/micropeak/MicroDataPoint.java
index 3fd1e641..c58708e6 100644
--- a/micropeak/MicroDataPoint.java
+++ b/micropeak/MicroDataPoint.java
@@ -19,11 +19,13 @@ package org.altusmetrum.micropeak;
public class MicroDataPoint {
public double time;
+ public double pressure;
public double height;
public double speed;
public double accel;
- public MicroDataPoint (double height, double speed, double accel, double time) {
+ public MicroDataPoint (double pressure, double height, double speed, double accel, double time) {
+ this.pressure = pressure;
this.height = height;
this.speed = speed;
this.accel = accel;
@@ -31,7 +33,8 @@ public class MicroDataPoint {
}
public MicroDataPoint(MicroData data, int i) {
- this(data.height(i),
+ this(data.pressure(i),
+ data.height(i),
data.speed(i),
data.acceleration(i),
data.time(i));
diff --git a/micropeak/MicroExport.java b/micropeak/MicroExport.java
new file mode 100644
index 00000000..06a03469
--- /dev/null
+++ b/micropeak/MicroExport.java
@@ -0,0 +1,106 @@
+/*
+ * 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 java.io.*;
+import java.util.ArrayList;
+
+import java.awt.*;
+import javax.swing.*;
+import javax.swing.filechooser.FileNameExtensionFilter;
+import org.altusmetrum.AltosLib.*;
+import org.altusmetrum.altosuilib.*;
+
+public class MicroExport extends JFileChooser {
+
+ JFrame frame;
+ MicroData data;
+
+ public boolean runDialog() {
+ int ret;
+
+ setSelectedFile(new File(AltosLib.replace_extension(data.name, ".csv")));
+ for (;;) {
+ ret = showSaveDialog(frame);
+ if (ret != APPROVE_OPTION)
+ return false;
+ File file;
+ String filename;
+ file = getSelectedFile();
+ if (file == null)
+ continue;
+ if (!file.getName().contains(".")) {
+ String fullname = file.getPath();
+ file = new File(fullname.concat(".csv"));
+ }
+ filename = file.getName();
+ if (file.exists()) {
+ if (file.isDirectory()) {
+ JOptionPane.showMessageDialog(frame,
+ String.format("\"%s\" is a directory",
+ filename),
+ "Directory",
+ JOptionPane.ERROR_MESSAGE);
+ continue;
+ }
+ int r = JOptionPane.showConfirmDialog(frame,
+ String.format("\"%s\" already exists. Overwrite?",
+ filename),
+ "Overwrite file?",
+ JOptionPane.YES_NO_OPTION);
+ if (r != JOptionPane.YES_OPTION)
+ continue;
+
+ if (!file.canWrite()) {
+ JOptionPane.showMessageDialog(frame,
+ String.format("\"%s\" is not writable",
+ filename),
+ "File not writable",
+ JOptionPane.ERROR_MESSAGE);
+ continue;
+ }
+ }
+ try {
+ FileWriter fw = new FileWriter(file);
+ PrintWriter pw = new PrintWriter(fw);
+ pw.printf(" Time, Press, Height, Speed, Accel\n");
+ for (MicroDataPoint point : data.points()) {
+ pw.printf("%5.2f,%6.0f,%7.1f,%7.2f,%7.2f\n",
+ point.time, point.pressure, point.height, point.speed, point.accel);
+ }
+ fw.close();
+ return true;
+ } catch (FileNotFoundException fe) {
+ JOptionPane.showMessageDialog(frame,
+ fe.getMessage(),
+ "Cannot create file",
+ JOptionPane.ERROR_MESSAGE);
+ } catch (IOException ioe) {
+ }
+ }
+ }
+
+ public MicroExport(JFrame frame, MicroData data) {
+ this.frame = frame;
+ this.data = data;
+ setDialogTitle("Export MicroPeak Data File");
+ setFileFilter(new FileNameExtensionFilter("MicroPeak CSV file",
+ "csv"));
+ setCurrentDirectory(AltosUIPreferences.logdir());
+ }
+}
diff --git a/micropeak/MicroPeak.java b/micropeak/MicroPeak.java
index 544f3ae0..f2f09a10 100644
--- a/micropeak/MicroPeak.java
+++ b/micropeak/MicroPeak.java
@@ -101,12 +101,15 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
new MicroDownload(this, device);
}
- private void Save() {
- if (data == null) {
+ private void no_data() {
JOptionPane.showMessageDialog(this,
"No data available",
"No data",
JOptionPane.INFORMATION_MESSAGE);
+ }
+ private void Save() {
+ if (data == null) {
+ no_data();
return;
}
MicroSave save = new MicroSave (this, data);
@@ -114,6 +117,15 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
SetName(data.name);
}
+ private void Export() {
+ if (data == null) {
+ no_data();
+ return;
+ }
+ MicroExport export = new MicroExport (this, data);
+ export.runDialog();
+ }
+
private void Close() {
setVisible(false);
dispose();
@@ -131,6 +143,8 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
SelectFile();
else if ("Download".equals(ev.getActionCommand()))
DownloadData();
+ else if ("Export".equals(ev.getActionCommand()))
+ Export();
else if ("Preferences".equals(ev.getActionCommand()))
Preferences();
else if ("Save a Copy".equals(ev.getActionCommand()))
@@ -169,6 +183,10 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
fileMenu.add(saveAction);
saveAction.addActionListener(this);
+ JMenuItem exportAction = new JMenuItem("Export");
+ fileMenu.add(exportAction);
+ exportAction.addActionListener(this);
+
JMenuItem preferencesAction = new JMenuItem("Preferences");
fileMenu.add(preferencesAction);
preferencesAction.addActionListener(this);