X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosuilib%2FAltosUIMapPreloadNew.java;h=d043e9e34bc7580c9685112762438f0558d2487a;hp=4a5764c83a0a14f464ea625af983d446225e25a0;hb=59a9bdd73b580a9c934a574be7bf45c5033e14b5;hpb=c63617415553d97f9be2f19b94365b53d4480c68 diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreloadNew.java index 4a5764c8..d043e9e3 100644 --- a/altosuilib/AltosUIMapPreloadNew.java +++ b/altosuilib/AltosUIMapPreloadNew.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_7; +package org.altusmetrum.altosuilib_11; import java.awt.*; import java.awt.event.*; @@ -26,7 +26,7 @@ import java.text.*; import java.lang.Math; import java.net.URL; import java.net.URLConnection; -import org.altusmetrum.altoslib_7.*; +import org.altusmetrum.altoslib_11.*; class AltosUIMapPos extends Box { AltosUIFrame owner; @@ -118,7 +118,7 @@ class AltosUIMapPos extends Box { } } -public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener, ItemListener, AltosLaunchSiteListener, AltosMapLoaderListener { +public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener, ItemListener, AltosLaunchSiteListener, AltosMapLoaderListener, AltosUnitsListener, AltosFontListener { AltosUIFrame owner; AltosUIMapNew map; @@ -127,31 +127,40 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener JProgressBar pbar; - AltosMapLoader loader; - JLabel site_list_label; JComboBox site_list; JToggleButton load_button; - boolean loading; JButton close_button; JCheckBox[] maptypes = new JCheckBox[AltosMap.maptype_terrain - AltosMap.maptype_hybrid + 1]; JComboBox min_zoom; JComboBox max_zoom; - JComboBox radius; + JLabel radius_label; + JComboBox radius; + int scale = 1; Integer[] zooms = { -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6 }; - Integer[] radii = { 1, 2, 3, 4, 5 }; + + Double[] radius_mi = { 1.0, 2.0, 5.0, 10.0, 20.0 }; + Double radius_def_mi = 5.0; + Double[] radius_km = { 2.0, 5.0, 10.0, 20.0, 30.0 }; + Double radius_def_km = 10.0; + + AltosMapLoader loader; static final String[] lat_hemi_names = { "N", "S" }; static final String[] lon_hemi_names = { "E", "W" }; double latitude, longitude; + long loader_notify_time; + /* AltosMapLoaderListener interfaces */ public void loader_start(final int max) { + loader_notify_time = System.currentTimeMillis(); + SwingUtilities.invokeLater(new Runnable() { public void run() { pbar.setMaximum(max); @@ -164,6 +173,13 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener } public void loader_notify(final int cur, final int max, final String name) { + long now = System.currentTimeMillis(); + + if (now - loader_notify_time < 100) + return; + + loader_notify_time = now; + SwingUtilities.invokeLater(new Runnable() { public void run() { pbar.setValue(cur); @@ -173,16 +189,22 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener } public void loader_done(int max) { + loader = null; SwingUtilities.invokeLater(new Runnable() { public void run() { pbar.setValue(0); pbar.setString(""); load_button.setSelected(false); - loading = false; } }); } + public void debug(String format, Object ... arguments) { + if (AltosSerial.debug) + System.out.printf(format, arguments); + } + + private int all_types() { int all_types = 0; for (int t = AltosMap.maptype_hybrid; t <= AltosMap.maptype_terrain; t++) @@ -207,11 +229,14 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); - if (cmd.equals("close")) + if (cmd.equals("close")) { + if (loader != null) + loader.abort(); setVisible(false); + } if (cmd.equals("load")) { - if (!loading) { + if (loader == null) { try { latitude = lat.get_value(); longitude = lon.get_value(); @@ -219,10 +244,20 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener int max_z = (Integer) max_zoom.getSelectedItem(); if (max_z < min_z) max_z = min_z; - int r = (Integer) radius.getSelectedItem(); - loading = true; + Double r = (Double) radius.getSelectedItem(); + + if (AltosPreferences.imperial_units()) + r = AltosConvert.miles_to_meters(r); + else + r = r * 1000; + + map.map.centre(new AltosLatLon(latitude, longitude)); + + loader = new AltosMapLoader(this, + latitude, longitude, + min_z, max_z, r, + all_types(), scale); - loader.load(latitude, longitude, min_z, max_z, r, all_types()); } catch (ParseException pe) { load_button.setSelected(false); } @@ -242,6 +277,35 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener }); } + private void set_radius_values() { + radius_label.setText(String.format("Map Radius (%s)", + AltosPreferences.imperial_units() ? "mi" : "km")); + + Double[] radii; + + if (AltosPreferences.imperial_units()) + radii = radius_mi; + else + radii = radius_km; + + radius.removeAllItems(); + for (Double r : radii) { + System.out.printf("adding radius %f\n",r); + radius.addItem(r); + } + radius.setSelectedItem(radii[2]); + radius.setMaximumRowCount(radii.length); + } + + public void units_changed(boolean imperial_units) { + map.units_changed(imperial_units); + set_radius_values(); + } + + public void font_size_changed(int font_size) { + map.font_size_changed(font_size); + } + public AltosUIMapPreloadNew(AltosUIFrame in_owner) { owner = in_owner; @@ -253,9 +317,19 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener pane.setLayout(new GridBagLayout()); - map = new AltosUIMapNew(); + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + AltosUIPreferences.unregister_font_listener(AltosUIMapPreloadNew.this); + AltosPreferences.unregister_units_listener(AltosUIMapPreloadNew.this); + } + }); + - loader = new AltosMapLoader(map.map, this); + AltosPreferences.register_units_listener(this); + AltosUIPreferences.register_font_listener(this); + + map = new AltosUIMapNew(); c.fill = GridBagConstraints.BOTH; c.anchor = GridBagConstraints.CENTER; @@ -430,18 +504,20 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener c.gridy = 3; pane.add(max_zoom, c); - JLabel radius_label = new JLabel("Tile Radius"); + radius_label = new JLabel(); + c.gridx = 4; c.gridy = 4; pane.add(radius_label, c); - radius = new JComboBox(radii); - radius.setSelectedItem(radii[4]); + radius = new JComboBox(); radius.setEditable(true); c.gridx = 5; c.gridy = 4; pane.add(radius, c); + set_radius_values(); + pack(); setLocationRelativeTo(owner); setVisible(true);