www.pudn.com > GMapViewer-src.zip > PrefsEditor.java



package org.sreid.j2me.gmapviewer;

import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import org.sreid.j2me.util.*;

public class PrefsEditor extends Form implements CommandListener {
	private final GMapViewer app;

	private final TextField gatewayURL;
	private final TextField gatewayAuth;
	private final TextField searchTerms;
	private final TextField memCacheSize;
	private final TextField rmsCacheSize;
	private final TextField rmsSpaceReserved;
	private final TextField downloadThreads;
	private final TextField moveSpeed1;
	private final TextField moveSpeed2;
	private final TextField moveSpeedTimeout;
	private final TextField mapPinTextRadius;
	private final TextField callGC;

	PrefsEditor(GMapViewer app) {
		super("Preferences");
		this.app = app;
		setCommandListener(this);
		addCommand(new Command("OK", Command.OK, 1));
		addCommand(new Command("Cancel", Command.CANCEL, 2));
		// Defaults here don't matter, but must fit constraints. Real defaults are in loadPrefs.
		append(gatewayURL = new TextField("Gateway URL", "", 200, TextField.URL));
		append(gatewayAuth = new TextField("Gateway login code", "", 200, TextField.PASSWORD));
		append(searchTerms = new TextField("City name (for searches)", "", 200, TextField.ANY));
		append(mapPinTextRadius = new TextField("Map pin text visibility radius", "1", 8, TextField.NUMERIC));
		append(moveSpeed1 = new TextField("Movement speed slow", "1", 2, TextField.NUMERIC));
		append(moveSpeed2 = new TextField("Movement speed fast", "1", 2, TextField.NUMERIC));
		append(moveSpeedTimeout = new TextField("Move fast timeout (ms)", "1", 4, TextField.NUMERIC));
		append(memCacheSize = new TextField("Memory cache size KB", "1", 5, TextField.NUMERIC));
		append(rmsCacheSize = new TextField("RMS cache size KB", "1", 5, TextField.NUMERIC));
		append(rmsSpaceReserved = new TextField("RMS reserved space KB", "1", 5, TextField.NUMERIC));
		append(downloadThreads = new TextField("Downloads threads (requires restart)", "1", 1, TextField.NUMERIC));
		append(callGC = new TextField("Invoke System.gc()? (0-3):", "1", 1, TextField.NUMERIC));
		loadPrefs();
	}

	private void loadPrefs() {
		gatewayURL.setString(app.prefs.getString("gatewayURL", "http://"));
		gatewayAuth.setString(app.prefs.getString("gatewayAuth", ""));
		searchTerms.setString(app.prefs.getString("searchTerms", ""));
		mapPinTextRadius.setString(app.prefs.getString("mapPinTextRadius", "400"));
		moveSpeed1.setString(app.prefs.getString("moveSpeed1", "5"));
		moveSpeed2.setString(app.prefs.getString("moveSpeed2", "16"));
		moveSpeedTimeout.setString(app.prefs.getString("moveSpeedTimeout", "800"));
		memCacheSize.setString(app.prefs.getString("memCacheSize", "100"));
		rmsCacheSize.setString(app.prefs.getString("rmsCacheSize", "2000"));
		rmsSpaceReserved.setString(app.prefs.getString("rmsSpaceReserved", "100"));
		downloadThreads.setString(app.prefs.getString("downloadThreads", "1"));
		callGC.setString(app.prefs.getString("callGC", "0"));
	}

	private void savePrefs() {
		app.prefs.put("gatewayURL", gatewayURL.getString());
		app.prefs.put("gatewayAuth", gatewayAuth.getString());
		app.prefs.put("searchTerms", searchTerms.getString());
		app.prefs.put("mapPinTextRadius", mapPinTextRadius.getString());
		app.prefs.put("moveSpeed1", moveSpeed1.getString());
		app.prefs.put("moveSpeed2", moveSpeed2.getString());
		app.prefs.put("moveSpeedTimeout", moveSpeedTimeout.getString());
		app.prefs.put("memCacheSize", memCacheSize.getString());
		app.prefs.put("rmsCacheSize", rmsCacheSize.getString());
		app.prefs.put("rmsSpaceReserved", rmsSpaceReserved.getString());
		app.prefs.put("downloadThreads", downloadThreads.getString());
		app.prefs.put("callGC", callGC.getString());
		app.prefs.savePreferences();		
	}

	public void commandAction(Command c, Displayable d) {
		switch (c.getCommandType()) {
			case Command.OK:
				savePrefs();
				app.display.setCurrent(app.mainMenu);
				break;
			case Command.CANCEL:
				loadPrefs(); // undo changes
				app.display.setCurrent(app.mainMenu);
				break;
			default:
				throw new IllegalArgumentException("Unrecognized command: " + c);
		}
	}

}