source: josm/trunk/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java@ 3872

Last change on this file since 3872 was 3872, checked in by stoecker, 13 years ago

see #5532 - add missing addProjectsions() function nobody seems able to add when asked to do so

  • Property svn:eol-style set to native
File size: 4.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.imagery;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.util.ArrayList;
7import java.util.Collection;
8import java.util.Collections;
9import java.util.LinkedList;
10import java.util.List;
11import java.util.ListIterator;
12
13import org.openstreetmap.josm.Main;
14import org.openstreetmap.josm.data.coor.LatLon;
15import org.openstreetmap.josm.data.projection.Projection;
16import org.openstreetmap.josm.data.projection.Projections;
17import org.openstreetmap.josm.data.projection.ProjectionInfo;
18import org.openstreetmap.josm.gui.layer.ImageryLayer;
19
20public class OffsetBookmark {
21 public static List<OffsetBookmark> allBookmarks = new ArrayList<OffsetBookmark>();
22
23 public Projection proj;
24 public String layerName;
25 public String name;
26 public double dx, dy;
27 public double centerX, centerY;
28
29 public boolean isUsable(ImageryLayer layer) {
30 if (proj == null) return false;
31 if (!Main.proj.toCode().equals(proj.toCode())) return false;
32 return layer.getInfo().getName().equals(layerName);
33 }
34
35 public OffsetBookmark(Projection proj, String layerName, String name, double dx, double dy) {
36 this(proj, layerName, name, dx, dy, 0, 0);
37 }
38
39 public OffsetBookmark(Projection proj, String layerName, String name, double dx, double dy, double centerX, double centerY) {
40 this.proj = proj;
41 this.layerName = layerName;
42 this.name = name;
43 this.dx = dx;
44 this.dy = dy;
45 this.centerX = centerX;
46 this.centerY = centerY;
47 }
48
49 public OffsetBookmark(Collection<String> list) {
50 ArrayList<String> array = new ArrayList<String>(list);
51 String projectionStr = array.get(0);
52 proj = ProjectionInfo.getProjectionByCode(projectionStr);
53 if (proj == null) {
54 for (Projection proj : Projections.getProjections()) {
55 if (proj.getCacheDirectoryName().equals(projectionStr)) {
56 this.proj = proj;
57 break;
58 }
59 }
60 }
61 this.layerName = array.get(1);
62 this.name = array.get(2);
63 this.dx = Double.valueOf(array.get(3));
64 this.dy = Double.valueOf(array.get(4));
65 if (array.size() >= 7) {
66 this.centerX = Double.valueOf(array.get(5));
67 this.centerY = Double.valueOf(array.get(6));
68 }
69 if (proj == null) {
70 System.err.println(tr("Projection ''{0}'' is not found, bookmark ''{1}'' is not usable", projectionStr, name));
71 }
72 }
73
74 public ArrayList<String> getInfoArray() {
75 ArrayList<String> res = new ArrayList<String>(7);
76 if (proj != null) {
77 res.add(proj.toCode());
78 } else {
79 res.add("");
80 }
81 res.add(layerName);
82 res.add(name);
83 res.add(String.valueOf(dx));
84 res.add(String.valueOf(dy));
85 if (this.centerX != 0 || this.centerY != 0) {
86 res.add(String.valueOf(centerX));
87 res.add(String.valueOf(centerY));
88 }
89 return res;
90 }
91
92 public static void loadBookmarks() {
93 for(Collection<String> c : Main.pref.getArray("imagery.offsets",
94 Collections.<Collection<String>>emptySet())) {
95 allBookmarks.add(new OffsetBookmark(c));
96 }
97 }
98
99 public static void saveBookmarks() {
100 LinkedList<Collection<String>> coll = new LinkedList<Collection<String>>();
101 for (OffsetBookmark b : allBookmarks) {
102 coll.add(b.getInfoArray());
103 }
104 Main.pref.putArray("imagery.offsets", coll);
105 }
106
107 public static OffsetBookmark getBookmarkByName(ImageryLayer layer, String name) {
108 for (OffsetBookmark b : allBookmarks) {
109 if (b.isUsable(layer) && name.equals(b.name))
110 return b;
111 }
112 return null;
113 }
114
115 public static void bookmarkOffset(String name, ImageryLayer layer) {
116 LatLon center;
117 if (Main.map != null && Main.map.mapView != null) {
118 center = Main.proj.eastNorth2latlon(Main.map.mapView.getCenter());
119 } else {
120 center = new LatLon(0,0);
121 }
122 OffsetBookmark nb = new OffsetBookmark(
123 Main.proj, layer.getInfo().getName(),
124 name, layer.getDx(), layer.getDy(), center.lon(), center.lat());
125 for (ListIterator<OffsetBookmark> it = allBookmarks.listIterator();it.hasNext();) {
126 OffsetBookmark b = it.next();
127 if (b.isUsable(layer) && name.equals(b.name)) {
128 it.set(nb);
129 saveBookmarks();
130 return;
131 }
132 }
133 allBookmarks.add(nb);
134 saveBookmarks();
135 }
136}
Note: See TracBrowser for help on using the repository browser.