Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/BBTracker.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/BBTracker.java (revision 109)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/BBTracker.java (working copy)
@@ -132,6 +132,15 @@
public static Timer getTimer() {
return instance.timer;
}
+
+ public void resetApp(){
+ firstStart = true;
+ try {
+ startApp();
+ } catch (MIDletStateChangeException e) {
+ e.printStackTrace();
+ }
+ }
public static void nonFatal(final Throwable t, final String action, final Displayable next) {
log(BBTracker.class, t, "non-fatal " + action);
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/FileTrackStore.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/FileTrackStore.java (revision 109)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/FileTrackStore.java (working copy)
@@ -139,7 +139,9 @@
}
private String getTrackDirectory() throws TrackStoreException {
+ //Updated 2007 SIB to store in BBT Directory
final String dir = Preferences.getInstance().getTrackDirectory();
+ //End Update 2007 SIB
if (dir == null) {
throw new TrackStoreException("No track directory set, please configure it on the options screen!");
}
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/Preferences.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/Preferences.java (revision 109)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/Preferences.java (working copy)
@@ -95,6 +95,10 @@
private int detailsFontSize = Font.SIZE_MEDIUM;
private String trackDirectory;
+
+ //Added 2007 SIB
+ private String exportDirectory;
+ //End Added 2007 SIB
private UnitConverter unitConverter;
@@ -120,6 +124,12 @@
public String getTrackDirectory() {
return trackDirectory;
}
+
+ //Added 2007 SIB
+ public String getExportDirectory() {
+ return exportDirectory;
+ }
+ //End Added 2007 SIB
public void setTrackDirectory(final String trackDirectory) {
if (trackDirectory == null || trackDirectory.length() == 0) {
@@ -131,6 +141,19 @@
}
}
}
+
+ //Added 2007 SIB
+ public void setExportDirectory(final String exportDirectory) {
+ if (exportDirectory == null || exportDirectory.length() == 0) {
+ this.exportDirectory = null;
+ } else {
+ this.exportDirectory = exportDirectory;
+ if (!this.exportDirectory.endsWith("/")) {
+ this.exportDirectory += "/";
+ }
+ }
+ }
+ //End Added 2007 SIB
public void setExportFormat(final int index, final boolean value) {
if (index >= EXPORT_FORMATS.length || index < 0) {
@@ -220,11 +243,18 @@
startAction = in.readShort();
sampleInterval = in.readInt();
trackNumber = in.readInt();
- if (in.readByte() != 0) {
+ if (in.readByte() == 1) {
trackDirectory = in.readUTF();
} else {
trackDirectory = null;
}
+ //Added 2007 SIB
+ if (in.readByte() == 3) {
+ exportDirectory = in.readUTF();
+ } else {
+ exportDirectory = null;
+ }
+ //End Added 2007 SIB
exportFormats = in.readInt();
units = in.readInt();
statusFontSize = in.readInt();
@@ -268,11 +298,24 @@
out.writeShort(startAction);
out.writeInt(sampleInterval);
out.writeInt(trackNumber);
- if (trackDirectory == null) {
- out.writeByte(0);
- } else {
+ if (trackDirectory == null && exportDirectory != null){
out.writeByte(1);
+ out.writeUTF(exportDirectory);
+ out.writeByte(3);
+ out.writeUTF(exportDirectory);
+ } else if (trackDirectory != null & exportDirectory == null){
+ out.writeByte(1);
out.writeUTF(trackDirectory);
+ out.writeByte(3);
+ out.writeUTF(trackDirectory);
+ } else if (trackDirectory != null && exportDirectory != null){
+ out.writeByte(1);
+ out.writeUTF(trackDirectory);
+ out.writeByte(3);
+ out.writeUTF(exportDirectory);
+ } else {
+ out.writeByte(0);
+ out.writeByte(2);
}
out.writeInt(exportFormats);
out.writeInt(units);
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/StatusTile.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/StatusTile.java (revision 109)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/StatusTile.java (working copy)
@@ -67,6 +67,7 @@
private int pointWidth;
+
private boolean twoLineLayout = true;
public StatusTile(final TrackManager manager) {
@@ -123,6 +124,7 @@
float courseValue = Float.NaN;
float elevationValue = Float.NaN;
double lengthValue = Double.NaN;
+ String timeString = "-";
if (p != null) {
lonValue = p.getLongitude();
latValue = p.getLatitude();
@@ -132,8 +134,12 @@
}
if (track != null) {
lengthValue = track.getLength();
+ if (p != null) {
+ final long offset = track.getPointOffset(p);
+ timeString = Utils.durationToString(offset);
+ }
}
-
+
final String lon = Utils.longitudeToString(lonValue);
final String lat = Utils.latitudeToString(latValue);
final String course = Utils.courseToHeadingString(courseValue);
@@ -170,20 +176,28 @@
int lengthY;
final int pointX;
int pointY;
+ int timeY;
if (twoLineLayout) {
lengthX = width - MARGIN;
lengthY = line1;
pointX = lengthX;
pointY = line2;
+ timeY = line2;
} else {
lengthX = width / 2;
lengthY = line2 + font.getHeight();
pointX = width - MARGIN;
pointY = lengthY;
+ //Added 2007 SIB
+ timeY = lengthY;
+ //End Added 2007 SIB
}
g.drawString(length, lengthX, lengthY, Graphics.TOP | Graphics.RIGHT);
g.drawString(point, pointX, pointY, Graphics.TOP | Graphics.RIGHT);
+ //Added 2007 SIB
+ g.drawString(timeString, 1, timeY, Graphics.TOP | Graphics.LEFT);
+ //End Added 2007 SIB
}
public void showNotify() {
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/DetailsTile.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/DetailsTile.java (revision 109)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/DetailsTile.java (working copy)
@@ -45,6 +45,8 @@
private static final String DISTANCE_LABEL = "Distance: ";
private static final String SPEED_LABEL = "Speed: ";
+
+ private static final String PACE_LABEL = "Pace: ";
private static final String POINT_LABEL = "Point: ";
@@ -74,6 +76,7 @@
updateLabeWidth(SPEED_LABEL);
updateLabeWidth(POINT_LABEL);
updateLabeWidth(NAME_LABEL);
+ updateLabeWidth(PACE_LABEL);
}
private void updateLabeWidth(final String label) {
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/TracksForm.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/TracksForm.java (revision 109)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/TracksForm.java (working copy)
@@ -135,7 +135,7 @@
BBTracker.getInstance().showMainCanvas();
} else if (command == exportCommand) {
final Preferences preferences = Preferences.getInstance();
- final String dir = preferences.getTrackDirectory();
+ final String dir = preferences.getExportDirectory();
if (dir == null) {
final Alert alert = new Alert("No track directory defined!",
"Please define an export directory in the options screen.", null, AlertType.WARNING);
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/SummaryTile.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/SummaryTile.java (revision 0)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/SummaryTile.java (revision 0)
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2007 SIB
+ * Copyright 2007 Joachim Sauer
+ *
+ * This file is part of bbTracker.
+ *
+ * bbTracker is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * bbTracker 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, see .
+ */
+package org.bbtracker.mobile.gui;
+
+import java.util.Date;
+
+import javax.microedition.lcdui.Font;
+import javax.microedition.lcdui.Graphics;
+
+import org.bbtracker.Track;
+import org.bbtracker.TrackPoint;
+import org.bbtracker.UnitConverter;
+import org.bbtracker.Utils;
+import org.bbtracker.mobile.Preferences;
+import org.bbtracker.mobile.TrackManager;
+
+public class SummaryTile extends Tile {
+
+ private static final String MAX_ELEVATION_LABEL = "Max Elev: ";
+
+ private static final String MIN_ELEVATION_LABEL = "Min Elev: ";
+
+ private static final String GAIN_ELEVATION_LABEL = "Total Gain: ";
+
+ private static final String TIME_LABEL = "Time: ";
+
+ private static final String START_TIME_LABEL = "Start Time: ";
+
+ private static final String END_TIME_LABEL = "End Time: ";
+
+ private static final String DISTANCE_LABEL = "Distance: ";
+
+ private static final String MAX_SPEED_LABEL = "Max Speed: ";
+
+ private static final String AVG_SPEED_LABEL = "Avg Speed: ";
+
+ private static final String POINTS_LABEL = "Points: ";
+
+ private static final String NAME_LABEL = "Name: ";
+
+ private static final int MARGIN = 2;
+
+ private final TrackManager manager;
+
+ private Font font;
+
+ private int labelWidth;
+
+ public SummaryTile(final TrackManager manager) {
+ this.manager = manager;
+ setFontSize(Font.SIZE_SMALL);
+ }
+
+ private void setFontSize(final int fontSize) {
+ font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, fontSize);
+ labelWidth = 0;
+ updateLabeWidth(MAX_ELEVATION_LABEL);
+ updateLabeWidth(MIN_ELEVATION_LABEL);
+ updateLabeWidth(GAIN_ELEVATION_LABEL);
+ updateLabeWidth(TIME_LABEL);
+ updateLabeWidth(START_TIME_LABEL);
+ updateLabeWidth(END_TIME_LABEL);
+ updateLabeWidth(DISTANCE_LABEL);
+ updateLabeWidth(MAX_SPEED_LABEL);
+ updateLabeWidth(AVG_SPEED_LABEL);
+ updateLabeWidth(POINTS_LABEL);
+ updateLabeWidth(NAME_LABEL);
+ }
+
+ private void updateLabeWidth(final String label) {
+ final int w = font.stringWidth(label);
+ if (w > labelWidth) {
+ labelWidth = w;
+ }
+ }
+
+ protected void doPaint(final Graphics g) {
+ final Track track = manager.getTrack();
+
+ g.setColor(0x00ffffff);
+ g.fillRect(0, 0, width, height);
+ g.setColor(0x00000000);
+ g.setFont(font);
+
+ float avgspeedValue = Float.NaN;
+ float avgmovingspeedValue = Float.NaN;
+ float maxspeedValue = Float.NaN;
+ float maxelevationValue = Float.NaN;
+ float minelevationValue = Float.NaN;
+ float gainelevationValue = Float.NaN;
+ double lengthValue = Double.NaN;
+ int pointcountValue = 0;
+ int pointcountEndTime = 0;
+ String timeString = "-";
+ String pointendTime = "-";
+ String pointstartTime = "-";
+ String points = "-";
+ if (track != null) {
+ lengthValue = track.getLength();
+ maxspeedValue = track.getMaxSpeed();
+ avgspeedValue = track.getAvgSpeed();
+ avgmovingspeedValue = track.getAvgMovingSpeed();
+ maxelevationValue = track.getMaxElevation();
+ minelevationValue = track.getMinElevation();
+ gainelevationValue = track.getElevationGain();
+ pointcountValue = track.getPointCount();
+ points = pointcountValue + "";
+ if (track.getPointCount() > 0) {
+ final TrackPoint lastPoint = track.getPoint(track.getPointCount() - 1);
+ final long duration = track.getPointOffset(lastPoint);
+ timeString = Utils.durationToString(duration);
+ pointcountEndTime = track.getPointCount() - 1;
+ TrackPoint pEnd = track.getPoint(pointcountEndTime);
+ pointendTime = new Date(pEnd.getTimestamp()).toString().substring(11, 19);
+ TrackPoint pStart = track.getPoint(0);
+ pointstartTime = new Date(pStart.getTimestamp()).toString().substring(11, 19);
+ }
+ }
+
+ final String trackName;
+ if (track == null) {
+ trackName = "-";
+ } else {
+ if (manager.getState() == TrackManager.STATE_STATIC) {
+ trackName = track.getName() + " (static)";
+ } else {
+ trackName = track.getName();
+ }
+ }
+
+ final UnitConverter unit = Preferences.getInstance().getUnitsConverter();
+ final String maxspeed = unit.speedToString(maxspeedValue);
+ final String avgspeed = unit.speedToString(avgspeedValue) + " (" + unit.speedToString(avgmovingspeedValue) + ")";
+ final String maxelevation = unit.elevationToString(maxelevationValue);
+ final String minelevation = unit.elevationToString(minelevationValue);
+ final String gainelevation = unit.elevationToString(gainelevationValue);
+ final String length = unit.distanceToString(lengthValue);
+
+ final int fontHeight = font.getHeight();
+ final int x = MARGIN + labelWidth;
+ int y = MARGIN;
+
+ g.drawString(NAME_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(trackName, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight;
+ g.drawString(POINTS_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(points, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight;
+ g.drawString(DISTANCE_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(length, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight;
+ g.drawString(START_TIME_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(pointstartTime, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight;
+ g.drawString(END_TIME_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(pointendTime, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight;
+ g.drawString(TIME_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(timeString, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight * 2;
+ g.drawString(MAX_SPEED_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(maxspeed, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight;
+ g.drawString(AVG_SPEED_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(avgspeed, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight * 2;
+ g.drawString(MAX_ELEVATION_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(maxelevation, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight;
+ g.drawString(MIN_ELEVATION_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(minelevation, x, y, Graphics.TOP | Graphics.LEFT);
+ y += fontHeight;
+ g.drawString(GAIN_ELEVATION_LABEL, MARGIN, y, Graphics.TOP | Graphics.LEFT);
+ g.drawString(gainelevation, x, y, Graphics.TOP | Graphics.LEFT);
+ }
+
+ public void showNotify() {
+ setFontSize(Preferences.getInstance().getDetailsFontSize());
+ }
+}
\ No newline at end of file
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/OptionsForm.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/OptionsForm.java (revision 109)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/OptionsForm.java (working copy)
@@ -50,13 +50,19 @@
private final Command cancelCommand;
private final Command browseCommand;
+
+ //Added 2007 SIB
+ private final Command browseExportCommand;
+ private final TextField exportdirectoryField;
+ //End Added 2007 SIB
+
private final TextField sampleField;
private final ChoiceGroup startTypeGroup;
private final TextField directoryField;
-
+
private final ChoiceGroup exportFormatGroup;
private final ChoiceGroup unitsGroup;
@@ -97,11 +103,18 @@
browseCommand = new Command("Browse", Command.ITEM, 1);
directoryField.setDefaultCommand(browseCommand);
directoryField.setItemCommandListener(this);
-
+
exportFormatGroup = new ChoiceGroup("Export to: ", Choice.MULTIPLE, Preferences.EXPORT_FORMATS, null);
for (int i = 0; i < Preferences.EXPORT_FORMATS.length; i++) {
exportFormatGroup.setSelectedIndex(i, pref.getExportFormat(i));
}
+
+ //Added 2007 SIB
+ exportdirectoryField = new TextField("Export directory: ", pref.getExportDirectory(), 100, TextField.URL);
+ browseExportCommand = new Command("Browse", Command.ITEM, 1);
+ exportdirectoryField.setDefaultCommand(browseExportCommand);
+ exportdirectoryField.setItemCommandListener(this);
+ //End Added 2007 SIB
append(sampleField);
append(unitsGroup);
@@ -109,8 +122,13 @@
append(detailsFontSizeGroup);
append(startTypeGroup);
append(directoryField);
+ //Added 2007 SIB
+ append("");
+ append(exportdirectoryField);
+ append("");
+ //End Added 2007 SIB
append(exportFormatGroup);
-
+
okCommand = new Command("OK", Command.OK, 0);
cancelCommand = new Command("Cancel", Command.CANCEL, 1);
@@ -185,9 +203,26 @@
private String validatePreferences() {
final String trackDir = directoryField.getString();
+ //Added 2007 SIB
+ final String exportDir = exportdirectoryField.getString();
+ //End Added 2007 SIB
if (trackDir == null || trackDir.length() == 0) {
- return "No track directory has been selected!";
- } else {
+ if (exportDir == null || exportDir.length()== 0){
+ return "No directories have been selected!";
+ } else {
+ return "No Track Directory has been selected! The Export Directory will be used! (" + exportDir + ")";
+ }
+ //Added 2007 SIB
+ }else if (exportDir == null || exportDir.length()== 0){
+ if (trackDir == null || trackDir.length() == 0){
+ return "No directories have been selected!";
+ } else {
+ return "No Export Directory has been selected! The Track Directory will be used! (" + trackDir + ")";
+ }
+ // End Added 2007 SIB
+ // Updated 2007 SIB
+ } else if (trackDir != null){
+ // End Updated 2007 SIB
FileConnection connection = null;
try {
connection = (FileConnection) Connector.open("file:///" + trackDir, Connector.READ);
@@ -211,7 +246,33 @@
}
}
}
+ //Added 2007 SIB
+ } else if (exportDir != null){
+ FileConnection connection = null;
+ try {
+ connection = (FileConnection) Connector.open("file:///" + exportDir, Connector.READ);
+ if (!connection.exists()) {
+ return "The directory identified by <" + exportDir + "> does not exist.";
+ } else if (!connection.isDirectory()) {
+ return "The file identified by <" + exportDir + "> is not a directory.";
+ } else if (!connection.canWrite()) {
+ return "The directory identified by <" + exportDir + "> is not writeable.";
+ }
+ } catch (final IOException e) {
+ return "Could not verify track directory <" + exportDir + ">: " + e.getMessage();
+ } catch (final IllegalArgumentException e) {
+ return "Malformed track directory <" + exportDir + ">!";
+ } finally {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (final IOException ignored) {
+ // ignore
+ }
+ }
+ }
}
+ //End Added 2007 SIB
return null;
}
@@ -228,6 +289,7 @@
}
pref.setStartAction(startTypeGroup.getSelectedIndex());
pref.setTrackDirectory(directoryField.getString());
+ pref.setExportDirectory(exportdirectoryField.getString());
BBTracker.initLog();
for (int i = 0; i < Preferences.EXPORT_FORMATS.length; i++) {
@@ -251,7 +313,7 @@
public void commandAction(final Command command, final Item item) {
if (command == browseCommand) {
- final BrowseForm browser = new BrowseForm("Save Directory", directoryField.getString());
+ final BrowseForm browser = new BrowseForm("Save Track Directory", directoryField.getString());
final Display display = BBTracker.getDisplay();
browser.setCallback(new Runnable() {
@@ -266,5 +328,23 @@
});
display.setCurrent(browser);
}
+ //Added 2007 SIB
+ if (command == browseExportCommand) {
+ final BrowseForm browser = new BrowseForm("Save Export Directory", exportdirectoryField.getString());
+ final Display display = BBTracker.getDisplay();
+ browser.setCallback(new Runnable() {
+
+ public void run() {
+ final String selectedPath = browser.getPath();
+ if (selectedPath != null) {
+ exportdirectoryField.setString(selectedPath);
+ }
+ display.setCurrent(OptionsForm.this);
+ }
+
+ });
+ display.setCurrent(browser);
+ }
+ //End Add 2007 SIB
}
}
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/MainCanvas.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/MainCanvas.java (revision 109)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/MainCanvas.java (working copy)
@@ -17,8 +17,12 @@
*/
package org.bbtracker.mobile.gui;
+import java.io.IOException;
+import java.io.OutputStream;
import java.util.TimerTask;
+import javax.microedition.io.Connector;
+import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Canvas;
@@ -28,11 +32,16 @@
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
+import org.bbtracker.Track;
import org.bbtracker.TrackPoint;
import org.bbtracker.mobile.BBTracker;
+import org.bbtracker.mobile.Preferences;
import org.bbtracker.mobile.TrackListener;
import org.bbtracker.mobile.TrackManager;
import org.bbtracker.mobile.TrackStore.TrackStoreException;
+import org.bbtracker.mobile.exporter.GpxTrackExporter;
+import org.bbtracker.mobile.exporter.KmlTrackExporter;
+import org.bbtracker.mobile.exporter.TrackExporter;
public class MainCanvas extends Canvas implements TrackListener, CommandListener {
private static final int DEFAULT_STATUS_TIMEOUT = 5 * 1000;
@@ -44,13 +53,15 @@
private final TrackManager manager;
private final Tile trackTile;
+
+ private final Tile paceTile;
private final Tile elevationProfileTile;
private final Tile speedProfileTile;
private final StatusTile statusTile;
-
+
private final Tile detailsTile;
private final Command newTrackCommand;
@@ -66,6 +77,18 @@
private final Command aboutCommand;
private final Command exitCommand;
+
+ //Added 2007 SIB
+ private final Tile summaryTile;
+
+ private final Command exportCommand;
+
+ private int canvasView = 0;
+
+ private final Command detailsViewCommand;
+
+ private final Command plotterViewCommand;
+ //End Added 2007 SIB
private String statusMessage = null;
@@ -81,14 +104,21 @@
speedProfileTile = new SpeedPlotterTile(manager, DataProvider.TIME);
statusTile = new StatusTile(manager);
detailsTile = new DetailsTile(manager);
+ summaryTile = new SummaryTile(manager);
+ paceTile = new PaceTile(manager);
- switchViewCommand = new Command("Switch View", Command.SCREEN, 0);
- newTrackCommand = new Command("New Track", Command.SCREEN, 1);
- stopTrackingCommand = new Command("Stop tracking", Command.STOP, 2);
- tracksCommand = new Command("Track Manager", Command.SCREEN, 3);
+ switchViewCommand = new Command("Switch View", Command.SCREEN, 11);
+ newTrackCommand = new Command("Start Track", Command.SCREEN, 1);
+ stopTrackingCommand = new Command("Stop Track", Command.STOP, 2);
+ tracksCommand = new Command("Tracks", Command.SCREEN, 3);
optionsCommand = new Command("Options", Command.SCREEN, 4);
aboutCommand = new Command("About", Command.SCREEN, 5);
- exitCommand = new Command("Exit", Command.EXIT, 6);
+ //Added 2007 SIB
+ exportCommand = new Command("Export Track", Command.SCREEN, 0);
+ detailsViewCommand = new Command("Details View", Command.SCREEN, 9);
+ plotterViewCommand = new Command("Plotter View", Command.SCREEN, 9);
+ //End Added 2007 SIB
+ exitCommand = new Command("Exit", Command.EXIT, 11);
addCommand(switchViewCommand);
addCommand(newTrackCommand);
@@ -96,6 +126,7 @@
addCommand(optionsCommand);
addCommand(aboutCommand);
addCommand(exitCommand);
+ addCommand(detailsViewCommand);
setCommandListener(this);
@@ -181,8 +212,17 @@
public void stateChanged(final int newState) {
if (newState == TrackManager.STATE_TRACKING) {
addCommand(stopTrackingCommand);
+ //Added 2007 SIB
+ removeCommand(exportCommand);
+ } else if (newState == TrackManager.STATE_STATIC){
+ removeCommand(stopTrackingCommand);
+ addCommand(exportCommand);
+ //End Added 2007 SIB
} else {
removeCommand(stopTrackingCommand);
+ //Added 2007 SIB
+ removeCommand(exportCommand);
+ //End Added 2007 SIB
}
updateStatusText(newState);
for (int i = 0; i < visibleTiles.length && visibleTiles[i] != null; i++) {
@@ -203,24 +243,42 @@
}
private void nextTileConfiguration() {
- tileConfiguration = (tileConfiguration + 1) % 4;
- switch (tileConfiguration) {
- case 0:
- setMainTile(trackTile, true);
- setStatusMessage("Track view");
- break;
- case 1:
- setMainTile(elevationProfileTile, true);
- setStatusMessage("Elevation over time");
- break;
- case 2:
- setMainTile(speedProfileTile, true);
- setStatusMessage("Speed over time");
- break;
- case 3:
- setMainTile(detailsTile, false);
- setStatusMessage("Details");
- break;
+ if (canvasView == 1){
+ addCommand(plotterViewCommand);
+ removeCommand(detailsViewCommand);
+ tileConfiguration = (tileConfiguration + 1) % 3;
+ switch (tileConfiguration) {
+ case 0:
+ setMainTile(detailsTile, false);
+ setStatusMessage("Details");
+ break;
+ case 1:
+ setMainTile(summaryTile, false);
+ setStatusMessage("Summary");
+ break;
+ case 2:
+ setMainTile(paceTile, false);
+ setStatusMessage("Pace");
+ break;
+ }
+ } else {
+ removeCommand(plotterViewCommand);
+ addCommand(detailsViewCommand);
+ tileConfiguration = (tileConfiguration + 1) % 3;
+ switch (tileConfiguration) {
+ case 0:
+ setMainTile(trackTile, true);
+ setStatusMessage("Track view");
+ break;
+ case 1:
+ setMainTile(elevationProfileTile, true);
+ setStatusMessage("Elevation over time");
+ break;
+ case 2:
+ setMainTile(speedProfileTile, true);
+ setStatusMessage("Speed over time");
+ break;
+ }
}
}
@@ -239,8 +297,15 @@
final int state = manager.getState();
if (state == TrackManager.STATE_TRACKING) {
addCommand(stopTrackingCommand);
- } else {
+ //Added 2007 SIB
+ removeCommand(exportCommand);
+ } else if (state == TrackManager.STATE_STATIC){
removeCommand(stopTrackingCommand);
+ addCommand(exportCommand);
+ //End Added 2007 SIB
+ }else {
+ removeCommand(stopTrackingCommand);
+ removeCommand(exportCommand);
}
updateStatusText(state);
}
@@ -249,7 +314,37 @@
if (command == exitCommand) {
exitAction();
} else if (command == switchViewCommand) {
- nextTileConfiguration();
+ nextTileConfiguration();
+ } else if (command == detailsViewCommand) {
+ canvasView = 1;
+ setMainTile(detailsTile, false);
+ setStatusMessage("Details");
+ } else if (command == plotterViewCommand) {
+ canvasView = 0;
+ setMainTile(trackTile, true);
+ setStatusMessage("Track view");
+ //Added 2007 SIB
+ }else if (command == exportCommand){
+ final Preferences preferences = Preferences.getInstance();
+ final String dir = preferences.getExportDirectory();
+ final Track track = manager.getTrack();
+ if (dir == null) {
+ final Alert alert = new Alert("No track directory defined!",
+ "Please define an export directory in the options screen.", null, AlertType.WARNING);
+ BBTracker.alert(alert, this);
+ return;
+ }
+ int count;
+ try {
+ count = exportTrack(dir, track);
+ } catch (final IOException e) {
+ BBTracker.nonFatal(e, "exporting track", this);
+ return;
+ }
+ final Alert alert = new Alert("Finished exporting", "The track " + track.getName() +
+ " has been exported successfully to " + count + " formats!", null, AlertType.INFO);
+ BBTracker.alert(alert, this);
+ //End Added 2007 SIB
} else {
final Displayable nextDisplayable;
if (command == aboutCommand) {
@@ -381,4 +476,48 @@
MainCanvas.this.repaint();
}
}
+
+ //Added 2007 SIB from code on TracksForm
+ private int exportTrack(final String dir, final Track track) throws IOException {
+ final Preferences pref = Preferences.getInstance();
+ int exportCount = 0;
+ if (pref.getExportFormat(0)) {
+ export(dir, track, new KmlTrackExporter());
+ exportCount++;
+ }
+ if (pref.getExportFormat(1)) {
+ export(dir, track, new GpxTrackExporter());
+ exportCount++;
+ }
+ return exportCount;
+ }
+
+ private void export(final String dir, final Track track, final TrackExporter exporter) throws IOException {
+ final String fileName = exporter.getFileName(track);
+ final String fullName = dir.endsWith("/") ? dir + fileName : dir + "/" + fileName;
+ FileConnection connection = null;
+ OutputStream out = null;
+ try {
+ connection = (FileConnection) Connector.open("file:///" + fullName, Connector.READ_WRITE);
+ connection.create();
+ out = connection.openOutputStream();
+ exporter.export(out, track);
+ } finally {
+ if (out != null) {
+ try {
+ out.close();
+ } catch (final IOException ignored) {
+ // ignore
+ }
+ }
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (final IOException ignored) {
+ // ignore
+ }
+ }
+ }
+ }
+ //End Added 2007 SIB
}
\ No newline at end of file
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/PaceTile.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/PaceTile.java (revision 0)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/gui/PaceTile.java (revision 0)
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2007 SIB
+ * Copyright 2007 Joachim Sauer
+ *
+ * This file is part of bbTracker.
+ *
+ * bbTracker is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * bbTracker 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, see .
+ */
+package org.bbtracker.mobile.gui;
+
+import javax.microedition.lcdui.*;
+
+import org.bbtracker.Track;
+import org.bbtracker.TrackPoint;
+import org.bbtracker.UnitConverter;
+import org.bbtracker.Utils;
+import org.bbtracker.mobile.Preferences;
+import org.bbtracker.mobile.TrackManager;
+
+public class PaceTile extends Tile {
+
+ private static final int MARGIN = 2;
+
+ private final TrackManager manager;
+
+ private Font font;
+
+ public PaceTile(final TrackManager manager) {
+ this.manager = manager;
+ setFontSize(Font.SIZE_LARGE);
+ }
+
+ private void setFontSize(final int fontSize) {
+ font = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, fontSize);
+ }
+
+
+ protected void doPaint(final Graphics g) {
+ final Track track = manager.getTrack();
+
+ g.setColor(0x00ffffff);
+ g.fillRect(0, 0, width, height);
+ g.setColor(0x00000000);
+ g.setFont(font);
+
+ double lengthValue = Double.NaN;
+ float speedValue = Float.NaN;
+ float avgspeedValue = Float.NaN;
+ long duration = 0;
+ String timeString = "-";
+ if (track != null) {
+ lengthValue = track.getLength();
+ avgspeedValue = track.getAvgSpeed();
+ if (track.getPointCount() > 0) {
+ final TrackPoint lastPoint = track.getPoint(track.getPointCount() - 1);
+ duration = track.getPointOffset(lastPoint);
+ if (manager.getState() == TrackManager.STATE_TRACKING) {
+ speedValue = lastPoint.getSpeed();
+ } else {
+ speedValue = track.getAvgSpeed();
+ }
+ timeString = Utils.durationToString(duration);
+ }
+ }
+
+ final UnitConverter unit = Preferences.getInstance().getUnitsConverter();
+ final String length = unit.distanceToString(lengthValue);
+ final String pace = unit.paceToString(avgspeedValue);
+ final String speed = unit.speedToString(speedValue);
+
+ final int fontHeight = font.getHeight();
+ int x = (width/2);
+ int y = height/2 - ((fontHeight + MARGIN)*2);
+
+ g.drawString(timeString, x, y, Graphics.TOP | Graphics.HCENTER);
+ y += fontHeight + MARGIN;
+ g.drawString(length, x, y, Graphics.TOP | Graphics.HCENTER);
+ y += fontHeight + MARGIN;
+ g.drawString(speed, x, y, Graphics.TOP | Graphics.HCENTER);
+ y += fontHeight + MARGIN;
+ g.drawString(pace, x, y, Graphics.TOP | Graphics.HCENTER);
+ y += fontHeight + MARGIN;
+ }
+
+ public void showNotify() {
+ }
+}
\ No newline at end of file
Index: C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/exporter/KmlTrackExporter.java
===================================================================
--- C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/exporter/KmlTrackExporter.java (revision 109)
+++ C:/Projects/bbTracker/stable/0412/bbtracker/src/org/bbtracker/mobile/exporter/KmlTrackExporter.java (working copy)
@@ -63,6 +63,7 @@
final String maxElevString = unit.elevationToString(track.getMaxElevation());
final String minElevString = unit.elevationToString(track.getMinElevation());
final String maxSpeedString = unit.speedToString(track.getMaxSpeed());
+ final String avgSpeedString = unit.speedToString(track.getAvgSpeed());;
w = new OutputStreamWriter(out, "UTF-8");
w.write(XML_HEADER);
@@ -93,6 +94,11 @@
w.write("
| Max Speed: ");
w.write(maxSpeedString);
w.write(" |
\n");
+ //Added New Field 2007 SIB
+ w.write("| Average Speed: ");
+ w.write(avgSpeedString);
+ w.write(" |
\n");
+ //End Added SIB
w.write("| Max Elevation: ");
w.write(maxElevString);
w.write(" |
\n");