📄 navigateform.java
字号:
import javax.microedition.lcdui.*;
public class NavigateForm extends Form implements CommandListener, Runnable {
TripMate main;
Trip trip;
NavigateCanvas canvas;
Gauge stepProgress;
Gauge tripProgress;
StringItem description;
StringItem stepTimePassed;
StringItem tripTimePassed;
StringItem stepTimeLeft;
StringItem tripTimeLeft;
StringItem tripDelta;
int duration;
boolean endOfTrip;
NavigateForm(NavigateCanvas canvas) {
super("Navigating");
this.main = canvas.main;
this.trip = canvas.trip;
this.canvas = canvas;
duration = trip.duration();
description = new StringItem(null, trip.description);
stepProgress = new Gauge("Step progress", false, duration, 0);
stepTimePassed = new StringItem("Step time passed", "");
stepTimeLeft = new StringItem("Step time left", "");
tripProgress = new Gauge("Trip progress", false, duration, 0);
tripTimePassed = new StringItem("Trip time passed", "");
tripTimeLeft = new StringItem("Trip time left", "");
tripDelta = new StringItem("Trip lag", "");
append(description);
append(stepProgress);
append(stepTimePassed);
append(stepTimeLeft);
append(tripProgress);
append(tripTimePassed);
append(tripTimeLeft);
append(tripDelta);
canvas.task.is(this);
setCommandListener(this);
int currTime = (int)(System.currentTimeMillis()/1000) - main.state.startTime;
if (main.state.suspendTime == 0) {
if (currTime < duration) {
addCommand(TripMate.SUSPEND_CMD);
addCommand(TripMate.NEXT_CMD);
addCommand(TripMate.STOP_CMD);
} else {
addCommand(TripMate.BACK_CMD);
stepProgress.setValue(stepProgress.getMaxValue());
tripProgress.setValue(duration);
showTripInfo(duration);
}
} else {
addCommand(TripMate.RESUME_CMD);
addCommand(TripMate.STOP_CMD);
}
addCommand(TripMate.GRAPHIC_CMD);
addCommand(TripMate.QUIT_CMD);
Display.getDisplay(main).setCurrent(this);
}
void update(int i, int total, int delta) {
Point p = trip.points[i];
description.setText(p.description);
stepProgress.setMaxValue(canvas.intervals[i]);
stepProgress.setValue(delta);
stepTimePassed.setText(Converter.timeToString(delta));
stepTimeLeft.setText(Converter.timeToString(canvas.intervals[i] - delta));
tripProgress.setValue(total);
showTripInfo(total);
}
void showTripInfo(int total) {
tripTimePassed.setText(Converter.timeToString(total - main.state.baseTime + main.state.startTime));
tripTimeLeft.setText(Converter.timeToString(duration - total));
if (main.state.baseTime < main.state.startTime) {
tripDelta.setLabel("Trip lag");
tripDelta.setText(Converter.timeToString(main.state.startTime - main.state.baseTime));
} else {
tripDelta.setLabel("Trip advance");
tripDelta.setText(Converter.timeToString(main.state.baseTime - main.state.startTime));
}
}
public void run() {
if (main.state.suspendTime != 0) {
return;
}
int currTime = (int)(System.currentTimeMillis()/1000) - main.state.startTime;
if (currTime >= duration) {
if (!endOfTrip) {
canvas.stopTimer();
endOfTrip = true;
setTitle("End of trip");
removeCommand(TripMate.STOP_CMD);
removeCommand(TripMate.SUSPEND_CMD);
removeCommand(TripMate.NEXT_CMD);
addCommand(TripMate.BACK_CMD);
stepProgress.setValue(stepProgress.getMaxValue());
tripProgress.setValue(duration);
showTripInfo(duration);
}
} else {
int totalTime = currTime;
int[] intervals = canvas.intervals;
if (main.state.tripState == TripState.NAVIGATE_FORWARD) {
for (int i = 0; i < intervals.length; i++) {
int delta = intervals[i];
if (currTime <= delta) {
update(i, totalTime, currTime);
break;
}
currTime -= delta;
}
} else {
for (int i = intervals.length; --i >= 0;) {
int delta = intervals[i];
if (currTime <= delta) {
update(i, totalTime, currTime);
break;
}
currTime -= delta;
}
}
}
}
public void commandAction(Command c, Displayable d)
{
if (c == TripMate.SUSPEND_CMD) {
setTitle("Suspended");
main.state.suspendTime = (int)(System.currentTimeMillis()/1000);
main.updateState();
removeCommand(TripMate.SUSPEND_CMD);
removeCommand(TripMate.NEXT_CMD);
addCommand(TripMate.RESUME_CMD);
} else if (c == TripMate.RESUME_CMD) {
setTitle("Navigating");
main.state.startTime += (int)(System.currentTimeMillis()/1000) - main.state.suspendTime;
main.state.suspendTime = 0;
main.updateState();
removeCommand(TripMate.RESUME_CMD);
addCommand(TripMate.SUSPEND_CMD);
addCommand(TripMate.NEXT_CMD);
} else if (c == TripMate.GRAPHIC_CMD) {
Display.getDisplay(main).setCurrent(canvas);
canvas.task.is(canvas);
} else {
canvas.commandAction(c, d);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -