source: josm/trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java@ 4310

Last change on this file since 4310 was 3083, checked in by bastiK, 14 years ago

added svn:eol-style=native to source files

  • Property svn:eol-style set to native
File size: 3.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.history;
3
4import java.awt.Dimension;
5import java.awt.Point;
6import java.util.ArrayList;
7import java.util.HashMap;
8import java.util.Map;
9
10import org.openstreetmap.josm.Main;
11import org.openstreetmap.josm.data.osm.history.History;
12import org.openstreetmap.josm.gui.MapView;
13import org.openstreetmap.josm.gui.layer.Layer;
14import org.openstreetmap.josm.tools.WindowGeometry;
15
16public class HistoryBrowserDialogManager implements MapView.LayerChangeListener {
17 static private HistoryBrowserDialogManager instance;
18 static public HistoryBrowserDialogManager getInstance() {
19 if (instance == null) {
20 instance = new HistoryBrowserDialogManager();
21 }
22 return instance;
23 }
24
25 private Map<Long, HistoryBrowserDialog> dialogs;
26
27 protected HistoryBrowserDialogManager() {
28 dialogs = new HashMap<Long, HistoryBrowserDialog>();
29 MapView.addLayerChangeListener(this);
30 }
31
32 public boolean existsDialog(long id) {
33 return dialogs.containsKey(id);
34 }
35
36 public void show(long id, HistoryBrowserDialog dialog) {
37 if (dialogs.values().contains(dialog)) {
38 show(id);
39 } else {
40 placeOnScreen(dialog);
41 dialog.setVisible(true);
42 dialogs.put(id, dialog);
43 }
44 }
45
46 public void show(long id) {
47 if (dialogs.keySet().contains(id)) {
48 dialogs.get(id).toFront();
49 }
50 }
51
52 protected boolean hasDialogWithCloseUpperLeftCorner(Point p) {
53 for (HistoryBrowserDialog dialog: dialogs.values()) {
54 Point corner = dialog.getLocation();
55 if (p.x >= corner.x -5 && corner.x + 5 >= p.x
56 && p.y >= corner.y -5 && corner.y + 5 >= p.y)
57 return true;
58 }
59 return false;
60 }
61
62 public void placeOnScreen(HistoryBrowserDialog dialog) {
63 WindowGeometry geometry = WindowGeometry.centerOnScreen(new Dimension(800,500));
64 geometry.apply(dialog);
65 Point p = dialog.getLocation();
66 while(hasDialogWithCloseUpperLeftCorner(p)) {
67 p.x +=20;
68 p.y += 20;
69 }
70 dialog.setLocation(p);
71 }
72
73 public void hide(HistoryBrowserDialog dialog) {
74 long id = 0;
75 for (long i: dialogs.keySet()) {
76 if (dialogs.get(i) == dialog) {
77 id = i;
78 break;
79 }
80 }
81 if (id > 0) {
82 dialogs.remove(id);
83 }
84 dialog.setVisible(false);
85 dialog.dispose();
86 }
87
88 /**
89 * Hides and destroys all currently visible history browser dialogs
90 *
91 */
92 public void hideAll() {
93 ArrayList<HistoryBrowserDialog> dialogs = new ArrayList<HistoryBrowserDialog>();
94 dialogs.addAll(this.dialogs.values());
95 for (HistoryBrowserDialog dialog: dialogs) {
96 dialog.unlinkAsListener();
97 hide(dialog);
98 }
99 }
100
101 public void show(History h) {
102 if (h == null)
103 return;
104 if (existsDialog(h.getId())) {
105 show(h.getId());
106 } else {
107 HistoryBrowserDialog dialog = new HistoryBrowserDialog(h);
108 show(h.getId(), dialog);
109 }
110 }
111
112 /* ----------------------------------------------------------------------------- */
113 /* LayerChangeListener */
114 /* ----------------------------------------------------------------------------- */
115 public void activeLayerChange(Layer oldLayer, Layer newLayer) {}
116 public void layerAdded(Layer newLayer) {}
117
118 public void layerRemoved(Layer oldLayer) {
119 // remove all history browsers if the number of layers drops to 0
120 //
121 if (Main.map.mapView.getNumLayers() == 0) {
122 hideAll();
123 }
124 }
125}
Note: See TracBrowser for help on using the repository browser.