www.pudn.com > GMapViewer-src.zip > MapPinMenu.java
package org.sreid.j2me.gmapviewer;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import org.sreid.j2me.util.*;
// Handles permanent (non-search) map pins.
public class MapPinMenu extends List implements CommandListener {
private final GMapViewer app;
private static final String BACK = "Back";
private static final String GO_TO_PIN = "Go to pin";
private static final String EDIT_PIN = "Rename pin";
private static final String DELETE_PIN = "Delete pin";
private final Vector mapPins = new Vector();
Displayable cameFrom;
MapPinMenu(GMapViewer app) {
super("Map pins", List.IMPLICIT);
this.app = app;
setCommandListener(this);
addCommand(new Command(BACK, Command.BACK, 1));
addCommand(new Command(GO_TO_PIN, Command.ITEM, 1));
addCommand(new Command(EDIT_PIN, Command.ITEM, 2));
addCommand(new Command(DELETE_PIN, Command.ITEM, 2));
loadList();
}
public void commandAction(Command c, Displayable d) {
final MapPin pin = (getSelectedIndex() < 0 || mapPins.size() == 0 ? null : (MapPin)mapPins.elementAt(getSelectedIndex()));
String cmd = c.getLabel();
if (cmd.equals(BACK)) {
app.display.setCurrent(cameFrom);
}
else if (pin == null) {
// all of the commands below require a map pin
}
else if (cmd.equals(GO_TO_PIN) || c == List.SELECT_COMMAND) {
app.canvas.setXY(pin.x, pin.y);
app.display.setCurrent(app.canvas);
}
else if (cmd.equals(EDIT_PIN)) {
final Dialog dlg = Dialog.createTextDialog("Edit map pin", "Map pin text", pin.text, 40, TextField.ANY);
dlg.setCallback(new Runnable() { public void run() {
String userResponse = (String)dlg.getUserResponse();
if (userResponse != null) {
pin.text = (String)userResponse;
app.mpm.keepPin(pin);
loadList();
}
}});
dlg.showOn(app);
}
else if (cmd.equals(DELETE_PIN)) {
final Dialog dlg = Dialog.createConfirmationDialog("Delete map pin?", "Are you sure you want to delete this map pin: " + pin.text, "Yes, delete it.", "No, keep it.");
dlg.setCallback(new Runnable() { public void run() {
if (dlg.getUserResponse() == Dialog.USER_CONFIRMED) {
app.mpm.deletePin(pin);
loadList();
}
}});
dlg.showOn(app);
}
else {
throw new IllegalArgumentException("Unrecognized command: " + cmd);
}
}
void loadList() {
mapPins.removeAllElements();
while (size() > 0) {
delete(0);
}
for (Enumeration enum = app.mpm.enumeration() ; enum.hasMoreElements() ; ) {
MapPin mp = (MapPin)enum.nextElement();
if (mp.isPermanent) {
append(mp.text, null);
mapPins.addElement(mp);
}
}
if (mapPins.size() == 0) {
append("You currently have no permanent map pins.", null);
}
}
}