fix small bugs for swing version
git-svn-id: https://osmand.googlecode.com/svn/trunk@50 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
This commit is contained in:
parent
acd99e37e6
commit
0a146f6088
5 changed files with 231 additions and 120 deletions
|
@ -130,6 +130,11 @@ public class Amenity {
|
|||
return getType().toString() +" : " + getSubType() + " " +(name == null ? node.getId() : name);
|
||||
}
|
||||
|
||||
public String getStringWithoutType(){
|
||||
String name = node.getTag(OSMTagKey.NAME);
|
||||
return getSubType() + " " +(name == null ? node.getId() : name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getSimpleFormat();
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.awt.Menu;
|
|||
import java.awt.MenuBar;
|
||||
import java.awt.MenuItem;
|
||||
import java.awt.Point;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ComponentAdapter;
|
||||
|
@ -16,6 +17,7 @@ import java.awt.event.ComponentEvent;
|
|||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseWheelEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
@ -27,6 +29,7 @@ import java.util.Map;
|
|||
|
||||
import javax.imageio.IIOException;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.UIManager;
|
||||
|
@ -116,6 +119,9 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
|
|||
|
||||
private List<IMapLocationListener> listeners = new ArrayList<IMapLocationListener>();
|
||||
|
||||
private MapSelectionArea selectionArea = new MapSelectionArea();
|
||||
|
||||
|
||||
// cached data to draw image
|
||||
private Image[][] images;
|
||||
private int xStartingImage = 0;
|
||||
|
@ -136,9 +142,13 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
|
|||
prepareImage();
|
||||
}
|
||||
});
|
||||
setOpaque(false);
|
||||
MapMouseAdapter mouse = new MapMouseAdapter();
|
||||
addMouseListener(mouse);
|
||||
addMouseMotionListener(mouse);
|
||||
addMouseWheelListener(mouse);
|
||||
|
||||
addZoomButtons();
|
||||
}
|
||||
|
||||
|
||||
|
@ -188,12 +198,21 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
|
|||
g.fillOval(p.x, p.y, 3, 3);
|
||||
}
|
||||
|
||||
if(selectionArea.isVisible()){
|
||||
g.setColor(new Color(0, 0, 230, 50));
|
||||
Rectangle r = selectionArea.getSelectedArea();
|
||||
g.fillRect(r.x, r.y, r.width, r.height);
|
||||
}
|
||||
|
||||
g.setColor(Color.black);
|
||||
String s = MessageFormat.format("Lat : {0}, lon : {1}, zoom : {2}", latitude, longitude, zoom);
|
||||
g.drawString(s, 5, 20);
|
||||
|
||||
g.fillOval(getWidth() / 2 - 2, getHeight() / 2 - 2, 4, 4);
|
||||
g.drawOval(getWidth() / 2 - 2, getHeight() / 2 - 2, 4, 4);
|
||||
g.drawOval(getWidth() / 2 - 5, getHeight() / 2 - 5, 10, 10);
|
||||
|
||||
super.paintComponent(g);
|
||||
}
|
||||
|
||||
|
||||
|
@ -331,6 +350,9 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
|
|||
|
||||
|
||||
public void setZoom(int zoom){
|
||||
if(map != null && (zoom > map.getMaximumZoomSupported() || zoom < map.getMinimumZoomSupported())){
|
||||
return;
|
||||
}
|
||||
this.zoom = zoom;
|
||||
prepareImage();
|
||||
}
|
||||
|
@ -354,6 +376,10 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
|
|||
return zoom;
|
||||
}
|
||||
|
||||
public MapSelectionArea getSelectionArea() {
|
||||
return selectionArea;
|
||||
}
|
||||
|
||||
public ITileSource getMap(){
|
||||
return map;
|
||||
}
|
||||
|
@ -434,10 +460,97 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
|
|||
|
||||
public void setPoints(DataTileManager<LatLon> points) {
|
||||
this.points = points;
|
||||
prepareImage();
|
||||
}
|
||||
|
||||
public void addZoomButtons(){
|
||||
JButton zoomIn = new JButton("+");
|
||||
JButton zoomOut = new JButton("-");
|
||||
zoomIn.addActionListener(new ActionListener(){
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
setZoom(getZoom() + 1);
|
||||
}
|
||||
});
|
||||
zoomOut.addActionListener(new ActionListener(){
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
setZoom(getZoom() - 1);
|
||||
}
|
||||
});
|
||||
add(zoomIn);
|
||||
add(zoomOut);
|
||||
}
|
||||
|
||||
public class MapSelectionArea {
|
||||
|
||||
private double lat1;
|
||||
private double lon1;
|
||||
private double lat2;
|
||||
private double lon2;
|
||||
|
||||
|
||||
public double getLat1() {
|
||||
return lat1;
|
||||
}
|
||||
|
||||
public double getLat2() {
|
||||
return lat2;
|
||||
}
|
||||
|
||||
public double getLon1() {
|
||||
return lon1;
|
||||
}
|
||||
|
||||
public double getLon2() {
|
||||
return lon2;
|
||||
}
|
||||
|
||||
public Rectangle getSelectedArea(){
|
||||
Rectangle r = new Rectangle();
|
||||
r.x = getWidth() / 2 + MapUtils.getPixelShiftX(zoom, lon1, getLongitude(), getTileSize());
|
||||
r.y = getHeight() / 2 + MapUtils.getPixelShiftY(zoom, lat1, getLatitude(), getTileSize());
|
||||
r.width = getWidth() / 2 + MapUtils.getPixelShiftX(zoom, lon2, getLongitude(), getTileSize()) - r.x;
|
||||
r.height = getHeight() / 2 + MapUtils.getPixelShiftY(zoom, lat2, getLatitude(), getTileSize()) - r.y;
|
||||
return r;
|
||||
}
|
||||
|
||||
public boolean isVisible(){
|
||||
if(lat1 == lat2 || lon1 == lon2){
|
||||
return false;
|
||||
}
|
||||
Rectangle area = getSelectedArea();
|
||||
return area.width > 4 && area.height > 4;
|
||||
}
|
||||
|
||||
|
||||
public void setSelectedArea(int x1, int y1, int x2, int y2){
|
||||
int rx1 = Math.min(x1, x2);
|
||||
int rx2 = Math.max(x1, x2);
|
||||
int ry1 = Math.min(y1, y2);
|
||||
int ry2 = Math.max(y1, y2);
|
||||
int zoom = getZoom();
|
||||
double xTile = getXTile();
|
||||
double yTile = getYTile();
|
||||
int wid = getWidth();
|
||||
int h = getHeight();
|
||||
int tileSize = getTileSize();
|
||||
|
||||
double xTile1 = xTile - (wid / 2 - rx1) / ((double)tileSize);
|
||||
double yTile1 = yTile - (h / 2 - ry1) / ((double)tileSize);
|
||||
double xTile2 = xTile - (wid / 2 - rx2) / ((double)tileSize);
|
||||
double yTile2 = yTile - (h / 2 - ry2) / ((double)tileSize);
|
||||
lat1 = MapUtils.getLatitudeFromTile(zoom, yTile1);
|
||||
lat2 = MapUtils.getLatitudeFromTile(zoom, yTile2);
|
||||
lon1 = MapUtils.getLongitudeFromTile(zoom, xTile1);
|
||||
lon2 = MapUtils.getLongitudeFromTile(zoom, xTile2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class MapMouseAdapter extends MouseAdapter {
|
||||
private Point startDragging = null;
|
||||
private Point startSelecting = null;
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
|
@ -462,14 +575,29 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
|
|||
startDragging = e.getPoint();
|
||||
}
|
||||
}
|
||||
if(startSelecting != null){
|
||||
selectionArea.setSelectedArea(startSelecting.x, startSelecting.y, e.getPoint().x, e.getPoint().y);
|
||||
updateUI();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseWheelMoved(MouseWheelEvent e) {
|
||||
if(e.getWheelRotation() < 0){
|
||||
setZoom(getZoom() + 1);
|
||||
} else if(e.getWheelRotation() > 0) {
|
||||
setZoom(getZoom() - 1);
|
||||
}
|
||||
super.mouseWheelMoved(e);
|
||||
}
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if(e.getButton() == MouseEvent.BUTTON3){
|
||||
if(startDragging == null){
|
||||
startDragging = e.getPoint();
|
||||
}
|
||||
} else if(e.getButton() == MouseEvent.BUTTON1){
|
||||
startSelecting = e.getPoint();
|
||||
}
|
||||
}
|
||||
@Override
|
||||
|
@ -481,6 +609,14 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
|
|||
startDragging = null;
|
||||
}
|
||||
}
|
||||
if(e.getButton() == MouseEvent.BUTTON1){
|
||||
if(startSelecting != null){
|
||||
selectionArea.setSelectedArea(startSelecting.x, startSelecting.y, e.getPoint().x, e.getPoint().y);
|
||||
startSelecting = null;
|
||||
updateUI();
|
||||
}
|
||||
|
||||
}
|
||||
super.mouseReleased(e);
|
||||
}
|
||||
|
||||
|
|
|
@ -43,6 +43,8 @@ import javax.swing.filechooser.FileFilter;
|
|||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import com.osmand.DataExtraction;
|
||||
|
@ -53,6 +55,7 @@ import com.osmand.data.City;
|
|||
import com.osmand.data.DataTileManager;
|
||||
import com.osmand.data.Region;
|
||||
import com.osmand.data.Street;
|
||||
import com.osmand.data.Amenity.AmenityType;
|
||||
import com.osmand.data.City.CityType;
|
||||
import com.osmand.osm.Entity;
|
||||
import com.osmand.osm.LatLon;
|
||||
|
@ -61,8 +64,15 @@ import com.osmand.osm.Node;
|
|||
import com.osmand.osm.OSMSettings.OSMTagKey;
|
||||
|
||||
public class OsmExtractionUI implements IMapLocationListener {
|
||||
protected City selectedCity;
|
||||
|
||||
private static final Log log = LogFactory.getLog(OsmExtractionUI.class);
|
||||
|
||||
public static void main(String[] args) {
|
||||
OsmExtractionUI ui = new OsmExtractionUI(null);
|
||||
ui.runUI();
|
||||
}
|
||||
|
||||
protected City selectedCity;
|
||||
private MapPanel mapPanel = new MapPanel(new File(DefaultLauncherConstants.pathToDirWithTiles));
|
||||
|
||||
private DefaultMutableTreeNode amenitiesTree;
|
||||
|
@ -81,10 +91,6 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
workingDir = new File(DefaultLauncherConstants.pathToWorkingDir);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
OsmExtractionUI ui = new OsmExtractionUI(null);
|
||||
ui.runUI();
|
||||
}
|
||||
|
||||
public void setRegion(Region region){
|
||||
if (this.region == region) {
|
||||
|
@ -94,6 +100,9 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
DefaultMutableTreeNode root = new DefaultMutableTreeNode();
|
||||
amenitiesTree = new DataExtractionTreeNode("Amenities", region);
|
||||
amenitiesTree.add(new DataExtractionTreeNode("closest", region));
|
||||
for(AmenityType type : AmenityType.values()){
|
||||
amenitiesTree.add(new DataExtractionTreeNode(type.toString().toLowerCase(), type));
|
||||
}
|
||||
root.add(amenitiesTree);
|
||||
|
||||
if (region != null) {
|
||||
|
@ -131,7 +140,7 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
|
||||
|
||||
public void createUI(){
|
||||
frame = new JFrame("Tree of choose");
|
||||
frame = new JFrame("OsmAnd Map Creator");
|
||||
try {
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||
} catch (Exception e) {
|
||||
|
@ -222,7 +231,6 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
}
|
||||
|
||||
});
|
||||
|
||||
treePlaces.addTreeSelectionListener(new TreeSelectionListener(){
|
||||
@Override
|
||||
public void valueChanged(TreeSelectionEvent e) {
|
||||
|
@ -235,6 +243,11 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
mapPanel.setLatLon(c.getNode().getLatitude(), c.getNode().getLongitude());
|
||||
mapPanel.requestFocus();
|
||||
}
|
||||
if (o instanceof Amenity) {
|
||||
Amenity c = (Amenity) o;
|
||||
mapPanel.setLatLon(c.getNode().getLatitude(), c.getNode().getLongitude());
|
||||
mapPanel.requestFocus();
|
||||
}
|
||||
|
||||
if (o instanceof Entity) {
|
||||
Entity c = (Entity) o;
|
||||
|
@ -348,13 +361,16 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
}
|
||||
});
|
||||
Region region = (Region) dlg.run();
|
||||
setRegion(region);
|
||||
if(region != null){
|
||||
setRegion(region);
|
||||
frame.setTitle("OsmAnd Map Creator - " + f.getName());
|
||||
} else {
|
||||
//frame.setTitle("OsmAnd Map Creator");
|
||||
}
|
||||
} catch (InterruptedException e1) {
|
||||
// TODO
|
||||
e1.printStackTrace();
|
||||
log.error("Interrupted", e1);
|
||||
} catch (InvocationTargetException e1) {
|
||||
// TODO
|
||||
e1.printStackTrace();
|
||||
log.error("Exception during operation", e1.getCause());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -371,20 +387,28 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
}
|
||||
});
|
||||
|
||||
Map<String, List<Amenity>> filter = new TreeMap<String, List<Amenity>>();
|
||||
Map<AmenityType, List<Amenity>> filter = new TreeMap<AmenityType, List<Amenity>>();
|
||||
for (Amenity n : closestAmenities) {
|
||||
String type = n.getType().toString();
|
||||
AmenityType type = n.getType();
|
||||
if (!filter.containsKey(type)) {
|
||||
filter.put(type, new ArrayList<Amenity>());
|
||||
}
|
||||
filter.get(type).add(n);
|
||||
}
|
||||
for (int i = 1; i < amenitiesTree.getChildCount();) {
|
||||
if (!filter.containsKey(((DefaultMutableTreeNode) amenitiesTree.getChildAt(i)).getUserObject())) {
|
||||
amenitiesTree.remove(i);
|
||||
} else {
|
||||
i++;
|
||||
|
||||
|
||||
for (int i = 1; i < amenitiesTree.getChildCount(); i++) {
|
||||
AmenityType type = (AmenityType) ((DefaultMutableTreeNode) amenitiesTree.getChildAt(i)).getUserObject();
|
||||
((DefaultMutableTreeNode) amenitiesTree.getChildAt(i)).removeAllChildren();
|
||||
if (filter.get(type) != null) {
|
||||
for (Amenity n : filter.get(type)) {
|
||||
int dist = (int) (MapUtils.getDistance(n.getNode(), newLatitude, newLongitude));
|
||||
String str = n.getStringWithoutType() + " [" + dist + " m ]";
|
||||
DataExtractionTreeNode node = new DataExtractionTreeNode(str, n);
|
||||
((DefaultMutableTreeNode) amenitiesTree.getChildAt(i)).add(node);
|
||||
}
|
||||
}
|
||||
((DefaultTreeModel)treePlaces.getModel()).nodeStructureChanged(amenitiesTree.getChildAt(i));
|
||||
}
|
||||
((DefaultMutableTreeNode) amenitiesTree.getChildAt(0)).removeAllChildren();
|
||||
|
||||
|
@ -393,30 +417,10 @@ public class OsmExtractionUI implements IMapLocationListener {
|
|||
int dist = (int) (MapUtils.getDistance(n.getNode(), newLatitude, newLongitude));
|
||||
String str = n.getSimpleFormat() + " [" + dist + " m ]";
|
||||
((DefaultMutableTreeNode) amenitiesTree.getChildAt(0)).add(new DataExtractionTreeNode(str, n));
|
||||
((DefaultTreeModel)treePlaces.getModel()).nodeStructureChanged(amenitiesTree.getChildAt(0));
|
||||
}
|
||||
|
||||
for (String s : filter.keySet()) {
|
||||
DefaultMutableTreeNode p = null;
|
||||
for (int i = 0; i < amenitiesTree.getChildCount(); i++) {
|
||||
if (s.equals(((DefaultMutableTreeNode) amenitiesTree.getChildAt(i)).getUserObject())) {
|
||||
p = ((DefaultMutableTreeNode) amenitiesTree.getChildAt(i));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (p == null) {
|
||||
p = new DefaultMutableTreeNode(s);
|
||||
}
|
||||
|
||||
p.removeAllChildren();
|
||||
for (Amenity n : filter.get(s)) {
|
||||
int dist = (int) (MapUtils.getDistance(n.getNode(), newLatitude, newLongitude));
|
||||
String str = n.getSimpleFormat() + " [" + dist + " m ]";
|
||||
DataExtractionTreeNode node = new DataExtractionTreeNode(str, n);
|
||||
p.add(node);
|
||||
}
|
||||
amenitiesTree.add(p);
|
||||
}
|
||||
treePlaces.updateUI();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ import javax.swing.JLabel;
|
|||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JProgressBar;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import com.osmand.IProgress;
|
||||
|
||||
|
@ -45,39 +46,38 @@ public class ProgressDialog extends JDialog implements IProgress {
|
|||
initDialog();
|
||||
}
|
||||
|
||||
public Object run() throws InvocationTargetException, InterruptedException {
|
||||
finished = false;
|
||||
result = null;
|
||||
new WorkerThread().start();
|
||||
synchronized (this) {
|
||||
if(!finished){
|
||||
setVisible(true);
|
||||
}
|
||||
public Object run() throws InvocationTargetException, InterruptedException {
|
||||
finished = false;
|
||||
result = null;
|
||||
new WorkerThread().start();
|
||||
setVisible(true);
|
||||
if (!finished) {
|
||||
|
||||
}
|
||||
if(exception != null){
|
||||
throw exception;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
if (exception != null) {
|
||||
throw exception;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private class WorkerThread extends Thread {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
try {
|
||||
if(run != null){
|
||||
run.run();
|
||||
}
|
||||
} catch(RuntimeException e){
|
||||
exception = new InvocationTargetException(e);
|
||||
} finally {
|
||||
synchronized (this) {
|
||||
finished = true;
|
||||
setVisible(false);
|
||||
if (run != null) {
|
||||
run.run();
|
||||
}
|
||||
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
exception = new InvocationTargetException(e);
|
||||
} finally {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -119,7 +119,7 @@ public class ProgressDialog extends JDialog implements IProgress {
|
|||
|
||||
private void updateMessage() {
|
||||
if(!progressBar.isIndeterminate()){
|
||||
label.setText(taskName + String.format("\t%.1f %%", progressBar.getValue() * 100f / ((float) progressBar.getMaximum())));
|
||||
label.setText(taskName + String.format("\t %.1f %%", progressBar.getValue() * 100f / ((float) progressBar.getMaximum())));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -170,14 +170,23 @@ public class ProgressDialog extends JDialog implements IProgress {
|
|||
if(work == 0){
|
||||
work = 1;
|
||||
}
|
||||
if(work != -1){
|
||||
progressBar.setMinimum(0);
|
||||
progressBar.setMaximum(work);
|
||||
progressBar.setValue(0);
|
||||
progressBar.setIndeterminate(false);
|
||||
} else {
|
||||
progressBar.setIndeterminate(true);
|
||||
}
|
||||
final int w = work;
|
||||
SwingUtilities.invokeLater(new Runnable(){
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if(w != -1){
|
||||
progressBar.setMinimum(0);
|
||||
progressBar.setMaximum(w);
|
||||
progressBar.setValue(0);
|
||||
progressBar.setIndeterminate(false);
|
||||
} else {
|
||||
progressBar.setIndeterminate(true);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
deltaWork = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
package com.osmand.swing;
|
||||
|
||||
import com.osmand.IProgress;
|
||||
|
||||
public class SwingProgressImplementation implements IProgress {
|
||||
|
||||
@Override
|
||||
public void finishTask() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIndeterminate() {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void progress(int deltaWork) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remaining(int remainingWork) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startTask(String taskName, int work) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startWork(int work) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue