implement saving preference for swing version

git-svn-id: https://osmand.googlecode.com/svn/trunk@58 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
This commit is contained in:
Victor Shcherb 2010-05-15 11:07:17 +00:00
parent 6af7969c8a
commit 5a66576ee7
10 changed files with 131 additions and 71 deletions

View file

@ -1,32 +1,11 @@
package com.osmand;
import com.osmand.map.ITileSource;
import com.osmand.map.TileSourceManager;
/**
* This is temp class where all path & machine specific properties are written
*/
public abstract class DefaultLauncherConstants {
// External files
public static String pathToTestDataDir = "E:\\Information\\OSM maps\\";
public static String pathToOsmFile = pathToTestDataDir + "minsk.osm";
public static String pathToOsmBz2File = pathToTestDataDir + "belarus_2010_04_01.osm.bz2";
public static String pathToWorkingDir = pathToTestDataDir +"osmand\\";
public static String pathToDirWithTiles = pathToWorkingDir +"tiles";
public static String writeTestOsmFile = "C:\\1_tmp.osm"; // could be null - wo writing
// Initial map settings
public static double MAP_startMapLongitude = 27.56;
public static double MAP_startMapLatitude = 53.9;
public static int MAP_startMapZoom = 15;
public static int MAP_divNonLoadedImage = 16;
public static boolean loadMissingImages = true;
public static ITileSource MAP_defaultTileSource = TileSourceManager.getMapnikSource();
public static boolean showGPSCoordinates = true;
// Application constants
@ -36,10 +15,7 @@ public abstract class DefaultLauncherConstants {
// Download manager tile settings
public static int TILE_DOWNLOAD_THREADS = 4;
public static int TILE_DOWNLOAD_SECONTS_TO_WORK = 25;
public static int TILE_DOWNLOAD_SECONDS_TO_WORK = 25;
public static final int TILE_DOWNLOAD_MAX_ERRORS = -1;
}

View file

@ -40,7 +40,7 @@ public class ToDoConstants {
/// SWING version :
// TODO :
// 1. save preferences ? where? (use internet, default dir save and other...)
// 1. Add preferences dialog (use internet, )
// 2. specify area to download tiles ()
// 3. download tiles without using dir tiles
// 4. Config file log & see log from file

View file

@ -17,7 +17,6 @@ import org.apache.tools.bzip2.CBZip2InputStream;
import org.apache.tools.bzip2.CBZip2OutputStream;
import org.xml.sax.SAXException;
import com.osmand.DefaultLauncherConstants;
import com.osmand.IProgress;
import com.osmand.data.Amenity;
import com.osmand.data.City;
@ -78,7 +77,13 @@ public class DataExtraction {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XMLStreamException {
new DataExtraction().testReadingOsmFile();
}
// External files
public static String pathToTestDataDir = "E:\\Information\\OSM maps\\";
public static String pathToOsmFile = pathToTestDataDir + "minsk.osm";
public static String pathToOsmBz2File = pathToTestDataDir + "belarus_2010_04_01.osm.bz2";
public static String pathToWorkingDir = pathToTestDataDir +"osmand\\";
public static String pathToDirWithTiles = pathToWorkingDir +"tiles";
public static String writeTestOsmFile = "C:\\1_tmp.osm"; // could be null - wo writing
private static boolean parseSmallFile = true;
private static boolean parseOSM = true;
@ -93,9 +98,9 @@ public class DataExtraction {
public void testReadingOsmFile() throws ParserConfigurationException, SAXException, IOException, XMLStreamException {
String f;
if(parseSmallFile){
f = DefaultLauncherConstants.pathToOsmFile;
f = pathToOsmFile;
} else {
f = DefaultLauncherConstants.pathToOsmBz2File;
f = pathToOsmBz2File;
}
long st = System.currentTimeMillis();
@ -116,10 +121,10 @@ public class DataExtraction {
// MapUtils.addIdsToList(amenities, interestedObjects);
MapUtils.addIdsToList(waysManager.getAllObjects(), interestedObjects);
// MapUtils.addIdsToList(buildings, interestedObjects);
if (DefaultLauncherConstants.writeTestOsmFile != null) {
if (writeTestOsmFile != null) {
OSMStorageWriter writer = new OSMStorageWriter(country.getStorage().getRegisteredEntities());
OutputStream output = new FileOutputStream(DefaultLauncherConstants.writeTestOsmFile);
if (DefaultLauncherConstants.writeTestOsmFile.endsWith(".bz2")) {
OutputStream output = new FileOutputStream(writeTestOsmFile);
if (writeTestOsmFile.endsWith(".bz2")) {
output.write('B');
output.write('Z');
output = new CBZip2OutputStream(output);

View file

@ -11,7 +11,6 @@ import javax.xml.stream.XMLStreamException;
import org.apache.tools.bzip2.CBZip2OutputStream;
import com.osmand.DefaultLauncherConstants;
import com.osmand.data.Amenity;
import com.osmand.data.Region;
import com.osmand.osm.io.OSMStorageWriter;
@ -47,7 +46,7 @@ public class DataIndexBuilder {
f.delete();
}
OutputStream output = new FileOutputStream(f);
if (DefaultLauncherConstants.writeTestOsmFile.endsWith(".bz2")) {
if (name.endsWith(".bz2")) {
output.write('B');
output.write('Z');
output = new CBZip2OutputStream(output);

View file

@ -87,7 +87,7 @@ public class MapTileDownloader {
public MapTileDownloader(int numberOfThreads){
threadPoolExecutor = new ThreadPoolExecutor(numberOfThreads, numberOfThreads, DefaultLauncherConstants.TILE_DOWNLOAD_SECONTS_TO_WORK,
threadPoolExecutor = new ThreadPoolExecutor(numberOfThreads, numberOfThreads, DefaultLauncherConstants.TILE_DOWNLOAD_SECONDS_TO_WORK,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
// 1.6 method but very useful to kill non-running threads
// threadPoolExecutor.allowCoreThreadTimeOut(true);

View file

@ -1,5 +1,11 @@
package com.osmand.swing;
import java.awt.Rectangle;
import java.io.File;
import java.util.prefs.Preferences;
import com.osmand.osm.LatLon;
public class DataExtractionSettings {
private static DataExtractionSettings settings = null;
@ -11,9 +17,65 @@ public class DataExtractionSettings {
}
Preferences preferences = Preferences.userRoot();
public void saveSettings(){
public File getTilesDirectory(){
return new File(getDefaultWorkingDir(), "tiles");
}
public File getDefaultWorkingDir(){
String workingDir = preferences.get("working_dir", System.getProperty("user.home"));
if(workingDir.equals(System.getProperty("user.home"))){
workingDir += "/osmand";
new File(workingDir).mkdir();
}
return new File(workingDir);
}
public void saveDefaultWorkingDir(File path){
preferences.put("working_dir", path.getAbsolutePath());
}
public LatLon getDefaultLocation(){
double lat = preferences.getDouble("default_lat", 53.9);
double lon = preferences.getDouble("default_lon", 27.56);
return new LatLon(lat, lon);
}
public void saveDefaultLocation(double lat, double lon){
preferences.putDouble("default_lat", lat);
preferences.putDouble("default_lon", lon);
}
public int getDefaultZoom(){
return preferences.getInt("default_zoom", 5);
}
public void saveDefaultZoom(int zoom){
preferences.putInt("default_zoom", zoom);
}
public Rectangle getWindowBounds(){
Rectangle r = new Rectangle();
r.x = preferences.getInt("window_x", 0);
r.y = preferences.getInt("window_y", 0);
r.width = preferences.getInt("window_width", 800);
r.height = preferences.getInt("window_height", 600);
return r;
}
public void saveWindowBounds(Rectangle r) {
preferences.putInt("window_x", r.x);
preferences.putInt("window_y", r.y);
preferences.putInt("window_width", r.width);
preferences.putInt("window_height", r.height);
}
public boolean useInternetToLoadImages(){
// TODO save the property if needed
return true;
}
}
}

View file

@ -15,6 +15,8 @@ import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
@ -36,7 +38,6 @@ import javax.swing.UIManager;
import org.apache.commons.logging.Log;
import com.osmand.DefaultLauncherConstants;
import com.osmand.IMapLocationListener;
import com.osmand.LogUtil;
import com.osmand.data.DataTileManager;
@ -54,6 +55,7 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
private static final long serialVersionUID = 1L;
protected static final Log log = LogUtil.getLog(MapPanel.class);
public static final int divNonLoadedImage = 16;
public static JMenu getMenuToChooseSource(final MapPanel panel){
final JMenu tiles = new JMenu("Source tile");
@ -74,8 +76,9 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
}
});
if(l.equals(DefaultLauncherConstants.MAP_defaultTileSource)){
if(l.equals(TileSourceManager.getMapnikSource())){
menuItem.setSelected(true);
panel.setMapName(l);
}
tiles.add(menuItem);
}
@ -85,19 +88,24 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame("Tree of choose");
JFrame frame = new JFrame("Map view");
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
frame.addWindowListener(new OsmExtractionUI.ExitListener());
final MapPanel panel = new MapPanel(DataExtractionSettings.getSettings().getTilesDirectory());
frame.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
DataExtractionSettings settings = DataExtractionSettings.getSettings();
settings.saveDefaultLocation(panel.getLatitude(), panel.getLongitude());
settings.saveDefaultZoom(panel.getZoom());
System.exit(0);
}
});
Container content = frame.getContentPane();
MapPanel panel = new MapPanel(new File(DefaultLauncherConstants.pathToDirWithTiles));
content.add(panel, BorderLayout.CENTER);
JMenuBar bar = new JMenuBar();
@ -111,21 +119,21 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
private File tilesLocation = null;
// name of source map
private ITileSource map = DefaultLauncherConstants.MAP_defaultTileSource;
private ITileSource map;
// special points to draw
private DataTileManager<LatLon> points;
// zoom level
private int zoom = DefaultLauncherConstants.MAP_startMapZoom;
private int zoom = 1;
// degree measurements (-180, 180)
// долгота
private double longitude = DefaultLauncherConstants.MAP_startMapLongitude;
private double longitude;
// широта
// degree measurements (90, -90)
private double latitude = DefaultLauncherConstants.MAP_startMapLatitude;
private double latitude;
private List<IMapLocationListener> listeners = new ArrayList<IMapLocationListener>();
@ -145,6 +153,12 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
public MapPanel(File fileWithTiles) {
tilesLocation = fileWithTiles;
LatLon defaultLocation = DataExtractionSettings.getSettings().getDefaultLocation();
latitude = defaultLocation.getLatitude();
longitude = defaultLocation.getLongitude();
zoom = DataExtractionSettings.getSettings().getDefaultZoom();
downloader.setDownloaderCallback(this);
setFocusable(true);
addComponentListener(new ComponentAdapter(){
@ -181,7 +195,7 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
for (int i = 0; i < images.length; i++) {
for (int j = 0; j < images[i].length; j++) {
if (images[i][j] == null) {
int div = DefaultLauncherConstants.MAP_divNonLoadedImage;
int div = divNonLoadedImage;
int tileDiv = getTileSize() / div;
for (int k1 = 0; k1 < div; k1++) {
for (int k2 = 0; k2 < div; k2++) {
@ -234,6 +248,7 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
public void setTilesLocation(File tilesLocation) {
this.tilesLocation = tilesLocation;
cache.clear();
prepareImage();
}
@ -299,7 +314,7 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
}
public void prepareImage(){
prepareImage(DefaultLauncherConstants.loadMissingImages);
prepareImage(DataExtractionSettings.getSettings().useInternetToLoadImages());
}
public void prepareImage(boolean loadNecessaryImages){

View file

@ -59,7 +59,6 @@ import org.apache.commons.logging.LogFactory;
import org.xml.sax.SAXException;
import com.osmand.Algoritms;
import com.osmand.DefaultLauncherConstants;
import com.osmand.ExceptionHandler;
import com.osmand.IMapLocationListener;
import com.osmand.data.Amenity;
@ -83,11 +82,12 @@ public class OsmExtractionUI implements IMapLocationListener {
public static void main(String[] args) {
OsmExtractionUI ui = new OsmExtractionUI(null);
ui.runUI();
ui.frame.setBounds(DataExtractionSettings.getSettings().getWindowBounds());
ui.frame.setVisible(true);
}
protected City selectedCity;
private MapPanel mapPanel = new MapPanel(new File(DefaultLauncherConstants.pathToDirWithTiles));
private MapPanel mapPanel;
private DataExtractionTreeNode amenitiesTree;
private JTree treePlaces;
@ -98,7 +98,6 @@ public class OsmExtractionUI implements IMapLocationListener {
private JLabel statusBarLabel;
private Region region;
private File workingDir;
private JButton generateDataButton;
private JCheckBox buildPoiIndex;
private JCheckBox buildAddressIndex;
@ -107,7 +106,7 @@ public class OsmExtractionUI implements IMapLocationListener {
public OsmExtractionUI(final Region r){
this.region = r;
workingDir = new File(DefaultLauncherConstants.pathToWorkingDir);
mapPanel = new MapPanel(DataExtractionSettings.getSettings().getTilesDirectory());
createUI();
setRegion(r, "Region");
}
@ -181,6 +180,7 @@ public class OsmExtractionUI implements IMapLocationListener {
statusBarLabel = new JLabel();
content.add(statusBarLabel, BorderLayout.SOUTH);
File workingDir = DataExtractionSettings.getSettings().getDefaultWorkingDir();
statusBarLabel.setText(workingDir == null ? "<working directory unspecified>" : "Working directory : " + workingDir.getAbsolutePath());
@ -264,7 +264,7 @@ public class OsmExtractionUI implements IMapLocationListener {
}
protected void updateButtonsBar() {
generateDataButton.setEnabled(workingDir != null && region != null);
generateDataButton.setEnabled(region != null);
buildAddressIndex.setEnabled(generateDataButton.isEnabled() && region.getCitiesCount(null) > 0);
buildPoiIndex.setEnabled(generateDataButton.isEnabled() && !region.getAmenityManager().isEmpty());
}
@ -283,7 +283,7 @@ public class OsmExtractionUI implements IMapLocationListener {
@Override
public void actionPerformed(ActionEvent e) {
DataIndexBuilder builder = new DataIndexBuilder(workingDir, region);
DataIndexBuilder builder = new DataIndexBuilder(DataExtractionSettings.getSettings().getDefaultWorkingDir(), region);
StringBuilder msg = new StringBuilder();
try {
msg.append("Indices checked for ").append(region.getName());
@ -381,10 +381,6 @@ public class OsmExtractionUI implements IMapLocationListener {
}
public void runUI(){
frame.setSize(1024, 768);
frame.setVisible(true);
}
public void fillMenuWithActions(JMenuBar bar){
JMenu menu = new JMenu("File");
@ -412,12 +408,14 @@ public class OsmExtractionUI implements IMapLocationListener {
JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Choose working directory");
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
File workingDir = DataExtractionSettings.getSettings().getDefaultWorkingDir();
if(workingDir != null){
fc.setCurrentDirectory(workingDir);
}
if(fc.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION && fc.getSelectedFile() != null &&
fc.getSelectedFile().isDirectory()){
workingDir = fc.getSelectedFile();
DataExtractionSettings.getSettings().saveDefaultWorkingDir(fc.getSelectedFile());
mapPanel.setTilesLocation(DataExtractionSettings.getSettings().getTilesDirectory());
statusBarLabel.setText("Working directory : " + fc.getSelectedFile().getAbsolutePath());
updateButtonsBar();
}
@ -433,7 +431,7 @@ public class OsmExtractionUI implements IMapLocationListener {
fc.setDialogTitle("Choose osm file");
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.setAcceptAllFileFilterUsed(true);
fc.setCurrentDirectory(new File(DefaultLauncherConstants.pathToTestDataDir));
fc.setCurrentDirectory(DataExtractionSettings.getSettings().getDefaultWorkingDir());
//System.out.println("opening fc for extension " + extension);
fc.setFileFilter(new FileFilter(){
@ -599,10 +597,16 @@ public class OsmExtractionUI implements IMapLocationListener {
}
}
public static class ExitListener extends WindowAdapter {
public class ExitListener extends WindowAdapter {
public void windowClosing(WindowEvent event) {
// save preferences
DataExtractionSettings settings = DataExtractionSettings.getSettings();
settings.saveDefaultLocation(mapPanel.getLatitude(), mapPanel.getLongitude());
settings.saveDefaultZoom(mapPanel.getZoom());
settings.saveWindowBounds(frame.getBounds());
System.exit(0);
}
}
}

View file

@ -41,7 +41,7 @@ public class OsmandSettings {
}
}
}
return DefaultLauncherConstants.MAP_defaultTileSource;
return TileSourceManager.getMapnikSource();
}
public static String getMapTileSourceName(Context ctx){
@ -50,7 +50,7 @@ public class OsmandSettings {
if(tileName != null){
return tileName;
}
return DefaultLauncherConstants.MAP_defaultTileSource.getName();
return TileSourceManager.getMapnikSource().getName();
}

View file

@ -20,7 +20,6 @@ import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
import com.osmand.DefaultLauncherConstants;
import com.osmand.IMapLocationListener;
import com.osmand.LogUtil;
import com.osmand.OsmandSettings;
@ -34,7 +33,7 @@ import com.osmand.views.AnimateDraggingMapThread.AnimateDraggingCallback;
public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCallback, Callback, AnimateDraggingCallback{
protected final int emptyTileDivisor = DefaultLauncherConstants.MAP_divNonLoadedImage;
protected final int emptyTileDivisor = 16;
protected final int timeForDraggingAnimation = 300;
protected final int minimumDistanceForDraggingAnimation = 40;