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

Last change on this file since 2165 was 2019, checked in by Gubaer, 15 years ago

Improved history feature

File size: 2.3 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.HashMap;
7import java.util.Map;
8
9import org.openstreetmap.josm.tools.WindowGeometry;
10
11public class HistoryBrowserDialogManager {
12 static private HistoryBrowserDialogManager instance;
13 static public HistoryBrowserDialogManager getInstance() {
14 if (instance == null) {
15 instance = new HistoryBrowserDialogManager();
16 }
17 return instance;
18 }
19
20 private Map<Long, HistoryBrowserDialog> dialogs;
21
22 protected HistoryBrowserDialogManager() {
23 dialogs = new HashMap<Long, HistoryBrowserDialog>();
24 }
25
26 public boolean existsDialog(long id) {
27 return dialogs.containsKey(id);
28 }
29
30 public void show(long id, HistoryBrowserDialog dialog) {
31 if (dialogs.values().contains(dialog)) {
32 show(id);
33 } else {
34 placeOnScreen(dialog);
35 dialog.setVisible(true);
36 dialogs.put(id, dialog);
37 }
38 }
39
40 public void show(long id) {
41 if (dialogs.keySet().contains(id)) {
42 dialogs.get(id).toFront();
43 }
44 }
45
46 protected boolean hasDialogWithCloseUpperLeftCorner(Point p) {
47 for (HistoryBrowserDialog dialog: dialogs.values()) {
48 Point corner = dialog.getLocation();
49 if (p.x >= corner.x -5 && corner.x + 5 >= p.x
50 && p.y >= corner.y -5 && corner.y + 5 >= p.y)
51 return true;
52 }
53 return false;
54 }
55
56 public void placeOnScreen(HistoryBrowserDialog dialog) {
57 WindowGeometry geometry = WindowGeometry.centerOnScreen(new Dimension(800,500));
58 geometry.apply(dialog);
59 Point p = dialog.getLocation();
60 while(hasDialogWithCloseUpperLeftCorner(p)) {
61 p.x +=20;
62 p.y += 20;
63 }
64 dialog.setLocation(p);
65 }
66
67 public void hide(HistoryBrowserDialog dialog) {
68 long id = 0;
69 for (long i: dialogs.keySet()) {
70 if (dialogs.get(i) == dialog) {
71 id = i;
72 break;
73 }
74 }
75 if (id > 0) {
76 dialogs.remove(id);
77 }
78 dialog.setVisible(false);
79 dialog.dispose();
80 }
81}
Note: See TracBrowser for help on using the repository browser.